Kieran's opinionated (and probably slightly dumb) nix config
at main 320 lines 9.4 kB view raw
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 herald = { 77 url = "git+https://tangled.org/dunkirk.sh/herald?ref=main"; 78 inputs.nixpkgs.follows = "nixpkgs"; 79 }; 80 81 import-tree.url = "github:vic/import-tree"; 82 83 nur = { 84 url = "github:nix-community/NUR"; 85 inputs.nixpkgs.follows = "nixpkgs"; 86 }; 87 88 cedarlogic = { 89 url = "github:taciturnaxolotl/CedarLogic"; 90 inputs.nixpkgs.follows = "nixpkgs"; 91 }; 92 93 soapdump = { 94 url = "github:taciturnaxolotl/soapdump"; 95 inputs.nixpkgs.follows = "nixpkgs"; 96 }; 97 98 wakatime-ls = { 99 url = "github:mrnossiom/wakatime-ls"; 100 inputs.nixpkgs.follows = "nixpkgs"; 101 }; 102 103 deploy-rs = { 104 url = "github:serokell/deploy-rs"; 105 inputs.nixpkgs.follows = "nixpkgs"; 106 }; 107 108 tangled = { 109 url = "git+https://tangled.org/tangled.org/core"; 110 inputs.nixpkgs.follows = "nixpkgs"; 111 }; 112 113 zmx = { 114 url = "github:neurosnap/zmx"; 115 }; 116 117 }; 118 119 outputs = 120 { 121 self, 122 nixpkgs, 123 nixpkgs-unstable, 124 agenix, 125 home-manager, 126 nur, 127 nix-darwin, 128 deploy-rs, 129 tangled, 130 ... 131 }@inputs: 132 let 133 outputs = inputs.self.outputs; 134 135 unstable-overlays = { 136 nixpkgs.overlays = [ 137 nur.overlays.default 138 (final: prev: { 139 unstable = import nixpkgs-unstable { 140 system = final.stdenv.hostPlatform.system; 141 config.allowUnfree = true; 142 }; 143 144 bambu-studio = prev.bambu-studio.overrideAttrs (oldAttrs: { 145 version = "01.00.01.50"; 146 src = prev.fetchFromGitHub { 147 owner = "bambulab"; 148 repo = "BambuStudio"; 149 rev = "v01.00.01.50"; 150 hash = "sha256-7mkrPl2CQSfc1lRjl1ilwxdYcK5iRU//QGKmdCicK30="; 151 }; 152 }); 153 154 zmx-binary = prev.callPackage ./packages/zmx.nix { }; 155 bore-auth = prev.callPackage ./packages/bore-auth.nix { }; 156 herald = inputs.herald.packages.${prev.stdenv.hostPlatform.system}.default; 157 }) 158 ]; 159 }; 160 in 161 { 162 # NixOS configuration entrypoint 163 # Available through 'nixos-rebuild --flake .#hostname' 164 nixosConfigurations = { 165 moonlark = nixpkgs.lib.nixosSystem { 166 specialArgs = { inherit inputs outputs; }; 167 modules = [ 168 inputs.disko.nixosModules.disko 169 { disko.devices.disk.disk1.device = "/dev/vda"; } 170 agenix.nixosModules.default 171 unstable-overlays 172 ./machines/moonlark 173 ]; 174 }; 175 176 prattle = nixpkgs.lib.nixosSystem { 177 specialArgs = { inherit inputs outputs; }; 178 modules = [ 179 inputs.disko.nixosModules.disko 180 agenix.nixosModules.default 181 inputs.nixos-facter-modules.nixosModules.facter 182 { config.facter.reportPath = ./machines/prattle/facter.json; } 183 unstable-overlays 184 ./machines/prattle 185 ]; 186 }; 187 188 terebithia = nixpkgs.lib.nixosSystem { 189 specialArgs = { inherit inputs outputs; }; 190 modules = [ 191 inputs.disko.nixosModules.disko 192 agenix.nixosModules.default 193 inputs.nixos-facter-modules.nixosModules.facter 194 { config.facter.reportPath = ./machines/terebithia/facter.json; } 195 unstable-overlays 196 ./machines/terebithia 197 ]; 198 }; 199 }; 200 201 # Standalone home-manager configurations 202 # Available through 'home-manager --flake .#hostname' 203 homeConfigurations = { 204 "tacyon" = home-manager.lib.homeManagerConfiguration { 205 pkgs = nixpkgs.legacyPackages.aarch64-linux; 206 extraSpecialArgs = { 207 inherit inputs outputs; 208 nixpkgs-unstable = nixpkgs-unstable; 209 }; 210 modules = [ 211 ./machines/tacyon 212 unstable-overlays 213 ]; 214 }; 215 216 "nest" = home-manager.lib.homeManagerConfiguration { 217 pkgs = nixpkgs.legacyPackages.x86_64-linux; 218 extraSpecialArgs = { 219 inherit inputs outputs; 220 nixpkgs-unstable = nixpkgs-unstable; 221 system = "x86_64-linux"; 222 }; 223 modules = [ 224 ./machines/nest 225 unstable-overlays 226 ]; 227 }; 228 229 "ember" = home-manager.lib.homeManagerConfiguration { 230 pkgs = nixpkgs.legacyPackages.x86_64-linux; 231 extraSpecialArgs = { 232 inherit inputs outputs; 233 nixpkgs-unstable = nixpkgs-unstable; 234 }; 235 modules = [ 236 ./machines/ember 237 unstable-overlays 238 ]; 239 240 }; 241 }; 242 243 # Darwin configurations 244 # Available through 'darwin-rebuild switch --flake .#hostname' 245 darwinConfigurations = { 246 atalanta = nix-darwin.lib.darwinSystem { 247 system = "aarch64-darwin"; 248 specialArgs = { inherit inputs outputs; }; 249 modules = [ 250 home-manager.darwinModules.home-manager 251 agenix.darwinModules.default 252 ./machines/atalanta 253 ]; 254 }; 255 }; 256 257 # Service manifest for infra dashboard 258 # Evaluate with: nix eval --json .#services-manifest 259 services-manifest = import ./lib/services-manifest.nix { 260 configSets = [ 261 self.nixosConfigurations 262 self.darwinConfigurations 263 self.homeConfigurations 264 ]; 265 extraMachines = { 266 everseen = { type = "client"; tailscaleHost = "everseen"; }; 267 }; 268 lib = nixpkgs.lib; 269 }; 270 271 # Documentation site (mdBook + nixdoc + atelier options) 272 # Build with: nix build .#docs 273 # Serve with: nix run .#docs.serve 274 packages = 275 let 276 mkDocs = system: 277 let 278 pkgs = nixpkgs.legacyPackages.${system}; 279 in 280 pkgs.callPackage ./packages/docs.nix { 281 servicesManifest = self.services-manifest; 282 inherit self; 283 }; 284 in 285 { 286 x86_64-linux.docs = mkDocs "x86_64-linux"; 287 aarch64-linux.docs = mkDocs "aarch64-linux"; 288 aarch64-darwin.docs = mkDocs "aarch64-darwin"; 289 }; 290 291 formatter.x86_64-linux = nixpkgs.legacyPackages.x86_64-linux.nixfmt-tree; 292 formatter.aarch64-darwin = nixpkgs.legacyPackages.aarch64-darwin.nixfmt-tree; 293 294 devShells.aarch64-darwin.default = nixpkgs.legacyPackages.aarch64-darwin.mkShell { 295 packages = [ deploy-rs.packages.aarch64-darwin.deploy-rs ]; 296 }; 297 devShells.x86_64-linux.default = nixpkgs.legacyPackages.x86_64-linux.mkShell { 298 packages = [ deploy-rs.packages.x86_64-linux.deploy-rs ]; 299 }; 300 devShells.aarch64-linux.default = nixpkgs.legacyPackages.aarch64-linux.mkShell { 301 packages = [ deploy-rs.packages.aarch64-linux.deploy-rs ]; 302 }; 303 304 # Deploy-rs configurations 305 deploy.nodes = { 306 # NixOS servers 307 terebithia = { 308 hostname = "terebithia"; 309 profiles.system = { 310 sshUser = "kierank"; 311 user = "root"; 312 path = deploy-rs.lib.aarch64-linux.activate.nixos self.nixosConfigurations.terebithia; 313 }; 314 }; 315 }; 316 317 # Validation checks 318 checks = builtins.mapAttrs (system: deployLib: deployLib.deployChecks self.deploy) deploy-rs.lib; 319 }; 320}