Compare commits

...

50 commits
v0.1 ... master

Author SHA1 Message Date
Fabian Montero d2eb1518c7
vps: add mealie 2025-02-12 19:01:17 -06:00
Fabian Montero 1755bf7d18
add deepState dependencies 2025-02-07 18:53:00 -06:00
Fabian Montero 8ecb978605
update syncthing module 2025-02-07 16:41:07 -06:00
Fabian Montero d26ff604e6
add syncthing 2025-02-07 14:21:59 -06:00
Fabian Montero 95930bc83e
improve firefox module 2025-02-07 13:44:32 -06:00
Fabian Montero 86cf517738
update firefox module 2025-01-31 08:33:02 -06:00
Fabian Montero 7854100358
apply formatter 2025-01-31 08:24:40 -06:00
Fabian Montero d7ea157761
vps: enable forgejo actions 2025-01-28 12:51:49 -06:00
Fabian Montero 48d230a108
improve firefox module 2025-01-28 12:30:06 -06:00
Fabian Montero d7f1c06f40
modularize gui and browsers modules 2025-01-28 12:15:31 -06:00
Fabian Montero 5b194ca54a
add readme 2025-01-27 23:21:05 -06:00
Fabian Montero 62a361c5eb
apply formatter and fix typo 2025-01-27 23:17:54 -06:00
Fabian Montero ae37ebf22a
vps: add wiki-js 2025-01-27 23:17:12 -06:00
Fabian Montero cbda46edd5
modularize steam 2025-01-27 19:52:25 -06:00
Fabian Montero 9f0e9811e3
home: remove zoom 2025-01-27 19:51:38 -06:00
Fabian Montero 4acb6e2408
split theme into its own module and add xdg configuration 2025-01-27 19:01:09 -06:00
Fabian Montero 7f692459a9
add vpn addresses to fail2ban whitelist 2025-01-25 00:15:24 -06:00
Fabian Montero 4a7bda944f
add ipv6 support, net module and wireguard vpn 2025-01-25 00:10:50 -06:00
Fabian Montero 63a190bc7c
vps: change syncthing datadir to vps NAS 2025-01-24 12:00:01 -06:00
Fabian Montero 09a74648a1
vps: reduce immich worker concurrency 2025-01-24 11:59:23 -06:00
Fabian Montero 3fefd5b072
apply formatter 2025-01-23 13:16:29 -06:00
Fabian Montero 9636646eb4
vps: add immich 2025-01-23 13:15:59 -06:00
Fabian Montero 7748c67e45
vps: add nas exports for immich and syncthing 2025-01-23 12:25:43 -06:00
Fabian Montero 22eecd6e66
remove 2011 nas export
this was used for bepasty
2025-01-23 12:15:39 -06:00
Fabian Montero a785cce6b0
vps: add mosh 2025-01-23 10:03:33 -06:00
Fabian Montero dd6a8f9e1c
vps: add calibre 2025-01-23 09:54:43 -06:00
Fabian Montero 05d397f53e
vps: add shiori 2025-01-23 08:16:51 -06:00
Fabian Montero 6372c2bc04
update flake.nix
homepage updated
2025-01-23 07:49:00 -06:00
Fabian Montero 9db5b156dd
vps: remove unused modues
authentik
bepasty
firefly
jellyfin
jitsi
kuma
roundcube
2025-01-23 07:40:49 -06:00
Fabian Montero 4e63a64248
vps: add syncthing 2025-01-23 06:30:15 -06:00
Fabian Montero 8c2e1b74ef
vps: upgrade to trilium-next 2025-01-21 08:53:29 -06:00
Fabian Montero 86e778fe8b
flake.lock: Update
Flake lock file updates:

• Updated input 'nur':
    'github:nix-community/NUR/475fc8ab8cc0883a25e1a7fa2ac8c58599c49684?narHash=sha256-Y0bQJP6mRKodHiYS0i0WIu/NW1S8m5C1C5mBNzawhik%3D' (2025-01-20)
  → 'github:nix-community/NUR/a44b412c5d24f7bb55d81370501a8f9e6e824ec6?narHash=sha256-St/dzvMCXfPPZNJME5bi86n4mEuohG9pMKp%2Ba9l5ZqI%3D' (2025-01-21)
2025-01-21 08:48:34 -06:00
Fabian Montero 3c2751c807
flake.lock: Update
Flake lock file updates:

• Updated input 'authentik-nix':
    'github:nix-community/authentik-nix/5db6f7711a28abd4b6bbe152c8a7de9d00b1e30d?narHash=sha256-a/sqKV5GvqEcQEGfUGQkhWaUnqIRi8oiDAHbBG1oFZg%3D' (2025-01-04)
  → 'github:nix-community/authentik-nix/bf5a5bf42189ff5f468f0ff26c9296233a97eb6c?narHash=sha256-%2Bf1MWPtja%2BLRlTHJP/i/3yxmnzo2LGtZmxtJJTdAp8o%3D' (2025-01-09)
• Updated input 'authentik-nix/authentik-src':
    'github:goauthentik/authentik/e87a17fd8169d3fa92bcc47eb2743928df83bc95?narHash=sha256-CkUmsVKzAQ/VWIhtxWxlcGtrWVa8hxqsMqvfcsG5ktA%3D' (2024-12-23)
  → 'github:goauthentik/authentik/9d81f0598c7735e2b4616ee865ab896056a67408?narHash=sha256-Z3rFFrXrOKaF9NpY/fInsEbzdOWnWqLfEYl7YX9hFEU%3D' (2025-01-09)
• Updated input 'home-manager':
    'github:nix-community/home-manager/613691f285dad87694c2ba1c9e6298d04736292d?narHash=sha256-oJDtWPH1oJT34RJK1FSWjwX4qcGOBRkcNQPD0EbSfNM%3D' (2024-12-28)
  → 'github:nix-community/home-manager/bd65bc3cde04c16755955630b344bc9e35272c56?narHash=sha256-dinzAqCjenWDxuy%2BMqUQq0I4zUSfaCvN9rzuCmgMZJY%3D' (2025-01-08)
• Updated input 'impermanence':
    'github:nix-community/impermanence/d000479f4f41390ff7cf9204979660ad5dd16176?narHash=sha256-olIfsfJK4/GFmPH8mXMmBDAkzVQ1TWJmeGT3wBGfQPY%3D' (2024-12-23)
  → 'github:nix-community/impermanence/c64bed13b562fc3bb454b48773d4155023ac31b7?narHash=sha256-1Zl9xahw399UiZSJ9Vxs1W4WRFjO1SsNdVZQD4nghz0%3D' (2025-01-12)
• Updated input 'nixpkgs':
    'github:nixos/nixpkgs/cbd8ec4de4469333c82ff40d057350c30e9f7d36?narHash=sha256-DjkQPnkAfd7eB522PwnkGhOMuT9QVCZspDpJJYyOj60%3D' (2025-01-05)
  → 'github:nixos/nixpkgs/107d5ef05c0b1119749e381451389eded30fb0d5?narHash=sha256-Qw2PwmkXDK8sPQ5YQ/y/icbQ%2BTYgbxfjhgnkNJyT1X8%3D' (2025-01-19)
• Updated input 'nur':
    'github:nix-community/NUR/c03408924cf08dea2eb171942d6b3e463b2741dc?narHash=sha256-pVNRdhEA32ZyiernLrsvpzxxCw2zV7lbw5lzYhHcPU8%3D' (2025-01-06)
  → 'github:nix-community/NUR/475fc8ab8cc0883a25e1a7fa2ac8c58599c49684?narHash=sha256-Y0bQJP6mRKodHiYS0i0WIu/NW1S8m5C1C5mBNzawhik%3D' (2025-01-20)
• Updated input 'nur/nixpkgs':
    'github:nixos/nixpkgs/6df24922a1400241dae323af55f30e4318a6ca65?narHash=sha256-dklw3AXr3OGO4/XT1Tu3Xz9n/we8GctZZ75ZWVqAVhk%3D' (2025-01-02)
  → 'github:nixos/nixpkgs/5df43628fdf08d642be8ba5b3625a6c70731c19c?narHash=sha256-Tbk1MZbtV2s5aG%2BiM99U8FqwxU/YNArMcWAv6clcsBc%3D' (2025-01-16)
• Updated input 'unstable':
    'github:nixos/nixpkgs/6df24922a1400241dae323af55f30e4318a6ca65?narHash=sha256-dklw3AXr3OGO4/XT1Tu3Xz9n/we8GctZZ75ZWVqAVhk%3D' (2025-01-02)
  → 'github:nixos/nixpkgs/5df43628fdf08d642be8ba5b3625a6c70731c19c?narHash=sha256-Tbk1MZbtV2s5aG%2BiM99U8FqwxU/YNArMcWAv6clcsBc%3D' (2025-01-16)
• Updated input 'vpsadminos':
    'github:vpsfreecz/vpsadminos/83ddccf4462f155f12596af773e9291d7ebc37a3?narHash=sha256-xZEbuwAAbxwujrGtuydDNBjzMLnE9YOcuLv3hdudZe4%3D' (2024-12-17)
  → 'github:vpsfreecz/vpsadminos/0af10d77ca146293b2ed19d5dcfd98474f1fc285?narHash=sha256-wMy7IbQs87VUxJOqRSbfFIdxRRTUBQh8G1L/zwI36vY%3D' (2025-01-17)
2025-01-19 21:07:30 -06:00
Fabian Montero 9cbd93c9fd
add xdg portal 2025-01-19 21:06:35 -06:00
Fabian Montero 534d3b0032
vps: remove templatestyles 2025-01-09 03:00:19 -06:00
Fabian Montero dd862904fe
configure gajim 2025-01-09 00:13:25 -06:00
Fabian Montero 2e0c03a5ec
fix qt, gtk and darkmode settings 2025-01-05 23:31:19 -06:00
Fabian Montero 97056c6bfc
flake.lock: Update
Flake lock file updates:

• Updated input 'nixpkgs':
    'github:nixos/nixpkgs/d29ab98cd4a70a387b8ceea3e930b3340d41ac5a?narHash=sha256-vk0xwGZSlvZ/596yxOtsk4gxsIx2VemzdjiU8zhjgWw%3D' (2025-01-03)
  → 'github:nixos/nixpkgs/cbd8ec4de4469333c82ff40d057350c30e9f7d36?narHash=sha256-DjkQPnkAfd7eB522PwnkGhOMuT9QVCZspDpJJYyOj60%3D' (2025-01-05)
• Updated input 'nur':
    'github:nix-community/NUR/c069281f9ef15582d5c1c59995e9d6cf2c0ed1b6?narHash=sha256-E2pP/HI/adDIzDhYR25xlTQpvMnssZPhozHbTg66H/E%3D' (2025-01-05)
  → 'github:nix-community/NUR/c03408924cf08dea2eb171942d6b3e463b2741dc?narHash=sha256-pVNRdhEA32ZyiernLrsvpzxxCw2zV7lbw5lzYhHcPU8%3D' (2025-01-06)
2025-01-05 22:29:37 -06:00
Fabian Montero 3e0e6e4d5d
add xdg config 2025-01-05 22:23:56 -06:00
Fabian Montero bc73e4b350
add pv 2025-01-05 21:04:10 -06:00
Fabian Montero 5bfbb7ebe5
even more dark theme 2025-01-05 20:33:01 -06:00
Fabian Montero 03952d8198
posixlycorrect: add gajim 2025-01-05 02:00:58 -06:00
Fabian Montero 4c33c15c11
replace nur.overlay with nur.overlays.default 2025-01-05 01:47:55 -06:00
Fabian Montero 3803a1e1b9
add dark theme to everything 2025-01-05 01:45:40 -06:00
Fabian Montero b5cd20b71b
remove conduit 2025-01-05 01:37:58 -06:00
Fabian Montero dd202a0c99
flake.lock: Update
Flake lock file updates:

• Updated input 'authentik-nix':
    'github:nix-community/authentik-nix/9d9c0a3a94a91cfed654a18239e27cf56970daa4?narHash=sha256-P2VVlzRGKBNsiHsN1yMZcSMXpwtIx9ysMFZAqKFJ14o%3D' (2024-11-21)
  → 'github:nix-community/authentik-nix/5db6f7711a28abd4b6bbe152c8a7de9d00b1e30d?narHash=sha256-a/sqKV5GvqEcQEGfUGQkhWaUnqIRi8oiDAHbBG1oFZg%3D' (2025-01-04)
• Updated input 'authentik-nix/authentik-src':
    'github:goauthentik/authentik/527e584699abc93712114b05f70f59c5187caa66?narHash=sha256-4Pv35cnZGiTxe6j2O0F9L9sHzxVIC1SazeAUD5kWeBs%3D' (2024-11-21)
  → 'github:goauthentik/authentik/e87a17fd8169d3fa92bcc47eb2743928df83bc95?narHash=sha256-CkUmsVKzAQ/VWIhtxWxlcGtrWVa8hxqsMqvfcsG5ktA%3D' (2024-12-23)
• Updated input 'authentik-nix/poetry2nix':
    'github:nix-community/poetry2nix/43a898b4d76f7f3f70df77a2cc2d40096bc9d75e?narHash=sha256-eHYcKVLIRRv3J1vjmxurS6HVdGphB53qxUeAkylYrZY%3D' (2024-10-30)
  → 'github:nix-community/poetry2nix/1fb01e90771f762655be7e0e805516cd7fa4d58e?narHash=sha256-DaWy%2Bvo3c4TQ93tfLjUgcpPaSoDw4qV4t76Y3Mhu84I%3D' (2024-12-25)
• Updated input 'conduwuit/nixpkgs':
    'github:NixOS/nixpkgs/55d15ad12a74eb7d4646254e13638ad0c4128776?narHash=sha256-M1%2BuCoV5igihRfcUKrr1riygbe73/dzNnzPsmaLCmpo%3D' (2024-12-03)
  → 'github:NixOS/nixpkgs/7e7c39ea35c5cdd002cd4588b03a3fb9ece6fad9?narHash=sha256-EYekUHJE2gxeo2pM/zM9Wlqw1Uw2XTJXOSAO79ksc4Y%3D' (2024-07-12)
• Updated input 'home-manager':
    'github:nix-community/home-manager/f3111f62a23451114433888902a55cf0692b408d?narHash=sha256-T1e5oceypZu3Q8vzICjv1X/sGs9XfJRMW5OuXHgpB3c%3D' (2024-11-24)
  → 'github:nix-community/home-manager/613691f285dad87694c2ba1c9e6298d04736292d?narHash=sha256-oJDtWPH1oJT34RJK1FSWjwX4qcGOBRkcNQPD0EbSfNM%3D' (2024-12-28)
• Updated input 'impermanence':
    'github:nix-community/impermanence/3ed3f0eaae9fcc0a8331e77e9319c8a4abd8a71a?narHash=sha256-B3C3JLbGw0FtLSWCjBxU961gLNv%2BBOOBC6WvstKLYMw%3D' (2024-11-10)
  → 'github:nix-community/impermanence/d000479f4f41390ff7cf9204979660ad5dd16176?narHash=sha256-olIfsfJK4/GFmPH8mXMmBDAkzVQ1TWJmeGT3wBGfQPY%3D' (2024-12-23)
• Updated input 'nixpkgs':
    'github:nixos/nixpkgs/c71ad5c34d51dcbda4c15f44ea4e4aa6bb6ac1e9?narHash=sha256-fYNXgpu1AEeLyd3fQt4Ym0tcVP7cdJ8wRoqJ%2BCtTRyY%3D' (2024-11-28)
  → 'github:nixos/nixpkgs/d29ab98cd4a70a387b8ceea3e930b3340d41ac5a?narHash=sha256-vk0xwGZSlvZ/596yxOtsk4gxsIx2VemzdjiU8zhjgWw%3D' (2025-01-03)
• Updated input 'nur':
    'github:nix-community/NUR/d711073b26533360c2bc595b4e6a824b873f8e22?narHash=sha256-d/wq3j57flyYQ1F3s/B2f0bHCaOKF6d7JTxzfMCGRmw%3D' (2024-12-01)
  → 'github:nix-community/NUR/c069281f9ef15582d5c1c59995e9d6cf2c0ed1b6?narHash=sha256-E2pP/HI/adDIzDhYR25xlTQpvMnssZPhozHbTg66H/E%3D' (2025-01-05)
• Added input 'nur/flake-parts':
    'github:hercules-ci/flake-parts/205b12d8b7cd4802fbcb8e8ef6a0f1408781a4f9?narHash=sha256-4pDvzqnegAfRkPwO3wmwBhVi/Sye1mzps0zHWYnP88c%3D' (2024-12-04)
• Added input 'nur/flake-parts/nixpkgs-lib':
    follows 'nur/nixpkgs'
• Added input 'nur/nixpkgs':
    'github:nixos/nixpkgs/6df24922a1400241dae323af55f30e4318a6ca65?narHash=sha256-dklw3AXr3OGO4/XT1Tu3Xz9n/we8GctZZ75ZWVqAVhk%3D' (2025-01-02)
• Added input 'nur/treefmt-nix':
    'github:numtide/treefmt-nix/49717b5af6f80172275d47a418c9719a31a78b53?narHash=sha256-JIPcz1PrpXUCbaccEnrcUS8jjEb/1vJbZz5KkobyFdM%3D' (2024-12-03)
• Added input 'nur/treefmt-nix/nixpkgs':
    follows 'nur/nixpkgs'
• Updated input 'unstable':
    'github:nixos/nixpkgs/970e93b9f82e2a0f3675757eb0bfc73297cc6370?narHash=sha256-jNRNr49UiuIwaarqijgdTR2qLPifxsVhlJrKzQ8XUIE%3D' (2024-11-28)
  → 'github:nixos/nixpkgs/6df24922a1400241dae323af55f30e4318a6ca65?narHash=sha256-dklw3AXr3OGO4/XT1Tu3Xz9n/we8GctZZ75ZWVqAVhk%3D' (2025-01-02)
• Updated input 'vpsadminos':
    'github:vpsfreecz/vpsadminos/adea302cd4033be844cd033d30bc552270025331?narHash=sha256-n1JQ6x5nh7/sgKKe8uWWdrw2pz2tkJm6IRpI5%2BI1chI%3D' (2024-11-30)
  → 'github:vpsfreecz/vpsadminos/83ddccf4462f155f12596af773e9291d7ebc37a3?narHash=sha256-xZEbuwAAbxwujrGtuydDNBjzMLnE9YOcuLv3hdudZe4%3D' (2024-12-17)
2025-01-05 01:37:36 -06:00
Fabian Montero 5ccd556ae4
remove matrix 2025-01-05 01:36:36 -06:00
Fabian Montero d00756c2d5
add gnucash 2024-12-04 15:41:54 -06:00
Fabian Montero 6d8d9fe28c
add todos 2024-12-03 00:33:08 -06:00
Fabian Montero ba80ec391a
hide titlebars and default to tabbed workspace layout 2024-12-03 00:31:41 -06:00
43 changed files with 939 additions and 499 deletions

11
README.md Normal file
View file

@ -0,0 +1,11 @@
## Unified nix configuration
Switch server: `nixos-rebuild switch --target-host root@posixlycorrect.com --use-substitutes --show-trace --flake .\#vps`
Switch current machine: `sudo nixos-rebuild switch --flake . --show-trace`
Switch current home manager: `home-manager switch --flake . --show-trace`
Update homepage: `nix flake update --commit-lock-file --update-input homepage`
Update whole flake: `nix flake update --commit-lock-file`

View file

@ -37,11 +37,11 @@
"systems": "systems"
},
"locked": {
"lastModified": 1732215451,
"narHash": "sha256-P2VVlzRGKBNsiHsN1yMZcSMXpwtIx9ysMFZAqKFJ14o=",
"lastModified": 1736445563,
"narHash": "sha256-+f1MWPtja+LRlTHJP/i/3yxmnzo2LGtZmxtJJTdAp8o=",
"owner": "nix-community",
"repo": "authentik-nix",
"rev": "9d9c0a3a94a91cfed654a18239e27cf56970daa4",
"rev": "bf5a5bf42189ff5f468f0ff26c9296233a97eb6c",
"type": "github"
},
"original": {
@ -53,16 +53,16 @@
"authentik-src": {
"flake": false,
"locked": {
"lastModified": 1732213300,
"narHash": "sha256-4Pv35cnZGiTxe6j2O0F9L9sHzxVIC1SazeAUD5kWeBs=",
"lastModified": 1736440980,
"narHash": "sha256-Z3rFFrXrOKaF9NpY/fInsEbzdOWnWqLfEYl7YX9hFEU=",
"owner": "goauthentik",
"repo": "authentik",
"rev": "527e584699abc93712114b05f70f59c5187caa66",
"rev": "9d81f0598c7735e2b4616ee865ab896056a67408",
"type": "github"
},
"original": {
"owner": "goauthentik",
"ref": "version/2024.10.4",
"ref": "version/2024.12.2",
"repo": "authentik",
"type": "github"
}
@ -153,24 +153,19 @@
"flake-utils": "flake-utils_4",
"liburing": "liburing",
"nix-filter": "nix-filter",
"nixpkgs": [
"unstable"
],
"nixpkgs": "nixpkgs_4",
"rocksdb": "rocksdb"
},
"locked": {
"lastModified": 1721105087,
"narHash": "sha256-t74TUSswsCkOdZCKjgP74qEHKg78ShKTkP6x9/zqYX4=",
"owner": "girlbossceo",
"repo": "conduwuit",
"path": "/nix/store/sw263a1qb3z8qc6bb78fm4mslsz5ya7i-source",
"rev": "c29197b3f457cf72197ef5251f9815107b2526d7",
"type": "github"
"type": "path"
},
"original": {
"owner": "girlbossceo",
"ref": "v0.4.5",
"repo": "conduwuit",
"type": "github"
"id": "conduwuit",
"type": "indirect"
}
},
"crane": {
@ -424,6 +419,27 @@
"type": "github"
}
},
"flake-parts_2": {
"inputs": {
"nixpkgs-lib": [
"nur",
"nixpkgs"
]
},
"locked": {
"lastModified": 1733312601,
"narHash": "sha256-4pDvzqnegAfRkPwO3wmwBhVi/Sye1mzps0zHWYnP88c=",
"owner": "hercules-ci",
"repo": "flake-parts",
"rev": "205b12d8b7cd4802fbcb8e8ef6a0f1408781a4f9",
"type": "github"
},
"original": {
"owner": "hercules-ci",
"repo": "flake-parts",
"type": "github"
}
},
"flake-utils": {
"inputs": {
"systems": [
@ -593,11 +609,11 @@
]
},
"locked": {
"lastModified": 1732466619,
"narHash": "sha256-T1e5oceypZu3Q8vzICjv1X/sGs9XfJRMW5OuXHgpB3c=",
"lastModified": 1736373539,
"narHash": "sha256-dinzAqCjenWDxuy+MqUQq0I4zUSfaCvN9rzuCmgMZJY=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "f3111f62a23451114433888902a55cf0692b408d",
"rev": "bd65bc3cde04c16755955630b344bc9e35272c56",
"type": "github"
},
"original": {
@ -610,14 +626,14 @@
"homepage": {
"inputs": {
"flake-utils": "flake-utils_6",
"nixpkgs": "nixpkgs_4"
"nixpkgs": "nixpkgs_5"
},
"locked": {
"lastModified": 1732147487,
"narHash": "sha256-RLJfwlKWbKIlpTG0ocVxVl8sONMI/iE9t+viBkbPP8U=",
"lastModified": 1737639979,
"narHash": "sha256-GP4bOkJMWSp55OpkBmP4VP1S2MUxmXF36fBX6/qxyOw=",
"ref": "master",
"rev": "e5a63ce5af105227df8ed01447919b013cb9a0f2",
"revCount": 23,
"rev": "a07048bb01ee5fb12f683366315fd3fde4f15412",
"revCount": 24,
"type": "git",
"url": "https://git.posixlycorrect.com/fabian/homepage.git"
},
@ -629,11 +645,11 @@
},
"impermanence": {
"locked": {
"lastModified": 1731242966,
"narHash": "sha256-B3C3JLbGw0FtLSWCjBxU961gLNv+BOOBC6WvstKLYMw=",
"lastModified": 1736688610,
"narHash": "sha256-1Zl9xahw399UiZSJ9Vxs1W4WRFjO1SsNdVZQD4nghz0=",
"owner": "nix-community",
"repo": "impermanence",
"rev": "3ed3f0eaae9fcc0a8331e77e9319c8a4abd8a71a",
"rev": "c64bed13b562fc3bb454b48773d4155023ac31b7",
"type": "github"
},
"original": {
@ -797,7 +813,7 @@
"nixGL": {
"inputs": {
"flake-utils": "flake-utils_7",
"nixpkgs": "nixpkgs_5"
"nixpkgs": "nixpkgs_6"
},
"locked": {
"lastModified": 1713543440,
@ -969,6 +985,22 @@
}
},
"nixpkgs_4": {
"locked": {
"lastModified": 1720768451,
"narHash": "sha256-EYekUHJE2gxeo2pM/zM9Wlqw1Uw2XTJXOSAO79ksc4Y=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "7e7c39ea35c5cdd002cd4588b03a3fb9ece6fad9",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_5": {
"locked": {
"lastModified": 1719426051,
"narHash": "sha256-yJL9VYQhaRM7xs0M867ZFxwaONB9T2Q4LnGo1WovuR4=",
@ -981,7 +1013,7 @@
"type": "indirect"
}
},
"nixpkgs_5": {
"nixpkgs_6": {
"locked": {
"lastModified": 1660551188,
"narHash": "sha256-a1LARMMYQ8DPx1BgoI/UN4bXe12hhZkCNqdxNi6uS0g=",
@ -996,13 +1028,13 @@
"type": "github"
}
},
"nixpkgs_6": {
"nixpkgs_7": {
"locked": {
"lastModified": 1732824227,
"narHash": "sha256-fYNXgpu1AEeLyd3fQt4Ym0tcVP7cdJ8wRoqJ+CtTRyY=",
"lastModified": 1737299813,
"narHash": "sha256-Qw2PwmkXDK8sPQ5YQ/y/icbQ+TYgbxfjhgnkNJyT1X8=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "c71ad5c34d51dcbda4c15f44ea4e4aa6bb6ac1e9",
"rev": "107d5ef05c0b1119749e381451389eded30fb0d5",
"type": "github"
},
"original": {
@ -1012,13 +1044,34 @@
"type": "github"
}
},
"nur": {
"nixpkgs_8": {
"locked": {
"lastModified": 1733015936,
"narHash": "sha256-d/wq3j57flyYQ1F3s/B2f0bHCaOKF6d7JTxzfMCGRmw=",
"lastModified": 1737062831,
"narHash": "sha256-Tbk1MZbtV2s5aG+iM99U8FqwxU/YNArMcWAv6clcsBc=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "5df43628fdf08d642be8ba5b3625a6c70731c19c",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nur": {
"inputs": {
"flake-parts": "flake-parts_2",
"nixpkgs": "nixpkgs_8",
"treefmt-nix": "treefmt-nix_2"
},
"locked": {
"lastModified": 1737464637,
"narHash": "sha256-St/dzvMCXfPPZNJME5bi86n4mEuohG9pMKp+a9l5ZqI=",
"owner": "nix-community",
"repo": "NUR",
"rev": "d711073b26533360c2bc595b4e6a824b873f8e22",
"rev": "a44b412c5d24f7bb55d81370501a8f9e6e824ec6",
"type": "github"
},
"original": {
@ -1045,11 +1098,11 @@
"treefmt-nix": "treefmt-nix"
},
"locked": {
"lastModified": 1730284601,
"narHash": "sha256-eHYcKVLIRRv3J1vjmxurS6HVdGphB53qxUeAkylYrZY=",
"lastModified": 1735164664,
"narHash": "sha256-DaWy+vo3c4TQ93tfLjUgcpPaSoDw4qV4t76Y3Mhu84I=",
"owner": "nix-community",
"repo": "poetry2nix",
"rev": "43a898b4d76f7f3f70df77a2cc2d40096bc9d75e",
"rev": "1fb01e90771f762655be7e0e805516cd7fa4d58e",
"type": "github"
},
"original": {
@ -1138,7 +1191,7 @@
"impermanence": "impermanence",
"mediawikiSkinCitizen": "mediawikiSkinCitizen",
"nixGL": "nixGL",
"nixpkgs": "nixpkgs_6",
"nixpkgs": "nixpkgs_7",
"nur": "nur",
"unstable": "unstable",
"vpsadminos": "vpsadminos"
@ -1258,13 +1311,34 @@
"type": "github"
}
},
"treefmt-nix_2": {
"inputs": {
"nixpkgs": [
"nur",
"nixpkgs"
]
},
"locked": {
"lastModified": 1733222881,
"narHash": "sha256-JIPcz1PrpXUCbaccEnrcUS8jjEb/1vJbZz5KkobyFdM=",
"owner": "numtide",
"repo": "treefmt-nix",
"rev": "49717b5af6f80172275d47a418c9719a31a78b53",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "treefmt-nix",
"type": "github"
}
},
"unstable": {
"locked": {
"lastModified": 1732837521,
"narHash": "sha256-jNRNr49UiuIwaarqijgdTR2qLPifxsVhlJrKzQ8XUIE=",
"lastModified": 1737062831,
"narHash": "sha256-Tbk1MZbtV2s5aG+iM99U8FqwxU/YNArMcWAv6clcsBc=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "970e93b9f82e2a0f3675757eb0bfc73297cc6370",
"rev": "5df43628fdf08d642be8ba5b3625a6c70731c19c",
"type": "github"
},
"original": {
@ -1276,11 +1350,11 @@
},
"vpsadminos": {
"locked": {
"lastModified": 1732972373,
"narHash": "sha256-n1JQ6x5nh7/sgKKe8uWWdrw2pz2tkJm6IRpI5+I1chI=",
"lastModified": 1737136524,
"narHash": "sha256-wMy7IbQs87VUxJOqRSbfFIdxRRTUBQh8G1L/zwI36vY=",
"owner": "vpsfreecz",
"repo": "vpsadminos",
"rev": "adea302cd4033be844cd033d30bc552270025331",
"rev": "0af10d77ca146293b2ed19d5dcfd98474f1fc285",
"type": "github"
},
"original": {

View file

@ -17,12 +17,6 @@
homepage.url = "git+https://git.posixlycorrect.com/fabian/homepage.git?ref=master";
conduwuit = {
url = "github:girlbossceo/conduwuit?ref=v0.4.5";
#FIXME: Podrá volver a "nixpkgs" una vez que rocksdb.enableLiburing llegue a stable
inputs.nixpkgs.follows = "unstable";
};
authentik-nix = {
url = "github:nix-community/authentik-nix";
inputs.nixpkgs.follows = "nixpkgs";
@ -59,7 +53,7 @@
config = import ./pkgs/config nixpkgs.lib;
overlays = [
self.overlays.default
nur.overlay
nur.overlays.default
nixGL.overlay
];
};

View file

@ -11,7 +11,9 @@ in {
enable = mkEnableOption "Basic home settings";
};
config = mkIf cfg.enable {
xdg.enable = true;
xdg = {
enable = true;
};
home = {
stateVersion = "24.05"; # DO NOT CHANGE
@ -24,6 +26,7 @@ in {
killall
man-pages
man-pages-posix
pv
tree
units
unzip

View file

@ -1,19 +0,0 @@
{
config,
lib,
pkgs,
...
}:
with lib; let
cfg = config.local.apps.browsers;
in {
options.local.apps.browsers = {
enable = mkEnableOption "Browser home settings";
};
config = mkIf cfg.enable {
home.packages = with pkgs; [
chromium
firefox
];
};
}

View file

@ -0,0 +1,18 @@
{
config,
lib,
pkgs,
...
}:
with lib; let
cfg = config.local.services.deepState;
in {
options.local.services.deepState.enable = mkEnableOption "trivionomicon settings";
config =
mkIf cfg.enable {
home.sessionVariables = {
FSOCIETY_TELEGRAM_BACKUP_N = "0";
FSOCIETY_TELEGRAM_BACKUP_LOCATION = "/extern/var/fsociety_backup";
};
};
}

View file

@ -8,13 +8,15 @@
./terminal
./neovim.nix
./baseline.nix
./gaming
./gaming.nix
./yubikey.nix
./browsers.nix
./firefox.nix
./gui
./zsh
./gpg.nix
./defaultDesktopPack.nix
./accounts.nix
./syncthing.nix
./deepState.nix
];
}

View file

@ -13,6 +13,7 @@ in {
config = mkIf cfg.enable {
home.packages = with pkgs; [
calibre
chromium
discord
gwenview
libreoffice-fresh
@ -28,7 +29,6 @@ in {
vpsfree-client
vscodium-fhs
zola
zoom-us
];
};
}

57
home/modules/firefox.nix Normal file
View file

@ -0,0 +1,57 @@
{
config,
lib,
pkgs,
...
}:
with lib; let
cfg = config.local.apps.firefox;
in {
options.local.apps.firefox = {
enable = mkEnableOption "firefox settings";
workspace = mkOption {
type = types.nullOr types.str;
default = null;
description = ''
i3 Workspace in which Firefox should open. If not set, Firefox will not open at startup
'';
};
makeDefaultBrowser = mkOption {
type = types.bool;
default = true;
description = ''
Take a guess
'';
};
};
config = mkIf cfg.enable (mkMerge [
{
programs.firefox.enable = true;
xsession.windowManager.i3.config.startup = optional (cfg.workspace != null) {
command = "${lib.getExe pkgs.i3-gaps} 'workspace ${cfg.workspace}; exec ${lib.getExe pkgs.firefox}'";
};
}
(mkIf cfg.makeDefaultBrowser {
xdg = {
mimeApps = {
enable = true;
defaultApplications = {
"text/html" = ["firefox"];
"text/uri-list" = ["firefox"];
"x-scheme-handler/http" = ["firefox"];
"x-scheme-handler/https" = ["firefox"];
"x-scheme-handler/about" = ["firefox"];
"x-scheme-handler/unknown" = ["firefox"];
};
};
};
home.sessionVariables.DEFAULT_BROWSER = "${lib.getExe pkgs.firefox}";
})
]);
}

View file

@ -12,11 +12,6 @@ in {
};
config = mkIf cfg.enable {
home.packages = [
# Steam. todo: move to the steam module later
(pkgs.callPackage ./package.nix {})
pkgs.protonup
pkgs.winetricks
pkgs.protontricks
pkgs.lutris
pkgs.openrct2
pkgs.prismlauncher

View file

@ -1,9 +0,0 @@
{
writeShellScriptBin,
steam-run,
steam,
...
}:
writeShellScriptBin "steam" ''
exec ${steam-run}/bin/steam-run ${steam}/bin/steam -console
''

View file

@ -81,8 +81,9 @@ in {
./fonts.nix
./i3.nix
./polybar.nix
./startx.nix # move to ly once 24.11 comes out :(
./startx.nix
./picom.nix
./theme.nix
];
config = let
@ -112,5 +113,16 @@ in {
polybar.enable = true;
picom.enable = true;
};
xdg = {
enable = true;
mimeApps = {
enable = true;
defaultApplications = {
"application/pdf" = with pkgs; ["qpdfview"];
"x-scheme-handler/file" = with pkgs; ["kitty"];
};
};
};
};
}

View file

@ -1,11 +0,0 @@
{
config,
lib,
pkgs,
...
}: {
home.packages = with pkgs; [
gruvbox-dark-icons-gtk
libsForQt5.breeze-gtk
];
}

View file

@ -26,8 +26,11 @@ with lib; {
window = {
hideEdgeBorders = "both";
titlebar = false;
};
workspaceLayout = "tabbed";
colors = {
focused = {
background = "#222222";
@ -42,45 +45,43 @@ with lib; {
# y se sobreescriba las cosas que pongo acá
# NO QUITARLO. ver man home-configuration.nix
keybindings = mkOptionDefault {
"${mod}+Return" = "exec ${pkgs.kitty}/bin/kitty ${pkgs.tmux}/bin/tmux";
"${mod}+Return" = "exec ${lib.getExe pkgs.kitty} ${lib.getExe pkgs.tmux}";
"${mod}+Tab" = "focus right";
"${mod}+Shift+Tab" = "focus left";
"${mod}+Shift+s" = "exec ${pkgs.maim}/bin/maim -s -u | ${pkgs.xclip}/bin/xclip -selection clipboard -t image/png -i";
"${mod}+Shift+s" = "exec ${lib.getExe pkgs.maim} -s -u | ${lib.getExe pkgs.xclip} -selection clipboard -t image/png -i";
"${mod}+Shift+w" = "move workspace to output right";
"${mod}+l" = "exec ${pkgs.betterlockscreen}/bin/betterlockscreen -l";
"${mod}+l" = "exec ${lib.getExe pkgs.betterlockscreen} -l";
};
startup = [
{
command = "${pkgs.xss-lock}/bin/xss-lock --transfer-sleep-lock -- ${pkgs.i3lock}/bin/i3lock --nofork";
command = "${lib.getExe pkgs.xss-lock} --transfer-sleep-lock -- ${lib.getExe pkgs.i3lock} --nofork";
notification = false;
}
{
command = "${pkgs.networkmanagerapplet}/bin/nm-applet";
command = "${lib.getExe pkgs.networkmanagerapplet}";
notification = false;
}
# sería nice hostear esta imagen en el server y fetchearla si no existe
#todo: sería nice hostear esta imagen en el server y fetchearla si no existe
{
command = "${pkgs.feh}/bin/feh --bg-fill ${config.home.homeDirectory}/Pictures/wallpapers/jupiter.png";
command = "${lib.getExe pkgs.feh} --bg-fill ${config.home.homeDirectory}/Pictures/wallpapers/jupiter.png";
notification = false;
always = true;
}
{
command = "${pkgs.i3-gaps}/bin/i3-msg 'workspace 1; exec ${pkgs.firefox}/bin/firefox'";
#todo: move this to telegram module
command = "${lib.getExe pkgs.i3-gaps} 'workspace 2; exec ${lib.getExe pkgs.tdesktop}'";
}
{
command = "${pkgs.i3-gaps}/bin/i3-msg 'workspace 2; exec ${pkgs.tdesktop}/bin/telegram-desktop'";
command = "${lib.getExe pkgs.i3-gaps} 'workspace 2; exec ${lib.getExe pkgs.gajim}'";
}
#{
# command = "${pkgs.i3-gaps}/bin/i3-msg 'workspace 2; exec ${pkgs.element-desktop}/bin/element-desktop'";
#}
{
command = "${pkgs.systemd}/bin/systemctl --user restart polybar.service";
notification = false;
always = true;
}
{
command = "${pkgs.autorandr}/bin/autorandr -c";
command = "${lib.getExe pkgs.autorandr} -c";
notification = false;
always = true;
}

View file

@ -0,0 +1,43 @@
{
config,
lib,
pkgs,
...
}:
with lib; {
gtk = {
enable = true;
iconTheme = {
name = "Papirus-Dark";
package = pkgs.papirus-icon-theme;
};
theme = {
package = pkgs.materia-theme;
name = "Materia-dark";
};
gtk2.extraConfig = ''
gtk-toolbar-style=GTK_TOOLBAR_BOTH_HORIZ
gtk-menu-images=1
gtk-button-images=1
'';
gtk3.extraConfig = {
gtk-application-prefer-dark-theme = 1;
};
gtk4.extraConfig = {
gtk-application-prefer-dark-theme = 1;
};
};
home.sessionVariables = {
# Use gtk in jvm apps
_JAVA_OPTIONS = concatStringsSep " " [
"-Dawt.useSystemAAFontSettings=on"
"-Dswing.aatext=true"
"-Dswing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel"
"-Dswing.crossplatformlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel"
];
};
}

View file

@ -0,0 +1,20 @@
{
config,
lib,
pkgs,
...
}:
with lib; let
cfg = config.local.services.syncthing;
in {
options.local.services.syncthing = {
enable = mkEnableOption "syncthing settings";
};
config = mkIf cfg.enable {
services.syncthing = {
enable = true;
tray.enable = true;
};
};
}

View file

@ -29,10 +29,12 @@
prompt = "%B[%~] \${vcs_info_msg_0_}%b";
};
accounts.enable = true;
deepState.enable = true;
gpg = {
enable = true;
defaultKey = "7AA277E604A4173916BBB4E91FFAC35E1798174F";
};
syncthing.enable = true;
};
apps = {
@ -40,8 +42,11 @@
neovim.enable = true;
gaming.enable = true;
yubikey.enable = true;
browsers.enable = true;
defaultDesktopPack.enable = true;
firefox = {
enable = true;
workspace = "1"; #make this an int later
};
};
gui = {
@ -70,7 +75,18 @@
packages = with pkgs; [
darktable
deluge
(gajim.override {
enableSecrets = true;
# enableJingle = true;
# enableSpelling = true;
enableUPnP = true;
# enableAppIndicator = true;
enableE2E = true;
enableRST = true;
})
gnucash
kdenlive
nmap
virt-manager
];

View file

@ -8,5 +8,4 @@ with lib;
"steam-original"
"steam-unwrapped"
"steam-run"
"zoom"
]

View file

@ -13,5 +13,7 @@
./android.nix
./users.nix
./bluetooth.nix
./net.nix
./steam.nix
];
}

186
sys/modules/net.nix Normal file
View file

@ -0,0 +1,186 @@
{
config,
lib,
...
}:
with lib; {
options.local.sys.nets = with lib.types;
mkOption {
readOnly = true;
type = attrsOf (submodule ({config, ...}: {
options = let
v4config = config.v4;
v6config = config.v6;
in {
hosts = mkOption {
default = {};
type = attrsOf (submodule {
options = {
v4 = mkOption {
default = null;
type = nullOr (submodule ({config, ...}: {
options = {
suffix = mkOption {
type = str;
};
address = mkOption {
type = str;
readOnly = true;
};
cidr = mkOption {
type = str;
readOnly = true;
};
single = mkOption {
type = str;
readOnly = true;
};
};
config = {
address =
if v4config.bits == 0
then config.suffix
else if v4config.bits == 32
then v4config.subnet
else "${v4config.prefix}.${config.suffix}";
cidr = "${config.address}/${toString v4config.bits}";
single = "${config.address}/32";
};
}));
};
v6 = mkOption {
default = null;
type = nullOr (submodule ({config, ...}: {
options = {
suffix = mkOption {
type = str;
};
address = mkOption {
type = str;
readOnly = true;
};
cidr = mkOption {
type = str;
readOnly = true;
};
single = mkOption {
type = str;
readOnly = true;
};
};
config = {
address = let
hextets = fragment: length (splitString ":" fragment);
separator =
if doubleColon
then "::"
else ":";
doubleColon = hextets v6config.prefix + hextets config.suffix < 8;
joined =
if v6config.bits == 128
then v6config.prefix
else if v6config.bits == 0
then config.suffix
else "${v6config.prefix}${separator}${config.suffix}";
in
joined;
cidr = "${config.address}/${toString v6config.bits}";
single = "${config.address}/128";
};
}));
};
};
});
};
v4 = mkOption {
default = null;
type = nullOr (submodule ({config, ...}: {
options = {
bits = mkOption {
type = enum [0 8 16 24 32];
};
prefix = mkOption {
type = str;
};
subnet = mkOption {
type = str;
readOnly = true;
};
cidr = mkOption {
type = str;
readOnly = true;
};
};
config = {
cidr = "${config.subnet}/${toString config.bits}";
subnet =
if config.bits != 0
then config.prefix + strings.replicate (4 - config.bits / 8) ".0"
else "0.0.0.0";
};
}));
};
v6 = mkOption {
default = null;
type = nullOr (submodule ({config, ...}: {
options = {
bits = mkOption {
type =
addCheck (ints.between 0 128) (b: mod b 4 == 0)
// {
description = "IPv6 subnet bits at nibble boundary";
};
};
prefix = mkOption {
type = str;
};
subnet = mkOption {
type = str;
readOnly = true;
};
cidr = mkOption {
type = str;
readOnly = true;
};
};
config = {
cidr = "${config.subnet}/${toString config.bits}";
subnet =
if config.bits == 128 || length (splitString "::" config.prefix) > 1
then config.prefix
else "${config.prefix}::";
};
}));
};
};
}));
};
}

30
sys/modules/steam.nix Normal file
View file

@ -0,0 +1,30 @@
{
config,
lib,
pkgs,
...
}:
with lib; let
cfg = config.local.sys.steam;
in {
options.local.sys.steam = {
enable = mkEnableOption "steam settings";
};
config = mkIf cfg.enable {
programs.steam = {
enable = true;
remotePlay.openFirewall = true;
dedicatedServer.openFirewall = true;
localNetworkGameTransfers.openFirewall = true;
};
environment = {
systemPackages = with pkgs; [
protontricks
protonup
protonup-ng
winetricks
];
};
};
}

View file

@ -66,7 +66,7 @@ in {
shell = pkgs.zsh;
extraGroups =
["users" "networkmanager"]
++ optionals (v.admin) ["wheel" "libvirtd" "dialout" "adbusers" ];
++ optionals (v.admin) ["wheel" "libvirtd" "dialout" "adbusers"];
openssh.authorizedKeys.keyFiles = v.sshKeyPublicFile;
})
enabledUsers;

View file

@ -19,6 +19,7 @@
graphics.enable = true;
virtualisation.enable = true;
androidSupport.enable = true;
steam.enable = true;
users = {
fabian = {

View file

@ -13,6 +13,7 @@ with lib; {
flakes.impermanence.nixosModule
./hardware-configuration.nix
./srv
./networkMap.nix
];
local.sys = {
@ -24,12 +25,17 @@ with lib; {
};
};
networking.hostName = "vps";
networking = {
hostName = "vps";
domain = "posixlycorrect.com";
};
services.openssh = {
settings.PasswordAuthentication = false;
};
programs.mosh.enable = true;
home-manager = {
useGlobalPkgs = true;
useUserPackages = true;
@ -45,9 +51,67 @@ with lib; {
};
};
systemd.extraConfig = ''
DefaultTimeoutStartSec=900s
'';
networking.firewall.allowedUDPPorts = [51820]; #TODO
systemd = {
extraConfig = ''
DefaultTimeoutStartSec=900s
'';
network = let
inherit (config.local.sys) nets;
in {
enable = true;
netdevs = {
wg-vpn = {
netdevConfig = {
Name = "wg-vpn";
Kind = "wireguard";
};
wireguardConfig = {
PrivateKeyFile = "/var/trust/wg/vpn/key.priv";
ListenPort = "51820";
};
wireguardPeers = [
{
PublicKey = "wwUp3Uu/rSxbp+6J745O+cpnZHGWOJYWfWEsTjRE3yU=";
PresharedKeyFile = "/var/trust/wg/vpn/vps-posixlycorrect.psk";
AllowedIPs = ["${nets.vpn-posixlycorrect.v6.cidr}"];
}
{
PublicKey = "YFqg/ED26KygSRSmGzvUXpwnXPqMOI3R3caVfAtHVks=";
PresharedKeyFile = "/var/trust/wg/vpn/vps-pixel8.psk";
AllowedIPs = ["${nets.vpn-pixel8.v6.cidr}"];
}
];
};
};
networks = {
wg-vpn = {
name = "wg-vpn";
networkConfig = {
Address = [
nets.vpn-vps.hosts.vps.v6.cidr
];
};
routes = [
{
Destination = nets.vpn.v6.cidr;
}
{
Source = nets.vpn.v6.cidr;
}
];
};
};
};
};
time.timeZone = "Europe/Amsterdam";
}

View file

@ -14,10 +14,16 @@ in {
options = ["nofail" "noatime"];
};
"/mnt/export2011" = {
device = "172.16.129.151:/nas/5876/bepasty";
"/mnt/export2178" = {
device = "172.16.129.151:/nas/5876/immich";
fsType = "nfs";
options = ["nofail" "noatime" "noexec"];
options = ["nofail" "noatime"];
};
"/mnt/export2179" = {
device = "172.16.131.31:/nas/5876/syncthing";
fsType = "nfs";
options = ["nofail"];
};
};
}

View file

@ -0,0 +1,78 @@
{
config,
pkgs,
lib,
flakes,
...
}:
with lib; {
local.sys.nets = {
default = {
v4 = {
bits = 32;
prefix = "37.205.12.34";
};
v6 = {
bits = 64;
prefix = "2a03:3b40:fe:102";
};
hosts = {
vps.v6.suffix = "1";
vps.v4.suffix = "";
};
};
vpn = {
v6 = {
bits = 48;
prefix = "2a03:3b40:2b";
};
};
vpn-vps = {
v6 = {
bits = 64;
prefix = "2a03:3b40:2b:1000";
};
hosts = {
vps.v6.suffix = "1";
};
};
vpn-posixlycorrect = {
v6 = {
bits = 64;
prefix = "2a03:3b40:2b:1001";
};
hosts = {
posixlycorrect.v6.suffix = "1";
};
};
vpn-pixel8 = {
v6 = {
bits = 64;
prefix = "2a03:3b40:2b:1002";
};
hosts = {
pixel8.v6.suffix = "1";
};
};
vpn-t14 = {
v6 = {
bits = 64;
prefix = "2a03:3b40:2b:1003";
};
hosts = {
t14.v6.suffix = "1";
};
};
};
}

View file

@ -1,110 +0,0 @@
{
lib,
pkgs,
flakes,
...
}:
with lib; {
imports = [flakes.authentik-nix.nixosModules.default];
options = {
services.nginx.virtualHosts = mkOption {
type = with lib.types;
attrsOf (
submodule
(
{config, ...}: {
options = {
enableAuthentik = mkOption {
default = false;
type = bool;
};
locations = mkOption {
type = attrsOf (
submodule {
config = mkIf config.enableAuthentik {
extraConfig = ''
auth_request /outpost.goauthentik.io/auth/nginx;
error_page 401 = @goauthentik_proxy_signin;
auth_request_set $auth_cookie $upstream_http_set_cookie;
add_header Set-Cookie $auth_cookie;
# translate headers from the outposts back to the actual upstream
auth_request_set $authentik_username $upstream_http_x_authentik_username;
auth_request_set $authentik_groups $upstream_http_x_authentik_groups;
auth_request_set $authentik_email $upstream_http_x_authentik_email;
auth_request_set $authentik_name $upstream_http_x_authentik_name;
auth_request_set $authentik_uid $upstream_http_x_authentik_uid;
proxy_set_header X-authentik-username $authentik_username;
proxy_set_header X-authentik-groups $authentik_groups;
proxy_set_header X-authentik-email $authentik_email;
proxy_set_header X-authentik-name $authentik_name;
proxy_set_header X-authentik-uid $authentik_uid;
'';
};
}
);
};
};
config = mkIf config.enableAuthentik {
extraConfig = ''
proxy_buffers 8 16k;
proxy_buffer_size 32k;
location /outpost.goauthentik.io {
proxy_pass http://localhost:9000/outpost.goauthentik.io;
# ensure the host of this vserver matches your external URL you've configured
# in authentik
proxy_set_header Host $host;
proxy_redirect http://localhost:9000 https://auth.posixlycorrect.com;
proxy_set_header X-Original-URL $scheme://$http_host$request_uri;
add_header Set-Cookie $auth_cookie;
auth_request_set $auth_cookie $upstream_http_set_cookie;
# required for POST requests to work
proxy_pass_request_body off;
proxy_set_header Content-Length "";
}
location @goauthentik_proxy_signin {
internal;
add_header Set-Cookie $auth_cookie;
return 302 /outpost.goauthentik.io/start?rd=$scheme://$http_host$request_uri;
# For domain level, use the below error_page to redirect to your authentik server with the full redirect path
# return 302 https://authentik.company/outpost.goauthentik.io/start?rd=$scheme://$http_host$request_uri;
}
'';
};
}
)
);
};
};
config = {
services = {
authentik = {
enable = true;
environmentFile = "/var/trust/authentik/authentik-env";
nginx = {
enable = true;
enableACME = true;
host = "auth.posixlycorrect.com";
};
settings = {
email = {
host = "smtp.fastmail.com";
port = 587;
username = "fabianmontero@fastmail.com";
use_tls = true;
use_ssl = false;
from = "auth@posixlycorrect.com";
};
disable_startup_analytics = true;
avatars = "initials";
};
};
};
};
}

View file

@ -1,40 +0,0 @@
{
lib,
pkgs,
...
}:
with lib; {
services = {
nginx = {
virtualHosts."send.posixlycorrect.com" = {
enableACME = true;
forceSSL = true;
extraConfig = ''
proxy_headers_hash_max_size 512;
proxy_headers_hash_bucket_size 128;
'';
locations."/" = {
proxyPass = "http://127.0.0.1:8989";
};
};
};
bepasty = {
enable = true;
servers = {
"send" = {
bind = "127.0.0.1:8989";
secretKeyFile = "/var/trust/bepasty/secretKeyFile";
dataDir = "/mnt/export2011/data";
defaultPermissions = "read,create,delete";
extraConfig = ''
SITENAME = 'send.posixlycorrect.com'
MAX_ALLOWED_FILE_SIZE = 4 * 1000 * 1000 * 1000
SESSION_COOKIE_SECURE = True
ASCIINEMA_THEME = 'asciinema'
'';
};
};
};
};
}

View file

@ -6,7 +6,7 @@
with lib; {
services = {
nginx = {
virtualHosts."stream.posixlycorrect.com" = {
virtualHosts."calibre.posixlycorrect.com" = {
enableACME = true;
forceSSL = true;
extraConfig = ''
@ -14,17 +14,18 @@ with lib; {
proxy_headers_hash_bucket_size 128;
'';
locations."/" = {
proxyPass = "http://localhost:8096";
proxyPass = "http://[::1]:8083";
};
};
};
jellyfin = {
calibre-web = {
enable = true;
user = "jellyfin";
group = "jellyfin";
dataDir = "/mnt/export2008/jellyfin/dataDir";
cacheDir = "/mnt/export2008/jellyfin/cacheDir";
openFirewall = true;
options = {
enableBookUploading = true;
calibreLibrary = "/var/lib/calibre-web/calibre_library";
};
};
};
}

View file

@ -9,18 +9,16 @@ with lib; {
imports = [
./net.nix
./mediawiki.nix
# ./jitsi.nix
# ./matrix.nix currently not being used
./forgejo.nix
./vaultwarden.nix
# ./bepasty.nix
# ./jellyfin.nix
./msmtp.nix
./kuma.nix
# ./authentik.nix consumes too much RAM and serves no purpose for now
./paperless.nix
./trilium.nix
# ./firefly.nix gnucash is better
./roundcube.nix
./syncthing.nix
./shiori.nix
./calibre-web.nix
./immich.nix
./wiki-js.nix
./mealie.nix
];
}

View file

@ -1,33 +0,0 @@
{
lib,
pkgs,
...
}:
with lib; {
services = {
nginx = {
virtualHosts."firefly.posixlycorrect.com" = {
enableACME = true;
forceSSL = true;
extraConfig = ''
proxy_headers_hash_max_size 512;
proxy_headers_hash_bucket_size 128;
'';
};
};
firefly-iii = {
enable = true;
user = "firefly-iii";
dataDir = "/var/lib/firefly-iii";
enableNginx = true;
virtualHost = "firefly.posixlycorrect.com";
settings = {
SITE_OWNER = "fabian@posixlycorrect.com";
DB_CONNECTION = "sqlite";
APP_ENV = "local";
APP_KEY_FILE = "/var/trust/firefly/key_file";
};
};
};
}

View file

@ -47,12 +47,10 @@ with lib; {
LANDING_PAGE = "explore";
};
# You can temporarily allow registration to create an admin user.
service.DISABLE_REGISTRATION = true;
# ver https://github.com/nektos/act
actions = {
ENABLED = false;
ENABLED = true;
};
mailer = {
ENABLED = false;

View file

@ -0,0 +1,73 @@
{
lib,
pkgs,
...
}:
with lib; {
services = {
nginx = {
virtualHosts."photos.posixlycorrect.com" = {
enableACME = true;
forceSSL = true;
extraConfig = ''
proxy_headers_hash_max_size 512;
proxy_headers_hash_bucket_size 128;
'';
locations."/" = {
proxyPass = "http://localhost:2283";
};
};
};
immich = {
enable = true;
secretsFile = "/var/trust/immich/secrets.txt";
openFirewall = true;
mediaLocation = "/mnt/export2178/immich/media";
machine-learning.enable = false;
environment = {
IMMICH_TELEMETRY_EXCLUDE = "host,api,io,repo,job";
};
settings = {
machineLearning = {
enabled = false;
};
job = {
backgroundTask = {
concurrency = 1;
};
smartSearch = {
concurrency = 1;
};
metadataExtraction = {
concurrency = 1;
};
faceDetection = {
concurrency = 1;
};
search = {
concurrency = 1;
};
sidecar = {
concurrency = 1;
};
library = {
concurrency = 1;
};
migration = {
concurrency = 1;
};
thumbnailGeneration = {
concurrency = 1;
};
videoConversion = {
concurrency = 1;
};
notifications = {
concurrency = 1;
};
};
};
};
};
}

View file

@ -1,35 +0,0 @@
{
lib,
pkgs,
...
}:
with lib; {
services = {
nginx = {
virtualHosts."meet.posixlycorrect.com" = {
enableACME = true;
forceSSL = true;
extraConfig = ''
proxy_headers_hash_max_size 512;
proxy_headers_hash_bucket_size 128;
'';
};
};
jitsi-meet = {
enable = true;
hostName = "meet.posixlycorrect.com";
nginx.enable = true;
config = {
enableWelcomePage = true;
prejoinPageEnabled = true;
defaultLang = "en";
};
interfaceConfig = {
SHOW_JITSI_WATERMARK = false;
SHOW_WATERMARK_FOR_GUESTS = false;
};
};
jitsi-videobridge.openFirewall = true;
};
}

View file

@ -1,58 +0,0 @@
{
lib,
pkgs,
config,
flakes,
...
}:
with lib; let
subdomain = "matrix.posixlycorrect.com";
baseUrl = "https://${subdomain}";
in {
# ver https://nixos.org/manual/nixos/stable/#module-services-matrix
services = {
matrix-conduit = {
enable = true;
package = flakes.conduwuit.packages.${pkgs.system}.default;
settings.global = {
address = "::1";
port = 6167;
allow_encryption = true;
allow_federation = true;
allow_registration = false;
database_backend = "rocksdb";
server_name = "posixlycorrect.com";
allow_check_for_updates = true;
new_user_displayname_suffix = "";
};
};
nginx.virtualHosts = let
clientConfig."m.homeserver".base_url = baseUrl;
serverConfig."m.server" = "${subdomain}:443";
mkWellKnown = data: ''
default_type application/json;
add_header Access-Control-Allow-Origin *;
return 200 '${builtins.toJSON data}';
'';
in {
"posixlycorrect.com" = {
locations."= /.well-known/matrix/server".extraConfig = mkWellKnown serverConfig;
locations."= /.well-known/matrix/client".extraConfig = mkWellKnown clientConfig;
};
"${subdomain}" = {
enableACME = true;
forceSSL = true;
extraConfig = ''
proxy_headers_hash_max_size 512;
proxy_headers_hash_bucket_size 128;
'';
locations."/".extraConfig = ''
return 403;
'';
locations."/_matrix".proxyPass = "http://[::1]:6167";
locations."/_synapse/client".proxyPass = "http://[::1]:6167";
};
};
};
}

View file

@ -0,0 +1,37 @@
{
lib,
pkgs,
...
}:
with lib; {
systemd.services.wiki-js = {
requires = ["postgresql.service"];
after = ["postgresql.service"];
};
services = {
nginx = {
virtualHosts."food.posixlycorrect.com" = {
enableACME = true;
forceSSL = true;
extraConfig = ''
proxy_headers_hash_max_size 512;
proxy_headers_hash_bucket_size 128;
'';
locations."/" = {
proxyPass = "http://127.0.0.1:9000";
};
};
};
mealie = {
enable = true;
listenAddress = "127.0.0.1";
port = 9000;
credentialsFile = "/var/trust/mealie/credentials.env";
settings = {
ALLOW_SIGNUP = "false";
};
};
};
}

View file

@ -65,12 +65,6 @@ with lib; {
SecureLinkFixer = null;
WikiEditor = null;
ParserFunctions = null;
TemplateStyles = pkgs.fetchzip {
url = "https://gerrit.wikimedia.org/r/plugins/gitiles/mediawiki/extensions/TemplateStyles/+archive/refs/heads/wmf/1.44.0-wmf.5.tar.gz";
sha256 = "sha256-Mb8svP8zt4d1U/NHd9Dd2oUe/SksB/zKYGNYdpmrRfc=";
stripRoot = false;
};
};
};
};

View file

@ -1,11 +1,14 @@
{
config,
lib,
pkgs,
...
}:
with lib; {
with lib; let
inherit (config.local.sys) nets;
in {
networking = {
nftables.enable = true;
nftables.enable = false; # learn how to use this later
firewall = {
enable = true;
allowedTCPPorts = [80 443];
@ -49,10 +52,15 @@ with lib; {
};
};
};
fail2ban = {
enable = true;
bantime = "10m";
ignoreIP = ["37.205.12.34"]; # Never ban the server's own IP
ignoreIP = [
nets.default.hosts.vps.v6.cidr
nets.default.hosts.vps.v4.address
nets.vpn.v6.cidr
];
bantime-increment = {
enable = true;
formula = "ban.Time * math.exp(float(ban.Count+1)*banFactor)/math.exp(1*banFactor)";

View file

@ -1,62 +0,0 @@
{
lib,
pkgs,
...
}:
with lib; {
services = {
nginx = {
virtualHosts."mail.posixlycorrect.com" = {
enableACME = true;
forceSSL = true;
extraConfig = ''
proxy_headers_hash_max_size 512;
proxy_headers_hash_bucket_size 128;
'';
};
};
roundcube = {
enable = true;
hostName = "mail.posixlycorrect.com";
configureNginx = true;
maxAttachmentSize = 2048; #MB
package = pkgs.roundcube.withPlugins (plugins: [
#plugins.carddav
plugins.contextmenu
plugins.custom_from
plugins.persistent_login
]);
plugins = [
"archive"
"attachment_reminder"
#"carddav"
"contextmenu"
"custom_from"
"emoticons"
#"enigma"
"hide_blockquote"
"managesieve"
"markasjunk"
"newmail_notifier"
"password"
"persistent_login"
"reconnect"
"show_additional_headers"
"userinfo"
"vcard_attachments"
"zipdownload"
];
dicts = with pkgs.aspellDicts; [
es
en
];
extraConfig = ''
$config['smtp_host'] = "ssl://smtp.fastmail.com:465";
$config['smtp_user'] = "%u";
$config['smtp_pass'] = "%p";
$config['imap_host'] = "ssl://imap.fastmail.com:993";
'';
};
};
}

View file

@ -6,7 +6,7 @@
with lib; {
services = {
nginx = {
virtualHosts."status.posixlycorrect.com" = {
virtualHosts."bookmarks.posixlycorrect.com" = {
enableACME = true;
forceSSL = true;
extraConfig = ''
@ -14,16 +14,16 @@ with lib; {
proxy_headers_hash_bucket_size 128;
'';
locations."/" = {
proxyPass = "http://127.0.0.1:4456";
proxyPass = "http://127.0.0.1:8089";
};
};
};
uptime-kuma = {
shiori = {
enable = true;
settings = {
HOST = "127.0.0.1";
PORT = "4456";
};
address = "127.0.0.1";
port = 8089;
environmentFile = "/var/trust/shiori/env";
};
};
}

View file

@ -0,0 +1,42 @@
{
lib,
pkgs,
...
}:
with lib; {
services = {
syncthing = {
enable = true;
systemService = true;
overrideFolders = false;
overrideDevices = false;
openDefaultPorts = true;
guiAddress = "127.0.0.1:8384";
settings.options.urAccepted = -1;
dataDir = "/mnt/export2179/syncthing";
relay = {
enable = true;
pools = [];
providedBy = "vps.posixlycorrect.com";
};
};
};
# calibre web stuff. make this better someday, this is pure duct-tape
users.groups."calybresync".members = ["syncthing" "calibre-web"];
systemd = {
services."calybreown" = {
script = ''
chgrp -R calybresync /var/lib/calibre-web/calibre_library
chmod -R g+w /var/lib/calibre-web/calibre_library
'';
serviceConfig.Type = "oneshot";
};
timers."calybreown" = {
wantedBy = [
"timers.target"
];
timerConfig.OnCalendar = "*-*-* *:00/30:00";
};
};
}

View file

@ -18,6 +18,7 @@ with lib; {
trilium-server = {
enable = true;
package = pkgs.trilium-next-server;
host = "127.0.0.1";
port = 8458;
noAuthentication = false;

View file

@ -0,0 +1,53 @@
{
lib,
pkgs,
...
}:
with lib; {
systemd.services.wiki-js = {
requires = ["postgresql.service"];
after = ["postgresql.service"];
};
services = {
nginx = {
virtualHosts."wjs.posixlycorrect.com" = {
enableACME = true;
forceSSL = true;
extraConfig = ''
proxy_headers_hash_max_size 512;
proxy_headers_hash_bucket_size 128;
'';
locations."/" = {
proxyPass = "http://127.0.0.1:3000";
};
};
};
wiki-js = {
enable = true;
environmentFile = "/var/trust/wiki-js/env.txt";
settings = {
bindIP = "127.0.0.1";
port = 3000;
db = {
db = "wiki-js";
user = "wiki-js";
type = "postgres";
host = "/run/postgresql";
};
};
};
postgresql = {
enable = true;
ensureDatabases = ["wiki-js"];
ensureUsers = [
{
name = "wiki-js";
ensureDBOwnership = true;
}
];
};
};
}