Kieran's opinionated (and probably slightly dumb) nix config
1{ 2 description = "Kieran's opinionated (and probably slightly dumb) nix config"; 3 4 inputs = { 5 # Nixpkgs 6 nixpkgs.url = "github:nixos/nixpkgs/nixos-25.11"; 7 nixpkgs-unstable.url = "github:nixos/nixpkgs/nixos-unstable"; 8 9 # NixOS hardware configuration 10 hardware.url = "github:NixOS/nixos-hardware/master"; 11 12 # Home manager 13 home-manager.url = "github:nix-community/home-manager/release-25.11"; 14 home-manager.inputs.nixpkgs.follows = "nixpkgs"; 15 16 # Nix-Darwin 17 nix-darwin.url = "github:nix-darwin/nix-darwin/nix-darwin-25.11"; 18 nix-darwin.inputs.nixpkgs.follows = "nixpkgs"; 19 20 disko.url = "github:nix-community/disko"; 21 disko.inputs.nixpkgs.follows = "nixpkgs"; 22 23 nixos-facter-modules.url = "github:numtide/nixos-facter-modules"; 24 25 # agenix 26 agenix.url = "github:ryantm/agenix"; 27 28 spicetify-nix = { 29 url = "github:Gerg-L/spicetify-nix"; 30 inputs.nixpkgs.follows = "nixpkgs"; 31 }; 32 33 catppuccin = { 34 url = "github:catppuccin/nix?rev=f518f96a60aceda4cd487437b25eaa48d0f1b97d"; 35 inputs.nixpkgs.follows = "nixpkgs"; 36 }; 37 38 catppuccin-vsc = { 39 url = "github:catppuccin/vscode"; 40 }; 41 42 nix-vscode-extensions.url = "github:nix-community/nix-vscode-extensions"; 43 44 frc-nix = { 45 url = "github:frc4451/frc-nix"; 46 inputs.nixpkgs.follows = "nixpkgs"; 47 }; 48 49 claude-desktop = { 50 url = "github:k3d3/claude-desktop-linux-flake"; 51 inputs.nixpkgs.follows = "nixpkgs"; 52 }; 53 54 hyprland-contrib = { 55 url = "github:hyprwm/contrib"; 56 inputs.nixpkgs.follows = "nixpkgs"; 57 }; 58 59 nixvim.url = "github:taciturnaxolotl/nixvim"; 60 61 terminal-wakatime = { 62 url = "github:taciturnaxolotl/terminal-wakatime"; 63 inputs.nixpkgs.follows = "nixpkgs"; 64 }; 65 66 ctfd-alerts = { 67 url = "github:taciturnaxolotl/ctfd-alerts"; 68 inputs.nixpkgs.follows = "nixpkgs"; 69 }; 70 71 flare = { 72 url = "github:ByteAtATime/flare/feat/nix"; 73 inputs.nixpkgs.follows = "nixpkgs"; 74 }; 75 76 import-tree.url = "github:vic/import-tree"; 77 78 nur = { 79 url = "github:nix-community/NUR"; 80 inputs.nixpkgs.follows = "nixpkgs"; 81 }; 82 83 cedarlogic = { 84 url = "github:taciturnaxolotl/CedarLogic"; 85 inputs.nixpkgs.follows = "nixpkgs"; 86 }; 87 88 soapdump = { 89 url = "github:taciturnaxolotl/soapdump"; 90 inputs.nixpkgs.follows = "nixpkgs"; 91 }; 92 93 wakatime-ls = { 94 url = "github:mrnossiom/wakatime-ls"; 95 inputs.nixpkgs.follows = "nixpkgs"; 96 }; 97 98 deploy-rs = { 99 url = "github:serokell/deploy-rs"; 100 inputs.nixpkgs.follows = "nixpkgs"; 101 }; 102 103 tangled = { 104 url = "git+https://tangled.org/tangled.org/core"; 105 inputs.nixpkgs.follows = "nixpkgs"; 106 }; 107 108 battleship-arena = { 109 url = "github:taciturnaxolotl/battleship-arena"; 110 inputs.nixpkgs.follows = "nixpkgs"; 111 }; 112 113 zmx = { 114 url = "github:neurosnap/zmx"; 115 }; 116 }; 117 118 outputs = 119 { 120 self, 121 nixpkgs, 122 nixpkgs-unstable, 123 agenix, 124 home-manager, 125 nur, 126 nix-darwin, 127 deploy-rs, 128 tangled, 129 ... 130 }@inputs: 131 let 132 outputs = inputs.self.outputs; 133 unstable-overlays = { 134 nixpkgs.overlays = [ 135 (final: prev: { 136 unstable = import nixpkgs-unstable { 137 system = final.stdenv.hostPlatform.system; 138 config.allowUnfree = true; 139 }; 140 141 bambu-studio = prev.bambu-studio.overrideAttrs (oldAttrs: { 142 version = "01.00.01.50"; 143 src = prev.fetchFromGitHub { 144 owner = "bambulab"; 145 repo = "BambuStudio"; 146 rev = "v01.00.01.50"; 147 hash = "sha256-7mkrPl2CQSfc1lRjl1ilwxdYcK5iRU//QGKmdCicK30="; 148 }; 149 }); 150 }) 151 ]; 152 }; 153 in 154 { 155 # NixOS configuration entrypoint 156 # Available through 'nixos-rebuild --flake .#hostname' 157 nixosConfigurations = { 158 moonlark = nixpkgs.lib.nixosSystem { 159 specialArgs = { inherit inputs outputs; }; 160 modules = [ 161 inputs.disko.nixosModules.disko 162 { disko.devices.disk.disk1.device = "/dev/vda"; } 163 agenix.nixosModules.default 164 unstable-overlays 165 ./machines/moonlark 166 nur.modules.nixos.default 167 ]; 168 }; 169 170 prattle = nixpkgs.lib.nixosSystem { 171 specialArgs = { inherit inputs outputs; }; 172 modules = [ 173 inputs.disko.nixosModules.disko 174 agenix.nixosModules.default 175 inputs.nixos-facter-modules.nixosModules.facter 176 { config.facter.reportPath = ./machines/prattle/facter.json; } 177 unstable-overlays 178 ./machines/prattle 179 nur.modules.nixos.default 180 ]; 181 }; 182 183 terebithia = nixpkgs.lib.nixosSystem { 184 specialArgs = { inherit inputs outputs; }; 185 modules = [ 186 inputs.disko.nixosModules.disko 187 agenix.nixosModules.default 188 inputs.nixos-facter-modules.nixosModules.facter 189 { config.facter.reportPath = ./machines/terebithia/facter.json; } 190 unstable-overlays 191 ./machines/terebithia 192 nur.modules.nixos.default 193 ]; 194 }; 195 }; 196 197 # Standalone home-manager configurations 198 # Available through 'home-manager --flake .#hostname' 199 homeConfigurations = { 200 "tacyon" = home-manager.lib.homeManagerConfiguration { 201 pkgs = nixpkgs.legacyPackages.aarch64-linux; 202 extraSpecialArgs = { 203 inherit inputs outputs; 204 nixpkgs-unstable = nixpkgs-unstable; 205 }; 206 modules = [ 207 ./machines/tacyon 208 unstable-overlays 209 ]; 210 }; 211 212 "nest" = home-manager.lib.homeManagerConfiguration { 213 pkgs = nixpkgs.legacyPackages.x86_64-linux; 214 extraSpecialArgs = { 215 inherit inputs outputs; 216 nixpkgs-unstable = nixpkgs-unstable; 217 system = "x86_64-linux"; 218 }; 219 modules = [ 220 ./machines/nest 221 unstable-overlays 222 ]; 223 }; 224 225 "ember" = home-manager.lib.homeManagerConfiguration { 226 pkgs = nixpkgs.legacyPackages.x86_64-linux; 227 extraSpecialArgs = { 228 inherit inputs outputs; 229 nixpkgs-unstable = nixpkgs-unstable; 230 }; 231 modules = [ 232 ./machines/ember 233 unstable-overlays 234 ]; 235 236 }; 237 "john" = home-manager.lib.homeManagerConfiguration { 238 pkgs = nixpkgs.legacyPackages.x86_64-linux; 239 extraSpecialArgs = { 240 inherit inputs outputs; 241 nixpkgs-unstable = nixpkgs-unstable; 242 system = "x86_64-linux"; 243 }; 244 modules = [ 245 ./machines/john 246 unstable-overlays 247 ]; 248 }; 249 }; 250 251 # Darwin configurations 252 # Available through 'darwin-rebuild switch --flake .#hostname' 253 darwinConfigurations = { 254 atalanta = nix-darwin.lib.darwinSystem { 255 system = "aarch64-darwin"; 256 specialArgs = { inherit inputs outputs; }; 257 modules = [ 258 home-manager.darwinModules.home-manager 259 agenix.darwinModules.default 260 unstable-overlays 261 ./machines/atalanta 262 ]; 263 }; 264 }; 265 266 formatter.x86_64-linux = nixpkgs.legacyPackages.x86_64-linux.nixfmt-tree; 267 formatter.aarch64-darwin = nixpkgs.legacyPackages.aarch64-darwin.nixfmt-tree; 268 269 # Deploy-rs configurations 270 deploy.nodes = { 271 # NixOS servers 272 terebithia = { 273 hostname = "terebithia"; 274 profiles.system = { 275 sshUser = "kierank"; 276 user = "root"; 277 path = deploy-rs.lib.aarch64-linux.activate.nixos self.nixosConfigurations.terebithia; 278 }; 279 }; 280 }; 281 282 # Validation checks 283 checks = builtins.mapAttrs (system: deployLib: deployLib.deployChecks self.deploy) deploy-rs.lib; 284 }; 285}