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