nix config
at main 479 lines 15 kB view raw
1{ 2 description = "Sealight NixOS Config"; 3 4 nixConfig = { 5 extra-substituters = [ "https://cache.numtide.com" ]; 6 extra-trusted-public-keys = [ "niks3.numtide.com-1:DTx8wZduET09hRmMtKdQDxNNthLQETkc/yaX7M4qK0g=" ]; 7 }; 8 9 inputs = { 10 # Nixpkgs 11 nixpkgs.url = "github:nixos/nixpkgs/nixos-25.11"; 12 unstable.url = "github:nixos/nixpkgs/nixos-unstable"; 13 nixos-hardware.url = "github:NixOS/nixos-hardware/master"; 14 15 # ngipkgs.url = "github:Chickensoupwithrice/ngipkgs?ref=aynish/atomic-server-module"; 16 # ngipkgs-local.url = "path:/home/anish/usr/ngipkgs"; 17 18 # Home manager 19 home-manager.url = "github:nix-community/home-manager/release-25.11"; 20 home-manager.inputs.nixpkgs.follows = "nixpkgs"; 21 hardware.url = "github:nixos/nixos-hardware"; 22 23 # Tools 24 agenix.url = "github:ryantm/agenix"; 25 agenix.inputs.nixpkgs.follows = "nixpkgs"; 26 deploy-rs.url = "github:serokell/deploy-rs"; 27 deploy-rs.inputs.nixpkgs.follows = "nixpkgs"; 28 disko.url = "github:nix-community/disko"; 29 disko.inputs.nixpkgs.follows = "nixpkgs"; 30 31 # My Packages 32 poonam.url = "git+ssh://gitea@git.sealight.xyz/aynish/kitaab?ref=main"; 33 poonam.inputs.nixpkgs.follows = "nixpkgs"; 34 basant.url = "git+ssh://gitea@git.sealight.xyz/aynish/basant?ref=main"; 35 vimwikicli.url = "git+ssh://gitea@git.sealight.xyz/aynish/vimwiki-cli?ref=main"; 36 basant.inputs.nixpkgs.follows = "nixpkgs"; 37 basant.inputs.poonam.follows = "poonam"; 38 vimwikicli.inputs.nixpkgs.follows = "nixpkgs"; 39 grasp.url = "git+ssh://gitea@git.sealight.xyz/aynish/grasp.git?ref=main"; 40 grasp.inputs.nixpkgs.follows = "nixpkgs"; 41 42 # Matrix 43 nix-matrix-appservices.url = "gitlab:coffeetables/nix-matrix-appservices"; 44 45 # Darwin 46 darwin = { 47 url = "github:LnL7/nix-darwin/nix-darwin-25.11"; 48 inputs.nixpkgs.follows = "nixpkgs"; 49 }; 50 nix-homebrew = { 51 url = "github:zhaofengli-wip/nix-homebrew"; 52 }; 53 homebrew-bundle = { 54 url = "github:homebrew/homebrew-bundle"; 55 flake = false; 56 }; 57 homebrew-core = { 58 url = "github:homebrew/homebrew-core"; 59 flake = false; 60 }; 61 homebrew-cask = { 62 url = "github:homebrew/homebrew-cask"; 63 flake = false; 64 }; 65 66 # Steam Deck / Gaming 67 jovian = { 68 url = "github:Jovian-Experiments/Jovian-NixOS"; 69 inputs.nixpkgs.follows = "unstable"; 70 }; 71 72 # Tangled (atproto tools) 73 tangled = { 74 url = "git+https://tangled.org/@tangled.org/core"; 75 inputs.nixpkgs.follows = "nixpkgs"; 76 }; 77 78 llm-agents.url = "github:numtide/llm-agents.nix"; 79 80 # Others 81 nur.url = "github:nix-community/NUR"; 82 rust-overlay = { 83 url = "github:oxalica/rust-overlay"; 84 inputs.nixpkgs.follows = "nixpkgs"; 85 }; 86 tidalcycles.url = "github:mitchmindtree/tidalcycles.nix"; 87 tidalcycles.inputs.nixpkgs.follows = "unstable"; 88 autohide-tdrop = { 89 url = "github:I-Want-ToBelieve/autohide-tdrop"; 90 inputs.nixpkgs.follows = "nixpkgs"; 91 }; 92 # TODO hundred rabbits software 93 # TODO needs secrets 94 # dhyan.url = "git+ssh://gitea@git.sealight.xyz/aynish/dhyan?ref=main"; 95 # dhyan.inputs.nixpkgs.follows = "nixpkgs"; 96 # TODO needs secrets 97 # muneem.url = "git+ssh://gitea@git.sealight.xyz/aynish/muneem?ref=main"; 98 # muneem.inputs.nixpkgs.follows = "nixpkgs"; 99 }; 100 101 outputs = 102 { 103 self, 104 nixpkgs, 105 unstable, 106 nixos-hardware, 107 home-manager, 108 deploy-rs, 109 agenix, 110 disko, 111 basant, 112 grasp, 113 nix-matrix-appservices, 114 nur, 115 tidalcycles, 116 rust-overlay, 117 vimwikicli, 118 autohide-tdrop, 119 darwin, 120 nix-homebrew, 121 homebrew-bundle, 122 homebrew-core, 123 homebrew-cask, 124 jovian, 125 tangled, 126 llm-agents, 127 ... 128 }@inputs: 129 let 130 forAllSystems = nixpkgs.lib.genAttrs [ 131 "aarch64-linux" 132 "i686-linux" 133 "x86_64-linux" 134 "aarch64-darwin" 135 "x86_64-darwin" 136 ]; 137 unstableOverlay = final: prev: { 138 # We already have these in scope 139 unstable = unstable.legacyPackages.${prev.system}; 140 deploy = deploy-rs.packages.${prev.system}.deploy-rs; 141 }; 142 vimwikiOverlay = final: prev: { 143 vimwiki-cli = vimwikicli.packages.${prev.system}.vimwiki-cli; 144 autohide-tdrop = autohide-tdrop.packages.${prev.system}.default; 145 }; 146 147 nixpkgsFor = forAllSystems ( 148 system: 149 import nixpkgs { 150 inherit system; 151 config = { 152 permittedInsecurePackages = [ 153 "olm-3.2.16" 154 ]; 155 allowUnfreePredicate = 156 pkg: 157 builtins.elem (nixpkgs.lib.getName pkg) [ 158 "ripcord" 159 "vcv-rack" 160 "SunVox" 161 "renoise" 162 "bitwig-studio-unwrapped" 163 "via" # QMK keyboard configurator 164 ]; 165 }; 166 overlays = [ 167 rust-overlay.overlays.default 168 tidalcycles.overlays.default 169 agenix.overlays.default 170 nur.overlays.default 171 # nix-matrix-appservices.overlay # nixpkgs has these packages and newer ones at that 172 unstableOverlay 173 vimwikiOverlay 174 self.overlays.additions 175 self.overlays.modifications 176 ]; 177 } 178 ); 179 180 # for when space matters 181 litePkgsFor = forAllSystems ( 182 system: 183 import nixpkgs { 184 inherit system; 185 # config.permittedInsecurePackages = [ 186 # "forgejo-1.19.4-0" # Needed for archivebox deployments on curve 187 # # Check when archive box updates it's dependeny 188 # ]; 189 overlays = [ 190 agenix.overlays.default 191 tangled.overlays.default # atproto tools only on lite deployments 192 self.overlays.additions 193 self.overlays.modifications 194 tidalcycles.overlays.default # needed for nvim which comes pre-installed lol 195 ]; 196 } 197 ); 198 199 # Package set for Darwin systems 200 darwinPkgsFor = forAllSystems ( 201 system: 202 import nixpkgs { 203 inherit system; 204 config = { 205 permittedInsecurePackages = [ 206 "olm-3.2.16" 207 ]; 208 allowUnfreePredicate = 209 pkg: 210 builtins.elem (nixpkgs.lib.getName pkg) [ 211 "ripcord" 212 "vcv-rack" 213 "SunVox" 214 "renoise" 215 "obsidian" 216 ]; 217 }; 218 overlays = [ 219 rust-overlay.overlays.default 220 tidalcycles.overlays.default 221 agenix.overlays.default 222 nur.overlays.default 223 unstableOverlay 224 vimwikiOverlay 225 self.overlays.additions 226 self.overlays.modifications 227 ]; 228 } 229 ); 230 231 # Package set for Steam Deck (gaming-focused) 232 deckPkgsFor = forAllSystems ( 233 system: 234 import unstable { 235 inherit system; 236 config = { 237 permittedInsecurePackages = [ 238 "olm-3.2.16" 239 ]; 240 allowUnfreePredicate = 241 pkg: 242 builtins.elem (nixpkgs.lib.getName pkg) [ 243 "ripcord" 244 "vcv-rack" 245 "SunVox" 246 "renoise" 247 "steam" 248 "steam-original" 249 "steam-runtime" 250 "steamdeck-hw-theme" 251 "steam-jupiter-unwrapped" 252 ]; 253 }; 254 overlays = [ 255 rust-overlay.overlays.default 256 tidalcycles.overlays.default 257 agenix.overlays.default 258 nur.overlays.default 259 unstableOverlay 260 vimwikiOverlay 261 self.overlays.additions 262 self.overlays.modifications 263 ]; 264 } 265 ); 266 in 267 { 268 # Your custom packages 269 # Acessible through 'nix build', 'nix shell', etc 270 packages = forAllSystems ( 271 system: 272 let 273 pkgs = nixpkgsFor.${system}; 274 in 275 import ./pkgs { pkgs = pkgs; } 276 ); 277 # Devshell for bootstrapping 278 # Acessible through 'nix develop' or 'nix-shell' (legacy) 279 devShells = forAllSystems ( 280 system: 281 let 282 pkgs = nixpkgsFor.${system}; 283 in 284 import ./shell.nix { pkgs = pkgs; } 285 ); 286 287 # Your custom packages and modifications, exported as overlays 288 overlays = import ./overlays; 289 # Reusable nixos modules you might want to export 290 # These are usually stuff you would upstream into nixpkgs 291 nixosModules = import ./modules/nixos; 292 # Reusable home-manager modules you might want to export 293 # These are usually stuff you would upstream into home-manager 294 homeManagerModules = import ./modules/home-manager; 295 296 # NixOS configuration entrypoint 297 nixosConfigurations = { 298 curve = nixpkgs.lib.nixosSystem rec { 299 specialArgs = { inherit inputs self; }; 300 system = "x86_64-linux"; 301 pkgs = nixpkgsFor.${system}; 302 modules = [ 303 ./hosts/curve 304 agenix.nixosModules.age 305 self.nixosModules.backup 306 self.nixosModules.wireguard 307 self.nixosModules.wallabag 308 nixos-hardware.nixosModules.lenovo-thinkpad-x270 309 home-manager.nixosModules.home-manager 310 { 311 nix.registry.nixpkgs.flake = nixpkgs; 312 nix.registry.unstable.flake = unstable; 313 home-manager.useGlobalPkgs = true; 314 home-manager.useUserPackages = true; 315 home-manager.extraSpecialArgs = { inherit inputs; }; 316 home-manager.users.anish = import ./home/gui; 317 } 318 ]; 319 }; 320 321 helix = nixpkgs.lib.nixosSystem rec { 322 specialArgs = { inherit inputs self; }; 323 system = "x86_64-linux"; 324 pkgs = litePkgsFor.${system}; 325 modules = [ 326 ./hosts/helix 327 agenix.nixosModules.age 328 self.nixosModules.backup 329 self.nixosModules.wireguard 330 # TODO: basant needs pyproject update for 25.11 - re-enable after fixing 331 # basant.nixosModule 332 # self.nixosModules.microbin 333 disko.nixosModules.disko 334 { 335 nixpkgs.flake.setNixPath = false; 336 nixpkgs.flake.setFlakeRegistry = false; 337 } 338 ]; 339 }; 340 341 lituus = nixpkgs.lib.nixosSystem rec { 342 specialArgs = { inherit inputs self; }; 343 system = "x86_64-linux"; 344 pkgs = nixpkgsFor.${system}; 345 modules = [ 346 ./hosts/lituus 347 agenix.nixosModules.age 348 self.nixosModules.backup 349 self.nixosModules.hesienbridge 350 nix-matrix-appservices.nixosModule 351 home-manager.nixosModules.home-manager 352 { 353 home-manager.useGlobalPkgs = true; 354 home-manager.useUserPackages = true; 355 home-manager.users.anish = import ./home/core; 356 } 357 ]; 358 }; 359 360 box = nixpkgs.lib.nixosSystem rec { 361 specialArgs = { inherit inputs self; }; 362 system = "x86_64-linux"; 363 pkgs = nixpkgsFor.${system}; 364 modules = [ 365 ./hosts/box 366 disko.nixosModules.disko 367 agenix.nixosModules.age 368 self.nixosModules.backup 369 self.nixosModules.wireguard 370 self.nixosModules.gonic 371 self.nixosModules.gpodder2go 372 self.nixosModules.wallabag 373 self.nixosModules.ulogger-server 374 # grasp.nixosModule # Disabled for initial install - private repo 375 home-manager.nixosModules.home-manager 376 { 377 nix.registry.nixpkgs.flake = nixpkgs; 378 home-manager.useGlobalPkgs = true; 379 home-manager.useUserPackages = true; 380 home-manager.extraSpecialArgs = { inherit inputs; }; 381 home-manager.users.anish = import ./home/dev; 382 } 383 ]; 384 }; 385 386 # new version of unstable has many changes I couldn't be bothered to deal with rn 387 #deck = unstable.lib.nixosSystem rec { 388 # specialArgs = { inherit inputs self; }; 389 # system = "x86_64-linux"; 390 # pkgs = deckPkgsFor.${system}; 391 # modules = [ 392 # ./hosts/deck 393 # jovian.nixosModules.default 394 # self.nixosModules.wireguard 395 # agenix.nixosModules.age 396 # self.nixosModules.backup 397 # home-manager.nixosModules.home-manager 398 # { 399 # nix.registry.nixpkgs.flake = unstable; 400 # home-manager.useGlobalPkgs = true; 401 # home-manager.useUserPackages = true; 402 # home-manager.users.anish = import ./home/gui; 403 # } 404 # ]; 405 #}; 406 }; 407 408 # Darwin configuration entrypoint 409 darwinConfigurations = { 410 "Anishs-MacBook-Pro" = darwin.lib.darwinSystem rec { 411 system = "aarch64-darwin"; 412 pkgs = darwinPkgsFor.${system}; 413 specialArgs = { inherit inputs self; }; 414 modules = [ 415 ./hosts/darwin 416 home-manager.darwinModules.home-manager 417 agenix.darwinModules.default 418 { 419 users.users.anishlakhwara.home = "/Users/anishlakhwara"; 420 home-manager = { 421 users.anishlakhwara = import ./home/darwin; 422 useGlobalPkgs = true; 423 useUserPackages = true; 424 extraSpecialArgs = { inherit inputs; }; 425 backupFileExtension = "hm-bak"; 426 }; 427 } 428 ]; 429 }; 430 }; 431 432 # Standalone home-manager configuration entrypoint 433 # Available through 'home-manager --flake .#your-username@your-hostname' 434 homeConfigurations = { 435 "anish@work" = home-manager.lib.homeManagerConfiguration { 436 pkgs = nixpkgsFor."x86_64-linux"; # Home-manager requires 'pkgs' instance 437 extraSpecialArgs = { inherit inputs; }; 438 modules = [ 439 ./home/core.nix 440 ./home/profiles/firefox 441 ]; 442 }; 443 }; 444 445 deploy.nodes = { 446 box = { 447 hostname = "mossnet.lan"; 448 autoRollback = false; 449 magicRollback = false; 450 remoteBuild = true; 451 profiles.system = { 452 user = "root"; 453 path = deploy-rs.lib.x86_64-linux.activate.nixos self.nixosConfigurations.box; 454 }; 455 }; 456 lituus = { 457 hostname = "67.219.99.225"; 458 autoRollback = false; 459 remoteBuild = true; 460 profiles.system = { 461 user = "root"; 462 path = deploy-rs.lib.x86_64-linux.activate.nixos self.nixosConfigurations.lituus; 463 }; 464 }; 465 helix = { 466 hostname = "git.sealight.xyz"; 467 autoRollback = false; 468 magicRollback = false; 469 profiles.system = { 470 user = "root"; 471 path = deploy-rs.lib.x86_64-linux.activate.nixos self.nixosConfigurations.helix; 472 }; 473 }; 474 }; 475 476 # checks = builtins.mapAttrs 477 # (system: deployLib: deployLib.deployChecks self.deploy) deploy-rs.lib; 478 }; 479}