My Nix Configuration
2
fork

Configure Feed

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

Merge pull request 'flake-parts' (#2) from flake-parts into main

Reviewed-on: https://git.pyrox.dev/pyrox/nix/pulls/2

dish a19d85b4 405f931f

+1193 -615
+23
.zed/settings.json
··· 1 + // Folder-specific settings 2 + // 3 + // For a full list of overridable settings, and general information on folder-specific settings, 4 + // see the documentation: https://zed.dev/docs/configuring-zed#settings-files 5 + { 6 + "lsp": { 7 + "nixd": { 8 + "settings": { 9 + "options": { 10 + "nixos": { 11 + "expr": "(builtins.getFlake (builtins.toString ./.)).nixosConfigurations.zaphod.options" 12 + }, 13 + "home-manager": { 14 + "expr": "(builtins.getFlake (builtins.toString ./.)).nixosConfigurations.zaphod.options.home-manager.users.type.getSubOptions []" 15 + }, 16 + "flake-parts": { 17 + "expr": "(builtins.getFlake (builtins.toString ./.)).debug.options" 18 + } 19 + } 20 + } 21 + } 22 + } 23 + }
+6
MIGRATE.md
··· 1 + - [ ] easy-hosts 2 + - [ ] HM Configs 3 + - [x] modules 4 + - [x] packages 5 + - [x] devShells 6 + - [x] overlays
-2
checks/deploy/default.nix
··· 1 - { inputs, ... }: 2 - builtins.mapAttrs (_: deployLib: deployLib.deployChecks inputs.self.deploy) inputs.deploy-rs.lib
+12
devShells/default.nix
··· 1 + { 2 + ... 3 + }: 4 + { 5 + perSystem = 6 + { pkgs, ... }: 7 + { 8 + devShells = { 9 + default = pkgs.callPackage ./default { }; 10 + }; 11 + }; 12 + }
+97 -137
flake.lock
··· 52 52 "nixpkgs": [ 53 53 "nixpkgs" 54 54 ], 55 - "treefmt-nix": "treefmt-nix" 55 + "treefmt-nix": [] 56 56 }, 57 57 "locked": { 58 - "lastModified": 1758204241, 59 - "narHash": "sha256-xKl3mXyML/NCWUYrZ9ww/fXfTWvGvNnXgDBrpDy/c2Y=", 60 - "owner": "Mic92", 58 + "lastModified": 1758897213, 59 + "narHash": "sha256-pLZgNsmCMhTWd8aRuGkK23ik5nclpIn1flnURKH6QjI=", 60 + "owner": "nix-community", 61 61 "repo": "buildbot-nix", 62 - "rev": "82745470e3fa50e1bdcc8f59745121aa29f1ac7a", 62 + "rev": "985d069a2a45cf4a571a4346107671adc2bd2a16", 63 63 "type": "github" 64 64 }, 65 65 "original": { 66 - "owner": "Mic92", 66 + "owner": "nix-community", 67 67 "repo": "buildbot-nix", 68 68 "type": "github" 69 69 } ··· 73 73 "nixpkgs": "nixpkgs" 74 74 }, 75 75 "locked": { 76 - "lastModified": 1758270360, 77 - "narHash": "sha256-yqh6EEhlpVWRoKl85o1s+QZ72UHWTvornnc3C0Ls484=", 76 + "lastModified": 1759572023, 77 + "narHash": "sha256-2fzYq/m2PXie5WZO5LhyiZrTIUdUFp1SCLZAwvPL5xo=", 78 78 "owner": "catppuccin", 79 79 "repo": "nix", 80 - "rev": "2e0aacdd6abbecd1b1c0511a2fcd1460a6bc6645", 80 + "rev": "eeada12912d80d04733383d231a9d66172858718", 81 81 "type": "github" 82 82 }, 83 83 "original": { ··· 105 105 "owner": "lnl7", 106 106 "ref": "master", 107 107 "repo": "nix-darwin", 108 - "type": "github" 109 - } 110 - }, 111 - "deploy-rs": { 112 - "inputs": { 113 - "flake-compat": [ 114 - "flake-compat" 115 - ], 116 - "nixpkgs": [ 117 - "nixpkgs" 118 - ], 119 - "utils": [ 120 - "flake-utils" 121 - ] 122 - }, 123 - "locked": { 124 - "lastModified": 1756719547, 125 - "narHash": "sha256-N9gBKUmjwRKPxAafXEk1EGadfk2qDZPBQp4vXWPHINQ=", 126 - "owner": "serokell", 127 - "repo": "deploy-rs", 128 - "rev": "125ae9e3ecf62fb2c0fd4f2d894eb971f1ecaed2", 129 - "type": "github" 130 - }, 131 - "original": { 132 - "owner": "serokell", 133 - "repo": "deploy-rs", 134 108 "type": "github" 135 109 } 136 110 }, ··· 233 207 ] 234 208 }, 235 209 "locked": { 236 - "lastModified": 1756726120, 237 - "narHash": "sha256-DKmncmlnEiYJv3ZK0hhHt5Z+pFuWDkLr7kGKmrnBSFE=", 210 + "lastModified": 1759510210, 211 + "narHash": "sha256-rR3BuhcSyQ3bQ0rS14I53O7gWzlPEs15skl1TWx+TeI=", 238 212 "owner": "nix-community", 239 213 "repo": "dns.nix", 240 - "rev": "f6f899f914db00103eb15be24d4a0f630d1d93fd", 214 + "rev": "f3cb11f642d4fa6224e2b1ddfd2c3ba42e9ffea2", 241 215 "type": "github" 242 216 }, 243 217 "original": { ··· 246 220 "type": "github" 247 221 } 248 222 }, 223 + "easy-hosts": { 224 + "locked": { 225 + "lastModified": 1755470564, 226 + "narHash": "sha256-KB1ZryVDoQcbIsItOf4WtxkHhh3ppj+XwMpSnt/2QHc=", 227 + "owner": "tgirlcloud", 228 + "repo": "easy-hosts", 229 + "rev": "d0422bc7b3db26268982aa15d07e60370e76ee1d", 230 + "type": "github" 231 + }, 232 + "original": { 233 + "owner": "tgirlcloud", 234 + "repo": "easy-hosts", 235 + "type": "github" 236 + } 237 + }, 249 238 "flake-compat": { 250 239 "locked": { 251 240 "lastModified": 1747046372, ··· 282 271 ] 283 272 }, 284 273 "locked": { 285 - "lastModified": 1756770412, 286 - "narHash": "sha256-+uWLQZccFHwqpGqr2Yt5VsW/PbeJVTn9Dk6SHWhNRPw=", 274 + "lastModified": 1759362264, 275 + "narHash": "sha256-wfG0S7pltlYyZTM+qqlhJ7GMw2fTF4mLKCIVhLii/4M=", 287 276 "owner": "hercules-ci", 288 277 "repo": "flake-parts", 289 - "rev": "4524271976b625a4a605beefd893f270620fd751", 278 + "rev": "758cf7296bee11f1706a574c77d072b8a7baa881", 290 279 "type": "github" 291 280 }, 292 281 "original": { ··· 315 304 "type": "github" 316 305 } 317 306 }, 318 - "flake-utils-plus": { 319 - "inputs": { 320 - "flake-utils": "flake-utils_2" 321 - }, 322 - "locked": { 323 - "lastModified": 1715533576, 324 - "narHash": "sha256-fT4ppWeCJ0uR300EH3i7kmgRZnAVxrH+XtK09jQWihk=", 325 - "owner": "gytis-ivaskevicius", 326 - "repo": "flake-utils-plus", 327 - "rev": "3542fe9126dc492e53ddd252bb0260fe035f2c0f", 328 - "type": "github" 329 - }, 330 - "original": { 331 - "owner": "gytis-ivaskevicius", 332 - "repo": "flake-utils-plus", 333 - "rev": "3542fe9126dc492e53ddd252bb0260fe035f2c0f", 334 - "type": "github" 335 - } 336 - }, 337 307 "flake-utils_2": { 338 308 "inputs": { 339 - "systems": "systems" 309 + "systems": "systems_2" 340 310 }, 341 311 "locked": { 342 312 "lastModified": 1694529238, ··· 357 327 "systems": "systems_3" 358 328 }, 359 329 "locked": { 360 - "lastModified": 1694529238, 361 - "narHash": "sha256-zsNZZGTGnMOf9YpHKJqMSsa0dXbfmxeoJ7xHlrt+xmY=", 330 + "lastModified": 1731533236, 331 + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", 362 332 "owner": "numtide", 363 333 "repo": "flake-utils", 364 - "rev": "ff7b65b44d01cf9ba6a71320833626af21126384", 334 + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", 365 335 "type": "github" 366 336 }, 367 337 "original": { ··· 383 353 ] 384 354 }, 385 355 "locked": { 386 - "lastModified": 1750779888, 387 - "narHash": "sha256-wibppH3g/E2lxU43ZQHC5yA/7kIKLGxVEnsnVK1BtRg=", 356 + "lastModified": 1758108966, 357 + "narHash": "sha256-ytw7ROXaWZ7OfwHrQ9xvjpUWeGVm86pwnEd1QhzawIo=", 388 358 "owner": "cachix", 389 359 "repo": "git-hooks.nix", 390 - "rev": "16ec914f6fb6f599ce988427d9d94efddf25fe6d", 360 + "rev": "54df955a695a84cd47d4a43e08e1feaf90b1fd9b", 391 361 "type": "github" 392 362 }, 393 363 "original": { ··· 443 413 }, 444 414 "gomod2nix": { 445 415 "inputs": { 446 - "flake-utils": "flake-utils_3", 416 + "flake-utils": "flake-utils_2", 447 417 "nixpkgs": [ 448 - "tangled-sh", 418 + "tangled", 449 419 "nixpkgs" 450 420 ] 451 421 }, ··· 465 435 }, 466 436 "hardware": { 467 437 "locked": { 468 - "lastModified": 1757943327, 469 - "narHash": "sha256-w6cDExPBqbq7fTLo4dZ1ozDGeq3yV6dSN4n/sAaS6OM=", 438 + "lastModified": 1759582739, 439 + "narHash": "sha256-spZegilADH0q5OngM86u6NmXxduCNv5eX9vCiUPhOYc=", 470 440 "owner": "nixos", 471 441 "repo": "nixos-hardware", 472 - "rev": "67a709cfe5d0643dafd798b0b613ed579de8be05", 442 + "rev": "3441b5242af7577230a78ffb03542add264179ab", 473 443 "type": "github" 474 444 }, 475 445 "original": { ··· 510 480 ] 511 481 }, 512 482 "locked": { 513 - "lastModified": 1758375677, 514 - "narHash": "sha256-BLtD+6qWz7fQjPk2wpwyXQLGI0E30Ikgf2ppn2nVadI=", 483 + "lastModified": 1759853171, 484 + "narHash": "sha256-uqbhyXtqMbYIiMqVqUhNdSuh9AEEkiasoK3mIPIVRhk=", 515 485 "owner": "nix-community", 516 486 "repo": "home-manager", 517 - "rev": "edc7468e12be92e926847cb02418e649b02b59dd", 487 + "rev": "1a09eb84fa9e33748432a5253102d01251f72d6d", 518 488 "type": "github" 519 489 }, 520 490 "original": { ··· 635 605 "nixpkgs-25_05": "nixpkgs-25_05" 636 606 }, 637 607 "locked": { 638 - "lastModified": 1756130152, 639 - "narHash": "sha256-3qcN28djoBqqhEqOv8ve3/+wD0lLR2YCVV1EZ4SYfjo=", 608 + "lastModified": 1759489698, 609 + "narHash": "sha256-2lT2i5ha23I2vrolEaBaAS/63ChgZPh181Awt6q1bDY=", 640 610 "owner": "simple-nixos-mailserver", 641 611 "repo": "nixos-mailserver", 642 - "rev": "b49ae46f226430854102c207fdcb55e2de8e884e", 612 + "rev": "6005d88bed7a5418f9772b4058a73cd0fd1e69a1", 643 613 "type": "gitlab" 644 614 }, 645 615 "original": { ··· 699 669 ] 700 670 }, 701 671 "locked": { 702 - "lastModified": 1757822619, 703 - "narHash": "sha256-3HIpe3P2h1AUPYcAH9cjuX0tZOqJpX01c0iDwoUYNZ8=", 672 + "lastModified": 1759637156, 673 + "narHash": "sha256-8NI1SqntLfKl6Q0Luemc3aIboezSJElofUrqipF5g78=", 704 674 "owner": "Mic92", 705 675 "repo": "nix-index-database", 706 - "rev": "050a5feb5d1bb5b6e5fc04a7d3d816923a87c9ea", 676 + "rev": "0ca69684091aa3a6b1fe994c4afeff305b15e915", 707 677 "type": "github" 708 678 }, 709 679 "original": { ··· 740 710 }, 741 711 "nixpkgs": { 742 712 "locked": { 743 - "lastModified": 1758035966, 744 - "narHash": "sha256-qqIJ3yxPiB0ZQTT9//nFGQYn8X/PBoJbofA7hRKZnmE=", 713 + "lastModified": 1759381078, 714 + "narHash": "sha256-gTrEEp5gEspIcCOx9PD8kMaF1iEmfBcTbO0Jag2QhQs=", 745 715 "owner": "NixOS", 746 716 "repo": "nixpkgs", 747 - "rev": "8d4ddb19d03c65a36ad8d189d001dc32ffb0306b", 717 + "rev": "7df7ff7d8e00218376575f0acdcc5d66741351ee", 748 718 "type": "github" 749 719 }, 750 720 "original": { ··· 756 726 }, 757 727 "nixpkgs-25_05": { 758 728 "locked": { 759 - "lastModified": 1753749649, 760 - "narHash": "sha256-+jkEZxs7bfOKfBIk430K+tK9IvXlwzqQQnppC2ZKFj4=", 729 + "lastModified": 1759143472, 730 + "narHash": "sha256-TvODmeR2W7yX/JmOCmP+lAFNkTT7hAxYcF3Kz8SZV3w=", 761 731 "owner": "NixOS", 762 732 "repo": "nixpkgs", 763 - "rev": "1f08a4df998e21f4e8be8fb6fbf61d11a1a5076a", 733 + "rev": "5ed4e25ab58fd4c028b59d5611e14ea64de51d23", 764 734 "type": "github" 765 735 }, 766 736 "original": { ··· 804 774 "nixpkgs_2": { 805 775 "locked": { 806 776 "lastModified": 315532800, 807 - "narHash": "sha256-8r/4FEFTGoeVUP6sjnNvvDANaDmbXJnBflzNPYZPPLo=", 808 - "rev": "12bd230118a1901a4a5d393f9f56b6ad7e571d01", 777 + "narHash": "sha256-K9s0wLYHHR9syJV2Ii28kDT65NeT5EI8vH56/CKm924=", 778 + "rev": "8b5c9dd8856f0c0cf46cc91f2c21c106a9d42e25", 809 779 "type": "tarball", 810 - "url": "https://releases.nixos.org/nixpkgs/nixpkgs-25.11pre863969.12bd230118a1/nixexprs.tar.xz" 780 + "url": "https://releases.nixos.org/nixpkgs/nixpkgs-25.11pre874129.8b5c9dd8856f/nixexprs.tar.xz" 811 781 }, 812 782 "original": { 813 783 "type": "tarball", ··· 830 800 "type": "github" 831 801 } 832 802 }, 803 + "nixpkgs_4": { 804 + "locked": { 805 + "lastModified": 1759036355, 806 + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", 807 + "owner": "nixos", 808 + "repo": "nixpkgs", 809 + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", 810 + "type": "github" 811 + }, 812 + "original": { 813 + "owner": "nixos", 814 + "ref": "nixos-unstable", 815 + "repo": "nixpkgs", 816 + "type": "github" 817 + } 818 + }, 833 819 "root": { 834 820 "inputs": { 835 821 "agenix": "agenix", 836 822 "buildbot-nix": "buildbot-nix", 837 823 "ctp": "ctp", 838 - "deploy-rs": "deploy-rs", 839 824 "determinate": "determinate", 840 825 "dix": "dix", 841 826 "dns": "dns", 827 + "easy-hosts": "easy-hosts", 842 828 "flake-compat": "flake-compat", 843 829 "flake-parts": "flake-parts", 844 830 "flake-utils": "flake-utils", ··· 854 840 "nixpkgs": "nixpkgs_2", 855 841 "nixpkgs-lib": "nixpkgs-lib", 856 842 "nixpkgs-stalwart-fix": "nixpkgs-stalwart-fix", 857 - "snowfall-lib": "snowfall-lib", 858 843 "stable": "stable", 859 - "systems": "systems_2", 860 - "tangled-sh": "tangled-sh" 861 - } 862 - }, 863 - "snowfall-lib": { 864 - "inputs": { 865 - "flake-compat": [ 866 - "flake-compat" 867 - ], 868 - "flake-utils-plus": "flake-utils-plus", 869 - "nixpkgs": [ 870 - "nixpkgs" 871 - ] 872 - }, 873 - "locked": { 874 - "lastModified": 1736130495, 875 - "narHash": "sha256-4i9nAJEZFv7vZMmrE0YG55I3Ggrtfo5/T07JEpEZ/RM=", 876 - "owner": "snowfallorg", 877 - "repo": "lib", 878 - "rev": "02d941739f98a09e81f3d2d9b3ab08918958beac", 879 - "type": "github" 880 - }, 881 - "original": { 882 - "owner": "snowfallorg", 883 - "repo": "lib", 884 - "type": "github" 844 + "systems": "systems", 845 + "tangled": "tangled", 846 + "vicinae": "vicinae" 885 847 } 886 848 }, 887 849 "sqlite-lib-src": { ··· 958 920 "type": "github" 959 921 } 960 922 }, 961 - "tangled-sh": { 923 + "tangled": { 962 924 "inputs": { 963 925 "flake-compat": "flake-compat_2", 964 926 "gomod2nix": "gomod2nix", ··· 972 934 "sqlite-lib-src": "sqlite-lib-src" 973 935 }, 974 936 "locked": { 975 - "lastModified": 1758343819, 976 - "narHash": "sha256-lXoRA/zM7V8f5SvSZMdPSMpZiFkFnx3RV0RfovQbqzg=", 937 + "lastModified": 1759933847, 938 + "narHash": "sha256-lLyX1f4fSG1IYsjcsUKKCAOHpa3ZTFexJMRc/0K2g3c=", 977 939 "ref": "refs/heads/master", 978 - "rev": "796f739caf7df25436e0ac3a8880dca54d6238db", 979 - "revCount": 1366, 940 + "rev": "eaa11ecb2112c90113a8ee49a8aa05be327b13ad", 941 + "revCount": 1508, 980 942 "type": "git", 981 - "url": "https://tangled.sh/@tangled.sh/core" 943 + "url": "https://tangled.org/@tangled.org/core" 982 944 }, 983 945 "original": { 984 946 "type": "git", 985 - "url": "https://tangled.sh/@tangled.sh/core" 947 + "url": "https://tangled.org/@tangled.org/core" 986 948 } 987 949 }, 988 - "treefmt-nix": { 950 + "vicinae": { 989 951 "inputs": { 990 - "nixpkgs": [ 991 - "buildbot-nix", 992 - "nixpkgs" 993 - ] 952 + "flake-utils": "flake-utils_3", 953 + "nixpkgs": "nixpkgs_4" 994 954 }, 995 955 "locked": { 996 - "lastModified": 1756662192, 997 - "narHash": "sha256-F1oFfV51AE259I85av+MAia221XwMHCOtZCMcZLK2Jk=", 998 - "owner": "numtide", 999 - "repo": "treefmt-nix", 1000 - "rev": "1aabc6c05ccbcbf4a635fb7a90400e44282f61c4", 956 + "lastModified": 1759965448, 957 + "narHash": "sha256-A6P8tBlWhUo6lJA/9ku9hjhzs1NlPDs4f8V/qlqf1dQ=", 958 + "owner": "vicinaehq", 959 + "repo": "vicinae", 960 + "rev": "b1f24c7c077b7f55fea25547267ea0489ca1dbb5", 1001 961 "type": "github" 1002 962 }, 1003 963 "original": { 1004 - "owner": "numtide", 1005 - "repo": "treefmt-nix", 964 + "owner": "vicinaehq", 965 + "repo": "vicinae", 1006 966 "type": "github" 1007 967 } 1008 968 }
+57 -92
flake.nix
··· 6 6 "https://cache.nixos.org" 7 7 "https://nix-community.cachix.org" 8 8 "https://install.determinate.systems" 9 + "https://vicinae.cachix.org" 9 10 ]; 10 11 trusted-public-keys = [ 11 12 "cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=" 12 13 "nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=" 13 14 "cache.flakehub.com-3:hJuILl5sVK4iKm86JzgdXW12Y2Hwd5G07qKtHTOcDCM=" 15 + "vicinae.cachix.org-1:1kDrfienkGHPYbkpNj1mWTr7Fm1+zcenzgTizIcI3oc=" 14 16 ]; 15 17 cores = 0; 16 18 max-jobs = 2; ··· 19 21 description = "PyroNet machines and services"; 20 22 21 23 inputs = { 22 - snowfall-lib = { 23 - url = "github:snowfallorg/lib"; 24 - inputs.nixpkgs.follows = "nixpkgs"; 25 - inputs.flake-compat.follows = "flake-compat"; 24 + flake-parts = { 25 + url = "github:hercules-ci/flake-parts"; 26 + inputs.nixpkgs-lib.follows = "nixpkgs-lib"; 26 27 }; 27 28 nixpkgs.url = "https://nixpkgs.dev/channel/nixpkgs-unstable"; 28 29 nixpkgs-stalwart-fix.url = "github:pyrox0/nixpkgs/fix/stalwart-module"; ··· 30 31 # Overrides 31 32 flake-compat.url = "github:edolstra/flake-compat"; 32 33 systems.url = "github:nix-systems/default"; 33 - flake-parts = { 34 - url = "github:hercules-ci/flake-parts"; 35 - inputs.nixpkgs-lib.follows = "nixpkgs-lib"; 36 - }; 37 34 flake-utils = { 38 35 url = "github:numtide/flake-utils"; 39 36 inputs.systems.follows = "systems"; ··· 50 47 }; 51 48 }; 52 49 buildbot-nix = { 53 - url = "github:Mic92/buildbot-nix"; 50 + url = "github:nix-community/buildbot-nix"; 54 51 inputs.nixpkgs.follows = "nixpkgs"; 55 52 inputs.flake-parts.follows = "flake-parts"; 53 + inputs.treefmt-nix.follows = ""; 56 54 }; 57 55 ctp = { 58 56 url = "github:catppuccin/nix"; 59 57 }; 60 - deploy-rs = { 61 - url = "github:serokell/deploy-rs"; 62 - inputs = { 63 - nixpkgs.follows = "nixpkgs"; 64 - utils.follows = "flake-utils"; 65 - flake-compat.follows = "flake-compat"; 66 - }; 67 - }; 68 58 dix = { 69 59 url = "https://flakehub.com/f/DeterminateSystems/nix-src/*"; 70 60 inputs = { ··· 88 78 inputs.flake-utils.follows = "flake-utils"; 89 79 inputs.nixpkgs.follows = "nixpkgs"; 90 80 }; 91 - 81 + easy-hosts.url = "github:tgirlcloud/easy-hosts"; 92 82 golink = { 93 83 url = "github:tailscale/golink"; 94 84 inputs.systems.follows = "systems"; ··· 131 121 url = "git+https://git.pyrox.dev/pyrox/pkgs"; 132 122 inputs.nixpkgs.follows = "nixpkgs"; 133 123 }; 134 - tangled-sh = { 135 - url = "git+https://tangled.sh/@tangled.sh/core"; 124 + vicinae = { 125 + url = "github:vicinaehq/vicinae"; 126 + }; 127 + tangled = { 128 + url = "git+https://tangled.org/@tangled.org/core"; 136 129 }; 137 130 }; 138 131 139 132 outputs = 140 - inputs@{ self, ... }: 141 - let 142 - lib = inputs.snowfall-lib.mkLib { 143 - inherit inputs; 144 - src = ./.; 145 - snowfall = { 146 - meta = { 147 - name = "pyronet"; 148 - title = "PyroNet Config"; 149 - }; 150 - namespace = "py"; 151 - }; 152 - }; 153 - overlays = [ 154 - self.overlays.pyronet-packages 155 - self.overlays.nix-index 156 - self.overlays.openssh-fixperms 157 - inputs.golink.overlays.default 133 + inputs: 134 + inputs.flake-parts.lib.mkFlake { inherit inputs; } { 135 + # Systems we want to build for 136 + systems = [ 137 + "x86_64-linux" 158 138 ]; 159 - in 160 - lib.mkFlake { 161 - # Nixpkgs configuration 162 - channels-config = { 163 - allowUnfree = true; 164 - }; 165 139 166 - # Overlays for Nixpkgs. 167 - inherit overlays; 140 + # Flake modules 141 + imports = [ 142 + inputs.easy-hosts.flakeModule 143 + inputs.home-manager.flakeModules.home-manager 144 + ./packages 145 + ./lib 146 + ./overlays 147 + ./devShells 148 + ./nixosModules 149 + ./homeModules 150 + ./templates 151 + ./hosts 152 + ]; 168 153 169 - # Home-manager configurations 170 - homes = { 171 - # Default modules for all homes 172 - modules = with inputs; [ 173 - nix-index-database.homeModules.nix-index 174 - ctp.homeModules.catppuccin 175 - ]; 176 - }; 177 - 178 - # NixOS Configurations 179 - systems = { 180 - # Modules for all systems 181 - modules.nixos = with inputs; [ 182 - agenix.nixosModules.default 183 - buildbot-nix.nixosModules.buildbot-worker 184 - ctp.nixosModules.catppuccin 185 - determinate.nixosModules.default 186 - ]; 187 - hosts = { 188 - # Zaphod, my personal Framework 16 laptop 189 - zaphod.modules = with inputs; [ hardware.nixosModules.framework-16-7040-amd ]; 190 - 191 - # Prefect, my main VPS 192 - prefect.modules = with inputs; [ mailserver.nixosModule ]; 193 - 194 - # Marvin, my main homelab machine 195 - marvin.modules = with inputs; [ 196 - buildbot-nix.nixosModules.buildbot-master 197 - golink.nixosModules.default 198 - iceshrimp.nixosModules.default 199 - tangled-sh.nixosModules.knot 200 - tangled-sh.nixosModules.spindle 201 - ]; 202 - }; 203 - }; 204 - templates = { 205 - uv.description = "Python template flake that uses uv"; 206 - }; 154 + # # Flake attributes 155 + # flake = { 156 + # 157 + # }; 207 158 208 - outputs-builder = channels: { 209 - # Define default packages to use everywhere 210 - packages = { 211 - nvim = channels.nixpkgs.neovim-unwrapped; 159 + # Per-system stuff 160 + perSystem = 161 + { 162 + pkgs, 163 + system, 164 + ... 165 + }: 166 + { 167 + _module.args.pkgs = import inputs.nixpkgs { 168 + inherit system; 169 + overlays = [ 170 + # inputs.self.overlays.pyronet-packages 171 + inputs.self.overlays.openssh-fixperms 172 + inputs.golink.overlays.default 173 + ]; 174 + config = { 175 + allowUnfree = true; 176 + }; 177 + }; 178 + formatter = pkgs.nixfmt; 212 179 }; 213 - formatter = channels.nixpkgs.nixfmt-rfc-style; 214 - 215 - }; 216 - deploy = lib.mkDeploy { inherit (inputs) self; }; 180 + # Enable debugging for nixd 181 + debug = true; 217 182 }; 218 183 }
+16
homeModules/all-modules.nix
··· 1 + { inputs, ... }: 2 + { 3 + imports = [ 4 + inputs.self.homeModules.profiles 5 + inputs.self.homeModules.programs 6 + inputs.self.homeModules.scripts 7 + inputs.self.homeModules.services 8 + inputs.self.homeModules.theming 9 + inputs.self.homeModules.wayland 10 + inputs.self.homeModules.xdg 11 + 12 + inputs.nix-index-database.homeModules.nix-index 13 + inputs.ctp.homeModules.catppuccin 14 + inputs.vicinae.homeManagerModules.default 15 + ]; 16 + }
+13
homeModules/default.nix
··· 1 + { inputs, flake-parts-lib, ... }: 2 + { 3 + flake.homeModules = { 4 + wayland = import ./wayland; 5 + xdg = import ./xdg; 6 + programs = import ./programs; 7 + services = import ./services; 8 + scripts = import ./scripts; 9 + theming = import ./theming; 10 + profiles = import ./profiles; 11 + allModules = flake-parts-lib.importApply ./all-modules.nix { inherit inputs; }; 12 + }; 13 + }
+10
homeModules/profiles/default.nix
··· 1 + { 2 + imports = [ 3 + ./base/default.nix 4 + ./cli/default.nix 5 + ./desktop/default.nix 6 + ./development/default.nix 7 + ./gui/default.nix 8 + ./server/default.nix 9 + ]; 10 + }
+15
homeModules/profiles/server/default.nix
··· 1 + { 2 + lib, 3 + config, 4 + ... 5 + }: 6 + let 7 + cfg = config.py.profiles.server; 8 + in 9 + { 10 + options.py.profiles.server.enable = lib.mkEnableOption "Server Profile"; 11 + config = lib.mkIf cfg.enable { 12 + py.profiles.base.enable = true; 13 + py.profiles.cli.enable = true; 14 + }; 15 + }
+21
homeModules/programs/default.nix
··· 1 + { 2 + imports = [ 3 + ./chromium 4 + ./firefox 5 + ./fish 6 + ./ghostty 7 + ./git 8 + ./gpg 9 + ./helix 10 + ./kitty 11 + ./misc-programs 12 + ./neovim 13 + ./nushell 14 + ./onagre 15 + ./ssh 16 + ./starship 17 + ./vscodium 18 + ./wlogout 19 + ./zed-editor 20 + ]; 21 + }
+35
homeModules/programs/neovim/default.nix
··· 1 + { 2 + pkgs, 3 + config, 4 + lib, 5 + ... 6 + }: 7 + let 8 + cfg = config.py.programs.neovim; 9 + in 10 + { 11 + options.py.programs.neovim.enable = lib.mkEnableOption "Neovim Configuration"; 12 + 13 + config.programs.neovim = lib.mkIf cfg.enable { 14 + enable = true; 15 + viAlias = true; 16 + vimAlias = true; 17 + vimdiffAlias = true; 18 + withRuby = false; 19 + withNodeJs = false; 20 + withPython3 = false; 21 + extraPackages = [ 22 + pkgs.bottom 23 + pkgs.fd 24 + pkgs.gcc 25 + pkgs.go 26 + pkgs.nodejs 27 + ] 28 + ++ lib.optionals config.py.profiles.gui.enable [ 29 + pkgs.ffmpegthumbnailer 30 + pkgs.fontpreview 31 + pkgs.poppler 32 + pkgs.ueberzug 33 + ]; 34 + }; 35 + }
+11
homeModules/services/default.nix
··· 1 + { 2 + imports = [ 3 + ./gpg-agent 4 + ./kanshi 5 + ./kdeconnect 6 + ./mako 7 + ./swayidle 8 + ./syncthing 9 + ./vicinae 10 + ]; 11 + }
+15
homeModules/services/vicinae/default.nix
··· 1 + { 2 + config, 3 + lib, 4 + ... 5 + }: 6 + let 7 + cfg = config.py.services.vicinae; 8 + in 9 + { 10 + options.py.services.vicinae.enable = lib.mkEnableOption "Vicinae"; 11 + config.services.vicinae = lib.mkIf cfg.enable { 12 + enable = true; 13 + autoStart = true; 14 + }; 15 + }
+35
homeModules/wayland/hyprland/default.nix
··· 1 + { 2 + pkgs, 3 + config, 4 + osConfig, 5 + lib, 6 + ... 7 + }: 8 + let 9 + c = osConfig.py.programs.hyprland; 10 + cfg = config.wayland.windowManager.hyprland; 11 + in 12 + { 13 + imports = [ 14 + ./hyprpanel.nix 15 + ./services.nix 16 + ./hypridle.nix 17 + ./hyprlock.nix 18 + ]; 19 + config = { 20 + catppuccin.hyprland.enable = c.enable; 21 + wayland.windowManager.hyprland = { 22 + enable = c.enable; 23 + # Per https://nix-community.github.io/home-manager/options.xhtml#opt-wayland.windowManager.hyprland.package 24 + package = null; 25 + systemd = { 26 + enable = true; 27 + enableXdgAutostart = true; 28 + }; 29 + settings = import ./settings.nix; 30 + plugins = [ 31 + pkgs.hyprlandPlugins.hy3 32 + ]; 33 + }; 34 + }; 35 + }
+9
homeModules/wayland/hyprland/env.nix
··· 1 + { 2 + env = [ 3 + "WLR_NO_HARDWARE_CURSORS, 1" 4 + "WLR_RENDERER_ALLOW_SOFTWARE, 1" 5 + "NIXOS_OZONE_WL, 1" 6 + "XDG_SESSION_TYPE, wayland" 7 + "QT_QPA_PLATFORM, wayland" 8 + ]; 9 + }
+18
homeModules/wayland/hyprland/hypridle.nix
··· 1 + { 2 + config, 3 + lib, 4 + ... 5 + }: 6 + let 7 + cfg = config.wayland.windowManager.hyprland; 8 + in 9 + { 10 + config.services.hypridle = lib.mkIf cfg.enable { 11 + enable = false; 12 + settings = { 13 + general = { 14 + lock_cmd = "hyprlock"; 15 + }; 16 + }; 17 + }; 18 + }
+93
homeModules/wayland/hyprland/hyprlock.nix
··· 1 + { 2 + config, 3 + lib, 4 + ... 5 + }: 6 + let 7 + cfg = config.wayland.windowManager.hyprland; 8 + in 9 + { 10 + config.catppuccin.hyprlock.enable = cfg.enable; 11 + config.catppuccin.hyprlock.useDefaultConfig = false; 12 + config.programs.hyprlock = lib.mkIf cfg.enable { 13 + enable = true; 14 + settings = { 15 + general = { 16 + hide_cursor = true; 17 + immediate_render = true; 18 + text_trim = true; 19 + }; 20 + }; 21 + extraConfig = '' 22 + $accent = $mauve 23 + $accentAlpha = $mauveAlpha 24 + $font = Blex Mono Nerd Font 25 + 26 + # BACKGROUND 27 + background { 28 + monitor = 29 + path = $HOME/bgs/wallpapers/xenia/chimmie_valentine_xenia.png 30 + blur_passes = 1 31 + color = $base 32 + } 33 + 34 + # TIME 35 + label { 36 + monitor = 37 + text = $TIME 38 + color = $text 39 + font_size = 90 40 + font_family = $font 41 + position = -30, 0 42 + halign = right 43 + valign = top 44 + } 45 + 46 + # DATE 47 + label { 48 + monitor = 49 + text = cmd[update:43200000] date +"%A, %d %B %Y" 50 + color = $text 51 + font_size = 25 52 + font_family = $font 53 + position = -30, -150 54 + halign = right 55 + valign = top 56 + } 57 + 58 + # USER AVATAR 59 + image { 60 + monitor = 61 + path = $HOME/.face 62 + size = 100 63 + border_color = $accent 64 + position = 0, 75 65 + halign = center 66 + valign = center 67 + } 68 + 69 + # INPUT FIELD 70 + input-field { 71 + monitor = 72 + size = 300, 60 73 + outline_thickness = 4 74 + dots_size = 0.2 75 + dots_spacing = 0.2 76 + dots_center = true 77 + outer_color = $accent 78 + inner_color = $surface0 79 + font_color = $text 80 + fade_on_empty = false 81 + placeholder_text = <span foreground="##$textAlpha"><i>󰌾 Logged in as </i><span foreground="##$accentAlpha">$USER</span></span> 82 + hide_input = false 83 + check_color = $accent 84 + fail_color = $red 85 + fail_text = <i>$FAIL <b>($ATTEMPTS)</b></i> 86 + capslock_color = $yellow 87 + position = 0, -47 88 + halign = center 89 + valign = center 90 + } 91 + ''; 92 + }; 93 + }
+14
homeModules/wayland/hyprland/hyprpanel.nix
··· 1 + { 2 + config, 3 + lib, 4 + ... 5 + }: 6 + let 7 + cfg = config.wayland.windowManager.hyprland; 8 + in 9 + { 10 + programs.hyprpanel = lib.mkIf cfg.enable { 11 + enable = true; 12 + systemd.enable = true; 13 + }; 14 + }
+98
homeModules/wayland/hyprland/keybindings.nix
··· 1 + { 2 + "$mod" = "SUPER"; 3 + "$satty" = "satty -f -"; 4 + 5 + binde = [ 6 + # Media binds that can be held and repeated 7 + ", XF86MonBrightnessDown, exec, brightnessctl set 5%-" 8 + ", XF86MonBrightnessUp, exec, brightnessctl set +5%" 9 + ", XF86AudioRaiseVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+" 10 + ", XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-" 11 + ]; 12 + 13 + bind = [ 14 + "SUPER_SHIFT, F, exec, MOZ_DISABLE_RDD_SANDBOX=1 firefox" 15 + "$mod, Return, exec, ghostty" 16 + "$mod, X, exec, wlogout" 17 + "$mod, D, exec, vicinae toggle" 18 + "SUPER_SHIFT, E, exit" 19 + 20 + # Media Binds 21 + ", XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle" 22 + ", XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle" 23 + ", XF86AudioPlay, exec, playerctl play-pause" 24 + ", XF86AudioNext, exec, playerctl next" 25 + ", XF86AudioPrev, exec, playerctl previous" 26 + 27 + # Workspace binds 28 + "$mod, 1, workspace, 01" 29 + "SUPER_SHIFT, 1, hy3:movetoworkspace, 01, follow, warp" 30 + "$mod, 2, workspace, 02" 31 + "SUPER_SHIFT, 2, hy3:movetoworkspace, 02, follow, warp" 32 + "$mod, 3, workspace, 03" 33 + "SUPER_SHIFT, 3, hy3:movetoworkspace, 03, follow, warp" 34 + "$mod, 4, workspace, 04" 35 + "SUPER_SHIFT, 4, hy3:movetoworkspace, 04, follow, warp" 36 + "$mod, 5, workspace, 05" 37 + "SUPER_SHIFT, 5, hy3:movetoworkspace, 05, follow, warp" 38 + "$mod, 6, workspace, 06" 39 + "SUPER_SHIFT, 6, hy3:movetoworkspace, 06, follow, warp" 40 + "$mod, 7, workspace, 07" 41 + "SUPER_SHIFT, 7, hy3:movetoworkspace, 07, follow, warp" 42 + "$mod, 8, workspace, 08" 43 + "SUPER_SHIFT, 8, hy3:movetoworkspace, 08, follow, warp" 44 + "$mod, 9, workspace, 09" 45 + "SUPER_SHIFT, 9, hy3:movetoworkspace, 09, follow, warp" 46 + "$mod, 0, workspace, 10" 47 + "SUPER_SHIFT, 0, hy3:movetoworkspace, 10, follow, warp" 48 + # Scratchpad 49 + "SUPER_SHIFT, -, movetoworkspace, special" 50 + "$mod, -, togglespecialworkspace" 51 + 52 + # Window Management 53 + "SUPER_SHIFT, Up, hy3:movewindow, up, once, visible" 54 + "SUPER_SHIFT, K, hy3:movewindow, up, once, visible" 55 + "$mod, Up, hy3:movefocus, up, visible, warp" 56 + "$mod, K, hy3:movefocus, up, visible, warp" 57 + 58 + "SUPER_SHIFT, Right, hy3:movewindow, right, once, visible" 59 + "SUPER_SHIFT, L, hy3:movewindow, right, once, visible" 60 + "$mod, Right, hy3:movefocus, right, visible, warp" 61 + "$mod, L, hy3:movefocus, right, visible, warp" 62 + 63 + "SUPER_SHIFT, Left, hy3:movewindow, left, once, visible" 64 + "SUPER_SHIFT, H, hy3:movewindow, left, once, visible" 65 + "$mod, Left, hy3:movefocus, left, visible, warp" 66 + "$mod, H, hy3:movefocus, left, visible, warp" 67 + 68 + "SUPER_SHIFT, Down, hy3:movewindow, down, once, visible" 69 + "SUPER_SHIFT, J, hy3:movewindow, down, once, visible" 70 + "$mod, Down, hy3:movefocus, down, visible, warp" 71 + "$mod, J, hy3:movefocus, down, visible, warp" 72 + 73 + "SUPER_SHIFT, Q, killactive" 74 + "$mod, F, fullscreen, 0" 75 + "$mod, Space, hy3:togglefocuslayer" 76 + "SUPER_SHIFT, Space, togglefloating, active" 77 + 78 + # Screenshots 79 + "SHIFT, F3, exec, hyprshot -m output --raw -z -s | $satty" 80 + "SHIFT, F4, exec, hyprshot -m region --raw -z -s | $satty" 81 + ]; 82 + 83 + bindm = [ 84 + "$mod, mouse:272, movewindow" 85 + ]; 86 + 87 + # Unbind a bunch of default keybinds 88 + unbind = [ 89 + "$mod, C" 90 + "$mod, E" 91 + "$mod, J" 92 + "$mod, M" 93 + "$mod, P" 94 + "$mod, Q" 95 + "$mod, R" 96 + "$mod, V" 97 + ]; 98 + }
+8
homeModules/wayland/hyprland/monitors.nix
··· 1 + { 2 + monitor = [ 3 + "eDP-1, 2560x1600@165, 0x0, 1, vrr, 1" 4 + "desc:Acer Technologies SA241Y 0x1497CF17, preferred, 2560x0, 1" 5 + # Fallback for random monitors 6 + ", preferred, auto, 1" 7 + ]; 8 + }
+7
homeModules/wayland/hyprland/plugins.nix
··· 1 + { 2 + plugin = { 3 + hy3 = { 4 + no_gaps_when_only = 1; 5 + }; 6 + }; 7 + }
+10
homeModules/wayland/hyprland/services.nix
··· 1 + { 2 + config, 3 + ... 4 + }: 5 + let 6 + cfg = config.wayland.windowManager.hyprland; 7 + in 8 + { 9 + services.hyprpolkitagent.enable = cfg.enable; 10 + }
+22
homeModules/wayland/hyprland/settings.nix
··· 1 + let 2 + keybinds = import ./keybindings.nix; 3 + monitors = import ./monitors.nix; 4 + variables = import ./variables.nix; 5 + plugins = import ./plugins.nix; 6 + env = import ./env.nix; 7 + windowrules = import ./windowrules.nix; 8 + in 9 + { 10 + exec-once = [ 11 + "hyprpanel" 12 + ]; 13 + animation = [ 14 + "global, 1, 4, default" 15 + ]; 16 + } 17 + // keybinds 18 + // monitors 19 + // variables 20 + // plugins 21 + // env 22 + // windowrules
+33
homeModules/wayland/hyprland/variables.nix
··· 1 + # https://wiki.hypr.land/Configuring/Variables 2 + { 3 + general = { 4 + gaps_in = 1; 5 + gaps_out = 1; 6 + gaps_workspaces = 80; 7 + layout = "hy3"; 8 + resize_on_border = true; 9 + }; 10 + decoration = { 11 + blur.enabled = false; 12 + shadow.enabled = false; 13 + }; 14 + misc = { 15 + disable_hyprland_logo = true; 16 + disable_splash_rendering = true; 17 + font_family = "Inter"; 18 + mouse_move_focuses_monitor = true; 19 + }; 20 + input = { 21 + kb_options = "caps:escape"; 22 + repeat_delay = 300; 23 + touchpad = { 24 + scroll_factor = 1.5; 25 + tap_button_map = "lmr"; 26 + tap-and-drag = false; 27 + }; 28 + }; 29 + ecosystem = { 30 + no_update_news = true; 31 + no_donation_nag = true; 32 + }; 33 + }
+6
homeModules/wayland/hyprland/windowrules.nix
··· 1 + { 2 + windowrule = [ 3 + "immediate, content game, title:Celeste" 4 + "tile, title:Melvor Idle" 5 + ]; 6 + }
-8
homes/x86_64-linux/pyrox@marvin/default.nix
··· 1 - { 2 - snowfallorg.user = { 3 - enable = true; 4 - }; 5 - py = { 6 - profiles.server.enable = true; 7 - }; 8 - }
-8
homes/x86_64-linux/pyrox@prefect/default.nix
··· 1 - { 2 - snowfallorg.user = { 3 - enable = true; 4 - }; 5 - py = { 6 - profiles.server.enable = true; 7 - }; 8 - }
-8
homes/x86_64-linux/pyrox@thought/default.nix
··· 1 - { 2 - snowfallorg.user = { 3 - enable = true; 4 - }; 5 - py = { 6 - profiles.server.enable = true; 7 - }; 8 - }
-55
homes/x86_64-linux/pyrox@zaphod/default.nix
··· 1 - { 2 - pkgs, 3 - ... 4 - }: 5 - { 6 - imports = [ 7 - ./files/pamKeys.nix 8 - ./files/distrobox-config.nix 9 - ]; 10 - snowfallorg.user = { 11 - enable = true; 12 - }; 13 - home.packages = [ 14 - pkgs.mindustry 15 - ]; 16 - py = { 17 - profiles.desktop.enable = true; 18 - }; 19 - py.services.kanshi.settings = [ 20 - { 21 - profile = { 22 - name = "laptop-only"; 23 - outputs = [ 24 - { 25 - criteria = "eDP-1"; 26 - status = "enable"; 27 - scale = 1.2; 28 - position = "0,0"; 29 - adaptiveSync = true; 30 - } 31 - ]; 32 - }; 33 - } 34 - { 35 - profile = { 36 - name = "office"; 37 - outputs = [ 38 - { 39 - criteria = "eDP-1"; 40 - status = "enable"; 41 - scale = 1.2; 42 - position = "0,0"; 43 - adaptiveSync = true; 44 - } 45 - { 46 - criteria = "Acer Technologies SA241Y 0x1497CF17"; 47 - status = "enable"; 48 - scale = 1.0; 49 - position = "2160,0"; 50 - } 51 - ]; 52 - }; 53 - } 54 - ]; 55 - }
homes/x86_64-linux/pyrox@zaphod/files/distrobox-config.nix nixosModules/homes/pyrox-zaphod/files/distrobox-config.nix
homes/x86_64-linux/pyrox@zaphod/files/pamKeys.nix nixosModules/homes/pyrox-zaphod/files/pamKeys.nix
-8
homes/x86_64-linux/thehedgehog@marvin/default.nix
··· 1 - { 2 - snowfallorg.user = { 3 - enable = true; 4 - }; 5 - py = { 6 - profiles.server.enable = true; 7 - }; 8 - }
-8
homes/x86_64-linux/thehedgehog@prefect/default.nix
··· 1 - { 2 - snowfallorg.user = { 3 - enable = true; 4 - }; 5 - py = { 6 - profiles.server.enable = true; 7 - }; 8 - }
-8
homes/x86_64-linux/thehedgehog@thought/default.nix
··· 1 - { 2 - snowfallorg.user = { 3 - enable = true; 4 - }; 5 - py = { 6 - profiles.server.enable = true; 7 - }; 8 - }
-63
homes/x86_64-linux/thehedgehog@zaphod/default.nix
··· 1 - { 2 - pkgs, 3 - config, 4 - ... 5 - }: 6 - { 7 - snowfallorg.user = { 8 - enable = true; 9 - }; 10 - home.packages = [ 11 - pkgs.mindustry 12 - pkgs.signal-desktop 13 - ]; 14 - py.profiles.desktop.enable = true; 15 - services.wpaperd = { 16 - enable = true; 17 - settings = { 18 - default = { 19 - path = "${config.home.homeDirectory}/bgs"; 20 - duration = "3h"; 21 - sorting = "random"; 22 - queue-size = 50; 23 - recursive = false; 24 - }; 25 - }; 26 - }; 27 - py.services.kanshi.settings = [ 28 - { 29 - profile = { 30 - name = "laptop-only"; 31 - outputs = [ 32 - { 33 - criteria = "eDP-1"; 34 - status = "enable"; 35 - scale = 1.2; 36 - position = "0,0"; 37 - adaptiveSync = true; 38 - } 39 - ]; 40 - }; 41 - } 42 - { 43 - profile = { 44 - name = "office"; 45 - outputs = [ 46 - { 47 - criteria = "eDP-1"; 48 - status = "enable"; 49 - scale = 1.2; 50 - position = "0,0"; 51 - adaptiveSync = true; 52 - } 53 - { 54 - criteria = "Acer Technologies SA241Y 0x1497CF17"; 55 - status = "enable"; 56 - scale = 1.0; 57 - position = "2160,0"; 58 - } 59 - ]; 60 - }; 61 - } 62 - ]; 63 - }
+70
hosts/default.nix
··· 1 + { inputs, ... }: 2 + { 3 + easy-hosts = { 4 + shared = { 5 + modules = [ 6 + inputs.agenix.nixosModules.default 7 + inputs.ctp.nixosModules.catppuccin 8 + inputs.determinate.nixosModules.default 9 + inputs.home-manager.nixosModules.home-manager 10 + inputs.self.nixosModules.chromium 11 + inputs.self.nixosModules.defaultConfig 12 + inputs.self.nixosModules.defaultUsers 13 + inputs.self.nixosModules.firefox 14 + inputs.self.nixosModules.hyprland 15 + inputs.self.nixosModules.forgejo-runner 16 + inputs.self.nixosModules.hm-pyrox 17 + inputs.self.nixosModules.hm-thehedgehog 18 + inputs.self.nixosModules.miscPrograms 19 + inputs.self.nixosModules.neovim 20 + inputs.self.nixosModules.profiles 21 + inputs.self.nixosModules.scrutiny 22 + ]; 23 + }; 24 + path = ./.; 25 + hosts = { 26 + marvin = { 27 + deployable = true; 28 + tags = [ 29 + "server" 30 + "home" 31 + ]; 32 + modules = [ 33 + inputs.golink.nixosModules.default 34 + inputs.tangled.nixosModules.knot 35 + inputs.tangled.nixosModules.spindle 36 + ]; 37 + }; 38 + prefect = { 39 + deployable = true; 40 + tags = [ 41 + "server" 42 + "vps" 43 + ]; 44 + modules = [ 45 + inputs.mailserver.nixosModule 46 + ]; 47 + }; 48 + thought = { 49 + deployable = true; 50 + tags = [ 51 + "server" 52 + "vps" 53 + ]; 54 + }; 55 + zaphod = { 56 + deployable = true; 57 + tags = [ "laptop" ]; 58 + modules = [ 59 + inputs.hardware.nixosModules.framework-16-7040-amd 60 + inputs.self.nixosModules.hm-pyrox-zaphod 61 + inputs.self.nixosModules.hm-thehedgehog-zaphod 62 + { 63 + home-manager.useGlobalPkgs = true; 64 + home-manager.useUserPackages = true; 65 + } 66 + ]; 67 + }; 68 + }; 69 + }; 70 + }
+7
hosts/zaphod/programs/sway.nix
··· 1 + { 2 + programs.sway = { 3 + enable = false; 4 + wrapperFeatures.base = true; 5 + wrapperFeatures.gtk = true; 6 + }; 7 + }
img.png

This is a binary file and will not be displayed.

+4 -4
lib/data/default.nix
··· 1 1 { 2 - data.hosts = builtins.fromTOML (builtins.readFile ./hosts.toml); 3 - data.services = builtins.fromTOML (builtins.readFile ./services.toml); 4 - data.mail = builtins.fromTOML (builtins.readFile ./mail.toml); 5 - data.tsNet = "coelacanth-dragon.ts.net"; 2 + hosts = builtins.fromTOML (builtins.readFile ./hosts.toml); 3 + services = builtins.fromTOML (builtins.readFile ./services.toml); 4 + mail = builtins.fromTOML (builtins.readFile ./mail.toml); 5 + tsNet = "coelacanth-dragon.ts.net"; 6 6 }
+8
lib/default.nix
··· 1 + { 2 + ... 3 + }: 4 + { 5 + flake = { 6 + lib.data = import ./data; 7 + }; 8 + }
+2 -2
modules/home/profiles/base/default.nix homeModules/profiles/base/default.nix
··· 3 3 lib, 4 4 ... 5 5 }: 6 + 6 7 let 7 8 cfg = config.py.profiles.base; 8 9 in 9 10 { 10 11 options.py.profiles.base.enable = lib.mkEnableOption "Base Home Profile"; 11 12 config = lib.mkIf cfg.enable { 12 - programs.home-manager.enable = true; 13 - home.stateVersion = "25.05"; 13 + home.stateVersion = "25.11"; 14 14 home.language = { 15 15 base = "en_US.utf8"; 16 16 };
+4 -5
modules/home/profiles/cli/default.nix homeModules/profiles/cli/default.nix
··· 2 2 pkgs, 3 3 lib, 4 4 config, 5 - inputs, 6 - system, 7 5 ... 8 6 }: 9 7 let 8 + inherit (lib) mkDefault mkEnableOption; 10 9 cfg = config.py.profiles.cli; 11 - inherit (lib) mkEnableOption mkDefault mkIf; 12 10 in 13 11 { 14 12 options.py.profiles.cli.enable = mkEnableOption "CLI Profile"; 15 - config = mkIf cfg.enable { 13 + config = lib.mkIf cfg.enable { 14 + py.profiles.base.enable = true; 16 15 py.programs = { 17 16 bat.enable = mkDefault true; 18 17 direnv.enable = mkDefault true; ··· 58 57 fzf 59 58 glow 60 59 gnupg 60 + nix-search 61 61 pinentry 62 62 rbw 63 63 rsync 64 64 xdg-utils 65 65 yt-dlp 66 - inputs.nix-search.packages.${system}.default 67 66 ]; 68 67 }; 69 68 }
modules/home/profiles/cli/rbw-config.json homeModules/profiles/cli/rbw-config.json
+5 -7
modules/home/profiles/desktop/default.nix homeModules/profiles/desktop/default.nix
··· 1 1 { 2 2 pkgs, 3 - config, 4 3 lib, 4 + config, 5 5 ... 6 6 }: 7 7 let ··· 11 11 { 12 12 options.py.profiles.desktop.enable = mkEnableOption "Desktop Config"; 13 13 config = mkIf cfg.enable { 14 - py.profiles = { 15 - base.enable = mkDefault true; 16 - cli.enable = mkDefault true; 17 - gui.enable = mkDefault true; 18 - development.enable = mkDefault true; 19 - }; 14 + py.profiles.base.enable = true; 15 + py.profiles.cli.enable = true; 16 + py.profiles.gui.enable = true; 17 + py.profiles.development.enable = true; 20 18 programs.mpv = { 21 19 enable = mkDefault true; 22 20 scripts = with pkgs.mpvScripts; [
+1 -1
modules/home/profiles/development/default.nix homeModules/profiles/development/default.nix
··· 1 1 { 2 2 pkgs, 3 - lib, 4 3 config, 4 + lib, 5 5 ... 6 6 }: 7 7 let
+7 -11
modules/home/profiles/gui/default.nix homeModules/profiles/gui/default.nix
··· 1 1 { 2 2 pkgs, 3 3 lib, 4 - config, 5 4 osConfig, 5 + config, 6 6 ... 7 7 }: 8 8 let 9 + inherit (lib) mkDefault mkEnableOption; 9 10 cfg = config.py.profiles.gui; 10 - inherit (lib) mkEnableOption mkIf mkDefault; 11 11 in 12 12 { 13 13 options.py.profiles.gui.enable = mkEnableOption "GUI Profile"; 14 - config = mkIf cfg.enable { 15 - home.sessionVariables = { 16 - XDG_CURRENT_DESKTOP = "sway"; 17 - }; 14 + config = lib.mkIf cfg.enable { 18 15 py = { 19 - gui.enable = true; 20 16 programs = { 21 17 chromium.enable = mkDefault true; 22 18 firefox.enable = mkDefault true; ··· 30 26 }; 31 27 services = { 32 28 gpg-agent.enable = mkDefault true; 33 - kanshi.enable = mkDefault true; 29 + kanshi.enable = mkDefault false; 34 30 kdeconnect.enable = mkDefault true; 35 - mako.enable = mkDefault true; 31 + mako.enable = mkDefault false; 32 + vicinae.enable = mkDefault true; 36 33 swayidle.enable = mkDefault true; 37 34 syncthing.enable = mkDefault false; 38 35 }; ··· 40 37 home.packages = with pkgs; [ 41 38 chatterino2 42 39 equibop 43 - grim 44 40 krita 45 41 libappindicator 46 42 libappindicator-gtk3 47 43 lutris 48 44 prismlauncher 49 45 pwvucontrol 46 + hyprshot 50 47 satty 51 - slurp 52 48 ueberzug 53 49 (olympus.overrideAttrs (_: { 54 50 celesteWrapper = osConfig.programs.steam.package.run;
-13
modules/home/profiles/server/default.nix
··· 1 - { lib, config, ... }: 2 - let 3 - cfg = config.py.profiles.server; 4 - in 5 - { 6 - options.py.profiles.server.enable = lib.mkEnableOption "Server Profile"; 7 - config = lib.mkIf cfg.enable { 8 - py.profiles = { 9 - base.enable = lib.mkDefault true; 10 - cli.enable = lib.mkDefault true; 11 - }; 12 - }; 13 - }
modules/home/programs/chromium/default.nix homeModules/programs/chromium/default.nix
modules/home/programs/firefox/default.nix homeModules/programs/firefox/default.nix
modules/home/programs/fish/default.nix homeModules/programs/fish/default.nix
modules/home/programs/ghostty/default.nix homeModules/programs/ghostty/default.nix
modules/home/programs/ghostty/settings.nix homeModules/programs/ghostty/settings.nix
+3 -3
modules/home/programs/git/default.nix homeModules/programs/git/default.nix
··· 58 58 extraConfig = { 59 59 branch.sort = "-committerdate"; 60 60 column.ui = "auto"; 61 - core.editor = lib.getExe pkgs.py.nvim; 61 + core.editor = lib.getExe pkgs.neovim; 62 62 "credential \"https://git.pyrox.dev\"".username = "pyrox"; 63 63 credential.helper = "rbw"; 64 64 diff = { ··· 117 117 enable = true; 118 118 gitCredentialHelper.enable = true; 119 119 settings = { 120 - editor = lib.getExe pkgs.py.nvim; 120 + editor = lib.getExe pkgs.neovim; 121 121 git_protocol = "https"; 122 - browser = lib.mkIf config.py.gui.enable pkgs.firefox; 122 + browser = lib.mkIf config.py.profiles.gui.enable pkgs.firefox; 123 123 prompt = "enabled"; 124 124 }; 125 125 };
modules/home/programs/gpg/default.nix homeModules/programs/gpg/default.nix
modules/home/programs/helix/default.nix homeModules/programs/helix/default.nix
modules/home/programs/helix/settings.nix homeModules/programs/helix/settings.nix
modules/home/programs/kitty/default.nix homeModules/programs/kitty/default.nix
modules/home/programs/kitty/settings.nix homeModules/programs/kitty/settings.nix
modules/home/programs/misc-programs/default.nix homeModules/programs/misc-programs/default.nix
modules/home/programs/misc-programs/direnv-stdlib.sh homeModules/programs/misc-programs/direnv-stdlib.sh
-37
modules/home/programs/neovim/default.nix
··· 1 - { 2 - pkgs, 3 - config, 4 - lib, 5 - ... 6 - }: 7 - let 8 - cfg = config.py.programs.neovim; 9 - in 10 - { 11 - options.py.programs.neovim.enable = lib.mkEnableOption "Neovim Configuration"; 12 - 13 - config.programs.neovim = lib.mkIf cfg.enable { 14 - enable = true; 15 - package = pkgs.py.nvim; 16 - viAlias = true; 17 - vimAlias = true; 18 - vimdiffAlias = true; 19 - withRuby = false; 20 - withNodeJs = false; 21 - withPython3 = false; 22 - extraPackages = 23 - [ 24 - pkgs.bottom 25 - pkgs.fd 26 - pkgs.gcc 27 - pkgs.go 28 - pkgs.nodejs 29 - ] 30 - ++ lib.optionals config.py.profiles.gui.enable [ 31 - pkgs.ffmpegthumbnailer 32 - pkgs.fontpreview 33 - pkgs.poppler 34 - pkgs.ueberzug 35 - ]; 36 - }; 37 - }
modules/home/programs/nushell/config.nu homeModules/programs/nushell/config.nu
modules/home/programs/nushell/default.nix homeModules/programs/nushell/default.nix
modules/home/programs/nushell/env.nu homeModules/programs/nushell/env.nu
modules/home/programs/onagre/default.nix homeModules/programs/onagre/default.nix
modules/home/programs/ssh/backup.pub homeModules/programs/ssh/backup.pub
modules/home/programs/ssh/default.nix homeModules/programs/ssh/default.nix
modules/home/programs/ssh/ssh-auth-signers.nix homeModules/programs/ssh/ssh-auth-signers.nix
modules/home/programs/ssh/yubikey-back.pub homeModules/programs/ssh/yubikey-back.pub
modules/home/programs/ssh/yubikey-main.pub homeModules/programs/ssh/yubikey-main.pub
modules/home/programs/ssh/yubikey-new.pub homeModules/programs/ssh/yubikey-new.pub
modules/home/programs/starship/default.nix homeModules/programs/starship/default.nix
modules/home/programs/starship/settings.nix homeModules/programs/starship/settings.nix
+1 -1
modules/home/programs/vscodium/default.nix homeModules/programs/vscodium/default.nix
··· 47 47 "update.showReleaseNotes" = false; 48 48 "workbench.colorTheme" = "Catppuccin Mocha"; 49 49 "workbench.iconTheme" = "catppuccin-mocha"; 50 - "vscode-neovim.neovimExecutablePaths.linux" = lib.getExe pkgs.py.nvim; 50 + "vscode-neovim.neovimExecutablePaths.linux" = lib.getExe pkgs.neovim; 51 51 "python.formatting.provider" = "black"; 52 52 }; 53 53 };
+1 -1
modules/home/programs/wlogout/default.nix homeModules/programs/wlogout/default.nix
··· 40 40 } 41 41 { 42 42 label = "lock"; 43 - action = lib.getExe pkgs.swaylock-effects; 43 + action = "hyprlock"; 44 44 text = "Lock"; 45 45 keybind = "l"; 46 46 }
+1 -1
modules/home/programs/wlogout/style.nix homeModules/programs/wlogout/style.nix
··· 7 7 background-image: none; 8 8 } 9 9 window { 10 - background-image: image(url("/home/thehedgehog/bgs/ctp-waves.png"), url("/home/thehedgehog/bgs/ctp-waves.png")); 10 + background-image: image(url("/home/thehedgehog/bgs/wallpapers/xenia/chimmie_valentine_xenia.png"), url("/home/thehedgehog/bgs/wallpapers/xenia/chimmie_valentine_xenia.png")); 11 11 background-size: cover; 12 12 } 13 13 button {
modules/home/programs/zed-editor/default.nix homeModules/programs/zed-editor/default.nix
modules/home/programs/zed-editor/settings.nix homeModules/programs/zed-editor/settings.nix
modules/home/scripts/default.nix homeModules/scripts/default.nix
modules/home/services/gpg-agent/default.nix homeModules/services/gpg-agent/default.nix
modules/home/services/kanshi/default.nix homeModules/services/kanshi/default.nix
modules/home/services/kdeconnect/default.nix homeModules/services/kdeconnect/default.nix
+3 -1
modules/home/services/mako/default.nix homeModules/services/mako/default.nix
··· 1 1 { lib, config, ... }: 2 2 let 3 3 cfg = config.py.services.mako; 4 + hl = config.wayland.windowManager.hyprland; 4 5 in 5 6 { 6 7 options.py.services.mako.enable = lib.mkEnableOption "mako"; 7 8 # avoid IFD 8 9 config.catppuccin.mako.enable = false; 9 - config.services.mako = lib.mkIf cfg.enable { 10 + # Hyprpanel with hyprland uses its own notification daemon 11 + config.services.mako = lib.mkIf (cfg.enable && !hl.enable) { 10 12 enable = true; 11 13 12 14 settings = {
+1 -1
modules/home/services/swayidle/default.nix homeModules/services/swayidle/default.nix
··· 10 10 { 11 11 options.py.services.swayidle.enable = lib.mkEnableOption "swayidle"; 12 12 config.services.swayidle = lib.mkIf cfg.enable { 13 - enable = true; 13 + enable = false; 14 14 events = [ 15 15 { 16 16 event = "lock";
modules/home/services/syncthing/default.nix homeModules/services/syncthing/default.nix
+8 -6
modules/home/theming/default.nix homeModules/theming/default.nix
··· 6 6 }: 7 7 let 8 8 pro = config.py.profiles; 9 + inherit (lib) mkDefault mkIf; 9 10 in 10 11 { 11 12 catppuccin = { 12 13 flavor = "mocha"; 13 14 accent = "blue"; 14 15 }; 15 - home.pointerCursor = lib.mkIf pro.gui.enable { 16 + home.pointerCursor = mkIf pro.gui.enable { 16 17 package = pkgs.catppuccin-cursors.mochaBlue; 17 - name = "Catppuccin-Mocha-Blue"; 18 + name = "catppuccin-mocha-blue-cursors"; 18 19 gtk.enable = true; 20 + hyprcursor.enable = true; 19 21 }; 20 - gtk = lib.mkIf pro.gui.enable { 22 + gtk = mkIf pro.gui.enable { 21 23 enable = true; 22 - theme = { 24 + theme = mkDefault { 23 25 name = "Colloid-Dark-Compact-Catppuccin"; 24 26 package = pkgs.colloid-gtk-theme.override { 25 27 tweaks = [ ··· 36 38 size = 14; 37 39 }; 38 40 gtk3.bookmarks = [ "file:///${config.home.homeDirectory}/Downloads" ]; 39 - iconTheme = { 40 - package = pkgs.colloid-icon-theme; 41 + iconTheme = mkIf pro.gui.enable { 42 + package = mkDefault pkgs.colloid-icon-theme; 41 43 name = "Colloid-Dark"; 42 44 }; 43 45 };
+1
modules/home/wayland/default.nix homeModules/wayland/default.nix
··· 4 4 ./keybindings.nix 5 5 ./waybar.nix 6 6 ./swaylock.nix 7 + ./hyprland 7 8 ]; 8 9 }
+1 -1
modules/home/wayland/keybindings.nix homeModules/wayland/keybindings.nix
··· 7 7 slurp-screen = "\"$(slurp -c -b '#1e1e2e80' -o -r)\" -"; 8 8 slurp-box = "\"$(slurp -c '#f38ba8ff' -b '#1e1e2e80' -w 1 -d -F 'IBM Plex Mono')\" -"; 9 9 satty = "satty -f -"; 10 - cfg = config.py.gui; 10 + cfg = config.py.profiles.gui; 11 11 in 12 12 { 13 13 config.wayland.windowManager.sway.config.keybindings = lib.mkIf cfg.enable (
+1 -4
modules/home/wayland/sway.nix homeModules/wayland/sway.nix
··· 7 7 let 8 8 term = config.wayland.windowManager.sway.config.terminal; 9 9 homeDir = config.home.homeDirectory; 10 - cfg = config.py.gui; 10 + cfg = config.py.profiles.gui; 11 11 in 12 12 { 13 - options.py.gui = { 14 - enable = lib.mkEnableOption "GUI Configuration"; 15 - }; 16 13 config = lib.mkIf cfg.enable { 17 14 catppuccin = { 18 15 sway.enable = true;
+1 -1
modules/home/wayland/swaylock.nix homeModules/wayland/swaylock.nix
··· 5 5 ... 6 6 }: 7 7 let 8 - cfg = config.py.gui; 8 + cfg = config.py.profiles.gui; 9 9 in 10 10 { 11 11 catppuccin = {
modules/home/wayland/waybar-mocha.css homeModules/wayland/waybar-mocha.css
modules/home/wayland/waybar-style.css homeModules/wayland/waybar-style.css
+5 -4
modules/home/wayland/waybar.nix homeModules/wayland/waybar.nix
··· 5 5 ... 6 6 }: 7 7 let 8 - cfg = config.py.gui; 8 + cfg = config.py.profiles.gui; 9 + sway = config.wayland.windowManager.sway; 9 10 in 10 11 { 11 12 config = { 12 - xdg.configFile."waybar/mocha.css" = lib.mkIf cfg.enable { 13 + xdg.configFile."waybar/mocha.css" = lib.mkIf (cfg.enable && sway.enable) { 13 14 source = ./waybar-mocha.css; 14 15 recursive = false; 15 16 }; 16 17 catppuccin.waybar.enable = false; 17 - programs.waybar = lib.mkIf cfg.enable { 18 - enable = lib.mkDefault true; 18 + programs.waybar = lib.mkIf (cfg.enable && sway.enable) { 19 + enable = lib.mkDefault false; 19 20 systemd.enable = true; 20 21 systemd.target = "sway-session.target"; 21 22 style = ./waybar-style.css;
modules/home/xdg/default.nix homeModules/xdg/default.nix
modules/nixos/default-config/bootloader.nix nixosModules/default-config/bootloader.nix
modules/nixos/default-config/default.nix nixosModules/default-config/default.nix
modules/nixos/default-config/networking.nix nixosModules/default-config/networking.nix
+5 -12
modules/nixos/default-config/nixConfig.nix nixosModules/default-config/nixConfig.nix
··· 30 30 # Compress build logs to save space 31 31 compress-build-log = true; 32 32 # Use all available cores to build 33 - cores = 0; 33 + cores = lib.mkDefault 8; 34 34 experimental-features = [ 35 35 # Use auto-generated uids instead of users in the nixbld group 36 36 "auto-allocate-uids" ··· 44 44 "nix-command" 45 45 # Disallow URL Literals as they are deprecated 46 46 "no-url-literals" 47 - # Allow Nix to call itself 48 - "recursive-nix" 49 47 ]; 50 48 # Build from source if substitution fails 51 49 fallback = true; ··· 62 60 keep-outputs = true; 63 61 # Show fewer log lines from failed builds since I get them from nh 64 62 log-lines = 10; 63 + # Limit the max amount of builds 64 + max-jobs = lib.mkDefault 4; 65 65 # Extra system features 66 66 system-features = [ 67 67 "big-parallel" 68 68 "kvm" 69 69 "nixos-test" 70 - "recursive-nix" 71 70 ]; 72 71 # The pubkeys of the below substituters 73 72 trusted-public-keys = [ 74 73 "cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=" 75 - "crane.cachix.org-1:8Scfpmn9w+hGdXH/Q9tTLiYAE/2dnJYRJP7kl80GuRk=" 76 - "isabelroses.cachix.org-1:mXdV/CMcPDaiTmkQ7/4+MzChpOe6Cb97njKmBQQmLPM=" 77 74 "nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=" 78 - "nixpkgs-wayland.cachix.org-1:3lwxaILxMRkVhehr5StQprHdEo4IrE8sRho9R9HOLYA=" 79 - "viperml.cachix.org-1:qZhKBMTfmcLL+OG6fj/hzsMEedgKvZVFRRAhq7j8Vh8=" 75 + "cache.flakehub.com-3:hJuILl5sVK4iKm86JzgdXW12Y2Hwd5G07qKtHTOcDCM=" 80 76 ]; 81 77 # Extra substituters 82 78 trusted-substituters = [ 83 79 "https://cache.nixos.org" 84 - "https://crane.cachix.org" 85 - "https://isabelroses.cachix.org" 86 80 "https://nix-community.cachix.org" 87 - "https://nixpkgs-wayland.cachix.org" 88 - "https://viperml.cachix.org" 81 + "https://install.determinate.systems" 89 82 ]; 90 83 # These users have additional daemon rights 91 84 trusted-users = userList;
-7
modules/nixos/default-config/nixpkgsConfig.nix
··· 1 - { 2 - nixpkgs = { 3 - config = { 4 - allowUnfree = true; 5 - }; 6 - }; 7 - }
modules/nixos/default-config/packages.nix nixosModules/default-config/packages.nix
modules/nixos/default-config/programs/default.nix nixosModules/default-config/programs/default.nix
modules/nixos/default-config/programs/nh.nix nixosModules/default-config/programs/nh.nix
modules/nixos/default-config/programs/ssh.nix nixosModules/default-config/programs/ssh.nix
modules/nixos/default-config/root.nix nixosModules/default-config/root.nix
modules/nixos/default-config/secrets/powerdns-secrets.age nixosModules/default-config/secrets/powerdns-secrets.age
modules/nixos/default-config/secrets/secrets.nix nixosModules/default-config/secrets/secrets.nix
modules/nixos/default-config/security.nix nixosModules/default-config/security.nix
modules/nixos/default-config/services/default.nix nixosModules/default-config/services/default.nix
modules/nixos/default-config/services/ntp.nix nixosModules/default-config/services/ntp.nix
modules/nixos/default-config/services/tailscale.nix nixosModules/default-config/services/tailscale.nix
modules/nixos/default-config/ssh.nix nixosModules/default-config/ssh.nix
modules/nixos/default-config/users.nix nixosModules/default-config/users.nix
modules/nixos/default-users/backup.pub nixosModules/default-users/backup.pub
modules/nixos/default-users/default.nix nixosModules/default-users/default.nix
modules/nixos/default-users/yubikey-back.pub nixosModules/default-users/yubikey-back.pub
modules/nixos/default-users/yubikey-main.pub nixosModules/default-users/yubikey-main.pub
modules/nixos/default-users/yubikey-new.pub nixosModules/default-users/yubikey-new.pub
+2 -2
modules/nixos/profiles/default.nix nixosModules/profiles/default.nix
··· 7 7 base.enable = lib.mkEnableOption "Base Profile"; 8 8 cli.enable = lib.mkEnableOption "CLI Profile"; 9 9 development.enable = lib.mkEnableOption "Development Profile"; 10 - graphical.enable = lib.mkEnableOption "Graphical Profile"; 10 + gui.enable = lib.mkEnableOption "GUI Profile"; 11 11 server.enable = lib.mkEnableOption "Server Profile"; 12 12 }; 13 13 config = { 14 14 py.profiles = { 15 15 base.enable = lib.mkDefault true; 16 16 cli.enable = lib.mkDefault true; 17 - development.enable = lib.mkDefault cfg.graphical.enable; 17 + development.enable = lib.mkDefault cfg.gui.enable; 18 18 }; 19 19 }; 20 20 }
modules/nixos/programs/chromium/default.nix nixosModules/programs/chromium/default.nix
modules/nixos/programs/chromium/extraOpts.nix nixosModules/programs/chromium/extraOpts.nix
modules/nixos/programs/firefox/default.nix nixosModules/programs/firefox/default.nix
modules/nixos/programs/firefox/extensions.nix nixosModules/programs/firefox/extensions.nix
modules/nixos/programs/firefox/extraPrefs.nix nixosModules/programs/firefox/extraPrefs.nix
modules/nixos/programs/firefox/policies.nix nixosModules/programs/firefox/policies.nix
modules/nixos/programs/misc/default.nix nixosModules/programs/misc/default.nix
-1
modules/nixos/programs/neovim/default.nix nixosModules/programs/neovim/default.nix
··· 12 12 13 13 config.programs.neovim = lib.mkIf cfg.enable { 14 14 enable = true; 15 - package = pkgs.py.nvim; 16 15 defaultEditor = true; 17 16 viAlias = true; 18 17 vimAlias = true;
modules/nixos/services/buildbot/default.nix nixosModules/services/buildbot/default.nix
modules/nixos/services/forgejo-runner/default.nix nixosModules/services/forgejo-runner/default.nix
+4 -2
modules/nixos/services/scrutiny/default.nix nixosModules/services/scrutiny/default.nix
··· 1 1 { 2 2 config, 3 3 lib, 4 + self, 4 5 ... 5 6 }: 6 7 let 7 8 cfg = config.py.services.scrutiny.collector; 8 - apiUrl = "https://marvin.${lib.py.data.tsNet}:${toString lib.py.data.services.scrutiny.port}"; 9 + apiUrl = "https://marvin.${self.lib.data.tsNet}:${toString self.lib.data.services.scrutiny.port}"; 9 10 in 10 11 { 11 12 options.py.services.scrutiny = { ··· 23 24 settings = { 24 25 host.id = config.networking.hostName; 25 26 api.endpoint = apiUrl; 26 - } // cfg.extraSettings; 27 + } 28 + // cfg.extraSettings; 27 29 }; 28 30 }
+15
nixosModules/default-config/nixpkgsConfig.nix
··· 1 + { 2 + inputs, 3 + ... 4 + }: 5 + { 6 + nixpkgs = { 7 + overlays = [ 8 + inputs.self.overlays.openssh-fixperms 9 + inputs.golink.overlays.default 10 + ]; 11 + config = { 12 + allowUnfree = true; 13 + }; 14 + }; 15 + }
+28
nixosModules/default.nix
··· 1 + { 2 + ... 3 + }: 4 + { 5 + flake.nixosModules = { 6 + # Top-level 7 + defaultConfig = import ./default-config; 8 + defaultUsers = import ./default-users; 9 + profiles = import ./profiles; 10 + 11 + # Programs 12 + chromium = import ./programs/chromium; 13 + firefox = import ./programs/firefox; 14 + hyprland = import ./programs/hyprland; 15 + miscPrograms = import ./programs/misc; 16 + neovim = import ./programs/neovim; 17 + 18 + # Services 19 + buildbot = import ./services/buildbot; 20 + forgejo-runner = import ./services/forgejo-runner; 21 + scrutiny = import ./services/scrutiny; 22 + 23 + hm-pyrox = import ./homes/pyrox; 24 + hm-thehedgehog = import ./homes/thehedgehog; 25 + hm-pyrox-zaphod = import ./homes/pyrox-zaphod; 26 + hm-thehedgehog-zaphod = import ./homes/thehedgehog-zaphod; 27 + }; 28 + }
+52
nixosModules/homes/pyrox-zaphod/default.nix
··· 1 + { 2 + pkgs, 3 + ... 4 + }: 5 + { 6 + home-manager.users.pyrox = { 7 + imports = [ 8 + ./files/pamKeys.nix 9 + ./files/distrobox-config.nix 10 + ]; 11 + home.packages = [ 12 + pkgs.mindustry 13 + ]; 14 + py.profiles.desktop.enable = true; 15 + py.services.kanshi.settings = [ 16 + { 17 + profile = { 18 + name = "laptop-only"; 19 + outputs = [ 20 + { 21 + criteria = "eDP-1"; 22 + status = "enable"; 23 + scale = 1.2; 24 + position = "0,0"; 25 + adaptiveSync = true; 26 + } 27 + ]; 28 + }; 29 + } 30 + { 31 + profile = { 32 + name = "office"; 33 + outputs = [ 34 + { 35 + criteria = "eDP-1"; 36 + status = "enable"; 37 + scale = 1.2; 38 + position = "0,0"; 39 + adaptiveSync = true; 40 + } 41 + { 42 + criteria = "Acer Technologies SA241Y 0x1497CF17"; 43 + status = "enable"; 44 + scale = 1.0; 45 + position = "2160,0"; 46 + } 47 + ]; 48 + }; 49 + } 50 + ]; 51 + }; 52 + }
+18
nixosModules/homes/pyrox/default.nix
··· 1 + { 2 + lib, 3 + inputs, 4 + ... 5 + }: 6 + { 7 + home-manager.users.pyrox = { 8 + imports = [ 9 + inputs.self.homeModules.allModules 10 + { 11 + home.username = "pyrox"; 12 + home.stateVersion = "25.11"; 13 + py.profiles.server.enable = lib.mkDefault true; 14 + py.profiles.desktop.enable = lib.mkDefault false; 15 + } 16 + ]; 17 + }; 18 + }
+65
nixosModules/homes/thehedgehog-zaphod/default.nix
··· 1 + { 2 + pkgs, 3 + config, 4 + ... 5 + }: 6 + let 7 + hmConfig = config.home-manager.users.thehedgehog; 8 + in 9 + { 10 + home-manager.users.thehedgehog = { 11 + home.packages = [ 12 + pkgs.mindustry 13 + pkgs.signal-desktop 14 + ]; 15 + services.wpaperd = { 16 + enable = true; 17 + settings = { 18 + default = { 19 + path = "${hmConfig.home.homeDirectory}/bgs/wallpapers"; 20 + duration = "3h"; 21 + sorting = "random"; 22 + queue-size = 50; 23 + recursive = true; 24 + }; 25 + }; 26 + }; 27 + py.profiles.desktop.enable = true; 28 + py.services.kanshi.settings = [ 29 + { 30 + profile = { 31 + name = "laptop-only"; 32 + outputs = [ 33 + { 34 + criteria = "eDP-1"; 35 + status = "enable"; 36 + scale = 1.2; 37 + position = "0,0"; 38 + adaptiveSync = true; 39 + } 40 + ]; 41 + }; 42 + } 43 + { 44 + profile = { 45 + name = "office"; 46 + outputs = [ 47 + { 48 + criteria = "eDP-1"; 49 + status = "enable"; 50 + scale = 1.2; 51 + position = "0,0"; 52 + adaptiveSync = true; 53 + } 54 + { 55 + criteria = "Acer Technologies SA241Y 0x1497CF17"; 56 + status = "enable"; 57 + scale = 1.0; 58 + position = "2160,0"; 59 + } 60 + ]; 61 + }; 62 + } 63 + ]; 64 + }; 65 + }
+18
nixosModules/homes/thehedgehog/default.nix
··· 1 + { 2 + lib, 3 + inputs, 4 + ... 5 + }: 6 + { 7 + home-manager.users.thehedgehog = { 8 + imports = [ 9 + inputs.self.homeModules.allModules 10 + { 11 + home.username = "thehedgehog"; 12 + home.stateVersion = "25.11"; 13 + py.profiles.server.enable = lib.mkDefault true; 14 + py.profiles.desktop.enable = lib.mkDefault false; 15 + } 16 + ]; 17 + }; 18 + }
+20
nixosModules/programs/hyprland/default.nix
··· 1 + { 2 + config, 3 + lib, 4 + ... 5 + }: 6 + let 7 + cfg = config.py.programs.hyprland; 8 + in 9 + { 10 + options = { 11 + py.programs.hyprland.enable = lib.mkEnableOption "Hyprland"; 12 + }; 13 + config = lib.mkIf cfg.enable { 14 + programs.hyprland = { 15 + enable = true; 16 + xwayland.enable = true; 17 + }; 18 + programs.hyprlock.enable = cfg.enable; 19 + }; 20 + }
+6
overlays/default.nix
··· 1 + { 2 + flake.overlays = { 3 + cinny = import ./cinny; 4 + openssh-fixperms = import ./openssh-fixperms; 5 + }; 6 + }
+1 -1
overlays/openssh-fixperms/default.nix
··· 1 - _: final: prev: { 1 + final: prev: { 2 2 openssh-patched = prev.openssh.overrideAttrs (old: { 3 3 patches = (old.patches or [ ]) ++ [ ./permfix.patch ]; 4 4 doCheck = false;
+31
packages/default.nix
··· 1 + { ... }: 2 + { 3 + 4 + perSystem = 5 + { 6 + pkgs, 7 + lib, 8 + ... 9 + }: 10 + let 11 + packages = lib.makeScope pkgs.newScope (_: { 12 + anubis-files = pkgs.callPackage ./anubis-files { }; 13 + doc2dash = pkgs.callPackage ./doc2dash { }; 14 + jellyfin-exporter = pkgs.callPackage ./jellyfin-exporter { }; 15 + pingvin-share-config = pkgs.callPackage ./pingvin-share-config { }; 16 + 17 + }); 18 + in 19 + { 20 + legacyPackages = packages; 21 + packages = lib.filterAttrs ( 22 + _: pkg: 23 + let 24 + isDerivation = lib.isDerivation pkg; 25 + availableOnHost = lib.meta.availableOn pkgs.stdenv.hostPlatform pkg; 26 + isBroken = pkg.meta.broken or false; 27 + in 28 + isDerivation && !isBroken && availableOnHost 29 + ) packages; 30 + }; 31 + }
+3 -3
packages/jellyfin-exporter/default.nix
··· 6 6 }: 7 7 buildGoModule (finalAttrs: { 8 8 pname = "jellyfin-exporter"; 9 - version = "1.3.5"; 9 + version = "1.3.8"; 10 10 11 11 src = fetchFromGitHub { 12 12 owner = "rebelcore"; 13 13 repo = "jellyfin_exporter"; 14 14 tag = "v${finalAttrs.version}"; 15 - hash = "sha256-TKKP0zBdQiAgWQJ8BKcPOR6I+ZKKwjDBq0r36E0BAVs="; 15 + hash = "sha256-7fIrjcy6y/Ayj43WeuPNCx3uVJyl5Wf6bWs5ta2PpWc="; 16 16 }; 17 17 18 18 # We need to patch the tests since we don't move the binary to `$GOPATH/bin`, but to `$out/bin` instead. ··· 21 21 --replace-fail "GOPATH" "out" 22 22 ''; 23 23 24 - vendorHash = "sha256-/VCE2C8EismFg1puajWmBK8qf3hLYXzywA1R/qqAMr0="; 24 + vendorHash = "sha256-JSOKDbefQyDLNy2y1oW7HUplQw8uhhOGZ+ueWyUYYQ0="; 25 25 26 26 meta = { 27 27 changelog = "https://github.com/rebelcore/jellyfin_exporter/blob/v${finalAttrs.version}/CHANGELOG.md";
shells/default/default.nix devShells/default/default.nix
systems/x86_64-linux/marvin/bootloader.nix hosts/marvin/bootloader.nix
+3 -3
systems/x86_64-linux/marvin/default.nix hosts/marvin/default.nix
··· 1 - { system, ... }: 1 + { ... }: 2 2 { 3 3 imports = [ 4 4 # Machine-specific configurations. ··· 17 17 ./services/git.nix 18 18 ./services/golink.nix 19 19 ./services/grafana.nix 20 - ./services/iceshrimp.nix 20 + # ./services/iceshrimp.nix 21 21 ./services/jellyfin.nix 22 22 ./services/matrix.nix 23 23 ./services/miniflux.nix ··· 39 39 ./services/zfs.nix 40 40 ]; 41 41 nix.settings.max-jobs = 12; 42 - nixpkgs.hostPlatform.system = system; 43 42 networking = { 44 43 networkmanager = { 45 44 enable = true; ··· 73 72 users.groups.misc.gid = 1000; 74 73 time.timeZone = "America/New_York"; 75 74 py = { 75 + profiles.server.enable = true; 76 76 users.default.enable = true; 77 77 programs = { 78 78 fish.enable = true;
systems/x86_64-linux/marvin/firewall.nix hosts/marvin/firewall.nix
systems/x86_64-linux/marvin/hardware.nix hosts/marvin/hardware.nix
systems/x86_64-linux/marvin/networking.nix hosts/marvin/networking.nix
systems/x86_64-linux/marvin/services/anubis.nix hosts/marvin/services/anubis.nix
+2 -3
systems/x86_64-linux/marvin/services/authentik.nix hosts/marvin/services/authentik.nix
··· 1 1 { 2 2 config, 3 - lib, 4 - pkgs, 3 + self, 5 4 ... 6 5 }: 7 6 let 8 - d = lib.py.data.services.authentik; 7 + d = self.lib.data.services.authentik; 9 8 in 10 9 { 11 10 virtualisation.oci-containers.containers =
systems/x86_64-linux/marvin/services/avahi.nix hosts/marvin/services/avahi.nix
systems/x86_64-linux/marvin/services/bookstack.nix hosts/marvin/services/bookstack.nix
systems/x86_64-linux/marvin/services/bots.nix hosts/marvin/services/bots.nix
+3 -3
systems/x86_64-linux/marvin/services/buildbot.nix hosts/marvin/services/buildbot.nix
··· 1 - { config, lib, ... }: 1 + { config, self, ... }: 2 2 let 3 3 as = config.age.secrets; 4 - d = lib.py.data.services.buildbot; 5 - g = lib.py.data.services.git; 4 + d = self.lib.data.services.buildbot; 5 + g = self.lib.data.services.git; 6 6 bbSecret = { 7 7 owner = "buildbot"; 8 8 group = "buildbot";
+2 -2
systems/x86_64-linux/marvin/services/deemix.nix hosts/marvin/services/deemix.nix
··· 1 - { lib, ... }: 1 + { self, ... }: 2 2 let 3 - d = lib.py.data.services.deemix; 3 + d = self.lib.data.services.deemix; 4 4 in 5 5 { 6 6 virtualisation.oci-containers.containers.deemix = {
systems/x86_64-linux/marvin/services/gdq-cals.nix hosts/marvin/services/gdq-cals.nix
+4 -2
systems/x86_64-linux/marvin/services/git.nix hosts/marvin/services/git.nix
··· 2 2 config, 3 3 lib, 4 4 pkgs, 5 + self', 6 + self, 5 7 ... 6 8 }: 7 9 let ··· 13 15 group = "forgejo"; 14 16 }; 15 17 16 - d = lib.py.data.services.git; 18 + d = self.lib.data.services.git; 17 19 in 18 20 { 19 21 catppuccin.forgejo.enable = true; ··· 149 151 services.anubis.instances.forgejo = lib.mkIf config.services.forgejo.enable { 150 152 settings = { 151 153 BIND = ":${toString d.anubis}"; 152 - POLICY_FNAME = "${pkgs.py.anubis-files}/policies/forgejo.yaml"; 154 + POLICY_FNAME = "${self'.packages.anubis-files}/policies/forgejo.yaml"; 153 155 TARGET = "http://localhost:${toString d.port}"; 154 156 }; 155 157 };
systems/x86_64-linux/marvin/services/golink.nix hosts/marvin/services/golink.nix
+5 -5
systems/x86_64-linux/marvin/services/grafana.nix hosts/marvin/services/grafana.nix
··· 1 1 { 2 2 config, 3 - lib, 4 - pkgs, 3 + self', 4 + self, 5 5 ... 6 6 }: 7 7 let 8 - d = lib.py.data.services.grafana; 9 - a = lib.py.data.services.authentik; 8 + d = self.lib.data.services.grafana; 9 + a = self.lib.data.services.authentik; 10 10 in 11 11 { 12 12 services.grafana = { ··· 62 62 services.anubis.instances.grafana = { 63 63 settings = { 64 64 BIND = ":${toString d.anubis}"; 65 - POLICY_FNAME = "${pkgs.py.anubis-files}/policies/grafana.yaml"; 65 + POLICY_FNAME = "${self'.packages.anubis-files}/policies/grafana.yaml"; 66 66 TARGET = "http://localhost:${toString d.port}"; 67 67 }; 68 68 };
+2 -1
systems/x86_64-linux/marvin/services/iceshrimp.nix hosts/marvin/services/iceshrimp.nix
··· 3 3 inputs, 4 4 pkgs, 5 5 lib, 6 + self, 6 7 ... 7 8 }: 8 9 let 9 10 10 - d = lib.py.data.services.iceshrimp; 11 + d = self.lib.data.services.iceshrimp; 11 12 12 13 package = inputs.iceshrimp.packages.x86_64-linux.iceshrimp-pre.overrideAttrs rec { 13 14 version = "2023.12.8-pyrox1";
+2 -2
systems/x86_64-linux/marvin/services/jellyfin.nix hosts/marvin/services/jellyfin.nix
··· 1 1 { 2 - pkgs, 3 2 lib, 4 3 config, 4 + self', 5 5 ... 6 6 }: 7 7 let ··· 39 39 ]; 40 40 description = "Jellyfin Metrics Exporter for Prometheus"; 41 41 serviceConfig = { 42 - ExecStart = "${lib.getExe pkgs.py.jellyfin-exporter} @${config.age.secrets.jellyfin-exporter-config.path}"; 42 + ExecStart = "${lib.getExe self'.packages.jellyfin-exporter} @${config.age.secrets.jellyfin-exporter-config.path}"; 43 43 ReadOnlyPaths = [ config.age.secrets.jellyfin-exporter-config.path ]; 44 44 Restart = "always"; 45 45 DynamicUser = true;
+2 -2
systems/x86_64-linux/marvin/services/matrix.nix hosts/marvin/services/matrix.nix
··· 1 1 { 2 - lib, 2 + self, 3 3 ... 4 4 }: 5 5 let 6 - d = lib.py.data.services.matrix-server; 6 + d = self.lib.data.services.matrix-server; 7 7 in 8 8 { 9 9 services.matrix-conduit = {
+4 -4
systems/x86_64-linux/marvin/services/miniflux.nix hosts/marvin/services/miniflux.nix
··· 1 1 { 2 2 config, 3 - lib, 4 - pkgs, 3 + self', 4 + self, 5 5 ... 6 6 }: 7 7 let 8 - d = lib.py.data.services.miniflux; 8 + d = self.lib.data.services.miniflux; 9 9 in 10 10 { 11 11 services.miniflux = { ··· 33 33 services.anubis.instances.miniflux = { 34 34 settings = { 35 35 BIND = ":${toString d.anubis}"; 36 - POLICY_FNAME = "${pkgs.py.anubis-files}/policies/miniflux.yaml"; 36 + POLICY_FNAME = "${self'.packages.anubis-files}/policies/miniflux.yaml"; 37 37 TARGET = "http://localhost:${toString d.port}"; 38 38 }; 39 39 };
systems/x86_64-linux/marvin/services/minio.nix hosts/marvin/services/minio.nix
+5 -3
systems/x86_64-linux/marvin/services/nextcloud/default.nix hosts/marvin/services/nextcloud/default.nix
··· 2 2 config, 3 3 pkgs, 4 4 lib, 5 + self', 6 + self, 5 7 ... 6 8 }: 7 9 let 8 - d = lib.py.data.services.nextcloud; 9 - i = lib.py.data.services.nextcloud-imaginary; 10 + d = self.lib.data.services.nextcloud; 11 + i = self.lib.data.services.nextcloud-imaginary; 10 12 in 11 13 { 12 14 imports = [ ··· 104 106 services.anubis.instances.nextcloud = { 105 107 settings = { 106 108 BIND = ":${toString d.anubis}"; 107 - POLICY_FNAME = "${pkgs.py.anubis-files}/policies/nextcloud.yaml"; 109 + POLICY_FNAME = "${self'.packages.anubis-files}/policies/nextcloud.yaml"; 108 110 TARGET = "http://localhost:${toString d.port}"; 109 111 }; 110 112 };
+2 -2
systems/x86_64-linux/marvin/services/nextcloud/imaginary.nix hosts/marvin/services/nextcloud/imaginary.nix
··· 1 - { lib, ... }: 1 + { self, ... }: 2 2 let 3 - d = lib.py.data.services.nextcloud-imaginary; 3 + d = self.lib.data.services.nextcloud-imaginary; 4 4 in 5 5 { 6 6 services.imaginary = {
systems/x86_64-linux/marvin/services/nextcloud/nextcloud-admin-pw.age hosts/marvin/services/nextcloud/nextcloud-admin-pw.age
+3 -3
systems/x86_64-linux/marvin/services/nextcloud/office.nix hosts/marvin/services/nextcloud/office.nix
··· 1 - { lib, pkgs, ... }: 1 + { self', self, ... }: 2 2 let 3 - d = lib.py.data.services.nextcloud-office; 3 + d = self.lib.data.services.nextcloud-office; 4 4 in 5 5 { 6 6 services.collabora-online = { ··· 22 22 services.anubis.instances.nextcloud-office = { 23 23 settings = { 24 24 BIND = ":${toString d.anubis}"; 25 - POLICY_FNAME = "${pkgs.py.anubis-files}/policies/nextcloud-office.yaml"; 25 + POLICY_FNAME = "${self'.packages.anubis-files}/policies/nextcloud-office.yaml"; 26 26 TARGET = "http://localhost:${toString d.port}"; 27 27 }; 28 28 };
+2 -2
systems/x86_64-linux/marvin/services/nginx.nix hosts/marvin/services/nginx.nix
··· 1 - { lib, ... }: 1 + { self, ... }: 2 2 let 3 - n = lib.py.data.services.nextcloud; 3 + n = self.lib.data.services.nextcloud; 4 4 in 5 5 { 6 6 services.nginx = {
+7 -2
systems/x86_64-linux/marvin/services/pinchflat.nix hosts/marvin/services/pinchflat.nix
··· 1 - { config, lib, ... }: 1 + { 2 + config, 3 + lib, 4 + self, 5 + ... 6 + }: 2 7 let 3 8 cfg = config.services.pinchflat; 4 9 age = config.age.secrets; 5 - d = lib.py.data.services.pinchflat; 10 + d = self.lib.data.services.pinchflat; 6 11 in 7 12 { 8 13 services.pinchflat = {
+5 -4
systems/x86_64-linux/marvin/services/pingvin-share.nix hosts/marvin/services/pingvin-share.nix
··· 1 1 { 2 - lib, 3 2 config, 4 3 pkgs, 4 + self', 5 + self, 5 6 ... 6 7 }: 7 8 let 8 - d = lib.py.data.services.pingvin-share; 9 + d = self.lib.data.services.pingvin-share; 9 10 cfg = config.services.pingvin-share; 10 11 configFormat = pkgs.formats.yaml { }; 11 12 configFile = configFormat.generate "config.yaml" { ··· 87 88 pingvin-share-be = { 88 89 settings = { 89 90 BIND = ":${toString d.be-anubis}"; 90 - POLICY_FNAME = "${pkgs.py.anubis-files}/policies/pingvin-share.yaml"; 91 + POLICY_FNAME = "${self'.packages.anubis-files}/policies/pingvin-share.yaml"; 91 92 TARGET = "http://localhost:${toString d.be-port}"; 92 93 }; 93 94 }; 94 95 pingvin-share-fe = { 95 96 settings = { 96 97 BIND = ":${toString d.anubis}"; 97 - POLICY_FNAME = "${pkgs.py.anubis-files}/policies/pingvin-share.yaml"; 98 + POLICY_FNAME = "${self'.packages.anubis-files}/policies/pingvin-share.yaml"; 98 99 TARGET = "http://localhost:${toString d.port}"; 99 100 }; 100 101 };
+4 -4
systems/x86_64-linux/marvin/services/planka.nix hosts/marvin/services/planka.nix
··· 1 1 { 2 2 config, 3 - lib, 4 - pkgs, 3 + self', 4 + self, 5 5 ... 6 6 }: 7 7 let 8 8 dataDir = "/var/lib/planka"; 9 - d = lib.py.data.services.planka; 9 + d = self.lib.data.services.planka; 10 10 in 11 11 { 12 12 virtualisation.oci-containers.containers = { ··· 48 48 settings = { 49 49 COOKIE_DOMAIN = ".cs2a.club"; 50 50 BIND = ":${toString d.anubis}"; 51 - POLICY_FNAME = "${pkgs.py.anubis-files}/policies/planka.yaml"; 51 + POLICY_FNAME = "${self'.packages.anubis-files}/policies/planka.yaml"; 52 52 TARGET = "http://localhost:${toString d.port}"; 53 53 }; 54 54 };
+4 -4
systems/x86_64-linux/marvin/services/pocket-id.nix hosts/marvin/services/pocket-id.nix
··· 1 1 { 2 2 config, 3 - lib, 4 - pkgs, 3 + self', 4 + self, 5 5 ... 6 6 }: 7 7 let 8 - d = lib.py.data.services.pocket-id; 8 + d = self.lib.data.services.pocket-id; 9 9 in 10 10 { 11 11 services.pocket-id = { ··· 43 43 pocket-id = { 44 44 settings = { 45 45 BIND = ":${toString d.anubis}"; 46 - POLICY_FNAME = "${pkgs.py.anubis-files}/policies/pocket-id.yaml"; 46 + POLICY_FNAME = "${self'.packages.anubis-files}/policies/pocket-id.yaml"; 47 47 TARGET = "http://localhost:${toString d.port}"; 48 48 }; 49 49 };
systems/x86_64-linux/marvin/services/podman.nix hosts/marvin/services/podman.nix
systems/x86_64-linux/marvin/services/postgres.nix hosts/marvin/services/postgres.nix
systems/x86_64-linux/marvin/services/prometheus.nix hosts/marvin/services/prometheus.nix
systems/x86_64-linux/marvin/services/prosody.nix hosts/marvin/services/prosody.nix
+2 -2
systems/x86_64-linux/marvin/services/redlib.nix hosts/marvin/services/redlib.nix
··· 1 - { pkgs, lib, ... }: 1 + { pkgs, self, ... }: 2 2 let 3 - d = lib.py.data.services.redlib; 3 + d = self.lib.data.services.redlib; 4 4 in 5 5 { 6 6 services.libreddit = {
+2 -2
systems/x86_64-linux/marvin/services/scrutiny.nix hosts/marvin/services/scrutiny.nix
··· 1 - { config, lib, ... }: 1 + { self, ... }: 2 2 let 3 - d = lib.py.data.services.scrutiny; 3 + d = self.lib.data.services.scrutiny; 4 4 in 5 5 { 6 6 services.scrutiny = {
systems/x86_64-linux/marvin/services/secrets/anubis-key.age hosts/marvin/services/secrets/anubis-key.age
systems/x86_64-linux/marvin/services/secrets/authentik-env.age hosts/marvin/services/secrets/authentik-env.age
systems/x86_64-linux/marvin/services/secrets/buildbot/gitea-token.age hosts/marvin/services/secrets/buildbot/gitea-token.age
systems/x86_64-linux/marvin/services/secrets/buildbot/oauth-secret.age hosts/marvin/services/secrets/buildbot/oauth-secret.age
systems/x86_64-linux/marvin/services/secrets/buildbot/worker-password.age hosts/marvin/services/secrets/buildbot/worker-password.age
systems/x86_64-linux/marvin/services/secrets/buildbot/workers.age hosts/marvin/services/secrets/buildbot/workers.age
systems/x86_64-linux/marvin/services/secrets/forgejo/aux-docs-runner-token.age hosts/marvin/services/secrets/forgejo/aux-docs-runner-token.age
systems/x86_64-linux/marvin/services/secrets/forgejo/db-pw.age hosts/marvin/services/secrets/forgejo/db-pw.age
systems/x86_64-linux/marvin/services/secrets/forgejo/default-runner-token.age hosts/marvin/services/secrets/forgejo/default-runner-token.age
systems/x86_64-linux/marvin/services/secrets/forgejo/gitgay-runner-token.age hosts/marvin/services/secrets/forgejo/gitgay-runner-token.age
systems/x86_64-linux/marvin/services/secrets/forgejo/internal-token.age hosts/marvin/services/secrets/forgejo/internal-token.age
systems/x86_64-linux/marvin/services/secrets/forgejo/lfs-jwt-secret.age hosts/marvin/services/secrets/forgejo/lfs-jwt-secret.age
systems/x86_64-linux/marvin/services/secrets/forgejo/mail-pw.age hosts/marvin/services/secrets/forgejo/mail-pw.age
systems/x86_64-linux/marvin/services/secrets/forgejo/oauth2-jwt-secret.age hosts/marvin/services/secrets/forgejo/oauth2-jwt-secret.age
systems/x86_64-linux/marvin/services/secrets/forgejo/secret-key.age hosts/marvin/services/secrets/forgejo/secret-key.age
systems/x86_64-linux/marvin/services/secrets/grafana-admin-password.age hosts/marvin/services/secrets/grafana-admin-password.age
systems/x86_64-linux/marvin/services/secrets/grafana-smtp-password.age hosts/marvin/services/secrets/grafana-smtp-password.age
systems/x86_64-linux/marvin/services/secrets/iceshrimp-db-password.age hosts/marvin/services/secrets/iceshrimp-db-password.age
systems/x86_64-linux/marvin/services/secrets/iceshrimp-secret-config.age hosts/marvin/services/secrets/iceshrimp-secret-config.age
systems/x86_64-linux/marvin/services/secrets/jellyfin-exporter-config.age hosts/marvin/services/secrets/jellyfin-exporter-config.age
systems/x86_64-linux/marvin/services/secrets/miniflux-admin.age hosts/marvin/services/secrets/miniflux-admin.age
systems/x86_64-linux/marvin/services/secrets/minio-root.age hosts/marvin/services/secrets/minio-root.age
systems/x86_64-linux/marvin/services/secrets/nix-serve-priv.age hosts/marvin/services/secrets/nix-serve-priv.age
systems/x86_64-linux/marvin/services/secrets/pinchflat-secrets.age hosts/marvin/services/secrets/pinchflat-secrets.age
systems/x86_64-linux/marvin/services/secrets/pingvin-secrets.age hosts/marvin/services/secrets/pingvin-secrets.age
systems/x86_64-linux/marvin/services/secrets/planka-env.age hosts/marvin/services/secrets/planka-env.age
systems/x86_64-linux/marvin/services/secrets/pocket-id-secrets.age hosts/marvin/services/secrets/pocket-id-secrets.age
systems/x86_64-linux/marvin/services/secrets/secrets.nix hosts/marvin/services/secrets/secrets.nix
systems/x86_64-linux/marvin/services/secrets/thehedgehog-key.age hosts/marvin/services/secrets/thehedgehog-key.age
systems/x86_64-linux/marvin/services/secrets/thehedgehog-pem.age hosts/marvin/services/secrets/thehedgehog-pem.age
systems/x86_64-linux/marvin/services/secrets/vaultwarden-pgpass.age hosts/marvin/services/secrets/vaultwarden-pgpass.age
systems/x86_64-linux/marvin/services/secrets/vaultwarden-vars.age hosts/marvin/services/secrets/vaultwarden-vars.age
systems/x86_64-linux/marvin/services/secrets/webmentiond-env.age hosts/marvin/services/secrets/webmentiond-env.age
systems/x86_64-linux/marvin/services/syncthing.nix hosts/marvin/services/syncthing.nix
systems/x86_64-linux/marvin/services/tailscale.nix hosts/marvin/services/tailscale.nix
+3 -2
systems/x86_64-linux/marvin/services/tangled.nix hosts/marvin/services/tangled.nix
··· 1 1 { 2 2 config, 3 3 lib, 4 + self, 4 5 ... 5 6 }: 6 7 let 7 8 cfg = config.services.tangled-knot; 8 - dk = lib.py.data.services.tangled-knot; 9 - ds = lib.py.data.services.tangled-spindle; 9 + dk = self.lib.data.services.tangled-knot; 10 + ds = self.lib.data.services.tangled-spindle; 10 11 in 11 12 { 12 13 services = {
+4 -3
systems/x86_64-linux/marvin/services/vaultwarden.nix hosts/marvin/services/vaultwarden.nix
··· 1 1 { 2 2 pkgs, 3 3 config, 4 - lib, 4 + self, 5 + self', 5 6 ... 6 7 }: 7 8 let 8 9 9 - d = lib.py.data.services.vaultwarden; 10 + d = self.lib.data.services.vaultwarden; 10 11 11 12 vaultwardenSecret = { 12 13 owner = "vaultwarden"; ··· 118 119 services.anubis.instances.vaultwarden = { 119 120 settings = { 120 121 BIND = ":${toString d.anubis}"; 121 - POLICY_FNAME = "${pkgs.py.anubis-files}/policies/vaultwarden.yaml"; 122 + POLICY_FNAME = "${self'.packages.anubis-files}/policies/vaultwarden.yaml"; 122 123 TARGET = "http://localhost:${toString d.port}"; 123 124 }; 124 125 };
+2 -2
systems/x86_64-linux/marvin/services/webmentiond.nix hosts/marvin/services/webmentiond.nix
··· 1 - { config, lib, ... }: 1 + { config, self, ... }: 2 2 let 3 - d = lib.py.data.services.webmentiond; 3 + d = self.lib.data.services.webmentiond; 4 4 p = toString d.port; 5 5 in 6 6 {
systems/x86_64-linux/marvin/services/zfs.nix hosts/marvin/services/zfs.nix
systems/x86_64-linux/prefect/bootloader.nix hosts/prefect/bootloader.nix
+4 -1
systems/x86_64-linux/prefect/default.nix hosts/prefect/default.nix
··· 36 36 ./services/tailscale.nix 37 37 # ./services/zerotier.nix 38 38 ]; 39 - nixpkgs.hostPlatform.system = system; 40 39 fileSystems = { 41 40 "/" = { 42 41 fsType = "ext4"; ··· 44 43 }; 45 44 }; 46 45 46 + nix.settings.max-jobs = 2; 47 + nix.settings.cores = 2; 48 + 47 49 programs.fish.enable = true; 48 50 programs.fish.interactiveShellInit = '' 49 51 ${pkgs.direnv}/bin/direnv hook fish | source 50 52 ''; 51 53 py = { 54 + profiles.server.enable = true; 52 55 users.default.enable = true; 53 56 programs = { 54 57 fish.enable = true;
systems/x86_64-linux/prefect/dn42/bgp.nix hosts/prefect/dn42/bgp.nix
systems/x86_64-linux/prefect/dn42/bird.conf hosts/prefect/dn42/bird.conf
systems/x86_64-linux/prefect/dn42/default.nix hosts/prefect/dn42/default.nix
systems/x86_64-linux/prefect/dn42/services.nix hosts/prefect/dn42/services.nix
systems/x86_64-linux/prefect/dn42/tunnels.nix hosts/prefect/dn42/tunnels.nix
systems/x86_64-linux/prefect/dn42/wireguard.nix hosts/prefect/dn42/wireguard.nix
systems/x86_64-linux/prefect/firewall.nix hosts/prefect/firewall.nix
systems/x86_64-linux/prefect/hardware.nix hosts/prefect/hardware.nix
systems/x86_64-linux/prefect/networking.nix hosts/prefect/networking.nix
systems/x86_64-linux/prefect/packages.nix hosts/prefect/packages.nix
systems/x86_64-linux/prefect/secrets/acme-creds.age hosts/prefect/secrets/acme-creds.age
systems/x86_64-linux/prefect/secrets/dn42-peerfinder-uuid.age hosts/prefect/secrets/dn42-peerfinder-uuid.age
systems/x86_64-linux/prefect/secrets/dn42-privkey.age hosts/prefect/secrets/dn42-privkey.age
systems/x86_64-linux/prefect/secrets/headscale-oidc-secret.age hosts/prefect/secrets/headscale-oidc-secret.age
systems/x86_64-linux/prefect/secrets/secrets.nix hosts/prefect/secrets/secrets.nix
systems/x86_64-linux/prefect/secrets/stalwart-desec-token.age hosts/prefect/secrets/stalwart-desec-token.age
systems/x86_64-linux/prefect/secrets/stalwart-fallback-admin-pw.age hosts/prefect/secrets/stalwart-fallback-admin-pw.age
systems/x86_64-linux/prefect/secrets/stalwart-secret-ed25519.age hosts/prefect/secrets/stalwart-secret-ed25519.age
systems/x86_64-linux/prefect/secrets/stalwart-secret-rsa.age hosts/prefect/secrets/stalwart-secret-rsa.age
systems/x86_64-linux/prefect/secrets/wireguard-priv-key.age hosts/prefect/secrets/wireguard-priv-key.age
systems/x86_64-linux/prefect/services/acme.nix hosts/prefect/services/acme.nix
systems/x86_64-linux/prefect/services/blog-update.nix hosts/prefect/services/blog-update.nix
systems/x86_64-linux/prefect/services/blog-update.sh hosts/prefect/services/blog-update.sh
+7 -7
systems/x86_64-linux/prefect/services/caddy.nix hosts/prefect/services/caddy.nix
··· 1 - { pkgs, lib, ... }: 1 + { pkgs, self, ... }: 2 2 let 3 - pns = lib.py.data.services; 4 - mail = lib.py.data.mail; 5 - marvin = "http://${lib.py.data.hosts.marvin.ts.ip4}"; 6 - marvinIP = lib.py.data.hosts.marvin.ts.ip4; 7 - tsNet = lib.py.data.tsNet; 3 + pns = self.lib.data.services; 4 + mail = self.lib.data.mail; 5 + marvin = "http://${self.lib.data.hosts.marvin.ts.ip4}"; 6 + marvinIP = self.lib.data.hosts.marvin.ts.ip4; 7 + tsNet = self.lib.data.tsNet; 8 8 in 9 9 { 10 10 services.caddy = { ··· 17 17 "github.com/mholt/caddy-l4@v0.0.0-20250902102621-4a517a98d7fa" 18 18 "github.com/mohammed90/caddy-git-fs@v0.0.0-20240805164056-529acecd1830" 19 19 ]; 20 - hash = "sha256-1R6t8JgBoF/H1m0ZNrxFyx2yRfNkgucoPf321aQnvM8="; 20 + hash = "sha256-mmiBqKgzWm6HehThvd3zMuF7Vi0NiT1zcrJMw6K305I="; 21 21 }; 22 22 email = "pyrox@pyrox.dev"; 23 23 virtualHosts = {
systems/x86_64-linux/prefect/services/dn42-peerfinder.nix hosts/prefect/services/dn42-peerfinder.nix
systems/x86_64-linux/prefect/services/fail2ban.nix hosts/prefect/services/fail2ban.nix
systems/x86_64-linux/prefect/services/headscale.nix hosts/prefect/services/headscale.nix
systems/x86_64-linux/prefect/services/mailserver/default.nix hosts/prefect/services/mailserver/default.nix
systems/x86_64-linux/prefect/services/mailserver/logins.nix hosts/prefect/services/mailserver/logins.nix
systems/x86_64-linux/prefect/services/mailserver/monitoring.nix hosts/prefect/services/mailserver/monitoring.nix
systems/x86_64-linux/prefect/services/mailserver/overrides.nix hosts/prefect/services/mailserver/overrides.nix
systems/x86_64-linux/prefect/services/mailserver/stalwart/acme.nix hosts/prefect/services/mailserver/stalwart/acme.nix
systems/x86_64-linux/prefect/services/mailserver/stalwart/auth.nix hosts/prefect/services/mailserver/stalwart/auth.nix
systems/x86_64-linux/prefect/services/mailserver/stalwart/auto-ban.nix hosts/prefect/services/mailserver/stalwart/auto-ban.nix
systems/x86_64-linux/prefect/services/mailserver/stalwart/calendar.nix hosts/prefect/services/mailserver/stalwart/calendar.nix
+2 -1
systems/x86_64-linux/prefect/services/mailserver/stalwart/default.nix hosts/prefect/services/mailserver/stalwart/default.nix
··· 1 1 { 2 2 config, 3 3 lib, 4 + self, 4 5 ... 5 6 }: 6 7 let 7 - d = lib.py.data.mail; 8 + d = self.lib.data.mail; 8 9 cfg = config.services.stalwart-mail; 9 10 sec = config.age.secrets; 10 11 creds = config.services.stalwart-mail.credentials;
systems/x86_64-linux/prefect/services/mailserver/stalwart/imap.nix hosts/prefect/services/mailserver/stalwart/imap.nix
systems/x86_64-linux/prefect/services/mailserver/stalwart/queue.nix hosts/prefect/services/mailserver/stalwart/queue.nix
systems/x86_64-linux/prefect/services/mailserver/stalwart/report.nix hosts/prefect/services/mailserver/stalwart/report.nix
systems/x86_64-linux/prefect/services/mailserver/stalwart/server.nix hosts/prefect/services/mailserver/stalwart/server.nix
systems/x86_64-linux/prefect/services/mailserver/stalwart/session.nix hosts/prefect/services/mailserver/stalwart/session.nix
systems/x86_64-linux/prefect/services/mailserver/stalwart/signature.nix hosts/prefect/services/mailserver/stalwart/signature.nix
systems/x86_64-linux/prefect/services/named.conf hosts/prefect/services/named.conf
systems/x86_64-linux/prefect/services/netdata.nix hosts/prefect/services/netdata.nix
systems/x86_64-linux/prefect/services/nginx/default.nix hosts/prefect/services/nginx/default.nix
systems/x86_64-linux/prefect/services/nginx/pyrox.dev.nix hosts/prefect/services/nginx/pyrox.dev.nix
systems/x86_64-linux/prefect/services/prometheus.nix hosts/prefect/services/prometheus.nix
systems/x86_64-linux/prefect/services/secrets.nix hosts/prefect/services/secrets.nix
systems/x86_64-linux/prefect/services/tailscale.nix hosts/prefect/services/tailscale.nix
systems/x86_64-linux/prefect/services/zerotier.nix hosts/prefect/services/zerotier.nix
systems/x86_64-linux/thought/bootloader.nix hosts/thought/bootloader.nix
+1
systems/x86_64-linux/thought/default.nix hosts/thought/default.nix
··· 14 14 ]; 15 15 nixpkgs.hostPlatform.system = system; 16 16 py = { 17 + profiles.server.enable = true; 17 18 users.default.enable = true; 18 19 programs = { 19 20 fish.enable = true;
systems/x86_64-linux/thought/disks.nix hosts/thought/disks.nix
systems/x86_64-linux/thought/firewall.nix hosts/thought/firewall.nix
systems/x86_64-linux/thought/hardware.nix hosts/thought/hardware.nix
systems/x86_64-linux/thought/networking.nix hosts/thought/networking.nix
systems/x86_64-linux/thought/packages.nix hosts/thought/packages.nix
systems/x86_64-linux/thought/secrets/secrets.nix hosts/thought/secrets/secrets.nix
systems/x86_64-linux/thought/services/prometheus.nix hosts/thought/services/prometheus.nix
systems/x86_64-linux/thought/services/tailscale.nix hosts/thought/services/tailscale.nix
systems/x86_64-linux/zaphod/bootloader.nix hosts/zaphod/bootloader.nix
systems/x86_64-linux/zaphod/console.nix hosts/zaphod/console.nix
+3 -2
systems/x86_64-linux/zaphod/default.nix hosts/zaphod/default.nix
··· 1 - { system, ... }: 1 + { ... }: 2 2 { 3 3 imports = [ 4 4 # Machine specific configs ··· 26 26 # Agenix secrets 27 27 # ./secret-files.nix 28 28 ]; 29 - nixpkgs.hostPlatform.system = system; 30 29 py = { 30 + profiles.gui.enable = true; 31 31 users.default.enable = true; 32 32 programs = { 33 33 appimage.enable = true; ··· 35 35 dconf.enable = true; 36 36 firefox.enable = true; 37 37 fish.enable = true; 38 + hyprland.enable = true; 38 39 less.enable = true; 39 40 neovim.enable = true; 40 41 noisetorch.enable = true;
systems/x86_64-linux/zaphod/fonts.nix hosts/zaphod/fonts.nix
systems/x86_64-linux/zaphod/hardware.nix hosts/zaphod/hardware.nix
systems/x86_64-linux/zaphod/kde.nix hosts/zaphod/kde.nix
systems/x86_64-linux/zaphod/misc.nix hosts/zaphod/misc.nix
systems/x86_64-linux/zaphod/networking.nix hosts/zaphod/networking.nix
-1
systems/x86_64-linux/zaphod/packages.nix hosts/zaphod/packages.nix
··· 21 21 pkgs.qbittorrent 22 22 pkgs.scrcpy 23 23 pkgs.steam-run 24 - pkgs.py.doc2dash 25 24 ]; 26 25 }
systems/x86_64-linux/zaphod/power.nix hosts/zaphod/power.nix
systems/x86_64-linux/zaphod/programs/gnupg.nix hosts/zaphod/programs/gnupg.nix
systems/x86_64-linux/zaphod/programs/ssh.nix hosts/zaphod/programs/ssh.nix
-12
systems/x86_64-linux/zaphod/programs/sway.nix
··· 1 - { pkgs, ... }: 2 - { 3 - programs.sway = { 4 - enable = true; 5 - extraPackages = with pkgs; [ 6 - swaylock-effects 7 - swayidle 8 - ]; 9 - wrapperFeatures.base = true; 10 - wrapperFeatures.gtk = true; 11 - }; 12 - }
systems/x86_64-linux/zaphod/programs/zsh.nix hosts/zaphod/programs/zsh.nix
systems/x86_64-linux/zaphod/secret-files.nix hosts/zaphod/secret-files.nix
systems/x86_64-linux/zaphod/secrets/secrets.nix hosts/zaphod/secrets/secrets.nix
systems/x86_64-linux/zaphod/secrets/wg-privkey.age hosts/zaphod/secrets/wg-privkey.age
systems/x86_64-linux/zaphod/security/modules.nix hosts/zaphod/security/modules.nix
systems/x86_64-linux/zaphod/security/pam.nix hosts/zaphod/security/pam.nix
systems/x86_64-linux/zaphod/services/avahi.nix hosts/zaphod/services/avahi.nix
systems/x86_64-linux/zaphod/services/docker.nix hosts/zaphod/services/docker.nix
systems/x86_64-linux/zaphod/services/flatpak.nix hosts/zaphod/services/flatpak.nix
systems/x86_64-linux/zaphod/services/fprintd.nix hosts/zaphod/services/fprintd.nix
systems/x86_64-linux/zaphod/services/fwupd.nix hosts/zaphod/services/fwupd.nix
systems/x86_64-linux/zaphod/services/greeter.nix hosts/zaphod/services/greeter.nix
systems/x86_64-linux/zaphod/services/kmscon.nix hosts/zaphod/services/kmscon.nix
systems/x86_64-linux/zaphod/services/misc.nix hosts/zaphod/services/misc.nix
systems/x86_64-linux/zaphod/services/modules.nix hosts/zaphod/services/modules.nix
systems/x86_64-linux/zaphod/services/packagekit.nix hosts/zaphod/services/packagekit.nix
systems/x86_64-linux/zaphod/services/pcscd.nix hosts/zaphod/services/pcscd.nix
systems/x86_64-linux/zaphod/services/pipewire.nix hosts/zaphod/services/pipewire.nix
systems/x86_64-linux/zaphod/services/ssh.nix hosts/zaphod/services/ssh.nix
systems/x86_64-linux/zaphod/services/tailscale.nix hosts/zaphod/services/tailscale.nix
+15
templates/default.nix
··· 1 + { 2 + self, 3 + ... 4 + }: 5 + { 6 + flake = { 7 + templates = { 8 + uv = { 9 + path = ./uv; 10 + description = "uv project template"; 11 + }; 12 + }; 13 + defaultTemplate = self.templates.uv; 14 + }; 15 + }