Compare commits

...

721 commits

Author SHA1 Message Date
c1abe88a05 Merge remote-tracking branch 'origin' 2025-11-14 22:59:42 -06:00
69a6015588 feat: added friture package to eve 2025-11-14 22:36:31 -06:00
eb379816ad chore: added research note to README.md 2025-11-12 22:15:22 -06:00
8ddaa1c9dd doc: added more notes to README.md 2025-11-09 02:39:43 -06:00
32b3b11967 feat: added option for show new version notes in conventional commit plugin 2025-11-09 02:29:36 -06:00
46cd54e9ba feat: added option for prompt footer in conventional commit plugin 2025-11-09 02:27:00 -06:00
81a9ed3154 doc: added documentation tasks to README.md 2025-11-09 02:21:08 -06:00
5dedf4f314 chore: service to list of services that need to be added 2025-11-08 11:39:17 -06:00
d613dee364 refactor: move syncthing configs out of flake file 2025-11-07 17:11:41 -06:00
761246a4a4 chore: removed installerConfigurations 2025-11-07 17:01:21 -06:00
0e5ebb37f1 build: update flake.lock 2025-11-07 16:53:05 -06:00
f031a20d11 build: updated firefox language extension versions 2025-11-07 12:57:05 -06:00
c33121e348 refactor: moved firefox configs to the common modules packages folder 2025-11-07 12:06:11 -06:00
e3a8ddbf32 feat: fixed install of firefox language pack 2025-11-07 11:53:12 -06:00
e0ad443188 refactor: fixed deprecation warning for pkgs.system 2025-11-07 11:44:45 -06:00
1ed8a2b8ab feat: added cyberia matrix to leyla's bookmarks 2025-11-06 14:21:09 -06:00
1b4d059633 feat: removed polycule application 2025-11-05 18:37:26 -06:00
f5b026bb15 chore: added task to README.md 2025-11-04 18:05:31 -06:00
0d6f82f29e build: updated flake.lock 2025-11-03 20:04:36 -06:00
4f16a0cf99 chore: created nodes for impermanence module 2025-10-31 21:47:30 -05:00
353ae4b874 chore: added more description to task in README 2025-10-31 19:49:10 -05:00
34e8cf4405 chore: reorganized some tasks in TODO 2025-10-31 19:37:59 -05:00
c6b129726d chore: added task to README.md 2025-10-31 17:45:26 -05:00
dfeac5585f chore: added task to README.md 2025-10-31 17:29:34 -05:00
bfe774b74c added --vm flag to rebuild 2025-10-31 17:08:28 -05:00
e1a5ddde95 feat: added storj to README.md 2025-10-30 22:28:02 -05:00
c0e2e7ba4a feat: updated flake.lock 2025-10-30 17:43:52 -05:00
69ccbffd86 chore: removed incorrect task 2025-10-27 11:02:42 -05:00
f9c27c82b6 feat: refactored database configuration 2025-10-27 03:55:09 -05:00
e57c1df6e5 chore:added task for qbittorent directory 2025-10-27 02:52:56 -05:00
df663e5438 chore: added task to README.md 2025-10-27 02:34:53 -05:00
f91f20be7c chore: added more tasks to README.md 2025-10-27 01:13:42 -05:00
ec802a2462 chore: updated README.md 2025-10-27 00:56:56 -05:00
bb5c94ec2c feat: added catch all route to reverse proxy that blocks connections on non specified hosts 2025-10-27 00:53:59 -05:00
81a6588537 feat: updated flack lock 2025-10-26 23:35:54 -05:00
758cbd17f7 refactor: removed unused var 2025-10-26 14:43:50 -05:00
f72a6da013 feat: fixed actual install 2025-10-26 14:24:18 -05:00
7ad6a83dfa feat: broke leyla firefox config into submodules 2025-10-26 13:17:48 -05:00
c97d43957d feat: enabled actual 2025-10-26 13:06:08 -05:00
5114f52607 feat: added rust-analyzer vscode package 2025-10-25 15:11:25 -05:00
30a042d709 refactor: moved server module configs out of default.nix files 2025-10-25 02:56:07 -05:00
89793fca6a feat: added per service enable options for impermanence configs 2025-10-25 02:41:00 -05:00
a8af8930fa feat: added per service enable options for fail2ban configs 2025-10-25 02:37:53 -05:00
ecec04a9ce feat: added per service enable options for reverseProxy configs 2025-10-25 02:31:11 -05:00
7f74060713 chore: updated task list in README.md 2025-10-25 01:55:58 -05:00
c2435883f1 fix: fixed domains for searx and paperless 2025-10-24 15:01:16 -05:00
0f5507c328 refactor: split configurations for fail2ban, postgres, and qbittorent into folders 2025-10-24 13:08:13 -05:00
ad04be6534 feat: removed unused podman module 2025-10-24 12:49:36 -05:00
4dd285c122 feat: refactored reverse proxy to be a normally named module 2025-10-24 12:45:17 -05:00
466926b919 refactor: updated git configuration 2025-10-21 20:44:53 -05:00
db8d36dadc build: updated mapillary uploader hash 2025-10-21 20:39:16 -05:00
b17f8d49d5 build: updated flake.lock 2025-10-21 20:32:24 -05:00
455a98810a feat: enabled crab-hole 2025-10-21 20:03:52 -05:00
3f107f8d1e fix: fixed home manager impermanence activation on defiant 2025-10-21 19:35:56 -05:00
539af51473 disabled crab-hole 2025-10-21 18:52:38 -05:00
f21777b1fb fix: fixed pre and post commit hook behavior 2025-10-20 20:55:35 -05:00
290c0692bb feat: added block list to crab-hole 2025-10-20 20:24:28 -05:00
d19d535d85 fix: made crab-hole dns accessible from other devices 2025-10-20 20:01:07 -05:00
e8f7331b6c feat: enabled ai for emergent and claude code for eve 2025-10-19 20:52:46 -05:00
ebf7ea3cf7 feat: added impermanence for more applications 2025-10-19 20:32:38 -05:00
dd165d48fe feat: installed vmware for eve home manager user 2025-10-19 19:14:34 -05:00
260e37e016 feat: supported branching for commit checking 2025-10-19 18:50:26 -05:00
0c88746da1 feat: stubbed out configs for eve home manager user 2025-10-19 17:24:29 -05:00
46890110f8 feat: created crab-hole service 2025-10-19 16:32:10 -05:00
290db94f42 chore: organized tasks in README.md 2025-10-19 11:31:15 -05:00
b05bfc31fe feat: removed TODO for provisioning drives 2025-10-18 17:33:50 -05:00
85a6f4a006 chore: removed completed tasks from README.md 2025-10-18 16:29:16 -05:00
69ec14ef79 chore: added task to README.md 2025-10-18 16:26:14 -05:00
5ccfe1a337 feat: installed lidarr 2025-10-18 13:30:08 -05:00
62bb650878 fix: fixed mapillary build 2025-10-17 16:09:37 -05:00
488ef1e94a build: updated flake.lock 2025-10-17 15:58:17 -05:00
59dc4a7ee1 feat: installed flaresolverr 2025-10-17 15:12:19 -05:00
6afdcce951 feat: installed jackett 2025-10-17 14:58:49 -05:00
e895fa5edd feat: removed filebot 2025-10-17 13:15:41 -05:00
f02cb08570 feat: disabled filebot-cleanup 2025-10-16 23:29:37 -05:00
352ca6fccf feat: disabled open dyslexic 2025-10-13 19:30:33 -05:00
c953571f2f feat: decrease letter spacing on open dyslexia vscode 2025-10-13 17:11:59 -05:00
d87462981e feat: enabled open dyslexia 2025-10-13 17:00:30 -05:00
75dcac8d17 feat: drafted out open dyslexic font for vscode 2025-10-13 16:51:26 -05:00
80ad498f94 style: removed unused vars 2025-10-13 09:40:02 -05:00
6d5a07e08f feat: refactored impermanence to be enableable for users on a system 2025-10-13 09:36:48 -05:00
337f03b4e7 Merge remote-tracking branch 'refs/remotes/origin/main' 2025-10-12 21:14:21 -05:00
a51a364ce9 fix: enabled extensions installed via config options 2025-10-12 21:10:40 -05:00
ee6d48fe49 feat: added night light as a dconf option 2025-10-11 23:34:16 -05:00
c81fa77a29 feat: simplified gnome configurations with more options 2025-10-11 23:26:24 -05:00
32c7086394 feat: added display scaling for eve 2025-10-11 23:06:54 -05:00
f80ae02e47 Merge pull request 'main' (#8) from Lithospherical/nix-config:main into main
Reviewed-on: #8
2025-10-12 03:41:59 +00:00
28a962d712 Merge branch 'main' into main 2025-10-12 03:41:34 +00:00
76d3c488db feat: pinned mapilary version downloader
feat: created user ivy
2025-10-08 13:05:08 -05:00
44922dfcd5 feat: re enabled lix 2025-10-05 14:58:41 -05:00
884d11d0a3 chore: updated host map in README 2025-10-04 12:12:45 -05:00
0730cc6594 feat: updated polycule package 2025-10-04 11:15:53 -05:00
2935d43bcb feat: moved filebot cleanup to jellyfin persistence 2025-10-03 21:10:20 -05:00
bc705098d6 chore: removed completed task from README.md 2025-10-03 14:23:26 -05:00
7483c2c01c feat: fixed polyclue package 2025-10-03 13:59:12 -05:00
2c918478ab feat: enabled filebot-cleanup task 2025-10-02 18:53:32 -05:00
03149db7ea build: updated flake lock 2025-10-02 17:53:07 -05:00
c9bb9380b5 feat: fixed vpn on defiant 2025-10-02 15:45:21 -05:00
21edda5fe6 feat: added auto aproval for nixos mcp server settings 2025-10-02 12:55:49 -05:00
d4615fc435 chore: updated README 2025-10-02 12:51:20 -05:00
c10c610034 feat: started to create polycule package 2025-10-02 12:49:29 -05:00
6dfe3ac326 build: updated flake lock 2025-10-01 15:14:36 -05:00
0cb4c25467 fat: disabled filebot-cleanup service 2025-09-26 20:21:58 -05:00
178b414a0a chore: removed already completed task from README.md 2025-09-25 22:41:10 -05:00
c8d994814f chore: added note to readme 2025-09-25 22:35:28 -05:00
1d940fd8d8 feat: disabled sonarr, radarr, and bazarr 2025-09-25 22:33:14 -05:00
24def1e3d3 chore: added tasks to README.md 2025-09-25 22:31:29 -05:00
a8dfcb02c8 feat: created filebot cleanup service to run in background 2025-09-25 22:28:04 -05:00
d2be5c7e24 feat: added radarr, sonarr, and bazarr to the jellyfin_media group 2025-09-25 20:14:07 -05:00
a8139f4265 feat: installed filebot 2025-09-25 20:04:51 -05:00
f9fe74cc8a feat: installed bazarr, radarr, and sonarr 2025-09-25 19:36:34 -05:00
4d52c58f79 feat: instealled media editing programs for defiant 2025-09-25 14:58:51 -05:00
ee80636b2b build: updated flake lock 2025-09-24 09:54:51 -05:00
d35e2c93c1 feat: added option for auto aprove set root for vitest mcp server 2025-09-21 21:04:47 -05:00
ca6de5c0cd chore: added talk to readme 2025-09-18 23:40:13 -05:00
2cdc39f3dc fix: disabled broken panoramax config 2025-09-18 14:19:57 -05:00
333c68a8cd feat: created db config for panoramax 2025-09-17 22:18:15 -05:00
7e6fa744af fix: wrapped prostudiomasters in --in-process-gpu flag 2025-09-17 19:42:15 -05:00
3bee0c7402 fix: fixed pkg dependencies for panoramax 2025-09-17 15:15:07 -05:00
1b1a3f7219 fix: fixed database timezone alter not working 2025-09-16 12:40:19 -05:00
e2e07c9a70 feat: reworked databse config for panoramax 2025-09-16 12:09:41 -05:00
9b02e30080 refactor: moved subdomain options into proxy file 2025-09-16 10:44:00 -05:00
dfdd6bcc82 chore: removed resolved item from research topics 2025-09-16 10:20:00 -05:00
cdeb4e108b refactor: split server modules into smaller more manageable files 2025-09-16 10:14:33 -05:00
b2e5ae1f98 build: updated flake lock 2025-09-16 09:58:35 -05:00
01325c3068 feat: drafted out database configuration and sgblur config 2025-09-15 15:25:05 -05:00
dbd5d36913 feat: drafted out reverse proxy config for panoramax 2025-09-15 14:54:31 -05:00
0f87d78271 feat: updated flake lock 2025-09-15 14:02:16 -05:00
c0579f55dc feat: created sgblur package 2025-09-15 13:36:07 -05:00
1d0f51c70a chore: addede panoramax.nix to server modules 2025-09-15 11:36:12 -05:00
376cb934c3 refactor: added asseration for db config 2025-09-15 11:29:43 -05:00
84b204f8b1 feat: created env config for panoramax 2025-09-15 10:40:34 -05:00
52801b4bb7 refactor: moved reverse proxy into own section in server modules 2025-09-14 22:10:57 -05:00
663bdcc012 chore: stubed out section for fail2ban for panoramax 2025-09-14 21:48:10 -05:00
88dcba346f feat: started to create panoramax config 2025-09-14 21:42:34 -05:00
22b9c5b3f9 chore: added items to task list 2025-09-14 17:34:19 -05:00
3bf3391eb9 feat: created mapillary desktop uploader program config and installed for leyla 2025-09-13 18:15:43 -05:00
ffcba0d714 feat: created mapillary desktop uploader dirivation 2025-09-13 18:03:04 -05:00
0f8faadd80 feat: added more config options for mcp servers 2025-09-12 10:47:31 -05:00
cf330b1cbb feat: installed sleep-mcp server 2025-09-12 10:18:06 -05:00
ca9f54d795 feat: installed mcp servers for vitest and eslint 2025-09-12 00:41:17 -05:00
2745af9443 feat: updated flake.lock 2025-09-08 16:47:05 -05:00
487dc21550 refactor: removed eslint mcp server 2025-09-07 20:15:39 -05:00
58fec3f132 refactor: switched to using mkEnableOption 2025-09-07 15:58:54 -05:00
09d2588406 feat: added config options to hte conventional commit extension to disable emoji and scopes propts 2025-09-06 23:42:13 -05:00
68b791f7c1 feat: installed conventional commits plugin 2025-09-06 23:11:22 -05:00
1831fea96a updated flake lock 2025-09-04 15:40:22 -05:00
2aad75a334 moved more packages to modules 2025-09-04 15:23:59 -05:00
c31eb38229 installed direnv extension 2025-09-04 14:33:17 -05:00
fab03391fc updated flake.lock 2025-09-04 00:33:53 -05:00
Eve
8b3e0e296e Merge remote-tracking branch 'leyla' 2025-09-03 20:56:50 -05:00
2d396228c7 moved krita to programs folder 2025-09-02 23:27:26 -05:00
b7dd5328d0 moved piper to module with enable option 2025-09-02 23:20:24 -05:00
afcf415621 enabled power management from twilight and emergent 2025-09-02 23:11:29 -05:00
d89d085409 updated flake lock 2025-09-02 23:05:27 -05:00
6e0650f73b installed the eslint mcp server 2025-08-31 13:56:20 -05:00
5a53a7bac4 installed nix mcp server 2025-08-28 14:14:05 -05:00
9f94a218cc disabled nfs mounts 2025-08-28 14:11:29 -05:00
0d57fb08b1 set up nix mcp server 2025-08-28 11:48:00 -05:00
0d2a3e26a8 moved network mounts out of main config and into their own file 2025-08-27 21:21:39 -05:00
4a7b57df99 removed invalid config option 2025-08-27 21:19:04 -05:00
ca2b188560 fixed nfs mounts 2025-08-27 17:51:11 -05:00
1c079fa479 installed vitest 2025-08-27 13:37:31 -05:00
Eve
9c8de12ad3 installed tailscale 2025-08-27 10:52:24 -05:00
348fa835b8 Merge pull request 'main' (#5) from jan-leila/nix-config:main into main
Reviewed-on: Lithospherical/nix-config#5
2025-08-27 15:36:38 +00:00
dbe4b674d7 set zfs auth and tls to true 2025-08-26 18:00:12 -05:00
060e6ef037 installed fonts 2025-08-26 15:53:45 -05:00
d128b54a05 removed redundant part of config 2025-08-24 23:01:04 -05:00
19bd67afe5 installed claudeDev 2025-08-24 15:55:07 -05:00
bf07bbdb1b updated flake lock 2025-08-23 13:26:04 -05:00
d12f4b5327 installed actual on defiant 2025-08-21 22:02:10 -05:00
102a61b38e updated flake lock 2025-08-16 11:32:03 -05:00
c1926f6256 updated flake lock 2025-08-13 18:34:13 -05:00
ee6ab1c0eb installed printer drivers 2025-08-09 23:32:32 -05:00
93b8582734 installed tab session manager 2025-08-06 22:12:42 -05:00
7e1e1f357f updated scrub email settings 2025-08-05 00:15:58 -05:00
3f897fae25 updated ai code plugin 2025-08-04 20:08:45 -05:00
b7a4f63ddd further refined and documents issues with wire guard config 2025-08-04 17:46:56 -05:00
7b9d1ee390 added qwen3:235b-a22b 2025-08-01 21:20:52 -05:00
5658a39249 added ACL to syncthing mnt folder 2025-08-01 18:30:28 -05:00
7b3d4bc021 added acl rules to defiant media_directory 2025-08-01 18:24:45 -05:00
22f2052ccf updated flake lock 2025-08-01 17:53:31 -05:00
53c0526c4d removed completed task from README.md 2025-07-27 18:27:46 -05:00
b5cfb5ec77 moved all extensions other then spell check into their own modules 2025-07-27 18:22:08 -05:00
0fd54a5494 added more options to aiCode 2025-07-26 17:53:37 -05:00
1f0a147a42 moved more extensions into extension modules 2025-07-26 17:40:01 -05:00
e58f08b723 move nix extensions into vscode extensions folders 2025-07-26 16:19:41 -05:00
99fb7b8a62 started to move extensions into configurable options 2025-07-26 12:50:21 -05:00
dfcd16fdd2 updated user words 2025-07-25 21:33:18 -05:00
3131d264d3 updated flake lock 2025-07-25 20:50:53 -05:00
9b5ccf6cc9 updated aiCode extension 2025-07-24 01:12:31 -05:00
1ac0b89935 fixed cname words 2025-07-23 18:47:46 -05:00
e14d1387dc updated user-words in vscode config 2025-07-23 18:15:58 -05:00
358f039460 created custom vscode extension 2025-07-21 19:35:11 -05:00
3f3ae74fac enabled ollama on horizon 2025-07-18 21:19:18 -05:00
c8f163ed0c fixed paperless 2025-07-14 19:38:24 -05:00
3a875e0c1f drafted out paperless config 2025-07-14 11:43:45 -05:00
1e5eed80c1 installed more home assistant components 2025-07-14 10:49:04 -05:00
2fb56dc296 moved home-assistant fail2ban config to its own module 2025-07-13 19:00:16 -05:00
92839b4603 got hass app config closer to working 2025-07-13 18:30:45 -05:00
2188954b79 installed open wake word 2025-07-13 17:39:25 -05:00
2e8eba7709 installed wyoming 2025-07-13 17:22:46 -05:00
0e8a148517 started to break up home-assistant config 2025-07-13 16:10:30 -05:00
b8e21e6c61 organized README.md 2025-07-12 22:44:49 -05:00
035089be38 updated README.md 2025-07-12 19:14:32 -05:00
776bf8f744 updated readme 2025-07-12 18:25:53 -05:00
9699472b1e update readme 2025-07-12 15:36:02 -05:00
3631ba11a8 removed unused parts of configuration 2025-07-12 15:06:32 -05:00
644f9371eb added home assistant to fail2ban 2025-07-12 15:04:44 -05:00
3ce9b625d1 fixed home assistant 2025-07-12 15:00:59 -05:00
1d7e0d11f0 removed continue vscode plugin 2025-07-12 11:53:53 -05:00
c863b8c4b5 removed copilot 2025-07-11 18:08:06 -05:00
9650c7335a installed copilot for vscode 2025-07-11 18:02:05 -05:00
56ef83b4ba updated flake lock and fixed vscode extensions 2025-07-11 17:01:37 -05:00
84dfcfddbd updated flake lock 2025-07-05 00:18:00 -05:00
43ce007033 moved impermanence config for var lib private into impermanence module 2025-07-05 00:01:28 -05:00
4db136d527 updated flake lock 2025-06-30 22:37:38 -05:00
b6ce78b35c updated nix flake 2025-06-28 10:33:59 -05:00
4c0c443048 fixed hotkeys 2025-06-25 18:35:51 -05:00
b3f992f001 added more options to gnome.nix 2025-06-25 17:42:37 -05:00
f8aa299e16 fixed hotkey config 2025-06-25 17:27:18 -05:00
7c61f8617b created hotkey generator 2025-06-25 14:30:12 -05:00
4825c5ec5e made common configuration place for gnome extensions 2025-06-25 13:32:07 -05:00
4ded22c2f5 Merge pull request 'main' (#7) from Lithospherical/nix-config:main into main
Reviewed-on: #7
2025-06-25 02:48:37 +00:00
db9d0fff09 Merge pull request 'main' (#4) from jan-leila/nix-config:main into main
Reviewed-on: Lithospherical/nix-config#4
2025-06-25 02:46:33 +00:00
Eve
117b30f855 created module to add dconf changes. tried to add dash-to-panel in this module, unsure if it worked 2025-06-24 21:43:43 -05:00
5ac103230a updated flake lock 2025-06-24 10:53:51 -05:00
fb757e9d1c switched to JDK for gdx 2025-06-23 17:01:25 -05:00
b4755365ba removed unused param 2025-06-23 15:42:07 -05:00
5c4e677fe8 added gdx-liftoff package 2025-06-23 15:40:03 -05:00
b5d292f20e made horizon use models from defiant 2025-06-22 21:03:23 -05:00
b7cfcfef7d limit zfs arc to 50gb 2025-06-22 20:10:25 -05:00
025eaa935a enabled ollama on defiant 2025-06-22 18:48:59 -05:00
9daa44c873 added baobab to excluded packages 2025-06-21 06:09:58 -05:00
173b1e3050 added comments to excluded packages 2025-06-21 06:01:53 -05:00
317ca75119 fixed environment.gnome.excludePackages 2025-06-21 05:59:34 -05:00
394355b2fb Merge remote-tracking branch 'origin' 2025-06-19 10:16:28 -05:00
4aa9778a72 merged with main 2025-06-19 10:13:21 -05:00
a482a3bfce updated flake.lock 2025-06-19 10:08:42 -05:00
dbad92ac75 updated flake lock 2025-06-11 23:39:07 -05:00
52a1d97fd4 drafted out entangled worlds mod 2025-06-11 23:36:29 -05:00
0476afb471 switched ollama persistence directory 2025-06-11 20:07:39 -05:00
1e0eda06b6 switched ollama persistence directory 2025-06-11 19:52:25 -05:00
a2b076e2e5 Merge pull request 'main' (#3) from jan-leila/nix-config:main into main
Reviewed-on: Lithospherical/nix-config#3
2025-06-08 16:51:33 +00:00
95e500593e enabled wacom on emergent 2025-06-08 11:48:18 -05:00
7e595d4fc0 Merge pull request 'main' (#6) from Lithospherical/nix-config:main into main
Reviewed-on: #6
2025-06-08 16:43:47 +00:00
703f35d52c Merge branch 'main' into main 2025-06-08 16:43:03 +00:00
Eve
616baf3baf disabled wayland in theory 2025-06-06 03:46:45 +00:00
b3918c8105 added dconf-editor to devShell 2025-06-05 14:04:52 -05:00
d3761aa11c Merge pull request 'pulled in eves changes' (#4) from Lithospherical/nix-config:main into main
Reviewed-on: #4
2025-06-05 04:58:20 +00:00
Eve
98a1d1da60 added piper for user eve 2025-06-05 04:53:30 +00:00
Eve
6c7b40e10e fixed eve not importing packages.nix 2025-06-05 04:40:13 +00:00
198e4c4c5b Merge pull request 'main' (#2) from jan-leila/nix-config:main into main
Reviewed-on: Lithospherical/nix-config#2
2025-06-05 04:13:46 +00:00
fc294686ba added steam impermanence config 2025-06-04 22:57:14 -05:00
8c4bd4291d updated paths to be based on xdg configurations 2025-06-04 21:00:04 -05:00
28ac8a4fa4 fixed home directory starts 2025-06-04 20:54:47 -05:00
ca01e667a1 added more application persistence configurations 2025-06-04 20:50:15 -05:00
033cc6bc22 removed outdated note 2025-06-04 18:43:22 -05:00
0f26b73f6a set up makemkv persistence 2025-06-04 18:37:53 -05:00
7363fc97bc updated application key file structure 2025-06-04 13:19:44 -05:00
50aca7b170 added applications key file 2025-06-04 13:14:11 -05:00
4e94731d9c added impermanence for jetbrains idea-community 2025-06-04 12:30:40 -05:00
89373ac243 set up firefox impermanence 2025-06-04 12:16:21 -05:00
8d86de4a2d drafted out firefox impermanence 2025-06-03 21:17:08 -05:00
17cb9bbaf5 set up more continue agents for horizon 2025-06-03 21:15:26 -05:00
54722eff61 set up impermanence configurations for applications 2025-06-03 21:12:51 -05:00
ef03167d23 added TODO note 2025-06-03 20:22:35 -05:00
2c011fda87 moved steam config out of nix configurations 2025-06-03 16:32:44 -05:00
9c7cc3e3a7 drafted out home manager steam configuration 2025-06-03 16:23:20 -05:00
7473ad5415 moved more packages to module 2025-06-03 11:19:34 -05:00
eca8dfcf69 removed extra packages 2025-06-02 23:15:17 -05:00
d741c25291 moved some packages under desktop + direct access 2025-06-02 22:50:35 -05:00
9fe35e74ad created program option entries for all packages that needs continual state 2025-06-02 22:47:01 -05:00
5484f9ba04 Merge remote-tracking branch 'refs/remotes/origin/main' 2025-06-02 21:15:37 -05:00
666504a63a added notes for leyla packages 2025-06-02 21:13:45 -05:00
dd53735354 refactored leyla packages into several folders 2025-06-02 21:07:09 -05:00
e6a640abfc fixed warning in nvida-drivers 2025-06-01 23:52:13 -05:00
a7b738eae3 made twilight hardware-configuration.nix match what is automatically generated 2025-06-01 22:10:29 -05:00
1a4c2b2f95 stripped down twilight configuration.nix 2025-06-01 21:06:54 -05:00
42e2ce9258 fixed warnings on defiant 2025-06-01 20:58:30 -05:00
9664eeb38d updated flakes 2025-06-01 18:19:03 -05:00
ac7c2e6de6 switched to lix 2025-06-01 18:11:27 -05:00
5e0bf9f068 re enabled ssh agent IdentityFile 2025-06-01 17:37:56 -05:00
2e41153c43 reverted nixos-anywhere devshell 2025-06-01 16:37:12 -05:00
35d6c1a634 enabled fwupd on horizon 2025-06-01 16:04:13 -05:00
2475170d0a moved user set configurations out of hardware-configuration.nix 2025-06-01 15:28:06 -05:00
ba2a31a80e removed unused variable 2025-06-01 15:16:27 -05:00
6ce718ab09 moved emergent to common disko configuration 2025-06-01 15:07:13 -05:00
795b9b010f made zfs mode settable 2025-06-01 15:04:37 -05:00
99ea355472 made boot disko partition configurable 2025-06-01 14:59:24 -05:00
a68f81cf3b moved disko needed configuration to disko.nix 2025-06-01 14:41:55 -05:00
7979b4ed17 installed prostudiomasters for leyla only 2025-06-01 14:29:39 -05:00
b1e7be48b3 moved packages to common-modules 2025-06-01 14:27:50 -05:00
36382ebfe0 switched to using nixos-anywhere flake in dev shell 2025-06-01 14:19:31 -05:00
254edf2d4a Merge pull request 'main' (#3) from Lithospherical/nix-config:main into main
Reviewed-on: #3
2025-06-01 18:40:54 +00:00
Eve
54d03b280c increase size of boot partiton for emergent 2025-06-01 13:36:50 -05:00
Eve
93793f2f1c set nvidia drivers to open 2025-06-01 13:36:44 -05:00
51b7a18449 Merge pull request 'main' (#1) from jan-leila/nix-config:main into main
Reviewed-on: Lithospherical/nix-config#1
2025-06-01 18:15:14 +00:00
21eff1d083 moved Eve configurations into their own package 2025-06-01 13:07:56 -05:00
2820252c54 made leyla configs optional 2025-06-01 13:00:34 -05:00
4f195245ce Merge pull request 'main' (#2) from Lithospherical/nix-config:main into main
Reviewed-on: #2
2025-06-01 17:52:54 +00:00
Eve
7acf6a1c13 added nvidia-drivers as a seperate file and imported to config file 2025-06-01 12:22:42 -05:00
Eve
c54210411d added steam + dependencies 2025-06-01 11:59:56 -05:00
Eve
327a5ce55f added vscodium 2025-06-01 16:31:08 +00:00
5d055c6a88 updated git username 2025-06-01 16:20:33 +00:00
1225e41d8b Merge pull request 'eve' (#1) from eve into main
Reviewed-on: #1
2025-06-01 00:47:02 +00:00
1dac56ccf5 Merge remote-tracking branch 'origin' 2025-06-01 00:46:09 +00:00
caea10c1e2 set git agent information 2025-06-01 00:45:13 +00:00
69b8f5ceca generate ssh keys for each system eve is on 2025-06-01 00:44:58 +00:00
d88c1c1588 updated mode for zfs disk 2025-05-31 19:14:37 -05:00
8f29881b72 created emergent configuration 2025-05-31 17:42:12 -05:00
45835201f5 fixed piper 2025-05-30 13:04:57 -05:00
5dd2b22821 moved keyboard config to hardware.nix 2025-05-30 13:00:47 -05:00
ee389bdb92 added via to udev 2025-05-30 12:58:01 -05:00
1be7eb162a enabled qmk if via keyboard is enabled 2025-05-30 11:22:46 -05:00
7923f493eb moved deviations living under horizon to common shared folder 2025-05-28 16:03:05 -05:00
210a4084f7 created prostudiomasters package 2025-05-28 15:54:58 -05:00
33f0ff6312 Merge remote-tracking branch 'refs/remotes/origin/main' 2025-05-28 15:34:49 -05:00
1b30c7d0ff updated nix flake 2025-05-28 15:28:03 -05:00
bdbe98dd65 enabled steam hardware 2025-05-26 19:36:21 -05:00
3e27429c74 set host when exporting port 2025-05-26 18:49:17 -05:00
f96f9f7675 set horizon up to use twilight ollama models 2025-05-26 17:54:09 -05:00
8c36fe5a72 set default api base for ai models to localhost 2025-05-26 17:49:47 -05:00
0bd483147d updated flake.lock 2025-05-26 17:48:25 -05:00
b1cd64e23e added new drives to defiant 2025-05-26 12:23:58 -05:00
3fcd8f0244 Merge remote-tracking branch 'origin' 2025-05-26 00:35:02 -05:00
0a7bbdbc8f fixed disk name 2025-05-25 21:48:13 -05:00
c6dfa3e7ce replaced disko disk 2025-05-25 21:33:41 -05:00
60f8b0265a fixed ollama on defiant 2025-05-25 17:42:53 -05:00
089fbb8717 changed formatting for ollama.nix to wrap all of configurations in its enable option 2025-05-25 13:49:03 -05:00
393f468be2 generate .continue/config.yaml via configuration 2025-05-25 13:07:32 -05:00
2c77cf2ed4 updated list of models on twilight 2025-05-25 01:32:05 -05:00
3f88b989d1 added more notes about continue configuration 2025-05-24 23:27:11 -05:00
77ab4781ac started to draft out configuration of continue models 2025-05-24 23:03:20 -05:00
7b6344b419 added ollama to defiant 2025-05-24 22:17:19 -05:00
5cc41542e1 fixed spelling of comment 2025-05-24 21:51:19 -05:00
c6ec40a3f7 organized models for twilight 2025-05-23 21:14:09 -05:00
c951860930 re enabled deep seek models for twilight 2025-05-23 20:53:37 -05:00
705554dd16 added TODO notes 2025-05-23 20:33:08 -05:00
f3431e3028 disabled telemetry 2025-05-23 20:30:39 -05:00
85e766a571 fixed vs code configuration 2025-05-23 20:27:07 -05:00
aa15f1ffe5 updated flake lock 2025-05-23 20:07:56 -05:00
825bdfc506 updated flake lock 2025-05-10 16:58:04 -05:00
17fc9618ba disabled activity feed on home page 2025-05-10 16:44:47 -05:00
7644c3a430 updated flake lock 2025-05-02 17:20:35 -05:00
b2aeb3a8b5 Merge remote-tracking branch 'origin' 2025-05-01 23:20:01 -05:00
3f37eea9a8 enabled ollama on twilight 2025-05-01 22:18:04 -05:00
3978d58c1a installed steam on horizon 2025-04-24 19:12:26 -05:00
bc3efbe2cb disabled vpn on defiant 2025-04-19 11:02:25 -05:00
3994002e0d installed picard 2025-04-17 00:44:44 -05:00
1f610845c8 updated flake lock 2025-04-16 12:30:32 -05:00
060dff826a replaced better toml 2025-04-16 12:18:27 -05:00
af894531cd updated signal package for eve 2025-04-16 12:07:36 -05:00
e20b752d11 default to tabs with a tab size of 2 2025-04-16 12:05:04 -05:00
004dd743ed added import on file move setting to vs code 2025-04-15 20:05:12 -05:00
7f6f36378c removed many packages from defiant 2025-04-13 23:07:57 -05:00
ee0697f406 updated flake 2025-04-13 22:37:31 -05:00
4eea3aa57d exposed jellyfin dlan 2025-04-13 17:17:56 -05:00
1637a83f84 removed unused variable 2025-04-12 03:18:39 -05:00
eb738c1477 cleaned up excluded packages 2025-04-12 03:14:35 -05:00
669132d67f installed sox 2025-04-12 02:59:28 -05:00
e293c83841 tried to fix wireguard config 2025-04-01 22:33:18 -05:00
89c8cff8a9 created qbittorrent config 2025-04-01 20:47:32 -05:00
899617266f created p2p wireguard interface for defiant 2025-04-01 16:22:44 -05:00
2f6e566acc updated wireguard keys file to vpn keys file 2025-04-01 15:25:22 -05:00
8a3aaba17c added qbittorrent package 2025-03-30 13:23:16 -05:00
c1b52262b6 removed completed task from tech debt tasks 2025-03-29 14:56:30 -05:00
f77ff8d284 updated flake lock and disabled lix again 2025-03-29 11:43:51 -05:00
89534b38d3 added calibre to leyla packages 2025-03-29 10:06:31 -05:00
70ed1618b5 added pdfarranger and calibre to applications 2025-03-26 17:14:22 -05:00
bd608563c0 added emergent and eves records folders 2025-03-26 15:56:18 -05:00
508e831a2a renamed supernote notes share 2025-03-26 15:40:12 -05:00
fd9d764e67 uninstalled paperwork 2025-03-26 14:24:43 -05:00
239ab58b5c installed paperwork 2025-03-26 13:09:34 -05:00
629357a416 port forwarded jellyfin port to stop logs from getting spammed 2025-03-24 17:22:46 -05:00
77f1aa30b7 drafted out virt home assistant 2025-03-23 19:16:02 -05:00
ba5d5a1487 removed all advertise tags comments 2025-03-22 14:39:19 -05:00
759390af8d removed unused syncthing config options 2025-03-22 14:35:54 -05:00
597c25b49d moved service config out of host namespace 2025-03-22 13:27:04 -05:00
c7938c3fe7 moved fail2ban configs into service configs 2025-03-22 13:01:25 -05:00
76d68cf146 disabled home assistant 2025-03-22 12:50:17 -05:00
4f30643513 removed advertise tags from devices 2025-03-21 18:47:00 -05:00
2dfdb79f06 fixed advertised tags on clients 2025-03-21 18:33:57 -05:00
0d7da663ed removed leyla tag from advertise-tags 2025-03-21 17:56:26 -05:00
186dd689eb added extra tailscale config 2025-03-21 17:34:29 -05:00
6c6f9a11bc updated flake lock 2025-03-20 00:45:49 -05:00
a821b1ab16 updated firefox config for leyla home manager 2025-03-19 20:05:25 -05:00
24e6512059 updated flake.lock 2025-03-19 19:57:12 -05:00
ae19af996e added task to tech debt 2025-03-19 01:22:53 -05:00
c81622a65c removed completed new feature from tasks 2025-03-19 01:21:16 -05:00
2350eb43ec simplified nginx config 2025-03-19 01:16:54 -05:00
4c430404b3 added tasks to README.md 2025-03-18 21:15:23 -05:00
68185640aa updated fail2ban filter 2025-03-18 18:34:35 -05:00
9bc13861b4 added fail2ban filter for immich 2025-03-18 18:32:57 -05:00
2a1259cbfa Merge remote-tracking branch 'refs/remotes/origin/main' 2025-03-17 18:36:49 -05:00
8e98273fcf added photos bookmark to firefox 2025-03-17 17:40:35 -05:00
b45fe04a2b removed duplicate task from tasks 2025-03-17 17:13:37 -05:00
6614c4a553 added extra config to immich proxy 2025-03-17 14:32:50 -05:00
3ec99b599b created immich config 2025-03-16 21:00:44 -05:00
4b014ed29f added more options to nfs config on horizon 2025-03-16 20:56:20 -05:00
7c0c94b47a updated nfs config 2025-03-16 20:34:09 -05:00
de6a43a239 added leyla documents to more syncthing devices 2025-03-16 15:31:34 -05:00
33ea6db98b made every address space for nfs use a different fsid 2025-03-16 14:30:04 -05:00
1695983742 updated nfs config for twilight 2025-03-16 13:34:06 -05:00
2ea0592c64 added local network and loopback addresses to nfs mount 2025-03-16 12:19:23 -05:00
6d4cfec975 added more config to nfs 2025-03-15 12:30:26 -05:00
ade8d1ec83 removed completed task from new features 2025-03-14 20:50:18 -05:00
fc8877ff10 added fsid to all nfs mounts 2025-03-14 20:35:11 -05:00
da78b208cd added ssh config for local git pushes 2025-03-14 20:21:18 -05:00
44d6b4827d fixed forgejo ssh 2025-03-14 19:49:11 -05:00
34dce8d9d1 fixed exports folder on nfs 2025-03-14 19:47:02 -05:00
9b857234f4 updated port number for forgejo internal ssh server 2025-03-14 12:29:42 -05:00
a31230fe67 added new feature to tasks 2025-03-14 12:02:39 -05:00
c1f90f07c9 updated path for fail2ban config 2025-03-14 11:45:07 -05:00
f81878afd7 added talk to new features 2025-03-14 11:32:50 -05:00
f5bef1ad43 removed completed task from tech debt 2025-03-14 02:04:20 -05:00
395a25eff1 adopted new syncthing flake 2025-03-13 02:13:11 -05:00
80092713e3 updated flake lock 2025-03-13 01:40:26 -05:00
32e00602f0 removed some extra config from jellyfin nginx config to fix webos 2025-03-11 18:48:44 -05:00
3cd17b3693 removed postgres from home-assistant db 2025-03-11 00:33:23 -05:00
5964554060 added task to tech debt 2025-03-10 18:00:30 -05:00
9ef33d0d8b fixed nfs shares 2025-03-10 17:55:00 -05:00
682e911e3c updated bookmarks in firefox 2025-03-10 00:41:56 -05:00
769da44f84 removed next cloud 2025-03-09 21:50:09 -05:00
c4c84503f5 added package to home assistant 2025-03-09 21:48:27 -05:00
06adc798da added more config to media folder 2025-03-09 14:41:01 -05:00
7b9b394ad2 exported export folder from nfs 2025-03-09 14:24:15 -05:00
1e98b54454 added more config for nfs mounts 2025-03-09 14:10:50 -05:00
f5c67b812f updated nfs mounts 2025-03-08 16:16:03 -06:00
0e5d8e3335 added postgres config to home assistant 2025-03-08 05:05:32 -06:00
9715517af6 added more config to home assistant 2025-03-07 19:53:11 -06:00
99e57603c7 added components to home assistant 2025-03-07 18:54:22 -06:00
86c585111c added packages for home assistant 2025-03-07 18:35:41 -06:00
8b39a80849 added extra config to services 2025-03-07 18:18:37 -06:00
62abf65e5a enabled ACME 2025-03-07 18:14:42 -06:00
46615cc361 added task to tech debt 2025-03-07 15:10:37 -06:00
651a988558 updated ROOT_URL for forgejo 2025-03-07 15:05:04 -06:00
591566cc2a removed pihole
started drafting out adguardhome
2025-03-06 14:23:12 -06:00
c4a7c711fb updated network config for defiant 2025-03-06 13:09:38 -06:00
4dc7fa293c disabled ollama 2025-03-06 12:04:31 -06:00
c6c17935dc updated next cloud package 2025-03-06 11:59:11 -06:00
9b5dfa16e2 updated flake lock 2025-03-06 11:50:18 -06:00
b2fbcc0e63 installed lix 2025-03-06 10:23:09 -06:00
59bf355353 added extra jellyfin domain 2025-03-04 21:39:12 -06:00
34bc5b1933 added tailnet devices to fail2ban whitelist 2025-03-04 21:30:45 -06:00
c2d7f1f481 updated syncthing defiant id 2025-03-02 15:40:28 -06:00
2a81195563 added syncthing configDir to persistence 2025-03-02 15:25:48 -06:00
eb13447136 switched order of gnome window buttons 2025-03-01 15:23:45 -06:00
57806433dc switched order of gnome window buttons 2025-03-01 15:03:09 -06:00
1347363fb0 added back minimize and maximize buttons to gnome 2025-03-01 14:52:07 -06:00
59743790b0 installed go vscode extensions 2025-02-27 19:07:50 -06:00
b5110878b1 added more config to searx 2025-02-26 16:50:30 -06:00
24d6e9653b added task to techdebt 2025-02-26 16:41:16 -06:00
88fa10a3f4 added auto accept to syncthing config 2025-02-26 16:36:17 -06:00
b2c0efd305 added task to tech debt 2025-02-26 16:28:48 -06:00
14f170cdc9 added type to tokenFile 2025-02-26 10:54:53 -06:00
f8966f062f made nfs only open firewall on tailscale interface 2025-02-26 10:42:53 -06:00
2b9737b8f2 added tailscale network to nfs server exports 2025-02-26 10:39:58 -06:00
8d02ff00fe added tor to tasks 2025-02-26 10:34:40 -06:00
53301d0e45 fixed pihole config 2025-02-24 22:56:32 -06:00
ac580d8e51 added task to tech debt 2025-02-24 19:19:59 -06:00
e2bd3d9af6 moved cal dir 2025-02-24 18:57:28 -06:00
a7c734871b fixed shares between devices 2025-02-24 18:48:06 -06:00
a7888cb164 removed horizon and twilight from notes and calendar share 2025-02-24 18:43:09 -06:00
d04c5183ca removed shale from leylas devices 2025-02-24 18:40:52 -06:00
50d1e8d5ea added share folder config 2025-02-24 18:35:35 -06:00
98b475e4c8 updated permission on syncing mnt dir 2025-02-24 18:10:57 -06:00
d2b43225ee set devices on folders 2025-02-24 13:01:34 -06:00
427a259632 Merge remote-tracking branch 'refs/remotes/origin/main' 2025-02-24 12:54:42 -06:00
87beef3149 added notes to pihole for tailscale 2025-02-24 12:52:34 -06:00
c9bc06f594 added syncthing to other computers 2025-02-24 12:49:54 -06:00
6d6e34e06a added extra set flags to configs 2025-02-24 12:38:42 -06:00
ab94cb1dae added advertise-routes to defiant tailscale config 2025-02-24 12:29:14 -06:00
500cbc213c added advertise-exit-node flags to tailscale 2025-02-24 12:23:12 -06:00
79c130dc4b disabled ollama on defiant 2025-02-24 12:10:01 -06:00
70fb2d9be2 set use routing features for tailscale 2025-02-24 12:06:38 -06:00
d4f3820e25 added note to task for readme 2025-02-23 18:56:10 -06:00
ff3ef80843 added task to new features 2025-02-23 18:04:56 -06:00
21d09b469d updated secrets 2025-02-23 17:52:25 -06:00
b7bf917274 imported tailscale config in default.nix 2025-02-23 17:50:40 -06:00
5be14739d8 fixed permissions on tailscale persist 2025-02-23 17:10:04 -06:00
0a00be9651 added email config to disko zfs config 2025-02-23 13:56:22 -06:00
af568c7b70 fixed deprecation warnings for vscode configs 2025-02-23 11:13:18 -06:00
2e0f71a6fa installed tailscale on all machines 2025-02-23 11:10:16 -06:00
9bfa5c9e8d disabled wireguard interface on horizon 2025-02-22 22:46:31 -06:00
9471b1f393 added wireguard config 2025-02-22 17:38:02 -06:00
489106956b added wireguard sops config 2025-02-22 17:00:05 -06:00
c851a1baeb removed home-manager.useGlobalPkgs 2025-02-21 17:13:50 -06:00
bc71cc2a63 updated firefox flake 2025-02-21 17:00:33 -06:00
c6bdff8603 drafted up ssh config for forgejo 2025-02-20 19:48:52 -06:00
ca20590d14 removed unused value 2025-02-18 18:33:35 -06:00
00a169a130 disabled registration on forgejo 2025-02-17 19:32:01 -06:00
4ed1972ffa set owner of generated ssh keys 2025-02-15 20:49:50 -06:00
6d776eabcb fixed steam in twilight 2025-02-15 19:12:36 -06:00
3dc579073d added reasons for every package in dev shell 2025-02-14 23:30:05 -06:00
2dccc10b44 removed cuda from twilight ollama 2025-02-14 23:28:15 -06:00
64856bd726 moved dconf.nix to own file 2025-02-14 23:27:55 -06:00
9aa4697790 added leyla@twilight to authorizedKeys 2025-02-14 18:23:34 -06:00
4c1d84928d installed ungoogled-chromium on eve user 2025-02-13 15:14:44 -06:00
a3d065d674 renamed mounts on horizon 2025-02-12 21:34:48 -06:00
9895ae6899 updated flake.lock 2025-02-12 20:52:00 -06:00
a99b35d1b1 temp disabled lix 2025-02-12 20:45:28 -06:00
23b6c07588 Merge remote-tracking branch 'refs/remotes/origin/main' 2025-02-12 19:56:06 -06:00
c7766de8bb added back lix 2025-02-12 19:55:02 -06:00
e6a738f3f6 added cuda acceleration to twilight 2025-02-09 13:32:11 -06:00
07514ed043 added fprintd to horizon 2025-02-08 18:23:36 -06:00
561766c676 added more network card configuration 2025-02-06 19:51:33 -06:00
aaaf751435 added ollama configs 2025-02-06 19:48:53 -06:00
f623a33863 updated models listed for different configurations 2025-01-29 19:43:02 -06:00
95c8418591 installed ollama 2025-01-29 19:07:49 -06:00
b6605dff27 fixed permissions on fail2ban database file 2025-01-25 13:59:22 -06:00
4d0aa119b0 removed ester user 2025-01-21 15:56:40 -06:00
cd825313dc added programs.fuse.userAllowOther to impermanence module 2025-01-19 13:00:53 -06:00
2ecb7e2993 update postgres 2025-01-19 12:02:10 -06:00
266d0f9ec1 updated flake.lock 2025-01-12 11:31:54 -06:00
f55abeb587 added target to nextcloud proxy 2025-01-11 15:06:50 -06:00
e7a53a5df0 updated jellyfin persist folders 2025-01-11 13:04:23 -06:00
0d952467cc moved monitors to separate file 2025-01-07 21:42:14 -06:00
8b1551266b added host option to rebuild script 2025-01-07 15:59:31 -06:00
b18cd526d7 added tasks to README.md 2025-01-06 20:03:32 -06:00
b9b5c1b2e3 added impermanence to fail2ban 2025-01-06 14:11:29 -06:00
6a8daadb4e fixed gnome tour showing on reboot 2025-01-06 14:07:19 -06:00
46fd27f768 added fail2ban 2025-01-06 14:06:26 -06:00
84698ba68b fixed coven id for sync 2025-01-06 11:57:01 -06:00
81a1c9cc3f removed completed tasks from README.md 2025-01-05 10:46:43 -06:00
89f2ada233 added coven to sync 2025-01-04 23:56:01 -06:00
445df7eb5b fixed identities not being found automatically 2025-01-04 23:50:24 -06:00
c557523bd6 configured ssh options 2025-01-04 23:42:14 -06:00
0c5b21d60a fixed ssh key generation 2025-01-04 23:29:29 -06:00
caa08f1c18 removed rsa from default hostKeys 2025-01-04 17:48:02 -06:00
19a9b06c4e added header to readme 2025-01-04 15:23:33 -06:00
e2d3bb5d01 added auto key generation to ssh 2025-01-04 15:20:51 -06:00
994234c18b increased side of boot partition 2025-01-03 19:58:22 -06:00
1374696401 removed un needed comment 2025-01-03 19:48:55 -06:00
dc6d05a0b0 added default to subdomains 2025-01-03 19:47:43 -06:00
31a9d20158 fixed mount points for new nfs server 2025-01-03 19:46:43 -06:00
c9a7ce7150 reorganized configs in configuration.nix 2025-01-03 18:27:49 -06:00
a379f146d6 updated flake.lock 2025-01-03 17:51:08 -06:00
4c7d6bf837 enabled reverse proxy 2025-01-03 17:09:10 -06:00
da8919b999 removed headscale 2025-01-03 16:34:15 -06:00
0e5cf34809 added headscale service 2025-01-03 13:48:03 -06:00
7dfb67f1f4 created nextcloud service 2025-01-03 13:39:08 -06:00
12e1f8067b added port forwards to services 2025-01-03 13:23:06 -06:00
6ab64fafe1 added acme to impermanence 2025-01-03 13:07:52 -06:00
b02bd1a5e2 created config for pihole 2025-01-02 21:39:39 -06:00
e6852cc537 fixed searx secrets not loading 2025-01-02 19:31:39 -06:00
e97061ab64 added groups and users to impermanence directories 2025-01-02 18:34:53 -06:00
a4e308650f created home assistant service 2025-01-02 18:22:05 -06:00
1824bc8cc9 added searx service 2025-01-02 18:13:10 -06:00
5a04603c85 removed replaced code from service.nix 2025-01-02 17:58:13 -06:00
2742eea9c5 added forgejo state dir to persist 2025-01-02 17:25:39 -06:00
8f59f8aeca fixed postgres config for forgejo 2025-01-02 17:22:05 -06:00
9ecba48dcf created forgejo service 2025-01-02 16:21:44 -06:00
fe1f2adf9f added files to persistence 2025-01-02 16:09:43 -06:00
6a5c7773fd added taask to TODO 2025-01-02 15:55:07 -06:00
6d2850e78f added postgres service 2025-01-02 15:46:50 -06:00
afa04e1080 disabled gdm auto suspend 2025-01-02 15:43:17 -06:00
1a072188c9 added device to README.md 2025-01-02 15:41:39 -06:00
c523e6075b added scrubbing and aut snapshot to defiant 2025-01-01 20:03:01 -06:00
46edb7363d disabled sleeping on defiant 2025-01-01 20:01:44 -06:00
1ee9b9a87d added back inspect command 2025-01-01 18:26:38 -06:00
ee5b794113 removed sections from research topics 2025-01-01 18:25:27 -06:00
8e94697224 added task to README.md 2025-01-01 18:24:08 -06:00
7a4c2a2b8d updated README.md 2025-01-01 18:23:13 -06:00
5abc647d98 fixed home manager with impermanence 2025-01-01 18:19:32 -06:00
22b40edb24 fixed SSH on defiant 2025-01-01 17:02:46 -06:00
15e0c1b6c4 switched to anki from anki-bin 2024-12-30 22:05:58 -06:00
dd9ca10ae4 updated README.md 2024-12-30 20:08:44 -06:00
905c4e73b2 added syncthing 2024-12-30 20:05:52 -06:00
21eea779db added task to README.md 2024-12-29 15:57:07 -06:00
a43b14a9fa installed adb on horizon 2024-12-27 17:29:51 -06:00
7127b9f9e8 updated packages 2024-12-26 23:05:23 -06:00
48dc0b1150 made impermanence config work slightly better 2024-12-25 18:21:10 -06:00
2d5e37b1eb moved openssh config into home manager configs 2024-12-24 16:01:37 -06:00
d760992a06 switched to tor-browser package 2024-12-24 14:55:49 -06:00
e8a1562eae installed tor 2024-12-24 14:05:17 -06:00
4eacddfce1 fixed home manager on horizon 2024-12-24 14:00:08 -06:00
46c6ffce54 updated flake 2024-12-24 13:52:29 -06:00
5139d41d17 updated flake lock 2024-12-23 14:47:55 -06:00
14fcd3b13b remove idea community and android studio temporally 2024-12-23 14:45:51 -06:00
f9947cd93d updated flake 2024-12-22 15:24:28 -06:00
1f19f9bf14 added TODO 2024-12-13 21:59:50 -06:00
431efa448e added host to map 2024-12-13 21:55:28 -06:00
e54981fffc added needed for boot to user persist directories 2024-12-13 21:48:43 -06:00
b6f1704af3 added assertion 2024-12-13 21:40:47 -06:00
6b1eaa7308 added authorized ssh key 2024-12-13 18:53:15 -06:00
b0e6a17fe6 removed outdated comment 2024-12-13 18:30:21 -06:00
cd60afa054 switched hostname 2024-12-13 18:24:31 -06:00
2a3501fea4 enabled jellyfin for defiant 2024-12-13 18:20:23 -06:00
194287e22a added assertion for jellyfin persistence 2024-12-13 18:02:09 -06:00
72322b0544 created jellyfin service 2024-12-12 20:44:26 -06:00
4420ab6b43 added note to reverse proxy 2024-12-12 20:17:18 -06:00
86a690a321 created reverse_proxy.nix 2024-12-12 20:00:42 -06:00
12658718a7 removed unused file 2024-12-11 21:07:46 -06:00
3d5aad50c4 added port to nfs 2024-12-11 20:52:34 -06:00
835945c925 created nfs exports 2024-12-11 20:06:26 -06:00
5eea6cdb04 made users not need to be disabled 2024-12-11 17:33:50 -06:00
30ad3c91b9 made disko/impermanence config into a module 2024-12-10 23:43:53 -06:00
c28731a1a7 made impermanence work 2024-12-09 16:57:13 -06:00
131f730caf added webtoons dl 2024-12-09 10:52:59 -06:00
848c57caa0 got impermanence to wipe drive 2024-12-08 21:58:11 -06:00
d2b3f0116e updated flake lock and removed lix 2024-12-04 20:06:57 -06:00
c016efc0ee added note to install script 2024-12-01 18:37:36 -06:00
7c296ffb6a added task to README 2024-12-01 06:56:44 -06:00
aa5ac89d24 updated flake.lock 2024-11-29 15:24:04 -06:00
9d88822266 started draft for installer 2024-11-25 22:37:08 -06:00
c487b26112 added entry to host map 2024-11-25 20:32:25 -06:00
2583888615 added darwinConfigurations to homeConfigurations outputs 2024-11-25 19:05:13 -06:00
5f21fd43ff fixed nix-darwin building 2024-11-25 18:28:55 -06:00
0d0443a02a restructured repo to support nix-darwin 2024-11-25 16:58:12 -06:00
3924a5aa8d fixed language in README 2024-11-25 16:03:55 -06:00
4c025e0cca cleaned up default.nix 2024-11-25 15:56:51 -06:00
db799a8253 moved spellcheck to separate file 2024-11-25 15:14:50 -06:00
c38754530f ran linter 2024-11-25 15:01:55 -06:00
5dd16b04bd added nix language server and formatter to vscode 2024-11-25 15:01:00 -06:00
265997fc7f removed unused parameter in module 2024-11-25 01:43:49 -06:00
814817eb5b removed completed task from README.md 2024-11-25 01:39:22 -06:00
e94f7e6637 updated flake.lock 2024-11-25 01:35:31 -06:00
7da7741ea5 moved environment/server into defiant config 2024-11-25 01:15:06 -06:00
047d1e4d8f removed client form environments 2024-11-25 01:13:31 -06:00
cef6ad7125 moved network manager out of environments 2024-11-25 01:11:22 -06:00
4d191a27cc moved local to modules 2024-11-25 00:59:05 -06:00
bc53ae6ee2 removed unneeded code from flake.nix 2024-11-24 23:05:39 -06:00
533ad19e7c added note to README.md 2024-11-24 22:51:40 -06:00
41f6d138c4 cleaned up teaks in README.md 2024-11-24 22:33:05 -06:00
b1b43bb7f0 cleaned up configuration structure to have common modules folder 2024-11-24 22:29:00 -06:00
11092d11b5 added overlays to home manager 2024-11-24 22:03:23 -06:00
3fdee879c7 added home manager configurations to output 2024-11-24 21:51:42 -06:00
90f0c114b3 created home manager nixos adapter modules 2024-11-24 15:23:04 -06:00
a755b9ff48 moved modules into host-modules 2024-11-24 14:55:19 -06:00
755c7f0e3a commented out unused variable 2024-11-24 14:32:27 -06:00
d46cdc8b1b ran linted 2024-11-24 14:31:11 -06:00
c039e60c4e created system module 2024-11-24 14:29:37 -06:00
bf0686a14b added enables to modules and made base module that imports all other modules 2024-11-24 14:17:32 -06:00
eaa19be741 moved another config to desktop module 2024-11-24 13:15:40 -06:00
9215e04043 moved some system packages to home manager 2024-11-24 13:13:33 -06:00
fa3cb19c0b moved more out of common config 2024-11-24 13:07:15 -06:00
aa7c2a2a15 added isPrincipleUser to users 2024-11-24 12:43:12 -06:00
ddc087a548 removed users from common
removed common hardware
2024-11-24 00:47:36 -06:00
d6cccdc41b installed godot_4-mono 2024-11-23 16:08:31 -06:00
ab7d031045 added another description to a flake input 2024-11-23 00:05:55 -06:00
131f04d901 added comments to flake inputs 2024-11-22 23:47:06 -06:00
a71ddaf5bd re enabled ester and eve users on horizon 2024-11-22 02:19:41 -06:00
747119936b removed task from readme 2024-11-22 02:11:09 -06:00
d74342427b tightened up firefox extensions configuration 2024-11-22 02:09:58 -06:00
962aae6443 removed unused templates folder 2024-11-22 01:10:02 -06:00
7d71802ba1 managed firefox though home manager 2024-11-22 01:06:02 -06:00
bf8d87600d commented out temporary unused imports in firefox 2024-11-22 00:53:37 -06:00
18f51a65c2 restructured project to split out home manager 2024-11-22 00:51:10 -06:00
c8e7944da5 added task to README.md 2024-11-21 22:02:11 -06:00
da8f80584f installed plugins for astro blog development 2024-11-17 19:18:14 -06:00
1179b3a605 added nix-config to direnv whitelist 2024-11-16 23:35:02 +00:00
db36e48564 added hide env diff to direnv config 2024-11-13 18:49:06 -06:00
47c8a79178 installed nix-inspect in dev shell 2024-11-11 20:18:24 -06:00
5ba3a082e6 disabled impermanence 2024-11-11 19:22:14 -06:00
0bea01b6ba installed lix on horizon 2024-11-11 19:01:56 -06:00
64d547aa16 switched to using dev shells for local development environment 2024-11-11 18:38:44 -06:00
22f6a37ea8 drafted out impermanence for defiant 2024-11-11 17:17:50 -06:00
818110419e added public share to leyla home 2024-11-11 17:16:09 -06:00
8553f6fcd8 disabled tails scale on clients 2024-11-11 17:12:31 -06:00
89bbccb9db added user dirs to leyla home manager 2024-11-04 22:25:10 -06:00
c4cf83298f added tail scale to clients 2024-11-04 17:49:44 -06:00
87895e29b5 fixed database and permissions on service directories 2024-11-04 17:47:09 -06:00
4e08a8ecf7 removed rev number from install script 2024-11-04 17:15:48 -06:00
3e11cfd967 fixed configs connection to nginx 2024-11-02 15:58:03 -05:00
f132f44b96 installed proxmark tools 2024-10-26 13:16:14 -05:00
77e3d687d4 added nix language server
removed ollama
2024-10-23 12:10:25 -05:00
1790d785f5 installed flipperq 2024-10-22 10:27:51 -05:00
7c3aaf241a added searxng 2024-10-19 11:15:13 -05:00
b2ee04dce5 added more hass config 2024-10-14 19:21:07 -05:00
abede83bfa added legacy mount points back to horizon 2024-10-14 19:13:36 -05:00
f6e0b8684c added home assistant to defiant 2024-10-13 20:21:36 +02:00
8dc253056c updated flake.lock 2024-10-11 17:35:54 +02:00
3cf6791d9e installed anki 2024-10-11 17:16:59 +02:00
60fba00be9 moved user config back into user file from home file 2024-10-04 01:51:38 +02:00
ce2f59a386 moved firefox draft to own file 2024-10-04 01:05:35 +02:00
04871258ee moved ester and eve over to home manager 2024-10-04 01:01:41 +02:00
dec1ef1d96 removed completed task from README 2024-10-03 23:07:27 +02:00
8da184333e added logging to commit hooks 2024-10-03 23:06:12 +02:00
c0167bd5d1 updated README 2024-10-03 23:04:17 +02:00
cb1f8665e5 ran linted 2024-10-03 22:52:53 +02:00
8f4e70c0d0 moved vscode to own file 2024-10-03 22:48:52 +02:00
2d6b16950b added util to lib 2024-10-03 22:42:30 +02:00
dd6046af27 added spell check words 2024-10-03 18:11:52 +02:00
1cef697f9b fixed task typo 2024-10-03 17:43:00 +02:00
da4f1299c7 added configs for steam noisetorch and adb back in 2024-10-03 17:41:12 +02:00
27406218b5 removed completed task from README.md 2024-10-03 17:20:44 +02:00
6eb6ac1278 removed non home manager isFullUser and isThinUser for leyla 2024-10-03 17:20:16 +02:00
3cc4807033 moved home-manager-config variable up 2024-10-03 17:07:22 +02:00
6f3022c23b added task to tech debt 2024-10-03 17:06:49 +02:00
232f31d23d merged home manager configs for all systems 2024-10-03 17:06:42 +02:00
da7b146213 added tasks to tech debt 2024-10-03 17:04:12 +02:00
67abf0d448 fixed optimise dates value 2024-10-03 16:56:43 +02:00
48a321fbd5 ran linter 2024-10-03 16:50:46 +02:00
cfa0f64f70 added weekly timers to garbage collect and optimize
made garbage collector collect older then a week
2024-10-03 16:48:35 +02:00
bbb4be8ac8 added optimize to nix settings 2024-10-03 16:39:36 +02:00
d99da6cd44 added flake check to pre commit hook 2024-10-03 16:39:02 +02:00
bba88fc3fe added home manger to all flakes 2024-10-03 16:38:51 +02:00
89c8c729fa added show-trace option to rebuild 2024-10-03 15:38:03 +02:00
ff295dc7ac reconfigured how home manager gets applied 2024-10-03 14:48:14 +02:00
26b231a329 moved dir env to nix-direnv in home manager 2024-10-03 14:21:54 +02:00
37d01a92b7 added direnv to bash.interactiveShellInit 2024-10-03 14:19:06 +02:00
f975bd047d added direnv to system packages 2024-10-02 22:31:57 +02:00
292d9d0790 set timezone automatically 2024-09-30 21:44:54 +02:00
e728268b9b simplified flake.nix 2024-09-30 10:14:36 -05:00
a625779b78 drafted out firefox config 2024-09-29 19:56:54 -05:00
62ad7255ba added ollama plugin 2024-09-29 12:15:15 -05:00
da7a41ce50 updated flakes 2024-09-29 11:16:42 -05:00
5916073839 groups environment vars in common environment
added qemu to system
2024-09-29 11:16:13 -05:00
a86f39668b reorganized flake inputs 2024-09-24 20:05:25 -05:00
aaa7f0aa3d restructured containers object 2024-09-24 18:43:32 -05:00
6fc22b8214 added note to task in README 2024-09-24 17:58:54 -05:00
b1fbaf169d ran linter 2024-09-24 17:58:47 -05:00
27b58dc288 switched submodule files to non flake input 2024-09-24 02:30:54 -05:00
ac14a781b2 added task to tech debt 2024-09-24 01:31:02 -05:00
3e3f175e1b updated task in README 2024-09-24 01:30:28 -05:00
baced6f8fd added config options for pihole 2024-09-24 01:29:35 -05:00
8adc6b97cd removed git tracking requirement from rebuilds 2024-09-24 01:29:22 -05:00
22ef0e838d renamed domains to apps 2024-09-24 01:05:26 -05:00
67efe92536 replaced ambiguous unicode character 2024-09-24 00:15:21 -05:00
454cac088e added submodule 2024-09-24 00:12:58 -05:00
295 changed files with 11932 additions and 1681 deletions

1
.envrc Normal file
View file

@ -0,0 +1 @@
use flake

6
.gitignore vendored
View file

@ -1 +1,5 @@
result result
.direnv
.vscode/*
!.vscode/settings.json
nixos.qcow2

3
.gitmodules vendored Normal file
View file

@ -0,0 +1,3 @@
[submodule "secrets"]
path = secrets
url = git@git.jan-leila.com:jan-leila/nix-config-secrets.git

View file

@ -1,3 +1,14 @@
#!/usr/bin/env bash #!/usr/bin/env nix-shell
#! nix-shell -i bash ../shell.nix
git stash pop -q echo "restoring stashed changes"
# Find the most recent pre-commit stash and restore it
recent_stash=$(git stash list | grep "pre-commit-stash-" | head -n 1 | cut -d: -f1)
if [ -n "$recent_stash" ]; then
echo "Found recent pre-commit stash: $recent_stash"
git stash pop -q "$recent_stash"
else
echo "No pre-commit stash found to restore"
fi

32
.hooks/post-merge Executable file
View file

@ -0,0 +1,32 @@
#!/usr/bin/env nix-shell
#! nix-shell -i bash ../shell.nix
# Get current branch name
current_branch=$(git branch --show-current)
# Only perform actions if we're on main branch and a merge just completed
if [ "$current_branch" = "main" ]; then
echo "Post-merge on main branch - running nix flake check"
# Run nix flake check after merge into main
nix flake check
if [ ! $? -eq 0 ]; then
echo "Warning: nix flake check failed after merge into main"
echo "Please fix the issues as soon as possible"
else
echo "nix flake check passed after merge"
fi
# Check if there are any pre-commit stashes to restore
recent_stash=$(git stash list | grep "pre-commit-stash-" | head -n 1 | cut -d: -f1)
if [ -n "$recent_stash" ]; then
echo "Post-merge: restoring pre-commit stash on main branch"
git stash pop -q "$recent_stash"
else
echo "Post-merge: no pre-commit stash to restore on main branch"
fi
else
echo "Post-merge: no action needed on branch '$current_branch'"
fi

View file

@ -1,11 +1,32 @@
#!/usr/bin/env bash #!/usr/bin/env nix-shell
#! nix-shell -i bash ../shell.nix
git stash -q --keep-index # Get current branch name
current_branch=$(git branch --show-current)
./lint.sh echo "stashing all uncommitted changes with named stash (excluding hooks)"
git stash push -q --keep-index -m "pre-commit-stash-$(date +%s)" -- ':!.hooks/'
# Only run nix flake check if we're on main branch
if [ "$current_branch" = "main" ]; then
echo "On main branch - checking flakes all compile"
nix flake check
if [ ! $? -eq 0 ]; then
echo "Error: nix flake check failed on main branch"
exit 1
fi
echo "nix flake check passed"
else
echo "Not on main branch - skipping nix flake check"
fi
echo "running linter"
alejandra -q .
RESULT=$? RESULT=$?
echo "adding lint changes to commit"
git add -u git add -u
exit $RESULT exit $RESULT

37
.hooks/pre-merge-commit Executable file
View file

@ -0,0 +1,37 @@
#!/usr/bin/env nix-shell
#! nix-shell -i bash ../shell.nix
# Get the target branch (the branch being merged into)
target_branch=""
# Check if we're in the middle of a merge
if [ -f .git/MERGE_HEAD ]; then
# We're in a merge, check if the current branch is main
current_branch=$(git branch --show-current)
if [ "$current_branch" = "main" ]; then
target_branch="main"
fi
fi
# If we're merging into main, run nix flake check
if [ "$target_branch" = "main" ]; then
echo "Merging into main branch - running nix flake check..."
echo "stashing all uncommitted changes with named stash (excluding hooks)"
git stash push -q --keep-index -m "pre-merge-stash-$(date +%s)" -- ':!.hooks/'
echo "checking flakes all compile"
nix flake check
if [ ! $? -eq 0 ]; then
echo "Error: nix flake check failed. Merge aborted."
echo "Please fix the issues and try merging again."
exit 1
fi
echo "nix flake check passed. Merge can proceed."
else
echo "Not merging into main branch, skipping nix flake check."
fi
exit 0

View file

@ -9,3 +9,11 @@ creation_rules:
key_groups: key_groups:
- age: - age:
- *leyla - *leyla
- path_regex: secrets/vpn-keys.yaml$
key_groups:
- age:
- *leyla
- path_regex: secrets/application-keys.yaml$
key_groups:
- age:
- *leyla

21
.vscode/settings.json vendored Normal file
View file

@ -0,0 +1,21 @@
{
"cSpell.words": [
"attrsets",
"bitwarden",
"forgejo",
"gids",
"headscale",
"hesperium",
"jellyfin",
"macvlan",
"nextcloud",
"nixos",
"nixpkgs",
"pihole",
"pkgs",
"rpool",
"searx",
"ublock",
"uids"
]
}

154
README.md
View file

@ -1,18 +1,27 @@
# nix-config
https://git.jan-leila.com/jan-leila/nix-config
nix multi user, multi system, configuration with `sops` secret management, `home-manager`, and `nixos-anywhere` setup via `disko` with `zfs` + `impermanence`
# Hosts # Hosts
## Host Map ## Host Map
| Hostname | Device Description | Primary User | Role | | Hostname | Device Description | Primary User | Role | Provisioned | Using Nix |
| :---------: | :------------------------: | :--------------: | :-------: | | :---------: | :------------------------: | :--------------: | :-------: | :---------: | :-------: |
| `twilight` | Desktop Computer | Leyla | Desktop | | `twilight` | Desktop Computer | Leyla | Desktop | ✅ | ✅ |
| `horizon` | 13 inch Framework Laptop | Leyla | Laptop | | `horizon` | 13 inch Framework Laptop | Leyla | Laptop | ✅ | ✅ |
| `defiant` | NAS Server | Leyla | Service | | `defiant` | NAS Server | Leyla | Server | ✅ | ✅ |
| `emergent` | Desktop Computer | Eve | Laptop | | `hesperium` | Mac | ????? | Mac | ❌ | ❌ |
| `threshold` | Laptop | Eve | Desktop | | `emergent` | Desktop Computer | Eve | Desktop | ✅ | ✅ |
| `threshold` | Laptop | Eve | Laptop | ❌ | ❌ |
| `wolfram` | Steam Deck | House | Handheld | ✅ | ❌ |
| `ceder` | A5 Tablet | Leyla | Tablet | ✅ | ❌ |
| `skate` | A6 Tablet | Leyla | Tablet | ❌ | ❌ |
| `shale` | A6 Tablet | Eve | Tablet | ✅ | ❌ |
| `coven` | Pixel 8 | Leyla | Android | ✅ | ❌ |
# Tooling # Tooling
## Lint
`./lint.sh`
## Rebuilding ## Rebuilding
`./rebuild.sh` `./rebuild.sh`
@ -22,45 +31,100 @@
## New host setup ## New host setup
`./install.sh --target 192.168.1.130 --flake hostname` `./install.sh --target 192.168.1.130 --flake hostname`
## Updating Secrets
`sops secrets/secrets_file_here.yaml`
## Inspecting a configuration
`nix-inspect -p .`
# Notes: # Notes:
## Research topics ## Research topics
- Look into this for rotating sops keys `https://technotim.live/posts/rotate-sops-encryption-keys/` - Look into this for auto rotating sops keys `https://technotim.live/posts/rotate-sops-encryption-keys/`
- Look into this for openssh known configurations https://search.nixos.org/options?channel=unstable&from=0&size=15&sort=alpha_asc&type=packages&query=services.openssh - Look into this for npins https://jade.fyi/blog/pinning-nixos-with-npins/
- Look into this for flake templates https://nix.dev/manual/nix/2.22/command-ref/new-cli/nix3-flake-init - https://nixos-and-flakes.thiscute.world/
- Look into this for headscale https://carlosvaz.com/posts/setting-up-headscale-on-nixos/ - proton mail now has an smtp server we could use that for our zfs and SMART test emails
- Look into this for home assistant configuration https://nixos.wiki/wiki/Home_Assistant https://myme.no/posts/2021-11-25-nixos-home-assistant.html - VR https://lvra.gitlab.io/docs/distros/nixos/
## Configuration
set up git configuration for local development: `git config --local include.path .gitconfig`
to update passwords run: `nix shell nixpkgs#sops -c sops secrets/user-passwords.yaml` (NOTE: this depends on the SOPS_AGE_KEY_DIRECTORY environment variable being set)
# Tasks: # Tasks:
## Documentation
- [ ] project layout
- [ ] users file structure
- [ ] reverse proxy design
- public service compatibility
- vpn based services compatibility
- [ ] the choice of impermanence
- [ ] storage module design
- base impermanence compatibility and structure reason
- what does local vs persist mean in pool names (do we need a second layer? ephemeral, local, and persist? local exist only on this machine and is not backed up, persist is backed up to other machines (I think we need to redo the sops and torrent/media folders?))
- plans to possibly support btrfs in the future
- plans for home manager datasets
- plans for auto systemd service datasets
- [ ] plans to migrate to some kind of acl structure for user management
- [ ] plans to migrate from flakes to npins
## Chores:
- [ ] test out crab hole service
## Tech Debt ## Tech Debt
- vscode extensions should be in own flake (make sure to add the nixpkgs.overlays in it too) - [ ] monitor configuration in `~/.config/monitors.xml` should be sym linked to `/run/gdm/.config/monitors.xml` (https://www.reddit.com/r/NixOS/comments/u09cz9/home_manager_create_my_own_symlinks_automatically/)
- join config for systemd.tmpfiles.rules and service directory bindings - [ ] migrate away from flakes and move to npins
- monitor configuration in `~/.config/monitors.xml` should be sym linked to `/run/gdm/.config/monitors.xml` - [ ] `host.users` should be redone so that we just extend the base `users.users` object. Right now we cant quite do this because we have weird circular dependencies with disko/impermanence (not sure which one) and home manger enabling/disabling users per devices
- move applications in server environment into their own flakes
- pihole config files ## Broken things
## New Features - [ ] figure out steam vr things?
- offline access for nfs mounts (overlay with rsync might be a good option here? https://www.spinics.net/lists/linux-unionfs/msg07105.html note about nfs4 and overlay fs) - [ ] whisper was having issues
- fix pre commit hook
- Flake templates ## Data Integrity
- home assistant virtual machine - [ ] zfs email after scrubbing # TODO: test this
- searxng docker - [ ] SMART test with email results
- nextcloud ??? - [ ] zfs encryption FIDO2 2fa (look into shavee)
- samba mounts - [ ] rotate sops encryption keys periodically (and somehow sync between devices?)
- firefox declarative??? - [ ] Secure Boot - https://github.com/nix-community/lanzaboote
- figure out steam vr things? - [ ] auto turn off on power loss - nut
- Open GL? - [ ] every service needs to have its own data pool
- util functions - [ ] secondary server with data sync. Maybe a Pi with a usb hdd enclosure and use rtcwake to only turn on once a week to sync data over tailscale with connection initiated from pi's side. We could probably put this at LZ. Hoping for it to draw only like $1 of power a month. Initial sync should probably be done here before we move it over because that will take a while. Data should be encrypted so that devices doesn't have access to it. Project will prob cost like $1800
- openssh known hosts
- rotate sops encryption keys periodically (and somehow sync between devices?) ## Data Access
- zfs email after scrubbing - [ ] nfs export should be backed by the same values for server and client
- headscale server (just needs to be tested) - [ ] samba mounts
- mastodon server - [ ] offline access for nfs mounts (overlay with rsync might be a good option here? https://www.spinics.net/lists/linux-unionfs/msg07105.html note about nfs4 and overlay fs)
- tail scale clients - [ ] figure out why syncthing and jellyfins permissions don't propagate downwards
- wake on LAN - [ ] make radarr, sonarr, and bazarr accessible over vpn with fully qualified names via reverse proxy
- ISO target that contains authorized keys for nixos-anywhere - [ ] move searx, home-assistant, actual, vikunja, jellyfin, paperless, and immich to only be accessible via vpn
- [ ] FreeIPA/SSSD/LDAP/Kerberos to manage uid and gid's
## Services
- [ ] ntfy service for unified push
- [ ] signal socket server
- [ ] vikunja service for project management
- [ ] Penpot services (need to make this custom)
- [ ] minecraft server with old world file
- [ ] storj server
- [ ] Create Tor guard/relay server
- [ ] screeps server
- [ ] mastodon instance
## DevOps
- [ ] wake on LAN for updates
- [ ] remote distributed builds - https://nix.dev/tutorials/nixos/distributed-builds-setup.html
- [ ] ISO target that contains authorized keys for nixos-anywhere https://github.com/diegofariasm/yggdrasil/blob/4acc43ebc7bcbf2e41376d14268e382007e94d78/hosts/bootstrap/default.nix
- [ ] fix panoramax package
- [ ] claude code MCP servers should bundle node with them so they work in all environments
## Observability
- [ ] graphana for dashboards
- [ ] prometheus and loki for metric and log collection
- [ ] zfs storage usage
- [ ] zfs drive health status
- [ ] service version lag
- [ ] network/cpu/ram utilization
- [ ] http latency
- [ ] postgres db load
- [ ] nginx queries
- [ ] ntfy.sh for push notifications
- [ ] kuma for uptime visualization
## Packages
- [ ] Custom private fork of MultiMC

30
build-installer.sh Normal file
View file

@ -0,0 +1,30 @@
#!/usr/bin/env bash
while [ $# -gt 0 ]; do
case "$1" in
--flake*|-f*)
if [[ "$1" != *=* ]]; then shift; fi
flake="${1#*=}"
;;
# --user*|-u*)
# if [[ "$1" != *=* ]]; then shift; fi
# user="${1#*=}"
# ;;
--help|-h)
echo "--help -h: print this message"
echo "--flake -f: set the flake to build an installer for"
# echo "--user -u: set the user to install flake as on the target system"
exit 0
;;
*)
echo "Error: Invalid argument $1"
exit 1
;;
esac
shift
done
flake=${flake:-"basic"}
user=${user:-$USER}
nix build .#installerConfigurations.$flake.config.system.build.isoImage

View file

@ -0,0 +1,16 @@
{...}: {
host = {
users = {
leyla = {
isDesktopUser = true;
isTerminalUser = true;
isPrincipleUser = true;
};
eve.isNormalUser = false;
};
};
system.stateVersion = 5;
nixpkgs.hostPlatform = "aarch64-darwin";
}

View file

@ -0,0 +1,5 @@
{...}: {
imports = [
./configuration.nix
];
}

View file

@ -0,0 +1,13 @@
{
lib,
config,
osConfig,
...
}: let
users = config.host.users;
in {
leyla = lib.mkIf users.leyla.isNormalUser (import ./leyla);
eve = lib.mkIf users.eve.isNormalUser (import ./eve);
ivy = lib.mkIf users.ivy.isNormalUser (import ./ivy);
git = lib.mkIf (osConfig.services.forgejo.enable or false) (import ./git);
}

View file

@ -0,0 +1,56 @@
{osConfig, ...}: let
userConfig = osConfig.host.users.eve;
in {
imports = [
./packages.nix
./gnomeconf.nix
];
home = {
username = userConfig.name;
homeDirectory = osConfig.users.users.eve.home;
# This value determines the Home Manager release that your configuration is
# compatible with. This helps avoid breakage when a new Home Manager release
# introduces backwards incompatible changes.
#
# You should not change this value, even if you update Home Manager. If you do
# want to update the value, then make sure to first check the Home Manager
# release notes.
stateVersion = "23.11"; # Please read the comment before changing.
# Home Manager is pretty good at managing dotfiles. The primary way to manage
# plain files is through 'home.file'.
file = {
# # Building this configuration will create a copy of 'dotfiles/screenrc' in
# # the Nix store. Activating the configuration will then make '~/.screenrc' a
# # symlink to the Nix store copy.
# ".screenrc".source = dotfiles/screenrc;
# # You can also set the file content immediately.
# ".gradle/gradle.properties".text = ''
# org.gradle.console=verbose
# org.gradle.daemon.idletimeout=3600000
# '';
};
# Home Manager can also manage your environment variables through
# 'home.sessionVariables'. If you don't want to manage your shell through Home
# Manager then you have to manually source 'hm-session-vars.sh' located at
# either
#
# ~/.nix-profile/etc/profile.d/hm-session-vars.sh
#
# or
#
# ~/.local/state/nix/profiles/profile/etc/profile.d/hm-session-vars.sh
#
# or
#
# /etc/profiles/per-user/leyla/etc/profile.d/hm-session-vars.sh
#
sessionVariables = {
# EDITOR = "emacs";
};
};
}

View file

@ -0,0 +1,39 @@
{
osConfig,
lib,
...
}: {
config = {
gnome = lib.mkMerge [
{
colorScheme = "prefer-dark";
accentColor = "slate";
clockFormat = "24h";
nightLight = {
enable = true;
automatic = false;
fromTime = 12.0;
toTime = 11.999999999999;
temperature = 2700;
};
extraWindowControls = true;
extensions = {
dash-to-panel = {
enable = true;
};
};
}
(lib.mkIf (osConfig.networking.hostName == "horizon") {
displayScaling = 125;
experimentalFeatures = {
scaleMonitorFramebuffer = true;
};
})
];
dconf = {
enable = true;
};
};
}

View file

@ -0,0 +1,87 @@
{
lib,
pkgs,
config,
osConfig,
...
}: let
userConfig = osConfig.host.users.eve;
hardware = osConfig.host.hardware;
in {
config = {
nixpkgs.config = {
allowUnfree = true;
};
# Packages that can be installed without any extra configuration
# See https://search.nixos.org/packages for all options
home.packages = lib.lists.optionals userConfig.isDesktopUser (
with pkgs; [
gnomeExtensions.dash-to-panel
claude-code
friture
]
);
# Packages that need to be installed with some extra configuration
# See https://home-manager-options.extranix.com/ for all options
programs = lib.mkMerge [
{
# Let Home Manager install and manage itself.
home-manager.enable = true;
}
(lib.mkIf (config.user.isDesktopUser || config.user.isTerminalUser) {
git = {
enable = true;
settings = {
user.name = "Eve";
user.email = "evesnrobins@gmail.com";
init.defaultBranch = "main";
};
};
openssh = {
enable = true;
hostKeys = [
{
type = "ed25519";
path = "${config.home.username}_${osConfig.networking.hostName}_ed25519";
}
];
};
})
(lib.mkIf config.user.isDesktopUser {
vscode = {
enable = true;
package = pkgs.vscodium;
};
firefox.enable = true;
bitwarden.enable = true;
discord.enable = true;
makemkv.enable = true;
signal-desktop-bin.enable = true;
steam.enable = true;
piper.enable = hardware.piperMouse.enable;
krita.enable = true;
ungoogled-chromium.enable = true;
inkscape.enable = true;
obsidian.enable = true;
obs-studio.enable = true;
kdenlive.enable = true;
tor-browser.enable = true;
olympus.enable = true;
libreoffice.enable = true;
claude-code.enable = osConfig.host.ai.enable;
# Windows applications that we need to figure out how to install
guild-wars-2.enable = false;
vortex.enable = false;
dungeon-draft.enable = false;
vmware-workstation.enable = true;
})
];
};
}

View file

@ -0,0 +1,22 @@
{osConfig, ...}: {
impermanence.fallbackPersistence.enable = false;
home = {
username = osConfig.users.users.git.name;
homeDirectory = osConfig.users.users.git.home;
# This value determines the Home Manager release that your configuration is
# compatible with. This helps avoid breakage when a new Home Manager release
# introduces backwards incompatible changes.
#
# You should not change this value, even if you update Home Manager. If you do
# want to update the value, then make sure to first check the Home Manager
# release notes.
stateVersion = "23.11"; # Please read the comment before changing.
};
programs.ssh.extraConfig = ''
AuthorizedKeysFile
/var/lib/forgejo/.ssh/authorized_keys
'';
}

View file

@ -0,0 +1,55 @@
{osConfig, ...}: let
userConfig = osConfig.host.users.ivy;
in {
imports = [
./packages.nix
];
home = {
username = userConfig.name;
homeDirectory = osConfig.users.users.ivy.home;
# This value determines the Home Manager release that your configuration is
# compatible with. This helps avoid breakage when a new Home Manager release
# introduces backwards incompatible changes.
#
# You should not change this value, even if you update Home Manager. If you do
# want to update the value, then make sure to first check the Home Manager
# release notes.
stateVersion = "23.11"; # Please read the comment before changing.
# Home Manager is pretty good at managing dotfiles. The primary way to manage
# plain files is through 'home.file'.
file = {
# # Building this configuration will create a copy of 'dotfiles/screenrc' in
# # the Nix store. Activating the configuration will then make '~/.screenrc' a
# # symlink to the Nix store copy.
# ".screenrc".source = dotfiles/screenrc;
# # You can also set the file content immediately.
# ".gradle/gradle.properties".text = ''
# org.gradle.console=verbose
# org.gradle.daemon.idletimeout=3600000
# '';
};
# Home Manager can also manage your environment variables through
# 'home.sessionVariables'. If you don't want to manage your shell through Home
# Manager then you have to manually source 'hm-session-vars.sh' located at
# either
#
# ~/.nix-profile/etc/profile.d/hm-session-vars.sh
#
# or
#
# ~/.local/state/nix/profiles/profile/etc/profile.d/hm-session-vars.sh
#
# or
#
# /etc/profiles/per-user/ivy/etc/profile.d/hm-session-vars.sh
#
sessionVariables = {
# EDITOR = "emacs";
};
};
}

View file

@ -0,0 +1,73 @@
{
lib,
pkgs,
config,
osConfig,
...
}: {
config = {
nixpkgs.config = {
allowUnfree = true;
};
# Programs that need to be installed with some extra configuration
programs = lib.mkMerge [
{
# Let Home Manager install and manage itself.
home-manager.enable = true;
}
(lib.mkIf (config.user.isDesktopUser || config.user.isTerminalUser) {
# git = {
# enable = true;
# userName = "Ivy";
# userEmail = "ivy@example.com"; # Update this with actual email
# extraConfig.init.defaultBranch = "main";
# };
openssh = {
enable = true;
hostKeys = [
{
type = "ed25519";
path = "${config.home.username}_${osConfig.networking.hostName}_ed25519";
}
];
};
})
(lib.mkIf config.user.isDesktopUser {
vscode = {
enable = true;
package = pkgs.vscodium;
mutableExtensionsDir = false;
profiles.default = {
enableUpdateCheck = false;
enableExtensionUpdateCheck = false;
extraExtensions = {
# Cline extension (Claude AI assistant)
claudeDev.enable = true;
# Auto Rename Tag
autoRenameTag.enable = true;
# Live Server
liveServer.enable = true;
};
extensions = let
extension-pkgs = pkgs.nix-vscode-extensions.forVSCodeVersion config.programs.vscode.package.version;
in (
with extension-pkgs.open-vsx; [
streetsidesoftware.code-spell-checker
]
);
};
};
firefox.enable = true;
discord.enable = true;
signal-desktop-bin.enable = true;
claude-code.enable = true;
})
];
};
}

View file

@ -0,0 +1,101 @@
{...}: {
config = {
gnome = {
extraWindowControls = true;
colorScheme = "prefer-dark";
clockFormat = "24h";
nightLight = {
enable = true;
automatic = false;
fromTime = 12.0;
toTime = 11.999999999999;
temperature = 2700;
};
extensions = {
dash-to-dock = {
enable = true;
options = {
"dock-position" = "LEFT";
"intellihide-mode" = "ALL_WINDOWS";
"show-trash" = false;
"require-pressure-to-show" = false;
"show-mounts" = false;
};
};
};
hotkeys = {
"Open Terminal" = {
binding = "<Super>t";
command = "kgx";
};
"Open Firefox" = {
binding = "<Super>f";
command = "firefox";
};
};
};
dconf = {
enable = true;
settings = {
"org/gnome/shell" = {
favorite-apps = ["org.gnome.Nautilus.desktop" "firefox.desktop" "codium.desktop" "steam.desktop" "org.gnome.Console.desktop"];
# app-picker-layout =
# builtins.map (
# applications:
# lib.hm.gvariant (builtins.listToAttrs (lib.lists.imap0 (i: v: lib.attrsets.nameValuePair v (lib.hm.gvariant.mkVariant "{'position': <${i}>}")) applications))
# ) [
# [
# "org.gnome.Nautilus.desktop"
# "bitwarden.desktop"
# "firefox.desktop"
# "torbrowser.desktop"
# "chromium-browser.desktop"
# "codium.desktop"
# "idea-community.desktop"
# "org.gnome.TextEditor.desktop"
# "dbeaver.desktop"
# "bruno.desktop"
# "anki.desktop"
# "obsidian.desktop"
# "signal-desktop.desktop"
# "discord.desktop"
# "gimp.desktop"
# "org.inkscape.Inkscape.desktop"
# "org.kde.krita.desktop"
# "davinci-resolve.desktop"
# "com.obsproject.Studio.desktop"
# "org.freecad.FreeCAD.desktop"
# "makemkv.desktop"
# "easytag.desktop"
# "transmission-gtk.desktop"
# ]
# [
# "SteamVR.desktop"
# "Beat Saber.desktop"
# "Noun Town.desktop"
# "WEBFISHING.desktop"
# "Factorio.desktop"
# ]
# [
# "org.gnome.Settings.desktop"
# "org.gnome.SystemMonitor.desktop"
# "org.gnome.Snapshot.desktop"
# "org.gnome.Usage.desktop"
# "org.gnome.DiskUtility.desktop"
# "org.gnome.Evince.desktop"
# "org.gnome.fonts.desktop"
# "noisetorch.desktop"
# "nvidia-settings.desktop"
# "OpnRGB.desktop"
# "org.freedesktop.Piper.desktop"
# "via-nativia.desktop"
# "protonvpn-app.desktop"
# "simple-scan.desktop"
# ]
# ];
};
};
};
};
}

View file

@ -0,0 +1,95 @@
{
pkgs,
config,
osConfig,
...
}: {
imports = [
./packages
./i18n.nix
./impermanence.nix
./dconf.nix
];
config = {
impermanence.enable = osConfig.host.impermanence.enable;
# Home Manager needs a bit of information about you and the paths it should
# manage.
home = {
username = osConfig.host.users.leyla.name;
homeDirectory = osConfig.users.users.leyla.home;
# This value determines the Home Manager release that your configuration is
# compatible with. This helps avoid breakage when a new Home Manager release
# introduces backwards incompatible changes.
#
# You should not change this value, even if you update Home Manager. If you do
# want to update the value, then make sure to first check the Home Manager
# release notes.
stateVersion = "23.11"; # Please read the comment before changing.
# Home Manager is pretty good at managing dotfiles. The primary way to manage
# plain files is through 'home.file'.
file = {
# # Building this configuration will create a copy of 'dotfiles/screenrc' in
# # the Nix store. Activating the configuration will then make '~/.screenrc' a
# # symlink to the Nix store copy.
# ".screenrc".source = dotfiles/screenrc;
# # You can also set the file content immediately.
# ".gradle/gradle.properties".text = ''
# org.gradle.console=verbose
# org.gradle.daemon.idletimeout=3600000
# '';
"${config.xdg.configHome}/user-dirs.dirs" = {
force = true;
text = ''
# This file is written by xdg-user-dirs-update
# If you want to change or add directories, just edit the line you're
# interested in. All local changes will be retained on the next run.
# Format is XDG_xxx_DIR="$HOME/yyy", where yyy is a shell-escaped
# homedir-relative path, or XDG_xxx_DIR="/yyy", where /yyy is an
# absolute path. No other format is supported.
#
XDG_DESKTOP_DIR="$HOME/desktop"
XDG_DOWNLOAD_DIR="$HOME/downloads"
XDG_DOCUMENTS_DIR="$HOME/documents"
XDG_TEMPLATES_DIR="$HOME/documents/templates"
XDG_MUSIC_DIR="$HOME/documents/music"
XDG_PICTURES_DIR="$HOME/documents/photos"
XDG_VIDEOS_DIR="$HOME/documents/videos"
XDG_PUBLICSHARE_DIR="$HOME/documents/public"
'';
};
};
keyboard.layout = "us,it,de";
# Home Manager can also manage your environment variables through
# 'home.sessionVariables'. If you don't want to manage your shell through Home
# Manager then you have to manually source 'hm-session-vars.sh' located at
# either
#
# ~/.nix-profile/etc/profile.d/hm-session-vars.sh
#
# or
#
# ~/.local/state/nix/profiles/profile/etc/profile.d/hm-session-vars.sh
#
# or
#
# /etc/profiles/per-user/leyla/etc/profile.d/hm-session-vars.sh
#
sessionVariables = {
# EDITOR = "emacs";
};
};
# TODO: move this into a fonts module
home.packages = with pkgs; [
aileron
];
fonts.fontconfig.enable = true;
};
}

View file

@ -0,0 +1,12 @@
{...}: {
i18n = {
defaultLocale = "en_IE.UTF-8";
extraLocaleSettings = {
# LC_ADDRESS = "en_IE.UTF-8"; # lets just get used to this one now
# LC_TELEPHONE = "en_IE.UTF-8"; # lets just get used to this one now
LC_MONETARY = "en_US.UTF-8"; # to be changed once I move
LC_PAPER = "en_US.UTF-8"; # convenient for american printers until I move
};
};
}

View file

@ -0,0 +1,20 @@
{
lib,
config,
...
}: {
config = lib.mkIf (config.impermanence.enable) {
home.persistence."/persist/home/leyla" = {
directories = [
"desktop"
"downloads"
"documents"
];
files = [
".bash_history" # keep shell history around
"${config.xdg.dataHome}/recently-used.xbel" # gnome recently viewed files
];
allowOther = true;
};
};
}

View file

@ -0,0 +1,91 @@
{
lib,
pkgs,
config,
osConfig,
...
}: let
hardware = osConfig.host.hardware;
in {
imports = [
./vscode
./firefox
./direnv.nix
./openssh.nix
./git.nix
./makemkv.nix
];
config = lib.mkMerge [
{
programs = lib.mkMerge [
{
# Let Home Manager install and manage itself.
home-manager.enable = true;
}
(lib.mkIf (config.user.isTerminalUser || config.user.isDesktopUser) {
bash.enable = true;
git.enable = true;
openssh.enable = true;
})
(lib.mkIf config.user.isDesktopUser {
bitwarden.enable = true;
obs-studio.enable = hardware.graphicsAcceleration.enable;
qbittorrent.enable = true;
prostudiomasters.enable = true;
protonvpn-gui.enable = true;
dbeaver-bin.enable = true;
bruno.enable = true;
piper.enable = hardware.piperMouse.enable;
proxmark3.enable = true;
openrgb.enable = hardware.openRGB.enable;
via.enable = hardware.viaKeyboard.enable;
claude-code.enable = osConfig.host.ai.enable;
davinci-resolve.enable = hardware.graphicsAcceleration.enable;
mfoc.enable = true;
})
(lib.mkIf (hardware.directAccess.enable && config.user.isDesktopUser) {
anki.enable = true;
makemkv.enable = true;
discord.enable = true;
signal-desktop-bin.enable = true;
calibre.enable = true;
obsidian.enable = true;
jetbrains.idea-community.enable = true;
vscode.enable = true;
firefox.enable = true;
steam.enable = true;
krita.enable = true;
ungoogled-chromium.enable = true;
libreoffice.enable = true;
mapillary-uploader.enable = true;
inkscape.enable = true;
gimp.enable = true;
freecad.enable = true;
onionshare.enable = true;
pdfarranger.enable = true;
picard.enable = true;
qflipper.enable = true;
openvpn.enable = true;
noisetorch.enable = true;
tor-browser.enable = true;
gdx-liftoff.enable = true;
})
];
}
(lib.mkIf config.user.isTerminalUser {
home.packages = with pkgs; [
# command line tools
sox
yt-dlp
ffmpeg
imagemagick
];
})
(lib.mkIf config.user.isDesktopUser {
nixpkgs.config = {
allowUnfree = true;
};
})
];
}

View file

@ -0,0 +1,22 @@
{
lib,
config,
osConfig,
...
}: let
userConfig = osConfig.host.users.leyla;
in {
config = lib.mkIf userConfig.isDesktopUser {
programs = {
direnv = {
enable = true;
enableBashIntegration = true;
nix-direnv.enable = true;
config = {
global.hide_env_diff = true;
whitelist.exact = ["${config.home.homeDirectory}/documents/code/nix-config"];
};
};
};
};
}

View file

@ -0,0 +1,155 @@
{...}: {
programs.firefox = {
profiles.leyla = {
bookmarks = {
force = true;
settings = [
# Personal Services
{
name = "Media";
url = "https://media.jan-leila.com/";
keyword = "";
tags = [""];
}
{
name = "Photos";
url = "https://photos.jan-leila.com";
keyword = "";
tags = [""];
}
{
name = "Git";
url = "https://git.jan-leila.com/";
keyword = "";
tags = [""];
}
{
name = "Home Automation";
url = "https://home.jan-leila.com/";
keyword = "";
tags = [""];
}
{
name = "Search";
url = "https://search.jan-leila.com/";
keyword = "";
tags = [""];
}
{
name = "Budget";
url = "https://budget.jan-leila.com/";
keyword = "";
tags = [""];
}
{
name = "Documents";
url = "https://documents.jan-leila.com/";
keyword = "";
tags = [""];
}
# Defiant Server Services
{
name = "QBittorrent";
url = "http://defiant:8084";
keyword = "";
tags = ["defiant"];
}
{
name = "Sonarr";
url = "http://defiant:8989";
keyword = "";
tags = ["defiant"];
}
{
name = "Radarr";
url = "http://defiant:7878";
keyword = "";
tags = ["defiant"];
}
{
name = "Bazarr";
url = "http://defiant:6767";
keyword = "";
tags = ["defiant"];
}
{
name = "Lidarr";
url = "http://defiant:8686";
keyword = "";
tags = ["defiant"];
}
{
name = "Jackett";
url = "http://defiant:9117";
keyword = "";
tags = ["defiant"];
}
{
name = "Crab-hole DNS";
url = "http://defiant:8085";
keyword = "";
tags = ["defiant"];
}
# External Services
{
name = "Mail";
url = "https://mail.protonmail.com";
keyword = "";
tags = [""];
}
{
name = "Open Street Map";
url = "https://www.openstreetmap.org/";
keyword = "";
tags = [""];
}
{
name = "Password Manager";
url = "https://vault.bitwarden.com/";
keyword = "";
tags = [""];
}
{
name = "Mastodon";
url = "https://mspsocial.net";
keyword = "";
tags = [""];
}
{
name = "Linked In";
url = "https://www.linkedin.com/";
keyword = "";
tags = [""];
}
{
name = "Job Search";
url = "https://www.jobsinnetwork.com/?state=cleaned_history&language%5B%5D=en&query=react&locations.countryCode%5B%5D=IT&locations.countryCode%5B%5D=DE&locations.countryCode%5B%5D=NL&experience%5B%5D=medior&experience%5B%5D=junior&page=1";
keyword = "";
tags = [""];
}
{
name = "React Docs";
url = "https://react.dev/";
keyword = "";
tags = [""];
}
{
name = "Cyberia Matrix";
url = "https://chat.cyberia.club";
keyword = "";
tags = [""];
}
# Template
# {
# name = "";
# url = "";
# keyword = "";
# tags = [""];
# }
];
};
};
};
}

View file

@ -0,0 +1,18 @@
{
lib,
pkgs,
inputs,
...
}: {
imports = [
./firefox.nix
./bookmarks.nix
./harden.nix
];
config = {
programs.firefox = {
enable = true;
};
};
}

View file

@ -0,0 +1,191 @@
{
lib,
pkgs,
inputs,
...
}: {
programs.firefox = {
profiles.leyla = {
settings = {
"browser.search.defaultenginename" = "Searx";
"browser.search.order.1" = "Searx";
};
search = {
force = true;
default = "Searx";
engines = {
"Nix Packages" = {
urls = [
{
template = "https://search.nixos.org/packages";
params = [
{
name = "type";
value = "packages";
}
{
name = "query";
value = "{searchTerms}";
}
];
}
];
icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg";
definedAliases = ["@np"];
};
"NixOS Wiki" = {
urls = [{template = "https://nixos.wiki/index.php?search={searchTerms}";}];
icon = "https://nixos.wiki/favicon.png";
updateInterval = 24 * 60 * 60 * 1000; # every day
definedAliases = ["@nw"];
};
"Searx" = {
urls = [{template = "https://search.jan-leila.com/?q={searchTerms}";}];
icon = "https://nixos.wiki/favicon.png";
updateInterval = 24 * 60 * 60 * 1000; # every day
definedAliases = ["@searx"];
};
};
};
extensions.packages = with inputs.firefox-addons.packages.${pkgs.stdenv.hostPlatform.system}; [
bitwarden
terms-of-service-didnt-read
multi-account-containers
shinigami-eyes
ublock-origin
sponsorblock
dearrow
df-youtube
return-youtube-dislikes
privacy-badger
decentraleyes
clearurls
localcdn
snowflake
pkgs.firefox-extensions.deutsch-de-language-pack
dictionary-german
tab-session-manager
pkgs.firefox-extensions.italiano-it-language-pack
pkgs.firefox-extensions.dizionario-italiano
];
settings = {
# Disable irritating first-run stuff
"browser.disableResetPrompt" = true;
"browser.download.panel.shown" = true;
"browser.feeds.showFirstRunUI" = false;
"browser.messaging-system.whatsNewPanel.enabled" = false;
"browser.rights.3.shown" = true;
"browser.shell.checkDefaultBrowser" = false;
"browser.shell.defaultBrowserCheckCount" = 1;
"browser.startup.homepage_override.mstone" = "ignore";
"browser.uitour.enabled" = false;
"startup.homepage_override_url" = "";
"trailhead.firstrun.didSeeAboutWelcome" = true;
"browser.bookmarks.restore_default_bookmarks" = false;
"browser.bookmarks.addedImportButton" = true;
"browser.newtabpage.activity-stream.feeds.section.topstories" = false;
# Usage Experience
"browser.startup.homepage" = "about:home";
"browser.download.useDownloadDir" = false;
"browser.uiCustomization.state" = builtins.toJSON {
"currentVersion" = 20;
"newElementCount" = 6;
"dirtyAreaCache" = [
"nav-bar"
"PersonalToolbar"
"toolbar-menubar"
"TabsToolbar"
"unified-extensions-area"
"vertical-tabs"
];
"placements" = {
"widget-overflow-fixed-list" = [];
"unified-extensions-area" = [
# bitwarden
"_446900e4-71c2-419f-a6a7-df9c091e268b_-browser-action"
"ublock0_raymondhill_net-browser-action"
"sponsorblocker_ajay_app-browser-action"
"dearrow_ajay_app-browser-action"
"jid1-mnnxcxisbpnsxq_jetpack-browser-action"
"_testpilot-containers-browser-action"
"addon_simplelogin-browser-action"
"_74145f27-f039-47ce-a470-a662b129930a_-browser-action"
"jid1-bofifl9vbdl2zq_jetpack-browser-action"
"dfyoutube_example_com-browser-action"
"_b86e4813-687a-43e6-ab65-0bde4ab75758_-browser-action"
"_762f9885-5a13-4abd-9c77-433dcd38b8fd_-browser-action"
"_b11bea1f-a888-4332-8d8a-cec2be7d24b9_-browse-action"
"jid0-3guet1r69sqnsrca5p8kx9ezc3u_jetpack-browser-action"
];
"nav-bar" = [
"back-button"
"forward-button"
"stop-reload-button"
"urlbar-container"
"downloads-button"
"unified-extensions-button"
"reset-pbm-toolbar-button"
];
"toolbar-menubar" = [
"menubar-items"
];
"TabsToolbar" = [
"firefox-view-button"
"tabbrowser-tabs"
"new-tab-button"
"alltabs-button"
];
"vertical-tabs" = [];
"PersonalToolbar" = [
"import-button"
"personal-bookmarks"
];
};
"seen" = [
"save-to-pocket-button"
"developer-button"
"privacy_privacy_com-browser-action"
"sponsorblocker_ajay_app-browser-action"
"ublock0_raymondhill_net-browser-action"
"addon_simplelogin-browser-action"
"dearrow_ajay_app-browser-action"
"_446900e4-71c2-419f-a6a7-df9c091e268b_-browser-action"
"_74145f27-f039-47ce-a470-a662b129930a_-browser-action"
"jid1-bofifl9vbdl2zq_jetpack-browser-action"
"dfyoutube_example_com-browser-action"
"_testpilot-containers-browser-action"
"_b86e4813-687a-43e6-ab65-0bde4ab75758_-browser-action"
"jid1-mnnxcxisbpnsxq_jetpack-browser-action"
"_762f9885-5a13-4abd-9c77-433dcd38b8fd_-browser-action"
"_b11bea1f-a888-4332-8d8a-cec2be7d24b9_-browser-action"
"jid0-3guet1r69sqnsrca5p8kx9ezc3u_jetpack-browser-action"
];
};
"browser.newtabpage.activity-stream.feeds.topsites" = false;
"browser.newtabpage.activity-stream.showSponsoredTopSites" = false;
"browser.newtabpage.activity-stream.improvesearch.topSiteSearchShortcuts" = false;
"browser.newtabpage.blocked" = lib.genAttrs [
# Facebook
"4gPpjkxgZzXPVtuEoAL9Ig=="
# Reddit
"gLv0ja2RYVgxKdp0I5qwvA=="
# Amazon
"K00ILysCaEq8+bEqV/3nuw=="
# Twitter
"T9nJot5PurhJSy8n038xGA=="
] (_: 1);
"identity.fxaccounts.enabled" = false;
};
};
};
}

View file

@ -0,0 +1,50 @@
{...}: {
programs.firefox = {
profiles.leyla = {
settings = {
# Security
"privacy.trackingprotection.enabled" = true;
"dom.security.https_only_mode" = true;
"dom.security.https_only_mode_pbm" = true;
"dom.security.https_only_mode_error_page_user_suggestions" = true;
# Privacy & Data Protection
"extensions.formautofill.addresses.enabled" = false;
"extensions.formautofill.creditCards.enabled" = false;
"signon.rememberSignons" = false;
"privacy.sanitize.sanitizeOnShutdown" = true;
"privacy.clearOnShutdown_v2.cache" = true;
"privacy.clearOnShutdown_v2.cookiesAndStorage" = true;
"privacy.clearOnShutdown_v2.historyFormDataAndDownloads" = true;
"urlclassifier.trackingSkipURLs" = "";
"urlclassifier.features.socialtracking.skipURLs" = "";
# Disable telemetry and data collection
"app.shield.optoutstudies.enabled" = false;
"browser.discovery.enabled" = false;
"browser.newtabpage.activity-stream.feeds.telemetry" = false;
"browser.newtabpage.activity-stream.telemetry" = false;
"browser.ping-centre.telemetry" = false;
"datareporting.healthreport.service.enabled" = false;
"datareporting.healthreport.uploadEnabled" = false;
"datareporting.policy.dataSubmissionEnabled" = false;
"datareporting.sessions.current.clean" = true;
"devtools.onboarding.telemetry.logged" = false;
"toolkit.telemetry.archive.enabled" = false;
"toolkit.telemetry.bhrPing.enabled" = false;
"toolkit.telemetry.enabled" = false;
"toolkit.telemetry.firstShutdownPing.enabled" = false;
"toolkit.telemetry.hybridContent.enabled" = false;
"toolkit.telemetry.newProfilePing.enabled" = false;
"toolkit.telemetry.prompted" = 2;
"toolkit.telemetry.rejected" = true;
"toolkit.telemetry.reportingpolicy.firstRun" = false;
"toolkit.telemetry.server" = "";
"toolkit.telemetry.shutdownPingSender.enabled" = false;
"toolkit.telemetry.unified" = false;
"toolkit.telemetry.unifiedIsOptIn" = false;
"toolkit.telemetry.updatePing.enabled" = false;
};
};
};
}

View file

@ -0,0 +1,13 @@
{...}: {
config = {
programs = {
git = {
settings = {
user.name = "Leyla Becker";
user.email = "git@jan-leila.com";
init.defaultBranch = "main";
};
};
};
};
}

View file

@ -0,0 +1,17 @@
{
config,
inputs,
...
}: {
config = {
sops.secrets = {
"application-keys/makemkv" = {
sopsFile = "${inputs.secrets}/application-keys.yaml";
};
};
programs.makemkv = {
appKeyFile = config.sops.placeholder."application-keys/makemkv";
destinationDir = "/home/leyla/downloads/makemkv";
};
};
}

View file

@ -0,0 +1,23 @@
{
config,
osConfig,
...
}: {
config = {
programs = {
openssh = {
authorizedKeys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJHeItmt8TRW43uNcOC+eIurYC7Eunc0V3LGocQqLaYj leyla@horizon"
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIILimFIW2exEH/Xo7LtXkqgE04qusvnPNpPWSCeNrFkP leyla@defiant"
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKBiZkg1c2aaNHiieBX4cEziqvJVj9pcDfzUrKU/mO0I leyla@twilight"
];
hostKeys = [
{
type = "ed25519";
path = "${config.home.username}_${osConfig.networking.hostName}_ed25519";
}
];
};
};
};
}

View file

@ -0,0 +1,136 @@
{
lib,
pkgs,
config,
osConfig,
...
}: let
nix-development-enabled = osConfig.host.nix-development.enable;
ai-tooling-enabled = osConfig.host.ai.enable;
in {
imports = [
./user-words.nix
];
config = lib.mkIf config.user.isDesktopUser {
programs = {
bash.shellAliases = {
code = "codium";
};
vscode = {
package = pkgs.vscodium;
mutableExtensionsDir = false;
profiles.default = {
enableUpdateCheck = false;
enableExtensionUpdateCheck = false;
userSettings = lib.mkMerge [
{
"javascript.updateImportsOnFileMove.enabled" = "always";
"editor.tabSize" = 2;
"editor.insertSpaces" = false;
# "terminal.integrated.fontFamily" = "'Droid Sans Mono', 'monospace', monospace";
}
];
extraExtensions = {
# vs code feel
oneDark.enable = true;
atomKeybindings.enable = true;
openRemoteSsh.enable = true;
# openDyslexicFont.enable = false;
# html development
autoRenameTag.enable = true;
liveServer.enable = true;
# js development
es7ReactJsSnippets.enable = true;
tauriVscode.enable = true;
vscodeEslint.enable = true;
vscodeJest.enable = true;
vitest.enable = true;
vscodeStandard.enable = true;
vscodeStylelint.enable = true;
nearley.enable = true;
# astro development
vscodeMdx.enable = true;
astroVscode.enable = true;
# nix development
alejandra.enable = nix-development-enabled;
nixIde.enable = nix-development-enabled;
# go development
go.enable = true;
# rust development
rustAnalyzer.enable = true;
# claude development
claudeDev = lib.mkIf ai-tooling-enabled {
enable = true;
mcp = {
nixos = {
enable = true;
autoApprove = {
nixos_search = true;
nixos_info = true;
home_manager_search = true;
home_manager_info = true;
darwin_search = true;
darwin_info = true;
nixos_flakes_search = true;
};
};
eslint = {
enable = true;
autoApprove = {
lint-files = true;
};
};
vitest = {
enable = true;
autoApprove = {
list_tests = true;
run_tests = true;
analyze_coverage = true;
set_project_root = true;
};
};
sleep = {
enable = true;
timeout = 18000; # 5 hours to match claude codes timeout
autoApprove = {
sleep = true;
};
};
};
};
# misc extensions
evenBetterToml.enable = true;
direnv.enable = config.programs.direnv.enable;
conventionalCommits.enable = true;
};
extensions = let
extension-pkgs = pkgs.nix-vscode-extensions.forVSCodeVersion config.programs.vscode.package.version;
in (
with extension-pkgs.open-vsx; [
# vs code feel extensions
streetsidesoftware.code-spell-checker
streetsidesoftware.code-spell-checker-german
streetsidesoftware.code-spell-checker-italian
]
);
};
};
};
};
}

View file

@ -0,0 +1,126 @@
{
pkgs,
lib,
...
}: {
config.programs.vscode.profiles.default.userSettings = {
"cSpell.userWords" = [
"leyla"
];
"cSpell.languageSettings" = [
{
"languageId" = "nix";
"locale" = "*";
"dictionaries" = [
"applications"
"ai-words"
"nix-words"
# We need to include all other dictionaries in the nix language settings because they exist in this file
# TODO: see if there is a way to make this only apply for this file
"js-words"
];
}
{
"languageId" = "javascript,typescript,js,ts";
"locale" = "*";
"dictionaries" = [
"js-words"
];
}
];
"cSpell.customDictionaries" = {
applications = {
name = "applications";
description = "application names";
path = pkgs.writeText "applications.txt" (lib.strings.concatLines [
"ollama"
"syncthing"
"immich"
"sonos"
"makemkv"
"hass"
"qbittorent"
"prostudiomasters"
"protonmail"
"pulseaudio"
]);
};
ai-words = {
name = "ai-words";
description = "common words used for ai development";
path = pkgs.writeText "ai-words.txt" (lib.strings.concatLines [
"ollama"
"deepseek"
"qwen"
]);
};
nix-words = {
name = "nix-words";
description = "words used in nix configurations";
path = pkgs.writeText "nix-words.txt" (lib.strings.concatLines [
"pname"
"direnv"
"tmpfiles"
"Networkd"
"networkmanager"
"dialout"
"adbusers"
"authkey"
"netdevs"
"atomix"
"geary"
"gedit"
"hitori"
"iagno"
"alsa"
"timezoned"
"pipewire"
"rtkit"
"disko"
"ashift"
"autotrim"
"canmount"
"mountpoint"
"xattr"
"acltype"
"relatime"
"keyformat"
"keylocation"
"vdevs"
# codium extensions
"akamud"
"onedark"
"jeanp"
"dsznajder"
"dbaeumer"
"orta"
"tauri"
"unifiedjs"
"tamasfe"
"pinage"
"jnoortheen"
"kamadorueda"
"karyfoundation"
"nearley"
# nix.optimise is spelled wrong
"optimise"
]);
};
js-words = {
name = "js-words";
description = "words used in js development";
path = pkgs.writeText "js-words.txt" (lib.strings.concatLines [
"webdav"
]);
};
};
};
}

View file

@ -0,0 +1,19 @@
{
lib,
pkgs,
modulesPath,
...
}: {
imports = [(modulesPath + "/installer/cd-dvd/installation-cd-minimal.nix")];
systemd.services.sshd.wantedBy = pkgs.lib.mkForce ["multi-user.target"];
users.users.root.openssh.authorizedKeys.keys = [
"ssh-ed25519 AaAeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee username@host"
];
isoImage.squashfsCompression = "gzip -Xcompression-level 1";
networking.hostName = "installer";
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
}

View file

@ -0,0 +1,5 @@
{...}: {
imports = [
./configuration.nix
];
}

View file

@ -0,0 +1,413 @@
# server nas
{
inputs,
config,
...
}: {
sops.secrets = {
"vpn-keys/tailscale-authkey/defiant" = {
sopsFile = "${inputs.secrets}/vpn-keys.yaml";
};
"vpn-keys/proton-wireguard/defiant-p2p" = {
sopsFile = "${inputs.secrets}/vpn-keys.yaml";
mode = "0640";
owner = "root";
group = "systemd-network";
};
"services/zfs_smtp_token" = {
sopsFile = "${inputs.secrets}/defiant-services.yaml";
};
"services/paperless_password" = {
sopsFile = "${inputs.secrets}/defiant-services.yaml";
mode = "0700";
owner = "paperless";
group = "paperless";
};
};
host = {
users = {
leyla = {
isDesktopUser = true;
isTerminalUser = true;
isPrincipleUser = true;
};
};
impermanence.enable = true;
storage = {
enable = true;
encryption = true;
notifications = {
enable = true;
host = "smtp.protonmail.ch";
port = 587;
to = "leyla@jan-leila.com";
user = "noreply@jan-leila.com";
tokenFile = config.sops.secrets."services/zfs_smtp_token".path;
};
pool = {
# We are having to boot off of the nvm cache drive because I cant figure out how to boot via the HBA
bootDrives = ["nvme-Samsung_SSD_990_PRO_4TB_S7KGNU0X907881F"];
vdevs = [
[
"ata-ST18000NE000-3G6101_ZVTCXVEB"
"ata-ST18000NE000-3G6101_ZVTCXWSC"
"ata-ST18000NE000-3G6101_ZVTD10EH"
"ata-ST18000NT001-3NF101_ZVTE0S3Q"
"ata-ST18000NT001-3NF101_ZVTEF27J"
"ata-ST18000NE000-3G6101_ZVTJ7359"
]
[
"ata-ST4000NE001-2MA101_WS2275P3"
"ata-ST4000NE001-2MA101_WS227B9F"
"ata-ST4000NE001-2MA101_WS227CEW"
"ata-ST4000NE001-2MA101_WS227CYN"
"ata-ST4000NE001-2MA101_WS23TBWV"
"ata-ST4000NE001-2MA101_WS23TC5F"
]
];
cache = [
"nvme-Samsung_SSD_990_PRO_4TB_S7KGNU0X907881F"
];
};
};
network_storage = {
enable = true;
directories = [
{
folder = "leyla_documents";
user = "leyla";
group = "leyla";
bind = "/home/leyla/documents";
}
{
folder = "eve_documents";
user = "eve";
group = "eve";
}
{
folder = "users_documents";
user = "root";
group = "users";
}
{
folder = "media";
user = "jellyfin";
group = "jellyfin_media";
bind = config.services.jellyfin.media_directory;
}
];
nfs = {
enable = true;
directories = ["leyla_documents" "eve_documents" "users_documents" "media"];
};
};
};
systemd.network = {
enable = true;
netdevs = {
"10-bond0" = {
netdevConfig = {
Kind = "bond";
Name = "bond0";
};
bondConfig = {
Mode = "802.3ad";
TransmitHashPolicy = "layer3+4";
};
};
"20-wg0" = {
netdevConfig = {
Kind = "wireguard";
Name = "wg0";
};
wireguardConfig = {
PrivateKeyFile = config.sops.secrets."vpn-keys/proton-wireguard/defiant-p2p".path;
ListenPort = 51820;
};
wireguardPeers = [
{
PublicKey = "rRO6yJim++Ezz6scCLMaizI+taDjU1pzR2nfW6qKbW0=";
Endpoint = "185.230.126.146:51820";
# Allow all traffic but use policy routing to prevent system-wide VPN
AllowedIPs = ["0.0.0.0/0"];
}
];
};
};
networks = {
"40-bond0" = {
matchConfig.Name = "bond0";
linkConfig = {
RequiredForOnline = "degraded-carrier";
RequiredFamilyForOnline = "any";
};
networkConfig.DHCP = "yes";
address = [
"192.168.1.10/32"
];
# Set lower priority for default gateway to allow WireGuard interface binding
routes = [
{
Destination = "0.0.0.0/0";
Gateway = "192.168.1.1";
Metric = 100;
}
];
dns = ["192.168.1.1"];
};
"50-wg0" = {
matchConfig.Name = "wg0";
networkConfig = {
DHCP = "no";
};
address = [
"10.2.0.2/32"
];
# Configure routing for application binding
routingPolicyRules = [
{
# Route traffic from VPN interface through VPN table
From = "10.2.0.2/32";
Table = 200;
Priority = 100;
}
];
routes = [
{
# Direct route to VPN gateway
Destination = "10.2.0.1/32";
Scope = "link";
}
{
# Route VPN subnet through VPN gateway in custom table
Destination = "10.2.0.0/16";
Gateway = "10.2.0.1";
Table = 200;
}
{
# Route all traffic through VPN gateway in custom table
Destination = "0.0.0.0/0";
Gateway = "10.2.0.1";
Table = 200;
}
];
};
};
};
# limit arc usage to 50gb because ollama doesn't play nice with zfs using up all of the memory
boot.kernelParams = ["zfs.zfs_arc_max=53687091200"];
# Enable policy routing and source routing for application-specific VPN binding
boot.kernel.sysctl = {
"net.ipv4.conf.all.rp_filter" = 2;
"net.ipv4.conf.default.rp_filter" = 2;
"net.ipv4.conf.wg0.rp_filter" = 2;
};
services = {
# PostgreSQL database server
postgresql = {
enable = true;
adminUsers = ["leyla"];
};
# temp enable desktop environment for setup
# Enable the X11 windowing system.
xserver.enable = true;
# Enable the GNOME Desktop Environment.
displayManager = {
gdm.enable = true;
};
desktopManager = {
gnome.enable = true;
};
# Enable new reverse proxy system
reverseProxy = {
enable = true;
openFirewall = true;
acme = {
enable = true;
email = "jan-leila@protonmail.com";
};
};
ollama = {
enable = true;
exposePort = true;
acceleration = false;
environmentVariables = {
OLLAMA_KEEP_ALIVE = "24h";
};
loadModels = [
# conversation models
"llama3.1:8b"
"deepseek-r1:8b"
"deepseek-r1:32b"
"deepseek-r1:70b"
# auto complete models
"qwen2.5-coder:1.5b-base"
"qwen2.5-coder:7b"
"deepseek-coder:6.7b"
"deepseek-coder:33b"
# agent models
"qwen3:8b"
"qwen3:32b"
"qwen3:235b-a22b"
"qwen3-coder:30b"
"qwen3-coder:30b-a3b-fp16"
# embedding models
"nomic-embed-text:latest"
];
};
tailscale = {
enable = true;
authKeyFile = config.sops.secrets."vpn-keys/tailscale-authkey/defiant".path;
useRoutingFeatures = "server";
extraUpFlags = [
"--advertise-exit-node"
"--advertise-routes=192.168.0.0/24"
"--accept-dns=false"
];
extraSetFlags = [
"--advertise-exit-node"
"--advertise-routes=192.168.0.0/24"
"--accept-dns=false"
];
};
syncthing.enable = true;
fail2ban.enable = true;
jellyfin = {
enable = true;
domain = "media.jan-leila.com";
extraDomains = ["jellyfin.jan-leila.com"];
};
immich = {
enable = true;
domain = "photos.jan-leila.com";
};
forgejo = {
enable = true;
reverseProxy.domain = "git.jan-leila.com";
};
searx = {
enable = true;
domain = "search.jan-leila.com";
};
actual = {
enable = true;
domain = "budget.jan-leila.com";
};
home-assistant = {
enable = true;
domain = "home.jan-leila.com";
openFirewall = true;
postgres.enable = true;
extensions = {
sonos.enable = true;
jellyfin.enable = true;
wyoming.enable = false; # Temporarily disabled due to dependency conflict in wyoming-piper
};
};
paperless = {
enable = true;
domain = "documents.jan-leila.com";
passwordFile = config.sops.secrets."services/paperless_password".path;
};
panoramax = {
enable = false;
openFirewall = true;
};
crab-hole = {
enable = true;
port = 8085;
openFirewall = true;
show_doc = true;
downstreams = {
host = {
enable = true;
openFirewall = true;
};
};
upstreams.cloudFlare.enable = true;
blocklists.ad_malware.enable = true;
};
qbittorrent = {
enable = true;
mediaDir = "/srv/qbittorent";
openFirewall = true;
webuiPort = 8084;
};
sonarr = {
enable = true;
openFirewall = true;
};
radarr = {
enable = true;
openFirewall = true;
};
bazarr = {
enable = true;
openFirewall = true;
};
lidarr = {
enable = true;
openFirewall = true;
};
jackett = {
enable = true;
openFirewall = true;
};
flaresolverr = {
enable = true;
openFirewall = true;
};
};
# disable computer sleeping
systemd.targets = {
sleep.enable = false;
suspend.enable = false;
hibernate.enable = false;
hybrid-sleep.enable = false;
};
services.displayManager.gdm.autoSuspend = false;
# This value determines the NixOS release from which the default
# settings for stateful data, like file locations and database versions
# on your system were taken. It's perfectly fine and recommended to leave
# this value at the release version of the first install of this system.
# Before changing this value read the documentation for this option
# (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
system.stateVersion = "23.05"; # Did you read the comment?
}

View file

@ -0,0 +1,8 @@
# server nas
{...}: {
imports = [
./hardware-configuration.nix
./configuration.nix
./packages.nix
];
}

View file

@ -4,79 +4,57 @@
{ {
config, config,
lib, lib,
pkgs,
modulesPath, modulesPath,
... ...
}: { }: {
imports = [ imports = [
(modulesPath + "/installer/scan/not-detected.nix") (modulesPath + "/installer/scan/not-detected.nix")
../hardware-common.nix
]; ];
boot = { boot = {
initrd = { initrd = {
availableKernelModules = ["xhci_pci" "aacraid" "ahci" "usbhid" "usb_storage" "sd_mod"]; availableKernelModules = ["xhci_pci" "aacraid" "ahci" "usbhid" "nvme" "usb_storage" "sd_mod"];
kernelModules = []; kernelModules = [];
}; };
kernelModules = ["kvm-amd"]; kernelModules = ["kvm-amd"];
extraModulePackages = []; extraModulePackages = [];
# Bootloader.
loader = {
systemd-boot.enable = true;
efi = {
canTouchEfiVariables = true;
efiSysMountPoint = "/boot";
};
};
supportedFilesystems = ["zfs"]; supportedFilesystems = ["zfs"];
zfs.extraPools = ["zroot"]; zfs.extraPools = ["rpool"];
}; };
swapDevices = [];
networking = { networking = {
hostId = "c51763d6";
hostName = "defiant"; # Define your hostname. hostName = "defiant"; # Define your hostname.
hostId = "c51763d6";
useNetworkd = true; useNetworkd = true;
}; };
systemd.network = { systemd.network = {
enable = true; enable = true;
netdevs = {
"10-bond0" = {
netdevConfig = {
Kind = "bond";
Name = "bond0";
};
bondConfig = {
Mode = "802.3ad";
TransmitHashPolicy = "layer3+4";
};
};
};
networks = { networks = {
"30-enp4s0" = { "30-eno1" = {
matchConfig.Name = "enp4s0"; matchConfig.Name = "eno1";
networkConfig.Bond = "bond0"; networkConfig.Bond = "bond0";
DHCP = "no";
}; };
"30-enp5s0" = { "30-eno2" = {
matchConfig.Name = "enp5s0"; matchConfig.Name = "eno2";
networkConfig.Bond = "bond0"; networkConfig.Bond = "bond0";
DHCP = "no";
};
"40-bond0" = {
matchConfig.Name = "bond0";
linkConfig.RequiredForOnline = "carrier";
networkConfig.LinkLocalAddressing = "no";
DHCP = "ipv4";
address = [
# configure addresses including subnet mask
"192.168.1.10/24"
# TODO: ipv6 address configuration
];
}; };
}; };
}; };
networking.networkmanager.enable = true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware = { hardware = {
# TODO: hardware graphics # TODO: hardware graphics

View file

@ -0,0 +1,9 @@
{pkgs, ...}: {
environment.systemPackages = with pkgs; [
ffsubsync
sox
yt-dlp
ffmpeg
imagemagick
];
}

View file

@ -0,0 +1,167 @@
# Edit this configuration file to define what should be installed on
# your system. Help is available in the configuration.nix(5) man page, on
# https://search.nixos.org/options and in the NixOS manual (`nixos-help`).
{
lib,
pkgs,
...
}: {
imports = [
./nvidia-drivers.nix
];
# Use the systemd-boot EFI boot loader.
boot.loader.systemd-boot.enable = true;
boot.loader.efi.canTouchEfiVariables = true;
# networking.hostName = "nixos"; # Define your hostname.
# Pick only one of the below networking options.
# networking.wireless.enable = true; # Enables wireless support via wpa_supplicant.
# networking.networkmanager.enable = true; # Easiest to use and most distros use this by default.
# Set your time zone.
# time.timeZone = "Europe/Amsterdam";
# Configure network proxy if necessary
# networking.proxy.default = "http://user:password@proxy:port/";
# networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain";
# Select internationalisation properties.
# i18n.defaultLocale = "en_US.UTF-8";
# console = {
# font = "Lat2-Terminus16";
# keyMap = "us";
# useXkbConfig = true; # use xkb.options in tty.
# };
# Enable the X11 windowing system.
services.xserver.enable = true;
# Enable wacom touchscreen device
services.xserver.wacom.enable = true;
# installed opentabletdriver
hardware.opentabletdriver.enable = true;
hardware.keyboard.qmk.enable = true;
# Enable the GNOME Desktop Environment.
services.displayManager.gdm.enable = true;
services.desktopManager.gnome.enable = true;
host = {
ai.enable = true;
users = {
eve = {
isDesktopUser = true;
isTerminalUser = true;
isPrincipleUser = true;
};
};
hardware = {
piperMouse.enable = true;
};
storage = {
enable = true;
pool = {
mode = "";
drives = ["wwn-0x5000039fd0cf05eb"];
};
};
};
services.tailscale.enable = true;
# We were having weird build errors so this is disabled right now
# error: The option `devices.emergent.folders.eve_records.path' was accessed but has no value defined. Try setting the option
services.syncthing.enable = false;
# Configure keymap in X11
# services.xserver.xkb.layout = "us";
# services.xserver.xkb.options = "eurosign:e,caps:escape";
# Enable CUPS to print documents.
# services.printing.enable = true;
# Enable sound.
# services.pulseaudio.enable = true;
# OR
# services.pipewire = {
# enable = true;
# pulse.enable = true;
# };
# Enable touchpad support (enabled default in most desktopManager).
# services.libinput.enable = true;
# Define a user account. Don't forget to set a password with passwd.
# users.users.alice = {
# isNormalUser = true;
# extraGroups = [ "wheel" ]; # Enable sudo for the user.
# packages = with pkgs; [
# tree
# ];
# };
# programs.firefox.enable = true;
nixpkgs.config.allowUnfree = true;
# Packages that can be installed without any extra configuration
# See https://search.nixos.org/packages for all options
environment.systemPackages = with pkgs; [
wget
];
# Packages that need to be installed with some extra configuration
# See https://search.nixos.org/options for all options
programs = {};
# Some programs need SUID wrappers, can be configured further or are
# started in user sessions.
# programs.mtr.enable = true;
# programs.gnupg.agent = {
# enable = true;
# enableSSHSupport = true;
# };
# List services that you want to enable:
# Enable the OpenSSH daemon.
# services.openssh.enable = true;
# Open ports in the firewall.
# networking.firewall.allowedTCPPorts = [ ... ];
# networking.firewall.allowedUDPPorts = [ ... ];
# Or disable the firewall altogether.
# networking.firewall.enable = false;
networking = {
networkmanager.enable = true;
useDHCP = lib.mkDefault true;
hostId = "7e35eb97"; # arbitrary id number generated via this command: `head -c4 /dev/urandom | od -A none -t x4`
hostName = "emergent"; # Define your hostname.
};
# Copy the NixOS configuration file and link it from the resulting system
# (/run/current-system/configuration.nix). This is useful in case you
# accidentally delete configuration.nix.
# system.copySystemConfiguration = true;
# This option defines the first version of NixOS you have installed on this particular machine,
# and is used to maintain compatibility with application data (e.g. databases) created on older NixOS versions.
#
# Most users should NEVER change this value after the initial install, for any reason,
# even if you've upgraded your system to a new NixOS release.
#
# This value does NOT affect the Nixpkgs version your packages and OS are pulled from,
# so changing it will NOT upgrade your system - see https://nixos.org/manual/nixos/stable/#sec-upgrading for how
# to actually do that.
#
# This value being lower than the current NixOS release does NOT mean your system is
# out of date, out of support, or vulnerable.
#
# Do NOT change this value unless you have manually inspected all the changes it would make to your configuration,
# and migrated your data accordingly.
#
# For more information, see `man configuration.nix` or https://nixos.org/manual/nixos/stable/options#opt-system.stateVersion .
system.stateVersion = "25.05"; # Did you read the comment?
}

View file

@ -0,0 +1,7 @@
# evs desktop
{...}: {
imports = [
./configuration.nix
./hardware-configuration.nix
];
}

View file

@ -0,0 +1,32 @@
# Do not modify this file! It was generated by nixos-generate-config
# and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead.
{
config,
lib,
pkgs,
modulesPath,
...
}: {
imports = [
(modulesPath + "/installer/scan/not-detected.nix")
];
boot.initrd.availableKernelModules = ["xhci_pci" "ahci" "usb_storage" "usbhid" "sd_mod"];
boot.initrd.kernelModules = [];
boot.kernelModules = [];
boot.extraModulePackages = [];
swapDevices = [];
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
# (the default) this is the recommended approach. When using systemd-networkd it's
# still possible to use this option, but it's recommended to use it in conjunction
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
networking.useDHCP = lib.mkDefault true;
# networking.interfaces.enp42s0.useDHCP = lib.mkDefault true;
# networking.interfaces.wlp4s0.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
}

View file

@ -0,0 +1,51 @@
{
config,
lib,
pkgs,
...
}: {
# Enable OpenGL
hardware.graphics = {
enable = true;
};
# Load nvidia driver for Xorg and Wayland
services = {
xserver = {
# Load nvidia driver for Xorg and Wayland
videoDrivers = ["nvidia"];
};
# Use X instead of wayland
displayManager.gdm.wayland = false;
};
hardware.nvidia = {
# Modesetting is required.
modesetting.enable = true;
# Nvidia power management. Experimental, and can cause sleep/suspend to fail.
# Enable this if you have graphical corruption issues or application crashes after waking
# up from sleep. This fixes it by saving the entire VRAM memory to /tmp/ instead
# of just the bare essentials.
powerManagement.enable = true;
# Fine-grained power management. Turns off GPU when not in use.
# Experimental and only works on modern Nvidia GPUs (Turing or newer).
powerManagement.finegrained = false;
# Use the NVidia open source kernel module (not to be confused with the
# independent third-party "nouveau" open source driver).
# Support is limited to the Turing and later architectures. Full list of
# supported GPUs is at:
# https://github.com/NVIDIA/open-gpu-kernel-modules#compatible-gpus
# Only available from driver 515.43.04+
open = true;
# Enable the Nvidia settings menu,
# accessible via `nvidia-settings`.
nvidiaSettings = true;
# Optionally, you may need to select the appropriate driver version for your specific GPU.
package = config.boot.kernelPackages.nvidiaPackages.stable;
};
}

View file

@ -0,0 +1,158 @@
{
lib,
pkgs,
config,
inputs,
...
}: {
imports = [
inputs.nixos-hardware.nixosModules.framework-11th-gen-intel
];
nixpkgs.config.allowUnfree = true;
boot = {
initrd = {
availableKernelModules = ["usb_storage" "sd_mod"];
};
kernelModules = ["sg"];
# Bootloader.
loader = {
systemd-boot.enable = true;
efi.canTouchEfiVariables = true;
};
};
host = {
users = {
leyla = {
isDesktopUser = true;
isTerminalUser = true;
isPrincipleUser = true;
};
eve.isDesktopUser = true;
ivy.isDesktopUser = true;
};
hardware = {
directAccess.enable = true;
};
ai = {
enable = true;
models = {
"Llama 3.1 8B" = {
model = "llama3.1:8b";
roles = ["chat" "edit" "apply"];
apiBase = "http://defiant:11434";
};
"Deepseek Coder:6.7B" = {
model = "deepseek-coder:6.7b";
roles = ["chat" "edit" "apply"];
apiBase = "http://defiant:11434";
};
"Deepseek Coder:33B" = {
model = "deepseek-coder:33b";
roles = ["chat" "edit" "apply"];
apiBase = "http://defiant:11434";
};
"Deepseek r1:8B" = {
model = "deepseek-r1:8b";
roles = ["chat"];
apiBase = "http://defiant:11434";
};
"Deepseek r1:32B" = {
model = "deepseek-r1:32b";
roles = ["chat"];
apiBase = "http://defiant:11434";
};
"qwen2.5-coder:1.5b-base" = {
model = "qwen2.5-coder:1.5b-base";
roles = ["autocomplete"];
apiBase = "http://defiant:11434";
};
"nomic-embed-text:latest" = {
model = "nomic-embed-text:latest";
roles = ["embed"];
apiBase = "http://defiant:11434";
};
};
};
};
environment.systemPackages = with pkgs; [
cachefilesd
webtoon-dl
];
services.cachefilesd.enable = true;
programs = {
adb.enable = true;
};
networking = {
networkmanager.enable = true;
hostName = "horizon"; # Define your hostname.
};
powerManagement.cpuFreqGovernor = lib.mkDefault "powersave";
hardware = {
graphics.enable = true;
};
sops.secrets = {
"vpn-keys/tailscale-authkey/horizon" = {
sopsFile = "${inputs.secrets}/vpn-keys.yaml";
};
};
services = {
# sudo fprintd-enroll
fprintd = {
enable = true;
};
# firmware update tool
fwupd = {
enable = true;
};
tailscale = {
enable = true;
authKeyFile = config.sops.secrets."vpn-keys/tailscale-authkey/horizon".path;
useRoutingFeatures = "client";
};
syncthing.enable = true;
ollama = {
enable = true;
loadModels = [
"llama3.1:8b"
];
};
};
# Enable network-online.target for better network dependency handling
systemd.services.NetworkManager-wait-online.enable = true;
# Enable touchpad support (enabled default in most desktopManager).
# services.xserver.libinput.enable = true;
# Open ports in the firewall.
# networking.firewall.allowedTCPPorts = [ ... ];
# networking.firewall.allowedUDPPorts = [ ... ];
# Or disable the firewall altogether.
# networking.firewall.enable = false;
# This value determines the NixOS release from which the default
# settings for stateful data, like file locations and database versions
# on your system were taken. It's perfectly fine and recommended to leave
# this value at the release version of the first install of this system.
# Before changing this value read the documentation for this option
# (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
system.stateVersion = "23.05"; # Did you read the comment?
}

View file

@ -0,0 +1,8 @@
# leyla laptop
{...}: {
imports = [
./configuration.nix
./hardware-configuration.nix
# ./network-mount.nix
];
}

View file

@ -0,0 +1,45 @@
# Do not modify this file! It was generated by nixos-generate-config
# and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead.
{
config,
lib,
modulesPath,
...
}: {
imports = [
(modulesPath + "/installer/scan/not-detected.nix")
];
boot.initrd.availableKernelModules = ["xhci_pci" "thunderbolt" "nvme"];
boot.initrd.kernelModules = [];
boot.kernelModules = ["kvm-intel"];
boot.extraModulePackages = [];
fileSystems = {
"/" = {
device = "/dev/disk/by-uuid/866d422b-f816-4ad9-9846-791839cb9337";
fsType = "ext4";
};
"/boot" = {
device = "/dev/disk/by-uuid/E138-65B5";
fsType = "vfat";
};
};
swapDevices = [
{device = "/dev/disk/by-uuid/be98e952-a072-4c3a-8c12-69500b5a2fff";}
];
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
# (the default) this is the recommended approach. When using systemd-networkd it's
# still possible to use this option, but it's recommended to use it in conjunction
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
networking.useDHCP = lib.mkDefault true;
# networking.interfaces.tailscale0.useDHCP = lib.mkDefault true;
# networking.interfaces.wlp170s0.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
}

View file

@ -0,0 +1,76 @@
{...}: {
boot.supportedFilesystems = ["nfs"];
fileSystems = {
"/mnt/leyla_documents" = {
device = "defiant:/exports/leyla_documents";
fsType = "nfs";
options = [
"x-systemd.automount"
"noauto"
"noatime"
"nofail"
"soft"
"intr" # Allow interruption of NFS calls
"timeo=30" # 3 second timeout (30 deciseconds)
"retrans=2" # Only 2 retries before giving up
"x-systemd.idle-timeout=300" # 5 minute idle timeout for mobile
"x-systemd.device-timeout=15" # 15 second device timeout
"bg" # Background mount - don't block boot
"fsc" # Enable caching
"_netdev" # Network device - wait for network
"x-systemd.requires=network-online.target" # Require network to be online
"x-systemd.after=network-online.target" # Start after network is online
"x-systemd.mount-timeout=30" # 30 second mount timeout
];
};
"/mnt/users_documents" = {
device = "defiant:/exports/users_documents";
fsType = "nfs";
options = [
"x-systemd.automount"
"noauto"
"nofail"
"soft"
"intr"
"timeo=30"
"retrans=2"
"x-systemd.idle-timeout=300"
"x-systemd.device-timeout=15"
"bg"
"fsc"
"_netdev"
"x-systemd.requires=network-online.target"
"x-systemd.after=network-online.target"
"x-systemd.mount-timeout=30"
];
};
"/mnt/media" = {
device = "defiant:/exports/media";
fsType = "nfs";
options = [
"x-systemd.automount"
"noauto"
"noatime"
"nofail"
"soft"
"intr"
"timeo=30"
"retrans=2"
"x-systemd.idle-timeout=300"
"x-systemd.device-timeout=15"
"bg"
# Mobile-optimized read settings
"rsize=8192" # Smaller read size for mobile
"wsize=8192" # Smaller write size for mobile
"fsc"
"_netdev"
"x-systemd.requires=network-online.target"
"x-systemd.after=network-online.target"
"x-systemd.mount-timeout=30"
];
};
};
}

View file

@ -0,0 +1,160 @@
{
inputs,
config,
pkgs,
...
}: {
imports = [
./monitors.nix
];
nixpkgs.config.allowUnfree = true;
boot.initrd.availableKernelModules = ["usb_storage"];
boot.kernelModules = ["sg"];
boot.loader = {
systemd-boot.enable = true;
efi.canTouchEfiVariables = true;
};
sops.secrets = {
"vpn-keys/tailscale-authkey/twilight" = {
sopsFile = "${inputs.secrets}/vpn-keys.yaml";
};
};
host = {
users = {
leyla = {
isDesktopUser = true;
isTerminalUser = true;
isPrincipleUser = true;
};
eve.isDesktopUser = true;
};
hardware = {
piperMouse.enable = true;
viaKeyboard.enable = true;
openRGB.enable = true;
graphicsAcceleration.enable = true;
directAccess.enable = true;
};
ai = {
enable = true;
# TODO: benchmark twilight against defiant and prune this list of models that are faster on defiant
models = {
# conversation models
"Llama 3.1 8B" = {
model = "lamma3.1:8b";
roles = ["chat" "edit" "apply"];
};
"deepseek-r1:8b" = {
model = "deepseek-r1:8b";
roles = ["chat" "edit" "apply"];
};
"deepseek-r1:32b" = {
model = "deepseek-r1:32b";
roles = ["chat" "edit" "apply"];
};
# auto complete models
"qwen2.5-coder:1.5b-base" = {
model = "qwen2.5-coder:1.5b-base";
roles = ["autocomplete"];
};
"qwen2.5-coder:7b" = {
model = "qwen2.5-coder:7b";
roles = ["autocomplete"];
};
"deepseek-coder:6.7b" = {
model = "deepseek-coder:6.7b";
roles = ["autocomplete"];
};
"deepseek-coder:33b" = {
model = "deepseek-coder:33b";
roles = ["autocomplete"];
};
# agent models
"qwen3:32b" = {
model = "qwen3:32b";
roles = ["chat" "edit" "apply"];
};
# embedding models
"nomic-embed-text:latest" = {
model = "nomic-embed-text:latest";
roles = ["embed"];
};
};
};
};
services = {
ollama = {
enable = true;
exposePort = true;
loadModels = [
# conversation models
"llama3.1:8b"
"deepseek-r1:8b"
"deepseek-r1:32b"
# auto complete models
"qwen2.5-coder:1.5b-base"
"qwen2.5-coder:7b"
"deepseek-coder:6.7b"
"deepseek-coder:33b"
# agent models
"qwen3:32b"
# embedding models
"nomic-embed-text:latest"
];
};
tailscale = {
enable = true;
authKeyFile = config.sops.secrets."vpn-keys/tailscale-authkey/twilight".path;
useRoutingFeatures = "both";
extraUpFlags = [
"--advertise-exit-node"
"--advertise-routes=192.168.0.0/24"
];
extraSetFlags = [
"--advertise-exit-node"
"--advertise-routes=192.168.0.0/24"
];
};
syncthing.enable = true;
};
# Enable network-online.target for better network dependency handling
systemd.services.NetworkManager-wait-online.enable = true;
environment.systemPackages = with pkgs; [
cachefilesd
];
hardware.steam-hardware.enable = true; # Provides udev rules for controller, HTC vive, and Valve Index
networking = {
networkmanager.enable = true;
hostName = "twilight"; # Define your hostname.
};
# enabled virtualisation for docker
# virtualisation.docker.enable = true;
# Enable touchpad support (enabled default in most desktopManager).
# services.xserver.libinput.enable = true;
# This value determines the NixOS release from which the default
# settings for stateful data, like file locations and database versions
# on your system were taken. It's perfectly fine and recommended to leave
# this value at the release version of the first install of this system.
# Before changing this value read the documentation for this option
# (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
system.stateVersion = "23.05"; # Did you read the comment?
}

View file

@ -0,0 +1,9 @@
# leyla desktop
{...}: {
imports = [
./configuration.nix
./hardware-configuration.nix
./nvidia-drivers.nix
# ./network-mount.nix
];
}

View file

@ -0,0 +1,42 @@
# Do not modify this file! It was generated by nixos-generate-config
# and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead.
{
config,
lib,
modulesPath,
...
}: {
imports = [
(modulesPath + "/installer/scan/not-detected.nix")
];
boot.initrd.availableKernelModules = ["nvme" "xhci_pci" "ahci" "usbhid" "sd_mod"];
boot.initrd.kernelModules = [];
boot.kernelModules = ["kvm-amd"];
boot.extraModulePackages = [];
fileSystems = {
"/" = {
device = "/dev/disk/by-uuid/8be49c65-2b57-48f1-b74d-244d26061adb";
fsType = "ext4";
};
"/boot" = {
device = "/dev/disk/by-uuid/3006-3867";
fsType = "vfat";
options = ["fmask=0022" "dmask=0022"];
};
};
swapDevices = [];
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
# (the default) this is the recommended approach. When using systemd-networkd it's
# still possible to use this option, but it's recommended to use it in conjunction
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
networking.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
}

View file

@ -1,28 +1,4 @@
# leyla laptop {pkgs, ...}: {
{
config,
pkgs,
inputs,
...
}: {
imports = [
inputs.home-manager.nixosModules.default
inputs.sops-nix.nixosModules.sops
./hardware-configuration.nix
../../enviroments/client
];
users = {
leyla = {
isFullUser = true;
hasGPU = true;
};
ester.isFullUser = true;
eve.isFullUser = true;
};
systemd.tmpfiles.rules = [ systemd.tmpfiles.rules = [
"L+ /run/gdm/.config/monitors.xml - - - - ${pkgs.writeText "gdm-monitors.xml" '' "L+ /run/gdm/.config/monitors.xml - - - - ${pkgs.writeText "gdm-monitors.xml" ''
<monitors version="2"> <monitors version="2">
@ -220,18 +196,4 @@
</monitors> </monitors>
''}" ''}"
]; ];
# enabled virtualisation for docker
# virtualisation.docker.enable = true;
# Enable touchpad support (enabled default in most desktopManager).
# services.xserver.libinput.enable = true;
# This value determines the NixOS release from which the default
# settings for stateful data, like file locations and database versions
# on your system were taken. Its perfectly fine and recommended to leave
# this value at the release version of the first install of this system.
# Before changing this value read the documentation for this option
# (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
system.stateVersion = "23.05"; # Did you read the comment?
} }

View file

@ -0,0 +1,72 @@
{...}: {
boot.supportedFilesystems = ["nfs"];
fileSystems = {
"/mnt/leyla_documents" = {
device = "defiant:/exports/leyla_documents";
fsType = "nfs";
options = [
"x-systemd.automount"
"noauto"
"noatime"
"nofail"
"soft"
"intr" # Allow interruption of NFS calls
"timeo=50" # 5 second timeout (50 deciseconds) - longer than mobile
"retrans=3" # 3 retries for desktop
"x-systemd.idle-timeout=600" # 10 minute idle timeout for desktop
"x-systemd.device-timeout=30" # 30 second device timeout
"bg" # Background mount - don't block boot
"fsc" # Enable caching
"_netdev" # Network device - wait for network
"x-systemd.requires=network-online.target" # Require network to be online
"x-systemd.after=network-online.target" # Start after network is online
];
};
"/mnt/users_documents" = {
device = "defiant:/exports/users_documents";
fsType = "nfs";
options = [
"x-systemd.automount"
"noauto"
"nofail"
"soft"
"intr"
"timeo=50"
"retrans=3"
"x-systemd.idle-timeout=600"
"bg"
"fsc"
"_netdev"
"x-systemd.requires=network-online.target"
"x-systemd.after=network-online.target"
];
};
"/mnt/media" = {
device = "defiant:/exports/media";
fsType = "nfs";
options = [
"x-systemd.automount"
"noauto"
"noatime"
"nofail"
"soft"
"intr"
"timeo=50"
"retrans=3"
"x-systemd.idle-timeout=600"
"x-systemd.device-timeout=30"
"bg"
# Desktop-optimized read settings
"rsize=32768" # Larger read size for desktop
"wsize=32768" # Larger write size for desktop
"fsc"
"_netdev"
"x-systemd.requires=network-online.target"
"x-systemd.after=network-online.target"
];
};
};
}

View file

@ -0,0 +1,47 @@
{config, ...}: {
services = {
xserver = {
# Load nvidia driver for Xorg and Wayland
videoDrivers = ["nvidia"];
};
# Use X instead of wayland for gaming reasons
displayManager.gdm.wayland = false;
};
hardware = {
# Enable OpenGL
graphics.enable = true;
# install graphics drivers
nvidia = {
# Modesetting is required.
modesetting.enable = true;
# Nvidia power management. Experimental, and can cause sleep/suspend to fail.
# Enable this if you have graphical corruption issues or application crashes after waking
# up from sleep. This fixes it by saving the entire VRAM memory to /tmp/ instead
# of just the bare essentials.
powerManagement.enable = true;
# Fine-grained power management. Turns off GPU when not in use.
# Experimental and only works on modern Nvidia GPUs (Turing or newer).
powerManagement.finegrained = false;
# Use the NVidia open source kernel module (not to be confused with the
# independent third-party "nouveau" open source driver).
# Support is limited to the Turing and later architectures. Full list of
# supported GPUs is at:
# https://github.com/NVIDIA/open-gpu-kernel-modules#compatible-gpus
# Only available from driver 515.43.04+
# Currently alpha-quality/buggy, so false is currently the recommended setting.
open = true;
# Enable the Nvidia settings menu,
# accessible via `nvidia-settings`.
nvidiaSettings = true;
# Optionally, you may need to select the appropriate driver version for your specific GPU.
package = config.boot.kernelPackages.nvidiaPackages.production;
};
};
}

View file

@ -0,0 +1,119 @@
{config, ...}: {
folders = {
leyla_documents = {
id = "hvrj0-9bm1p";
};
leyla_calendar = {
id = "8oatl-1rv6w";
};
leyla_supernote_notes = {
id = "dwbuv-zffnf";
};
eve_records = {
id = "by6at-d4h9n";
};
share = {
id = "73ot0-cxmkx";
};
};
devices = {
defiant = {
id = "3R6E6Y4-2F7MF2I-IGB4WE6-A3SQSMV-LIBYSAM-2OXHHU2-KJ6CGIV-QNMCPAR";
folders = {
leyla_documents = {
folder = config.folders.leyla_documents;
path = "/mnt/sync/leyla/documents";
};
leyla_calendar = {
folder = config.folders.leyla_calendar;
path = "/mnt/sync/leyla/calendar";
};
leyla_supernote_notes = {
folder = config.folders.leyla_supernote_notes;
path = "/mnt/sync/leyla/notes";
};
eve_records = {
folder = config.folders.eve_records;
path = "/mnt/sync/eve/records";
};
share = {
folder = config.folders.share;
path = "/mnt/sync/default/share";
};
};
};
twilight = {
id = "UDIYL7V-OAZ2BI3-EJRAWFB-GZYVDWR-JNUYW3F-FFQ35MU-XBTGWEF-QD6K6QN";
folders = {
leyla_documents = {
folder = config.folders.leyla_documents;
path = "/mnt/sync/leyla/documents";
};
share = {
folder = config.folders.share;
path = "/mnt/sync/default/share";
};
};
};
horizon = {
id = "OGPAEU6-5UR56VL-SP7YC4Y-IMVCRTO-XFD4CYN-Z6T5TZO-PFZNAT6-4MKWPQS";
folders = {
leyla_documents = {
folder = config.folders.leyla_documents;
path = "/mnt/sync/leyla/documents";
};
share = {
folder = config.folders.share;
path = "/mnt/sync/default/share";
};
};
};
coven = {
id = "QGU7NN6-OMXTWVA-YCZ73S5-2O7ECTS-MUCTN4M-YH6WLEL-U4U577I-7PBNCA5";
folders = {
leyla_documents = {
folder = config.folders.leyla_documents;
};
share = {
folder = config.folders.share;
};
};
};
ceder = {
id = "MGXUJBS-7AENXHB-7YQRNWG-QILKEJD-5462U2E-WAQW4R4-I2TVK5H-SMK6LAA";
folders = {
share = {
folder = config.folders.share;
};
leyla_documents = {
folder = config.folders.leyla_documents;
};
leyla_calendar = {
folder = config.folders.leyla_calendar;
};
leyla_notes = {
folder = config.folders.leyla_supernote_notes;
};
};
};
emergent = {
id = "6MIDMKJ-7IFHXVX-FIR3YTB-KVE75LN-PA6IOTN-I257LWR-MMC4K6C-5H4SHQN";
folders = {
eve_records = {
folder = config.folders.eve_records;
};
share = {
folder = config.folders.share;
};
};
};
shale = {
id = "AOAXEVD-QJ2IVRA-6G44Q7Q-TGUPXU2-FWWKOBH-DPKWC5N-LBAEHWJ-7EQF4AM";
folders = {
share = {
folder = config.folders.share;
};
};
};
};
}

View file

@ -0,0 +1 @@
"/var/lib/sops-nix"

View file

@ -1,57 +0,0 @@
{pkgs, ...}: {
imports = [
../common
];
services = {
# Enable CUPS to print documents.
printing.enable = true;
xserver = {
# Enable the X11 windowing system.
enable = true;
# Enable the GNOME Desktop Environment.
displayManager.gdm.enable = true;
desktopManager = {
gnome.enable = true;
xterm.enable = false;
};
# Get rid of xTerm
excludePackages = [pkgs.xterm];
# Configure keymap in X11
xkb = {
layout = "us,it,de";
variant = "";
};
};
pipewire = {
enable = true;
alsa.enable = true;
alsa.support32Bit = true;
pulse.enable = true;
# If you want to use JACK applications, uncomment this
#jack.enable = true;
# use the example session manager (no others are packaged yet so this is enabled by default,
# no need to redefine it in your config for now)
#media-session.enable = true;
};
};
# Enable sound with pipewire.
hardware.pulseaudio.enable = false;
security.rtkit.enable = true;
environment.systemPackages = with pkgs; [
# helvetica font
aileron
cachefilesd
gnomeExtensions.dash-to-dock
];
}

View file

@ -1,155 +0,0 @@
{pkgs, ...}: {
imports = [
../../users
];
nix = {
settings = {
experimental-features = ["nix-command" "flakes"];
trusted-users = ["leyla"];
};
gc.automatic = true;
};
# Enable networking
networking.networkmanager.enable = true;
# Set your time zone.
time.timeZone = "America/Chicago";
i18n.defaultLocale = "en_US.UTF-8";
i18n.extraLocaleSettings = {
LC_ADDRESS = "en_US.UTF-8";
LC_IDENTIFICATION = "en_US.UTF-8";
LC_MEASUREMENT = "en_US.UTF-8";
LC_MONETARY = "en_US.UTF-8";
LC_NAME = "en_US.UTF-8";
LC_NUMERIC = "en_US.UTF-8";
LC_PAPER = "en_US.UTF-8";
LC_TELEPHONE = "en_US.UTF-8";
LC_TIME = "en_US.UTF-8";
};
users = {
users = {
leyla = {
uid = 1000;
description = "Leyla";
group = "leyla";
};
ester = {
uid = 1001;
description = "Ester";
group = "ester";
};
eve = {
uid = 1002;
description = "Eve";
group = "eve";
};
jellyfin = {
uid = 2000;
group = "jellyfin";
isSystemUser = true;
};
forgejo = {
uid = 2002;
group = "forgejo";
isSystemUser = true;
};
pihole = {
uid = 2003;
group = "pihole";
isSystemUser = true;
};
};
groups = {
leyla = {
gid = 1000;
members = ["lelya"];
};
ester = {
gid = 1001;
members = ["ester"];
};
eve = {
gid = 1002;
members = ["eve"];
};
users = {
gid = 100;
members = ["leyla" "ester" "eve"];
};
jellyfin = {
gid = 2000;
members = ["jellyfin" "leyla"];
};
jellyfin_media = {
gid = 2001;
members = ["jellyfin" "leyla" "ester" "eve"];
};
forgejo = {
gid = 2002;
members = ["forgejo" "leyla"];
};
pihole = {
gid = 2003;
members = ["pihole" "leyla"];
};
};
};
services = {
openssh = {
enable = true;
ports = [22];
settings = {
PasswordAuthentication = false;
AllowUsers = ["leyla"]; # Allows all users by default. Can be [ "user1" "user2" ]
UseDns = true;
X11Forwarding = false;
};
};
};
environment.sessionVariables = rec {
SOPS_AGE_KEY_DIRECTORY = "/var/lib/sops-nix";
SOPS_AGE_KEY_FILE = "${SOPS_AGE_KEY_DIRECTORY}/key.txt";
};
sops = {
defaultSopsFormat = "yaml";
gnupg.sshKeyPaths = [];
age = {
keyFile = "/var/lib/sops-nix/key.txt";
sshKeyPaths = [];
# generateKey = true;
};
};
# List packages installed in system profile.
environment.systemPackages = with pkgs; [
wget
# version control
git
# system debuging tools
iputils
dnsutils
];
}

View file

@ -1,258 +0,0 @@
{
lib,
config,
pkgs,
...
}: {
imports = [
../common
];
options = {
domains = {
base_domain = lib.mkOption {
type = lib.types.str;
};
headscale = {
subdomain = lib.mkOption {
type = lib.types.str;
description = "subdomain of base domain that headscale will be hosted at";
default = "headscale";
};
};
jellyfin = {
subdomain = lib.mkOption {
type = lib.types.str;
description = "subdomain of base domain that jellyfin will be hosted at";
default = "jellyfin";
};
hostname = lib.mkOption {
type = lib.types.str;
description = "hosname that jellyfin will be hosted at";
default = "${config.domains.jellyfin.subdomain}.${config.domains.base_domain}";
};
};
forgejo = {
subdomain = lib.mkOption {
type = lib.types.str;
description = "subdomain of base domain that foregjo will be hosted at";
default = "forgejo";
};
hostname = lib.mkOption {
type = lib.types.str;
description = "hosname that forgejo will be hosted at";
default = "${config.domains.forgejo.subdomain}.${config.domains.base_domain}";
};
};
};
};
config = {
sops.secrets = {
"services/pi-hole" = {
sopsFile = ../../secrets/defiant-services.yaml;
};
};
# Runtime
virtualisation.podman = {
enable = true;
autoPrune.enable = true;
dockerCompat = true;
defaultNetwork.settings = {
# Required for container networking to be able to use names.
dns_enabled = true;
};
};
virtualisation.oci-containers.backend = "podman";
virtualisation.oci-containers.containers.pihole = {
image = "pihole/pihole:2024.07.0";
hostname = "pihole";
volumes = [
"/home/pihole:/etc/pihole:rw" # TODO; set this based on configs
"${config.sops.secrets."services/pi-hole".path}:/var/lib/pihole/webpassword.txt"
];
environment = {
TZ = config.time.timeZone;
WEBPASSWORD_FILE = "/var/lib/pihole/webpassword.txt";
PIHOLE_UID = toString config.users.users.pihole.uid;
PIHOLE_GID = toString config.users.groups.pihole.gid;
};
log-driver = "journald";
extraOptions = [
"--ip=192.168.1.201" # TODO: set this to some ip address from configs
"--network=macvlan"
];
};
systemd = {
tmpfiles.rules = [
"d /home/jellyfin 755 jellyfin jellyfin -"
"d /home/jellyfin/media 775 jellyfin jellyfin_media -"
"d /home/jellyfin/config 750 jellyfin jellyfin -"
"d /home/jellyfin/cache 755 jellyfin jellyfin_media -"
"d /home/forgejo 750 forgejo forgejo -"
"d /home/forgejo/data 750 forgejo forgejo -"
"d /home/pihole 750 pihole pihole -"
];
services = {
"podman-pihole" = {
serviceConfig = {
Restart = lib.mkOverride 500 "always";
};
after = [
"podman-network-macvlan.service"
];
requires = [
"podman-network-macvlan.service"
];
partOf = [
"podman-compose-root.target"
];
wantedBy = [
"podman-compose-root.target"
];
};
"podman-network-macvlan" = {
path = [ pkgs.podman ];
serviceConfig = {
Type = "oneshot";
RemainAfterExit = true;
ExecStop = "podman network rm -f macvlan";
};
# TODO: check subnet against pi-hole ip address
# TODO: make lan configurable
# TODO: make parent interface configurable
script = ''
podman network inspect macvlan || podman network create --driver macvlan --subnet 192.168.1.0/24 --gateway 192.168.1.1 --opt parent=bond0 macvlan
'';
partOf = [ "podman-compose-root.target" ];
wantedBy = [ "podman-compose-root.target" ];
};
};
# disable computer sleeping
targets = {
sleep.enable = false;
suspend.enable = false;
hibernate.enable = false;
hybrid-sleep.enable = false;
# Root service
# When started, this will automatically create all resources and start
# the containers. When stopped, this will teardown all resources.
"podman-compose-root" = {
unitConfig = {
Description = "Root target for podman targets.";
};
wantedBy = [ "multi-user.target" ];
};
};
};
services = {
# DNS stub needs to be disabled so pi hole can bind
# resolved.extraConfig = "DNSStubListener=no";
nfs.server = {
enable = true;
exports = ''
/home/leyla 192.168.1.0/22(rw,sync,no_subtree_check,crossmnt)
/home/eve 192.168.1.0/22(rw,sync,no_subtree_check,crossmnt)
/home/ester 192.168.1.0/22(rw,sync,no_subtree_check,crossmnt)
/home/users 192.168.1.0/22(rw,sync,no_subtree_check,crossmnt)
'';
};
postgresql = {
enable = true;
ensureDatabases = ["forgejo"];
identMap = ''
# ArbitraryMapName systemUser DBUser
superuser_map root postgres
superuser_map postgres postgres
superuser_map forgejo forgejo
'';
# configuration here lets users access the db that matches their name and lets user postgres access everything
authentication = pkgs.lib.mkOverride 10 ''
# type database DBuser auth-method optional_ident_map
local sameuser all peer map=superuser_map
'';
};
headscale = {
enable = true;
address = "0.0.0.0";
port = 8080;
settings = {
server_url = "http://${config.domains.headscale.subdomain}.${config.domains.base_domain}";
dns_config.base_domain = config.domains.base_domain;
logtail.enabled = false;
};
};
jellyfin = {
enable = true;
user = "jellyfin";
group = "jellyfin";
dataDir = "/home/jellyfin/config"; # location on existing server: /home/docker/jellyfin/config
cacheDir = "/home/jellyfin/cache"; # location on existing server: /home/docker/jellyfin/cache
};
forgejo = {
enable = true;
database.type = "postgres";
lfs.enable = true;
settings = {
server = {
DOMAIN = config.domains.forgejo.hostname;
HTTP_PORT = 8081;
};
service.DISABLE_REGISTRATION = true;
};
stateDir = "/home/forgejo/data";
};
nginx = {
enable = false; # TODO: enable this when you want to test all the configs
virtualHosts = {
${config.domains.headscale.hostname} = {
forceSSL = true;
enableACME = true;
locations."/" = {
proxyPass = "http://localhost:${toString config.services.headscale.port}";
proxyWebsockets = true;
};
};
${config.domains.jellyfin.hostname} = {
forceSSL = true;
enableACME = true;
locations."/".proxyPass = "http://localhost:8096";
};
${config.domains.forgejo.hostname} = {
forceSSL = true;
enableACME = true;
locations."/".proxyPass = "http://localhost:${toString config.services.forgejo.settings.server.HTTP_PORT}";
};
};
};
};
security.acme = {
acceptTerms = true;
defaults.email = "jan-leila@protonmail.com";
};
networking.firewall.allowedTCPPorts = [53 2049 3000 8081];
environment.systemPackages = [
config.services.headscale.package
pkgs.jellyfin
pkgs.jellyfin-web
pkgs.jellyfin-ffmpeg
];
};
}

335
flake.lock generated
View file

@ -1,5 +1,23 @@
{ {
"nodes": { "nodes": {
"devshell": {
"inputs": {
"nixpkgs": "nixpkgs"
},
"locked": {
"lastModified": 1741473158,
"narHash": "sha256-kWNaq6wQUbUMlPgw8Y+9/9wP0F8SHkjy24/mN3UAppg=",
"owner": "numtide",
"repo": "devshell",
"rev": "7c9e793ebe66bcba8292989a68c0419b737a22a0",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "devshell",
"type": "github"
}
},
"disko": { "disko": {
"inputs": { "inputs": {
"nixpkgs": [ "nixpkgs": [
@ -7,11 +25,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1726842196, "lastModified": 1762276996,
"narHash": "sha256-u9h03JQUuQJ607xmti9F9Eh6E96kKUAGP+aXWgwm70o=", "narHash": "sha256-TtcPgPmp2f0FAnc+DMEw4ardEgv1SGNR3/WFGH0N19M=",
"owner": "nix-community", "owner": "nix-community",
"repo": "disko", "repo": "disko",
"rev": "51994df8ba24d5db5459ccf17b6494643301ad28", "rev": "af087d076d3860760b3323f6b583f4d828c1ac17",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -20,14 +38,35 @@
"type": "github" "type": "github"
} }
}, },
"flake-compat": { "firefox-addons": {
"flake": false, "inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": { "locked": {
"lastModified": 1696426674, "dir": "pkgs/firefox-addons",
"narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", "lastModified": 1762488230,
"narHash": "sha256-b7FFUa+bQ8m5din6ylspTTeQvhTf7NNDwC3fPOwCkx4=",
"owner": "rycee",
"repo": "nur-expressions",
"rev": "05e744e2e2d174b2fd445e51ad38fb8356001a18",
"type": "gitlab"
},
"original": {
"dir": "pkgs/firefox-addons",
"owner": "rycee",
"repo": "nur-expressions",
"type": "gitlab"
}
},
"flake-compat": {
"locked": {
"lastModified": 1761588595,
"narHash": "sha256-XKUZz9zewJNUj46b4AJdiRZJAvSZ0Dqj2BNfXvFlJC4=",
"owner": "edolstra", "owner": "edolstra",
"repo": "flake-compat", "repo": "flake-compat",
"rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", "rev": "f387cd2afec9419c8ee37694406ca490c3f34ee5",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -41,11 +80,11 @@
"systems": "systems" "systems": "systems"
}, },
"locked": { "locked": {
"lastModified": 1710146030, "lastModified": 1731533236,
"narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=", "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
"owner": "numtide", "owner": "numtide",
"repo": "flake-utils", "repo": "flake-utils",
"rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a", "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -54,6 +93,39 @@
"type": "github" "type": "github"
} }
}, },
"flake-utils_2": {
"inputs": {
"systems": "systems_2"
},
"locked": {
"lastModified": 1731533236,
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"flakey-profile": {
"locked": {
"lastModified": 1712898590,
"narHash": "sha256-FhGIEU93VHAChKEXx905TSiPZKga69bWl1VB37FK//I=",
"owner": "lf-",
"repo": "flakey-profile",
"rev": "243c903fd8eadc0f63d205665a92d4df91d42d9d",
"type": "github"
},
"original": {
"owner": "lf-",
"repo": "flakey-profile",
"type": "github"
}
},
"home-manager": { "home-manager": {
"inputs": { "inputs": {
"nixpkgs": [ "nixpkgs": [
@ -61,11 +133,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1726863345, "lastModified": 1762463325,
"narHash": "sha256-fjbKe1/UJpLT6tQLAKJ/djJFdnmAh2kkdsgmylyFrQA=", "narHash": "sha256-33YUsWpPyeBZEWrKQ2a1gkRZ7i0XCC/2MYpU6BVeQSU=",
"owner": "nix-community", "owner": "nix-community",
"repo": "home-manager", "repo": "home-manager",
"rev": "dfe4d334b172071e7189d971ddecd3a7f811b48d", "rev": "0562fef070a1027325dd4ea10813d64d2c967b39",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -74,20 +146,133 @@
"type": "github" "type": "github"
} }
}, },
"nix-vscode-extensions": { "impermanence": {
"locked": {
"lastModified": 1737831083,
"narHash": "sha256-LJggUHbpyeDvNagTUrdhe/pRVp4pnS6wVKALS782gRI=",
"owner": "nix-community",
"repo": "impermanence",
"rev": "4b3e914cdf97a5b536a889e939fb2fd2b043a170",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "impermanence",
"type": "github"
}
},
"lix": {
"flake": false,
"locked": {
"lastModified": 1761937274,
"narHash": "sha256-KlELhsSq3XbemrGyQhmGurFu7m8wOEBw+8M04L7hn7A=",
"rev": "91867941fa73afea7869b7c71ede82e5ef8927da",
"type": "tarball",
"url": "https://git.lix.systems/api/v1/repos/lix-project/lix/archive/91867941fa73afea7869b7c71ede82e5ef8927da.tar.gz?rev=91867941fa73afea7869b7c71ede82e5ef8927da"
},
"original": {
"type": "tarball",
"url": "https://git.lix.systems/lix-project/lix/archive/main.tar.gz"
}
},
"lix-module": {
"inputs": { "inputs": {
"flake-compat": "flake-compat",
"flake-utils": "flake-utils", "flake-utils": "flake-utils",
"flakey-profile": "flakey-profile",
"lix": "lix",
"nixpkgs": [ "nixpkgs": [
"nixpkgs" "nixpkgs"
] ]
}, },
"locked": { "locked": {
"lastModified": 1726796602, "lastModified": 1761960361,
"narHash": "sha256-rYMcODISSljSETcqUUTMo++ZEa1CC6Xx6d3xuydishM=", "narHash": "sha256-FvuAw56NIVJpS3Kr8Wv9PpU4eehZMcdIVkxjStuYmqc=",
"ref": "refs/heads/main",
"rev": "c47f62187601ea2991b79a9bacdbfdf76cd29fbe",
"revCount": 167,
"type": "git",
"url": "https://git.lix.systems/lix-project/nixos-module.git"
},
"original": {
"type": "git",
"url": "https://git.lix.systems/lix-project/nixos-module.git"
}
},
"mcp-nixos": {
"inputs": {
"devshell": "devshell",
"flake-utils": "flake-utils_2",
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1760821194,
"narHash": "sha256-UCsJ8eDuHL14u2GFIYEY/drtZ6jht5zN/G/6QNlEy2g=",
"owner": "utensils",
"repo": "mcp-nixos",
"rev": "0ae453f38d0f088c31d4678da3a12b183165986f",
"type": "github"
},
"original": {
"owner": "utensils",
"repo": "mcp-nixos",
"type": "github"
}
},
"nix-darwin": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1762501326,
"narHash": "sha256-QbhsksHaIN6qU3oXhwUFbYycKX1GRxObpQSWAM5fhRY=",
"owner": "LnL7",
"repo": "nix-darwin",
"rev": "e2b82ebd0f990a5d1b68fcc761b3d6383c86ccfd",
"type": "github"
},
"original": {
"owner": "LnL7",
"repo": "nix-darwin",
"type": "github"
}
},
"nix-syncthing": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1741849924,
"narHash": "sha256-5vyb1H6HtW24QVqfI56P4QVQP6vHh1jS9ULwnunCO94=",
"ref": "main",
"rev": "86bcb200c83b6a5d13b3583126b9d8dc6770613a",
"revCount": 6,
"type": "git",
"url": "https://git.jan-leila.com/jan-leila/nix-syncthing"
},
"original": {
"ref": "main",
"type": "git",
"url": "https://git.jan-leila.com/jan-leila/nix-syncthing"
}
},
"nix-vscode-extensions": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1762480525,
"narHash": "sha256-7akzuLV8uKP3ym67TJoSIT5hTeC5FG8H745Y/7/7J+8=",
"owner": "nix-community", "owner": "nix-community",
"repo": "nix-vscode-extensions", "repo": "nix-vscode-extensions",
"rev": "91dea80194080f017c6edf84fd94e33f6c12aec3", "rev": "b8b0b207dc13cb7b004f9d0c1d2b76a85e9494c8",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -98,11 +283,11 @@
}, },
"nixos-hardware": { "nixos-hardware": {
"locked": { "locked": {
"lastModified": 1726724509, "lastModified": 1762463231,
"narHash": "sha256-sVeAM1tgVi52S1e29fFBTPUAFSzgQwgLon3CrztXGm8=", "narHash": "sha256-hv1mG5j5PTbnWbtHHomzTus77pIxsc4x8VrMjc7+/YE=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixos-hardware", "repo": "nixos-hardware",
"rev": "10d5e0ecc32984c1bf1a9a46586be3451c42fd94", "rev": "52113c4f5cfd1e823001310e56d9c8d0699a6226",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -114,43 +299,11 @@
}, },
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1726755586, "lastModified": 1722073938,
"narHash": "sha256-PmUr/2GQGvFTIJ6/Tvsins7Q43KTMvMFhvG6oaYK+Wk=", "narHash": "sha256-OpX0StkL8vpXyWOGUD6G+MA26wAXK6SpT94kLJXo6B4=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "c04d5652cfa9742b1d519688f65d1bbccea9eb7e",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs-stable": {
"locked": {
"lastModified": 1725762081,
"narHash": "sha256-vNv+aJUW5/YurRy1ocfvs4q/48yVESwlC/yHzjkZSP8=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "dc454045f5b5d814e5862a6d057e7bb5c29edc05", "rev": "e36e9f57337d0ff0cf77aceb58af4c805472bfae",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "release-24.05",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_2": {
"locked": {
"lastModified": 1725534445,
"narHash": "sha256-Yd0FK9SkWy+ZPuNqUgmVPXokxDgMJoGuNpMEtkfcf84=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "9bb1e7571aadf31ddb4af77fc64b2d59580f9a39",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -160,27 +313,68 @@
"type": "github" "type": "github"
} }
}, },
"nixpkgs_2": {
"locked": {
"lastModified": 1762363567,
"narHash": "sha256-YRqMDEtSMbitIMj+JLpheSz0pwEr0Rmy5mC7myl17xs=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "ae814fd3904b621d8ab97418f1d0f2eb0d3716f4",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"root": { "root": {
"inputs": { "inputs": {
"disko": "disko", "disko": "disko",
"firefox-addons": "firefox-addons",
"flake-compat": "flake-compat",
"home-manager": "home-manager", "home-manager": "home-manager",
"impermanence": "impermanence",
"lix-module": "lix-module",
"mcp-nixos": "mcp-nixos",
"nix-darwin": "nix-darwin",
"nix-syncthing": "nix-syncthing",
"nix-vscode-extensions": "nix-vscode-extensions", "nix-vscode-extensions": "nix-vscode-extensions",
"nixos-hardware": "nixos-hardware", "nixos-hardware": "nixos-hardware",
"nixpkgs": "nixpkgs", "nixpkgs": "nixpkgs_2",
"secrets": "secrets",
"sops-nix": "sops-nix" "sops-nix": "sops-nix"
} }
}, },
"secrets": {
"flake": false,
"locked": {
"lastModified": 1759945215,
"narHash": "sha256-xmUzOuhJl6FtTjR5++OQvSoAnXe7/VA5QFCZDyFwBXo=",
"ref": "refs/heads/main",
"rev": "444229a105445339fb028d15a8d866063c5f8141",
"revCount": 21,
"type": "git",
"url": "ssh://git@git.jan-leila.com/jan-leila/nix-config-secrets.git"
},
"original": {
"type": "git",
"url": "ssh://git@git.jan-leila.com/jan-leila/nix-config-secrets.git"
}
},
"sops-nix": { "sops-nix": {
"inputs": { "inputs": {
"nixpkgs": "nixpkgs_2", "nixpkgs": [
"nixpkgs-stable": "nixpkgs-stable" "nixpkgs"
]
}, },
"locked": { "locked": {
"lastModified": 1726524647, "lastModified": 1760998189,
"narHash": "sha256-qis6BtOOBBEAfUl7FMHqqTwRLB61OL5OFzIsOmRz2J4=", "narHash": "sha256-ee2e1/AeGL5X8oy/HXsZQvZnae6XfEVdstGopKucYLY=",
"owner": "Mic92", "owner": "Mic92",
"repo": "sops-nix", "repo": "sops-nix",
"rev": "e2d404a7ea599a013189aa42947f66cede0645c8", "rev": "5a7d18b5c55642df5c432aadb757140edfeb70b3",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -203,6 +397,21 @@
"repo": "default", "repo": "default",
"type": "github" "type": "github"
} }
},
"systems_2": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
} }
}, },
"root": "root", "root": "root",

182
flake.nix
View file

@ -5,75 +5,169 @@
# base packages # base packages
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
# encrypt files that contain secreats that I would like to not encrypt lix-module = {
sops-nix.url = "github:Mic92/sops-nix"; url = "git+https://git.lix.systems/lix-project/nixos-module.git";
inputs.nixpkgs.follows = "nixpkgs";
};
# declairtive disk configuration # secret encryption
sops-nix = {
url = "github:Mic92/sops-nix";
inputs.nixpkgs.follows = "nixpkgs";
};
# self hosted repo of secrets file to further protect files in case of future encryption vulnerabilities
secrets = {
url = "git+ssh://git@git.jan-leila.com/jan-leila/nix-config-secrets.git";
flake = false;
};
# common config for syncthing
nix-syncthing = {
url = "git+https://git.jan-leila.com/jan-leila/nix-syncthing?ref=main";
inputs.nixpkgs.follows = "nixpkgs";
};
# disk configurations
disko = { disko = {
url = "github:nix-community/disko"; url = "github:nix-community/disko";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
# managment per user # delete your darlings
impermanence = {
url = "github:nix-community/impermanence";
};
nix-darwin = {
url = "github:LnL7/nix-darwin";
inputs.nixpkgs.follows = "nixpkgs";
};
# users home directories
home-manager = { home-manager = {
url = "github:nix-community/home-manager"; url = "github:nix-community/home-manager";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
# repo of hardware configs for prebuilt systems # firefox extensions
nixos-hardware.url = "github:NixOS/nixos-hardware/master"; firefox-addons = {
url = "gitlab:rycee/nur-expressions?dir=pkgs/firefox-addons";
inputs.nixpkgs.follows = "nixpkgs";
};
# vscode extensions # vscode extensions
nix-vscode-extensions = { nix-vscode-extensions = {
url = "github:nix-community/nix-vscode-extensions"; url = "github:nix-community/nix-vscode-extensions";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
# pregenerated hardware configurations
nixos-hardware = {
url = "github:NixOS/nixos-hardware/master";
};
# this is just here so that we have a lock on it for our dev shells
flake-compat = {
url = "github:edolstra/flake-compat";
};
# MCP NixOS server for Claude Dev
mcp-nixos = {
url = "github:utensils/mcp-nixos";
inputs.nixpkgs.follows = "nixpkgs";
};
}; };
outputs = { outputs = {
self, self,
nixpkgs, nixpkgs,
disko, sops-nix,
nixos-hardware, nix-syncthing,
home-manager,
impermanence,
... ...
} @ inputs: let } @ inputs: let
forEachSystem = nixpkgs.lib.genAttrs [ util = import ./util {inherit inputs;};
"aarch64-darwin" forEachPkgs = util.forEachPkgs;
"aarch64-linux"
"x86_64-darwin"
"x86_64-linux"
];
forEachPkgs = lambda: forEachSystem (system: lambda nixpkgs.legacyPackages.${system});
in {
packages = forEachPkgs (pkgs: import ./pkgs {inherit pkgs;});
nixosConfigurations = { mkNixosSystem = util.mkNixosSystem;
# Leyla Laptop mkDarwinSystem = util.mkDarwinSystem;
horizon = nixpkgs.lib.nixosSystem { mkHome = util.mkHome;
specialArgs = {inherit inputs;};
modules = [ nixosSystems = {
./hosts/horizon/configuration.nix horizon = mkNixosSystem "horizon";
inputs.home-manager.nixosModules.default twilight = mkNixosSystem "twilight";
nixos-hardware.nixosModules.framework-11th-gen-intel defiant = mkNixosSystem "defiant";
]; emergent = mkNixosSystem "emergent";
};
# Leyla Desktop
twilight = nixpkgs.lib.nixosSystem {
specialArgs = {inherit inputs;};
modules = [
./hosts/twilight/configuration.nix
inputs.home-manager.nixosModules.default
];
};
# NAS Service
defiant = nixpkgs.lib.nixosSystem {
specialArgs = {inherit inputs;};
modules = [
disko.nixosModules.disko
./hosts/defiant/disko-config.nix
./hosts/defiant/configuration.nix
];
};
}; };
darwinSystems = {
hesperium = mkDarwinSystem "hesperium";
};
homeSystems = {
# stand alone home manager configurations here:
# name = mkHome "name"
};
systemsHomes = nixpkgs.lib.attrsets.mergeAttrsList (
nixpkgs.lib.attrsets.mapAttrsToList (hostname: system: (
nixpkgs.lib.attrsets.mapAttrs' (user: _: {
name = "${user}@${hostname}";
value = mkHome {
user = user;
host = hostname;
system = system.pkgs.hostPlatform.system;
osConfig = system.config;
};
})
system.config.home-manager.users
))
(nixosSystems // darwinSystems)
);
homeConfigurations =
systemsHomes
// homeSystems;
in {
formatter = forEachPkgs (system: pkgs: pkgs.alejandra);
# templates = import ./templates;
devShells = forEachPkgs (system: pkgs: {
default = pkgs.mkShell {
packages = with pkgs; [
# for version controlling this repo
git
# for formatting code in this repo
alejandra
# for editing secrets in the secrets repo
sops
# for viewing configuration options defined in this repo
nix-inspect
# for installing flakes from this repo onto other systems
nixos-anywhere
# for updating disko configurations
disko
# for viewing dconf entries
dconf-editor
# for MCP NixOS server support in development
inputs.mcp-nixos.packages.${system}.default
];
SOPS_AGE_KEY_DIRECTORY = import ./const/sops_age_key_directory.nix;
shellHook = ''
git config core.hooksPath .hooks
'';
};
});
nixosConfigurations = nixosSystems;
darwinConfigurations = darwinSystems;
homeConfigurations = homeConfigurations;
}; };
} }

View file

@ -1,65 +0,0 @@
# server nas
{
config,
pkgs,
inputs,
...
}: {
imports = [
inputs.home-manager.nixosModules.default
inputs.sops-nix.nixosModules.sops
./hardware-configuration.nix
../../enviroments/server
];
users.leyla.isThinUser = true;
boot.loader.grub = {
enable = true;
zfsSupport = true;
efiSupport = true;
efiInstallAsRemovable = true;
};
domains = {
base_domain = "jan-leila.com";
headscale.subdomain = "vpn";
jellyfin.subdomain = "media";
forgejo.subdomain = "git";
};
services = {
zfs = {
autoScrub.enable = true;
autoSnapshot.enable = true;
};
# temp enable desktop enviroment for setup
# Enable the X11 windowing system.
xserver = {
enable = true;
# Enable the GNOME Desktop Environment.
displayManager = {
gdm.enable = true;
};
desktopManager = {
gnome.enable = true;
xterm.enable = false;
};
# Get rid of xTerm
excludePackages = [pkgs.xterm];
};
};
# This value determines the NixOS release from which the default
# settings for stateful data, like file locations and database versions
# on your system were taken. Its perfectly fine and recommended to leave
# this value at the release version of the first install of this system.
# Before changing this value read the documentation for this option
# (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
system.stateVersion = "23.05"; # Did you read the comment?
}

View file

@ -1,136 +0,0 @@
{lib, ...}: let
bootDisk = devicePath: {
type = "disk";
device = devicePath;
content = {
type = "gpt";
partitions = {
boot = {
size = "1M";
type = "EF02"; # for grub MBR
};
ESP = {
size = "1G";
type = "EF00";
content = {
type = "filesystem";
format = "vfat";
mountpoint = "/boot";
};
};
};
};
};
zfsDisk = devicePath: {
type = "disk";
device = devicePath;
content = {
type = "gpt";
partitions = {
zfs = {
size = "100%";
content = {
type = "zfs";
pool = "zroot";
};
};
};
};
};
cacheDisk = devicePath: swapSize: {
type = "disk";
device = devicePath;
content = {
type = "gpt";
partitions = {
encryptedSwap = {
size = swapSize;
content = {
type = "swap";
randomEncryption = true;
discardPolicy = "both";
resumeDevice = true;
};
};
zfs = {
size = "100%";
content = {
type = "zfs";
pool = "zroot";
};
};
};
};
};
in {
disko.devices = {
disk = {
boot = bootDisk "/dev/disk/by-path/pci-0000:23:00.3-usb-0:1:1.0-scsi-0:0:0:0";
hd_13_tb_a = zfsDisk "/dev/disk/by-id/ata-ST18000NE000-3G6101_ZVTCXVEB";
hd_13_tb_b = zfsDisk "/dev/disk/by-id/ata-ST18000NE000-3G6101_ZVTCXWSC";
hd_13_tb_c = zfsDisk "/dev/disk/by-id/ata-ST18000NE000-3G6101_ZVTD10EH";
# ssd_2_tb_a = cacheDisk "64G" "/dev/disk/by-id/XXX";
};
zpool = {
zroot = {
type = "zpool";
mode = {
topology = {
type = "topology";
vdev = [
{
# should this only mirror for this inital config with 3 drives we will used raidz2 for future configs???
mode = "mirror";
members = [
"hd_13_tb_a"
"hd_13_tb_b"
"hd_13_tb_c"
];
}
];
cache = [];
# cache = [ "ssd_2_tb_a" ];
};
};
options = {
ashift = "12";
};
rootFsOptions = {
encryption = "on";
keyformat = "hex";
keylocation = "prompt";
compression = "lz4";
xattr = "sa";
acltype = "posixacl";
"com.sun:auto-snapshot" = "false";
};
mountpoint = "/";
postCreateHook = "zfs list -t snapshot -H -o name | grep -E '^zroot@blank$' || zfs snapshot zroot@blank";
datasets = {
"nix" = {
type = "zfs_fs";
mountpoint = "/nix";
};
"home" = {
type = "zfs_fs";
mountpoint = "/mnt/home";
options = {
"com.sun:auto-snapshot" = "true";
};
};
"var" = {
type = "zfs_fs";
mountpoint = "/var";
};
};
};
};
};
}

View file

@ -1,15 +0,0 @@
{lib, ...}: {
options = {
hardware = {
piperMouse = {
enable = lib.mkEnableOption "host has a piper mouse";
};
viaKeyboard = {
enable = lib.mkEnableOption "host has a via keyboard";
};
openRGB = {
enable = lib.mkEnableOption "host has open rgb hardware";
};
};
};
}

View file

@ -1,49 +0,0 @@
# leyla laptop
{
config,
pkgs,
inputs,
...
}: {
imports = [
inputs.home-manager.nixosModules.default
inputs.sops-nix.nixosModules.sops
./hardware-configuration.nix
../../enviroments/client
];
users = {
leyla.isFullUser = true;
ester.isFullUser = true;
eve.isFullUser = true;
};
# enabled virtualisation for docker
virtualisation.docker = {
enable = true;
rootless = {
enable = true;
setSocketVariable = true;
};
};
users.extraGroups.docker.members = ["leyla"];
# Enable touchpad support (enabled default in most desktopManager).
# services.xserver.libinput.enable = true;
# Open ports in the firewall.
# networking.firewall.allowedTCPPorts = [ ... ];
# networking.firewall.allowedUDPPorts = [ ... ];
# Or disable the firewall altogether.
# networking.firewall.enable = false;
# This value determines the NixOS release from which the default
# settings for stateful data, like file locations and database versions
# on your system were taken. Its perfectly fine and recommended to leave
# this value at the release version of the first install of this system.
# Before changing this value read the documentation for this option
# (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
system.stateVersion = "23.05"; # Did you read the comment?
}

View file

@ -1,106 +0,0 @@
# Do not modify this file! It was generated by nixos-generate-config
# and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead.
{
config,
lib,
pkgs,
modulesPath,
...
}: {
imports = [
(modulesPath + "/installer/scan/not-detected.nix")
../hardware-common.nix
];
boot = {
initrd = {
availableKernelModules = ["xhci_pci" "thunderbolt" "nvme" "usb_storage" "sd_mod"];
kernelModules = [];
};
kernelModules = ["kvm-intel" "sg"];
extraModulePackages = [];
# Bootloader.
loader = {
systemd-boot.enable = true;
efi.canTouchEfiVariables = true;
};
};
fileSystems = {
"/" = {
device = "/dev/disk/by-uuid/866d422b-f816-4ad9-9846-791839cb9337";
fsType = "ext4";
};
"/boot" = {
device = "/dev/disk/by-uuid/E138-65B5";
fsType = "vfat";
};
"/mnt/leyla_home" = {
device = "defiant:/home/leyla";
fsType = "nfs";
options = ["x-systemd.automount" "user" "noatime" "nofail" "soft" "x-systemd.idle-timeout=600" "fsc"];
};
"/mnt/eve_home" = {
device = "defiant:/home/eve";
fsType = "nfs";
options = ["x-systemd.automount" "user" "nofail" "soft" "x-systemd.idle-timeout=600" "fsc"];
};
"/mnt/ester_home" = {
device = "defiant:/home/ester";
fsType = "nfs";
options = ["x-systemd.automount" "user" "nofail" "soft" "x-systemd.idle-timeout=600" "fsc"];
};
"/mnt/users_home" = {
device = "defiant:/home/users";
fsType = "nfs";
options = ["x-systemd.automount" "user" "nofail" "soft" "x-systemd.idle-timeout=600" "fsc"];
};
# "/mnt/legacy_leyla_home" =
# {
# device = "server.arpa:/home/leyla";
# fsType = "nfs";
# options = [ "x-systemd.automount" "user" "nofail" "soft" "x-systemd.idle-timeout=600" "fsc" ];
# };
# "/mnt/legacy_share_home" =
# {
# device = "server.arpa:/home/share";
# fsType = "nfs";
# options = [ "x-systemd.automount" "user" "nofail" "soft" "x-systemd.idle-timeout=600" "fsc" ];
# };
# "/mnt/legacy_docker_home" =
# {
# device = "server.arpa:/home/docker";
# fsType = "nfs";
# options = [ "x-systemd.automount" "noauto" "x-systemd.idle-timeout=600" ];
# };
};
services.cachefilesd.enable = true;
swapDevices = [
{device = "/dev/disk/by-uuid/be98e952-a072-4c3a-8c12-69500b5a2fff";}
];
networking = {
useDHCP = lib.mkDefault true;
hostName = "horizon"; # Define your hostname.
};
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
powerManagement.cpuFreqGovernor = lib.mkDefault "powersave";
hardware = {
graphics.enable = true;
cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
};
}

View file

@ -1,125 +0,0 @@
# Do not modify this file! It was generated by nixos-generate-config
# and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead.
{
config,
lib,
pkgs,
modulesPath,
...
}: {
imports = [
(modulesPath + "/installer/scan/not-detected.nix")
../hardware-common.nix
];
boot = {
initrd = {
availableKernelModules = ["nvme" "xhci_pci" "ahci" "usb_storage" "usbhid" "sd_mod"];
kernelModules = [];
};
kernelModules = ["kvm-amd" "sg"];
extraModulePackages = [];
# Bootloader.
loader = {
systemd-boot.enable = true;
efi.canTouchEfiVariables = true;
};
};
services.xserver = {
# Load nvidia driver for Xorg and Wayland
videoDrivers = ["nvidia"];
# Use X instead of wayland for gaming reasons
displayManager.gdm.wayland = false;
};
fileSystems = {
"/" = {
device = "/dev/disk/by-uuid/8be49c65-2b57-48f1-b74d-244d26061adb";
fsType = "ext4";
};
"/boot" = {
device = "/dev/disk/by-uuid/3006-3867";
fsType = "vfat";
options = ["fmask=0022" "dmask=0022"];
};
"/mnt/leyla_home" = {
device = "server.arpa:/home/leyla";
fsType = "nfs";
options = ["x-systemd.automount" "user" "nofail" "soft" "x-systemd.idle-timeout=600" "fsc"];
};
"/mnt/share_home" = {
device = "server.arpa:/home/share";
fsType = "nfs";
options = ["x-systemd.automount" "user" "nofail" "soft" "x-systemd.idle-timeout=600" "fsc"];
};
"/mnt/docker_home" = {
device = "server.arpa:/home/docker";
fsType = "nfs";
options = ["x-systemd.automount" "noauto" "x-systemd.idle-timeout=600"];
};
};
swapDevices = [];
networking = {
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
# (the default) this is the recommended approach. When using systemd-networkd it's
# still possible to use this option, but it's recommended to use it in conjunction
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
useDHCP = lib.mkDefault true;
hostName = "twilight"; # Define your hostname.
};
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware = {
piperMouse.enable = true;
viaKeyboard.enable = true;
openRGB.enable = true;
# Enable OpenGL
graphics.enable = true;
# install graphics drivers
nvidia = {
# Modesetting is required.
modesetting.enable = true;
# Nvidia power management. Experimental, and can cause sleep/suspend to fail.
# Enable this if you have graphical corruption issues or application crashes after waking
# up from sleep. This fixes it by saving the entire VRAM memory to /tmp/ instead
# of just the bare essentials.
powerManagement.enable = false;
# Fine-grained power management. Turns off GPU when not in use.
# Experimental and only works on modern Nvidia GPUs (Turing or newer).
powerManagement.finegrained = false;
# Use the NVidia open source kernel module (not to be confused with the
# independent third-party "nouveau" open source driver).
# Support is limited to the Turing and later architectures. Full list of
# supported GPUs is at:
# https://github.com/NVIDIA/open-gpu-kernel-modules#compatible-gpus
# Only available from driver 515.43.04+
# Currently alpha-quality/buggy, so false is currently the recommended setting.
open = false;
# Enable the Nvidia settings menu,
# accessible via `nvidia-settings`.
nvidiaSettings = true;
# Optionally, you may need to select the appropriate driver version for your specific GPU.
package = config.boot.kernelPackages.nvidiaPackages.production;
};
cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
};
}

View file

@ -39,6 +39,7 @@ if [ -z ${flake} ]; then
exit 1; exit 1;
fi fi
# TODO: we might not need to copy the key over here anymore?
temp=$(mktemp -d) temp=$(mktemp -d)
# Function to cleanup temporary directory on exit # Function to cleanup temporary directory on exit
cleanup() { cleanup() {
@ -51,4 +52,4 @@ mkdir -p $temp$SOPS_AGE_KEY_DIRECTORY
cp -r $SOPS_AGE_KEY_DIRECTORY/* $temp$SOPS_AGE_KEY_DIRECTORY cp -r $SOPS_AGE_KEY_DIRECTORY/* $temp$SOPS_AGE_KEY_DIRECTORY
# commit number in this is because the main branch of nixos-anywhere is broken right now # commit number in this is because the main branch of nixos-anywhere is broken right now
nix run github:nix-community/nixos-anywhere/b3b6bfebba35d55fba485ceda588984dec74c54f -- --extra-files $temp --flake ".#$flake" ${user:-nixos}@$target nixos-anywhere --extra-files $temp --flake ".#$flake" ${user:-nixos}@$target

View file

@ -1,3 +0,0 @@
#!/usr/bin/env bash
nix run git+https://github.com/kamadorueda/alejandra -- -q .

View file

@ -0,0 +1,7 @@
# this folder is for modules that are common between nixos, home-manager, and darwin
{...}: {
imports = [
./overlays
./pkgs
];
}

View file

@ -0,0 +1,6 @@
# this folder is for derivation overlays
{inputs, ...}: {
nixpkgs.overlays = [
inputs.nix-vscode-extensions.overlays.default
];
}

View file

@ -0,0 +1,42 @@
{
buildNpmPackage,
vscode-utils,
pkgs,
...
}: let
version = "0.0.1";
pname = "ai-code";
publisher = "jan-leila";
vsix = buildNpmPackage {
inherit version pname;
src = builtins.fetchGit {
url = "ssh://git@git.jan-leila.com/jan-leila/ai-code.git";
rev = "d48e01713021dbb30de0ebbee2cfaf99e4e9b5a6";
};
npmDepsHash = "sha256-kjMyEnT3dz0yH5Ydh+aGoFDocKpBYGRmfnwbEdvvgpY=";
nativeBuildInputs = with pkgs; [
vsce
];
buildPhase = ''
${pkgs.vsce}/bin/vsce package -o ${pname}.zip
'';
installPhase = ''
mkdir -p $out
mv ${pname}.zip $out/${pname}.zip
'';
};
in
vscode-utils.buildVscodeExtension {
inherit pname version;
src = "${vsix}/${pname}.zip";
vscodeExtUniqueId = "${publisher}.${pname}";
vscodeExtPublisher = publisher;
vscodeExtName = pname;
}

View file

@ -0,0 +1,3 @@
{pkgs, ...}: {
ai-code = pkgs.callPackage ./ai-code.nix {};
}

View file

@ -0,0 +1,51 @@
{
pkgs,
inputs,
...
}: {
imports = [
./python
];
nixpkgs.overlays = [
(final: prev: {
webtoon-dl =
pkgs.callPackage
./webtoon-dl.nix
{};
})
(final: prev: {
prostudiomasters =
pkgs.callPackage
./prostudiomasters.nix
{};
})
(final: prev: {
noita_entangled_worlds = pkgs.callPackage ./noita-entangled-worlds.nix {};
})
(final: prev: {
gdx-liftoff = pkgs.callPackage ./gdx-liftoff.nix {};
})
(final: prev: {
codium-extensions = pkgs.callPackage ./codium-extensions {};
})
(final: prev: {
firefox-extensions = pkgs.callPackage ./firefox-extensions {
inherit inputs;
};
})
(final: prev: {
mapillary-uploader = pkgs.callPackage ./mapillary-uploader.nix {};
})
(final: prev: {
panoramax = pkgs.python3.pkgs.callPackage ./panoramax.nix {};
})
(final: prev: {
sgblur = pkgs.python3.pkgs.callPackage ./sgblur.nix {};
})
(final: prev: {
# Override h3 C library to version 4.3.0
h3 = pkgs.callPackage ./h3-c-lib.nix {};
})
];
}

View file

@ -0,0 +1,17 @@
{
pkgs,
inputs,
...
}: let
inherit (inputs.firefox-addons.lib.${pkgs.stdenv.hostPlatform.system}) buildFirefoxXpiAddon;
in {
italiano-it-language-pack = pkgs.callPackage ./italiano-it-language-pack.nix {
inherit buildFirefoxXpiAddon;
};
dizionario-italiano = pkgs.callPackage ./dizionario-italiano.nix {
inherit buildFirefoxXpiAddon;
};
deutsch-de-language-pack = pkgs.callPackage ./deutsch-de-language-pack.nix {
inherit buildFirefoxXpiAddon;
};
}

View file

@ -0,0 +1,18 @@
{
lib,
buildFirefoxXpiAddon,
...
}:
buildFirefoxXpiAddon rec {
pname = "deutsch-de-language-pack";
version = "145.0.20251106.194447";
addonId = "langpack-de@firefox.mozilla.org";
url = "https://addons.mozilla.org/firefox/downloads/file/4614311/deutsch_de_language_pack-${version}.xpi";
sha256 = "aaaa95c29984fb3802a5e7edb6b7e5020c391d81f389b8a8133c163959ea4299";
meta = with lib; {
description = "Firefox Language Pack for Deutsch (de) German";
license = licenses.mpl20;
mozPermissions = [];
platforms = platforms.all;
};
}

View file

@ -0,0 +1,18 @@
{
lib,
buildFirefoxXpiAddon,
...
}:
buildFirefoxXpiAddon rec {
pname = "dizionario-italiano";
version = "5.1";
addonId = "it-IT@dictionaries.addons.mozilla.org";
url = "https://addons.mozilla.org/firefox/downloads/file/3693497/dizionario_italiano-${version}.xpi";
sha256 = "90b173ffdde34a77108152a5ff51879767b1dd84e0aa0dfb7b2bab94cd2e7f53";
meta = with lib; {
description = "Add support for Italian to spellchecking";
license = licenses.gpl3;
mozPermissions = [];
platforms = platforms.all;
};
}

View file

@ -0,0 +1,18 @@
{
lib,
buildFirefoxXpiAddon,
...
}:
buildFirefoxXpiAddon rec {
pname = "italiano-it-language-pack";
version = "145.0.20251106.194447";
addonId = "langpack-it@firefox.mozilla.org";
url = "https://addons.mozilla.org/firefox/downloads/file/4614309/italiano_it_language_pack-${version}.xpi";
sha256 = "1eb271cedbf326543e222ba1b9a1da62fceef9d3c523ac02a098df296f155038";
meta = with lib; {
description = "Firefox Language Pack for Italiano (it) Italian";
license = licenses.mpl20;
mozPermissions = [];
platforms = platforms.all;
};
}

View file

@ -0,0 +1,44 @@
{
stdenv,
fetchurl,
makeWrapper,
jdk,
lib,
xorg,
libGL,
...
}:
stdenv.mkDerivation rec {
pname = "gdx-liftoff";
version = "1.13.5.1";
src = fetchurl {
url = "https://github.com/libgdx/gdx-liftoff/releases/download/v${version}/gdx-liftoff-${version}.jar";
hash = "sha256-9vCXGNGwI/P4VmcdIzTv2GPAX8bZb7nkfopaRAf6yMA=";
};
dontUnpack = true;
nativeBuildInputs = [makeWrapper];
runtimeDependencies = lib.makeLibraryPath [
# glfw
libGL
xorg.libX11
xorg.libXcursor
xorg.libXext
xorg.libXrandr
xorg.libXxf86vm
];
installPhase = ''
runHook preInstall
install -Dm644 $src $out/lib/gdx-liftoff-${version}.jar
makeWrapper ${lib.getExe jdk} $out/bin/gdx-liftoff-${version} \
--append-flags "-jar $out/lib/gdx-liftoff-${version}.jar"\
${lib.optionalString stdenv.hostPlatform.isLinux "--prefix LD_LIBRARY_PATH : ${runtimeDependencies}"}
runHook postInstall
'';
}

View file

@ -0,0 +1,36 @@
{
lib,
stdenv,
fetchFromGitHub,
cmake,
doxygen,
}:
stdenv.mkDerivation rec {
pname = "h3";
version = "4.3.0";
src = fetchFromGitHub {
owner = "uber";
repo = "h3";
rev = "v${version}";
hash = "sha256-DUILKZ1QvML6qg+WdOxir6zRsgTvk+En6yjeFf6MQBg=";
};
nativeBuildInputs = [
cmake
doxygen
];
cmakeFlags = [
"-DBUILD_SHARED_LIBS=ON"
"-DBUILD_TESTING=OFF"
];
meta = with lib; {
homepage = "https://github.com/uber/h3";
description = "Hexagonal hierarchical geospatial indexing system";
license = licenses.asl20;
maintainers = [];
platforms = platforms.all;
};
}

View file

@ -0,0 +1,39 @@
{
lib,
fetchurl,
appimageTools,
}: let
pname = "mapillary-uploader";
version = "4.7.2";
src = fetchurl {
url = "http://tools.mapillary.com/uploader/download/linux/${version}";
name = "mapillary-uploader.AppImage";
sha256 = "sha256-hpWdfeuhYylO+SFD3BsKI0s/xtObCDd5OcuJ6i/aEuI=";
};
appimageContents = appimageTools.extractType2 {
inherit pname version src;
};
in
appimageTools.wrapType2 {
inherit pname version src;
extraInstallCommands = ''
# Install desktop file
install -Dm644 ${appimageContents}/mapillary-desktop-uploader.desktop $out/share/applications/mapillary-uploader.desktop
# Fix desktop file paths
substituteInPlace $out/share/applications/mapillary-uploader.desktop \
--replace 'Exec=AppRun' 'Exec=${pname}'
'';
meta = with lib; {
description = "Mapillary Desktop Uploader - Upload street-level imagery to Mapillary";
homepage = "https://www.mapillary.com/";
license = licenses.unfree; # Mapillary's license terms
maintainers = [];
platforms = ["x86_64-linux"];
sourceProvenance = with sourceTypes; [binaryNativeCode];
};
}

View file

@ -0,0 +1,46 @@
# not working yet
{
pkgs,
rustPlatform,
fetchFromGitHub,
...
}: let
version = "1.5.3";
repo = fetchFromGitHub {
owner = "IntQuant";
repo = "noita_entangled_worlds";
rev = "v${version}";
hash = "sha256-frrpD0aWTeDbZYtp15R+quUUAZf7OvHlbSLtGJJtAqk=";
};
in
rustPlatform.buildRustPackage {
name = "noita-proxy-${version}";
src = repo + "/noita-proxy";
prePatch = ''
substituteInPlace Cargo.toml \
--replace "path = \"../shared\"" "path = \"${repo + "/shared"}\""
'';
nativeBuildInputs = with pkgs; [
pkg-config
python3
cmake
];
buildInputs = with pkgs; [
openssl
openssl.dev
libpulseaudio
libjack2
alsa-lib
xorg.libxcb
xorg.libxcb.dev
libopus
];
propagatedBuildInputs = with pkgs; [
steamworks-sdk-redist
];
runtimeDependencies = with pkgs; [
steamworks-sdk-redist
];
doCheck = false;
cargoHash = "sha256-TzUS6d6PopgGf2i1yVaXaXdzNrvfSz+Gv67BAtxYmb4=";
}

View file

@ -0,0 +1,105 @@
{
lib,
fetchFromGitLab,
buildPythonPackage,
flit-core,
flask,
pillow,
requests,
python-dotenv,
authlib,
sentry-sdk,
python-dateutil,
dateparser,
croniter,
pydantic,
flask-cors,
flask-compress,
flask-babel,
flasgger,
yoyo-migrations,
psycopg,
psycopg-pool,
tzdata,
email-validator,
pydantic-extra-types,
python-multipart,
fs,
fs-s3fs,
geopic-tag-reader,
pygeofilter,
pygeoif,
rfeed,
geojson-pydantic,
...
}: let
pname = "geovisio";
version = "2.10.0";
repo = fetchFromGitLab {
owner = "panoramax";
repo = "server/api";
rev = version;
hash = "sha256-kCLcrOe7jJdIfmWWOmxQ5dOj8ZG2B7s0qFpHXs02B/E=";
};
in
buildPythonPackage {
inherit pname version;
pyproject = true;
src = repo;
build-system = [
flit-core
];
dependencies = [
flask
pillow
requests
python-dotenv
authlib
sentry-sdk
python-dateutil
dateparser
croniter
pydantic
flask-cors
flask-compress
flask-babel
flasgger
yoyo-migrations
psycopg
psycopg-pool
tzdata
email-validator
pydantic-extra-types
python-multipart
fs
fs-s3fs
geopic-tag-reader
pygeofilter
pygeoif
rfeed
geojson-pydantic
# Missing from nixpkgs - may need custom packages:
# flask-executor
];
# Skip tests as they may require network access or specific setup
doCheck = false;
# Disable runtime dependencies check as many dependencies are not available in nixpkgs
dontCheckRuntimeDeps = true;
# Disable imports check as many dependencies are not available in nixpkgs
pythonImportsCheck = [];
meta = with lib; {
description = "Panoramax API client and tools for street-level imagery platform";
homepage = "https://gitlab.com/panoramax/server/api";
license = licenses.mit;
maintainers = [];
platforms = platforms.all;
};
}

View file

@ -0,0 +1,33 @@
{
fetchurl,
appimageTools,
writeShellScript,
}: let
pname = "prostudiomasters";
version = "2.5.6";
src = fetchurl {
url = "https://download.prostudiomasters.com/linux/ProStudioMasters-${version}.AppImage";
hash = "sha256-7owOwdcucFfl+JsVj+Seau2KOz0J4P/ep7WrBSNSmbs=";
};
# Create the base AppImage wrapper
baseApp = appimageTools.wrapType2 {
inherit pname version src;
};
# Create a wrapper script that automatically adds the --in-process-gpu flag
wrapper = writeShellScript "prostudiomasters-wrapper" ''
exec ${baseApp}/bin/prostudiomasters --in-process-gpu "$@"
'';
in
# Override the base app to use our wrapper script
baseApp.overrideAttrs (oldAttrs: {
buildCommand =
oldAttrs.buildCommand
+ ''
# Replace the original binary with our wrapper
rm $out/bin/prostudiomasters
cp ${wrapper} $out/bin/prostudiomasters
chmod +x $out/bin/prostudiomasters
'';
})

View file

@ -0,0 +1,18 @@
{...}: {
nixpkgs.overlays = [
(final: prev: {
python3 = prev.python3.override {
packageOverrides = pythonPrev: pythonFinal: {
h3 = pythonPrev.callPackage ./h3.nix {h3 = final.h3;};
pygeofilter = pythonPrev.callPackage ./pygeofilter.nix {};
pygeoif = pythonPrev.callPackage ./pygeoif.nix {};
rfeed = pythonPrev.callPackage ./rfeed.nix {};
pyexiv2 = pythonPrev.callPackage ./pyexiv2.nix {};
geojson-pydantic = pythonPrev.callPackage ./geojson-pydantic.nix {};
geopic-tag-reader = pythonPrev.callPackage ./geopic-tag-reader.nix {};
};
};
python3Packages = final.python3.pkgs;
})
];
}

View file

@ -0,0 +1,48 @@
{
lib,
fetchPypi,
buildPythonPackage,
flit-core,
pydantic,
geojson,
...
}: let
pname = "geojson_pydantic";
version = "2.0.0";
in
buildPythonPackage {
inherit pname version;
pyproject = true;
src = fetchPypi {
inherit pname version;
hash = "sha256-ti6LRFAt0a1Ri19zkDWoGSSnb5gMvbOk6JFu+RO+JC4=";
};
build-system = [
flit-core
];
dependencies = [
pydantic
geojson
];
# Skip tests as they may require specific setup
doCheck = false;
# Disable runtime dependencies check
dontCheckRuntimeDeps = true;
# Basic imports check
pythonImportsCheck = ["geojson_pydantic"];
meta = with lib; {
description = "Pydantic models for GeoJSON objects";
homepage = "https://github.com/developmentseed/geojson-pydantic";
license = licenses.mit;
maintainers = [];
platforms = platforms.all;
};
}

View file

@ -0,0 +1,70 @@
{
lib,
fetchFromGitLab,
buildPythonPackage,
flit-core,
typer,
xmltodict,
timezonefinder,
pytz,
types-pytz,
types-python-dateutil,
rtree,
python-dateutil,
pyexiv2,
...
}: let
pname = "geopic-tag-reader";
version = "1.8.0";
in
buildPythonPackage {
inherit pname version;
pyproject = true;
src = fetchFromGitLab {
owner = "panoramax";
repo = "server/geo-picture-tag-reader";
rev = version;
sha256 = "0lzf5xxxcdqmq28bpvgpkxf5jxmh2nawwa4rl4yg04bdsi16rf1j";
};
build-system = [
flit-core
];
dependencies = [
typer
xmltodict
pyexiv2
timezonefinder
pytz
types-pytz
types-python-dateutil
rtree
];
optional-dependencies = {
write-exif = [
python-dateutil
types-python-dateutil
];
};
# Skip tests as they may require network access or specific setup
doCheck = false;
# Disable runtime dependencies check as some dependencies might have issues
dontCheckRuntimeDeps = true;
# Disable imports check initially to avoid dependency issues
pythonImportsCheck = [];
meta = with lib; {
description = "GeoPic Tag Reader - Python library to read and write standardized metadata from geolocated pictures EXIF metadata";
homepage = "https://gitlab.com/panoramax/server/geo-picture-tag-reader";
license = licenses.mit;
maintainers = [];
platforms = platforms.all;
};
}

View file

@ -0,0 +1,81 @@
{
autoPatchelfHook,
buildPythonPackage,
cmake,
cython,
fetchFromGitHub,
h3,
lib,
ninja,
numpy,
pytestCheckHook,
pytest-cov-stub,
scikit-build-core,
stdenv,
}:
buildPythonPackage rec {
pname = "h3";
version = "4.3.1";
pyproject = true;
# pypi version does not include tests
src = fetchFromGitHub {
owner = "uber";
repo = "h3-py";
tag = "v${version}";
hash = "sha256-zt7zbBgSp2P9q7mObZeQZpW9Szip62dAYdPZ2cGTmi4=";
};
dontConfigure = true;
nativeCheckInputs = [
pytestCheckHook
pytest-cov-stub
];
build-system =
[
scikit-build-core
cmake
cython
ninja
]
++ lib.optionals stdenv.hostPlatform.isLinux [
# On Linux the .so files ends up referring to libh3.so instead of the full
# Nix store path. I'm not sure why this is happening! On Darwin it works
# fine.
autoPatchelfHook
];
# This is not needed per-se, it's only added for autoPatchelfHook to work
# correctly. See the note above ^^
buildInputs = lib.optionals stdenv.hostPlatform.isLinux [h3];
dependencies = [numpy];
# The following prePatch replaces the h3lib compilation with using the h3 packaged in nixpkgs.
#
# - Remove the h3lib submodule.
# - Patch CMakeLists to avoid building h3lib, and use h3 instead.
prePatch = let
cmakeCommands = ''
include_directories(${lib.getDev h3}/include/h3)
link_directories(${h3}/lib)
'';
in ''
rm -r src/h3lib
substituteInPlace CMakeLists.txt \
--replace-fail "add_subdirectory(src/h3lib)" "${cmakeCommands}" \
--replace-fail "\''${CMAKE_CURRENT_BINARY_DIR}/src/h3lib/src/h3lib/include/h3api.h" "${lib.getDev h3}/include/h3/h3api.h"
'';
# Extra check to make sure we can import it from Python
pythonImportsCheck = ["h3"];
meta = {
homepage = "https://github.com/uber/h3-py";
description = "Hierarchical hexagonal geospatial indexing system";
license = lib.licenses.asl20;
maintainers = [lib.maintainers.kalbasit];
};
}

View file

@ -0,0 +1,49 @@
{
lib,
fetchFromGitHub,
buildPythonPackage,
exiv2,
boost,
pybind11,
setuptools,
...
}: let
pname = "pyexiv2";
version = "2.15.3";
in
buildPythonPackage {
inherit pname version;
pyproject = true;
build-system = [setuptools];
src = fetchFromGitHub {
owner = "LeoHsiao1";
repo = "pyexiv2";
rev = "v${version}";
sha256 = "sha256-83bFMaoXncvhRJNcCgkkC7B29wR5pjuLO/EdkQdqxxo=";
};
buildInputs = [
exiv2
boost
];
nativeBuildInputs = [
pybind11
];
# Skip tests as they may require specific test images
doCheck = false;
# Disable runtime dependencies check initially
dontCheckRuntimeDeps = true;
meta = with lib; {
description = "Python binding to the library exiv2";
homepage = "https://github.com/LeoHsiao1/pyexiv2";
license = licenses.gpl3Plus;
maintainers = [];
platforms = platforms.linux;
};
}

View file

@ -0,0 +1,52 @@
{
lib,
fetchPypi,
buildPythonPackage,
setuptools,
wheel,
lark,
python-dateutil,
shapely,
...
}: let
pname = "pygeofilter";
version = "0.3.1";
in
buildPythonPackage {
inherit pname version;
pyproject = true;
src = fetchPypi {
inherit pname version;
hash = "sha256-+SvAYiCZ+H/os23nq92GBZ1hWontYIInNwgiI6V44VA=";
};
build-system = [
setuptools
wheel
];
dependencies = [
lark
python-dateutil
shapely
];
# Skip tests as they may require specific setup
doCheck = false;
# Disable runtime dependencies check
dontCheckRuntimeDeps = true;
# Basic imports check
pythonImportsCheck = ["pygeofilter"];
meta = with lib; {
description = "A pure Python parser implementation of OGC filtering standards";
homepage = "https://github.com/geopython/pygeofilter";
license = licenses.mit;
maintainers = [];
platforms = platforms.all;
};
}

View file

@ -0,0 +1,48 @@
{
lib,
fetchPypi,
buildPythonPackage,
setuptools,
wheel,
typing-extensions,
...
}: let
pname = "pygeoif";
version = "1.5.1";
in
buildPythonPackage {
inherit pname version;
pyproject = true;
src = fetchPypi {
inherit pname version;
hash = "sha256-8nprah7Lh66swrUbzFnKeb5w7RKgEE3oYBR4shPdXYE=";
};
build-system = [
setuptools
wheel
];
dependencies = [
typing-extensions
];
# Skip tests as they may require specific setup
doCheck = false;
# Disable runtime dependencies check
dontCheckRuntimeDeps = true;
# Basic imports check
pythonImportsCheck = ["pygeoif"];
meta = with lib; {
description = "A basic implementation of the __geo_interface__";
homepage = "https://github.com/cleder/pygeoif";
license = licenses.lgpl21Plus;
maintainers = [];
platforms = platforms.all;
};
}

View file

@ -0,0 +1,40 @@
{
lib,
fetchPypi,
buildPythonPackage,
setuptools,
python-dateutil,
}:
buildPythonPackage rec {
pname = "rfeed";
version = "1.1.1";
pyproject = true;
src = fetchPypi {
inherit pname version;
hash = "sha256-qpUG8oZrdPWjItOUoUpjwZpoJcLZR1X/GdRt0eJDSBk=";
};
build-system = [
setuptools
];
dependencies = [
python-dateutil
];
# No tests available in the package
doCheck = false;
pythonImportsCheck = [
"rfeed"
];
meta = with lib; {
description = "RSS feed generation library for Python";
homepage = "https://pypi.org/project/rfeed/";
license = licenses.mit;
maintainers = [];
platforms = platforms.all;
};
}

View file

@ -0,0 +1,65 @@
{
lib,
python3Packages,
fetchFromGitHub,
pkg-config,
libjpeg_turbo,
exiftran ? libjpeg_turbo,
}:
python3Packages.buildPythonPackage {
pname = "sgblur";
version = "1.0.0";
pyproject = true;
src = fetchFromGitHub {
owner = "cquest";
repo = "sgblur";
rev = "master";
hash = "sha256-17wpif2sa021kaa1pbkry4l1967la1qd7knhngvxblrvd7jqqz4y=";
};
nativeBuildInputs = [
pkg-config
];
buildInputs = [
libjpeg_turbo
exiftran
];
build-system = with python3Packages; [
setuptools
wheel
];
dependencies = with python3Packages; [
# Core dependencies from pyproject.toml
ultralytics
# pyturbojpeg # May need special handling
pillow
# uuid # Built into Python
# exifread
python-multipart
fastapi
uvicorn
requests
# piexif
pydantic-settings
pydantic
];
# Skip tests as they may require GPU or specific setup
doCheck = false;
# The package may have import issues due to system dependencies
pythonImportsCheck = [];
meta = with lib; {
description = "Panoramax Speedy Gonzales Blurring Algorithm - AI-powered face and license plate blurring API";
homepage = "https://github.com/cquest/sgblur";
license = licenses.mit;
maintainers = [];
platforms = platforms.unix;
};
}

View file

@ -0,0 +1,18 @@
{
buildGoModule,
fetchFromGitHub,
...
}:
buildGoModule rec {
pname = "webtoon-dl";
version = "0.0.10";
src = fetchFromGitHub {
owner = "robinovitch61";
repo = "webtoon-dl";
rev = "v${version}";
hash = "sha256-geVb3LFPZxPQYARZnaqOr5sgaN6mqkEX5ZiLvg8mF5k=";
};
vendorHash = "sha256-NTqUygJ6b6kTnLUnJqxCo/URzaRouPLACEPi2Ob1s9w=";
}

View file

@ -0,0 +1,8 @@
# this folder container modules that are for darwin only
{...}: {
imports = [
./home-manager
./users.nix
./system.nix
];
}

View file

@ -0,0 +1,2 @@
# modules in this folder are to adapt home-manager modules configs to darwin-module configs
{...}: {}

View file

@ -0,0 +1,27 @@
{self, ...}: {
system.configurationRevision = self.rev or self.dirtyRev or null;
nix = {
gc = {
automatic = true;
interval = [
{
Hour = 4;
Minute = 15;
Weekday = 7;
}
];
options = "--delete-older-than 7d";
};
optimise = {
automatic = true;
interval = [
{
Hour = 4;
Minute = 15;
Weekday = 7;
}
];
};
};
}

View file

@ -0,0 +1,16 @@
{
lib,
config,
...
}: let
host = config.host;
in {
users = {
users = {
leyla = {
name = lib.mkForce host.users.leyla.name;
home = lib.mkForce "/home/${host.users.leyla.name}";
};
};
};
}

View file

@ -0,0 +1,13 @@
# this folder container modules that are for home manager only
{...}: {
imports = [
./sops.nix
./user.nix
./flipperzero.nix
./i18n.nix
./impermanence.nix
./openssh.nix
./gnome.nix
./programs
];
}

Some files were not shown because too many files have changed in this diff Show more