diff options
author | Gregor Kleen <gkleen@yggdrasil.li> | 2024-08-08 10:45:09 +0200 |
---|---|---|
committer | Gregor Kleen <gkleen@yggdrasil.li> | 2024-08-08 10:45:09 +0200 |
commit | 63adb41f1a060c21a68143eb9e86c2790ef66f36 (patch) | |
tree | 3902b85e7659fd396ded1d2e42ea318153d08a13 | |
parent | 73b08cbd76d4471c9a6fddd05265d7d7fc4c45ff (diff) | |
download | nixos-63adb41f1a060c21a68143eb9e86c2790ef66f36.tar nixos-63adb41f1a060c21a68143eb9e86c2790ef66f36.tar.gz nixos-63adb41f1a060c21a68143eb9e86c2790ef66f36.tar.bz2 nixos-63adb41f1a060c21a68143eb9e86c2790ef66f36.tar.xz nixos-63adb41f1a060c21a68143eb9e86c2790ef66f36.zip |
...
40 files changed, 431 insertions, 765 deletions
@@ -0,0 +1 @@ | |||
use flake | |||
@@ -3,6 +3,7 @@ | |||
3 | **/#*# | 3 | **/#*# |
4 | **/.#* | 4 | **/.#* |
5 | **/.gup | 5 | **/.gup |
6 | .direnv | ||
6 | 7 | ||
7 | **.csr | 8 | **.csr |
8 | hosts/*/prometheus/tls.cnf \ No newline at end of file | 9 | hosts/*/prometheus/tls.cnf \ No newline at end of file |
diff --git a/_sources/generated.json b/_sources/generated.json index f1082af1..87d6c357 100644 --- a/_sources/generated.json +++ b/_sources/generated.json | |||
@@ -15,6 +15,7 @@ | |||
15 | "repo": "afew", | 15 | "repo": "afew", |
16 | "rev": "8ef9a5b73e5d1063cf912c70027c655fb19d1109", | 16 | "rev": "8ef9a5b73e5d1063cf912c70027c655fb19d1109", |
17 | "sha256": "sha256-Wdvack+oAq88a9E6i+OcMlSNStv4dWsZstHgLao0c9g=", | 17 | "sha256": "sha256-Wdvack+oAq88a9E6i+OcMlSNStv4dWsZstHgLao0c9g=", |
18 | "sparseCheckout": [], | ||
18 | "type": "github" | 19 | "type": "github" |
19 | }, | 20 | }, |
20 | "version": "8ef9a5b73e5d1063cf912c70027c655fb19d1109" | 21 | "version": "8ef9a5b73e5d1063cf912c70027c655fb19d1109" |
@@ -49,6 +50,7 @@ | |||
49 | "repo": "bpf-examples", | 50 | "repo": "bpf-examples", |
50 | "rev": "5343ed3377471c7b7ef2237526c8bdc0f00a0cef", | 51 | "rev": "5343ed3377471c7b7ef2237526c8bdc0f00a0cef", |
51 | "sha256": "sha256-vKVI8pQ17BNWLKm8wwpyNkLslnB9E2CAZTS6EP5lDT0=", | 52 | "sha256": "sha256-vKVI8pQ17BNWLKm8wwpyNkLslnB9E2CAZTS6EP5lDT0=", |
53 | "sparseCheckout": [], | ||
52 | "type": "github" | 54 | "type": "github" |
53 | }, | 55 | }, |
54 | "version": "5343ed3377471c7b7ef2237526c8bdc0f00a0cef" | 56 | "version": "5343ed3377471c7b7ef2237526c8bdc0f00a0cef" |
@@ -69,6 +71,7 @@ | |||
69 | "repo": "scratch.el", | 71 | "repo": "scratch.el", |
70 | "rev": "0077334cc299aa7885f804d88f52cdb1b35caf71", | 72 | "rev": "0077334cc299aa7885f804d88f52cdb1b35caf71", |
71 | "sha256": "sha256-FUkKJ+1COGzgllzzv51yUIjMZI6slOFVExdwWl2ZEBA=", | 73 | "sha256": "sha256-FUkKJ+1COGzgllzzv51yUIjMZI6slOFVExdwWl2ZEBA=", |
74 | "sparseCheckout": [], | ||
72 | "type": "github" | 75 | "type": "github" |
73 | }, | 76 | }, |
74 | "version": "0077334cc299aa7885f804d88f52cdb1b35caf71" | 77 | "version": "0077334cc299aa7885f804d88f52cdb1b35caf71" |
@@ -101,6 +104,7 @@ | |||
101 | "name": null, | 104 | "name": null, |
102 | "rev": "744c3ee61d2f0a8e9bb4e308dec6897215ae4704", | 105 | "rev": "744c3ee61d2f0a8e9bb4e308dec6897215ae4704", |
103 | "sha256": "sha256-yxA8wgzdS7SyKLoNTWN87ShsBfPKUflbOu4Y0jS2G3I=", | 106 | "sha256": "sha256-yxA8wgzdS7SyKLoNTWN87ShsBfPKUflbOu4Y0jS2G3I=", |
107 | "sparseCheckout": [], | ||
104 | "type": "git", | 108 | "type": "git", |
105 | "url": "https://gist.github.com/2f71a97fb85ed42146f6d9f522bc34ef.git" | 109 | "url": "https://gist.github.com/2f71a97fb85ed42146f6d9f522bc34ef.git" |
106 | }, | 110 | }, |
@@ -122,6 +126,7 @@ | |||
122 | "repo": "chapterskip", | 126 | "repo": "chapterskip", |
123 | "rev": "b26825316e3329882206ae78dc903ebc4613f039", | 127 | "rev": "b26825316e3329882206ae78dc903ebc4613f039", |
124 | "sha256": "sha256-OTrLQE3rYvPQamEX23D6HttNjx3vafWdTMxTiWpDy90=", | 128 | "sha256": "sha256-OTrLQE3rYvPQamEX23D6HttNjx3vafWdTMxTiWpDy90=", |
129 | "sparseCheckout": [], | ||
125 | "type": "github" | 130 | "type": "github" |
126 | }, | 131 | }, |
127 | "version": "b26825316e3329882206ae78dc903ebc4613f039" | 132 | "version": "b26825316e3329882206ae78dc903ebc4613f039" |
@@ -142,6 +147,7 @@ | |||
142 | "repo": "mpv-createchapter", | 147 | "repo": "mpv-createchapter", |
143 | "rev": "8dd33e2debbcb963a195ec1371e02c85b49e7faa", | 148 | "rev": "8dd33e2debbcb963a195ec1371e02c85b49e7faa", |
144 | "sha256": "sha256-rPtG7mgf7tOY8Ih4Bz1tpd4MwXOxJmngjY+s70zWX+g=", | 149 | "sha256": "sha256-rPtG7mgf7tOY8Ih4Bz1tpd4MwXOxJmngjY+s70zWX+g=", |
150 | "sparseCheckout": [], | ||
145 | "type": "github" | 151 | "type": "github" |
146 | }, | 152 | }, |
147 | "version": "8dd33e2debbcb963a195ec1371e02c85b49e7faa" | 153 | "version": "8dd33e2debbcb963a195ec1371e02c85b49e7faa" |
@@ -162,6 +168,7 @@ | |||
162 | "repo": "mpv-mpris", | 168 | "repo": "mpv-mpris", |
163 | "rev": "1.1", | 169 | "rev": "1.1", |
164 | "sha256": "sha256-vZIO6ILatIWa9nJYOp4AMKwvaZLahqYWRLMDOizyBI0=", | 170 | "sha256": "sha256-vZIO6ILatIWa9nJYOp4AMKwvaZLahqYWRLMDOizyBI0=", |
171 | "sparseCheckout": [], | ||
165 | "type": "github" | 172 | "type": "github" |
166 | }, | 173 | }, |
167 | "version": "1.1" | 174 | "version": "1.1" |
@@ -182,6 +189,7 @@ | |||
182 | "repo": "mpv-reload", | 189 | "repo": "mpv-reload", |
183 | "rev": "1a6a9383ba1774708fddbd976e7a9b72c3eec938", | 190 | "rev": "1a6a9383ba1774708fddbd976e7a9b72c3eec938", |
184 | "sha256": "sha256-BshxCjec/UNGyiC0/g1Rai2NvG2qOIHXDDEUYwwdij0=", | 191 | "sha256": "sha256-BshxCjec/UNGyiC0/g1Rai2NvG2qOIHXDDEUYwwdij0=", |
192 | "sparseCheckout": [], | ||
185 | "type": "github" | 193 | "type": "github" |
186 | }, | 194 | }, |
187 | "version": "1a6a9383ba1774708fddbd976e7a9b72c3eec938" | 195 | "version": "1a6a9383ba1774708fddbd976e7a9b72c3eec938" |
@@ -200,6 +208,7 @@ | |||
200 | "name": null, | 208 | "name": null, |
201 | "rev": "a5864aa2ee849c372964809842c2b1db3d0c20ea", | 209 | "rev": "a5864aa2ee849c372964809842c2b1db3d0c20ea", |
202 | "sha256": "sha256-NKiQfx0WuDySXRR9I6FKcuzyIz3gVWXcaQgaEvyepT8=", | 210 | "sha256": "sha256-NKiQfx0WuDySXRR9I6FKcuzyIz3gVWXcaQgaEvyepT8=", |
211 | "sparseCheckout": [], | ||
203 | "type": "git", | 212 | "type": "git", |
204 | "url": "https://github.com/CogentRedTester/mpv-sub-select" | 213 | "url": "https://github.com/CogentRedTester/mpv-sub-select" |
205 | }, | 214 | }, |
@@ -219,6 +228,7 @@ | |||
219 | "name": null, | 228 | "name": null, |
220 | "rev": "1f8c31457459ffc28cd1c3f3c2235a53efad7148", | 229 | "rev": "1f8c31457459ffc28cd1c3f3c2235a53efad7148", |
221 | "sha256": "sha256-voNP8tCwCv8QnAZOPC9gqHRV/7jgCAE63VKBd/1s5ic=", | 230 | "sha256": "sha256-voNP8tCwCv8QnAZOPC9gqHRV/7jgCAE63VKBd/1s5ic=", |
231 | "sparseCheckout": [], | ||
222 | "type": "git", | 232 | "type": "git", |
223 | "url": "https://github.com/jgreco/mpv-youtube-quality" | 233 | "url": "https://github.com/jgreco/mpv-youtube-quality" |
224 | }, | 234 | }, |
@@ -280,6 +290,7 @@ | |||
280 | "name": null, | 290 | "name": null, |
281 | "rev": "330cb9da36651b701085ad53ae75ff296d02202a", | 291 | "rev": "330cb9da36651b701085ad53ae75ff296d02202a", |
282 | "sha256": "sha256-S0+sZ5vTywTU/HNRWt+MQhMO9uea+NvwwwdYJEdRmEw=", | 292 | "sha256": "sha256-S0+sZ5vTywTU/HNRWt+MQhMO9uea+NvwwwdYJEdRmEw=", |
293 | "sparseCheckout": [], | ||
283 | "type": "git", | 294 | "type": "git", |
284 | "url": "https://gitlab.com/depesz/Versioning" | 295 | "url": "https://gitlab.com/depesz/Versioning" |
285 | }, | 296 | }, |
@@ -329,6 +340,7 @@ | |||
329 | "repo": "v4l2loopback", | 340 | "repo": "v4l2loopback", |
330 | "rev": "2d44c2f3a33844dfd9928dc536288283289bbc34", | 341 | "rev": "2d44c2f3a33844dfd9928dc536288283289bbc34", |
331 | "sha256": "sha256-6YWF1zM9glDTnJNVxlNWWqqkD0Z6sNscOoGTJsU6iCQ=", | 342 | "sha256": "sha256-6YWF1zM9glDTnJNVxlNWWqqkD0Z6sNscOoGTJsU6iCQ=", |
343 | "sparseCheckout": [], | ||
332 | "type": "github" | 344 | "type": "github" |
333 | }, | 345 | }, |
334 | "version": "2d44c2f3a33844dfd9928dc536288283289bbc34" | 346 | "version": "2d44c2f3a33844dfd9928dc536288283289bbc34" |
@@ -349,6 +361,7 @@ | |||
349 | "repo": "xcompose", | 361 | "repo": "xcompose", |
350 | "rev": "cd8d3e622f547ec9f83d7f64f51d4a27ee812681", | 362 | "rev": "cd8d3e622f547ec9f83d7f64f51d4a27ee812681", |
351 | "sha256": "sha256-fkl2lDv/DdrqPjVsEUKSRD3BNGwTjTsA0ovI8akFI6U=", | 363 | "sha256": "sha256-fkl2lDv/DdrqPjVsEUKSRD3BNGwTjTsA0ovI8akFI6U=", |
364 | "sparseCheckout": [], | ||
352 | "type": "github" | 365 | "type": "github" |
353 | }, | 366 | }, |
354 | "version": "cd8d3e622f547ec9f83d7f64f51d4a27ee812681" | 367 | "version": "cd8d3e622f547ec9f83d7f64f51d4a27ee812681" |
diff --git a/_sources/generated.nix b/_sources/generated.nix index 177fac06..cb6022ab 100644 --- a/_sources/generated.nix +++ b/_sources/generated.nix | |||
@@ -11,6 +11,7 @@ | |||
11 | fetchSubmodules = false; | 11 | fetchSubmodules = false; |
12 | deepClone = false; | 12 | deepClone = false; |
13 | leaveDotGit = true; | 13 | leaveDotGit = true; |
14 | sparseCheckout = [ ]; | ||
14 | sha256 = "sha256-Wdvack+oAq88a9E6i+OcMlSNStv4dWsZstHgLao0c9g="; | 15 | sha256 = "sha256-Wdvack+oAq88a9E6i+OcMlSNStv4dWsZstHgLao0c9g="; |
15 | }; | 16 | }; |
16 | date = "2021-05-30"; | 17 | date = "2021-05-30"; |
@@ -64,6 +65,7 @@ | |||
64 | fetchSubmodules = false; | 65 | fetchSubmodules = false; |
65 | deepClone = false; | 66 | deepClone = false; |
66 | leaveDotGit = false; | 67 | leaveDotGit = false; |
68 | sparseCheckout = [ ]; | ||
67 | sha256 = "sha256-yxA8wgzdS7SyKLoNTWN87ShsBfPKUflbOu4Y0jS2G3I="; | 69 | sha256 = "sha256-yxA8wgzdS7SyKLoNTWN87ShsBfPKUflbOu4Y0jS2G3I="; |
68 | }; | 70 | }; |
69 | date = "2020-10-22"; | 71 | date = "2020-10-22"; |
@@ -124,6 +126,7 @@ | |||
124 | fetchSubmodules = false; | 126 | fetchSubmodules = false; |
125 | deepClone = false; | 127 | deepClone = false; |
126 | leaveDotGit = false; | 128 | leaveDotGit = false; |
129 | sparseCheckout = [ ]; | ||
127 | sha256 = "sha256-NKiQfx0WuDySXRR9I6FKcuzyIz3gVWXcaQgaEvyepT8="; | 130 | sha256 = "sha256-NKiQfx0WuDySXRR9I6FKcuzyIz3gVWXcaQgaEvyepT8="; |
128 | }; | 131 | }; |
129 | date = "2024-05-15"; | 132 | date = "2024-05-15"; |
@@ -137,6 +140,7 @@ | |||
137 | fetchSubmodules = false; | 140 | fetchSubmodules = false; |
138 | deepClone = false; | 141 | deepClone = false; |
139 | leaveDotGit = false; | 142 | leaveDotGit = false; |
143 | sparseCheckout = [ ]; | ||
140 | sha256 = "sha256-voNP8tCwCv8QnAZOPC9gqHRV/7jgCAE63VKBd/1s5ic="; | 144 | sha256 = "sha256-voNP8tCwCv8QnAZOPC9gqHRV/7jgCAE63VKBd/1s5ic="; |
141 | }; | 145 | }; |
142 | date = "2020-02-10"; | 146 | date = "2020-02-10"; |
@@ -174,6 +178,7 @@ | |||
174 | fetchSubmodules = false; | 178 | fetchSubmodules = false; |
175 | deepClone = false; | 179 | deepClone = false; |
176 | leaveDotGit = false; | 180 | leaveDotGit = false; |
181 | sparseCheckout = [ ]; | ||
177 | sha256 = "sha256-S0+sZ5vTywTU/HNRWt+MQhMO9uea+NvwwwdYJEdRmEw="; | 182 | sha256 = "sha256-S0+sZ5vTywTU/HNRWt+MQhMO9uea+NvwwwdYJEdRmEw="; |
178 | }; | 183 | }; |
179 | date = "2023-11-23"; | 184 | date = "2023-11-23"; |
diff --git a/accounts/gkleen@sif/default.nix b/accounts/gkleen@sif/default.nix index 2ecaf0da..2e7a25c9 100644 --- a/accounts/gkleen@sif/default.nix +++ b/accounts/gkleen@sif/default.nix | |||
@@ -97,6 +97,7 @@ in { | |||
97 | home-manager.users.${userName} = { | 97 | home-manager.users.${userName} = { |
98 | imports = [ | 98 | imports = [ |
99 | flakeInputs.nix-index-database.hmModules.nix-index | 99 | flakeInputs.nix-index-database.hmModules.nix-index |
100 | flakeInputs.impermanence.nixosModules.home-manager.impermanence | ||
100 | ]; | 101 | ]; |
101 | 102 | ||
102 | home.stateVersion = "20.09"; | 103 | home.stateVersion = "20.09"; |
@@ -12,16 +12,16 @@ | |||
12 | "pre-commit-hooks-nix": "pre-commit-hooks-nix" | 12 | "pre-commit-hooks-nix": "pre-commit-hooks-nix" |
13 | }, | 13 | }, |
14 | "locked": { | 14 | "locked": { |
15 | "lastModified": 1701974579, | 15 | "lastModified": 1723023987, |
16 | "narHash": "sha256-Drydx4onJnz5AqjG1clABRHUF4cPmy75zH70AXvs3eQ=", | 16 | "narHash": "sha256-3ffk/waTFYp0yrZ6PdFKSRJF+0z6O51c6XWirjhDXqM=", |
17 | "owner": "gkleen", | 17 | "owner": "gkleen", |
18 | "repo": "backup-utils", | 18 | "repo": "backup-utils", |
19 | "rev": "d094023745980f90828f0390441ff22b51107f3a", | 19 | "rev": "3b70e591eade840a32aea80264050ddc6a92c599", |
20 | "type": "gitlab" | 20 | "type": "gitlab" |
21 | }, | 21 | }, |
22 | "original": { | 22 | "original": { |
23 | "owner": "gkleen", | 23 | "owner": "gkleen", |
24 | "ref": "v0.1.2", | 24 | "ref": "v0.1.3", |
25 | "repo": "backup-utils", | 25 | "repo": "backup-utils", |
26 | "type": "gitlab" | 26 | "type": "gitlab" |
27 | } | 27 | } |
@@ -392,6 +392,22 @@ | |||
392 | "type": "github" | 392 | "type": "github" |
393 | } | 393 | } |
394 | }, | 394 | }, |
395 | "impermanence": { | ||
396 | "locked": { | ||
397 | "lastModified": 1719091691, | ||
398 | "narHash": "sha256-AxaLX5cBEcGtE02PeGsfscSb/fWMnyS7zMWBXQWDKbE=", | ||
399 | "owner": "nix-community", | ||
400 | "repo": "impermanence", | ||
401 | "rev": "23c1f06316b67cb5dabdfe2973da3785cfe9c34a", | ||
402 | "type": "github" | ||
403 | }, | ||
404 | "original": { | ||
405 | "owner": "nix-community", | ||
406 | "ref": "master", | ||
407 | "repo": "impermanence", | ||
408 | "type": "github" | ||
409 | } | ||
410 | }, | ||
395 | "nix-github-actions": { | 411 | "nix-github-actions": { |
396 | "inputs": { | 412 | "inputs": { |
397 | "nixpkgs": [ | 413 | "nixpkgs": [ |
@@ -420,11 +436,11 @@ | |||
420 | ] | 436 | ] |
421 | }, | 437 | }, |
422 | "locked": { | 438 | "locked": { |
423 | "lastModified": 1722136042, | 439 | "lastModified": 1722740924, |
424 | "narHash": "sha256-x3FmT4QSyK28itMiR5zfYhUrG5nY+2dv+AIcKfmSp5A=", | 440 | "narHash": "sha256-UQPgA5d8azLZuDHZMPmvDszhuKF1Ek89SrTRtqsQ4Ss=", |
425 | "owner": "Mic92", | 441 | "owner": "Mic92", |
426 | "repo": "nix-index-database", | 442 | "repo": "nix-index-database", |
427 | "rev": "c0ca47e8523b578464014961059999d8eddd4aae", | 443 | "rev": "97ca0a0fca0391de835f57e44f369a283e37890f", |
428 | "type": "github" | 444 | "type": "github" |
429 | }, | 445 | }, |
430 | "original": { | 446 | "original": { |
@@ -602,11 +618,11 @@ | |||
602 | }, | 618 | }, |
603 | "nixpkgs_2": { | 619 | "nixpkgs_2": { |
604 | "locked": { | 620 | "locked": { |
605 | "lastModified": 1722329972, | 621 | "lastModified": 1722813957, |
606 | "narHash": "sha256-Y1rUW6x+7hSwQxtJk9Xu3QDmcV/AOX3zl3g4N5Lh8nI=", | 622 | "narHash": "sha256-IAoYyYnED7P8zrBFMnmp7ydaJfwTnwcnqxUElC1I26Y=", |
607 | "owner": "nixos", | 623 | "owner": "NixOS", |
608 | "repo": "nixpkgs", | 624 | "repo": "nixpkgs", |
609 | "rev": "cdeee848778cb4e084ab0c50fc83fc3117a69766", | 625 | "rev": "cb9a96f23c491c081b38eab96d22fa958043c9fa", |
610 | "type": "github" | 626 | "type": "github" |
611 | }, | 627 | }, |
612 | "original": { | 628 | "original": { |
@@ -672,11 +688,11 @@ | |||
672 | "treefmt-nix": "treefmt-nix" | 688 | "treefmt-nix": "treefmt-nix" |
673 | }, | 689 | }, |
674 | "locked": { | 690 | "locked": { |
675 | "lastModified": 1722300206, | 691 | "lastModified": 1723013744, |
676 | "narHash": "sha256-lSF96eM7lJPYl2nd63t2zGWIvZEWSf1BOaP1Rf2q9mI=", | 692 | "narHash": "sha256-Ilcm+bME9nUDICcoS47/McfNmbU+xn3ZBUoMjPrwGrU=", |
677 | "owner": "nix-community", | 693 | "owner": "nix-community", |
678 | "repo": "poetry2nix", | 694 | "repo": "poetry2nix", |
679 | "rev": "1dcd9fdca06bf28bdd6eeab0a464f4bc5d643bca", | 695 | "rev": "551cd76c920b9eabed3fb095a4091af7676b31ba", |
680 | "type": "github" | 696 | "type": "github" |
681 | }, | 697 | }, |
682 | "original": { | 698 | "original": { |
@@ -794,6 +810,7 @@ | |||
794 | "flake-utils": "flake-utils_3", | 810 | "flake-utils": "flake-utils_3", |
795 | "home-manager": "home-manager", | 811 | "home-manager": "home-manager", |
796 | "home-manager-eostre": "home-manager-eostre", | 812 | "home-manager-eostre": "home-manager-eostre", |
813 | "impermanence": "impermanence", | ||
797 | "nix-index-database": "nix-index-database", | 814 | "nix-index-database": "nix-index-database", |
798 | "nixos-hardware": "nixos-hardware", | 815 | "nixos-hardware": "nixos-hardware", |
799 | "nixpkgs": "nixpkgs_2", | 816 | "nixpkgs": "nixpkgs_2", |
@@ -816,11 +833,11 @@ | |||
816 | ] | 833 | ] |
817 | }, | 834 | }, |
818 | "locked": { | 835 | "locked": { |
819 | "lastModified": 1722114803, | 836 | "lastModified": 1722897572, |
820 | "narHash": "sha256-s6YhI8UHwQvO4cIFLwl1wZ1eS5Cuuw7ld2VzUchdFP0=", | 837 | "narHash": "sha256-3m/iyyjCdRBF8xyehf59QlckIcmShyTesymSb+N4Ap4=", |
821 | "owner": "Mic92", | 838 | "owner": "Mic92", |
822 | "repo": "sops-nix", | 839 | "repo": "sops-nix", |
823 | "rev": "eb34eb588132d653e4c4925d862f1e5a227cc2ab", | 840 | "rev": "8ae477955dfd9cbf5fa4eb82a8db8ddbb94e79d9", |
824 | "type": "github" | 841 | "type": "github" |
825 | }, | 842 | }, |
826 | "original": { | 843 | "original": { |
@@ -141,7 +141,7 @@ | |||
141 | type = "gitlab"; | 141 | type = "gitlab"; |
142 | owner = "gkleen"; | 142 | owner = "gkleen"; |
143 | repo = "backup-utils"; | 143 | repo = "backup-utils"; |
144 | ref = "v0.1.2"; | 144 | ref = "v0.1.3"; |
145 | inputs = { | 145 | inputs = { |
146 | nixpkgs.follows = "nixpkgs"; | 146 | nixpkgs.follows = "nixpkgs"; |
147 | poetry2nix.follows = "poetry2nix"; | 147 | poetry2nix.follows = "poetry2nix"; |
@@ -163,6 +163,12 @@ | |||
163 | repo = "nixos-hardware"; | 163 | repo = "nixos-hardware"; |
164 | ref = "master"; | 164 | ref = "master"; |
165 | }; | 165 | }; |
166 | impermanence = { | ||
167 | type = "github"; | ||
168 | owner = "nix-community"; | ||
169 | repo = "impermanence"; | ||
170 | ref = "master"; | ||
171 | }; | ||
166 | }; | 172 | }; |
167 | 173 | ||
168 | outputs = { self, nixpkgs, home-manager, sops-nix, deploy-rs, nvfetcher, ... }@inputs: | 174 | outputs = { self, nixpkgs, home-manager, sops-nix, deploy-rs, nvfetcher, ... }@inputs: |
@@ -255,12 +261,12 @@ | |||
255 | // outputs | 261 | // outputs |
256 | // { imports = [self.nixosModules.users.${userName} or ({...}: { imports = defaultUserProfiles userName; })] ++ (outputs.imports or []); }); | 262 | // { imports = [self.nixosModules.users.${userName} or ({...}: { imports = defaultUserProfiles userName; })] ++ (outputs.imports or []); }); |
257 | 263 | ||
258 | # systemsSelector = "x86_64-linux"; | 264 | systemsSelector = "x86_64-linux"; |
259 | # systems = filter (system: !(isNull (builtins.match systemsSelector system))) nixpkgs.lib.systems.flakeExposed; | 265 | systems = filter (system: !(isNull (builtins.match systemsSelector system))) nixpkgs.lib.systems.flakeExposed; |
260 | systems = | 266 | # systems = |
261 | let | 267 | # let |
262 | disallowedSystems = ["armv5tel-linux" "armv6l-linux"]; | 268 | # disallowedSystems = ["armv5tel-linux" "armv6l-linux"]; |
263 | in filter (system: !(elem system disallowedSystems)) nixpkgs.lib.systems.flakeExposed; | 269 | # in filter (system: !(elem system disallowedSystems)) nixpkgs.lib.systems.flakeExposed; |
264 | nixpkgsPackages = localSystem: (makeOverridable (import (nixpkgs.outPath + "/pkgs/top-level"))) { inherit localSystem; }; | 270 | nixpkgsPackages = localSystem: (makeOverridable (import (nixpkgs.outPath + "/pkgs/top-level"))) { inherit localSystem; }; |
265 | forAllSystems = f: mapAttrs f (genAttrs systems nixpkgsPackages); | 271 | forAllSystems = f: mapAttrs f (genAttrs systems nixpkgsPackages); |
266 | forAllUsers = genAttrs (unique (map accountUserName (attrNames self.nixosModules.accounts))); | 272 | forAllUsers = genAttrs (unique (map accountUserName (attrNames self.nixosModules.accounts))); |
diff --git a/hosts/sif/default.nix b/hosts/sif/default.nix index 3525015d..5ed4e05e 100644 --- a/hosts/sif/default.nix +++ b/hosts/sif/default.nix | |||
@@ -16,6 +16,7 @@ in { | |||
16 | tmpfs-root bcachefs initrd-all-crypto-modules default-locale openssh rebuild-machines | 16 | tmpfs-root bcachefs initrd-all-crypto-modules default-locale openssh rebuild-machines |
17 | networkmanager | 17 | networkmanager |
18 | flakeInputs.nixos-hardware.nixosModules.lenovo-thinkpad-p1 | 18 | flakeInputs.nixos-hardware.nixosModules.lenovo-thinkpad-p1 |
19 | flakeInputs.impermanence.nixosModules.impermanence | ||
19 | ]; | 20 | ]; |
20 | 21 | ||
21 | config = { | 22 | config = { |
@@ -555,7 +556,10 @@ in { | |||
555 | # sound.enable = true; | 556 | # sound.enable = true; |
556 | 557 | ||
557 | nix = { | 558 | nix = { |
558 | settings.auto-optimise-store = true; | 559 | settings = { |
560 | auto-optimise-store = true; | ||
561 | max-jobs = 4; | ||
562 | }; | ||
559 | daemonCPUSchedPolicy = "idle"; | 563 | daemonCPUSchedPolicy = "idle"; |
560 | daemonIOSchedClass = "idle"; | 564 | daemonIOSchedClass = "idle"; |
561 | 565 | ||
@@ -569,6 +573,11 @@ in { | |||
569 | speedFactor = 4; | 573 | speedFactor = 4; |
570 | }; | 574 | }; |
571 | }; | 575 | }; |
576 | systemd.services."nix-daemon" = { | ||
577 | serviceConfig = { | ||
578 | CPUQuota = "400%"; | ||
579 | }; | ||
580 | }; | ||
572 | 581 | ||
573 | environment.etc."X11/xorg.conf.d/50-wacom.conf".source = lib.mkForce ./wacom.conf; | 582 | environment.etc."X11/xorg.conf.d/50-wacom.conf".source = lib.mkForce ./wacom.conf; |
574 | 583 | ||
@@ -661,6 +670,26 @@ in { | |||
661 | in [ gtk-portal ]; | 670 | in [ gtk-portal ]; |
662 | }; | 671 | }; |
663 | 672 | ||
673 | environment.persistence."/.bcachefs" = { | ||
674 | hideMounts = true; | ||
675 | directories = [ | ||
676 | "/nix" | ||
677 | "/root" | ||
678 | "/var/log" | ||
679 | "/var/lib/sops-nix" | ||
680 | "/var/lib/nixos" | ||
681 | "/var/lib/systemd" | ||
682 | "/home" | ||
683 | "/var/lib/chrony" | ||
684 | "/var/lib/fprint" | ||
685 | "/var/lib/bluetooth" | ||
686 | "/etc/NetworkManager/system-connections" | ||
687 | ]; | ||
688 | files = [ | ||
689 | "/etc/localtime" | ||
690 | ]; | ||
691 | }; | ||
692 | |||
664 | system.stateVersion = "24.11"; | 693 | system.stateVersion = "24.11"; |
665 | }; | 694 | }; |
666 | } | 695 | } |
diff --git a/hosts/sif/hw.nix b/hosts/sif/hw.nix index 077d25a6..fc20ef7c 100644 --- a/hosts/sif/hw.nix +++ b/hosts/sif/hw.nix | |||
@@ -12,59 +12,11 @@ | |||
12 | fsType = "bcachefs"; | 12 | fsType = "bcachefs"; |
13 | neededForBoot = true; | 13 | neededForBoot = true; |
14 | }; | 14 | }; |
15 | "/nix" = | 15 | "/var/lib/sops-nix".neededForBoot = true; |
16 | { device = "/.bcachefs/nix"; | 16 | "/var/lib/systemd".neededForBoot = true; |
17 | fsType = "none"; | ||
18 | options = [ "bind" ]; # "x-systemd.after=bcachefs.service" "x-systemd.requires=bcachefs.service" "x-systemd.after=\\x2ebcachefs.mount" "x-systemd.requires=\\x2ebcachefs.mount" ]; | ||
19 | }; | ||
20 | "/root" = | ||
21 | { device = "/.bcachefs/root"; | ||
22 | fsType = "none"; | ||
23 | options = [ "bind" ]; # "x-systemd.after=\\x2ebcachefs.mount" "x-systemd.requires=\\x2ebcachefs.mount" ]; | ||
24 | }; | ||
25 | "/var/log" = | ||
26 | { device = "/.bcachefs/var/log"; | ||
27 | fsType = "none"; | ||
28 | options = [ "bind" ]; # "x-systemd.after=bcachefs.service" "x-systemd.requires=bcachefs.service" "x-systemd.after=\\x2ebcachefs.mount" "x-systemd.requires=\\x2ebcachefs.mount" ]; | ||
29 | }; | ||
30 | "/var/lib/sops-nix" = | ||
31 | { device = "/.bcachefs/var/lib/sops-nix"; | ||
32 | fsType = "none"; | ||
33 | options = [ "bind" ]; # "x-systemd.after=bcachefs.service" "x-systemd.requires=bcachefs.service" "x-systemd.after=\\x2ebcachefs.mount" "x-systemd.requires=\\x2ebcachefs.mount" ]; | ||
34 | neededForBoot = true; | ||
35 | }; | ||
36 | "/var/lib/nixos" = | ||
37 | { device = "/.bcachefs/var/lib/nixos"; | ||
38 | fsType = "none"; | ||
39 | options = [ "bind" ]; # "x-systemd.after=bcachefs.service" "x-systemd.requires=bcachefs.service" "x-systemd.after=\\x2ebcachefs.mount" "x-systemd.requires=\\x2ebcachefs.mount" ]; | ||
40 | }; | ||
41 | "/var/lib/chrony" = | ||
42 | { device = "/.bcachefs/var/lib/chrony"; | ||
43 | fsType = "none"; | ||
44 | options = [ "bind" ]; # "x-systemd.after=\\x2ebcachefs.mount" "x-systemd.requires=\\x2ebcachefs.mount" ]; | ||
45 | }; | ||
46 | "/var/lib/fprint" = | ||
47 | { device = "/.bcachefs/var/lib/fprint"; | ||
48 | fsType = "none"; | ||
49 | options = [ "bind" ]; # "x-systemd.after=\\x2ebcachefs.mount" "x-systemd.requires=\\x2ebcachefs.mount" ]; | ||
50 | }; | ||
51 | "/var/lib/systemd" = | ||
52 | { device = "/.bcachefs/var/lib/systemd"; | ||
53 | fsType = "none"; | ||
54 | options = [ "bind" ]; # "x-systemd.after=bcachefs.service" "x-systemd.requires=bcachefs.service" "x-systemd.after=\\x2ebcachefs.mount" "x-systemd.requires=\\x2ebcachefs.mount" ]; | ||
55 | neededForBoot = true; | ||
56 | }; | ||
57 | "/home" = | ||
58 | { device = "/.bcachefs/home"; | ||
59 | fsType = "none"; | ||
60 | options = [ "bind" ]; # "x-systemd.after=\\x2ebcachefs.mount" "x-systemd.requires=\\x2ebcachefs.mount" ]; | ||
61 | }; | ||
62 | "/etc/NetworkManager/system-connections" = | ||
63 | { device = "/.bcachefs/etc/NetworkManager/system-connections"; | ||
64 | fsType = "none"; | ||
65 | options = [ "bind" ]; # "x-systemd.after=\\x2ebcachefs.mount" "x-systemd.requires=\\x2ebcachefs.mount" ]; | ||
66 | }; | ||
67 | }; | 17 | }; |
18 | system.etc.overlay.enable = false; | ||
19 | systemd.sysusers.enable = false; | ||
68 | 20 | ||
69 | # boot.initrd.supportedFilesystems.bcachefs = true; | 21 | # boot.initrd.supportedFilesystems.bcachefs = true; |
70 | # boot.initrd.systemd.units."dev-sif-nvm0:-dev-sif-nvm1.device".enable = false; | 22 | # boot.initrd.systemd.units."dev-sif-nvm0:-dev-sif-nvm1.device".enable = false; |
@@ -91,7 +43,6 @@ | |||
91 | # }; | 43 | # }; |
92 | # }; | 44 | # }; |
93 | 45 | ||
94 | nix.settings.max-jobs = 12; | ||
95 | # High-DPI console | 46 | # High-DPI console |
96 | console.font = "${pkgs.terminus_font}/share/consolefonts/ter-u28n.psf.gz"; | 47 | console.font = "${pkgs.terminus_font}/share/consolefonts/ter-u28n.psf.gz"; |
97 | 48 | ||
diff --git a/hosts/surtr/bifrost/default.nix b/hosts/surtr/bifrost/default.nix index 20cd5892..fbfde757 100644 --- a/hosts/surtr/bifrost/default.nix +++ b/hosts/surtr/bifrost/default.nix | |||
@@ -18,10 +18,8 @@ in { | |||
18 | ListenPort = 51822; | 18 | ListenPort = 51822; |
19 | }; | 19 | }; |
20 | wireguardPeers = [ | 20 | wireguardPeers = [ |
21 | { wireguardPeerConfig = { | 21 | { AllowedIPs = [ "2a03:4000:52:ada:4:1::/96" ]; |
22 | AllowedIPs = [ "2a03:4000:52:ada:4:1::/96" ]; | 22 | PublicKey = trim (readFile ../../vidhar/network/bifrost/vidhar.pub); |
23 | PublicKey = trim (readFile ../../vidhar/network/bifrost/vidhar.pub); | ||
24 | }; | ||
25 | } | 23 | } |
26 | ]; | 24 | ]; |
27 | }; | 25 | }; |
@@ -34,9 +32,7 @@ in { | |||
34 | }; | 32 | }; |
35 | address = ["2a03:4000:52:ada:4::/96"]; | 33 | address = ["2a03:4000:52:ada:4::/96"]; |
36 | routes = [ | 34 | routes = [ |
37 | { routeConfig = { | 35 | { Destination = "2a03:4000:52:ada:4::/80"; |
38 | Destination = "2a03:4000:52:ada:4::/80"; | ||
39 | }; | ||
40 | } | 36 | } |
41 | ]; | 37 | ]; |
42 | linkConfig = { | 38 | linkConfig = { |
diff --git a/hosts/surtr/default.nix b/hosts/surtr/default.nix index e6ca0c64..ceb035cb 100644 --- a/hosts/surtr/default.nix +++ b/hosts/surtr/default.nix | |||
@@ -165,6 +165,7 @@ with lib; | |||
165 | algorithm = "zstd"; | 165 | algorithm = "zstd"; |
166 | }; | 166 | }; |
167 | 167 | ||
168 | systemd.sysusers.enable = false; | ||
168 | system.stateVersion = "20.09"; | 169 | system.stateVersion = "20.09"; |
169 | }; | 170 | }; |
170 | } | 171 | } |
diff --git a/hosts/surtr/vpn/default.nix b/hosts/surtr/vpn/default.nix index 74a9fb22..61a9d544 100644 --- a/hosts/surtr/vpn/default.nix +++ b/hosts/surtr/vpn/default.nix | |||
@@ -63,10 +63,8 @@ in { | |||
63 | ListenPort = 51820; | 63 | ListenPort = 51820; |
64 | }; | 64 | }; |
65 | wireguardPeers = imap1 (i: { name, ip ? i }: { | 65 | wireguardPeers = imap1 (i: { name, ip ? i }: { |
66 | wireguardPeerConfig = { | 66 | AllowedIPs = ["${prefix6}:${toString ip}::/96" "${prefix4}.${toString ip}/32"]; |
67 | AllowedIPs = ["${prefix6}:${toString ip}::/96" "${prefix4}.${toString ip}/32"]; | 67 | PublicKey = trim (readFile (./. + "/${name}.pub")); |
68 | PublicKey = trim (readFile (./. + "/${name}.pub")); | ||
69 | }; | ||
70 | }) [ { name = "geri"; } { name = "sif"; } ]; | 68 | }) [ { name = "geri"; } { name = "sif"; } ]; |
71 | }; | 69 | }; |
72 | }; | 70 | }; |
@@ -86,19 +84,13 @@ in { | |||
86 | MulticastDNS = false; | 84 | MulticastDNS = false; |
87 | }; | 85 | }; |
88 | routes = [ | 86 | routes = [ |
89 | { routeConfig = { | 87 | { Destination = "202.61.240.1"; |
90 | Destination = "202.61.240.1"; | ||
91 | }; | ||
92 | } | 88 | } |
93 | { routeConfig = { | 89 | { Destination = "0.0.0.0/0"; |
94 | Destination = "0.0.0.0/0"; | 90 | Gateway = "202.61.240.1"; |
95 | Gateway = "202.61.240.1"; | ||
96 | }; | ||
97 | } | 91 | } |
98 | { routeConfig = { | 92 | { Destination = "::/0"; |
99 | Destination = "::/0"; | 93 | Gateway = "fe80::1"; |
100 | Gateway = "fe80::1"; | ||
101 | }; | ||
102 | } | 94 | } |
103 | ]; | 95 | ]; |
104 | extraConfig = '' | 96 | extraConfig = '' |
@@ -114,13 +106,9 @@ in { | |||
114 | }; | 106 | }; |
115 | address = ["${prefix6}::/96" "${prefix4}.0/32"]; | 107 | address = ["${prefix6}::/96" "${prefix4}.0/32"]; |
116 | routes = [ | 108 | routes = [ |
117 | { routeConfig = { | 109 | { Destination = "${prefix6}::/80"; |
118 | Destination = "${prefix6}::/80"; | ||
119 | }; | ||
120 | } | 110 | } |
121 | { routeConfig = { | 111 | { Destination = "${prefix4}.0/24"; |
122 | Destination = "${prefix4}.0/24"; | ||
123 | }; | ||
124 | } | 112 | } |
125 | ]; | 113 | ]; |
126 | linkConfig = { | 114 | linkConfig = { |
diff --git a/hosts/vidhar/default.nix b/hosts/vidhar/default.nix index ea200f5c..440829bb 100644 --- a/hosts/vidhar/default.nix +++ b/hosts/vidhar/default.nix | |||
@@ -377,6 +377,7 @@ with lib; | |||
377 | 377 | ||
378 | environment.systemPackages = with pkgs; [iotop vmtouch]; | 378 | environment.systemPackages = with pkgs; [iotop vmtouch]; |
379 | 379 | ||
380 | systemd.sysusers.enable = false; | ||
380 | system.stateVersion = "21.05"; | 381 | system.stateVersion = "21.05"; |
381 | }; | 382 | }; |
382 | } | 383 | } |
diff --git a/hosts/vidhar/network/bifrost/default.nix b/hosts/vidhar/network/bifrost/default.nix index ec354f81..59550481 100644 --- a/hosts/vidhar/network/bifrost/default.nix +++ b/hosts/vidhar/network/bifrost/default.nix | |||
@@ -18,12 +18,10 @@ in { | |||
18 | ListenPort = 51822; | 18 | ListenPort = 51822; |
19 | }; | 19 | }; |
20 | wireguardPeers = [ | 20 | wireguardPeers = [ |
21 | { wireguardPeerConfig = { | 21 | { AllowedIPs = [ "::/0" ]; |
22 | AllowedIPs = [ "::/0" ]; | 22 | PublicKey = trim (readFile ../../../surtr/bifrost/surtr.pub); |
23 | PublicKey = trim (readFile ../../../surtr/bifrost/surtr.pub); | 23 | PersistentKeepalive = 5; |
24 | PersistentKeepalive = 5; | 24 | Endpoint = "2a03:4000:52:ada:::51822"; |
25 | Endpoint = "2a03:4000:52:ada:::51822"; | ||
26 | }; | ||
27 | } | 25 | } |
28 | ]; | 26 | ]; |
29 | }; | 27 | }; |
@@ -36,35 +34,25 @@ in { | |||
36 | }; | 34 | }; |
37 | address = ["2a03:4000:52:ada:4:1::/96"]; | 35 | address = ["2a03:4000:52:ada:4:1::/96"]; |
38 | routes = [ | 36 | routes = [ |
39 | { routeConfig = { | 37 | { Destination = "2a03:4000:52:ada:4::/80"; |
40 | Destination = "2a03:4000:52:ada:4::/80"; | ||
41 | }; | ||
42 | } | 38 | } |
43 | { routeConfig = { | 39 | { Gateway = "2a03:4000:52:ada:4::"; |
44 | Gateway = "2a03:4000:52:ada:4::"; | 40 | GatewayOnLink = true; |
45 | GatewayOnLink = true; | 41 | Table = "bifrost"; |
46 | Table = "bifrost"; | ||
47 | }; | ||
48 | } | 42 | } |
49 | { routeConfig = { | 43 | { Destination = "2a03:4000:52:ada:4::/80"; |
50 | Destination = "2a03:4000:52:ada:4::/80"; | 44 | GatewayOnLink = true; |
51 | GatewayOnLink = true; | 45 | Table = "bifrost"; |
52 | Table = "bifrost"; | ||
53 | }; | ||
54 | } | 46 | } |
55 | { routeConfig = { | 47 | { Destination = "2a03:4000:52:ada:4:1::/96"; |
56 | Destination = "2a03:4000:52:ada:4:1::/96"; | 48 | GatewayOnLink = true; |
57 | GatewayOnLink = true; | 49 | Table = "bifrost"; |
58 | Table = "bifrost"; | ||
59 | }; | ||
60 | } | 50 | } |
61 | ]; | 51 | ]; |
62 | routingPolicyRules = [ | 52 | routingPolicyRules = [ |
63 | { routingPolicyRuleConfig = { | 53 | { Table = "bifrost"; |
64 | Table = "bifrost"; | 54 | From = "2a03:4000:52:ada:4:1::/96"; |
65 | From = "2a03:4000:52:ada:4:1::/96"; | 55 | Priority = 1; |
66 | Priority = 1; | ||
67 | }; | ||
68 | } | 56 | } |
69 | ]; | 57 | ]; |
70 | linkConfig = { | 58 | linkConfig = { |
diff --git a/hosts/vidhar/network/default.nix b/hosts/vidhar/network/default.nix index e961c17e..4a792851 100644 --- a/hosts/vidhar/network/default.nix +++ b/hosts/vidhar/network/default.nix | |||
@@ -89,22 +89,21 @@ with lib; | |||
89 | }; | 89 | }; |
90 | }; | 90 | }; |
91 | 91 | ||
92 | services.nfs.server = { | 92 | services.nfs = { |
93 | enable = true; | 93 | server = { |
94 | createMountPoints = true; | 94 | enable = true; |
95 | 95 | createMountPoints = true; | |
96 | statdPort = 4000; | 96 | |
97 | lockdPort = 4001; | 97 | statdPort = 4000; |
98 | mountdPort = 4002; | 98 | lockdPort = 4001; |
99 | 99 | mountdPort = 4002; | |
100 | extraNfsdConfig = '' | 100 | |
101 | vers3=off | 101 | exports = '' |
102 | ''; | 102 | /srv/nfs 10.141.0.0/24(ro,async,root_squash,fsid=0) 2a03:4000:52:ada:1::/80(ro,async,root_squash,fsid=0) |
103 | 103 | /srv/nfs/nix-store 10.141.0.0/24(ro,async,root_squash) 2a03:4000:52:ada:1::/80(ro,async,root_squash) | |
104 | exports = '' | 104 | ''; |
105 | /srv/nfs 10.141.0.0/24(ro,async,root_squash,fsid=0) 2a03:4000:52:ada:1::/80(ro,async,root_squash,fsid=0) | 105 | }; |
106 | /srv/nfs/nix-store 10.141.0.0/24(ro,async,root_squash) 2a03:4000:52:ada:1::/80(ro,async,root_squash) | 106 | settings.nfsd.vers3 = false; |
107 | ''; | ||
108 | }; | 107 | }; |
109 | 108 | ||
110 | fileSystems = { | 109 | fileSystems = { |
diff --git a/installer/default.nix b/installer/default.nix index 4fa2c2ab..e9d9fa1a 100644 --- a/installer/default.nix +++ b/installer/default.nix | |||
@@ -55,6 +55,8 @@ with lib; | |||
55 | 55 | ||
56 | services.getty.autologinUser = lib.mkForce null; | 56 | services.getty.autologinUser = lib.mkForce null; |
57 | 57 | ||
58 | system.disableInstallerTools = false; | ||
59 | |||
58 | system.stateVersion = config.system.nixos.release; # No state in installer | 60 | system.stateVersion = config.system.nixos.release; # No state in installer |
59 | }; | 61 | }; |
60 | } | 62 | } |
diff --git a/modules/borgcopy/default.nix b/modules/borgcopy/default.nix index afc6c37b..475edbd9 100644 --- a/modules/borgcopy/default.nix +++ b/modules/borgcopy/default.nix | |||
@@ -61,33 +61,40 @@ in { | |||
61 | options = { | 61 | options = { |
62 | from = mkOption { | 62 | from = mkOption { |
63 | type = types.str; | 63 | type = types.str; |
64 | description = "Copy from this repository"; | ||
64 | }; | 65 | }; |
65 | to = mkOption { | 66 | to = mkOption { |
66 | type = types.str; | 67 | type = types.str; |
68 | description = "Copy to this repository"; | ||
67 | }; | 69 | }; |
68 | 70 | ||
69 | verbosity = mkOption { | 71 | verbosity = mkOption { |
70 | type = types.int; | 72 | type = types.int; |
71 | default = 3; | 73 | default = 3; |
74 | description = "Set verbosity"; | ||
72 | }; | 75 | }; |
73 | 76 | ||
74 | sshConfig = mkOption { | 77 | sshConfig = mkOption { |
75 | type = with types; nullOr str; | 78 | type = with types; nullOr str; |
76 | default = null; | 79 | default = null; |
80 | description = "SSH client configuration"; | ||
77 | }; | 81 | }; |
78 | 82 | ||
79 | keyfile = mkOption { | 83 | keyfile = mkOption { |
80 | type = with types; nullOr str; | 84 | type = with types; nullOr str; |
81 | default = null; | 85 | default = null; |
86 | description = "Keyfile to pass to borg"; | ||
82 | }; | 87 | }; |
83 | 88 | ||
84 | unknownUnencryptedRepoAccessOk = mkOption { | 89 | unknownUnencryptedRepoAccessOk = mkOption { |
85 | type = types.bool; | 90 | type = types.bool; |
86 | default = false; | 91 | default = false; |
92 | description = "Set `BORG_UNKNOWN_UNENCRYPTED_REPO_ACCESS_IS_OK`?"; | ||
87 | }; | 93 | }; |
88 | hostnameIsUnique = mkOption { | 94 | hostnameIsUnique = mkOption { |
89 | type = types.bool; | 95 | type = types.bool; |
90 | default = true; | 96 | default = true; |
97 | description = "Set `BORG_HOSTNAME_IS_UNIQUE`?"; | ||
91 | }; | 98 | }; |
92 | 99 | ||
93 | timerOptions = mkOption { | 100 | timerOptions = mkOption { |
@@ -96,10 +103,12 @@ in { | |||
96 | default = { | 103 | default = { |
97 | wantedBy = ["timers.target"]; | 104 | wantedBy = ["timers.target"]; |
98 | }; | 105 | }; |
106 | description = "Systemd timer options"; | ||
99 | }; | 107 | }; |
100 | }; | 108 | }; |
101 | }); | 109 | }); |
102 | default = {}; | 110 | default = {}; |
111 | description = "Copy borg archives from one repository to another"; | ||
103 | }; | 112 | }; |
104 | }; | 113 | }; |
105 | 114 | ||
diff --git a/modules/build-client.nix b/modules/build-client.nix index 9924b751..6322e6c0 100644 --- a/modules/build-client.nix +++ b/modules/build-client.nix | |||
@@ -15,6 +15,7 @@ in { | |||
15 | options = { | 15 | options = { |
16 | address = mkOption { | 16 | address = mkOption { |
17 | type = types.str; | 17 | type = types.str; |
18 | description = "Address of buildserver"; | ||
18 | }; | 19 | }; |
19 | 20 | ||
20 | system = mkOption { | 21 | system = mkOption { |
@@ -82,10 +83,11 @@ in { | |||
82 | }; | 83 | }; |
83 | }); | 84 | }); |
84 | default = {}; | 85 | default = {}; |
86 | description = "Buildservers to use"; | ||
85 | }; | 87 | }; |
86 | }; | 88 | }; |
87 | }; | 89 | }; |
88 | 90 | ||
89 | config = mkIf (cfg != {}) { | 91 | config = mkIf (cfg != {}) { |
90 | programs.ssh.extraConfig = concatMapStringsSep "\n" ({ name, value }: '' | 92 | programs.ssh.extraConfig = concatMapStringsSep "\n" ({ name, value }: '' |
91 | Host ${buildHostName name} | 93 | Host ${buildHostName name} |
diff --git a/modules/certspotter.nix b/modules/certspotter.nix deleted file mode 100644 index ff7ff7c2..00000000 --- a/modules/certspotter.nix +++ /dev/null | |||
@@ -1,67 +0,0 @@ | |||
1 | { config, pkgs, lib, ... }: | ||
2 | |||
3 | with lib; | ||
4 | |||
5 | let | ||
6 | cfg = config.services.certspotter; | ||
7 | |||
8 | script = pkgs.writeShellApplication { | ||
9 | name = "certspotter-script"; | ||
10 | runtimeInputs = with pkgs; [ coreutils ]; | ||
11 | text = '' | ||
12 | mkdir -p "''${LOGS_DIRECTORY}" | ||
13 | env > "$(mktemp -p "''${LOGS_DIRECTORY}" "$(date -Iseconds).''${PUBKEY_HASH:-na}.XXXXXXXXXX.env")" | ||
14 | ''; | ||
15 | }; | ||
16 | |||
17 | startOptions = cfg.extraOptions | ||
18 | ++ optionals (cfg.logs != null) ["-logs" cfg.logs] | ||
19 | ++ ["-watchlist" (pkgs.writeText "watchlist" (concatStringsSep "\n" cfg.watchList)) | ||
20 | "-script" "${script}/bin/certspotter-script" | ||
21 | ]; | ||
22 | |||
23 | startScript = pkgs.writeShellApplication { | ||
24 | name = "certspotter-start"; | ||
25 | runtimeInputs = [ pkgs.coreutils cfg.package ]; | ||
26 | text = '' | ||
27 | rm -f "''${STATE_DIRECTORY}/lock" | ||
28 | exec -- certspotter -state_dir "''${STATE_DIRECTORY}" ${escapeShellArgs startOptions} | ||
29 | ''; | ||
30 | }; | ||
31 | in { | ||
32 | options = { | ||
33 | services.certspotter = { | ||
34 | watchList = mkOption { | ||
35 | type = types.listOf types.str; | ||
36 | default = []; | ||
37 | }; | ||
38 | |||
39 | logs = mkOption { | ||
40 | type = types.nullOr types.str; | ||
41 | default = null; | ||
42 | }; | ||
43 | |||
44 | extraOptions = mkOption { | ||
45 | type = types.listOf types.str; | ||
46 | default = [ "-verbose" ]; | ||
47 | }; | ||
48 | |||
49 | package = mkPackageOption pkgs "certspotter" {}; | ||
50 | }; | ||
51 | }; | ||
52 | |||
53 | config = mkIf (cfg.watchList != []) { | ||
54 | systemd.services.certspotter = { | ||
55 | serviceConfig = { | ||
56 | Type = "oneshot"; | ||
57 | ExecStart = "${startScript}/bin/certspotter-start"; | ||
58 | StateDirectory = "certspotter"; | ||
59 | LogsDirectory = "certspotter"; | ||
60 | DynamicUser = true; | ||
61 | |||
62 | CPUSchedulingPolicy = "idle"; | ||
63 | IOSchedulingClass = "idle"; | ||
64 | }; | ||
65 | }; | ||
66 | }; | ||
67 | } | ||
diff --git a/modules/coturn.nix b/modules/coturn.nix index faa4b5a2..d73d1bba 100644 --- a/modules/coturn.nix +++ b/modules/coturn.nix | |||
@@ -42,11 +42,11 @@ in { | |||
42 | 42 | ||
43 | options = { | 43 | options = { |
44 | services.coturn = { | 44 | services.coturn = { |
45 | enable = mkEnableOption (lib.mdDoc "coturn TURN server"); | 45 | enable = mkEnableOption "coturn TURN server"; |
46 | listening-port = mkOption { | 46 | listening-port = mkOption { |
47 | type = types.int; | 47 | type = types.int; |
48 | default = 3478; | 48 | default = 3478; |
49 | description = lib.mdDoc '' | 49 | description = '' |
50 | TURN listener port for UDP and TCP. | 50 | TURN listener port for UDP and TCP. |
51 | Note: actually, TLS and DTLS sessions can connect to the | 51 | Note: actually, TLS and DTLS sessions can connect to the |
52 | "plain" TCP and UDP port(s), too - if allowed by configuration. | 52 | "plain" TCP and UDP port(s), too - if allowed by configuration. |
@@ -55,7 +55,7 @@ in { | |||
55 | tls-listening-port = mkOption { | 55 | tls-listening-port = mkOption { |
56 | type = types.int; | 56 | type = types.int; |
57 | default = 5349; | 57 | default = 5349; |
58 | description = lib.mdDoc '' | 58 | description = '' |
59 | TURN listener port for TLS. | 59 | TURN listener port for TLS. |
60 | Note: actually, "plain" TCP and UDP sessions can connect to the TLS and | 60 | Note: actually, "plain" TCP and UDP sessions can connect to the TLS and |
61 | DTLS port(s), too - if allowed by configuration. The TURN server | 61 | DTLS port(s), too - if allowed by configuration. The TURN server |
@@ -71,7 +71,7 @@ in { | |||
71 | type = types.int; | 71 | type = types.int; |
72 | default = cfg.listening-port + 1; | 72 | default = cfg.listening-port + 1; |
73 | defaultText = literalExpression "listening-port + 1"; | 73 | defaultText = literalExpression "listening-port + 1"; |
74 | description = lib.mdDoc '' | 74 | description = '' |
75 | Alternative listening port for UDP and TCP listeners; | 75 | Alternative listening port for UDP and TCP listeners; |
76 | default (or zero) value means "listening port plus one". | 76 | default (or zero) value means "listening port plus one". |
77 | This is needed for RFC 5780 support | 77 | This is needed for RFC 5780 support |
@@ -86,7 +86,7 @@ in { | |||
86 | type = types.int; | 86 | type = types.int; |
87 | default = cfg.tls-listening-port + 1; | 87 | default = cfg.tls-listening-port + 1; |
88 | defaultText = literalExpression "tls-listening-port + 1"; | 88 | defaultText = literalExpression "tls-listening-port + 1"; |
89 | description = lib.mdDoc '' | 89 | description = '' |
90 | Alternative listening port for TLS and DTLS protocols. | 90 | Alternative listening port for TLS and DTLS protocols. |
91 | ''; | 91 | ''; |
92 | }; | 92 | }; |
@@ -94,7 +94,7 @@ in { | |||
94 | type = types.listOf types.str; | 94 | type = types.listOf types.str; |
95 | default = []; | 95 | default = []; |
96 | example = [ "203.0.113.42" "2001:DB8::42" ]; | 96 | example = [ "203.0.113.42" "2001:DB8::42" ]; |
97 | description = lib.mdDoc '' | 97 | description = '' |
98 | Listener IP addresses of relay server. | 98 | Listener IP addresses of relay server. |
99 | If no IP(s) specified in the config file or in the command line options, | 99 | If no IP(s) specified in the config file or in the command line options, |
100 | then all IPv4 and IPv6 system IPs will be used for listening. | 100 | then all IPv4 and IPv6 system IPs will be used for listening. |
@@ -104,7 +104,7 @@ in { | |||
104 | type = types.listOf types.str; | 104 | type = types.listOf types.str; |
105 | default = []; | 105 | default = []; |
106 | example = [ "203.0.113.42" "2001:DB8::42" ]; | 106 | example = [ "203.0.113.42" "2001:DB8::42" ]; |
107 | description = lib.mdDoc '' | 107 | description = '' |
108 | Relay address (the local IP address that will be used to relay the | 108 | Relay address (the local IP address that will be used to relay the |
109 | packets to the peer). | 109 | packets to the peer). |
110 | Multiple relay addresses may be used. | 110 | Multiple relay addresses may be used. |
@@ -120,28 +120,28 @@ in { | |||
120 | min-port = mkOption { | 120 | min-port = mkOption { |
121 | type = types.int; | 121 | type = types.int; |
122 | default = 49152; | 122 | default = 49152; |
123 | description = lib.mdDoc '' | 123 | description = '' |
124 | Lower bound of UDP relay endpoints | 124 | Lower bound of UDP relay endpoints |
125 | ''; | 125 | ''; |
126 | }; | 126 | }; |
127 | max-port = mkOption { | 127 | max-port = mkOption { |
128 | type = types.int; | 128 | type = types.int; |
129 | default = 65535; | 129 | default = 65535; |
130 | description = lib.mdDoc '' | 130 | description = '' |
131 | Upper bound of UDP relay endpoints | 131 | Upper bound of UDP relay endpoints |
132 | ''; | 132 | ''; |
133 | }; | 133 | }; |
134 | lt-cred-mech = mkOption { | 134 | lt-cred-mech = mkOption { |
135 | type = types.bool; | 135 | type = types.bool; |
136 | default = false; | 136 | default = false; |
137 | description = lib.mdDoc '' | 137 | description = '' |
138 | Use long-term credential mechanism. | 138 | Use long-term credential mechanism. |
139 | ''; | 139 | ''; |
140 | }; | 140 | }; |
141 | no-auth = mkOption { | 141 | no-auth = mkOption { |
142 | type = types.bool; | 142 | type = types.bool; |
143 | default = false; | 143 | default = false; |
144 | description = lib.mdDoc '' | 144 | description = '' |
145 | This option is opposite to lt-cred-mech. | 145 | This option is opposite to lt-cred-mech. |
146 | (TURN Server with no-auth option allows anonymous access). | 146 | (TURN Server with no-auth option allows anonymous access). |
147 | If neither option is defined, and no users are defined, | 147 | If neither option is defined, and no users are defined, |
@@ -153,7 +153,7 @@ in { | |||
153 | use-auth-secret = mkOption { | 153 | use-auth-secret = mkOption { |
154 | type = types.bool; | 154 | type = types.bool; |
155 | default = false; | 155 | default = false; |
156 | description = lib.mdDoc '' | 156 | description = '' |
157 | TURN REST API flag. | 157 | TURN REST API flag. |
158 | Flag that sets a special authorization option that is based upon authentication secret. | 158 | Flag that sets a special authorization option that is based upon authentication secret. |
159 | This feature can be used with the long-term authentication mechanism, only. | 159 | This feature can be used with the long-term authentication mechanism, only. |
@@ -177,7 +177,7 @@ in { | |||
177 | static-auth-secret = mkOption { | 177 | static-auth-secret = mkOption { |
178 | type = types.nullOr types.str; | 178 | type = types.nullOr types.str; |
179 | default = null; | 179 | default = null; |
180 | description = lib.mdDoc '' | 180 | description = '' |
181 | 'Static' authentication secret value (a string) for TURN REST API only. | 181 | 'Static' authentication secret value (a string) for TURN REST API only. |
182 | If not set, then the turn server | 182 | If not set, then the turn server |
183 | will try to use the 'dynamic' value in turn_secret table | 183 | will try to use the 'dynamic' value in turn_secret table |
@@ -188,7 +188,7 @@ in { | |||
188 | static-auth-secret-file = mkOption { | 188 | static-auth-secret-file = mkOption { |
189 | type = types.nullOr types.str; | 189 | type = types.nullOr types.str; |
190 | default = null; | 190 | default = null; |
191 | description = lib.mdDoc '' | 191 | description = '' |
192 | Path to the file containing the static authentication secret. | 192 | Path to the file containing the static authentication secret. |
193 | ''; | 193 | ''; |
194 | }; | 194 | }; |
@@ -197,7 +197,7 @@ in { | |||
197 | default = config.networking.hostName; | 197 | default = config.networking.hostName; |
198 | defaultText = literalExpression "config.networking.hostName"; | 198 | defaultText = literalExpression "config.networking.hostName"; |
199 | example = "example.com"; | 199 | example = "example.com"; |
200 | description = lib.mdDoc '' | 200 | description = '' |
201 | The default realm to be used for the users when no explicit | 201 | The default realm to be used for the users when no explicit |
202 | origin/realm relationship was found in the database, or if the TURN | 202 | origin/realm relationship was found in the database, or if the TURN |
203 | server is not using any database (just the commands-line settings | 203 | server is not using any database (just the commands-line settings |
@@ -209,7 +209,7 @@ in { | |||
209 | type = types.nullOr types.str; | 209 | type = types.nullOr types.str; |
210 | default = null; | 210 | default = null; |
211 | example = "/var/lib/acme/example.com/fullchain.pem"; | 211 | example = "/var/lib/acme/example.com/fullchain.pem"; |
212 | description = lib.mdDoc '' | 212 | description = '' |
213 | Certificate file in PEM format. | 213 | Certificate file in PEM format. |
214 | ''; | 214 | ''; |
215 | }; | 215 | }; |
@@ -217,21 +217,21 @@ in { | |||
217 | type = types.nullOr types.str; | 217 | type = types.nullOr types.str; |
218 | default = null; | 218 | default = null; |
219 | example = "/var/lib/acme/example.com/key.pem"; | 219 | example = "/var/lib/acme/example.com/key.pem"; |
220 | description = lib.mdDoc '' | 220 | description = '' |
221 | Private key file in PEM format. | 221 | Private key file in PEM format. |
222 | ''; | 222 | ''; |
223 | }; | 223 | }; |
224 | dh-file = mkOption { | 224 | dh-file = mkOption { |
225 | type = types.nullOr types.str; | 225 | type = types.nullOr types.str; |
226 | default = null; | 226 | default = null; |
227 | description = lib.mdDoc '' | 227 | description = '' |
228 | Use custom DH TLS key, stored in PEM format in the file. | 228 | Use custom DH TLS key, stored in PEM format in the file. |
229 | ''; | 229 | ''; |
230 | }; | 230 | }; |
231 | secure-stun = mkOption { | 231 | secure-stun = mkOption { |
232 | type = types.bool; | 232 | type = types.bool; |
233 | default = false; | 233 | default = false; |
234 | description = lib.mdDoc '' | 234 | description = '' |
235 | Require authentication of the STUN Binding request. | 235 | Require authentication of the STUN Binding request. |
236 | By default, the clients are allowed anonymous access to the STUN Binding functionality. | 236 | By default, the clients are allowed anonymous access to the STUN Binding functionality. |
237 | ''; | 237 | ''; |
@@ -239,28 +239,28 @@ in { | |||
239 | no-cli = mkOption { | 239 | no-cli = mkOption { |
240 | type = types.bool; | 240 | type = types.bool; |
241 | default = false; | 241 | default = false; |
242 | description = lib.mdDoc '' | 242 | description = '' |
243 | Turn OFF the CLI support. | 243 | Turn OFF the CLI support. |
244 | ''; | 244 | ''; |
245 | }; | 245 | }; |
246 | cli-ip = mkOption { | 246 | cli-ip = mkOption { |
247 | type = types.str; | 247 | type = types.str; |
248 | default = "127.0.0.1"; | 248 | default = "127.0.0.1"; |
249 | description = lib.mdDoc '' | 249 | description = '' |
250 | Local system IP address to be used for CLI server endpoint. | 250 | Local system IP address to be used for CLI server endpoint. |
251 | ''; | 251 | ''; |
252 | }; | 252 | }; |
253 | cli-port = mkOption { | 253 | cli-port = mkOption { |
254 | type = types.int; | 254 | type = types.int; |
255 | default = 5766; | 255 | default = 5766; |
256 | description = lib.mdDoc '' | 256 | description = '' |
257 | CLI server port. | 257 | CLI server port. |
258 | ''; | 258 | ''; |
259 | }; | 259 | }; |
260 | cli-password = mkOption { | 260 | cli-password = mkOption { |
261 | type = types.nullOr types.str; | 261 | type = types.nullOr types.str; |
262 | default = null; | 262 | default = null; |
263 | description = lib.mdDoc '' | 263 | description = '' |
264 | CLI access password. | 264 | CLI access password. |
265 | For the security reasons, it is recommended to use the encrypted | 265 | For the security reasons, it is recommended to use the encrypted |
266 | for of the password (see the -P command in the turnadmin utility). | 266 | for of the password (see the -P command in the turnadmin utility). |
@@ -269,37 +269,37 @@ in { | |||
269 | no-udp = mkOption { | 269 | no-udp = mkOption { |
270 | type = types.bool; | 270 | type = types.bool; |
271 | default = false; | 271 | default = false; |
272 | description = lib.mdDoc "Disable UDP client listener"; | 272 | description = "Disable UDP client listener"; |
273 | }; | 273 | }; |
274 | no-tcp = mkOption { | 274 | no-tcp = mkOption { |
275 | type = types.bool; | 275 | type = types.bool; |
276 | default = false; | 276 | default = false; |
277 | description = lib.mdDoc "Disable TCP client listener"; | 277 | description = "Disable TCP client listener"; |
278 | }; | 278 | }; |
279 | no-tls = mkOption { | 279 | no-tls = mkOption { |
280 | type = types.bool; | 280 | type = types.bool; |
281 | default = false; | 281 | default = false; |
282 | description = lib.mdDoc "Disable TLS client listener"; | 282 | description = "Disable TLS client listener"; |
283 | }; | 283 | }; |
284 | no-dtls = mkOption { | 284 | no-dtls = mkOption { |
285 | type = types.bool; | 285 | type = types.bool; |
286 | default = false; | 286 | default = false; |
287 | description = lib.mdDoc "Disable DTLS client listener"; | 287 | description = "Disable DTLS client listener"; |
288 | }; | 288 | }; |
289 | no-udp-relay = mkOption { | 289 | no-udp-relay = mkOption { |
290 | type = types.bool; | 290 | type = types.bool; |
291 | default = false; | 291 | default = false; |
292 | description = lib.mdDoc "Disable UDP relay endpoints"; | 292 | description = "Disable UDP relay endpoints"; |
293 | }; | 293 | }; |
294 | no-tcp-relay = mkOption { | 294 | no-tcp-relay = mkOption { |
295 | type = types.bool; | 295 | type = types.bool; |
296 | default = false; | 296 | default = false; |
297 | description = lib.mdDoc "Disable TCP relay endpoints"; | 297 | description = "Disable TCP relay endpoints"; |
298 | }; | 298 | }; |
299 | extraConfig = mkOption { | 299 | extraConfig = mkOption { |
300 | type = types.lines; | 300 | type = types.lines; |
301 | default = ""; | 301 | default = ""; |
302 | description = lib.mdDoc "Additional configuration options"; | 302 | description = "Additional configuration options"; |
303 | }; | 303 | }; |
304 | }; | 304 | }; |
305 | }; | 305 | }; |
diff --git a/modules/envfs.nix b/modules/envfs.nix index ff992b61..b5b453a5 100644 --- a/modules/envfs.nix +++ b/modules/envfs.nix | |||
@@ -26,9 +26,9 @@ in { | |||
26 | 26 | ||
27 | options = { | 27 | options = { |
28 | services.envfs = { | 28 | services.envfs = { |
29 | enable = lib.mkEnableOption (lib.mdDoc "Envfs filesystem") // { | 29 | enable = lib.mkEnableOption "Envfs filesystem" // { |
30 | default = true; | 30 | default = true; |
31 | description = lib.mdDoc '' | 31 | description = '' |
32 | Fuse filesystem that returns symlinks to executables based on the PATH | 32 | Fuse filesystem that returns symlinks to executables based on the PATH |
33 | of the requesting process. This is useful to execute shebangs on NixOS | 33 | of the requesting process. This is useful to execute shebangs on NixOS |
34 | that assume hard coded locations in locations like /bin or /usr/bin | 34 | that assume hard coded locations in locations like /bin or /usr/bin |
@@ -40,7 +40,7 @@ in { | |||
40 | type = lib.types.package; | 40 | type = lib.types.package; |
41 | default = pkgs.envfs; | 41 | default = pkgs.envfs; |
42 | defaultText = lib.literalExpression "pkgs.envfs"; | 42 | defaultText = lib.literalExpression "pkgs.envfs"; |
43 | description = lib.mdDoc "Which package to use for the envfs."; | 43 | description = "Which package to use for the envfs."; |
44 | }; | 44 | }; |
45 | 45 | ||
46 | paths = lib.mkOption { | 46 | paths = lib.mkOption { |
@@ -60,7 +60,7 @@ in { | |||
60 | ''') | 60 | ''') |
61 | ] | 61 | ] |
62 | ''; | 62 | ''; |
63 | description = lib.mdDoc "Extra packages to join into collection of fallback executables in case not other executable is found"; | 63 | description = "Extra packages to join into collection of fallback executables in case not other executable is found"; |
64 | }; | 64 | }; |
65 | }; | 65 | }; |
66 | }; | 66 | }; |
diff --git a/modules/etebase-server.nix b/modules/etebase-server.nix deleted file mode 100644 index 341e7fa0..00000000 --- a/modules/etebase-server.nix +++ /dev/null | |||
@@ -1,228 +0,0 @@ | |||
1 | { config, pkgs, lib, ... }: | ||
2 | |||
3 | with lib; | ||
4 | |||
5 | let | ||
6 | cfg = config.services.etebase-server; | ||
7 | |||
8 | pythonEnv = pkgs.python3.withPackages (ps: with ps; | ||
9 | [ etebase-server daphne psycopg2 ]); | ||
10 | |||
11 | iniFmt = pkgs.formats.ini {}; | ||
12 | |||
13 | configIni = iniFmt.generate "etebase-server.ini" cfg.settings; | ||
14 | |||
15 | defaultUser = "etebase-server"; | ||
16 | in | ||
17 | { | ||
18 | disabledModules = [ "services/misc/etebase-server.nix" ]; | ||
19 | |||
20 | imports = [ | ||
21 | (mkRemovedOptionModule | ||
22 | [ "services" "etebase-server" "customIni" ] | ||
23 | "Set the option `services.etebase-server.settings' instead.") | ||
24 | (mkRemovedOptionModule | ||
25 | [ "services" "etebase-server" "database" ] | ||
26 | "Set the option `services.etebase-server.settings.database' instead.") | ||
27 | (mkRenamedOptionModule | ||
28 | [ "services" "etebase-server" "secretFile" ] | ||
29 | [ "services" "etebase-server" "settings" "secret_file" ]) | ||
30 | (mkRenamedOptionModule | ||
31 | [ "services" "etebase-server" "host" ] | ||
32 | [ "services" "etebase-server" "settings" "allowed_hosts" "allowed_host1" ]) | ||
33 | ]; | ||
34 | |||
35 | options = { | ||
36 | services.etebase-server = { | ||
37 | enable = mkOption { | ||
38 | type = types.bool; | ||
39 | default = false; | ||
40 | example = true; | ||
41 | description = lib.mdDoc '' | ||
42 | Whether to enable the Etebase server. | ||
43 | |||
44 | Once enabled you need to create an admin user by invoking the | ||
45 | shell command `etebase-server createsuperuser` with | ||
46 | the user specified by the `user` option or a superuser. | ||
47 | Then you can login and create accounts on your-etebase-server.com/admin | ||
48 | ''; | ||
49 | }; | ||
50 | |||
51 | dataDir = mkOption { | ||
52 | type = types.str; | ||
53 | default = "/var/lib/etebase-server"; | ||
54 | description = lib.mdDoc "Directory to store the Etebase server data."; | ||
55 | }; | ||
56 | |||
57 | port = mkOption { | ||
58 | type = with types; nullOr port; | ||
59 | default = 8001; | ||
60 | description = lib.mdDoc "Port to listen on."; | ||
61 | }; | ||
62 | |||
63 | openFirewall = mkOption { | ||
64 | type = types.bool; | ||
65 | default = false; | ||
66 | description = lib.mdDoc '' | ||
67 | Whether to open ports in the firewall for the server. | ||
68 | ''; | ||
69 | }; | ||
70 | |||
71 | unixSocket = mkOption { | ||
72 | type = with types; nullOr str; | ||
73 | default = null; | ||
74 | description = lib.mdDoc "The path to the socket to bind to."; | ||
75 | example = "/run/etebase-server/etebase-server.sock"; | ||
76 | }; | ||
77 | |||
78 | settings = mkOption { | ||
79 | type = lib.types.submodule { | ||
80 | freeformType = iniFmt.type; | ||
81 | |||
82 | options = { | ||
83 | global = { | ||
84 | debug = mkOption { | ||
85 | type = types.bool; | ||
86 | default = false; | ||
87 | description = lib.mdDoc '' | ||
88 | Whether to set django's DEBUG flag. | ||
89 | ''; | ||
90 | }; | ||
91 | secret_file = mkOption { | ||
92 | type = with types; nullOr str; | ||
93 | default = null; | ||
94 | description = lib.mdDoc '' | ||
95 | The path to a file containing the secret | ||
96 | used as django's SECRET_KEY. | ||
97 | ''; | ||
98 | }; | ||
99 | static_root = mkOption { | ||
100 | type = types.str; | ||
101 | default = "${cfg.dataDir}/static"; | ||
102 | defaultText = literalExpression ''"''${config.services.etebase-server.dataDir}/static"''; | ||
103 | description = lib.mdDoc "The directory for static files."; | ||
104 | }; | ||
105 | media_root = mkOption { | ||
106 | type = types.str; | ||
107 | default = "${cfg.dataDir}/media"; | ||
108 | defaultText = literalExpression ''"''${config.services.etebase-server.dataDir}/media"''; | ||
109 | description = lib.mdDoc "The media directory."; | ||
110 | }; | ||
111 | }; | ||
112 | allowed_hosts = { | ||
113 | allowed_host1 = mkOption { | ||
114 | type = types.str; | ||
115 | default = "0.0.0.0"; | ||
116 | example = "localhost"; | ||
117 | description = lib.mdDoc '' | ||
118 | The main host that is allowed access. | ||
119 | ''; | ||
120 | }; | ||
121 | }; | ||
122 | database = { | ||
123 | engine = mkOption { | ||
124 | type = types.enum [ "django.db.backends.sqlite3" "django.db.backends.postgresql" ]; | ||
125 | default = "django.db.backends.sqlite3"; | ||
126 | description = lib.mdDoc "The database engine to use."; | ||
127 | }; | ||
128 | name = mkOption { | ||
129 | type = types.str; | ||
130 | default = "${cfg.dataDir}/db.sqlite3"; | ||
131 | defaultText = literalExpression ''"''${config.services.etebase-server.dataDir}/db.sqlite3"''; | ||
132 | description = lib.mdDoc "The database name."; | ||
133 | }; | ||
134 | }; | ||
135 | }; | ||
136 | }; | ||
137 | default = {}; | ||
138 | description = lib.mdDoc '' | ||
139 | Configuration for `etebase-server`. Refer to | ||
140 | <https://github.com/etesync/server/blob/master/etebase-server.ini.example> | ||
141 | and <https://github.com/etesync/server/wiki> | ||
142 | for details on supported values. | ||
143 | ''; | ||
144 | example = { | ||
145 | global = { | ||
146 | debug = true; | ||
147 | media_root = "/path/to/media"; | ||
148 | }; | ||
149 | allowed_hosts = { | ||
150 | allowed_host2 = "localhost"; | ||
151 | }; | ||
152 | }; | ||
153 | }; | ||
154 | |||
155 | user = mkOption { | ||
156 | type = types.str; | ||
157 | default = defaultUser; | ||
158 | description = lib.mdDoc "User under which Etebase server runs."; | ||
159 | }; | ||
160 | }; | ||
161 | }; | ||
162 | |||
163 | config = mkIf cfg.enable { | ||
164 | |||
165 | environment.systemPackages = with pkgs; [ | ||
166 | (runCommand "etebase-server" { | ||
167 | nativeBuildInputs = [ makeWrapper ]; | ||
168 | } '' | ||
169 | makeWrapper ${pythonEnv}/bin/etebase-server \ | ||
170 | $out/bin/etebase-server \ | ||
171 | --chdir ${escapeShellArg cfg.dataDir} \ | ||
172 | --prefix ETEBASE_EASY_CONFIG_PATH : "${configIni}" | ||
173 | '') | ||
174 | ]; | ||
175 | |||
176 | systemd.tmpfiles.rules = [ | ||
177 | "d '${cfg.dataDir}' - ${cfg.user} ${config.users.users.${cfg.user}.group} - -" | ||
178 | ]; | ||
179 | |||
180 | systemd.services.etebase-server = { | ||
181 | description = "An Etebase (EteSync 2.0) server"; | ||
182 | after = [ "network.target" "systemd-tmpfiles-setup.service" ]; | ||
183 | wantedBy = [ "multi-user.target" ]; | ||
184 | path = [ pythonEnv ]; | ||
185 | serviceConfig = { | ||
186 | User = cfg.user; | ||
187 | Restart = "always"; | ||
188 | WorkingDirectory = cfg.dataDir; | ||
189 | }; | ||
190 | environment = { | ||
191 | ETEBASE_EASY_CONFIG_PATH = configIni; | ||
192 | }; | ||
193 | preStart = '' | ||
194 | # Auto-migrate on first run or if the package has changed | ||
195 | versionFile="${cfg.dataDir}/src-version" | ||
196 | if [[ $(cat "$versionFile" 2>/dev/null) != ${pkgs.etebase-server} ]]; then | ||
197 | etebase-server migrate --no-input | ||
198 | etebase-server collectstatic --no-input --clear | ||
199 | echo ${pkgs.etebase-server} > "$versionFile" | ||
200 | fi | ||
201 | ''; | ||
202 | script = | ||
203 | let | ||
204 | networking = if cfg.unixSocket != null | ||
205 | then "-u ${cfg.unixSocket}" | ||
206 | else "-b 0.0.0.0 -p ${toString cfg.port}"; | ||
207 | in '' | ||
208 | cd "${pythonEnv}/lib/etebase-server"; | ||
209 | daphne ${networking} \ | ||
210 | etebase_server.asgi:application | ||
211 | ''; | ||
212 | }; | ||
213 | |||
214 | users = optionalAttrs (cfg.user == defaultUser) { | ||
215 | users.${defaultUser} = { | ||
216 | isSystemUser = true; | ||
217 | group = defaultUser; | ||
218 | home = cfg.dataDir; | ||
219 | }; | ||
220 | |||
221 | groups.${defaultUser} = {}; | ||
222 | }; | ||
223 | |||
224 | networking.firewall = mkIf cfg.openFirewall { | ||
225 | allowedTCPPorts = [ cfg.port ]; | ||
226 | }; | ||
227 | }; | ||
228 | } | ||
diff --git a/modules/home-manager.nix b/modules/home-manager.nix index ebe3e153..c485dd99 100644 --- a/modules/home-manager.nix +++ b/modules/home-manager.nix | |||
@@ -8,6 +8,9 @@ with lib; | |||
8 | type = types.bool; | 8 | type = types.bool; |
9 | default = true; | 9 | default = true; |
10 | example = true; | 10 | example = true; |
11 | description = '' | ||
12 | Are we using home-manager version that starts late as systemd user service? | ||
13 | ''; | ||
11 | }; | 14 | }; |
12 | }; | 15 | }; |
13 | } | 16 | } |
diff --git a/modules/knot.nix b/modules/knot.nix index a4691324..f7165029 100644 --- a/modules/knot.nix +++ b/modules/knot.nix | |||
@@ -81,6 +81,7 @@ in { | |||
81 | 81 | ||
82 | cliWrappers = mkOption { | 82 | cliWrappers = mkOption { |
83 | readOnly = true; | 83 | readOnly = true; |
84 | internal = true; | ||
84 | type = types.package; | 85 | type = types.package; |
85 | default = knot-cli-wrappers; | 86 | default = knot-cli-wrappers; |
86 | defaultText = "knot-cli-wrappers"; | 87 | defaultText = "knot-cli-wrappers"; |
diff --git a/modules/netns.nix b/modules/netns.nix index dca3c0db..79dc123b 100644 --- a/modules/netns.nix +++ b/modules/netns.nix | |||
@@ -125,6 +125,13 @@ in { | |||
125 | containers = mkOption { | 125 | containers = mkOption { |
126 | default = {}; | 126 | default = {}; |
127 | type = types.attrsOf (types.submodule containerOpts); | 127 | type = types.attrsOf (types.submodule containerOpts); |
128 | description = '' | ||
129 | A set of NixOS system configurations to be run as lightweight | ||
130 | containers. Each container appears as a service | ||
131 | `container-«name»` | ||
132 | on the host system, allowing it to be started and stopped via | ||
133 | {command}`systemctl`. | ||
134 | ''; | ||
128 | }; | 135 | }; |
129 | }; | 136 | }; |
130 | }; | 137 | }; |
diff --git a/modules/openssh.nix b/modules/openssh.nix index 78749869..8bdc3df6 100644 --- a/modules/openssh.nix +++ b/modules/openssh.nix | |||
@@ -30,6 +30,7 @@ with lib; | |||
30 | "rsa-sha2-512" | 30 | "rsa-sha2-512" |
31 | "rsa-sha2-512-cert-v01@openssh.com" | 31 | "rsa-sha2-512-cert-v01@openssh.com" |
32 | ]; | 32 | ]; |
33 | description = "HostKeyAlgorithms"; | ||
33 | }; | 34 | }; |
34 | settings.CASignatureAlgorithms = mkOption { | 35 | settings.CASignatureAlgorithms = mkOption { |
35 | type = types.str; | 36 | type = types.str; |
@@ -43,6 +44,7 @@ with lib; | |||
43 | "rsa-sha2-512" | 44 | "rsa-sha2-512" |
44 | "rsa-sha2-256" | 45 | "rsa-sha2-256" |
45 | ]; | 46 | ]; |
47 | description = "CASignatureAlgorithms"; | ||
46 | }; | 48 | }; |
47 | settings.PubkeyAcceptedAlgorithms = mkOption { | 49 | settings.PubkeyAcceptedAlgorithms = mkOption { |
48 | type = types.str; | 50 | type = types.str; |
@@ -69,6 +71,7 @@ with lib; | |||
69 | "rsa-sha2-512" | 71 | "rsa-sha2-512" |
70 | "rsa-sha2-512-cert-v01@openssh.com" | 72 | "rsa-sha2-512-cert-v01@openssh.com" |
71 | ]; | 73 | ]; |
74 | description = "PubkeyAcceptedAlgorithms"; | ||
72 | }; | 75 | }; |
73 | }; | 76 | }; |
74 | }; | 77 | }; |
diff --git a/modules/pgbackrest.nix b/modules/pgbackrest.nix index e02849f5..886840b9 100644 --- a/modules/pgbackrest.nix +++ b/modules/pgbackrest.nix | |||
@@ -50,8 +50,8 @@ in { | |||
50 | package = mkPackageOption pkgs "pgbackrest" {}; | 50 | package = mkPackageOption pkgs "pgbackrest" {}; |
51 | dscpPackage = mkPackageOption pkgs "libdscp" { nullable = true; default = null; }; | 51 | dscpPackage = mkPackageOption pkgs "libdscp" { nullable = true; default = null; }; |
52 | 52 | ||
53 | dscp.archive-push = mkDSCPOption { default = 24; }; | 53 | dscp.archive-push = mkDSCPOption { default = 24; description = "DSCP during archive push"; }; |
54 | dscp.backup = mkDSCPOption { default = 8; }; | 54 | dscp.backup = mkDSCPOption { default = 8; description = "DSCP during backup"; }; |
55 | 55 | ||
56 | configurePostgresql = { | 56 | configurePostgresql = { |
57 | enable = mkEnableOption "configuring PostgreSQL for sending WAL to pgBackRest" // { | 57 | enable = mkEnableOption "configuring PostgreSQL for sending WAL to pgBackRest" // { |
@@ -63,6 +63,7 @@ in { | |||
63 | type = types.str; | 63 | type = types.str; |
64 | default = config.networking.hostName; | 64 | default = config.networking.hostName; |
65 | defaultText = literalExpression "config.networking.hostName"; | 65 | defaultText = literalExpression "config.networking.hostName"; |
66 | description = "Stanza"; | ||
66 | }; | 67 | }; |
67 | }; | 68 | }; |
68 | 69 | ||
@@ -74,23 +75,28 @@ in { | |||
74 | global.log-level-console = mkOption { | 75 | global.log-level-console = mkOption { |
75 | type = loglevelType; | 76 | type = loglevelType; |
76 | default = "detail"; | 77 | default = "detail"; |
78 | description = "Log level to console"; | ||
77 | }; | 79 | }; |
78 | global.log-level-file = mkOption { | 80 | global.log-level-file = mkOption { |
79 | type = loglevelType; | 81 | type = loglevelType; |
80 | default = "off"; | 82 | default = "off"; |
83 | description = "Log level to logfile"; | ||
81 | }; | 84 | }; |
82 | global.log-level-stderr = mkOption { | 85 | global.log-level-stderr = mkOption { |
83 | type = loglevelType; | 86 | type = loglevelType; |
84 | default = "warn"; | 87 | default = "warn"; |
88 | description = "Log level to stderr"; | ||
85 | }; | 89 | }; |
86 | 90 | ||
87 | global.log-subprocess = mkOption { | 91 | global.log-subprocess = mkOption { |
88 | type = types.bool; | 92 | type = types.bool; |
89 | default = true; | 93 | default = true; |
94 | description = "Log subprocesses?"; | ||
90 | }; | 95 | }; |
91 | global.log-timestamp = mkOption { | 96 | global.log-timestamp = mkOption { |
92 | type = types.bool; | 97 | type = types.bool; |
93 | default = false; | 98 | default = false; |
99 | description = "Log timestamps?"; | ||
94 | }; | 100 | }; |
95 | }; | 101 | }; |
96 | }; | 102 | }; |
@@ -106,10 +112,12 @@ in { | |||
106 | user = mkOption { | 112 | user = mkOption { |
107 | type = types.str; | 113 | type = types.str; |
108 | default = "postgres"; | 114 | default = "postgres"; |
115 | description = "User"; | ||
109 | }; | 116 | }; |
110 | group = mkOption { | 117 | group = mkOption { |
111 | type = types.str; | 118 | type = types.str; |
112 | default = "postgres"; | 119 | default = "postgres"; |
120 | description = "Group"; | ||
113 | }; | 121 | }; |
114 | }; | 122 | }; |
115 | 123 | ||
@@ -119,32 +127,39 @@ in { | |||
119 | type = mkOption { | 127 | type = mkOption { |
120 | type = types.enum ["full" "incr" "diff"]; | 128 | type = types.enum ["full" "incr" "diff"]; |
121 | default = "full"; | 129 | default = "full"; |
130 | description = "Type"; | ||
122 | }; | 131 | }; |
123 | 132 | ||
124 | stanza = mkOption { | 133 | stanza = mkOption { |
125 | type = types.str; | 134 | type = types.str; |
126 | default = cfg.configurePostgresql.stanza; | 135 | default = cfg.configurePostgresql.stanza; |
127 | defaultText = literalExpression "config.services.pgbackrest.configurePostgresql.stanza"; | 136 | defaultText = literalExpression "config.services.pgbackrest.configurePostgresql.stanza"; |
137 | description = "Stanza"; | ||
128 | }; | 138 | }; |
129 | repo = mkOption { | 139 | repo = mkOption { |
130 | type = types.nullOr (types.strMatching "^[0-9]+$"); | 140 | type = types.nullOr (types.strMatching "^[0-9]+$"); |
141 | description = "Repository number"; | ||
131 | }; | 142 | }; |
132 | 143 | ||
133 | user = mkOption { | 144 | user = mkOption { |
134 | type = types.str; | 145 | type = types.str; |
135 | default = "postgres"; | 146 | default = "postgres"; |
147 | description = "User"; | ||
136 | }; | 148 | }; |
137 | group = mkOption { | 149 | group = mkOption { |
138 | type = types.str; | 150 | type = types.str; |
139 | default = "postgres"; | 151 | default = "postgres"; |
152 | description = "Group"; | ||
140 | }; | 153 | }; |
141 | 154 | ||
142 | timerConfig = mkOption { | 155 | timerConfig = mkOption { |
143 | type = types.attrsOf unitOption; | 156 | type = types.attrsOf unitOption; |
157 | description = "Systemd timer options"; | ||
144 | }; | 158 | }; |
145 | }; | 159 | }; |
146 | })); | 160 | })); |
147 | default = {}; | 161 | default = {}; |
162 | description = "Configure backups"; | ||
148 | }; | 163 | }; |
149 | }; | 164 | }; |
150 | }; | 165 | }; |
diff --git a/modules/postfix-mta-sts-resolver.nix b/modules/postfix-mta-sts-resolver.nix index fcbd9390..193c54fb 100644 --- a/modules/postfix-mta-sts-resolver.nix +++ b/modules/postfix-mta-sts-resolver.nix | |||
@@ -8,7 +8,7 @@ in { | |||
8 | options = { | 8 | options = { |
9 | services.postfix-mta-sts-resolver = { | 9 | services.postfix-mta-sts-resolver = { |
10 | enable = mkEnableOption "mta-sts-daemon"; | 10 | enable = mkEnableOption "mta-sts-daemon"; |
11 | package = mkPackageOption pkgs "postfix-mta-sts-resolver"; | 11 | package = mkPackageOption pkgs "postfix-mta-sts-resolver" {}; |
12 | 12 | ||
13 | redis = mkEnableOption "redis cache" // { default = true; example = false; }; | 13 | redis = mkEnableOption "redis cache" // { default = true; example = false; }; |
14 | proactive-policy-fetching = mkEnableOption "proactive policy fetching" // { default = true; example = false; }; | 14 | proactive-policy-fetching = mkEnableOption "proactive policy fetching" // { default = true; example = false; }; |
@@ -16,10 +16,12 @@ in { | |||
16 | loglevel = mkOption { | 16 | loglevel = mkOption { |
17 | type = types.enum ["debug" "info" "warn" "error" "fatal"]; | 17 | type = types.enum ["debug" "info" "warn" "error" "fatal"]; |
18 | default = "info"; | 18 | default = "info"; |
19 | description = "Loglevel"; | ||
19 | }; | 20 | }; |
20 | 21 | ||
21 | settings = mkOption { | 22 | settings = mkOption { |
22 | type = types.attrs; | 23 | type = types.attrs; |
24 | description = "Settings"; | ||
23 | }; | 25 | }; |
24 | }; | 26 | }; |
25 | }; | 27 | }; |
diff --git a/modules/postfwd.nix b/modules/postfwd.nix index e10c04a7..3edff44d 100644 --- a/modules/postfwd.nix +++ b/modules/postfwd.nix | |||
@@ -12,6 +12,7 @@ in { | |||
12 | rules = mkOption { | 12 | rules = mkOption { |
13 | type = lines; | 13 | type = lines; |
14 | default = ""; | 14 | default = ""; |
15 | description = "Rules"; | ||
15 | }; | 16 | }; |
16 | }; | 17 | }; |
17 | }; | 18 | }; |
diff --git a/modules/prometheus-lvm-exporter.nix b/modules/prometheus-lvm-exporter.nix index 7ef082c3..ad46f835 100644 --- a/modules/prometheus-lvm-exporter.nix +++ b/modules/prometheus-lvm-exporter.nix | |||
@@ -21,7 +21,7 @@ in { | |||
21 | openFirewall = mkOption { | 21 | openFirewall = mkOption { |
22 | type = types.bool; | 22 | type = types.bool; |
23 | default = false; | 23 | default = false; |
24 | description = lib.mdDoc '' | 24 | description = '' |
25 | Open port in firewall for incoming connections. | 25 | Open port in firewall for incoming connections. |
26 | ''; | 26 | ''; |
27 | }; | 27 | }; |
@@ -31,7 +31,7 @@ in { | |||
31 | example = literalExpression '' | 31 | example = literalExpression '' |
32 | "-i eth0 -p tcp -m tcp --dport ${toString cfg.port}" | 32 | "-i eth0 -p tcp -m tcp --dport ${toString cfg.port}" |
33 | ''; | 33 | ''; |
34 | description = lib.mdDoc '' | 34 | description = '' |
35 | Specify a filter for iptables to use when | 35 | Specify a filter for iptables to use when |
36 | {option}`services.prometheus.exporters.lvm.openFirewall` | 36 | {option}`services.prometheus.exporters.lvm.openFirewall` |
37 | is true. It is used as `ip46tables -I nixos-fw firewallFilter -j nixos-fw-accept`. | 37 | is true. It is used as `ip46tables -I nixos-fw firewallFilter -j nixos-fw-accept`. |
diff --git a/modules/yggdrasil/default.nix b/modules/yggdrasil/default.nix deleted file mode 100644 index f4100e73..00000000 --- a/modules/yggdrasil/default.nix +++ /dev/null | |||
@@ -1,50 +0,0 @@ | |||
1 | { config, lib, customUtils, ... }: | ||
2 | let | ||
3 | cfg = config.services.tinc.yggdrasil; | ||
4 | in { | ||
5 | options = { | ||
6 | services.tinc.yggdrasil = lib.mkOption { | ||
7 | default = {}; | ||
8 | type = lib.types.submodule { | ||
9 | options = { | ||
10 | enable = lib.mkEnableOption "Yggdrasil tinc network"; | ||
11 | |||
12 | connect = lib.mkOption { | ||
13 | default = true; | ||
14 | type = lib.types.bool; | ||
15 | description = '' | ||
16 | Connect to central server | ||
17 | ''; | ||
18 | }; | ||
19 | }; | ||
20 | }; | ||
21 | }; | ||
22 | }; | ||
23 | |||
24 | config = lib.mkIf cfg.enable { | ||
25 | services.tinc.networks.yggdrasil = { | ||
26 | name = config.networking.hostName; | ||
27 | hostSettings = customUtils.nixImport { dir = ./hosts; }; | ||
28 | debugLevel = 2; | ||
29 | interfaceType = "tap"; | ||
30 | settings = { | ||
31 | Mode = "switch"; | ||
32 | PingTimeout = 30; | ||
33 | ConnectTo = lib.mkIf cfg.connect "ymir"; | ||
34 | }; | ||
35 | }; | ||
36 | |||
37 | sops.secrets = { | ||
38 | tinc-yggdrasil-rsa = { | ||
39 | key = "rsa"; | ||
40 | path = "/etc/tinc/yggdrasil/rsa_key.priv"; | ||
41 | sopsFile = ./hosts + "/${config.services.tinc.networks.yggdrasil.name}/private-keys.yaml"; | ||
42 | }; | ||
43 | tinc-yggdrasil-ed25519 = { | ||
44 | key = "ed25519"; | ||
45 | path = "/etc/tinc/yggdrasil/rsa_key.priv"; | ||
46 | sopsFile = ./hosts + "/${config.services.tinc.networks.yggdrasil.name}/private-keys.yaml"; | ||
47 | }; | ||
48 | }; | ||
49 | }; | ||
50 | } | ||
diff --git a/modules/yggdrasil/hosts/sif/default.nix b/modules/yggdrasil/hosts/sif/default.nix deleted file mode 100644 index 32b844de..00000000 --- a/modules/yggdrasil/hosts/sif/default.nix +++ /dev/null | |||
@@ -1,13 +0,0 @@ | |||
1 | { | ||
2 | settings.Ed25519PublicKey = "qJqty+wiTNcYaHQCvQNiMqXYz30C9M3+LI/qjmU/9hK"; | ||
3 | rsaPublicKey = '' | ||
4 | -----BEGIN RSA PUBLIC KEY----- | ||
5 | MIIBCgKCAQEA0ACaacg9EN0hBQct8ZwQ/i6EsXKP4DIwKwabM2rp8azValTHU2uI | ||
6 | WW6JRY+Eii6zRx9B5kJ96C4rJJeAGV6lZPAogaC2LbM7lcsZ7oRDWZGaQKcZFNGi | ||
7 | laEcDg2dRuDx1W4at0rb03SDLNPt8sXSV6BcK9n/7m7+s9cwM/+PB8FHDMnWvwbC | ||
8 | usbP23020s+CVr/PU1z/7J0y3Eat+Acut6x5X8DNewpqV96wQpqdAggbhtYERMFH | ||
9 | +i0sa1WUDQtJ6HGChbENRTMlsPJ6lnzXY+J0pzatzzvetLsOljES9uJ8dtk6qBC7 | ||
10 | KRZo5lvdUwR6j9XiHMQeRerUt23b9ATFXQIDAQAB | ||
11 | -----END RSA PUBLIC KEY----- | ||
12 | ''; | ||
13 | } | ||
diff --git a/modules/yggdrasil/hosts/sif/private-keys.yaml b/modules/yggdrasil/hosts/sif/private-keys.yaml deleted file mode 100644 index 0c4274d1..00000000 --- a/modules/yggdrasil/hosts/sif/private-keys.yaml +++ /dev/null | |||
@@ -1,31 +0,0 @@ | |||
1 | ed25519: ENC[AES256_GCM,data:1CqB4y6CIm5JUsznpXPqqLJqCKmmoAJOZQTWb7+Jbn0oZMX27qSMK4CchHF7Bmo24EK8rk5EyW5aQLnoxp/2NA62p8SXdaoI8Qgz3EgsQ5QrlJrt1jvERpNs4vttT9V6+aK3Yojr9IuQSvJ4jyKSLrzrTnLzF9pXlaOf1Ru5SxySRWtVzynzurRpdUVS6goE+lb+Irg6x2geV719iQ9bu1C2smeQDREdS+dlfoxp02/pU6kTFA7KAm5vA91HKEfMqfSEzuBgUB0=,iv:n6Yh0zZ9AbT+83P42QNO2rCCISJV5nbO9wYcwaRYD2E=,tag:dJpXV9ZzLSO1B+LsyV3vAg==,type:str] | ||
2 | rsa: ENC[AES256_GCM,data:7faQJAhoYt3MJidg4TVwysmLGZ4V1fA9NYYKgEMgky4q0Q9tBGhEsA60uj7iKcMMRhGku7feIFkj2+1qjKy+e1Bajfs2rqxgyqYmM6yOTrmorbXBVyrPOTOwJp3yp7O1vIXwoUS9vWIYxFszpfaLL0/8aARYVrYmpxf3gsBfQ4LciM1VKEgjG3uRBf1tDLaNuMNyzdan0DFghwuDojPOXUFv/6yuPxU2U0TagVjwAk4FThGwEasvV454RSm/GmqYtX+P4Vc3pEWNYAK1rXJAuXm1392Uash+HGQ+3ln5N9yWneewgPPr0pePAugxxN0qnwhy5MRKGQE3ZHCZ0beslfOm6pkmYTfww3lKNIJGabMfMD3COoAI7zWebUvksZPsgH6f1olbzABkZdS1s//WNMnWQHGxsWePXkLFe8bfnNXouEXHtLvQ7On0KPyt8y5QBI9bDPpTn92/O9jCevXSttrez4buBdCHFmCE8xgW5JKKEXgMubPPjEF3MABiGu0TMeWM4a1ibY7HfvNrRkO1pE9RhdRT/dFV/MrPxk7P0k16x9H4+QnE7VglfNZO3Wd3bnYxcH7hmAbIzpFnUJvolyNfmynwL2WwaYuBskXASD1FuqpM0tbhantqGyHVPe62+KimU0zDAJ1HMyqhIN0MD1MSXsdoItAsw033GYLB83L8xPatARJR9qEdKwrhmgSDY36AbJ8VI/RUzicZoYdhK8+M7bNGIkD5MgrQO35q+3oa6Xcib+5MtW0RVJKLP4y5/XNkjd4EPl6nahcVi63/FG7LJmO+/I7bkLIAWmIq8BHcXEwbz0womYp404pSfEPr3cy1N5S3yqRdzVxavTJb0PLMpHq2rWuHK2DIY77hEOAt0XcReWYsRkmTl+v9iQLF+D4GBLr+O2oZNJrocNVZYkfdjsrUd2cUOCV7ZQphO5Yc+yKrqzmCqUUvdoJ3vlaPxMXx4LACeMImo1sAFxoOgIpyfklo/bdhi9osiL55I8pAIh5hGes/uCbwaRnW+wbaYcMliCuUO8XelfXwBot8W+0l0wk2zKRSKtYKcX1n/Ax5mIt6mIoQkvyL82lccS9ppJLjt7DYlvK8L6imeV11ATf1ZhSGB3c67/XYik5BXz827Rj29K6fg/CvU65f/bEAuE39gSJ4mHsRl3bvkNLiUMEBrDuZnText33fCbqVA5DUIfqSbLUzXtqNl8vHnlOBICYwjv8PtUMJ6VTCDu33SmtQzJAfnmuewOKAC51FPsyaDhouTKllUaqx34NfEP8k2C8/4oNPgDcLjInm3f43tIuJbScdp8ltNVCLoChS8jbBOvrVYTI0eP+BuAuEfWYldUYq96oH/x9d0yvPqZ1rnwmqg4y6GfkACw6+/QvrDdtcM+1uI86RxZ7KGurb8KG7NPdSWhzz+72+TO5Tq29K8QETLzzalnVzaVWj/xGsjgkslxmDMKxLJQw0o24lgg/R30aU9BL6YwDVi10nu+Tv5kayb/NVLdMNWxfKNg1KZcf8M2ApgonjingbpUlinZ25/IIcQB9lMT4HSyvtGtIqnsPL4SQNsgBLcMzdwbL0EvS3qMAEVWKfUm2v9AA2+RMsKEKtD4UNF2xF7oACJiyTcw/xUOmkaTIZZ2ev0JVb4IYs1qx5Skz+IMAvWQ2FjBMXna5e/LYgBl6kdLSTcDvlymHpbjjuRdRq+uq+ZMXIACyZ+qUnZ0qcfWGPxOCI0hXPc5ac/zSGkPKYiWT/rCSuo+MoijjK4YZ2fub9TCYjZRS+QvLlXOM8F06Or0jQQOveezqJFZdoBGj248BtcPAVbYqfaytIlYjARlhQL/lKaaOrbONk6kIlDpwkhlzO50OkhALItlbW4Aa8zZ/WeXkfkb/6A7NLce42XDoOnvZt9UdYVTRphf8yxjRE2YMwZsmeTIieg8KwwJdnoJIhiQFdVDFgXb2xPZA2CbdvZwGwuFkLWgJUg6H+aHdw39UnNM+S9PYaOQ9oaS7IyeWhXMgP7TKM98uILsBg/Xn9tafHaslQfjVRDEaYtrmDZMYhb+h/MZKngx7uwmUyqHszAYN/M+RMJVy3s4uBu/EufWYVMorunpPEXGYA4Rg1HUuAOvWSvpM3PJG9Wnrazw6xmkwIUSKju5irpWATYmqSX3pPkG5C0sTatszVDAvTs9+/9Xdbney7/6QskSHMph8Kn/Udpq7PPrZWADkIi1k4oibgABOXOWBk5ZbNbiDrZA==,iv:ZUAqvOpcVCXQD2PFzUh0e2m20t6gVT3mYb7S50iV/m8=,tag:AssxMqjVUEwQ4R6Y7eG9Tg==,type:str] | ||
3 | sops: | ||
4 | kms: [] | ||
5 | gcp_kms: [] | ||
6 | azure_kv: [] | ||
7 | hc_vault: [] | ||
8 | age: | ||
9 | - recipient: age1rmmhetcmllq0ahl5qznlr0eya2zdxwl9h6y5wnl97d2wtyx5t99sm2u866 | ||
10 | enc: | | ||
11 | -----BEGIN AGE ENCRYPTED FILE----- | ||
12 | YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBiTjludkxXUm5OREx4Zndk | ||
13 | czI0VmMxUE5kOHVKQ1lTL1RvQXlIQ3FhWFRVCmVXbmFqNTBDNy94RDJtakQra0lh | ||
14 | a2JrZlBxWFNVVFh6WFU3bjBwaFVIa1kKLS0tIFNObGZvVmpuQlU4SFBjZk45dlJM | ||
15 | d3VHVVZsVGlBd2craGNVbHdoeUpyVFEK/Tj9QVqAOWmAJv/PESvIOnnIbZkKof6E | ||
16 | HHaEYANQTp5kLyWaz4rfJiiQOP2bL5hDr1XV61mf6y9W8m9w4IynHg== | ||
17 | -----END AGE ENCRYPTED FILE----- | ||
18 | - recipient: age1fj65apkhfkrwyv5tx6zcs9nkjg8267fy733qph30sc7zfn7vapjqkd5kne | ||
19 | enc: | | ||
20 | -----BEGIN AGE ENCRYPTED FILE----- | ||
21 | YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB6L2lSdUUvSE1iUTEvdkxm | ||
22 | Nm4vV3MySWlTdldMZEw2dEhtSlZCb0wvL0VBCnJxY2dNUlJhcktQNVVOdHhPemJF | ||
23 | ZUJ3NUR0ZTRZdFkwMmExR2gwOHFlMTQKLS0tIHhLbkZQalBuNm5mRHBVQ1NNbGM4 | ||
24 | YUNsNE8vbnk0RnpRbHB5azM2NmdmKzAKwUVFQHvBvGjc/mGI9lhkW86ovUVvUxok | ||
25 | O6QelapJHGP2gQ3aZBk8eFJJs7Ve+q1yiQUbO34BFFdIfRyiObmbKw== | ||
26 | -----END AGE ENCRYPTED FILE----- | ||
27 | lastmodified: "2021-01-02T14:46:16Z" | ||
28 | mac: ENC[AES256_GCM,data:Phng7z7UlE6nO3FFIQPOHgKCqDm2uOGL57ryJbokjipSSdoWPinpz0zIJv9Z67b9uOf3CQoGtV4YwcudNkzDBKOyD8uA6RYwCKpbYcZIdiy8DLL46+VT/wq9toTkeDXM6jKupzzOARZhHT8DCOLqW7u8Q3S645cbTJmw0+LMIGk=,iv:y4KEh0+bKhtnSobKVdfaPuRsueNC1lcrEbUGfEAn+Bg=,tag:3Oi4e/hSgPVsoFQpnVQj+g==,type:str] | ||
29 | pgp: [] | ||
30 | unencrypted_suffix: _unencrypted | ||
31 | version: 3.6.1 | ||
diff --git a/modules/yggdrasil/hosts/ymir.nix b/modules/yggdrasil/hosts/ymir.nix deleted file mode 100644 index b77a9216..00000000 --- a/modules/yggdrasil/hosts/ymir.nix +++ /dev/null | |||
@@ -1,19 +0,0 @@ | |||
1 | { | ||
2 | addresses = [{ address = "ymir.yggdrasil.li"; }]; | ||
3 | settings.Ed25519PublicKey = "b/SobnMqByzHOQeO+iU7OZ1liD8a++knbi5ebNawnaC"; | ||
4 | rsaPublicKey = '' | ||
5 | -----BEGIN RSA PUBLIC KEY----- | ||
6 | MIICCgKCAgEAuInSfQf5euFXEVkLLzf9TumQJ+3WRsxX4uKdOXBqrIC7yjSBP8j9 | ||
7 | ql5rNWPzgXxFF5ERmwW+E3cyzJLU9Htu7r3muqM6nhSZizhCskifPRFc3e5ssSke | ||
8 | XhHICHfe90+qvab/hWx/NjkW59bBYIzDuJfq+ijDFMVNgOxaiM2f3/2prUUhP7bN | ||
9 | r3wVI8KCkOaknc0SOOmOhLzfJaD5wosqLOjgaNhlro2eMgMjQlxbyW8dVVgjwseR | ||
10 | Cl/mpu7r1pSMhS66RFH68wDoC3X81f7Zs9ZGDLTD8KXWhx0qgUMUAH4n6YGY0RM6 | ||
11 | BZ3qR/3KFRU64QPVAERpb0JdsU9ggCVydHkjrWW23ptHOPAOO5+yQj7tSDCKTRy9 | ||
12 | dHMQnbtPrgAb6iMhO1XTxA8Hdta1sCHsewsQekarwsA1bmk3hTgi/k8vwoGDUWtk | ||
13 | jgiDEPuutfmH4C6qxq9s+6lRboNKH8wgkVGpHiaq7mmePFdhzFdrj4+fYAMZTbil | ||
14 | 2iygsJ+yFOjA7U+iT6QDK33/MLsrQg0Ue6RPiG1qnDyax7gBAjz52iWkiuSkUXk0 | ||
15 | E5ImdP4XMILgGcWk8iPq5iRS03edE0pCpxGX3ZZwFE5+CoXgO6wR1ToL1vZEEHMQ | ||
16 | SHJPufKjkavPKbejPps/mLaJQVw3W10PAJssB9nxW2aHX3n0ugGaIvMCAwEAAQ== | ||
17 | -----END RSA PUBLIC KEY----- | ||
18 | ''; | ||
19 | } | ||
diff --git a/overlays/postfix-mta-sts-resolver/default.nix b/overlays/postfix-mta-sts-resolver/default.nix index 49fbb7c9..d930cefb 100644 --- a/overlays/postfix-mta-sts-resolver/default.nix +++ b/overlays/postfix-mta-sts-resolver/default.nix | |||
@@ -3,6 +3,7 @@ | |||
3 | postfix-mta-sts-resolver = | 3 | postfix-mta-sts-resolver = |
4 | with prev.poetry2nix; | 4 | with prev.poetry2nix; |
5 | mkPoetryApplication { | 5 | mkPoetryApplication { |
6 | python = prev.python311; | ||
6 | inherit (sources.postfix-mta-sts-resolver) pname version; | 7 | inherit (sources.postfix-mta-sts-resolver) pname version; |
7 | projectDir = cleanPythonSources { | 8 | projectDir = cleanPythonSources { |
8 | src = prev.runCommand "sources" {} '' | 9 | src = prev.runCommand "sources" {} '' |
diff --git a/overlays/preserve-dscp/default.nix b/overlays/preserve-dscp/default.nix index 73721083..a1064591 100644 --- a/overlays/preserve-dscp/default.nix +++ b/overlays/preserve-dscp/default.nix | |||
@@ -10,7 +10,8 @@ | |||
10 | buildFlags = [ "preserve-dscp" ]; | 10 | buildFlags = [ "preserve-dscp" ]; |
11 | 11 | ||
12 | CPATH = prev.lib.makeSearchPathOutput "dev" "include" (buildInputs ++ nativeBuildInputs); | 12 | CPATH = prev.lib.makeSearchPathOutput "dev" "include" (buildInputs ++ nativeBuildInputs); |
13 | BPF_CFLAGS = "-Wno-unused-command-line-argument -fno-stack-protector"; | 13 | BPF_CFLAGS = "-Wno-unused-command-line-argument"; |
14 | hardeningDisable = [ "stackprotector" "zerocallusedregs" ]; | ||
14 | 15 | ||
15 | outputs = [ "out" "lib" ]; | 16 | outputs = [ "out" "lib" ]; |
16 | 17 | ||
diff --git a/system-profiles/core/default.nix b/system-profiles/core/default.nix index 6aee221f..c2c821b7 100644 --- a/system-profiles/core/default.nix +++ b/system-profiles/core/default.nix | |||
@@ -74,7 +74,7 @@ in { | |||
74 | }; | 74 | }; |
75 | in foldr (def: mergeConfig def.value) {}; | 75 | in foldr (def: mergeConfig def.value) {}; |
76 | }; | 76 | }; |
77 | description = mdDoc '' | 77 | description = '' |
78 | The configuration of the Nix Packages collection. (For | 78 | The configuration of the Nix Packages collection. (For |
79 | details, see the Nixpkgs documentation.) It allows you to set | 79 | details, see the Nixpkgs documentation.) It allows you to set |
80 | package configuration options. | 80 | package configuration options. |
@@ -91,96 +91,113 @@ in { | |||
91 | }; | 91 | }; |
92 | }; | 92 | }; |
93 | 93 | ||
94 | config = { | 94 | config = foldr recursiveUpdate {} ([ |
95 | networking.hostName = hostName; | 95 | { |
96 | system.configurationRevision = mkIf (flake ? rev) flake.rev; | 96 | networking.hostName = hostName; |
97 | system.configurationRevision = mkIf (flake ? rev) flake.rev; | ||
97 | 98 | ||
98 | nixpkgs.pkgs = import (flakeInputs.${config.nixpkgs.flakeInput}.outPath + "/pkgs/top-level") { | 99 | nixpkgs.pkgs = import (flakeInputs.${config.nixpkgs.flakeInput}.outPath + "/pkgs/top-level") { |
99 | overlays = attrValues flake.overlays; | 100 | overlays = attrValues flake.overlays; |
100 | config = config.nixpkgs.externalConfig; | 101 | config = config.nixpkgs.externalConfig; |
101 | localSystem = config.nixpkgs.system; | 102 | localSystem = config.nixpkgs.system; |
102 | }; | 103 | }; |
103 | 104 | ||
104 | nix = { | 105 | nix = { |
105 | package = if builtins.hasAttr "latest" pkgs.nixVersions then pkgs.nixVersions.latest else pkgs.nixUnstable; | 106 | package = if builtins.hasAttr "latest" pkgs.nixVersions then pkgs.nixVersions.latest else pkgs.nixUnstable; |
106 | settings = { | 107 | settings = { |
107 | sandbox = true; | 108 | sandbox = true; |
108 | allowed-users = [ "*" ]; | 109 | allowed-users = [ "*" ]; |
109 | trusted-users = [ "root" "@wheel" ]; | 110 | trusted-users = [ "root" "@wheel" ]; |
110 | 111 | ||
111 | experimental-features = ["nix-command" "flakes" "auto-allocate-uids" "cgroups"]; | 112 | experimental-features = ["nix-command" "flakes" "auto-allocate-uids" "cgroups"]; |
112 | auto-allocate-uids = true; | 113 | auto-allocate-uids = true; |
113 | use-cgroups = true; | 114 | use-cgroups = true; |
114 | use-xdg-base-directories = true; | 115 | use-xdg-base-directories = true; |
115 | 116 | ||
116 | flake-registry = "${flakeInputs.flake-registry}/flake-registry.json"; | 117 | flake-registry = "${flakeInputs.flake-registry}/flake-registry.json"; |
118 | }; | ||
119 | nixPath = [ | ||
120 | "nixpkgs=${pkgs.runCommand "nixpkgs" {} '' | ||
121 | mkdir $out | ||
122 | ln -s ${./nixpkgs.nix} $out/default.nix | ||
123 | ln -s /run/nixpkgs/lib $out/lib | ||
124 | ''}" | ||
125 | ]; | ||
126 | registry = | ||
127 | let override = { self = "nixos"; }; | ||
128 | in mapAttrs' (inpName: inpFlake: nameValuePair | ||
129 | (override.${inpName} or inpName) | ||
130 | { flake = inpFlake; } ) flakeInputs; | ||
117 | }; | 131 | }; |
118 | nixPath = [ | 132 | |
119 | "nixpkgs=${pkgs.runCommand "nixpkgs" {} '' | 133 | systemd.tmpfiles.rules = [ |
120 | mkdir $out | 134 | "L+ /run/nixpkgs - - - - ${flakeInputs.nixpkgs.outPath}" |
121 | ln -s ${./nixpkgs.nix} $out/default.nix | 135 | "L+ /run/nixpkgs-overlays.nix - - - - ${pkgs.writeText "overlays.nix" '' |
122 | ln -s /run/nixpkgs/lib $out/lib | 136 | with builtins; |
137 | |||
138 | attrValues (import | ||
139 | ( | ||
140 | let lock = fromJSON (readFile ${flake + "/flake.lock"}); in | ||
141 | fetchTarball { | ||
142 | url = "https://github.com/edolstra/flake-compat/archive/''${lock.nodes.flake-compat.locked.rev}.tar.gz"; | ||
143 | sha256 = lock.nodes.flake-compat.locked.narHash; | ||
144 | } | ||
145 | ) | ||
146 | { src = ${flake}; } | ||
147 | ).defaultNix.overlays | ||
123 | ''}" | 148 | ''}" |
149 | "L+ /etc/nixos - - - - ${flake}" | ||
124 | ]; | 150 | ]; |
125 | registry = | ||
126 | let override = { self = "nixos"; }; | ||
127 | in mapAttrs' (inpName: inpFlake: nameValuePair | ||
128 | (override.${inpName} or inpName) | ||
129 | { flake = inpFlake; } ) flakeInputs; | ||
130 | }; | ||
131 | |||
132 | systemd.tmpfiles.rules = [ | ||
133 | "L+ /run/nixpkgs - - - - ${flakeInputs.nixpkgs.outPath}" | ||
134 | "L+ /run/nixpkgs-overlays.nix - - - - ${pkgs.writeText "overlays.nix" '' | ||
135 | with builtins; | ||
136 | |||
137 | attrValues (import | ||
138 | ( | ||
139 | let lock = fromJSON (readFile ${flake + "/flake.lock"}); in | ||
140 | fetchTarball { | ||
141 | url = "https://github.com/edolstra/flake-compat/archive/''${lock.nodes.flake-compat.locked.rev}.tar.gz"; | ||
142 | sha256 = lock.nodes.flake-compat.locked.narHash; | ||
143 | } | ||
144 | ) | ||
145 | { src = ${flake}; } | ||
146 | ).defaultNix.overlays | ||
147 | ''}" | ||
148 | ]; | ||
149 | |||
150 | users.mutableUsers = false; | ||
151 | 151 | ||
152 | # documentation.nixos.includeAllModules = true; # incompatible with home-manager (build fails) | 152 | users.mutableUsers = false; |
153 | 153 | ||
154 | home-manager = { | 154 | documentation.nixos = { |
155 | useGlobalPkgs = true; # Otherwise home-manager would only work impurely | 155 | includeAllModules = true; |
156 | useUserPackages = false; | 156 | options.warningsAreErrors = false; |
157 | backupFileExtension = "bak"; | 157 | }; |
158 | }; | ||
159 | 158 | ||
160 | sops = mkIf hasSops { | 159 | home-manager = { |
161 | age = { | 160 | useGlobalPkgs = true; # Otherwise home-manager would only work impurely |
162 | keyFile = "/var/lib/sops-nix/key.txt"; | 161 | useUserPackages = false; |
163 | generateKey = false; | 162 | backupFileExtension = "bak"; |
164 | sshKeyPaths = []; | ||
165 | }; | 163 | }; |
166 | gnupg = { | 164 | |
167 | home = null; | 165 | sops = mkIf hasSops { |
168 | sshKeyPaths = []; | 166 | age = { |
167 | keyFile = "/var/lib/sops-nix/key.txt"; | ||
168 | generateKey = false; | ||
169 | sshKeyPaths = []; | ||
170 | }; | ||
171 | gnupg = { | ||
172 | home = null; | ||
173 | sshKeyPaths = []; | ||
174 | }; | ||
169 | }; | 175 | }; |
170 | }; | ||
171 | 176 | ||
172 | programs.git = { | 177 | programs.git = { |
173 | enable = true; | 178 | enable = true; |
174 | lfs.enable = true; | 179 | lfs.enable = true; |
180 | }; | ||
181 | environment.systemPackages = with pkgs; [ git-annex scutiger ]; | ||
182 | } | ||
183 | ] ++ (optional (options ? system.switch.enableNg) { | ||
184 | system.switch = lib.mkDefault { | ||
185 | enable = false; | ||
186 | enableNg = true; | ||
175 | }; | 187 | }; |
176 | environment.systemPackages = with pkgs; [ git-annex scutiger ]; | 188 | }) |
177 | 189 | ++ (optional (options ? system.etc) { | |
178 | system.activationScripts.symlink-flake = '' | 190 | boot.initrd.systemd.enable = lib.mkDefault true; |
179 | if test -L /etc/nixos; then | 191 | system.etc.overlay.enable = lib.mkDefault true; |
180 | ln -nsf ${flake} /etc/nixos | 192 | systemd.sysusers.enable = lib.mkDefault true; |
181 | elif test -d /etc/nixos && rmdir --ignore-fail-on-non-empty /etc/nixos; then | 193 | |
182 | ln -s ${flake} /etc/nixos | 194 | # Random perl remnants |
183 | fi | 195 | system.disableInstallerTools = lib.mkDefault true; |
184 | ''; | 196 | programs.less.lessopen = lib.mkDefault null; |
185 | }; | 197 | programs.command-not-found.enable = lib.mkDefault false; |
198 | boot.enableContainers = lib.mkDefault false; | ||
199 | boot.loader.grub.enable = lib.mkDefault false; | ||
200 | environment.defaultPackages = lib.mkDefault [ ]; | ||
201 | documentation.info.enable = lib.mkDefault false; | ||
202 | })); | ||
186 | } | 203 | } |
diff --git a/system-profiles/initrd-ssh/module.nix b/system-profiles/initrd-ssh/module.nix index 2e75a8c4..db973b72 100644 --- a/system-profiles/initrd-ssh/module.nix +++ b/system-profiles/initrd-ssh/module.nix | |||
@@ -15,7 +15,7 @@ in | |||
15 | enable = mkOption { | 15 | enable = mkOption { |
16 | type = types.bool; | 16 | type = types.bool; |
17 | default = false; | 17 | default = false; |
18 | description = lib.mdDoc '' | 18 | description = '' |
19 | Start SSH service during initrd boot. It can be used to debug failing | 19 | Start SSH service during initrd boot. It can be used to debug failing |
20 | boot on a remote server, enter pasphrase for an encrypted partition etc. | 20 | boot on a remote server, enter pasphrase for an encrypted partition etc. |
21 | Service is killed when stage-1 boot is finished. | 21 | Service is killed when stage-1 boot is finished. |
@@ -28,7 +28,7 @@ in | |||
28 | port = mkOption { | 28 | port = mkOption { |
29 | type = types.port; | 29 | type = types.port; |
30 | default = 22; | 30 | default = 22; |
31 | description = lib.mdDoc '' | 31 | description = '' |
32 | Port on which SSH initrd service should listen. | 32 | Port on which SSH initrd service should listen. |
33 | ''; | 33 | ''; |
34 | }; | 34 | }; |
@@ -36,7 +36,7 @@ in | |||
36 | shell = mkOption { | 36 | shell = mkOption { |
37 | type = types.str; | 37 | type = types.str; |
38 | default = "/bin/ash"; | 38 | default = "/bin/ash"; |
39 | description = lib.mdDoc '' | 39 | description = '' |
40 | Login shell of the remote user. Can be used to limit actions user can do. | 40 | Login shell of the remote user. Can be used to limit actions user can do. |
41 | ''; | 41 | ''; |
42 | }; | 42 | }; |
@@ -48,7 +48,7 @@ in | |||
48 | "/etc/secrets/initrd/ssh_host_rsa_key" | 48 | "/etc/secrets/initrd/ssh_host_rsa_key" |
49 | "/etc/secrets/initrd/ssh_host_ed25519_key" | 49 | "/etc/secrets/initrd/ssh_host_ed25519_key" |
50 | ]; | 50 | ]; |
51 | description = lib.mdDoc '' | 51 | description = '' |
52 | Specify SSH host keys to import into the initrd. | 52 | Specify SSH host keys to import into the initrd. |
53 | 53 | ||
54 | To generate keys, use | 54 | To generate keys, use |
@@ -80,7 +80,7 @@ in | |||
80 | type = types.listOf types.str; | 80 | type = types.listOf types.str; |
81 | default = config.users.users.root.openssh.authorizedKeys.keys; | 81 | default = config.users.users.root.openssh.authorizedKeys.keys; |
82 | defaultText = literalExpression "config.users.users.root.openssh.authorizedKeys.keys"; | 82 | defaultText = literalExpression "config.users.users.root.openssh.authorizedKeys.keys"; |
83 | description = lib.mdDoc '' | 83 | description = '' |
84 | Authorized keys for the root user on initrd. | 84 | Authorized keys for the root user on initrd. |
85 | ''; | 85 | ''; |
86 | }; | 86 | }; |
@@ -88,7 +88,7 @@ in | |||
88 | extraConfig = mkOption { | 88 | extraConfig = mkOption { |
89 | type = types.lines; | 89 | type = types.lines; |
90 | default = ""; | 90 | default = ""; |
91 | description = lib.mdDoc "Verbatim contents of {file}`sshd_config`."; | 91 | description = "Verbatim contents of {file}`sshd_config`."; |
92 | }; | 92 | }; |
93 | }; | 93 | }; |
94 | 94 | ||
diff --git a/system-profiles/nfsroot.nix b/system-profiles/nfsroot.nix index 4323765b..1cd930d9 100644 --- a/system-profiles/nfsroot.nix +++ b/system-profiles/nfsroot.nix | |||
@@ -1,4 +1,4 @@ | |||
1 | { config, pkgs, lib, flake, flakeInputs, ... }: | 1 | { config, options, pkgs, lib, flake, flakeInputs, ... }: |
2 | 2 | ||
3 | with lib; | 3 | with lib; |
4 | 4 | ||
@@ -14,99 +14,111 @@ in { | |||
14 | storeDevice = mkOption { | 14 | storeDevice = mkOption { |
15 | type = types.str; | 15 | type = types.str; |
16 | default = "nfsroot:nix-store"; | 16 | default = "nfsroot:nix-store"; |
17 | description = "Nix store device"; | ||
17 | }; | 18 | }; |
18 | 19 | ||
19 | registrationUrl = mkOption { | 20 | registrationUrl = mkOption { |
20 | type = types.str; | 21 | type = types.str; |
21 | default = "http://nfsroot/nix-registration"; | 22 | default = "http://nfsroot/nix-registration"; |
23 | description = "Url of nix store registrations"; | ||
22 | }; | 24 | }; |
23 | }; | 25 | }; |
24 | 26 | ||
25 | system.build = { | 27 | system.build = { |
26 | storeContents = mkOption {}; | 28 | storeContents = mkOption { |
29 | description = "Contents of nix store"; | ||
30 | }; | ||
27 | }; | 31 | }; |
28 | }; | 32 | }; |
29 | 33 | ||
30 | config = { | 34 | config = foldr recursiveUpdate {} ([ |
31 | # Don't build the GRUB menu builder script, since we don't need it | 35 | { |
32 | # here and it causes a cyclic dependency. | 36 | # Don't build the GRUB menu builder script, since we don't need it |
33 | boot.loader.grub.enable = false; | 37 | # here and it causes a cyclic dependency. |
34 | 38 | boot.loader.grub.enable = false; | |
35 | # !!! Hack - attributes expected by other modules. | 39 | |
36 | environment.systemPackages = [ pkgs.grub2_efi ] | 40 | # !!! Hack - attributes expected by other modules. |
37 | ++ (if pkgs.stdenv.hostPlatform.system == "aarch64-linux" | 41 | environment.systemPackages = [ pkgs.grub2_efi ] |
38 | then [] | 42 | ++ (if pkgs.stdenv.hostPlatform.system == "aarch64-linux" |
39 | else [ pkgs.grub2 pkgs.syslinux ]); | 43 | then [] |
40 | 44 | else [ pkgs.grub2 pkgs.syslinux ]); | |
41 | # In stage 1, mount a tmpfs on top of /nix/store (the squashfs | 45 | |
42 | # image) to make this a live CD. | 46 | # In stage 1, mount a tmpfs on top of /nix/store (the squashfs |
43 | fileSystems."/nix/.ro-store" = mkImageMediaOverride | 47 | # image) to make this a live CD. |
44 | { fsType = "nfs4"; | 48 | fileSystems."/nix/.ro-store" = mkImageMediaOverride |
45 | device = cfg.storeDevice; | 49 | { fsType = "nfs4"; |
46 | options = [ "ro" ]; | 50 | device = cfg.storeDevice; |
47 | neededForBoot = true; | 51 | options = [ "ro" ]; |
48 | }; | 52 | neededForBoot = true; |
53 | }; | ||
54 | |||
55 | fileSystems."/nix/.rw-store" = mkImageMediaOverride | ||
56 | { fsType = "tmpfs"; | ||
57 | options = [ "mode=0755" ]; | ||
58 | neededForBoot = true; | ||
59 | }; | ||
60 | |||
61 | fileSystems."/nix/store" = mkImageMediaOverride | ||
62 | { fsType = "overlay"; | ||
63 | device = "overlay"; | ||
64 | options = [ | ||
65 | "lowerdir=/nix/.ro-store" | ||
66 | "upperdir=/nix/.rw-store/store" | ||
67 | "workdir=/nix/.rw-store/work" | ||
68 | ]; | ||
69 | |||
70 | depends = [ | ||
71 | "/nix/.ro-store" | ||
72 | "/nix/.rw-store/store" | ||
73 | "/nix/.rw-store/work" | ||
74 | ]; | ||
75 | }; | ||
76 | |||
77 | nix.settings.use-sqlite-wal = false; | ||
78 | |||
79 | boot.initrd.availableKernelModules = [ "nfs" "nfsv4" "overlay" ]; | ||
80 | boot.initrd.supportedFilesystems = [ "nfs" "nfsv4" "overlay" ]; | ||
81 | services.rpcbind.enable = mkImageMediaOverride false; | ||
82 | |||
83 | boot.initrd.network.enable = true; | ||
84 | boot.initrd.network.flushBeforeStage2 = false; # otherwise nfs doesn't work | ||
85 | boot.initrd.postMountCommands = '' | ||
86 | mkdir -p /mnt-root/etc/ | ||
87 | cp /etc/resolv.conf /mnt-root/etc/resolv.conf | ||
88 | ''; | ||
89 | networking.useDHCP = true; | ||
90 | networking.resolvconf.enable = false; | ||
91 | networking.dhcpcd.persistent = true; | ||
49 | 92 | ||
50 | fileSystems."/nix/.rw-store" = mkImageMediaOverride | ||
51 | { fsType = "tmpfs"; | ||
52 | options = [ "mode=0755" ]; | ||
53 | neededForBoot = true; | ||
54 | }; | ||
55 | 93 | ||
56 | fileSystems."/nix/store" = mkImageMediaOverride | 94 | system.build.storeContents = [config.system.build.toplevel]; |
57 | { fsType = "overlay"; | ||
58 | device = "overlay"; | ||
59 | options = [ | ||
60 | "lowerdir=/nix/.ro-store" | ||
61 | "upperdir=/nix/.rw-store/store" | ||
62 | "workdir=/nix/.rw-store/work" | ||
63 | ]; | ||
64 | |||
65 | depends = [ | ||
66 | "/nix/.ro-store" | ||
67 | "/nix/.rw-store/store" | ||
68 | "/nix/.rw-store/work" | ||
69 | ]; | ||
70 | }; | ||
71 | 95 | ||
72 | nix.settings.use-sqlite-wal = false; | 96 | system.build.netbootIpxeScript = pkgs.writeTextDir "netboot.ipxe" '' |
73 | 97 | #!ipxe | |
74 | boot.initrd.availableKernelModules = [ "nfs" "nfsv4" "overlay" ]; | 98 | # Use the cmdline variable to allow the user to specify custom kernel params |
75 | boot.initrd.supportedFilesystems = [ "nfs" "nfsv4" "overlay" ]; | 99 | # when chainloading this script from other iPXE scripts like netboot.xyz |
76 | services.rpcbind.enable = mkImageMediaOverride false; | 100 | kernel ${pkgs.stdenv.hostPlatform.linux-kernel.target} init=${config.system.build.toplevel}/init initrd=initrd ${toString config.boot.kernelParams} ''${cmdline} |
77 | 101 | initrd initrd | |
78 | boot.initrd.network.enable = true; | 102 | boot |
79 | boot.initrd.network.flushBeforeStage2 = false; # otherwise nfs doesn't work | ||
80 | boot.initrd.postMountCommands = '' | ||
81 | mkdir -p /mnt-root/etc/ | ||
82 | cp /etc/resolv.conf /mnt-root/etc/resolv.conf | ||
83 | ''; | ||
84 | networking.useDHCP = true; | ||
85 | networking.resolvconf.enable = false; | ||
86 | networking.dhcpcd.persistent = true; | ||
87 | |||
88 | |||
89 | system.build.storeContents = [config.system.build.toplevel]; | ||
90 | |||
91 | system.build.netbootIpxeScript = pkgs.writeTextDir "netboot.ipxe" '' | ||
92 | #!ipxe | ||
93 | # Use the cmdline variable to allow the user to specify custom kernel params | ||
94 | # when chainloading this script from other iPXE scripts like netboot.xyz | ||
95 | kernel ${pkgs.stdenv.hostPlatform.linux-kernel.target} init=${config.system.build.toplevel}/init initrd=initrd ${toString config.boot.kernelParams} ''${cmdline} | ||
96 | initrd initrd | ||
97 | boot | ||
98 | ''; | ||
99 | |||
100 | boot.postBootCommands = | ||
101 | '' | ||
102 | # After booting, register the contents of the Nix store on NFS | ||
103 | # in the Nix database in the tmpfs. | ||
104 | ${pkgs.curl}/bin/curl ${escapeShellArg cfg.registrationUrl} | ${config.nix.package.out}/bin/nix-store --load-db | ||
105 | |||
106 | # nixos-rebuild also requires a "system" profile and an | ||
107 | # /etc/NIXOS tag. | ||
108 | touch /etc/NIXOS | ||
109 | ${config.nix.package}/bin/nix-env -p /nix/var/nix/profiles/system --set /run/current-system | ||
110 | ''; | 103 | ''; |
111 | }; | 104 | |
105 | boot.postBootCommands = | ||
106 | '' | ||
107 | # After booting, register the contents of the Nix store on NFS | ||
108 | # in the Nix database in the tmpfs. | ||
109 | ${pkgs.curl}/bin/curl ${escapeShellArg cfg.registrationUrl} | ${config.nix.package.out}/bin/nix-store --load-db | ||
110 | |||
111 | # nixos-rebuild also requires a "system" profile and an | ||
112 | # /etc/NIXOS tag. | ||
113 | touch /etc/NIXOS | ||
114 | ${config.nix.package}/bin/nix-env -p /nix/var/nix/profiles/system --set /run/current-system | ||
115 | ''; | ||
116 | |||
117 | boot.initrd.systemd.enable = false; | ||
118 | } | ||
119 | ] ++ (optional (options ? system.etc) { | ||
120 | system.etc.overlay.enable = false; | ||
121 | }) ++ (optional (options ? system.sysusers) { | ||
122 | systemd.sysusers.enable = false; | ||
123 | })); | ||
112 | } | 124 | } |
diff --git a/user-profiles/yt-dlp.nix b/user-profiles/yt-dlp.nix index 550d6a78..fda29111 100644 --- a/user-profiles/yt-dlp.nix +++ b/user-profiles/yt-dlp.nix | |||
@@ -28,6 +28,7 @@ | |||
28 | # "youtube:formats=dashy" | 28 | # "youtube:formats=dashy" |
29 | # ]; | 29 | # ]; |
30 | remux-video = "mp4>mkv"; | 30 | remux-video = "mp4>mkv"; |
31 | hwdec = "auto-safe"; | ||
31 | }; | 32 | }; |
32 | }; | 33 | }; |
33 | }; | 34 | }; |