14 |

15 |
Screenshot last updated 27th February, 2025
16 |
17 |
18 | My dotfiles that I used on my arch-based system can be found [here](https://github.com/skiletro/archfiles), and are a basis for a lot of the configuration here! If you don't use NixOS, you can probably find a more standard config for the thing you are looking for over there.
19 | I also recently went through a total rewrite. You can find v1 [here](https://github.com/skiletro/nixfiles/tree/v1).
20 |
21 | ## Goals
22 | - **Prioritises Wayland** - *Try and use Wayland components unless absolutely necessary.*
23 | - **Function over Form** - *While appearance is extremely important, function comes first. I try to avoid spending all my time ricing nowadays, so if possible I generally just use a solution made by someone else.*
24 | - **Keep it simple, stupid** - *I'm trying to limit the amount inputs and dependencies that I use, and ensuring that the repo is readable from an outsiders perspective. I'm obviously going to be a bit biased in this as I am the author, but I'm trying my best.*
25 |
26 | ## Installation Guide
27 | Please note that this flake is pretty specialised for my use case, and you would probably be better off just stealing the parts you like and then encorporating that into your own flake. This install guide is here **just for reference** (and because I forget how to do this sometimes).
28 |
29 | First, install NixOS onto your target system using a [live USB](https://nixos.org/manual/nixos/stable/#sec-booting-from-usb), setting the username to `jamie`. Once you have done this, run the following commands as the `jamie` user...
30 | ```bash
31 | nix-shell -p git helix # Required to fetch this config, and to edit it.
32 | git clone https://github.com/skiletro/nixfiles ~/.nix_config && cd ~/.nix_config
33 | mkdir hosts/$your_hostname
34 | cp /etc/nixos/configuration.nix hosts/$your_hostname/default.nix
35 | cp /etc/nixos/hardware-configuration.nix hosts/$your_hostname/
36 | hx hosts/$your_hostname/default.nix # Change the networking hostname to $your_hostname. You'll probably want to remove any options that may conflict with the common/ options.
37 | hx flake.nix # Add a new entry for this hostname under `nixosConfigurations`
38 | nix fmt # Makes sure everything is formatted correctly, and catches any obvious errors.
39 | git add . # Stage everything so Nix doesn't freak out
40 | sudo nixos-rebuild boot --flake .#$your_hostname
41 | ```
42 | ...and reboot!
43 |
44 | ## Todo
45 | - [ ] Finish the rewrite
46 |
47 | ## Acknowledgements
48 | - [NotAShelf's Nyx Repo](https://github.com/NotAShelf/nyx) - a huge help (also I stole quite a lot of stuff)
49 | - [linkfrg's dotfiles](https://github.com/linkfrg/dotfiles) - was incredibly useful in writing better eww widgets!
50 | - [isabelrose's dotfiles](https://github.com/isabelroses/dotfiles) - shamelessly stole her justfile
51 | - [uncenter's flake](https://github.com/uncenter/flake) - the flake helped a ton on the conversion to flake-parts and easy-hosts
52 |
53 | If you can help with any of this stuff, please do a pull request as I am still learning!
54 |
--------------------------------------------------------------------------------
/flake.lock:
--------------------------------------------------------------------------------
1 | {
2 | "nodes": {
3 | "agenix": {
4 | "inputs": {
5 | "darwin": [],
6 | "home-manager": "home-manager",
7 | "nixpkgs": [
8 | "nixpkgs"
9 | ],
10 | "systems": "systems"
11 | },
12 | "locked": {
13 | "lastModified": 1747575206,
14 | "narHash": "sha256-NwmAFuDUO/PFcgaGGr4j3ozG9Pe5hZ/ogitWhY+D81k=",
15 | "owner": "ryantm",
16 | "repo": "agenix",
17 | "rev": "4835b1dc898959d8547a871ef484930675cb47f1",
18 | "type": "github"
19 | },
20 | "original": {
21 | "owner": "ryantm",
22 | "repo": "agenix",
23 | "type": "github"
24 | }
25 | },
26 | "base16": {
27 | "inputs": {
28 | "fromYaml": "fromYaml"
29 | },
30 | "locked": {
31 | "lastModified": 1746562888,
32 | "narHash": "sha256-YgNJQyB5dQiwavdDFBMNKk1wyS77AtdgDk/VtU6wEaI=",
33 | "owner": "SenchoPens",
34 | "repo": "base16.nix",
35 | "rev": "806a1777a5db2a1ef9d5d6f493ef2381047f2b89",
36 | "type": "github"
37 | },
38 | "original": {
39 | "owner": "SenchoPens",
40 | "repo": "base16.nix",
41 | "type": "github"
42 | }
43 | },
44 | "base16-fish": {
45 | "flake": false,
46 | "locked": {
47 | "lastModified": 1622559957,
48 | "narHash": "sha256-PebymhVYbL8trDVVXxCvZgc0S5VxI7I1Hv4RMSquTpA=",
49 | "owner": "tomyun",
50 | "repo": "base16-fish",
51 | "rev": "2f6dd973a9075dabccd26f1cded09508180bf5fe",
52 | "type": "github"
53 | },
54 | "original": {
55 | "owner": "tomyun",
56 | "repo": "base16-fish",
57 | "type": "github"
58 | }
59 | },
60 | "base16-helix": {
61 | "flake": false,
62 | "locked": {
63 | "lastModified": 1748408240,
64 | "narHash": "sha256-9M2b1rMyMzJK0eusea0x3lyh3mu5nMeEDSc4RZkGm+g=",
65 | "owner": "tinted-theming",
66 | "repo": "base16-helix",
67 | "rev": "6c711ab1a9db6f51e2f6887cc3345530b33e152e",
68 | "type": "github"
69 | },
70 | "original": {
71 | "owner": "tinted-theming",
72 | "repo": "base16-helix",
73 | "type": "github"
74 | }
75 | },
76 | "base16-vim": {
77 | "flake": false,
78 | "locked": {
79 | "lastModified": 1732806396,
80 | "narHash": "sha256-e0bpPySdJf0F68Ndanwm+KWHgQiZ0s7liLhvJSWDNsA=",
81 | "owner": "tinted-theming",
82 | "repo": "base16-vim",
83 | "rev": "577fe8125d74ff456cf942c733a85d769afe58b7",
84 | "type": "github"
85 | },
86 | "original": {
87 | "owner": "tinted-theming",
88 | "repo": "base16-vim",
89 | "rev": "577fe8125d74ff456cf942c733a85d769afe58b7",
90 | "type": "github"
91 | }
92 | },
93 | "chaotic": {
94 | "inputs": {
95 | "fenix": "fenix",
96 | "flake-schemas": "flake-schemas",
97 | "home-manager": "home-manager_2",
98 | "jovian": "jovian",
99 | "nixpkgs": "nixpkgs"
100 | },
101 | "locked": {
102 | "lastModified": 1748859390,
103 | "narHash": "sha256-HozSlRbWOcCDZSWYprTnvRU7zZHfJAWtoOsvVJ9sH0o=",
104 | "owner": "chaotic-cx",
105 | "repo": "nyx",
106 | "rev": "294c481f7c482754bd667def54f7570acb493dfd",
107 | "type": "github"
108 | },
109 | "original": {
110 | "owner": "chaotic-cx",
111 | "ref": "nyxpkgs-unstable",
112 | "repo": "nyx",
113 | "type": "github"
114 | }
115 | },
116 | "cursors": {
117 | "inputs": {
118 | "nixpkgs": "nixpkgs_2"
119 | },
120 | "locked": {
121 | "lastModified": 1716041700,
122 | "narHash": "sha256-4jDR/KQmtsDw/nCvpy9VvWQgtc+4R4eyrb8eJSz+KCw=",
123 | "owner": "lilleaila",
124 | "repo": "nix-cursors",
125 | "rev": "d119b747e47a7a24660676f59c77272d664ec61e",
126 | "type": "github"
127 | },
128 | "original": {
129 | "owner": "lilleaila",
130 | "repo": "nix-cursors",
131 | "type": "github"
132 | }
133 | },
134 | "easy-hosts": {
135 | "locked": {
136 | "lastModified": 1747174689,
137 | "narHash": "sha256-WEA2HdjC90GLf5VpMLpvOF3/uSSq6AV4DQ4ezLFspc0=",
138 | "owner": "tgirlcloud",
139 | "repo": "easy-hosts",
140 | "rev": "e1210563fc527221e12544ce55cd954acf94e7ed",
141 | "type": "github"
142 | },
143 | "original": {
144 | "owner": "tgirlcloud",
145 | "repo": "easy-hosts",
146 | "type": "github"
147 | }
148 | },
149 | "fenix": {
150 | "inputs": {
151 | "nixpkgs": [
152 | "chaotic",
153 | "nixpkgs"
154 | ],
155 | "rust-analyzer-src": "rust-analyzer-src"
156 | },
157 | "locked": {
158 | "lastModified": 1748846362,
159 | "narHash": "sha256-D2LUpaxJFrkahPE1U6S01u1ZY9Wsr82jOSjAVoIZ/hs=",
160 | "owner": "nix-community",
161 | "repo": "fenix",
162 | "rev": "6a5e421c05cb29bffecdb3a1c3c80cec22d62efd",
163 | "type": "github"
164 | },
165 | "original": {
166 | "owner": "nix-community",
167 | "repo": "fenix",
168 | "type": "github"
169 | }
170 | },
171 | "firefox-gnome-theme": {
172 | "flake": false,
173 | "locked": {
174 | "lastModified": 1748383148,
175 | "narHash": "sha256-pGvD/RGuuPf/4oogsfeRaeMm6ipUIznI2QSILKjKzeA=",
176 | "owner": "rafaelmardojai",
177 | "repo": "firefox-gnome-theme",
178 | "rev": "4eb2714fbed2b80e234312611a947d6cb7d70caf",
179 | "type": "github"
180 | },
181 | "original": {
182 | "owner": "rafaelmardojai",
183 | "repo": "firefox-gnome-theme",
184 | "type": "github"
185 | }
186 | },
187 | "flake-compat": {
188 | "locked": {
189 | "lastModified": 1747046372,
190 | "narHash": "sha256-CIVLLkVgvHYbgI2UpXvIIBJ12HWgX+fjA8Xf8PUmqCY=",
191 | "owner": "edolstra",
192 | "repo": "flake-compat",
193 | "rev": "9100a0f413b0c601e0533d1d94ffd501ce2e7885",
194 | "type": "github"
195 | },
196 | "original": {
197 | "owner": "edolstra",
198 | "repo": "flake-compat",
199 | "type": "github"
200 | }
201 | },
202 | "flake-parts": {
203 | "inputs": {
204 | "nixpkgs-lib": [
205 | "nixpkgs"
206 | ]
207 | },
208 | "locked": {
209 | "lastModified": 1748821116,
210 | "narHash": "sha256-F82+gS044J1APL0n4hH50GYdPRv/5JWm34oCJYmVKdE=",
211 | "owner": "hercules-ci",
212 | "repo": "flake-parts",
213 | "rev": "49f0870db23e8c1ca0b5259734a02cd9e1e371a1",
214 | "type": "github"
215 | },
216 | "original": {
217 | "owner": "hercules-ci",
218 | "repo": "flake-parts",
219 | "type": "github"
220 | }
221 | },
222 | "flake-parts_2": {
223 | "inputs": {
224 | "nixpkgs-lib": [
225 | "nur",
226 | "nixpkgs"
227 | ]
228 | },
229 | "locked": {
230 | "lastModified": 1733312601,
231 | "narHash": "sha256-4pDvzqnegAfRkPwO3wmwBhVi/Sye1mzps0zHWYnP88c=",
232 | "owner": "hercules-ci",
233 | "repo": "flake-parts",
234 | "rev": "205b12d8b7cd4802fbcb8e8ef6a0f1408781a4f9",
235 | "type": "github"
236 | },
237 | "original": {
238 | "owner": "hercules-ci",
239 | "repo": "flake-parts",
240 | "type": "github"
241 | }
242 | },
243 | "flake-parts_3": {
244 | "inputs": {
245 | "nixpkgs-lib": [
246 | "stylix",
247 | "nixpkgs"
248 | ]
249 | },
250 | "locked": {
251 | "lastModified": 1743550720,
252 | "narHash": "sha256-hIshGgKZCgWh6AYJpJmRgFdR3WUbkY04o82X05xqQiY=",
253 | "owner": "hercules-ci",
254 | "repo": "flake-parts",
255 | "rev": "c621e8422220273271f52058f618c94e405bb0f5",
256 | "type": "github"
257 | },
258 | "original": {
259 | "owner": "hercules-ci",
260 | "repo": "flake-parts",
261 | "type": "github"
262 | }
263 | },
264 | "flake-schemas": {
265 | "locked": {
266 | "lastModified": 1721999734,
267 | "narHash": "sha256-G5CxYeJVm4lcEtaO87LKzOsVnWeTcHGKbKxNamNWgOw=",
268 | "rev": "0a5c42297d870156d9c57d8f99e476b738dcd982",
269 | "revCount": 75,
270 | "type": "tarball",
271 | "url": "https://api.flakehub.com/f/pinned/DeterminateSystems/flake-schemas/0.1.5/0190ef2f-61e0-794b-ba14-e82f225e55e6/source.tar.gz"
272 | },
273 | "original": {
274 | "type": "tarball",
275 | "url": "https://flakehub.com/f/DeterminateSystems/flake-schemas/%3D0.1.5.tar.gz"
276 | }
277 | },
278 | "flatpak": {
279 | "locked": {
280 | "lastModified": 1744659587,
281 | "narHash": "sha256-xJnbmRVte13akgn+Prg06IaRHJ5OX3uVltwsCP/mxoc=",
282 | "owner": "gmodena",
283 | "repo": "nix-flatpak",
284 | "rev": "928d868a9141b48f152d3b2b00c433e688d4b106",
285 | "type": "github"
286 | },
287 | "original": {
288 | "owner": "gmodena",
289 | "repo": "nix-flatpak",
290 | "type": "github"
291 | }
292 | },
293 | "fromYaml": {
294 | "flake": false,
295 | "locked": {
296 | "lastModified": 1731966426,
297 | "narHash": "sha256-lq95WydhbUTWig/JpqiB7oViTcHFP8Lv41IGtayokA8=",
298 | "owner": "SenchoPens",
299 | "repo": "fromYaml",
300 | "rev": "106af9e2f715e2d828df706c386a685698f3223b",
301 | "type": "github"
302 | },
303 | "original": {
304 | "owner": "SenchoPens",
305 | "repo": "fromYaml",
306 | "type": "github"
307 | }
308 | },
309 | "git-hooks": {
310 | "inputs": {
311 | "flake-compat": [
312 | "stylix",
313 | "flake-compat"
314 | ],
315 | "gitignore": "gitignore",
316 | "nixpkgs": [
317 | "stylix",
318 | "nixpkgs"
319 | ]
320 | },
321 | "locked": {
322 | "lastModified": 1747372754,
323 | "narHash": "sha256-2Y53NGIX2vxfie1rOW0Qb86vjRZ7ngizoo+bnXU9D9k=",
324 | "owner": "cachix",
325 | "repo": "git-hooks.nix",
326 | "rev": "80479b6ec16fefd9c1db3ea13aeb038c60530f46",
327 | "type": "github"
328 | },
329 | "original": {
330 | "owner": "cachix",
331 | "repo": "git-hooks.nix",
332 | "type": "github"
333 | }
334 | },
335 | "gitignore": {
336 | "inputs": {
337 | "nixpkgs": [
338 | "stylix",
339 | "git-hooks",
340 | "nixpkgs"
341 | ]
342 | },
343 | "locked": {
344 | "lastModified": 1709087332,
345 | "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=",
346 | "owner": "hercules-ci",
347 | "repo": "gitignore.nix",
348 | "rev": "637db329424fd7e46cf4185293b9cc8c88c95394",
349 | "type": "github"
350 | },
351 | "original": {
352 | "owner": "hercules-ci",
353 | "repo": "gitignore.nix",
354 | "type": "github"
355 | }
356 | },
357 | "gnome-shell": {
358 | "flake": false,
359 | "locked": {
360 | "lastModified": 1744584021,
361 | "narHash": "sha256-0RJ4mJzf+klKF4Fuoc8VN8dpQQtZnKksFmR2jhWE1Ew=",
362 | "owner": "GNOME",
363 | "repo": "gnome-shell",
364 | "rev": "52c517c8f6c199a1d6f5118fae500ef69ea845ae",
365 | "type": "github"
366 | },
367 | "original": {
368 | "owner": "GNOME",
369 | "ref": "48.1",
370 | "repo": "gnome-shell",
371 | "type": "github"
372 | }
373 | },
374 | "home-manager": {
375 | "inputs": {
376 | "nixpkgs": [
377 | "agenix",
378 | "nixpkgs"
379 | ]
380 | },
381 | "locked": {
382 | "lastModified": 1745494811,
383 | "narHash": "sha256-YZCh2o9Ua1n9uCvrvi5pRxtuVNml8X2a03qIFfRKpFs=",
384 | "owner": "nix-community",
385 | "repo": "home-manager",
386 | "rev": "abfad3d2958c9e6300a883bd443512c55dfeb1be",
387 | "type": "github"
388 | },
389 | "original": {
390 | "owner": "nix-community",
391 | "repo": "home-manager",
392 | "type": "github"
393 | }
394 | },
395 | "home-manager_2": {
396 | "inputs": {
397 | "nixpkgs": [
398 | "chaotic",
399 | "nixpkgs"
400 | ]
401 | },
402 | "locked": {
403 | "lastModified": 1748830238,
404 | "narHash": "sha256-EB+LzYHK0D5aqxZiYoPeoZoOzSAs8eqBDxm3R+6wMKU=",
405 | "owner": "nix-community",
406 | "repo": "home-manager",
407 | "rev": "c7fdb7e90bff1a51b79c1eed458fb39e6649a82a",
408 | "type": "github"
409 | },
410 | "original": {
411 | "owner": "nix-community",
412 | "repo": "home-manager",
413 | "type": "github"
414 | }
415 | },
416 | "home-manager_3": {
417 | "inputs": {
418 | "nixpkgs": [
419 | "nixpkgs"
420 | ]
421 | },
422 | "locked": {
423 | "lastModified": 1748830238,
424 | "narHash": "sha256-EB+LzYHK0D5aqxZiYoPeoZoOzSAs8eqBDxm3R+6wMKU=",
425 | "owner": "nix-community",
426 | "repo": "home-manager",
427 | "rev": "c7fdb7e90bff1a51b79c1eed458fb39e6649a82a",
428 | "type": "github"
429 | },
430 | "original": {
431 | "owner": "nix-community",
432 | "repo": "home-manager",
433 | "type": "github"
434 | }
435 | },
436 | "home-manager_4": {
437 | "inputs": {
438 | "nixpkgs": [
439 | "stylix",
440 | "nixpkgs"
441 | ]
442 | },
443 | "locked": {
444 | "lastModified": 1748737919,
445 | "narHash": "sha256-5kvBbLYdp+n7Ftanjcs6Nv+UO6sBhelp6MIGJ9nWmjQ=",
446 | "owner": "nix-community",
447 | "repo": "home-manager",
448 | "rev": "5675a9686851d9626560052a032c4e14e533c1fa",
449 | "type": "github"
450 | },
451 | "original": {
452 | "owner": "nix-community",
453 | "repo": "home-manager",
454 | "type": "github"
455 | }
456 | },
457 | "home-manager_5": {
458 | "inputs": {
459 | "nixpkgs": [
460 | "zen-browser",
461 | "nixpkgs"
462 | ]
463 | },
464 | "locked": {
465 | "lastModified": 1743604125,
466 | "narHash": "sha256-ZD61DNbsBt1mQbinAaaEqKaJk2RFo9R/j+eYWeGMx7A=",
467 | "owner": "nix-community",
468 | "repo": "home-manager",
469 | "rev": "180fd43eea296e62ae68e079fcf56aba268b9a1a",
470 | "type": "github"
471 | },
472 | "original": {
473 | "owner": "nix-community",
474 | "repo": "home-manager",
475 | "type": "github"
476 | }
477 | },
478 | "jovian": {
479 | "inputs": {
480 | "nix-github-actions": "nix-github-actions",
481 | "nixpkgs": [
482 | "chaotic",
483 | "nixpkgs"
484 | ]
485 | },
486 | "locked": {
487 | "lastModified": 1748683484,
488 | "narHash": "sha256-RXiY6t9E9oLEtfdGChHk/OIPqxYg1tu8XLvbPnJlfi4=",
489 | "owner": "Jovian-Experiments",
490 | "repo": "Jovian-NixOS",
491 | "rev": "6f6bd4a27fb01c9dd623a157d769f34561407f47",
492 | "type": "github"
493 | },
494 | "original": {
495 | "owner": "Jovian-Experiments",
496 | "repo": "Jovian-NixOS",
497 | "type": "github"
498 | }
499 | },
500 | "nix-github-actions": {
501 | "inputs": {
502 | "nixpkgs": [
503 | "chaotic",
504 | "jovian",
505 | "nixpkgs"
506 | ]
507 | },
508 | "locked": {
509 | "lastModified": 1729697500,
510 | "narHash": "sha256-VFTWrbzDlZyFHHb1AlKRiD/qqCJIripXKiCSFS8fAOY=",
511 | "owner": "zhaofengli",
512 | "repo": "nix-github-actions",
513 | "rev": "e418aeb728b6aa5ca8c5c71974e7159c2df1d8cf",
514 | "type": "github"
515 | },
516 | "original": {
517 | "owner": "zhaofengli",
518 | "ref": "matrix-name",
519 | "repo": "nix-github-actions",
520 | "type": "github"
521 | }
522 | },
523 | "nixpkgs": {
524 | "locked": {
525 | "lastModified": 1748693115,
526 | "narHash": "sha256-StSrWhklmDuXT93yc3GrTlb0cKSS0agTAxMGjLKAsY8=",
527 | "owner": "NixOS",
528 | "repo": "nixpkgs",
529 | "rev": "910796cabe436259a29a72e8d3f5e180fc6dfacc",
530 | "type": "github"
531 | },
532 | "original": {
533 | "owner": "NixOS",
534 | "ref": "nixos-unstable",
535 | "repo": "nixpkgs",
536 | "type": "github"
537 | }
538 | },
539 | "nixpkgs_2": {
540 | "locked": {
541 | "lastModified": 1713714899,
542 | "narHash": "sha256-+z/XjO3QJs5rLE5UOf015gdVauVRQd2vZtsFkaXBq2Y=",
543 | "owner": "nixos",
544 | "repo": "nixpkgs",
545 | "rev": "6143fc5eeb9c4f00163267708e26191d1e918932",
546 | "type": "github"
547 | },
548 | "original": {
549 | "owner": "nixos",
550 | "ref": "nixos-unstable",
551 | "repo": "nixpkgs",
552 | "type": "github"
553 | }
554 | },
555 | "nixpkgs_3": {
556 | "locked": {
557 | "lastModified": 315532800,
558 | "narHash": "sha256-zZGnqFOaEHRxiSAqTnBHQ+HNZCxMLumNzqtxRMhS4bk=",
559 | "rev": "5929de975bcf4c7c8d8b5ca65c8cd9ef9e44523e",
560 | "type": "tarball",
561 | "url": "https://releases.nixos.org/nixpkgs/nixpkgs-25.11pre809520.5929de975bcf/nixexprs.tar.xz?rev=5929de975bcf4c7c8d8b5ca65c8cd9ef9e44523e"
562 | },
563 | "original": {
564 | "type": "tarball",
565 | "url": "https://channels.nixos.org/nixpkgs-unstable/nixexprs.tar.xz"
566 | }
567 | },
568 | "nur": {
569 | "inputs": {
570 | "flake-parts": "flake-parts_2",
571 | "nixpkgs": [
572 | "nixpkgs"
573 | ],
574 | "treefmt-nix": "treefmt-nix"
575 | },
576 | "locked": {
577 | "lastModified": 1748896983,
578 | "narHash": "sha256-dNmvYMJEYnsSrOk1fnx6za29vfN/gOONQ3+8gJVF2Eo=",
579 | "owner": "nix-community",
580 | "repo": "NUR",
581 | "rev": "4ed8a3213ef31a7ed7cd98d51ed36147a63c1fb3",
582 | "type": "github"
583 | },
584 | "original": {
585 | "owner": "nix-community",
586 | "repo": "NUR",
587 | "type": "github"
588 | }
589 | },
590 | "nur_2": {
591 | "inputs": {
592 | "flake-parts": [
593 | "stylix",
594 | "flake-parts"
595 | ],
596 | "nixpkgs": [
597 | "stylix",
598 | "nixpkgs"
599 | ],
600 | "treefmt-nix": "treefmt-nix_2"
601 | },
602 | "locked": {
603 | "lastModified": 1748730660,
604 | "narHash": "sha256-5LKmRYKdPuhm8j5GFe3AfrJL8dd8o57BQ34AGjJl1R0=",
605 | "owner": "nix-community",
606 | "repo": "NUR",
607 | "rev": "2c0bc52fe14681e9ef60e3553888c4f086e46ecb",
608 | "type": "github"
609 | },
610 | "original": {
611 | "owner": "nix-community",
612 | "repo": "NUR",
613 | "type": "github"
614 | }
615 | },
616 | "root": {
617 | "inputs": {
618 | "agenix": "agenix",
619 | "chaotic": "chaotic",
620 | "cursors": "cursors",
621 | "easy-hosts": "easy-hosts",
622 | "flake-parts": "flake-parts",
623 | "flatpak": "flatpak",
624 | "home-manager": "home-manager_3",
625 | "jovian": [
626 | "chaotic",
627 | "jovian"
628 | ],
629 | "nixpkgs": "nixpkgs_3",
630 | "nur": "nur",
631 | "spicetify": "spicetify",
632 | "stylix": "stylix",
633 | "systems": "systems_4",
634 | "treefmt-nix": "treefmt-nix_3",
635 | "zen-browser": "zen-browser"
636 | }
637 | },
638 | "rust-analyzer-src": {
639 | "flake": false,
640 | "locked": {
641 | "lastModified": 1748695646,
642 | "narHash": "sha256-VwSuuRF4NvAoeHZJRRlX8zAFZ+nZyuiIvmVqBAX0Bcg=",
643 | "owner": "rust-lang",
644 | "repo": "rust-analyzer",
645 | "rev": "2a388d1103450d814a84eda98efe89c01b158343",
646 | "type": "github"
647 | },
648 | "original": {
649 | "owner": "rust-lang",
650 | "ref": "nightly",
651 | "repo": "rust-analyzer",
652 | "type": "github"
653 | }
654 | },
655 | "spicetify": {
656 | "inputs": {
657 | "nixpkgs": [
658 | "nixpkgs"
659 | ],
660 | "systems": "systems_2"
661 | },
662 | "locked": {
663 | "lastModified": 1748752728,
664 | "narHash": "sha256-en008ncPUQjVx2i3PbM4RWeZkD9DNbJwIy0epppXe2o=",
665 | "owner": "Gerg-L",
666 | "repo": "spicetify-nix",
667 | "rev": "0e03de40d5128eb2ad600c98f57cf5db2cdf3240",
668 | "type": "github"
669 | },
670 | "original": {
671 | "owner": "Gerg-L",
672 | "repo": "spicetify-nix",
673 | "type": "github"
674 | }
675 | },
676 | "stylix": {
677 | "inputs": {
678 | "base16": "base16",
679 | "base16-fish": "base16-fish",
680 | "base16-helix": "base16-helix",
681 | "base16-vim": "base16-vim",
682 | "firefox-gnome-theme": "firefox-gnome-theme",
683 | "flake-compat": "flake-compat",
684 | "flake-parts": "flake-parts_3",
685 | "git-hooks": "git-hooks",
686 | "gnome-shell": "gnome-shell",
687 | "home-manager": "home-manager_4",
688 | "nixpkgs": [
689 | "nixpkgs"
690 | ],
691 | "nur": "nur_2",
692 | "systems": "systems_3",
693 | "tinted-foot": "tinted-foot",
694 | "tinted-kitty": "tinted-kitty",
695 | "tinted-schemes": "tinted-schemes",
696 | "tinted-tmux": "tinted-tmux",
697 | "tinted-zed": "tinted-zed"
698 | },
699 | "locked": {
700 | "lastModified": 1748887638,
701 | "narHash": "sha256-AExfT8rMb6Ya37Gm3dimm+e4eeLGzya55JS6VWb3nfQ=",
702 | "owner": "nix-community",
703 | "repo": "stylix",
704 | "rev": "3ca2c4478a1e984d2007c57467c6986bcdcb2629",
705 | "type": "github"
706 | },
707 | "original": {
708 | "owner": "nix-community",
709 | "repo": "stylix",
710 | "type": "github"
711 | }
712 | },
713 | "systems": {
714 | "locked": {
715 | "lastModified": 1681028828,
716 | "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
717 | "owner": "nix-systems",
718 | "repo": "default",
719 | "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
720 | "type": "github"
721 | },
722 | "original": {
723 | "owner": "nix-systems",
724 | "repo": "default",
725 | "type": "github"
726 | }
727 | },
728 | "systems_2": {
729 | "locked": {
730 | "lastModified": 1681028828,
731 | "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
732 | "owner": "nix-systems",
733 | "repo": "default",
734 | "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
735 | "type": "github"
736 | },
737 | "original": {
738 | "owner": "nix-systems",
739 | "repo": "default",
740 | "type": "github"
741 | }
742 | },
743 | "systems_3": {
744 | "locked": {
745 | "lastModified": 1681028828,
746 | "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
747 | "owner": "nix-systems",
748 | "repo": "default",
749 | "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
750 | "type": "github"
751 | },
752 | "original": {
753 | "owner": "nix-systems",
754 | "repo": "default",
755 | "type": "github"
756 | }
757 | },
758 | "systems_4": {
759 | "flake": false,
760 | "locked": {
761 | "lastModified": 1,
762 | "narHash": "sha256-WaiGPxXXHCPNtbtxHPifGn0C/VRZKOgWkSYj15w485k=",
763 | "path": "./systems.nix",
764 | "type": "path"
765 | },
766 | "original": {
767 | "path": "./systems.nix",
768 | "type": "path"
769 | }
770 | },
771 | "tinted-foot": {
772 | "flake": false,
773 | "locked": {
774 | "lastModified": 1726913040,
775 | "narHash": "sha256-+eDZPkw7efMNUf3/Pv0EmsidqdwNJ1TaOum6k7lngDQ=",
776 | "owner": "tinted-theming",
777 | "repo": "tinted-foot",
778 | "rev": "fd1b924b6c45c3e4465e8a849e67ea82933fcbe4",
779 | "type": "github"
780 | },
781 | "original": {
782 | "owner": "tinted-theming",
783 | "repo": "tinted-foot",
784 | "rev": "fd1b924b6c45c3e4465e8a849e67ea82933fcbe4",
785 | "type": "github"
786 | }
787 | },
788 | "tinted-kitty": {
789 | "flake": false,
790 | "locked": {
791 | "lastModified": 1735730497,
792 | "narHash": "sha256-4KtB+FiUzIeK/4aHCKce3V9HwRvYaxX+F1edUrfgzb8=",
793 | "owner": "tinted-theming",
794 | "repo": "tinted-kitty",
795 | "rev": "de6f888497f2c6b2279361bfc790f164bfd0f3fa",
796 | "type": "github"
797 | },
798 | "original": {
799 | "owner": "tinted-theming",
800 | "repo": "tinted-kitty",
801 | "type": "github"
802 | }
803 | },
804 | "tinted-schemes": {
805 | "flake": false,
806 | "locked": {
807 | "lastModified": 1748180480,
808 | "narHash": "sha256-7n0XiZiEHl2zRhDwZd/g+p38xwEoWtT0/aESwTMXWG4=",
809 | "owner": "tinted-theming",
810 | "repo": "schemes",
811 | "rev": "87d652edd26f5c0c99deda5ae13dfb8ece2ffe31",
812 | "type": "github"
813 | },
814 | "original": {
815 | "owner": "tinted-theming",
816 | "repo": "schemes",
817 | "type": "github"
818 | }
819 | },
820 | "tinted-tmux": {
821 | "flake": false,
822 | "locked": {
823 | "lastModified": 1748740859,
824 | "narHash": "sha256-OEM12bg7F4N5WjZOcV7FHJbqRI6jtCqL6u8FtPrlZz4=",
825 | "owner": "tinted-theming",
826 | "repo": "tinted-tmux",
827 | "rev": "57d5f9683ff9a3b590643beeaf0364da819aedda",
828 | "type": "github"
829 | },
830 | "original": {
831 | "owner": "tinted-theming",
832 | "repo": "tinted-tmux",
833 | "type": "github"
834 | }
835 | },
836 | "tinted-zed": {
837 | "flake": false,
838 | "locked": {
839 | "lastModified": 1725758778,
840 | "narHash": "sha256-8P1b6mJWyYcu36WRlSVbuj575QWIFZALZMTg5ID/sM4=",
841 | "owner": "tinted-theming",
842 | "repo": "base16-zed",
843 | "rev": "122c9e5c0e6f27211361a04fae92df97940eccf9",
844 | "type": "github"
845 | },
846 | "original": {
847 | "owner": "tinted-theming",
848 | "repo": "base16-zed",
849 | "type": "github"
850 | }
851 | },
852 | "treefmt-nix": {
853 | "inputs": {
854 | "nixpkgs": [
855 | "nur",
856 | "nixpkgs"
857 | ]
858 | },
859 | "locked": {
860 | "lastModified": 1733222881,
861 | "narHash": "sha256-JIPcz1PrpXUCbaccEnrcUS8jjEb/1vJbZz5KkobyFdM=",
862 | "owner": "numtide",
863 | "repo": "treefmt-nix",
864 | "rev": "49717b5af6f80172275d47a418c9719a31a78b53",
865 | "type": "github"
866 | },
867 | "original": {
868 | "owner": "numtide",
869 | "repo": "treefmt-nix",
870 | "type": "github"
871 | }
872 | },
873 | "treefmt-nix_2": {
874 | "inputs": {
875 | "nixpkgs": [
876 | "stylix",
877 | "nur",
878 | "nixpkgs"
879 | ]
880 | },
881 | "locked": {
882 | "lastModified": 1733222881,
883 | "narHash": "sha256-JIPcz1PrpXUCbaccEnrcUS8jjEb/1vJbZz5KkobyFdM=",
884 | "owner": "numtide",
885 | "repo": "treefmt-nix",
886 | "rev": "49717b5af6f80172275d47a418c9719a31a78b53",
887 | "type": "github"
888 | },
889 | "original": {
890 | "owner": "numtide",
891 | "repo": "treefmt-nix",
892 | "type": "github"
893 | }
894 | },
895 | "treefmt-nix_3": {
896 | "inputs": {
897 | "nixpkgs": [
898 | "nixpkgs"
899 | ]
900 | },
901 | "locked": {
902 | "lastModified": 1748243702,
903 | "narHash": "sha256-9YzfeN8CB6SzNPyPm2XjRRqSixDopTapaRsnTpXUEY8=",
904 | "owner": "numtide",
905 | "repo": "treefmt-nix",
906 | "rev": "1f3f7b784643d488ba4bf315638b2b0a4c5fb007",
907 | "type": "github"
908 | },
909 | "original": {
910 | "owner": "numtide",
911 | "repo": "treefmt-nix",
912 | "type": "github"
913 | }
914 | },
915 | "zen-browser": {
916 | "inputs": {
917 | "home-manager": "home-manager_5",
918 | "nixpkgs": [
919 | "nixpkgs"
920 | ]
921 | },
922 | "locked": {
923 | "lastModified": 1748834461,
924 | "narHash": "sha256-1OfK7Ec2EIqwf/EhNikMp8DcdOcQG1CBS5CK4cAPMjs=",
925 | "owner": "0xc000022070",
926 | "repo": "zen-browser-flake",
927 | "rev": "2527ce862b0a80c3c4bd87e6717c7ac0fee1c456",
928 | "type": "github"
929 | },
930 | "original": {
931 | "owner": "0xc000022070",
932 | "repo": "zen-browser-flake",
933 | "type": "github"
934 | }
935 | }
936 | },
937 | "root": "root",
938 | "version": 7
939 | }
940 |
--------------------------------------------------------------------------------
/flake.nix:
--------------------------------------------------------------------------------
1 | {
2 | outputs = inputs: inputs.flake-parts.lib.mkFlake {inherit inputs;} {imports = [./modules/flake];};
3 |
4 | inputs = {
5 | # Core Inputs
6 | nixpkgs.url = "https://channels.nixos.org/nixpkgs-unstable/nixexprs.tar.xz";
7 |
8 | flake-parts = {
9 | url = "github:hercules-ci/flake-parts";
10 | inputs.nixpkgs-lib.follows = "nixpkgs";
11 | };
12 |
13 | home-manager = {
14 | url = "github:nix-community/home-manager";
15 | inputs.nixpkgs.follows = "nixpkgs";
16 | };
17 |
18 | easy-hosts.url = "github:tgirlcloud/easy-hosts";
19 |
20 | treefmt-nix = {
21 | url = "github:numtide/treefmt-nix";
22 | inputs.nixpkgs.follows = "nixpkgs";
23 | };
24 |
25 | systems = {
26 | url = "path:./systems.nix";
27 | flake = false;
28 | };
29 |
30 | # Supplementary Packages
31 | nur = {
32 | url = "github:nix-community/NUR";
33 | inputs.nixpkgs.follows = "nixpkgs";
34 | };
35 |
36 | chaotic.url = "github:chaotic-cx/nyx/nyxpkgs-unstable";
37 |
38 | flatpak.url = "github:gmodena/nix-flatpak";
39 |
40 | jovian = {
41 | url = "github:Jovian-Experiments/Jovian-NixOS";
42 | follows = "chaotic/jovian";
43 | inputs.nixpkgs.follows = "nixpkgs";
44 | inputs.nix-github-actions.follows = "";
45 | };
46 |
47 | # Theming
48 | stylix = {
49 | url = "github:nix-community/stylix";
50 | inputs.nixpkgs.follows = "nixpkgs";
51 | };
52 |
53 | cursors.url = "github:lilleaila/nix-cursors";
54 |
55 | # Individual Packages
56 | spicetify = {
57 | url = "github:Gerg-L/spicetify-nix";
58 | inputs.nixpkgs.follows = "nixpkgs";
59 | };
60 |
61 | zen-browser = {
62 | url = "github:0xc000022070/zen-browser-flake";
63 | inputs.nixpkgs.follows = "nixpkgs";
64 | };
65 |
66 | agenix = {
67 | url = "github:ryantm/agenix";
68 | inputs = {
69 | nixpkgs.follows = "nixpkgs";
70 | darwin.follows = ""; # not needed until darwin host is added
71 | };
72 | };
73 | };
74 | }
75 |
--------------------------------------------------------------------------------
/home/default.nix:
--------------------------------------------------------------------------------
1 | {
2 | self,
3 | self',
4 | inputs,
5 | inputs',
6 | pkgs,
7 | config,
8 | ...
9 | }: let
10 | inherit (config.eos.system) user;
11 | in {
12 | config = {
13 | home-manager = {
14 | useGlobalPkgs = true;
15 | backupFileExtension = "hm";
16 | users.${user}.imports = [
17 | {
18 | imports = [
19 | ./stylix.nix
20 | ./desktops
21 | ./gaming
22 | ./graphical
23 | ./terminal
24 | ./tooling
25 | ];
26 |
27 | home = {
28 | username = user;
29 | homeDirectory = "/home/${user}";
30 | stateVersion = "23.05";
31 | shell.enableFishIntegration = true;
32 | };
33 |
34 | manual = {
35 | html.enable = false;
36 | json.enable = false;
37 | manpages.enable = true;
38 | };
39 |
40 | fonts.fontconfig.enable = true;
41 |
42 | xdg.enable = true;
43 |
44 | programs.home-manager.enable = true;
45 | }
46 | ];
47 | extraSpecialArgs = {inherit self self' inputs inputs';};
48 | };
49 |
50 | age.secrets.user-password.file = ../secrets/user-password.age;
51 |
52 | users.users.${user} = {
53 | isNormalUser = true;
54 | passwordFile = config.age.secrets.user-password.path;
55 | extraGroups = ["users" "networkmanager" "wheel" "libvirtd"];
56 | openssh.authorizedKeys.keys = [
57 | "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINnFEMa0S9zuA5cVg+Ktazz9gEevkDCNYIDX0WAMxcAC eos"
58 | ];
59 | shell = pkgs.fish;
60 | };
61 | programs.fish.enable = true; # This is required otherwise the option above doesn't work.
62 | };
63 | }
64 |
--------------------------------------------------------------------------------
/home/desktops/default.nix:
--------------------------------------------------------------------------------
1 | {
2 | imports = [./plasma.nix];
3 | }
4 |
--------------------------------------------------------------------------------
/home/desktops/plasma.nix:
--------------------------------------------------------------------------------
1 | {
2 | lib,
3 | osConfig,
4 | ...
5 | }: {
6 | config = lib.mkIf (osConfig.eos.system.desktop == "plasma") {
7 | dconf = {
8 | enable = true;
9 | settings."org/gnome/desktop/wm/preferences".button-layout = ":minimize,maximize,close";
10 | };
11 | };
12 | }
13 |
--------------------------------------------------------------------------------
/home/gaming/default.nix:
--------------------------------------------------------------------------------
1 | {
2 | lib,
3 | osConfig,
4 | ...
5 | }: {
6 | imports = [
7 | ./vr.nix
8 | ];
9 |
10 | config = lib.mkIf osConfig.eos.programs.gaming.enable {
11 | stylix.targets.mangohud.enable = false;
12 |
13 | programs.mangohud = {
14 | enable = true;
15 | enableSessionWide = false; # Need to test to see if it crashes gamescope with workaround implem.
16 | };
17 | };
18 | }
19 |
--------------------------------------------------------------------------------
/home/gaming/vr.nix:
--------------------------------------------------------------------------------
1 | {
2 | lib,
3 | config,
4 | osConfig,
5 | pkgs,
6 | ...
7 | }: {
8 | config = lib.mkIf osConfig.eos.programs.vr.enable {
9 | # This assumes a WiVRn configuration
10 | xdg.configFile."openxr/1/active_runtime.json".source = "${osConfig.services.wivrn.package}/share/openxr/1/openxr_wivrn.json";
11 |
12 | xdg.configFile."openvr/openvrpaths.vrpath".text = ''
13 | {
14 | "config" :
15 | [
16 | "${config.xdg.dataHome}/Steam/config"
17 | ],
18 | "external_drivers" : null,
19 | "jsonid" : "vrpathreg",
20 | "log" :
21 | [
22 | "${config.xdg.dataHome}/Steam/logs"
23 | ],
24 | "runtime" :
25 | [
26 | "${pkgs.opencomposite}/lib/opencomposite"
27 | ],
28 | "version" : 1
29 | }
30 | '';
31 | };
32 | }
33 |
--------------------------------------------------------------------------------
/home/graphical/default.nix:
--------------------------------------------------------------------------------
1 | {
2 | imports = [
3 | ./discord.nix
4 | ./konsole.nix
5 | ./spotify.nix
6 | ./zen.nix
7 | ];
8 | }
9 |
--------------------------------------------------------------------------------
/home/graphical/discord.nix:
--------------------------------------------------------------------------------
1 | {
2 | pkgs,
3 | lib,
4 | osConfig,
5 | ...
6 | }: {
7 | config = lib.mkIf osConfig.eos.programs.enable {
8 | home.packages = [(pkgs.discord.override {withVencord = true;})];
9 | };
10 | }
11 |
--------------------------------------------------------------------------------
/home/graphical/konsole.nix:
--------------------------------------------------------------------------------
1 | {
2 | lib,
3 | osConfig,
4 | pkgs,
5 | ...
6 | }: {
7 | config = lib.mkIf (osConfig.eos.system.desktop == "plasma") {
8 | home.packages = [pkgs.kdePackages.konsole];
9 |
10 | xdg.dataFile."konsole/Stylix.profile".text = lib.generators.toINI {} {
11 | General = {
12 | Name = "Stylix";
13 | Parent = "FALLBACK/";
14 | TerminalCenter = false;
15 | TerminalMargin = 4;
16 | };
17 |
18 | Appearance = {
19 | AntiAliasFonts = true;
20 | ColorScheme = "Stylix";
21 | };
22 |
23 | "Cursor Options".CursorShape = 1;
24 | "Terminal Features".BlinkingCursorEnabled = true;
25 | };
26 |
27 | xdg.dataFile."konsole/Stylix.colorscheme".text = with osConfig.lib.stylix.colors; let
28 | fmt = r: g: b: "${r}, ${g}, ${b}";
29 |
30 | foreground = fmt base05-rgb-r base05-rgb-g base05-rgb-b;
31 | background = fmt base00-rgb-r base00-rgb-g base00-rgb-b;
32 | background-lighter = fmt base03-rgb-r base03-rgb-g base03-rgb-b;
33 |
34 | red = fmt base08-rgb-r base08-rgb-g base08-rgb-b;
35 | green = fmt base0B-rgb-r base0B-rgb-g base0B-rgb-b;
36 | yellow = fmt base0A-rgb-r base0A-rgb-g base0A-rgb-b;
37 | blue = fmt base0D-rgb-r base0D-rgb-g base0D-rgb-b;
38 | purple = fmt base0E-rgb-r base0E-rgb-g base0D-rgb-b;
39 | cyan = fmt base0C-rgb-r base0C-rgb-g base0C-rgb-b;
40 | in
41 | lib.generators.toINI {} {
42 | Background.Color = background;
43 | BackgroundFaint.Color = background;
44 | BackgroundIntense.Color = background-lighter;
45 |
46 | Color0.Color = background;
47 | Color0Faint.Color = background;
48 | Color0Intense.Color = background-lighter;
49 |
50 | Color1.Color = red;
51 | Color1Faint.Color = red;
52 | Color1Intense.Color = red;
53 |
54 | Color2.Color = green;
55 | Color2Faint.Color = green;
56 | Color2Intense.Color = green;
57 |
58 | Color3.Color = yellow;
59 | Color3Faint.Color = yellow;
60 | Color3Intense.Color = yellow;
61 |
62 | Color4.Color = blue;
63 | Color4Faint.Color = blue;
64 | Color4Intense.Color = blue;
65 |
66 | Color5.Color = purple;
67 | Color5Faint.Color = purple;
68 | Color5Intense.Color = purple;
69 |
70 | Color6.Color = cyan;
71 | Color6Faint.Color = cyan;
72 | Color6Intense.Color = cyan;
73 |
74 | Color7.Color = foreground;
75 | Color7Faint.Color = foreground;
76 | Color7Intense.Color = foreground;
77 | Foreground.Color = foreground;
78 | ForegroundFaint.Color = foreground;
79 | ForegroundIntense.Color = foreground;
80 |
81 | General = {
82 | Anchor = "0.5,0.5";
83 | Blur = false;
84 | ColorRandomization = false;
85 | Description = "Stylix";
86 | FillStyle = "Tile";
87 | Opacity = 1;
88 | Wallpaper = "";
89 | WallpaperFlipType = "NoFlip";
90 | WallpaperOpacity = 1;
91 | };
92 | };
93 | };
94 | }
95 |
--------------------------------------------------------------------------------
/home/graphical/spotify.nix:
--------------------------------------------------------------------------------
1 | {
2 | pkgs,
3 | inputs,
4 | lib,
5 | osConfig,
6 | ...
7 | }: {
8 | imports = [inputs.spicetify.homeManagerModules.default];
9 | config = lib.mkIf osConfig.eos.programs.enable {
10 | stylix.targets.spicetify.enable = false; # The default spicetify theme colours kinda suck
11 |
12 | programs.spicetify = let
13 | spicetify = inputs.spicetify.legacyPackages.${pkgs.system};
14 | in {
15 | enable = true;
16 |
17 | enabledExtensions = with spicetify.extensions; [
18 | songStats
19 | ];
20 |
21 | enabledCustomApps = with spicetify.apps; [
22 | newReleases
23 | lyricsPlus
24 | ];
25 |
26 | theme = {
27 | name = "stylix";
28 | src = pkgs.writeTextFile {
29 | name = "color.ini";
30 | destination = "/color.ini";
31 | text = with osConfig.lib.stylix.colors; ''
32 | [base]
33 | text = ${base05}
34 | subtext = ${base05}
35 | main = ${base00}
36 | main-elevated = ${base02}
37 | highlight = ${base02}
38 | highlight-elevated = ${base03}
39 | sidebar = ${base01}
40 | player = ${base05}
41 | card = ${base00}
42 | shadow = ${base00}
43 | selected-row = ${base05}
44 | button = ${base0B}
45 | button-active = ${base05}
46 | button-disabled = ${base03}
47 | tab-active = ${base0B}
48 | notification = ${base0B}
49 | notification-error = ${base08}
50 | equalizer = ${base0B}
51 | misc = ${base00}
52 | '';
53 | };
54 | # Sidebar configuration is incompatible with the default navigation bar
55 | sidebarConfig = false;
56 | };
57 | colorScheme = "base";
58 | };
59 |
60 | # We are overriding the default .desktop file because of GNOME and their stupid CSDs.
61 | # This should force Spotify to run under XWayland, giving us nicer window decorations.
62 | xdg.desktopEntries.spotify = {
63 | name = "Spotify";
64 | genericName = "Music Player";
65 | icon = "spotify-client";
66 | exec = "env -u WAYLAND_DISPLAY spotify %U";
67 | terminal = false;
68 | categories = ["Audio" "Music" "Player" "AudioVideo"];
69 | mimeType = ["x-scheme-handler/spotify"];
70 | };
71 | };
72 | }
73 |
--------------------------------------------------------------------------------
/home/graphical/zen.nix:
--------------------------------------------------------------------------------
1 | {
2 | inputs',
3 | lib,
4 | osConfig,
5 | ...
6 | }: {
7 | config = lib.mkIf osConfig.eos.programs.enable {
8 | # This module seems very barebones at the moment, but it will allow for the browser to be configured a lot easier in the future.
9 | home.packages = [inputs'.zen-browser.packages.default];
10 | };
11 | }
12 |
--------------------------------------------------------------------------------
/home/stylix.nix:
--------------------------------------------------------------------------------
1 | {pkgs, ...}: {
2 | # Icon Themes
3 | stylix.iconTheme = {
4 | enable = true;
5 | package = pkgs.papirus-icon-theme.override {
6 | color = "violet"; # This matches the wallpapers general colour scheme. Change as required.
7 | };
8 | dark = "Papirus";
9 | light = "Papirus";
10 | };
11 | }
12 |
--------------------------------------------------------------------------------
/home/terminal/bat.nix:
--------------------------------------------------------------------------------
1 | {
2 | lib,
3 | osConfig,
4 | ...
5 | }: {
6 | config = lib.mkIf osConfig.eos.programs.terminal.enable {
7 | programs.bat.enable = true;
8 | programs.fish.shellAbbrs.cat = "bat";
9 | };
10 | }
11 |
--------------------------------------------------------------------------------
/home/terminal/btop.nix:
--------------------------------------------------------------------------------
1 | {
2 | lib,
3 | osConfig,
4 | pkgs,
5 | ...
6 | }: {
7 | config = let
8 | inherit (osConfig.eos.system) gpu;
9 | in
10 | lib.mkIf osConfig.eos.programs.terminal.enable {
11 | programs.btop = {
12 | enable = true;
13 | package = with pkgs;
14 | if gpu == "nvidia"
15 | then btop-cuda
16 | else if gpu == "amd"
17 | then btop-rocm
18 | else btop;
19 | };
20 | };
21 | }
22 |
--------------------------------------------------------------------------------
/home/terminal/default.nix:
--------------------------------------------------------------------------------
1 | {
2 | lib,
3 | osConfig,
4 | pkgs,
5 | inputs',
6 | ...
7 | }: {
8 | imports = [
9 | ./bat.nix
10 | ./btop.nix
11 | ./direnv.nix
12 | ./eza.nix
13 | ./fastfetch.nix
14 | ./fish.nix
15 | ./git.nix
16 | ./helix.nix
17 | ./starship.nix
18 | ./tmux.nix
19 | ];
20 |
21 | config = lib.mkIf osConfig.eos.programs.terminal.enable {
22 | home.packages =
23 | (with pkgs; [
24 | alejandra # Nix linter
25 | du-dust # Fancier Looking `du`
26 | fd # Find files
27 | file # Identify files
28 | fzf # Fuzzy-finder
29 | git # You know what git is
30 | jq # JSON script processor
31 | just # Handy way to save and run project-specific commands
32 | libnotify # Send notifications through scripts, handy to have
33 | neovim # Vim fork
34 | ngrok # Reverse proxy
35 | pamixer # PulseAudio command line mixer
36 | playerctl # Controls media players
37 | ripgrep # Grep through files
38 | tldr # Simplified man pages
39 | tmux # Terminal multiplexer
40 | unrar # RAR utility
41 | unzip # ZIP utility
42 | wget # Get files from command-line
43 | wineWowPackages.stable # Run Windows apps
44 | ])
45 | ++ [inputs'.agenix.packages.default];
46 | };
47 | }
48 |
--------------------------------------------------------------------------------
/home/terminal/direnv.nix:
--------------------------------------------------------------------------------
1 | {
2 | lib,
3 | osConfig,
4 | ...
5 | }: {
6 | config = lib.mkIf osConfig.eos.programs.terminal.enable {
7 | programs.direnv = {
8 | enable = true;
9 | nix-direnv.enable = true; # faster implementation
10 | silent = true;
11 | };
12 | };
13 | }
14 |
--------------------------------------------------------------------------------
/home/terminal/eza.nix:
--------------------------------------------------------------------------------
1 | {
2 | lib,
3 | osConfig,
4 | ...
5 | }: {
6 | config = lib.mkIf osConfig.eos.programs.terminal.enable {
7 | programs.eza = {
8 | enable = true;
9 | icons = "auto";
10 | };
11 | };
12 | }
13 |
--------------------------------------------------------------------------------
/home/terminal/fastfetch.nix:
--------------------------------------------------------------------------------
1 | {
2 | lib,
3 | osConfig,
4 | ...
5 | }: {
6 | config = lib.mkIf osConfig.eos.programs.terminal.enable {
7 | programs.fastfetch.enable = true;
8 | programs.fish.shellAbbrs.neofetch = "fastfetch";
9 | };
10 | }
11 |
--------------------------------------------------------------------------------
/home/terminal/fish.nix:
--------------------------------------------------------------------------------
1 | {
2 | lib,
3 | osConfig,
4 | pkgs,
5 | ...
6 | }: {
7 | config = lib.mkIf osConfig.eos.programs.terminal.enable {
8 | # https://github.com/uncenter/flake/blob/main/user/shells/fish.nix
9 | programs.fish = {
10 | enable = true;
11 | interactiveShellInit = ''
12 | set fish_greeting
13 | '';
14 |
15 | plugins = [
16 | {
17 | name = "done";
18 | src = pkgs.fetchFromGitHub {
19 | owner = "franciscolourenco";
20 | repo = "done";
21 | rev = "d47f4d6551cccb0e46edfb14213ca0097ee22f9a";
22 | sha256 = "sha256-VSCYsGjNPSFIZSdLrkc7TU7qyPVm8UupOoav5UqXPMk=";
23 | };
24 | }
25 | ];
26 |
27 | shellAbbrs.n = "cd ~/.nix_config/";
28 | };
29 | };
30 | }
31 |
--------------------------------------------------------------------------------
/home/terminal/git.nix:
--------------------------------------------------------------------------------
1 | {
2 | lib,
3 | osConfig,
4 | ...
5 | }: {
6 | config = lib.mkIf osConfig.eos.programs.terminal.enable {
7 | # See https://github.com/uncenter/flake/blob/main/user/programs/git.nix for some options you can steal >:P
8 | programs = {
9 | git = {
10 | enable = true;
11 | userName = "skiletro";
12 | userEmail = "19377854+skiletro@users.noreply.github.com";
13 | difftastic.enable = true;
14 | };
15 |
16 | lazygit.enable = true;
17 | fish.shellAbbrs.lg = "lazygit";
18 | };
19 | };
20 | }
21 |
--------------------------------------------------------------------------------
/home/terminal/helix.nix:
--------------------------------------------------------------------------------
1 | {
2 | lib,
3 | osConfig,
4 | ...
5 | }: {
6 | config = lib.mkIf osConfig.eos.programs.terminal.enable {
7 | programs.helix = {
8 | enable = true;
9 | defaultEditor = true;
10 | settings = {
11 | editor = {
12 | cursor-shape = {
13 | insert = "bar";
14 | normal = "block";
15 | select = "underline";
16 | };
17 | indent-guides = {
18 | character = "‣";
19 | render = true;
20 | skip-levels = 1;
21 | };
22 | auto-pairs = true;
23 | };
24 | };
25 | };
26 | };
27 | }
28 |
--------------------------------------------------------------------------------
/home/terminal/starship.nix:
--------------------------------------------------------------------------------
1 | {
2 | lib,
3 | osConfig,
4 | ...
5 | }: {
6 | config = lib.mkIf osConfig.eos.programs.terminal.enable {
7 | programs.starship = let
8 | colours = osConfig.lib.stylix.colors.withHashtag;
9 |
10 | background = colours.base00;
11 | foreground = colours.base07;
12 |
13 | color1 = colours.base0C;
14 | color2 = colours.base0D;
15 | color3 = colours.base0E;
16 | in {
17 | enable = true;
18 |
19 | settings = {
20 | format = lib.concatStrings [
21 | #"[ ](fg:#1e1e2e bg:#ff00aa)"
22 | #"$username"
23 | #"[](fg:#ff00aa)"
24 | "$directory"
25 | "[](fg:${background} bg:${color1})"
26 | "$git_branch"
27 | "$git_status"
28 | "[](fg:${color1} bg:${color2})"
29 | "$c"
30 | "$elixir"
31 | "$elm"
32 | "$golang"
33 | "$haskell"
34 | "$java"
35 | "$julia"
36 | "$nodejs"
37 | "$nim"
38 | "$rust"
39 | "[](fg:${color2} bg:${color3})"
40 | "$nix_shell"
41 | "$docker_context"
42 | "[ ](fg:${color3})"
43 | ];
44 |
45 | add_newline = false; # Disable the blank line at the start of the prompt
46 |
47 | # You can also replace your username with a neat symbol like to save some space
48 | username = {
49 | show_always = true;
50 | #style_user = "fg:#11111b bg:#89B4FA";
51 | #style_root = "fg:#11111b bg:#cba6f7";
52 | #format = "[$user ]($style)";
53 | format = "[ ](fg:#11111b bg:#ff00aa)";
54 | };
55 |
56 | directory = {
57 | style = "fg:${foreground}";
58 | format = "[ $path ]($style)";
59 | truncation_length = 3;
60 | truncation_symbol = "../";
61 | };
62 |
63 | # Section 1
64 | git_branch = {
65 | symbol = "";
66 | style = "fg:${background} bg:${color1}";
67 | format = "[[ $symbol $branch ](fg:#11111b bg:${color1})]($style)";
68 | };
69 |
70 | git_status = {
71 | style = "fg:${background} bg:${color1}";
72 | format = "[[($all_status$ahead_behind )](fg:#11111b bg:${color1})]($style)";
73 | };
74 |
75 | # Section 2
76 | c = {
77 | symbol = " ";
78 | style = "fg:${background} bg:${color2}";
79 | format = "[[ $symbol ($version) ](fg:${background} bg:${color2})]($style)";
80 | };
81 |
82 | elixir = {
83 | symbol = " ";
84 | style = "fg:${background} bg:${color2}";
85 | format = "[[ $symbol ($version) ](fg:${background} bg:${color2})]($style)";
86 | };
87 |
88 | elm = {
89 | symbol = " ";
90 | style = "fg:${background} bg:${color2}";
91 | format = "[[ $symbol ($version) ](fg:${background} bg:${color2})]($style)";
92 | };
93 |
94 | golang = {
95 | symbol = " ";
96 | style = "fg:${background} bg:${color2}";
97 | #format = "[[ $symbol ($version) ](fg:${background} bg:${color2})]($style)";
98 | format = "[[ $symbol](fg:${background} bg:${color2})]($style)";
99 | };
100 |
101 | haskell = {
102 | symbol = " ";
103 | style = "fg:${background} bg:${color2}";
104 | format = "[[ $symbol ($version) ](fg:${background} bg:${color2})]($style)";
105 | };
106 |
107 | java = {
108 | symbol = " ";
109 | style = "fg:${background} bg:${color2}";
110 | format = "[[ $symbol ($version) ](fg:${background} bg:${color2})]($style)";
111 | };
112 |
113 | julia = {
114 | symbol = " ";
115 | style = "fg:${background} bg:${color2}";
116 | format = "[[ $symbol ($version) ](fg:${background} bg:${color2})]($style)";
117 | };
118 |
119 | nodejs = {
120 | symbol = "";
121 | style = "fg:${background} bg:${color2}";
122 | format = "[[ $symbol ($version) ](fg:${background} bg:${color2})]($style)";
123 | };
124 |
125 | nim = {
126 | symbol = " ";
127 | style = "fg:${background} bg:${color2}";
128 | format = "[[ $symbol ($version) ](fg:${background} bg:${color2})]($style)";
129 | };
130 |
131 | rust = {
132 | symbol = "";
133 | style = "fg:${background} bg:${color2}";
134 | format = "[[ $symbol ($version) ](fg:${background} bg:${color2})]($style)";
135 | };
136 |
137 | time = {
138 | disabled = false;
139 | time_format = "%R"; # Hour:Minute Format
140 | style = "fg:${background} bg:${color2}";
141 | format = "[[ $time ](fg:${background} bg:${color2})]($style)";
142 | };
143 |
144 | # Section 3
145 | docker_context = {
146 | symbol = " ";
147 | style = "fg:${background} bg:${color3}";
148 | format = "[[ $symbol $context ](fg:${background} bg:${color3})]($style) $path";
149 | };
150 |
151 | nix_shell = {
152 | symbol = " ";
153 | impure_msg = ""; # Crow
154 | pure_msg = " "; # Dove
155 | unknown_msg = " ";
156 | style = "fg:${background} bg:${color3}";
157 | format = "[[ $symbol$state ](fg:${background} bg:${color3})]($style)";
158 | };
159 | };
160 | };
161 | };
162 | }
163 |
--------------------------------------------------------------------------------
/home/terminal/tmux.nix:
--------------------------------------------------------------------------------
1 | {
2 | lib,
3 | osConfig,
4 | pkgs,
5 | ...
6 | }: {
7 | config = lib.mkIf osConfig.eos.programs.terminal.enable {
8 | programs.tmux = {
9 | enable = true;
10 | baseIndex = 1;
11 | plugins = with pkgs.tmuxPlugins; [
12 | catppuccin
13 | sensible
14 | yank
15 | ];
16 | };
17 | };
18 | }
19 |
--------------------------------------------------------------------------------
/home/tooling/default.nix:
--------------------------------------------------------------------------------
1 | {
2 | imports = [
3 | ./go.nix
4 | ./nix.nix
5 | ./misc.nix
6 | ./web.nix
7 | ];
8 | }
9 |
--------------------------------------------------------------------------------
/home/tooling/go.nix:
--------------------------------------------------------------------------------
1 | {
2 | lib,
3 | osConfig,
4 | pkgs,
5 | ...
6 | }: {
7 | config = lib.mkIf osConfig.eos.tooling.go.enable {
8 | home.packages = with pkgs; [
9 | gopls
10 | ];
11 | };
12 | }
13 |
--------------------------------------------------------------------------------
/home/tooling/misc.nix:
--------------------------------------------------------------------------------
1 | {
2 | lib,
3 | osConfig,
4 | pkgs,
5 | ...
6 | }: {
7 | config = lib.mkIf osConfig.eos.tooling.enable {
8 | home.packages = with pkgs; [
9 | bash-language-server # Bash
10 | docker-compose-language-service # Docker Compose
11 | dockerfile-language-server-nodejs # Dockerfile
12 | marksman # Markdown
13 | taplo # TOML
14 | yaml-language-server # YAML
15 | ];
16 | };
17 | }
18 |
--------------------------------------------------------------------------------
/home/tooling/nix.nix:
--------------------------------------------------------------------------------
1 | {
2 | lib,
3 | osConfig,
4 | pkgs,
5 | ...
6 | }: {
7 | config = lib.mkIf osConfig.eos.tooling.nix.enable {
8 | home.packages = with pkgs; [
9 | alejandra
10 | deadnix
11 | nil
12 | ];
13 | };
14 | }
15 |
--------------------------------------------------------------------------------
/home/tooling/web.nix:
--------------------------------------------------------------------------------
1 | {
2 | lib,
3 | osConfig,
4 | pkgs,
5 | ...
6 | }: {
7 | config = lib.mkIf osConfig.eos.tooling.web.enable {
8 | home.packages = with pkgs; [
9 | typescript-language-server
10 | vscode-langservers-extracted
11 | bun
12 | emmet-ls
13 | ];
14 | };
15 | }
16 |
--------------------------------------------------------------------------------
/hosts/README.md:
--------------------------------------------------------------------------------
1 | # Hosts
2 |
3 | | Host | Arch | Type | Description |
4 | | --- | --- | --- | --- |
5 | | eris | x86_64 | Desktop | Main system. Ryzen 5 3600 + RTX 2070. Requires Closed-Source Nvidia GPU Drivers |
6 | | phrixus | x86_64 | HTPC | Converted laptop that is now used as a HTPC/mini gaming rig. Uses Steam Big Picture as the main UI. |
7 |
--------------------------------------------------------------------------------
/hosts/default.nix:
--------------------------------------------------------------------------------
1 | {
2 | inputs,
3 | lib,
4 | ...
5 | }: {
6 | imports = [
7 | inputs.easy-hosts.flakeModule
8 | ];
9 |
10 | easy-hosts = let
11 | additionalClasses = {
12 | pc = "nixos";
13 | steam-machine = "nixos";
14 | server = "nixos";
15 | mac = "darwin";
16 | };
17 |
18 | getBaseClass = class: additionalClasses.${class} or class;
19 | in {
20 | inherit additionalClasses;
21 |
22 | hosts = {
23 | eris = {
24 | arch = "x86_64";
25 | class = "pc";
26 | };
27 | # nephele = {
28 | # arch = "x86_64";
29 | # class = "pc";
30 | # };
31 | phrixus = {
32 | arch = "x86_64";
33 | class = "steam-machine";
34 | };
35 | };
36 |
37 | perClass = class: {
38 | modules = builtins.concatLists [
39 | # Shared Modules
40 | [
41 | ../modules/shared
42 | ../modules/${class}
43 | ]
44 |
45 | # Per Base OS
46 | (lib.optionals ((getBaseClass class) == "nixos") [
47 | ../modules/nixos
48 | inputs.agenix.nixosModules.default
49 | inputs.chaotic.nixosModules.default
50 | inputs.nur.modules.nixos.default
51 | inputs.stylix.nixosModules.stylix
52 | ])
53 |
54 | # Per Class
55 | (lib.optionals (class == "pc") [
56 | ../home
57 | inputs.home-manager.nixosModules.default
58 | ])
59 |
60 | (lib.optionals (class == "steam-machine") [
61 | ../home
62 | ../modules/pc # Benefits from inheriting from here
63 | inputs.home-manager.nixosModules.default
64 | inputs.jovian.nixosModules.default
65 | ])
66 | ];
67 | };
68 | };
69 | }
70 |
--------------------------------------------------------------------------------
/hosts/eris/default.nix:
--------------------------------------------------------------------------------
1 | {pkgs, ...}: {
2 | imports = [
3 | ./hardware.nix
4 | ];
5 |
6 | networking.hostName = "eris";
7 |
8 | eos = {
9 | system = {
10 | gpu = "nvidia";
11 | greeter = "sddm";
12 | desktop = "plasma";
13 | };
14 |
15 | programs.extraPrograms = with pkgs; [
16 | # Graphical
17 | bitwarden-desktop # Password Manager
18 | element-desktop # Matrix Client
19 | fsearch # Fast File Search
20 | gimp3-with-plugins # Image Editor
21 | godot_4 # Godot Engine
22 | handbrake # Video Encoder
23 | impression # ISO Burner
24 | kdePackages.kdenlive # Libre Video Editor
25 | kdiskmark # Drive Benchmark Tool
26 | libreoffice # Office Suite
27 | ludusavi # Game Save Backup Manager
28 | obs-studio # Screen Recording and Broadcast Suite
29 | okteta # Hex Editor
30 | qbittorrent # Torrent Client
31 | tenacity # Audio Editor
32 | thunderbird-latest # Email Client
33 | video-trimmer # Trims Videos
34 | vlc # Media Player, mostly used for m3u files
35 |
36 | # Terminal
37 | ffmpeg # Manipulate Video
38 | imagemagick # Manipulate Images
39 |
40 | # Runtimes
41 | bun # JavaScript
42 | jre_minimal # Java
43 | python3 # Python
44 | ];
45 |
46 | services.noisetorch = {
47 | enable = true;
48 | deviceUnit = ''sys-devices-pci0000:00-0000:00:01.3-0000:03:00.0-usb1-1\x2d2-1\x2d2:1.0-sound-card2-controlC2.device''; # This changes depending on the USB socket used.
49 | deviceID = ''alsa_input.usb-BLUE_MICROPHONE_Blue_Snowball_201305-00.mono-fallback'';
50 | };
51 | };
52 | }
53 |
--------------------------------------------------------------------------------
/hosts/eris/hardware.nix:
--------------------------------------------------------------------------------
1 | {
2 | lib,
3 | modulesPath,
4 | ...
5 | }: {
6 | imports = [
7 | (modulesPath + "/installer/scan/not-detected.nix")
8 | ];
9 |
10 | # Boot Hardware
11 | boot.initrd.availableKernelModules = ["nvme" "xhci_pci" "ahci" "usbhid" "usb_storage" "sd_mod"];
12 | boot.initrd.kernelModules = [];
13 | boot.kernelModules = ["kvm-amd"];
14 | boot.extraModulePackages = [];
15 | boot.supportedFilesystems = ["ntfs"];
16 |
17 | # Drives
18 | fileSystems."/" = {
19 | device = "/dev/disk/by-uuid/94e933e3-aaf9-4cf3-b7c9-044306fce269";
20 | fsType = "ext4";
21 | };
22 |
23 | fileSystems."/boot" = {
24 | device = "/dev/disk/by-uuid/F4AF-09F7";
25 | fsType = "vfat";
26 | options = ["fmask=0077" "dmask=0077"];
27 | };
28 |
29 | fileSystems."/mnt/ssd" = {
30 | device = "/dev/disk/by-uuid/ebcd15e8-abe0-4a54-bfc9-e0080506d95c";
31 | fsType = "ext4";
32 | };
33 |
34 | swapDevices = [
35 | {device = "/dev/disk/by-uuid/ae2dc9bc-8451-48f4-a42b-916e449f30b8";}
36 | ];
37 |
38 | # RGB Management
39 | services.hardware.openrgb.enable = true;
40 |
41 | # Bluetooth
42 | hardware.bluetooth = {
43 | enable = true;
44 | powerOnBoot = true;
45 | };
46 |
47 | # Enables DHCP on each ethernet and wireless interface. In case of scripted networking
48 | # (the default) this is the recommended approach. When using systemd-networkd it's
49 | # still possible to use this option, but it's recommended to use it in conjunction
50 | # with explicit per-interface declarations with `networking.interfaces.