My NixOS and Home Manager configurations
10
fork

Configure Feed

Select the types of activity you want to include in your feed.

migrate modules

old modules kept in _modules for ease of testing

quasigod 1b13f9fe 15b22cf6

+1320 -1382
+75 -184
flake.lock
··· 23 23 ] 24 24 }, 25 25 "locked": { 26 - "lastModified": 1762510976, 27 - "narHash": "sha256-KGoSj8qMOOPaNE48RTtuNBbqOvKLTeklnRHWWvE/TXo=", 26 + "lastModified": 1763110997, 27 + "narHash": "sha256-S2vF+3D/9vna3/vBV7LHiGUbp+ltPsQhvccIyim6VQg=", 28 28 "owner": "catppuccin", 29 29 "repo": "nix", 30 - "rev": "728cb0a667ce37bb0c68557dba819c7fb54ff1c8", 30 + "rev": "e6928cdd3dd20636326c2756d2bc8fd1cd825768", 31 31 "type": "github" 32 32 }, 33 33 "original": { ··· 52 52 ] 53 53 }, 54 54 "locked": { 55 - "lastModified": 1762858542, 56 - "narHash": "sha256-bDTKfF6VxLvVc897kIMy5zSBquoNtVR4DJixozov3kw=", 55 + "lastModified": 1763246168, 56 + "narHash": "sha256-gUDJZGSOg5syHtQvLImOKL6Eaw4e1ybz4o5pid66kQg=", 57 57 "owner": "chaotic-cx", 58 58 "repo": "nyx", 59 - "rev": "f12f07936e0a4f892ba6505e774d4e651860e768", 59 + "rev": "6476fbdd52621b4a532309d982d468dc08204151", 60 60 "type": "github" 61 61 }, 62 62 "original": { ··· 81 81 "type": "github" 82 82 } 83 83 }, 84 + "den": { 85 + "locked": { 86 + "lastModified": 1763336755, 87 + "narHash": "sha256-osoAH/3/OIjkKRk/bGSkh/u2wtBkGyzS4bvH0ixW2y0=", 88 + "owner": "vic", 89 + "repo": "den", 90 + "rev": "425ca53b0058b2b297b4f7c4fc2533ea76070da8", 91 + "type": "github" 92 + }, 93 + "original": { 94 + "owner": "vic", 95 + "repo": "den", 96 + "type": "github" 97 + } 98 + }, 99 + "flake-aspects": { 100 + "locked": { 101 + "lastModified": 1763284357, 102 + "narHash": "sha256-mPMHkhpOIsj2lg+KIcapFd4uj2N/9mZZ6RZBo/p5O1c=", 103 + "owner": "vic", 104 + "repo": "flake-aspects", 105 + "rev": "6a6d47f531ad57ac854cee689e84f2e28861ec49", 106 + "type": "github" 107 + }, 108 + "original": { 109 + "owner": "vic", 110 + "repo": "flake-aspects", 111 + "type": "github" 112 + } 113 + }, 84 114 "flake-compat": { 85 115 "flake": false, 86 116 "locked": { ··· 102 132 "nixpkgs-lib": "nixpkgs-lib" 103 133 }, 104 134 "locked": { 105 - "lastModified": 1762810396, 106 - "narHash": "sha256-dxFVgQPG+R72dkhXTtqUm7KpxElw3u6E+YlQ2WaDgt8=", 135 + "lastModified": 1762980239, 136 + "narHash": "sha256-8oNVE8TrD19ulHinjaqONf9QWCKK+w4url56cdStMpM=", 107 137 "owner": "hercules-ci", 108 138 "repo": "flake-parts", 109 - "rev": "0bdadb1b265fb4143a75bd1ec7d8c915898a9923", 139 + "rev": "52a2caecc898d0b46b2b905f058ccc5081f842da", 110 140 "type": "github" 111 141 }, 112 142 "original": { ··· 176 206 ] 177 207 }, 178 208 "locked": { 179 - "lastModified": 1762787259, 180 - "narHash": "sha256-t2U/GLLXHa2+kJkwnFNRVc2fEJ/lUfyZXBE5iKzJdcs=", 209 + "lastModified": 1763313531, 210 + "narHash": "sha256-yvdCYUL85zEDp2NzPUBmaNBXP6KnWEOhAk3j7PTfsKw=", 181 211 "owner": "nix-community", 182 212 "repo": "home-manager", 183 - "rev": "37a3d97f2873e0f68711117c34d04b7c7ead8f4e", 213 + "rev": "3670a78eee49deebe4825fc8ecc46b172d1a8391", 184 214 "type": "github" 185 215 }, 186 216 "original": { ··· 191 221 }, 192 222 "import-tree": { 193 223 "locked": { 194 - "lastModified": 1762327901, 195 - "narHash": "sha256-AJ96FNj50DU0bTyIzAPkPOjCZTHqjURVjok8qoXvmqM=", 224 + "lastModified": 1763263999, 225 + "narHash": "sha256-AZ4UkBJQKfaL9sX+/mzc1xBtcJk8hDQGkhjWX0Py5hU=", 196 226 "owner": "vic", 197 227 "repo": "import-tree", 198 - "rev": "90fa129798be99cde036b78658e89475710966a1", 228 + "rev": "058bd03ac818ea349946323ae3c2837b4cab7f22", 199 229 "type": "github" 200 230 }, 201 231 "original": { ··· 213 243 ] 214 244 }, 215 245 "locked": { 216 - "lastModified": 1762452596, 217 - "narHash": "sha256-Iaga+mkwWnWa6FxsAYknpHzeP344VCKGkdudX420LgA=", 246 + "lastModified": 1762951919, 247 + "narHash": "sha256-ma/xMEGf4J6n/RdZFdxXBJUQhP53HVEPQOC6Dp2TrkQ=", 218 248 "owner": "Jovian-Experiments", 219 249 "repo": "Jovian-NixOS", 220 - "rev": "99919fd35e70c1b18ce948d5329928d751031312", 250 + "rev": "3d248f6e8f877218dd2573fef8925ac997889922", 221 251 "type": "github" 222 252 }, 223 253 "original": { ··· 240 270 "rust-overlay": "rust-overlay" 241 271 }, 242 272 "locked": { 243 - "lastModified": 1762205063, 244 - "narHash": "sha256-If6vQ+KvtKs3ARBO9G3l+4wFSCYtRBrwX1z+I+B61wQ=", 273 + "lastModified": 1763154177, 274 + "narHash": "sha256-LIIrMS2f2pPT2/BHs8dfGeupI23v5DNcoRz3W+iMsUA=", 245 275 "owner": "nix-community", 246 276 "repo": "lanzaboote", 247 - "rev": "88b8a563ff5704f4e8d8e5118fb911fa2110ca05", 277 + "rev": "70be03ab23d0988224e152f5b52e2fbf44a6d8ee", 248 278 "type": "github" 249 279 }, 250 280 "original": { ··· 287 317 ] 288 318 }, 289 319 "locked": { 290 - "lastModified": 1762007860, 291 - "narHash": "sha256-wDaM4D0Fqt0nCoFbZsi3mtAkIzzsbGdmuj+356KHEvU=", 320 + "lastModified": 1763199681, 321 + "narHash": "sha256-3c5oZigLzzQp13TnjwkOAT0QDaJjShQciIHMa1PFR+c=", 292 322 "owner": "thiagokokada", 293 323 "repo": "nix-alien", 294 - "rev": "2c770275b2fb78c813a52a4d52ba2d27789d8ec3", 324 + "rev": "f1e67b6763e47794f1819eb9d55d95b839484bad", 295 325 "type": "github" 296 326 }, 297 327 "original": { ··· 332 362 ] 333 363 }, 334 364 "locked": { 335 - "lastModified": 1762826226, 336 - "narHash": "sha256-M4rbwlO4peCHRvA+WNYCmg8je4YBF7kSY9tG+p1kEKo=", 365 + "lastModified": 1763313066, 366 + "narHash": "sha256-i2s3jPiMRPLd1mcL0oNMSbrbmq9ba/Qo4YPVPehPmEs=", 337 367 "owner": "fufexan", 338 368 "repo": "nix-gaming", 339 - "rev": "eefca17cb40462878ee1c46ac6910b2ec21adaa8", 369 + "rev": "dfa5f946fe41f085e34159a818790f69a19a0022", 340 370 "type": "github" 341 371 }, 342 372 "original": { ··· 375 405 ] 376 406 }, 377 407 "locked": { 378 - "lastModified": 1762660502, 379 - "narHash": "sha256-C9F1C31ys0V7mnp4EcDy7L1cLZw/sCTEXqqTtGnvu08=", 408 + "lastModified": 1763265660, 409 + "narHash": "sha256-Ad9Rd3ZAidrH01xP73S3CjPiyXo7ywZs3uCESjPwUdc=", 380 410 "owner": "nix-community", 381 411 "repo": "nix-index-database", 382 - "rev": "15c5451c63f4c612874a43846bfe3fa828b03eee", 412 + "rev": "469ef53571ea80890c9497952787920c79c1ee6e", 383 413 "type": "github" 384 414 }, 385 415 "original": { ··· 421 451 }, 422 452 "nixpkgs": { 423 453 "locked": { 424 - "lastModified": 1762686035, 425 - "narHash": "sha256-rzt3aYsEMKvwNXW0H/6J2z733gqS4g1IXd1pDUWzVpk=", 426 - "rev": "b6a8526db03f735b89dd5ff348f53f752e7ddc8e", 454 + "lastModified": 1762977756, 455 + "narHash": "sha256-ofLW/pWU9HuZO43hK0ze2uTITgG5NWUws6ePJrazSlM=", 456 + "rev": "c5ae371f1a6a7fd27823bc500d9390b38c05fa55", 427 457 "type": "tarball", 428 - "url": "https://releases.nixos.org/nixos/unstable/nixos-25.11pre891611.b6a8526db03f/nixexprs.tar.xz?rev=b6a8526db03f735b89dd5ff348f53f752e7ddc8e" 458 + "url": "https://releases.nixos.org/nixos/unstable/nixos-25.11pre895122.c5ae371f1a6a/nixexprs.tar.xz?lastModified=1762977756&rev=c5ae371f1a6a7fd27823bc500d9390b38c05fa55" 429 459 }, 430 460 "original": { 431 461 "type": "tarball", ··· 447 477 "type": "github" 448 478 } 449 479 }, 450 - "plover": { 451 - "inputs": { 452 - "nixpkgs": [ 453 - "nixpkgs" 454 - ], 455 - "plover": "plover_2", 456 - "plover-machine-hid": "plover-machine-hid", 457 - "plover-stroke": "plover-stroke", 458 - "plover2cat": "plover2cat", 459 - "plover_plugins_registry": "plover_plugins_registry", 460 - "pyobjc": "pyobjc", 461 - "rtf-tokenize": "rtf-tokenize" 462 - }, 463 - "locked": { 464 - "lastModified": 1762833351, 465 - "narHash": "sha256-ClqiU/mjvA7qv3N9pmzFmQ7TxLtYZnEs6SMZUfAsSoc=", 466 - "owner": "openstenoproject", 467 - "repo": "plover-flake", 468 - "rev": "a31f08bc49f9ad5006ae71d670d9983eb991a885", 469 - "type": "github" 470 - }, 471 - "original": { 472 - "owner": "openstenoproject", 473 - "repo": "plover-flake", 474 - "type": "github" 475 - } 476 - }, 477 - "plover-machine-hid": { 478 - "flake": false, 479 - "locked": { 480 - "lastModified": 1757266704, 481 - "narHash": "sha256-S+NBVnLjWdINTRpNIZvGotNGiMVSnvq1NZRPnKCmZyM=", 482 - "owner": "dnaq", 483 - "repo": "plover-machine-hid", 484 - "rev": "db917f8b2545964fdaa2f664d1d1e2afafae96a1", 485 - "type": "github" 486 - }, 487 - "original": { 488 - "owner": "dnaq", 489 - "repo": "plover-machine-hid", 490 - "type": "github" 491 - } 492 - }, 493 - "plover-stroke": { 494 - "flake": false, 495 - "locked": { 496 - "lastModified": 1652559629, 497 - "narHash": "sha256-A75OMzmEn0VmDAvmQCp6/7uptxzwWJTwsih3kWlYioA=", 498 - "owner": "openstenoproject", 499 - "repo": "plover_stroke", 500 - "rev": "e717a1983b58dcba644153a542dbf8514425a39b", 501 - "type": "github" 502 - }, 503 - "original": { 504 - "owner": "openstenoproject", 505 - "repo": "plover_stroke", 506 - "type": "github" 507 - } 508 - }, 509 - "plover2cat": { 510 - "flake": false, 511 - "locked": { 512 - "lastModified": 1757574932, 513 - "narHash": "sha256-kIDuIezGN+n3RDWMOlR6eFlQlQDp6okKgQCk71AgUDs=", 514 - "owner": "greenwyrt", 515 - "repo": "plover2CAT", 516 - "rev": "477163958b1a9e6fc48337be137173570fa7350a", 517 - "type": "github" 518 - }, 519 - "original": { 520 - "owner": "greenwyrt", 521 - "repo": "plover2CAT", 522 - "type": "github" 523 - } 524 - }, 525 - "plover_2": { 526 - "flake": false, 527 - "locked": { 528 - "lastModified": 1762793584, 529 - "narHash": "sha256-1ZOeaSkrc9UftbQeMMOnimq3mfY0O3zL2K4jurnTGyM=", 530 - "owner": "openstenoproject", 531 - "repo": "plover", 532 - "rev": "686974243bcd5c5fdd6fab0842137219b246eee2", 533 - "type": "github" 534 - }, 535 - "original": { 536 - "owner": "openstenoproject", 537 - "repo": "plover", 538 - "type": "github" 539 - } 540 - }, 541 - "plover_plugins_registry": { 542 - "flake": false, 543 - "locked": { 544 - "lastModified": 1761769055, 545 - "narHash": "sha256-OLXZEkKGifMpngZfQ9JO/phKXZPNQMigEvT4DWKtjJo=", 546 - "owner": "openstenoproject", 547 - "repo": "plover_plugins_registry", 548 - "rev": "1420aaf4e792c328acd5233a78f343b9167a72e8", 549 - "type": "github" 550 - }, 551 - "original": { 552 - "owner": "openstenoproject", 553 - "repo": "plover_plugins_registry", 554 - "type": "github" 555 - } 556 - }, 557 480 "pre-commit-hooks-nix": { 558 481 "inputs": { 559 482 "flake-compat": [ ··· 580 503 "type": "github" 581 504 } 582 505 }, 583 - "pyobjc": { 584 - "flake": false, 585 - "locked": { 586 - "lastModified": 1736669867, 587 - "narHash": "sha256-Kj1CH1+RYTFszao9G7P3fnsgBjTcvsq4ZpxdjHzQ520=", 588 - "owner": "ronaldoussoren", 589 - "repo": "pyobjc", 590 - "rev": "e29d3a0c80b5bb852e4311ce10827efab9844c6c", 591 - "type": "github" 592 - }, 593 - "original": { 594 - "owner": "ronaldoussoren", 595 - "ref": "v11.0", 596 - "repo": "pyobjc", 597 - "type": "github" 598 - } 599 - }, 600 506 "root": { 601 507 "inputs": { 602 508 "catppuccin": "catppuccin", 603 509 "chaotic": "chaotic", 510 + "den": "den", 511 + "flake-aspects": "flake-aspects", 604 512 "flake-parts": "flake-parts", 605 513 "home-manager": "home-manager", 606 514 "import-tree": "import-tree", ··· 613 521 "nixos-facter-modules": "nixos-facter-modules", 614 522 "nixos-hardware": "nixos-hardware", 615 523 "nixpkgs": "nixpkgs", 616 - "plover": "plover", 617 524 "sops-nix": "sops-nix", 618 525 "unify": "unify", 619 526 "vicinae": "vicinae", ··· 621 528 "zen-browser": "zen-browser" 622 529 } 623 530 }, 624 - "rtf-tokenize": { 625 - "flake": false, 626 - "locked": { 627 - "lastModified": 1751102035, 628 - "narHash": "sha256-bM/DFl1mpHgeBItdyA5Tt+Eo9u82Gz+6qwft2h0bM94=", 629 - "owner": "openstenoproject", 630 - "repo": "rtf_tokenize", 631 - "rev": "5c4ad772f4b45ceb35b60584e22a171e90526916", 632 - "type": "github" 633 - }, 634 - "original": { 635 - "owner": "openstenoproject", 636 - "repo": "rtf_tokenize", 637 - "type": "github" 638 - } 639 - }, 640 531 "rust-overlay": { 641 532 "inputs": { 642 533 "nixpkgs": [ ··· 665 556 ] 666 557 }, 667 558 "locked": { 668 - "lastModified": 1762812535, 669 - "narHash": "sha256-A91a+K0Q9wfdPLwL06e/kbHeAWSzPYy2EGdTDsyfb+s=", 559 + "lastModified": 1763264763, 560 + "narHash": "sha256-N0BEoJIlJ+M6sWZJ8nnfAjGY9VLvM6MXMitRenmhBkY=", 670 561 "owner": "Mic92", 671 562 "repo": "sops-nix", 672 - "rev": "d75e4f89e58fdda39e4809f8c52013caa22483b7", 563 + "rev": "882e56c8293e44d57d882b800a82f8b2ee7a858f", 673 564 "type": "github" 674 565 }, 675 566 "original": { ··· 727 618 ] 728 619 }, 729 620 "locked": { 730 - "lastModified": 1762882380, 731 - "narHash": "sha256-TwI+RSXRk7a+nkpnr+GMX7xql0svASZ1A0bcZqve+lQ=", 621 + "lastModified": 1763335137, 622 + "narHash": "sha256-Sp2A2iKwqcJnnDBfqyftRb4ANP8fKLCT293YSAsj/lk=", 732 623 "owner": "vicinaehq", 733 624 "repo": "vicinae", 734 - "rev": "e0f7593a411c2bbbe7fb25a47e364961929cf920", 625 + "rev": "550fe74b28ab0554c15b4ef6f2c19dcaffc04dde", 735 626 "type": "github" 736 627 }, 737 628 "original": { ··· 765 656 ] 766 657 }, 767 658 "locked": { 768 - "lastModified": 1762835117, 769 - "narHash": "sha256-qwUWaKy+kmTBk6xxMI0yfkD5IU2gcxXOXNPJ2T+Enys=", 659 + "lastModified": 1763317021, 660 + "narHash": "sha256-UOP9AyuBvQCEzGe6u8FxuhnJU2ShUPU4G7z7zraFNoo=", 770 661 "owner": "0xc000022070", 771 662 "repo": "zen-browser-flake", 772 - "rev": "51f5194aff34d130d07f684df2a85b10a3933558", 663 + "rev": "db2be18049b9159a33ee7083566040fca4254c03", 773 664 "type": "github" 774 665 }, 775 666 "original": {
+2 -5
flake.nix
··· 6 6 inputs = { 7 7 flake-parts.url = "github:hercules-ci/flake-parts"; 8 8 import-tree.url = "github:vic/import-tree"; 9 + den.url = "github:vic/den"; 10 + flake-aspects.url = "github:vic/flake-aspects"; 9 11 10 12 nixpkgs.url = "https://channels.nixos.org/nixos-unstable/nixexprs.tar.xz"; 11 13 ··· 76 78 77 79 moonlight = { 78 80 url = "github:moonlight-mod/moonlight"; # Add `/develop` to the flake URL to use nightly. 79 - inputs.nixpkgs.follows = "nixpkgs"; 80 - }; 81 - 82 - plover = { 83 - url = "github:openstenoproject/plover-flake"; 84 81 inputs.nixpkgs.follows = "nixpkgs"; 85 82 }; 86 83
-90
hosts/hades/default.nix
··· 1 - { inputs, config, ... }: 2 - { 3 - unify.hosts.nixos.hades = { 4 - modules = with config.unify.modules; [ 5 - workstation 6 - desktop 7 - gaming 8 - replays 9 - hacking 10 - virtualisation 11 - cachix 12 - localai 13 - zsa-kb 14 - syncthing-client 15 - plover 16 - radicle 17 - catppuccin 18 - ]; 19 - 20 - primaryDisplay = config.unify.hosts.nixos.hades.displays.DP-3; 21 - displays = { 22 - DP-3 = { 23 - primary = true; 24 - refreshRate = 240; 25 - width = 1920; 26 - height = 1080; 27 - }; 28 - HDMI-A-1 = { 29 - refreshRate = 60; 30 - width = 1920; 31 - height = 1080; 32 - x = -1920; 33 - }; 34 - }; 35 - 36 - users.quasi.modules = config.unify.hosts.nixos.hades.modules; 37 - 38 - nixos = 39 - { pkgs, ... }: 40 - { 41 - facter.reportPath = ./facter.json; 42 - imports = with inputs; [ 43 - nixos-hardware.nixosModules.common-cpu-amd 44 - nixos-hardware.nixosModules.common-gpu-amd 45 - nixos-hardware.nixosModules.common-pc-ssd 46 - nix-gaming.nixosModules.pipewireLowLatency 47 - ]; 48 - 49 - hardware.amdgpu.opencl.enable = true; 50 - 51 - services.pipewire.lowLatency = { 52 - enable = true; 53 - rate = 48000; 54 - quantum = 256; 55 - }; 56 - 57 - boot.kernelPackages = inputs.chaotic.legacyPackages.${pkgs.stdenv.hostPlatform.system}.linuxPackages_cachyos; 58 - 59 - services.resolved.fallbackDns = [ ]; 60 - systemd.network = { 61 - enable = true; 62 - links."01-ethernet" = { 63 - matchConfig.Type = "ether"; 64 - linkConfig.WakeOnLan = "magic"; 65 - }; 66 - networks."01-ethernet" = { 67 - matchConfig.Name = "enp8s0"; 68 - networkConfig.DHCP = "yes"; 69 - }; 70 - }; 71 - 72 - networking = { 73 - networkmanager.enable = false; 74 - hostName = "hades"; 75 - firewall = { 76 - allowedUDPPorts = [ 77 - 3074 # BO2 78 - 24872 # Yuzu 79 - ]; 80 - }; 81 - }; 82 - 83 - services = { 84 - ollama.rocmOverrideGfx = "11.0.1"; 85 - openssh.ports = [ 42069 ]; 86 - fwupd.enable = true; 87 - }; 88 - }; 89 - }; 90 - }
hosts/hades/facter.json modules/hosts/hades/_facter.json
-28
hosts/hades/filesystems.nix
··· 1 - { 2 - unify.hosts.nixos.hades = { 3 - nixos = { 4 - fileSystems."/" = { 5 - device = "/dev/disk/by-label/NIXROOT"; 6 - fsType = "btrfs"; 7 - options = [ "compress=zstd" "noatime" ]; 8 - }; 9 - fileSystems."/boot" = { 10 - device = "/dev/disk/by-label/NIXBOOT"; 11 - fsType = "vfat"; 12 - options = [ "noatime" ]; 13 - }; 14 - services = { 15 - btrfs.autoScrub.enable = true; 16 - beesd.filesystems.nixroot = { 17 - spec = "LABEL=NIXROOT"; 18 - hashTableSizeMB = 256; 19 - verbosity = "crit"; 20 - extraOptions = [ 21 - "--loadavg-target" 22 - "2.0" 23 - ]; 24 - }; 25 - }; 26 - }; 27 - }; 28 - }
+19 -19
hosts/zagreus/default.nix modules/hosts/zagreus/default.nix
··· 1 - { inputs, config, ... }: 2 1 { 3 - unify.hosts.nixos.zagreus = { 4 - modules = with config.unify.modules; [ 5 - laptop 6 - workstation 7 - hacking 8 - virtualisation 9 - plymouth 10 - secure-boot 11 - syncthing-client 12 - catppuccin 13 - ]; 14 - 15 - primaryDisplay = config.unify.hosts.nixos.zagreus.displays.eDP-1; 2 + den, 3 + config, 4 + inputs, 5 + ... 6 + }: 7 + { 8 + hostConfig.zagreus = { 9 + primaryDisplay = config.hostConfig.zagreus.displays.eDP-1; 16 10 displays = { 17 11 eDP-1 = { 18 12 refreshRate = 60; ··· 21 15 scaling = 1.50; 22 16 }; 23 17 }; 18 + }; 24 19 25 - users.quasi.modules = config.unify.hosts.nixos.zagreus.modules; 20 + den.hosts.x86_64-linux.zagreus = { inherit (config.hostConfig.zagreus) displays primaryDisplay; }; 21 + den.aspects.zagreus = { 22 + includes = with den.aspects; [ 23 + laptop 24 + hax 25 + ]; 26 26 27 27 nixos = 28 28 { pkgs, ... }: 29 29 { 30 + facter.reportPath = ./_facter.json; 30 31 imports = [ inputs.nixos-hardware.nixosModules.framework-13-7040-amd ]; 31 - 32 - facter.reportPath = ./facter.json; 33 32 hardware.framework.enableKmod = false; 34 33 hardware.amdgpu.opencl.enable = true; 35 34 36 35 boot = { 37 - kernelPackages = inputs.chaotic.legacyPackages.${pkgs.stdenv.hostPlatform.system}.linuxPackages_cachyos; 36 + kernelPackages = 37 + inputs.chaotic.legacyPackages.${pkgs.stdenv.hostPlatform.system}.linuxPackages_cachyos; 38 38 kernelParams = [ "acpi_backlight=native" ]; 39 39 plymouth.enable = true; 40 40 binfmt.emulatedSystems = [ "aarch64-linux" ]; ··· 42 42 43 43 networking.hostName = "zagreus"; 44 44 45 - environment.sessionVariables.COSMIC_DISABLE_DIRECT_SCANOUT = 1; # fix crashes 45 + environment.sessionVariables.COSMIC_DISABLE_DIRECT_SCANOUT = 1; # TODO fix crashes 46 46 47 47 services = { 48 48 fprintd.enable = false; # Enable fingerprint scanner
hosts/zagreus/facter.json modules/hosts/zagreus/_facter.json
-47
hosts/zagreus/filesystems.nix
··· 1 - { 2 - unify.hosts.nixos.zagreus = { 3 - nixos = { 4 - fileSystems."/" = { 5 - device = "/dev/disk/by-uuid/c3fde0b2-d7da-4109-b4cb-27c7a2e53e4b"; 6 - fsType = "btrfs"; 7 - options = [ 8 - "subvol=nixos" 9 - "noatime" 10 - ]; 11 - }; 12 - 13 - boot.initrd.luks.devices."nixroot".device = 14 - "/dev/disk/by-uuid/02eca0c6-bf0c-4bbb-93c7-687719bbf1fa"; 15 - 16 - fileSystems."/boot" = { 17 - device = "/dev/disk/by-uuid/0001-9657"; 18 - fsType = "vfat"; 19 - options = [ 20 - "fmask=0022" 21 - "dmask=0022" 22 - "noatime" 23 - ]; 24 - }; 25 - 26 - swapDevices = [ 27 - { 28 - device = "/var/lib/swapfile"; 29 - size = 32 * 1024; # 16 GB 30 - } 31 - ]; 32 - 33 - services = { 34 - btrfs.autoScrub.enable = true; 35 - beesd.filesystems.root = { 36 - spec = "LABEL=root"; 37 - hashTableSizeMB = 256; 38 - verbosity = "crit"; 39 - extraOptions = [ 40 - "--loadavg-target" 41 - "2.0" 42 - ]; 43 - }; 44 - }; 45 - }; 46 - }; 47 - }
+10
modules/apps/adb.nix
··· 1 + { 2 + den.aspects.apps.provides.adb = 3 + { user, ... }: 4 + { 5 + nixos = { 6 + users.users.${user.userName}.extraGroups = [ "adbusers" ]; 7 + programs.adb.enable = true; 8 + }; 9 + }; 10 + }
+53
modules/apps/core.nix
··· 1 + { 2 + den.aspects.apps._.coreutils.homeManager = 3 + { pkgs, ... }: 4 + { 5 + home.packages = with pkgs; [ 6 + aria2 7 + choose 8 + difftastic 9 + dogdns 10 + dua 11 + dust 12 + edir 13 + eva # calculator repl 14 + fd 15 + file 16 + gdu 17 + gh 18 + git 19 + glow 20 + gptfdisk 21 + hexyl 22 + imagemagick 23 + inotify-tools 24 + isd 25 + killall 26 + lemmeknow 27 + lurk 28 + mprocs 29 + ouch 30 + pciutils 31 + procs 32 + progress 33 + psmisc 34 + psutils 35 + rclone 36 + ripgrep 37 + ripgrep-all 38 + rsync 39 + sd 40 + strace 41 + systeroid 42 + tcpdump 43 + traceroute 44 + try 45 + unrar 46 + unzip 47 + usbutils 48 + waypipe 49 + wget 50 + whois 51 + ]; 52 + }; 53 + }
+32
modules/apps/default.nix
··· 1 + { __findFile, ... }: 2 + { 3 + den.aspects = { 4 + quasi.includes = [ 5 + <nushell> 6 + <fish> 7 + <shell> 8 + <apps/coreutils> 9 + ]; 10 + workstation.includes = [ 11 + <dev> 12 + <apps/gui> 13 + 14 + <apps/distrobox> 15 + <apps/ghostty> 16 + <apps/git> 17 + <apps/jujutsu> 18 + <apps/halloy> 19 + <apps/helix> 20 + <apps/localsend> 21 + <apps/nh> 22 + <apps/nix-tools> 23 + <apps/radicle> 24 + <apps/topgrade> 25 + <apps/vicinae> 26 + <apps/wezterm> 27 + <apps/zen> 28 + <apps/zsa> 29 + ]; 30 + }; 31 + 32 + }
+28
modules/apps/ghostty.nix
··· 1 + { 2 + den.aspects.apps._.ghostty.homeManager.programs.ghostty = { 3 + enable = true; 4 + enableBashIntegration = true; 5 + enableFishIntegration = true; 6 + enableZshIntegration = true; 7 + settings = { 8 + shell-integration-features = true; 9 + window-decoration = "server"; 10 + window-padding-x = 4; 11 + window-padding-color = "extend"; 12 + window-padding-balance = true; 13 + keybind = [ 14 + "ctrl+alt+v=new_split:right" 15 + "ctrl+alt+s=new_split:down" 16 + "ctrl+alt+n=new_split:auto" 17 + "ctrl+shift+h=goto_split:left" 18 + "ctrl+shift+j=goto_split:bottom" 19 + "ctrl+shift+k=goto_split:top" 20 + "ctrl+shift+l=goto_split:right" 21 + "ctrl+shift+w=close_surface" 22 + "page_up=scroll_page_fractional:-0.5" 23 + "page_down=scroll_page_fractional:+0.5" 24 + "ctrl+shift+r=reload_config" 25 + ]; 26 + }; 27 + }; 28 + }
+29
modules/apps/gui.nix
··· 1 + { inputs, ... }: 2 + { 3 + den.aspects.apps._.gui.homeManager = 4 + { pkgs, ... }: 5 + { 6 + home.packages = with pkgs; [ 7 + libreoffice 8 + hunspell 9 + hunspellDicts.en_US-large 10 + remmina 11 + (bottles.override { removeWarningPopup = true; }) 12 + varia 13 + proton-pass 14 + element-desktop 15 + obsidian 16 + orca-slicer 17 + freecad 18 + gearlever 19 + dino 20 + ungoogled-chromium 21 + (pkgs.discord.override { 22 + withOpenASAR = true; 23 + enableAutoscroll = true; 24 + withMoonlight = true; 25 + moonlight = inputs.moonlight.packages.${stdenv.hostPlatform.system}.moonlight; 26 + }) 27 + ]; 28 + }; 29 + }
+13
modules/apps/nh.nix
··· 1 + { 2 + den.aspects.apps._.nh = { 3 + homeManager = 4 + { config, ... }: 5 + { 6 + programs.nh = { 7 + enable = true; 8 + osFlake = "${config.home.homeDirectory}/.flake"; 9 + homeFlake = "${config.home.homeDirectory}/.flake"; 10 + }; 11 + }; 12 + }; 13 + }
+23
modules/apps/nix-tools.nix
··· 1 + { inputs, ... }: 2 + { 3 + den.aspects.apps._.nix-tools = { 4 + homeManager = 5 + { pkgs, ... }: 6 + { 7 + home.packages = with pkgs; [ 8 + # Nix 9 + deadnix 10 + lixPackageSets.latest.nixpkgs-review 11 + lixPackageSets.latest.nix-update 12 + nix-init 13 + nix-inspect 14 + nixos-rebuild-ng 15 + nix-output-monitor 16 + nix-tree 17 + nurl 18 + statix 19 + vulnix 20 + ]; 21 + }; 22 + }; 23 + }
+80
modules/apps/nushell.nix
··· 1 + { lib, ... }: 2 + { 3 + den.aspects.nushell = 4 + { user, ... }: 5 + { 6 + nixos = 7 + { pkgs, ... }: 8 + { 9 + environment.systemPackages = [ pkgs.nushell ]; 10 + users.users.${user.userName}.shell = pkgs.bashInteractive; 11 + }; 12 + homeManager = 13 + { pkgs, ... }: 14 + { 15 + programs = { 16 + nushell = { 17 + package = pkgs.nushell.override { 18 + additionalFeatures = _: [ 19 + "full" 20 + "mcp" 21 + ]; 22 + }; 23 + plugins = with pkgs.nushellPlugins; [ 24 + # highlight 25 + # net 26 + # query 27 + # skim 28 + # units 29 + ]; 30 + enable = true; 31 + shellAliases = { 32 + l = "ls"; 33 + la = "ls -a"; 34 + ll = "ls -al"; 35 + mkdir = lib.mkForce "mkdir"; 36 + }; 37 + extraConfig = '' 38 + $env.config = { 39 + show_banner: false 40 + display_errors: { 41 + exit_code: false 42 + termination_signal: true 43 + } 44 + completions: { 45 + algorithm: "fuzzy" 46 + } 47 + } 48 + 49 + # fix paths in distrobox 50 + use std/util "path add" 51 + if "DISTROBOX_ENTER_PATH" in $env { 52 + path add "/usr/local/sbin" 53 + path add "/usr/local/bin" 54 + path add "/usr/sbin" 55 + path add "/usr/bin" 56 + path add "/sbin" 57 + path add "/bin" 58 + } 59 + ''; 60 + }; 61 + carapace = { 62 + enable = true; 63 + enableNushellIntegration = true; 64 + }; 65 + bash.initExtra = '' 66 + # https://discourse.nixos.org/t/nushell-as-default-shell/68609/17 67 + # Some programs launch interactive shells and pretend 68 + # to use them; such programs always expect a form of POSIX 69 + # shell. 70 + # 71 + # If you don't use programs like that, you can just skip 72 + # this conditional. 73 + if ! [ "$TERM" = "dumb" ]; then 74 + exec nu 75 + fi 76 + ''; 77 + }; 78 + }; 79 + }; 80 + }
+14
modules/apps/wezterm/default.nix
··· 1 + { 2 + den.aspects.apps._.wezterm = { 3 + homeManager.programs.wezterm = { 4 + enable = true; 5 + extraConfig = builtins.readFile ./config.lua; 6 + }; 7 + nixos = 8 + { pkgs, ... }: 9 + { 10 + environment.systemPackages = [ pkgs.wezterm ]; 11 + xdg.terminal-exec.settings.default = [ "org.wezfurlong.wezterm.desktop" ]; 12 + }; 13 + }; 14 + }
+49
modules/boot.nix
··· 1 + { 2 + den, 3 + lib, 4 + inputs, 5 + ... 6 + }: 7 + { 8 + den.aspects = { 9 + boot = { 10 + nixos.boot = { 11 + initrd.systemd.enable = true; 12 + loader = { 13 + systemd-boot.enable = lib.mkDefault true; # needs to be overridden for secure boot 14 + efi.canTouchEfiVariables = true; 15 + timeout = 3; 16 + }; 17 + }; 18 + 19 + provides.secure = { 20 + includes = [ den.aspects.boot ]; 21 + nixos = { 22 + imports = [ inputs.lanzaboote.nixosModules.lanzaboote ]; 23 + boot = { 24 + loader.systemd-boot.enable = false; 25 + lanzaboote = { 26 + enable = true; 27 + pkiBundle = "/var/lib/sbctl"; 28 + }; 29 + }; 30 + }; 31 + }; 32 + 33 + provides.graphical.nixos.boot = { 34 + plymouth.enable = true; 35 + consoleLogLevel = 3; 36 + initrd.verbose = false; 37 + initrd.systemd.enable = true; 38 + kernelParams = [ 39 + "quiet" 40 + "splash" 41 + "intremap=on" 42 + "boot.shell_on_fail" 43 + "udev.log_priority=3" 44 + "rd.systemd.show_status=auto" 45 + ]; 46 + }; 47 + }; 48 + }; 49 + }
-25
modules/boot/default.nix
··· 1 - { lib, ... }: 2 - { 3 - unify = { 4 - modules.workstation.nixos.boot = { 5 - kernel.sysctl."vm.swappiness" = 1; 6 - supportedFilesystems = [ "ntfs" ]; # Adds NTFS driver 7 - }; 8 - nixos.boot = { 9 - initrd.systemd.enable = true; 10 - loader = { 11 - systemd-boot.enable = lib.mkDefault true; # needs to be overridden for secure boot 12 - efi.canTouchEfiVariables = true; 13 - timeout = 3; 14 - }; 15 - kernel.sysctl = { 16 - "transparent_hugepage" = "always"; 17 - "vm.nr_hugepages_defrag" = 0; 18 - "ipcs_shm" = 1; 19 - "default_hugepagez" = "1G"; 20 - "hugepagesz" = "1G"; 21 - "vm.compact_memory" = 0; 22 - }; 23 - }; 24 - }; 25 - }
-16
modules/boot/plymouth.nix
··· 1 - { 2 - unify.modules.plymouth.nixos.boot = { 3 - plymouth.enable = true; 4 - consoleLogLevel = 3; 5 - initrd.verbose = false; 6 - initrd.systemd.enable = true; 7 - kernelParams = [ 8 - "quiet" 9 - "splash" 10 - "intremap=on" 11 - "boot.shell_on_fail" 12 - "udev.log_priority=3" 13 - "rd.systemd.show_status=auto" 14 - ]; 15 - }; 16 - }
-13
modules/boot/secure-boot.nix
··· 1 - { inputs, ... }: 2 - { 3 - unify.modules.secure-boot.nixos = { 4 - imports = [ inputs.lanzaboote.nixosModules.lanzaboote ]; 5 - boot = { 6 - loader.systemd-boot.enable = false; 7 - lanzaboote = { 8 - enable = true; 9 - pkiBundle = "/var/lib/sbctl"; 10 - }; 11 - }; 12 - }; 13 - }
+43
modules/default.nix
··· 1 + { den, inputs, ... }: 2 + { 3 + den.default = { 4 + nixos = 5 + { pkgs, lib, ... }: 6 + { 7 + imports = [ inputs.nixos-facter-modules.nixosModules.facter ]; 8 + environment = { 9 + binsh = "${pkgs.dash}/bin/dash"; 10 + defaultPackages = lib.mkForce [ ]; 11 + }; 12 + documentation.doc.enable = false; 13 + documentation.info.enable = false; 14 + i18n.defaultLocale = "en_US.UTF-8"; 15 + i18n.supportedLocales = [ "all" ]; 16 + services.dbus.implementation = "broker"; 17 + system.rebuild.enableNg = true; 18 + system.stateVersion = "22.05"; 19 + time.timeZone = "America/New_York"; 20 + zramSwap.enable = true; 21 + home-manager.useUserPackages = true; 22 + home-manager.useGlobalPkgs = true; 23 + }; 24 + homeManager = { 25 + home = { 26 + sessionPath = [ "$HOME/.local/bin" ]; 27 + sessionVariables.NIXPKGS_ALLOW_UNFREE = "1"; 28 + stateVersion = "22.05"; 29 + }; 30 + programs.home-manager.enable = true; 31 + }; 32 + includes = [ 33 + den.provides.home-manager 34 + den.provides.define-user 35 + # (den.lib.take.exactly ( 36 + # { OS, host }: 37 + # { 38 + # nixos.networking.hostName = host.hostName; 39 + # } 40 + # )) 41 + ]; 42 + }; 43 + }
+6 -2
modules/den.nix
··· 1 - { inputs, ... }: 1 + { inputs, den, ... }: 2 + 2 3 { 3 - imports = [ inputs.den.flakeModules.dedritic ]; 4 + imports = [ inputs.den.flakeModule ]; 5 + _module.args.__findFile = den.lib.__findFile; 6 + den.hosts.x86_64-linux.hades.users.quasi = { }; 7 + den.hosts.x86_64-linux.zagreus.users.quasi = { }; 4 8 }
+4 -3
modules/desktops/cosmic.nix modules/cosmic.nix
··· 1 + { den, ... }: 1 2 { 2 - unify.modules.workstation = { 3 - home = 3 + den.aspects.cosmic = { 4 + includes = [ den.aspects.wayland ]; 5 + homeManager = 4 6 { pkgs, lib, ... }: 5 7 { 6 8 xdg.configFile = { ··· 14 16 package = lib.mkForce pkgs.cosmic-icons; 15 17 }; 16 18 }; 17 - 18 19 nixos = 19 20 { pkgs, lib, ... }: 20 21 {
-45
modules/desktops/default.nix
··· 1 - { 2 - unify.modules.workstation = { 3 - nixos = 4 - { pkgs, ... }: 5 - { 6 - programs = { 7 - dconf.enable = true; 8 - appimage = { 9 - enable = true; 10 - binfmt = true; 11 - }; 12 - }; 13 - services.pipewire = { 14 - enable = true; 15 - alsa.enable = true; 16 - alsa.support32Bit = true; 17 - pulse.enable = true; 18 - jack.enable = true; 19 - }; 20 - environment = { 21 - systemPackages = [ pkgs.wl-clipboard ]; 22 - sessionVariables.NIXOS_OZONE_WL = "1"; 23 - }; 24 - }; 25 - 26 - home = 27 - { config, ... }: 28 - { 29 - qt.enable = true; 30 - gtk = { 31 - enable = true; 32 - gtk2.configLocation = "${config.xdg.configHome}/gtk-2.0/gtkrc"; 33 - gtk3 = { 34 - bookmarks = [ 35 - "file:///home/quasi/Downloads Downloads" 36 - "file:///home/quasi/Documents Documents" 37 - "file:///home/quasi/Pictures Pictures" 38 - "file:///home/quasi/Videos Videos" 39 - "file:///home/quasi/Games Games" 40 - ]; 41 - }; 42 - }; 43 - }; 44 - }; 45 - }
+66
modules/filesystems.nix
··· 1 + { lib, ... }: 2 + { 3 + den.aspects.filesystems.provides = { 4 + nixos.boot.supportedFilesystems = [ "ntfs" ]; 5 + zfs.nixos = 6 + { config, pkgs, ... }: 7 + { 8 + boot.supportedFilesystems = [ "zfs" ]; 9 + services.zfs = { 10 + trim.enable = true; 11 + autoScrub.enable = true; 12 + }; 13 + services.sanoid = { 14 + enable = true; 15 + templates.main = { 16 + daily = 30; 17 + hourly = 24; 18 + }; 19 + datasets = builtins.listToAttrs ( 20 + map (pool: { 21 + name = pool; 22 + value = { 23 + useTemplate = [ "main" ]; 24 + }; 25 + }) config.boot.zfs.extraPools 26 + ); 27 + }; 28 + sops.secrets.ntfy_creds = { }; 29 + sops.secrets.ntfy_url = { }; 30 + systemd = { 31 + services."zpool-check" = { 32 + path = with pkgs; [ 33 + curl 34 + zfs 35 + choose 36 + ntfy-sh 37 + ]; 38 + script = '' 39 + ${pkgs.writeScript "zpool-check-script" '' 40 + #!${lib.getExe pkgs.nushell} 41 + let status = zpool status -x 42 + if ($status | str trim) == "all pools are healthy" { 43 + print $"($status)" 44 + } else { 45 + print $"($status)" 46 + (ntfy publish 47 + -u $"(cat ${config.sops.secrets.ntfy_creds.path}) 48 + $"(cat ${config.sops.secrets.ntfy_url.path}) 49 + $status) 50 + } 51 + exit 0 52 + ''} 53 + ''; 54 + }; 55 + timers."zpool-check" = { 56 + wantedBy = [ "timers.target" ]; 57 + timerConfig = { 58 + OnBootSec = "1h"; 59 + OnUnitActiveSec = "1h"; 60 + Unit = "zpool-check.service"; 61 + }; 62 + }; 63 + }; 64 + }; 65 + }; 66 + }
+100
modules/gaming.nix
··· 1 + { den, inputs, ... }: 2 + { 3 + den.aspects.gaming = { 4 + provides.min = 5 + { host, ... }: 6 + { 7 + nixos = 8 + { pkgs, ... }: 9 + { 10 + boot.kernelModules = [ "ntsync" ]; 11 + environment.systemPackages = with pkgs; [ 12 + # Launchers 13 + cartridges 14 + heroic 15 + (lutris.override { 16 + extraPkgs = _: [ umu-launcher ]; 17 + extraLibraries = _: [ latencyflex-vulkan ]; 18 + }) 19 + prismlauncher 20 + umu-launcher 21 + ]; 22 + hardware.graphics.enable32Bit = true; 23 + programs = { 24 + steam = { 25 + enable = true; 26 + extraCompatPackages = with pkgs; [ 27 + proton-ge-bin 28 + steamtinkerlaunch 29 + ]; 30 + }; 31 + gamescope = { 32 + enable = true; 33 + args = [ 34 + "-W ${toString host.primaryDisplay.width}" 35 + "-H ${toString host.primaryDisplay.height}" 36 + "-r ${toString host.primaryDisplay.refreshRate}" 37 + "-O ${host.primaryDisplay.name}" 38 + "-f" 39 + "--adaptive-sync" 40 + "--mangoapp" 41 + ]; 42 + }; 43 + }; 44 + }; 45 + }; 46 + 47 + provides.max = { 48 + includes = [ den.aspects.gaming._.replays ]; 49 + nixos = 50 + { pkgs, ... }: 51 + { 52 + imports = [ 53 + inputs.nix-gaming.nixosModules.platformOptimizations # TODO needed? 54 + inputs.chaotic.nixosModules.default 55 + ]; 56 + hardware.opentabletdriver.enable = true; 57 + services = { 58 + input-remapper.enable = true; 59 + system76-scheduler.enable = true; 60 + }; 61 + programs = { 62 + steam = { 63 + platformOptimizations.enable = true; 64 + remotePlay.openFirewall = true; 65 + localNetworkGameTransfers.openFirewall = true; 66 + extraPackages = [ pkgs.latencyflex-vulkan ]; 67 + }; 68 + }; 69 + chaotic.nyx.overlay.enable = true; 70 + environment.systemPackages = with pkgs; [ 71 + # Utility 72 + goverlay 73 + gpu-screen-recorder-gtk 74 + latencyflex-vulkan 75 + lsfg-vk 76 + lsfg-vk-ui 77 + ludusavi 78 + mangohud 79 + nexusmods-app 80 + protonplus 81 + protontricks 82 + r2modman 83 + winetricks 84 + ]; 85 + }; 86 + }; 87 + 88 + provides.replays.homeManager = 89 + { pkgs, lib, ... }: 90 + { 91 + home.packages = [ pkgs.gpu-screen-recorder ]; 92 + systemd.user.services.gpu-screen-recorder = { 93 + # Save a video using `killall -SIGUSR1 gpu-screen-recorder` (or any other way to send a SIGUSR1 signal to gpu-screen-recorder) 94 + Unit.Description = "gpu-screen-recorder replay service"; 95 + Install.WantedBy = [ "graphical-session.target" ]; 96 + Service.ExecStart = "${lib.getExe pkgs.gpu-screen-recorder} -w portal -f 60 -r 60 -a 'default_output' -a 'default_input' -c mp4 -q high -o %h/Videos/Replays -restore-portal-session yes -v no"; 97 + }; 98 + }; 99 + }; 100 + }
-93
modules/gaming/default.nix
··· 1 - { inputs, ... }: 2 - { 3 - unify.modules.gaming = { 4 - nixos = 5 - { pkgs, hostConfig, ... }: 6 - { 7 - imports = [ 8 - inputs.nix-gaming.nixosModules.platformOptimizations 9 - inputs.chaotic.nixosModules.default 10 - ]; 11 - boot.kernelModules = [ "ntsync" ]; 12 - chaotic.nyx.overlay.enable = true; 13 - environment.systemPackages = with pkgs; [ 14 - # Launchers 15 - cartridges 16 - heroic 17 - lunar-client 18 - (lutris.override { 19 - extraPkgs = _: [ umu-launcher ]; 20 - extraLibraries = _: [ latencyflex-vulkan ]; 21 - }) 22 - prismlauncher 23 - umu-launcher 24 - 25 - # Utility 26 - goverlay 27 - mangohud 28 - protontricks 29 - protonplus 30 - r2modman 31 - winetricks 32 - ludusavi 33 - nexusmods-app 34 - latencyflex-vulkan 35 - 36 - # Recording 37 - gpu-screen-recorder 38 - gpu-screen-recorder-gtk 39 - 40 - lsfg-vk 41 - lsfg-vk-ui 42 - ]; 43 - # Allows gpu-screen-recorder to record screens without escalating 44 - hardware = { 45 - opentabletdriver.enable = true; 46 - graphics.enable32Bit = true; 47 - }; 48 - services = { 49 - input-remapper.enable = true; 50 - system76-scheduler.enable = true; 51 - }; 52 - programs = { 53 - steam = { 54 - enable = true; 55 - platformOptimizations.enable = true; 56 - remotePlay.openFirewall = true; 57 - localNetworkGameTransfers.openFirewall = true; 58 - extraPackages = [ pkgs.latencyflex-vulkan ]; 59 - extraCompatPackages = with pkgs; [ 60 - proton-ge-bin 61 - steamtinkerlaunch 62 - ]; 63 - }; 64 - gamescope = { 65 - enable = true; 66 - args = [ 67 - "-W ${toString hostConfig.primaryDisplay.width}" 68 - "-H ${toString hostConfig.primaryDisplay.height}" 69 - "-r ${toString hostConfig.primaryDisplay.refreshRate}" 70 - "-O ${hostConfig.primaryDisplay.name}" 71 - "-f" 72 - "--adaptive-sync" 73 - "--mangoapp" 74 - ]; 75 - }; 76 - }; 77 - }; 78 - home = 79 - { pkgs, ... }: 80 - { 81 - programs.obs-studio = { 82 - enable = true; 83 - plugins = with pkgs.obs-studio-plugins; [ 84 - obs-vkcapture 85 - obs-pipewire-audio-capture 86 - obs-gstreamer 87 - input-overlay 88 - obs-backgroundremoval 89 - ]; 90 - }; 91 - }; 92 - }; 93 - }
-28
modules/gaming/replays.nix
··· 1 - { lib, ... }: 2 - { 3 - unify.modules.replays = { 4 - # Allows gpu-screen-recorder to record screens without escalating 5 - nixos = 6 - { pkgs, ... }: 7 - { 8 - security.wrappers.gsr-kms-server = { 9 - source = lib.getExe' pkgs.gpu-screen-recorder "gsr-kms-server"; 10 - capabilities = "cap_sys_admin+ep"; 11 - owner = "root"; 12 - group = "root"; 13 - }; 14 - }; 15 - home = 16 - { pkgs, hostConfig, ... }: 17 - { 18 - systemd.user.services.gpu-screen-recorder-replay = { 19 - # Save a video using `killall -SIGUSR1 gpu-screen-recorder` (or any other way to send a SIGUSR1 signal to gpu-screen-recorder) 20 - Unit.Description = "gpu-screen-recorder replay service"; 21 - Install.WantedBy = [ "graphical-session.target" ]; 22 - Service = { 23 - ExecStart = "${lib.getExe pkgs.gpu-screen-recorder} -w ${hostConfig.primaryDisplay.name} -f 60 -r 60 -a 'default_output|default_input' -c mp4 -q very_high -o %h/Videos/Replays -restore-portal-session yes -v no"; 24 - }; 25 - }; 26 - }; 27 - }; 28 - }
+25 -24
modules/hacking/default.nix
··· 2 2 inputs, 3 3 lib, 4 4 withSystem, 5 + den, 5 6 ... 6 7 }: 7 8 { 8 - unify.modules.hacking = { 9 - nixos = 10 - { hostConfig, ... }: 11 - { 12 - environment.etc.hosts.mode = "0644"; 13 - # until exegol supports podman 14 - virtualisation.docker.enable = true; 15 - programs.wireshark.enable = true; 16 - users.users.${hostConfig.primaryUser}.extraGroups = [ 17 - "wireshark" 18 - "docker" 19 - ]; 20 - }; 21 - home = 9 + den.aspects.hax = { 10 + includes = [ den.aspects.hax._.subfinder ]; 11 + nixos = { 12 + environment.etc.hosts.mode = "0644"; 13 + # TODO until exegol supports podman 14 + virtualisation.docker.enable = true; 15 + programs.wireshark.enable = true; 16 + users.users.quasi.extraGroups = [ 17 + # TODO 18 + "wireshark" 19 + "docker" 20 + ]; 21 + }; 22 + homeManager = 22 23 { pkgs, config, ... }: 23 24 { 24 25 sops.secrets.shodan_api_key = { }; ··· 88 89 aircrack-ng 89 90 90 91 # Forensics Tools 91 - autopsy 92 + # autopsy # TODO 92 93 volatility3 93 94 binwalk 94 95 exiftool ··· 126 127 # Reverse Engineering 127 128 ghidra 128 129 cutter 129 - imhex 130 + # imhex # TODO 130 131 131 132 # Social Engineering Tools 132 133 social-engineer-toolkit ··· 145 146 basePackage = pkgs.metasploit; 146 147 programs.msfconsole.prependFlags = [ "--defer-module-loads" ]; 147 148 }) 148 - (inputs.wrapper-manager.lib.wrapWith pkgs { 149 - basePackage = (withSystem system (p: p.config.packages.mcp-zap-server)); 150 - env = { 151 - ZAP_API_PORT.value = "8080"; 152 - ZAP_API_URL.value = "localhost"; 153 - ZAP_API_KEY.value = "h8a0huc1mmp3efmjbu2e8hqhs"; 154 - }; 155 - }) 149 + # (inputs.wrapper-manager.lib.wrapWith pkgs { 150 + # basePackage = (withSystem system (p: p.config.packages.mcp-zap-server)); 151 + # env = { 152 + # ZAP_API_PORT.value = "8080"; 153 + # ZAP_API_URL.value = "localhost"; 154 + # ZAP_API_KEY.value = "h8a0huc1mmp3efmjbu2e8hqhs"; 155 + # }; 156 + # }) 156 157 ]; 157 158 }; 158 159 };
+1 -1
modules/hacking/subfinder.nix
··· 1 1 { 2 - unify.modules.hacking.home = 2 + den.aspects.hax._.subfinder.homeManager = 3 3 { lib, config, ... }: 4 4 { 5 5 sops.secrets = {
+96
modules/hosts/hades/default.nix
··· 1 + { 2 + den, 3 + config, 4 + inputs, 5 + ... 6 + }: 7 + { 8 + hostConfig.hades = { 9 + primaryDisplay = config.hostConfig.hades.displays.DP-3; 10 + displays = { 11 + DP-3 = { 12 + primary = true; 13 + refreshRate = 240; 14 + width = 1920; 15 + height = 1080; 16 + }; 17 + HDMI-A-1 = { 18 + refreshRate = 60; 19 + width = 1920; 20 + height = 1080; 21 + x = -1920; 22 + }; 23 + }; 24 + }; 25 + 26 + den.hosts.x86_64-linux.hades = { inherit (config.hostConfig.hades) displays primaryDisplay; }; 27 + den.aspects.hades = { 28 + includes = with den.aspects; [ 29 + desktop 30 + hax 31 + gaming._.min 32 + gaming._.max 33 + ai._.ollama 34 + apps._.radicle 35 + apps._.zsa 36 + services._.syncthing._.client 37 + (pipewire._.lowlatency { 38 + quantum = 256; 39 + rate = 48000; 40 + }) 41 + # wayland 42 + ]; 43 + 44 + nixos = 45 + { pkgs, ... }: 46 + { 47 + facter.reportPath = ./_facter.json; 48 + imports = with inputs; [ 49 + nixos-hardware.nixosModules.common-cpu-amd 50 + nixos-hardware.nixosModules.common-gpu-amd 51 + nixos-hardware.nixosModules.common-pc-ssd 52 + # nix-gaming.nixosModules.pipewireLowLatency 53 + ]; 54 + 55 + hardware.amdgpu.opencl.enable = true; 56 + nixpkgs.config.rocmSupport = true; 57 + environment.sessionVariables.HSA_OVERRIDE_GFX_VERSION = "11.0.1"; 58 + 59 + # services.pipewire.lowLatency = { 60 + # enable = true; 61 + # rate = 48000; 62 + # quantum = 256; 63 + # }; 64 + 65 + boot.kernelPackages = 66 + inputs.chaotic.legacyPackages.${pkgs.stdenv.hostPlatform.system}.linuxPackages_cachyos; 67 + 68 + services.resolved.fallbackDns = [ ]; 69 + systemd.network = { 70 + enable = true; 71 + links."01-ethernet" = { 72 + matchConfig.Type = "ether"; 73 + linkConfig.WakeOnLan = "magic"; 74 + }; 75 + networks."01-ethernet" = { 76 + matchConfig.Name = "enp8s0"; 77 + networkConfig.DHCP = "yes"; 78 + }; 79 + }; 80 + 81 + networking = { 82 + networkmanager.enable = false; 83 + hostName = "hades"; 84 + firewall = { 85 + allowedUDPPorts = [ 86 + 3074 # BO2 87 + 24872 # Yuzu 88 + ]; 89 + }; 90 + }; 91 + 92 + services.fwupd.enable = true; 93 + 94 + }; 95 + }; 96 + }
+29
modules/hosts/hades/filesystems.nix
··· 1 + { 2 + den.aspects.hades.nixos = { 3 + fileSystems."/" = { 4 + device = "/dev/disk/by-label/NIXROOT"; 5 + fsType = "btrfs"; 6 + options = [ 7 + "compress=zstd" 8 + "noatime" 9 + ]; 10 + }; 11 + fileSystems."/boot" = { 12 + device = "/dev/disk/by-label/NIXBOOT"; 13 + fsType = "vfat"; 14 + options = [ "noatime" ]; 15 + }; 16 + services = { 17 + btrfs.autoScrub.enable = true; 18 + beesd.filesystems.nixroot = { 19 + spec = "LABEL=NIXROOT"; 20 + hashTableSizeMB = 256; 21 + verbosity = "crit"; 22 + extraOptions = [ 23 + "--loadavg-target" 24 + "2.0" 25 + ]; 26 + }; 27 + }; 28 + }; 29 + }
+45
modules/hosts/zagreus/filesystems.nix
··· 1 + { 2 + den.aspects.zagreus.nixos = { 3 + fileSystems."/" = { 4 + device = "/dev/disk/by-uuid/c3fde0b2-d7da-4109-b4cb-27c7a2e53e4b"; 5 + fsType = "btrfs"; 6 + options = [ 7 + "subvol=nixos" 8 + "noatime" 9 + ]; 10 + }; 11 + 12 + boot.initrd.luks.devices."nixroot".device = 13 + "/dev/disk/by-uuid/02eca0c6-bf0c-4bbb-93c7-687719bbf1fa"; 14 + 15 + fileSystems."/boot" = { 16 + device = "/dev/disk/by-uuid/0001-9657"; 17 + fsType = "vfat"; 18 + options = [ 19 + "fmask=0022" 20 + "dmask=0022" 21 + "noatime" 22 + ]; 23 + }; 24 + 25 + swapDevices = [ 26 + { 27 + device = "/var/lib/swapfile"; 28 + size = 32 * 1024; # 16 GB 29 + } 30 + ]; 31 + 32 + services = { 33 + btrfs.autoScrub.enable = true; 34 + beesd.filesystems.root = { 35 + spec = "LABEL=root"; 36 + hashTableSizeMB = 256; 37 + verbosity = "crit"; 38 + extraOptions = [ 39 + "--loadavg-target" 40 + "2.0" 41 + ]; 42 + }; 43 + }; 44 + }; 45 + }
+6
modules/meta/_compat.nix
··· 1 + { lib, ... }: 2 + { 3 + _module.args.mkCompat = 4 + unstableOptions: stableOptions: 5 + if (lib.versionOlder lib.version "25.11pre") then stableOptions else unstableOptions; 6 + }
-15
modules/meta/args.nix
··· 1 - { lib, config, ... }: 2 - let 3 - inherit (lib) types mkOption; 4 - in 5 - { 6 - options.args = mkOption { 7 - type = types.lazyAttrsOf types.unspecified; 8 - default = { }; 9 - }; 10 - config = { 11 - _module.args = config.args; 12 - unify.nixos._module.args = config.args; 13 - unify.home._module.args = config.args; 14 - }; 15 - }
-20
modules/meta/compat.nix
··· 1 - { 2 - unify = 3 - let 4 - mkMkCompat = 5 - lib: unstableOptions: stableOptions: 6 - if (lib.versionOlder lib.version "25.11pre") then stableOptions else unstableOptions; 7 - in 8 - { 9 - nixos = 10 - { lib, ... }: 11 - { 12 - _module.args.mkCompat = mkMkCompat lib; 13 - }; 14 - home = 15 - { lib, ... }: 16 - { 17 - _module.args.mkCompat = mkMkCompat lib; 18 - }; 19 - }; 20 - }
+59 -52
modules/meta/displays.nix
··· 3 3 inherit (lib) mkOption types; 4 4 in 5 5 { 6 - unify.options = { 7 - primaryDisplay = mkOption { 8 - type = types.lazyAttrsOf types.raw; 9 - default = { }; 10 - }; 11 - displays = mkOption { 12 - type = types.lazyAttrsOf ( 13 - types.submodule ( 14 - { name, config, ... }: 15 - { 16 - options = { 17 - name = mkOption { 18 - default = name; 19 - readOnly = true; 20 - }; 21 - primary = mkOption { 22 - type = types.bool; 23 - default = false; 24 - }; 25 - refreshRate = mkOption { 26 - type = types.int; 27 - default = 60; 28 - }; 29 - width = mkOption { 30 - type = types.int; 31 - default = 1920; 32 - }; 33 - height = mkOption { 34 - type = types.int; 35 - default = 1080; 36 - }; 37 - x = mkOption { 38 - type = types.int; 39 - default = 0; 40 - }; 41 - y = mkOption { 42 - type = types.int; 43 - default = 0; 44 - }; 45 - scaling = mkOption { 46 - type = types.float; 47 - default = 1.0; 48 - }; 49 - roundScaling = mkOption { 50 - type = types.int; 51 - default = builtins.ceil config.scaling; 52 - }; 53 - }; 54 - } 55 - ) 56 - ); 57 - }; 6 + options.hostConfig = mkOption { 7 + default = { }; 8 + type = types.attrsOf ( 9 + types.submodule { 10 + options = { 11 + primaryDisplay = mkOption { 12 + type = types.lazyAttrsOf types.raw; 13 + default = { }; 14 + }; 15 + displays = mkOption { 16 + type = types.lazyAttrsOf ( 17 + types.submodule ( 18 + { name, config, ... }: 19 + { 20 + options = { 21 + name = mkOption { 22 + default = name; 23 + readOnly = true; 24 + }; 25 + primary = mkOption { 26 + type = types.bool; 27 + default = false; 28 + }; 29 + refreshRate = mkOption { 30 + type = types.int; 31 + default = 60; 32 + }; 33 + width = mkOption { 34 + type = types.int; 35 + default = 1920; 36 + }; 37 + height = mkOption { 38 + type = types.int; 39 + default = 1080; 40 + }; 41 + x = mkOption { 42 + type = types.int; 43 + default = 0; 44 + }; 45 + y = mkOption { 46 + type = types.int; 47 + default = 0; 48 + }; 49 + scaling = mkOption { 50 + type = types.float; 51 + default = 1.0; 52 + }; 53 + roundScaling = mkOption { 54 + type = types.int; 55 + default = builtins.ceil config.scaling; 56 + }; 57 + }; 58 + } 59 + ) 60 + ); 61 + }; 62 + }; 63 + } 64 + ); 58 65 }; 59 66 }
-7
modules/meta/user.nix
··· 1 - { lib,...}: 2 - { 3 - unify.options.primaryUser = lib.mkOption { 4 - type = lib.types.str; 5 - default = "quasi"; 6 - }; 7 - }
+40
modules/performance.nix
··· 1 + { den, ... }: 2 + { 3 + den.aspects.performance = { 4 + nixos.boot = { 5 + kernel.sysctl = { 6 + "transparent_hugepage" = "always"; 7 + "vm.nr_hugepages_defrag" = 0; 8 + "ipcs_shm" = 1; 9 + "default_hugepagez" = "1G"; 10 + "hugepagesz" = "1G"; 11 + "vm.compact_memory" = 0; 12 + }; 13 + }; 14 + provides = { 15 + responsive = { 16 + includes = [ den.aspects.performance ]; 17 + nixos.boot = { 18 + kernel.sysctl."vm.swappiness" = 1; 19 + kernelParams = [ 20 + "nowatchdog" 21 + "nosoftlockup" 22 + "audit=0" 23 + "skew_tick=1" 24 + "threadirqs" 25 + "preempt=full" 26 + "nohz_full=all" 27 + ]; 28 + }; 29 + }; 30 + max = { 31 + includes = [ den.aspects.performance._.responsive ]; 32 + nixos.boot.kernelParams = [ 33 + "usbcore.autosuspend=60" 34 + "workqueue.power_efficient=false" 35 + "cpufreq.default_governor=performance" 36 + ]; 37 + }; 38 + }; 39 + }; 40 + }
-8
modules/programs/adb.nix
··· 1 - { 2 - unify.modules.workstation.nixos = 3 - { hostConfig, ... }: 4 - { 5 - users.users.${hostConfig.primaryUser}.extraGroups = [ "adbusers" ]; 6 - programs.adb.enable = true; 7 - }; 8 - }
-61
modules/programs/core.nix
··· 1 - { 2 - unify = { 3 - modules.workstation.home = 4 - { pkgs, ... }: 5 - { 6 - home.packages = with pkgs; [ 7 - imagemagick 8 - inotify-tools 9 - ]; 10 - }; 11 - home = 12 - { pkgs, ... }: 13 - { 14 - home.packages = with pkgs; [ 15 - aria2 16 - choose 17 - difftastic 18 - dogdns 19 - dua 20 - dust 21 - edir 22 - eva 23 - fd 24 - file 25 - gdu 26 - gh 27 - git 28 - glow 29 - gptfdisk 30 - hexyl 31 - isd 32 - killall 33 - lemmeknow 34 - lurk 35 - mprocs 36 - ouch 37 - pciutils 38 - procs 39 - progress 40 - psmisc 41 - psutils 42 - rclone 43 - ripgrep 44 - ripgrep-all 45 - rsync 46 - sd 47 - strace 48 - systeroid 49 - tcpdump 50 - traceroute 51 - try 52 - unrar 53 - unzip 54 - usbutils 55 - waypipe 56 - wget 57 - whois 58 - ]; 59 - }; 60 - }; 61 - }
+1 -1
modules/programs/dev.nix modules/apps/dev.nix
··· 1 1 { 2 - unify.modules.workstation.home = 2 + den.aspects.dev.homeManager = 3 3 { pkgs, ... }: 4 4 { 5 5 home.packages = with pkgs; [
+1 -1
modules/programs/distrobox.nix modules/apps/distrobox.nix
··· 1 1 { 2 - unify.home.programs = { 2 + den.aspects.apps._.distrobox.homeManager.programs = { 3 3 distrobox.enable = true; 4 4 distrobox.enableSystemdUnit = false; 5 5 nushell = {
+2 -2
modules/programs/fish.nix modules/apps/fish.nix
··· 1 1 { 2 - unify = { 2 + den.aspects.fish = { 3 3 nixos.programs.fish.enable = true; 4 - home = 4 + homeManager = 5 5 { pkgs, ... }: 6 6 { 7 7 home.packages = with pkgs.fishPlugins; [
-31
modules/programs/ghostty.nix
··· 1 - { 2 - unify.modules.workstation = { 3 - # nixos.xdg.terminal-exec.settings.default = [ "com.mitchellh.ghostty.desktop" ]; 4 - home.programs.ghostty = { 5 - enable = true; 6 - enableBashIntegration = true; 7 - enableFishIntegration = true; 8 - enableZshIntegration = true; 9 - settings = { 10 - shell-integration-features = true; 11 - window-decoration = "server"; 12 - window-padding-x = 4; 13 - window-padding-color = "extend"; 14 - window-padding-balance = true; 15 - keybind = [ 16 - "ctrl+alt+v=new_split:right" 17 - "ctrl+alt+s=new_split:down" 18 - "ctrl+alt+n=new_split:auto" 19 - "ctrl+shift+h=goto_split:left" 20 - "ctrl+shift+j=goto_split:bottom" 21 - "ctrl+shift+k=goto_split:top" 22 - "ctrl+shift+l=goto_split:right" 23 - "ctrl+shift+w=close_surface" 24 - "page_up=scroll_page_fractional:-0.5" 25 - "page_down=scroll_page_fractional:+0.5" 26 - "ctrl+shift+r=reload_config" 27 - ]; 28 - }; 29 - }; 30 - }; 31 - }
+9 -2
modules/programs/git.nix modules/apps/git.nix
··· 1 + { mkCompat, lib, ... }: 2 + let 3 + mkCompat = 4 + unstableOptions: stableOptions: 5 + if (lib.versionOlder lib.version "25.11pre") then stableOptions else unstableOptions; 6 + in 7 + 1 8 { 2 - unify.home = 3 - { lib, mkCompat, ... }: 9 + den.aspects.apps._.git.homeManager = 10 + { lib, ... }: 4 11 let 5 12 git_settings = { 6 13 init.defaultBranch = "main";
-31
modules/programs/gui.nix
··· 1 - { inputs, ... }: 2 - { 3 - unify.modules.workstation = { 4 - home = 5 - { pkgs, ... }: 6 - { 7 - home.packages = with pkgs; [ 8 - libreoffice 9 - hunspell 10 - hunspellDicts.en_US-large 11 - remmina 12 - (bottles.override { removeWarningPopup = true; }) 13 - varia 14 - proton-pass 15 - element-desktop 16 - obsidian 17 - orca-slicer 18 - freecad 19 - gearlever 20 - dino 21 - ungoogled-chromium 22 - (pkgs.discord.override { 23 - withOpenASAR = true; 24 - enableAutoscroll = true; 25 - withMoonlight = true; 26 - moonlight = inputs.moonlight.packages.${stdenv.hostPlatform.system}.moonlight; 27 - }) 28 - ]; 29 - }; 30 - }; 31 - }
+1 -1
modules/programs/halloy.nix modules/apps/halloy.nix
··· 1 1 { 2 - unify.modules.workstation.home = 2 + den.aspects.apps._.halloy.homeManager = 3 3 { config, ... }: 4 4 { 5 5 sops.secrets.libera_pass = { };
+1 -1
modules/programs/helix.nix modules/apps/helix.nix
··· 1 1 { lib, ... }: 2 2 { 3 - unify.home = 3 + den.aspects.apps._.helix.homeManager = 4 4 { pkgs, ... }: 5 5 { 6 6 home.sessionVariables = {
+2 -1
modules/programs/jujutsu.nix modules/apps/jujutsu.nix
··· 1 1 { 2 - unify.home = 2 + den.aspects.apps._.jujutsu.homeManager = 3 3 { pkgs, ... }: 4 4 { 5 5 home.shellAliases.jji = "jj --ignore-immutable"; ··· 41 41 }; 42 42 }; 43 43 } 44 +
+2 -2
modules/programs/localsend.nix modules/apps/localsend.nix
··· 1 1 { 2 - unify.modules.workstation = { 2 + den.aspects.apps._.localsend = { 3 3 nixos.programs.localsend.enable = true; 4 - home = 4 + homeManager = 5 5 { pkgs, ... }: 6 6 { 7 7 home.packages = [ pkgs.localsend ];
-18
modules/programs/nh.nix
··· 1 - { 2 - unify = { 3 - nixos = 4 - { hostConfig, ... }: 5 - { 6 - programs.nh = { 7 - enable = true; 8 - flake = "/home/${hostConfig.primaryUser}/.flake"; 9 - }; 10 - }; 11 - home = 12 - { pkgs, config, ... }: 13 - { 14 - home.packages = [ pkgs.nh ]; 15 - home.sessionVariables.FLAKE = "${config.home.homeDirectory}/.flake"; 16 - }; 17 - }; 18 - }
-32
modules/programs/nix.nix
··· 1 - { inputs, ... }: 2 - { 3 - unify = { 4 - modules.workstation.home = 5 - { pkgs, ... }: 6 - { 7 - home.packages = [ inputs.nix-alien.packages.${pkgs.stdenv.hostPlatform.system}.default ]; 8 - }; 9 - 10 - home = 11 - { pkgs, ... }: 12 - { 13 - home.packages = with pkgs; [ 14 - # Nix 15 - deadnix 16 - lixPackageSets.latest.nix-direnv 17 - lixPackageSets.latest.nixpkgs-review 18 - nh 19 - nix-init 20 - nix-inspect 21 - nixos-rebuild-ng 22 - nix-output-monitor 23 - nix-tree 24 - nix-update 25 - npins 26 - nurl 27 - statix 28 - vulnix 29 - ]; 30 - }; 31 - }; 32 - }
-79
modules/programs/nushell.nix
··· 1 - { lib, ... }: 2 - { 3 - unify = { 4 - nixos = 5 - { pkgs, hostConfig, ... }: 6 - { 7 - environment.systemPackages = [ pkgs.nushell ]; 8 - users.users.${hostConfig.primaryUser}.shell = pkgs.bashInteractive; 9 - }; 10 - home = 11 - { pkgs, ... }: 12 - { 13 - 14 - programs = { 15 - nushell = { 16 - package = pkgs.nushell.override { 17 - additionalFeatures = _: [ 18 - "full" 19 - "mcp" 20 - ]; 21 - }; 22 - plugins = with pkgs.nushellPlugins; [ 23 - # highlight 24 - # net 25 - # query 26 - # skim 27 - # units 28 - ]; 29 - enable = true; 30 - shellAliases = { 31 - l = "ls"; 32 - la = "ls -a"; 33 - ll = "ls -al"; 34 - mkdir = lib.mkForce "mkdir"; 35 - }; 36 - extraConfig = '' 37 - $env.config = { 38 - show_banner: false 39 - display_errors: { 40 - exit_code: false 41 - termination_signal: true 42 - } 43 - completions: { 44 - algorithm: "fuzzy" 45 - } 46 - } 47 - 48 - # fix paths in distrobox 49 - use std/util "path add" 50 - if "DISTROBOX_ENTER_PATH" in $env { 51 - path add "/usr/local/sbin" 52 - path add "/usr/local/bin" 53 - path add "/usr/sbin" 54 - path add "/usr/bin" 55 - path add "/sbin" 56 - path add "/bin" 57 - } 58 - ''; 59 - }; 60 - carapace = { 61 - enable = true; 62 - enableNushellIntegration = true; 63 - }; 64 - bash.initExtra = '' 65 - # https://discourse.nixos.org/t/nushell-as-default-shell/68609/17 66 - # Some programs launch interactive shells and pretend 67 - # to use them; such programs always expect a form of POSIX 68 - # shell. 69 - # 70 - # If you don't use programs like that, you can just skip 71 - # this conditional. 72 - if ! [ "$TERM" = "dumb" ]; then 73 - exec nu 74 - fi 75 - ''; 76 - }; 77 - }; 78 - }; 79 - }
-25
modules/programs/plover.nix
··· 1 - { inputs, ... }: 2 - { 3 - unify.modules.plover = { 4 - nixos = 5 - { hostConfig, ... }: 6 - { 7 - services.udev.extraRules = '' 8 - KERNEL=="uinput", GROUP="input", MODE="0660", OPTIONS+="static_node=uinput" 9 - ''; 10 - users.users.${hostConfig.primaryUser}.extraGroups = [ 11 - "input" 12 - "dialout" 13 - ]; 14 - }; 15 - home = 16 - { pkgs, ... }: 17 - { 18 - imports = [ inputs.plover.homeManagerModules.plover ]; 19 - programs.plover = { 20 - enable = true; 21 - package = inputs.plover.packages.${pkgs.stdenv.hostPlatform.system}.plover-full; 22 - }; 23 - }; 24 - }; 25 - }
-9
modules/programs/podman.nix
··· 1 - { 2 - unify.nixos.virtualisation.podman = { 3 - enable = true; 4 - autoPrune = { 5 - enable = true; 6 - flags = [ "--all" ]; 7 - }; 8 - }; 9 - }
-31
modules/programs/productivity.nix
··· 1 - { inputs, ... }: 2 - { 3 - unify.modules.workstation = { 4 - home = 5 - { pkgs, ... }: 6 - { 7 - home.packages = with pkgs; [ 8 - libreoffice 9 - hunspell 10 - hunspellDicts.en_US-large 11 - remmina 12 - (bottles.override { removeWarningPopup = true; }) 13 - varia 14 - proton-pass 15 - element-desktop 16 - gnome-frog 17 - (warpd.override { 18 - withWayland = true; 19 - withX = false; 20 - }) 21 - obsidian 22 - orca-slicer 23 - freecad 24 - gearlever 25 - halloy 26 - dino 27 - ]; 28 - }; 29 - }; 30 - } 31 -
+1 -1
modules/programs/radicle.nix modules/apps/radicle.nix
··· 1 1 { 2 - unify.modules.radicle.home = 2 + den.aspects.apps._.radicle.homeManager = 3 3 { pkgs, config, ... }: 4 4 { 5 5 home = {
+1 -1
modules/programs/shell.nix modules/apps/shell.nix
··· 1 1 { 2 - unify.home = 2 + den.aspects.shell.homeManager = 3 3 { pkgs, config, ... }: 4 4 { 5 5 home.shellAliases = {
+1 -1
modules/programs/topgrade.nix modules/apps/topgrade.nix
··· 1 1 { 2 - unify.home.programs.topgrade = { 2 + den.aspects.apps._.topgrade.homeManager.programs.topgrade = { 3 3 enable = true; 4 4 settings = { 5 5 misc = {
+2 -1
modules/programs/vicinae.nix modules/apps/vicinae.nix
··· 1 1 { inputs, ... }: 2 2 { 3 - unify.modules.workstation.home = { 3 + den.aspects.apps._.vicinae.homeManager = { 4 4 imports = [ inputs.vicinae.homeManagerModules.default ]; 5 + xdg.configFile."vicinae/vicinae.json".enable = false; 5 6 services.vicinae = { 6 7 enable = true; 7 8 useLayerShell = false;
modules/programs/wezterm/config.lua modules/apps/wezterm/config.lua
-16
modules/programs/wezterm/default.nix
··· 1 - { 2 - unify.modules = { 3 - workstation = { 4 - nixos.xdg.terminal-exec.settings.default = [ "org.wezfurlong.wezterm.desktop" ]; 5 - home.programs.wezterm = { 6 - enable = true; 7 - extraConfig = builtins.readFile ./config.lua; 8 - }; 9 - }; 10 - server.nixos = 11 - { pkgs, ... }: 12 - { 13 - environment.systemPackages = [ pkgs.wezterm ]; 14 - }; 15 - }; 16 - }
+2 -2
modules/programs/zen.nix modules/apps/zen.nix
··· 1 1 { inputs, ... }: 2 2 { 3 - unify.modules.workstation.home = { 3 + den.aspects.apps._.zen.homeManager = { 4 4 imports = [ inputs.zen-browser.homeModules.default ]; 5 5 programs.zen-browser.enable = true; 6 6 home.sessionVariables.BROWSER = "zen"; 7 - xdg.desktopEntries.zen-beta = { 7 + xdg.desktopEntries.zen-beta = { # TODO needed? 8 8 name = "Zen Browser (Beta)"; 9 9 icon = "zen-beta"; 10 10 genericName = "Web Browser";
+1 -1
modules/programs/zsa.nix modules/apps/zsa.nix
··· 1 1 { 2 - unify.modules.zsa-kb.nixos = 2 + den.aspects.apps._.zsa.nixos = 3 3 { pkgs, ... }: 4 4 { 5 5 hardware.keyboard.zsa.enable = true;
+98
modules/pwlowlatency.nix
··· 1 + { 2 + den.aspects.pipewire._.lowlatency = 3 + { 4 + quantum ? 44100, 5 + rate ? 32, 6 + ... 7 + }: 8 + { 9 + nixos = 10 + { pkgs, lib, ... }: 11 + let 12 + qr = "${toString quantum}/${toString rate}"; 13 + inherit (lib.generators) toLua; 14 + in 15 + { 16 + services.pipewire = { 17 + # make sure PipeWire is enabled if the module is imported 18 + # and low latency is enabledd 19 + enable = true; 20 + 21 + # write extra config 22 + extraConfig = { 23 + pipewire."99-lowlatency" = { 24 + "context.properties" = { 25 + "default.clock.min-quantum" = quantum; 26 + }; 27 + 28 + "module.rt.args" = { 29 + "nice.level" = -15; 30 + "rt.prio" = 88; 31 + "rt.time.soft" = 200000; 32 + "rt.time.hard" = 200000; 33 + }; 34 + }; 35 + 36 + pipewire-pulse."99-lowlatency" = { 37 + "pulse.properties" = { 38 + "server.address" = [ "unix:native" ]; 39 + "pulse.min.req" = qr; 40 + "pulse.min.quantum" = qr; 41 + "pulse.min.frag" = qr; 42 + }; 43 + }; 44 + 45 + client."99-lowlatency" = { 46 + "stream.properties" = { 47 + "node.latency" = qr; 48 + "resample.quality" = 1; 49 + }; 50 + }; 51 + }; 52 + 53 + # ensure WirePlumber is enabled explicitly (defaults to true while PW is enabled) 54 + # and write extra config to ship low latency rules for alsa 55 + wireplumber = { 56 + enable = true; 57 + configPackages = 58 + let 59 + # generate "matches" section of the rules 60 + matches = 61 + toLua 62 + { 63 + multiline = false; # looks better while inline 64 + indent = false; 65 + } 66 + [ 67 + [ 68 + [ 69 + "node.name" 70 + "matches" 71 + "alsa_output.*" 72 + ] 73 + ] 74 + ]; # nested lists are to produce `{{{ }}}` in the output 75 + 76 + # generate "apply_properties" section of the rules 77 + apply_properties = toLua { } { 78 + "audio.format" = "S32LE"; 79 + "audio.rate" = rate * 2; 80 + "api.alsa.period-size" = 2; 81 + }; 82 + in 83 + [ 84 + (pkgs.writeTextDir "share/lowlatency.lua.d/99-alsa-lowlatency.lua" '' 85 + -- Generated by nix-gaming 86 + alsa_monitor.rules = { 87 + { 88 + matches = ${matches}; 89 + apply_properties = ${apply_properties}; 90 + } 91 + } 92 + '') 93 + ]; 94 + }; 95 + }; 96 + }; 97 + }; 98 + }
+11 -9
modules/secrets/default.nix
··· 7 7 }; 8 8 in 9 9 { 10 - unify.home = 11 - { pkgs, ... }: 12 - { 13 - imports = [ inputs.sops-nix.homeManagerModules.sops ]; 10 + den.aspects.secrets = { 11 + homeManager = 12 + { pkgs, ... }: 13 + { 14 + imports = [ inputs.sops-nix.homeManagerModules.sops ]; 15 + sops = sops_config; 16 + home.sessionVariables.SOPS_AGE_KEY_FILE = sops_config.age.keyFile; 17 + home.packages = [ pkgs.sops ]; 18 + }; 19 + nixos = { 20 + imports = [ inputs.sops-nix.nixosModules.sops ]; 14 21 sops = sops_config; 15 - home.sessionVariables.SOPS_AGE_KEY_FILE = sops_config.age.keyFile; 16 - home.packages = [ pkgs.sops ]; 17 22 }; 18 - unify.nixos = { 19 - imports = [ inputs.sops-nix.nixosModules.sops ]; 20 - sops = sops_config; 21 23 }; 22 24 }
+2 -2
modules/services/cachix.nix
··· 1 1 { 2 - unify.modules.cachix.nixos = 2 + den.aspects.services._.cachix.nixos = 3 3 { config, ... }: 4 4 { 5 5 sops.secrets.cachix_token = { }; 6 6 services.cachix-watch-store = { 7 - enable = false; 7 + enable = true; 8 8 cacheName = "quasigod"; 9 9 cachixTokenFile = config.sops.secrets.cachix_token.path; 10 10 };
-23
modules/services/default.nix
··· 1 - { 2 - unify = { 3 - home.services = { 4 - ssh-agent.enable = true; 5 - pueue.enable = true; 6 - }; 7 - nixos = 8 - { pkgs, ... }: 9 - { 10 - services = { 11 - dbus.implementation = "broker"; 12 - printing = { 13 - enable = true; 14 - drivers = [ pkgs.hplip ]; 15 - }; 16 - avahi = { 17 - enable = true; 18 - nssmdns4 = true; 19 - }; 20 - }; 21 - }; 22 - }; 23 - }
+1 -1
modules/services/easyeffects/default.nix
··· 1 1 { lib, ... }: 2 2 { 3 - unify.modules.workstation.home = { 3 + den.aspects.services._.easyeffects.homeManager = { 4 4 systemd.user.services.easyeffects.Service.Restart = lib.mkForce "never"; 5 5 services.easyeffects = { 6 6 enable = true;
+1 -1
modules/services/flatpak.nix
··· 1 1 { 2 - unify.modules.workstation.nixos = { 2 + den.aspects.services._.flatpak.nixos = { 3 3 appstream.enable = true; 4 4 services.flatpak.enable = true; 5 5 };
+15 -8
modules/services/ollama.nix
··· 1 1 { 2 - unify.modules.localai.nixos = { 3 - services.ollama = { 4 - enable = true; 5 - acceleration = "rocm"; 6 - user = "ollama"; 7 - host = "[::]"; 8 - openFirewall = true; 2 + den.aspects.ai._.ollama.nixos = 3 + { lib, config, ... }: 4 + { 5 + services.ollama = { 6 + enable = true; 7 + user = "ollama"; 8 + host = "[::]"; 9 + openFirewall = true; 10 + rocmOverrideGfx = 11 + let 12 + env = config.environment.sessionVariables; 13 + val = "HSA_OVERRIDE_GFX_VERSION"; 14 + in 15 + lib.mkIf (builtins.hasAttr val env) env.${val}; 16 + }; 9 17 }; 10 - }; 11 18 }
+1 -1
modules/services/power.nix modules/power-mgmt.nix
··· 1 1 { 2 - unify.modules.laptop.nixos = { 2 + den.aspects.power-management.nixos = { 3 3 services.power-profiles-daemon.enable = false; 4 4 hardware.system76.power-daemon.enable = true; 5 5 services.thermald.enable = true;
+16
modules/services/printing.nix
··· 1 + { 2 + den.aspects.services._.printing.nixos = 3 + { pkgs, ... }: 4 + { 5 + services = { 6 + printing = { 7 + enable = true; 8 + drivers = [ pkgs.hplip ]; 9 + }; 10 + avahi = { 11 + enable = true; 12 + nssmdns4 = true; 13 + }; 14 + }; 15 + }; 16 + }
-30
modules/services/scrobbler.nix
··· 1 - { lib, ... }: 2 - { 3 - unify.modules.workstation = { 4 - home = 5 - { pkgs, ... }: 6 - let 7 - mpris-scrobbler = pkgs.mpris-scrobbler.overrideAttrs { 8 - src = pkgs.fetchFromGitHub { 9 - owner = "mariusor"; 10 - repo = "mpris-scrobbler"; 11 - rev = "da3442b7815264b1845b83b05c56bf1d3af5c324"; 12 - hash = "sha256-ZIRkcIKQVOYkj4Bus30E1jdLZc5kTanS6U+UZYAJXag="; 13 - }; 14 - }; 15 - in 16 - { 17 - home.packages = [ mpris-scrobbler ]; 18 - systemd.user.services.scrobbler = { 19 - Unit.Description = "scrobbler background service"; 20 - Install.WantedBy = [ "graphical-session.target" ]; 21 - Service = { 22 - ExecStart = "${lib.getExe mpris-scrobbler} -v"; 23 - Restart = "on-failure"; 24 - Environment = "XDG_DATA_HOME=%h/.local/share"; 25 - PassEnvironment = "PROXY"; 26 - }; 27 - }; 28 - }; 29 - }; 30 - }
+22 -19
modules/services/sshd.nix
··· 1 1 { 2 - unify.modules.ssh.nixos = { 3 - environment.enableAllTerminfo = true; 4 - services.openssh = { 5 - enable = true; 6 - settings = { 7 - # following ssh-audit: nixos default minus 2048 bit modules 8 - KexAlgorithms = [ 9 - "sntrup761x25519-sha512@openssh.com" 10 - "curve25519-sha256" 11 - "curve25519-sha256@libssh.org" 12 - ]; 13 - # following ssh-audit: nixos defaults minus encrypt-and-MAC 14 - Macs = [ 15 - "hmac-sha2-512-etm@openssh.com" 16 - "hmac-sha2-256-etm@openssh.com" 17 - "umac-128-etm@openssh.com" 18 - ]; 19 - RequiredRSASize = 4095; 20 - PasswordAuthentication = false; 2 + den.aspects.services._.ssh = { 3 + provides.client.homeManager.services.ssh-agent.enable = true; 4 + nixos = { 5 + environment.enableAllTerminfo = true; 6 + services.openssh = { 7 + enable = true; 8 + settings = { 9 + # following ssh-audit: nixos default minus 2048 bit modules 10 + KexAlgorithms = [ 11 + "sntrup761x25519-sha512@openssh.com" 12 + "curve25519-sha256" 13 + "curve25519-sha256@libssh.org" 14 + ]; 15 + # following ssh-audit: nixos defaults minus encrypt-and-MAC 16 + Macs = [ 17 + "hmac-sha2-512-etm@openssh.com" 18 + "hmac-sha2-256-etm@openssh.com" 19 + "umac-128-etm@openssh.com" 20 + ]; 21 + RequiredRSASize = 4095; 22 + PasswordAuthentication = false; 23 + }; 21 24 }; 22 25 }; 23 26 };
+3 -3
modules/services/syncthing.nix
··· 1 1 { 2 - unify = 2 + den.aspects.services._.syncthing = 3 3 let 4 4 devices = { 5 5 hades.id = "EI3OAYC-BEJG55M-AP5OIOR-ZVDT5UE-P2GBSEY-7UJIQEQ-2IJ5CZ2-FSG6EQF"; ··· 23 23 }; 24 24 in 25 25 { 26 - modules.syncthing-client.home.services = { 26 + provides.client.homeManager.services = { 27 27 inherit syncthing; 28 28 }; 29 - modules.syncthing-server.nixos.services.syncthing = syncthing // { 29 + provides.server.nixos.services.syncthing = syncthing // { 30 30 openDefaultPorts = true; 31 31 }; 32 32 };
+36
modules/systems.nix
··· 1 + { __findFile, ... }: 2 + { 3 + den.aspects = { 4 + workstation.includes = [ 5 + <boot> 6 + <cosmic> 7 + <secrets> 8 + <services/easyeffects> 9 + <services/flatpak> 10 + <services/printing> 11 + <services/ssh/client> 12 + <services/syncthing/client> 13 + <theming> 14 + <virt/podman> 15 + <virt/qemu> 16 + ]; 17 + laptop.includes = [ 18 + <boot/graphical> 19 + <boot/secure> 20 + <performance/responsive> 21 + <power-management> 22 + <workstation> 23 + ]; 24 + desktop.includes = [ 25 + <performance/max> 26 + <services/ssh> 27 + <workstation> 28 + ]; 29 + server.includes = [ 30 + <filesystem/zfs> 31 + <performance> 32 + <services/ssh> 33 + <virt/podman> 34 + ]; 35 + }; 36 + }
modules/themes/catppuccin/background.png modules/catppuccin/background.png
modules/themes/catppuccin/background_upscaled.png modules/catppuccin/background_upscaled.png
+3 -5
modules/themes/catppuccin/default.nix modules/catppuccin/default.nix
··· 1 1 { inputs, lib, ... }: 2 + # https://catppuccin.com/palette/ 2 3 let 3 4 wallpaper = ./background_upscaled.png; 4 - # https://catppuccin.com/palette/ 5 - flavor = "mocha"; 6 - accent = "pink"; 7 5 in 8 6 { 9 - unify.modules.catppuccin = { 7 + den.aspects.theming._.catppuccin = flavor: accent: { 10 8 nixos = { 11 9 imports = [ inputs.catppuccin.nixosModules.default ]; 12 10 catppuccin = { ··· 15 13 }; 16 14 }; 17 15 18 - home = 16 + homeManager = 19 17 { pkgs, ... }: 20 18 { 21 19 imports = [
+4 -2
modules/themes/default.nix modules/theming.nix
··· 1 + { den, ... }: 1 2 { 2 - unify.modules.workstation = { 3 + den.aspects.theming = { 4 + includes = [ (den.aspects.theming._.catppuccin "mocha" "pink") ]; 3 5 nixos = 4 6 { pkgs, ... }: 5 7 { ··· 24 26 }; 25 27 }; 26 28 27 - home = 29 + homeManager = 28 30 { pkgs, ... }: 29 31 { 30 32 home = {
-25
modules/toplevel/default.nix
··· 1 - { 2 - unify.nixos = 3 - { 4 - pkgs, 5 - lib, 6 - homeConfig, 7 - ... 8 - }: 9 - { 10 - environment = { 11 - binsh = "${pkgs.dash}/bin/dash"; 12 - # fixes some issues, mainly root $PATH 13 - systemPackages = homeConfig.home.packages; 14 - defaultPackages = lib.mkForce [ ]; 15 - }; 16 - zramSwap.enable = true; 17 - documentation.doc.enable = false; 18 - documentation.info.enable = false; 19 - time.timeZone = "America/New_York"; 20 - i18n.defaultLocale = "en_US.UTF-8"; 21 - i18n.supportedLocales = [ "all" ]; 22 - system.stateVersion = "22.05"; 23 - system.rebuild.enableNg = true; 24 - }; 25 - }
-4
modules/toplevel/hardware.nix
··· 1 - { inputs, ... }: 2 - { 3 - unify.nixos.imports = [ inputs.nixos-facter-modules.nixosModules.facter ]; 4 - }
-20
modules/toplevel/home.nix
··· 1 - { 2 - unify = { 3 - nixos = 4 - { config, hostConfig, ... }: 5 - { 6 - _module.args.homeConfig = config.home-manager.users.${hostConfig.primaryUser}; 7 - home-manager.useUserPackages = true; 8 - home-manager.useGlobalPkgs = true; 9 - }; 10 - 11 - home = { 12 - home = { 13 - stateVersion = "22.05"; 14 - sessionPath = [ "$HOME/.local/bin" ]; 15 - sessionVariables.NIXPKGS_ALLOW_UNFREE = "1"; 16 - }; 17 - programs.home-manager.enable = true; 18 - }; 19 - }; 20 - }
+3 -3
modules/toplevel/networking.nix
··· 1 1 { 2 - unify = { 3 - nixos = { 2 + den = { 3 + default.nixos = { 4 4 networking = { 5 5 nftables.enable = true; 6 6 wireguard.enable = true; ··· 10 10 systemd.services.NetworkManager-wait-online.enable = false; 11 11 systemd.network.wait-online.enable = false; 12 12 }; 13 - modules.server.nixos.networking.tempAddresses = "disabled"; 13 + aspects.server.nixos.networking.tempAddresses = "disabled"; 14 14 }; 15 15 }
+3 -3
modules/toplevel/nix.nix
··· 1 1 { inputs, ... }: 2 2 { 3 - unify = { 3 + den.default = { 4 4 nixos = 5 5 { pkgs, ... }: 6 6 { ··· 19 19 auto-optimise-store = true; 20 20 trusted-users = [ 21 21 "root" 22 - "quasi" 22 + "@wheel" 23 23 ]; 24 24 experimental-features = [ 25 25 "nix-command" ··· 33 33 }; 34 34 }; 35 35 }; 36 - home = { 36 + homeManager = { 37 37 imports = [ inputs.nix-index-database.homeModules.nix-index ]; 38 38 programs.nix-index-database.comma.enable = true; 39 39 programs.nix-index.enable = true;
-18
modules/toplevel/performance.nix
··· 1 - { 2 - unify.modules = { 3 - workstation.nixos.boot.kernelParams = [ 4 - "nowatchdog" 5 - "nosoftlockup" 6 - "audit=0" 7 - "skew_tick=1" 8 - "threadirqs" 9 - "preempt=full" 10 - "nohz_full=all" 11 - ]; 12 - desktop.nixos.boot.kernelParams = [ 13 - "usbcore.autosuspend=60" 14 - "workqueue.power_efficient=false" 15 - "cpufreq.default_governor=performance" 16 - ]; 17 - }; 18 - }
+1 -1
modules/toplevel/security.nix
··· 1 1 { 2 - unify.nixos.security = { 2 + den.default.nixos.security = { 3 3 sudo.enable = false; 4 4 sudo-rs = { 5 5 enable = true;
+1 -1
modules/toplevel/udev.nix
··· 1 1 { 2 2 # lowest DPI of vertical mouse is 1200 for some reason 3 - unify.modules.workstation.nixos.services.udev.extraRules = '' 3 + den.aspects.workstation.nixos.services.udev.extraRules = '' 4 4 ENV{ID_VENDOR_ID}=="248a", ENV{ID_MODEL_ID}=="8589", ENV{LIBINPUT_CALIBRATION_MATRIX}="0.5 0 0 0 0.5 0 0 0 1" 5 5 SUBSYSTEM=="hidraw", ATTRS{idVendor}=="36a7", TAG+="uaccess" 6 6 '';
-29
modules/toplevel/users.nix
··· 1 - { 2 - unify = { 3 - modules.server.nixos = 4 - { hostConfig, ... }: 5 - { 6 - users.users.${hostConfig.primaryUser}.linger = true; 7 - }; 8 - nixos = 9 - { hostConfig, ... }: 10 - { 11 - users = { 12 - groups.${hostConfig.primaryUser} = { }; 13 - users.${hostConfig.primaryUser} = { 14 - isNormalUser = true; 15 - initialPassword = hostConfig.primaryUser; 16 - extraGroups = [ 17 - "wheel" 18 - "video" 19 - "audio" 20 - "networkmanager" 21 - "lp" 22 - "scanner" 23 - "adbusers" 24 - ]; 25 - }; 26 - }; 27 - }; 28 - }; 29 - }
+31 -27
modules/toplevel/virtualisation.nix
··· 1 - { lib, ... }: 1 + {den,...}: 2 2 { 3 - unify = { 4 - modules.virtualisation.nixos = 5 - { pkgs, hostConfig, ... }: 6 - { 7 - boot.kernelParams = [ "amd_iommu=on" ]; 8 - users.users.${hostConfig.primaryUser}.extraGroups = [ "kvm" ]; 9 - programs.virt-manager.enable = true; 10 - environment.systemPackages = with pkgs; [ 11 - gnome-boxes 12 - virglrenderer 13 - ]; 14 - services.qemuGuest.enable = true; 15 - virtualisation = { 16 - libvirtd.enable = true; 17 - spiceUSBRedirection.enable = true; 18 - }; 19 - }; 20 - modules.waydroid.nixos.virtualisation.waydroid.enable = true; 21 - nixos = { 22 - virtualisation.vmVariant = { 23 - services.btrfs.autoScrub.enable = lib.mkForce false; 24 - virtualisation = { 25 - qemu.guestAgent.enable = true; 26 - memorySize = 6144; 27 - diskSize = 10240; 28 - cores = 4; 3 + den.aspects.virt.provides = { 4 + qemu = { 5 + # includes = [ den.aspects.virt._.qemu._.group ]; 6 + # provides.group = 7 + # { user, ... }: 8 + # { 9 + # nixos.users.users.${user.userName}.extraGroups = [ "kvm" ]; 10 + # }; 11 + nixos = 12 + { pkgs, ... }: 13 + { 14 + users.users.quasi.extraGroups = [ "kvm" ]; 15 + boot.kernelParams = [ "amd_iommu=on" ]; 16 + programs.virt-manager.enable = true; 17 + environment.systemPackages = with pkgs; [ 18 + gnome-boxes 19 + virglrenderer 20 + ]; 21 + services.qemuGuest.enable = true; 22 + virtualisation = { 23 + libvirtd.enable = true; 24 + spiceUSBRedirection.enable = true; 25 + }; 29 26 }; 27 + }; 28 + waydroid.nixos.virtualisation.waydroid.enable = true; 29 + podman.nixos.virtualisation.podman = { 30 + enable = true; 31 + autoPrune = { 32 + enable = true; 33 + flags = [ "--all" ]; 30 34 }; 31 35 }; 32 36 };
+5 -8
modules/toplevel/xdg.nix
··· 1 1 { 2 - unify = { 3 - home = 2 + den = { 3 + default.homeManager = 4 4 { config, ... }: 5 5 { 6 6 xdg.enable = true; ··· 29 29 _Z_DATA = "${config.xdg.dataHome}/z"; 30 30 }; 31 31 }; 32 - modules.workstation = { 33 - nixos.xdg = { 34 - portal.enable = true; 35 - terminal-exec.enable = true; 36 - }; 37 - home.xdg = { 32 + aspects.workstation = { 33 + nixos.xdg.terminal-exec.enable = true; 34 + homeManager.xdg = { 38 35 autostart.enable = true; 39 36 autostart.readOnly = true; 40 37 userDirs = {
-63
modules/toplevel/zfs.nix
··· 1 - { lib, ... }: 2 - { 3 - unify.modules.zfs.nixos = 4 - { config, pkgs, ... }: 5 - { 6 - boot.supportedFilesystems = [ "zfs" ]; 7 - services.zfs = { 8 - trim.enable = true; 9 - autoScrub.enable = true; 10 - }; 11 - services.sanoid = { 12 - enable = true; 13 - templates.main = { 14 - daily = 30; 15 - hourly = 24; 16 - }; 17 - datasets = builtins.listToAttrs ( 18 - map (pool: { 19 - name = pool; 20 - value = { 21 - useTemplate = [ "main" ]; 22 - }; 23 - }) config.boot.zfs.extraPools 24 - ); 25 - }; 26 - sops.secrets.ntfy_creds = { }; 27 - sops.secrets.ntfy_url = { }; 28 - systemd = { 29 - services."zpool-check" = { 30 - path = with pkgs; [ 31 - curl 32 - zfs 33 - choose 34 - ntfy-sh 35 - ]; 36 - script = '' 37 - ${pkgs.writeScript "zpool-check-script" '' 38 - #!${lib.getExe pkgs.nushell} 39 - let status = zpool status -x 40 - if ($status | str trim) == "all pools are healthy" { 41 - print $"($status)" 42 - } else { 43 - print $"($status)" 44 - (ntfy publish 45 - -u $"(cat ${config.sops.secrets.ntfy_creds.path}) 46 - $"(cat ${config.sops.secrets.ntfy_url.path}) 47 - $status) 48 - } 49 - exit 0 50 - ''} 51 - ''; 52 - }; 53 - timers."zpool-check" = { 54 - wantedBy = [ "timers.target" ]; 55 - timerConfig = { 56 - OnBootSec = "1h"; 57 - OnUnitActiveSec = "1h"; 58 - Unit = "zpool-check.service"; 59 - }; 60 - }; 61 - }; 62 - }; 63 - }
+26
modules/users.nix
··· 1 + { den, ... }: 2 + { 3 + den.aspects.quasi = { 4 + includes = [ den.provides.primary-user ]; 5 + homeManager.services.ssh-agent.enable = true; 6 + }; 7 + den.aspects.groups = 8 + { user, ... }: 9 + { 10 + nixos.users = { 11 + groups.${user.username} = { }; 12 + users.${user.username} = { 13 + isNormalUser = true; 14 + initialPassword = user.username; 15 + extraGroups = [ 16 + "wheel" 17 + "video" 18 + "audio" 19 + "networkmanager" 20 + "lp" 21 + "scanner" 22 + ]; 23 + }; 24 + }; 25 + }; 26 + }
+15
modules/vmvariant.nix
··· 1 + { 2 + den.default.nixos = 3 + { lib, ... }: 4 + { 5 + virtualisation.vmVariant = { 6 + services.btrfs.autoScrub.enable = lib.mkForce false; 7 + virtualisation = { 8 + qemu.guestAgent.enable = true; 9 + memorySize = 6144; 10 + diskSize = 10240; 11 + cores = 4; 12 + }; 13 + }; 14 + }; 15 + }
+48
modules/wayland.nix
··· 1 + { 2 + den.aspects.wayland = 3 + # { host, ... }: 4 + { 5 + nixos = 6 + { pkgs, lib, ... }: 7 + { 8 + programs = { 9 + dconf.enable = true; 10 + appimage = { 11 + enable = true; 12 + binfmt = true; 13 + }; 14 + }; 15 + services.pipewire = { 16 + enable = true; 17 + alsa.enable = true; 18 + alsa.support32Bit = true; 19 + pulse.enable = true; 20 + jack.enable = true; 21 + }; 22 + environment = { 23 + # variables.XCURSOR_SIZE = lib.mkForce (32 * host.primaryDisplay.scaling); 24 + systemPackages = [ pkgs.wl-clipboard ]; 25 + sessionVariables.NIXOS_OZONE_WL = "1"; 26 + }; 27 + }; 28 + 29 + homeManager = 30 + { config, ... }: 31 + { 32 + qt.enable = true; 33 + gtk = { 34 + enable = true; 35 + gtk2.configLocation = "${config.xdg.configHome}/gtk-2.0/gtkrc"; 36 + gtk3 = { 37 + bookmarks = [ 38 + "file:///home/quasi/Downloads Downloads" 39 + "file:///home/quasi/Documents Documents" 40 + "file:///home/quasi/Pictures Pictures" 41 + "file:///home/quasi/Videos Videos" 42 + "file:///home/quasi/Games Games" 43 + ]; 44 + }; 45 + }; 46 + }; 47 + }; 48 + }