at deck 14 kB view raw
1{ 2 description = "Sealight NixOS Config"; 3 4 inputs = { 5 # Nixpkgs 6 nixpkgs.url = "github:nixos/nixpkgs/nixos-24.11"; 7 unstable.url = "github:nixos/nixpkgs/nixos-unstable"; 8 nixos-hardware.url = "github:NixOS/nixos-hardware/master"; 9 10 # ngipkgs.url = "github:Chickensoupwithrice/ngipkgs?ref=aynish/atomic-server-module"; 11 # ngipkgs-local.url = "path:/home/anish/usr/ngipkgs"; 12 13 # Home manager 14 home-manager.url = "github:nix-community/home-manager/release-25.05"; 15 home-manager.inputs.nixpkgs.follows = "nixpkgs"; 16 hardware.url = "github:nixos/nixos-hardware"; 17 18 # Tools 19 agenix.url = "github:ryantm/agenix"; 20 agenix.inputs.nixpkgs.follows = "nixpkgs"; 21 deploy-rs.url = "github:serokell/deploy-rs"; 22 deploy-rs.inputs.nixpkgs.follows = "nixpkgs"; 23 disko.url = "github:nix-community/disko"; 24 disko.inputs.nixpkgs.follows = "nixpkgs"; 25 26 # My Packages 27 poonam.url = "git+ssh://gitea@git.sealight.xyz/aynish/kitaab?ref=main"; 28 poonam.inputs.nixpkgs.follows = "nixpkgs"; 29 basant.url = "git+ssh://gitea@git.sealight.xyz/aynish/basant?ref=main"; 30 vimwikicli.url = "git+ssh://gitea@git.sealight.xyz/aynish/vimwiki-cli?ref=main"; 31 basant.inputs.nixpkgs.follows = "nixpkgs"; 32 basant.inputs.poonam.follows = "poonam"; 33 vimwikicli.inputs.nixpkgs.follows = "nixpkgs"; 34 grasp.url = "git+ssh://gitea@git.sealight.xyz/aynish/grasp.git?ref=main"; 35 grasp.inputs.nixpkgs.follows = "nixpkgs"; 36 37 # Matrix 38 nix-matrix-appservices.url = "gitlab:coffeetables/nix-matrix-appservices"; 39 40 # Jovian 41 jovian = { 42 url = "github:jovian-experiments/jovian-nixos"; 43 inputs.nixpkgs.follows = "unstable"; 44 }; 45 # Breezy XR for Jovian 46 xr-linux = { 47 url = "github:shymega/XRLinuxDriver?ref=shymega/nix-flake-support"; 48 inputs.nixpkgs.follows = "unstable"; 49 }; 50 breezy = { 51 url = "github:shymega/breezy-desktop?ref=shymega/add-nix-flake-support"; 52 inputs.nixpkgs.follows = "unstable"; 53 }; 54 # OSX 55 darwin = { 56 url = "github:LnL7/nix-darwin/master"; 57 inputs.nixpkgs.follows = "nixpkgs"; 58 }; 59 nix-homebrew = { 60 url = "github:zhaofengli-wip/nix-homebrew"; 61 }; 62 homebrew-bundle = { 63 url = "github:homebrew/homebrew-bundle"; 64 flake = false; 65 }; 66 homebrew-core = { 67 url = "github:homebrew/homebrew-core"; 68 flake = false; 69 }; 70 homebrew-cask = { 71 url = "github:homebrew/homebrew-cask"; 72 flake = false; 73 }; 74 75 # Sourcegraph 76 sourcegraph-src-cli-cask = { 77 url = "github:sourcegraph/homebrew-src-cli"; 78 flake = false; 79 }; 80 sg-nvim.url = "github:sourcegraph/sg.nvim"; 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 # TODO hundred rabbits software 91 # TODO needs secrets 92 # dhyan.url = "git+ssh://gitea@git.sealight.xyz/aynish/dhyan?ref=main"; 93 # dhyan.inputs.nixpkgs.follows = "nixpkgs"; 94 # TODO needs secrets 95 # muneem.url = "git+ssh://gitea@git.sealight.xyz/aynish/muneem?ref=main"; 96 # muneem.inputs.nixpkgs.follows = "nixpkgs"; 97 }; 98 99 outputs = 100 { self 101 , nixpkgs 102 , unstable 103 , nixos-hardware 104 , home-manager 105 , deploy-rs 106 , agenix 107 , disko 108 , basant 109 , grasp 110 , nix-matrix-appservices 111 , nur 112 , tidalcycles 113 , rust-overlay 114 , vimwikicli 115 , darwin 116 , nix-homebrew 117 , homebrew-bundle 118 , homebrew-core 119 , homebrew-cask 120 , sourcegraph-src-cli-cask 121 , sg-nvim 122 , jovian 123 , breezy 124 , xr-linux 125 , ... 126 }@inputs: 127 let 128 forAllSystems = nixpkgs.lib.genAttrs [ 129 "aarch64-linux" 130 "i686-linux" 131 "x86_64-linux" 132 "aarch64-darwin" 133 "x86_64-darwin" 134 ]; 135 unstableOverlay = final: prev: { 136 # We already have these in scope 137 unstable = unstable.legacyPackages.${prev.system}; 138 deploy = deploy-rs.packages.${prev.system}.deploy-rs; 139 sg-nvim = sg-nvim.packages.${prev.system}.default; 140 }; 141 vimwikiOverlay = final: prev: { 142 vimwiki-cli = vimwikicli.packages.${prev.system}.vimwiki-cli; 143 }; 144 145 nixpkgsFor = forAllSystems (system: import nixpkgs { 146 inherit system; 147 # This doesn't work... 148 # on darwin, I need to export ALLOW_NIXPKGS_UNFREE=1 149 # and pass --impure (have to manually copy the `nrd` command, it gets passed to the cd) 150 config = { 151 allowUnfree = true; 152 allowUnfreePredicate = _: true; 153 }; 154 # config.allowUnfree = true; 155 #config.allowUnfreePredicate = pkg: builtins.elem (nixpkgs.lib.getName pkg) [ 156 # "ripcord" 157 # "VCV-Rack" 158 # "SunVox" 159 # "renoise" 160 # "graphite-cli" 161 # "claude-code" 162 #]; 163 # config.permittedInsecurePackages = [ 164 # "python3.10-django-3.1.14" # Needed for archivebox deployments on curve 165 # # Check when archive box updates it's dependeny 166 # ]; 167 overlays = [ 168 rust-overlay.overlays.default 169 tidalcycles.overlays.default 170 agenix.overlays.default 171 nur.overlay 172 nix-matrix-appservices.overlay 173 unstableOverlay 174 # TODO Not available publically 175 # vimwikiOverlay 176 self.overlays.additions 177 self.overlays.modifications 178 ]; 179 }); 180 181 # for when space matters 182 litePkgsFor = forAllSystems (system: import nixpkgs { 183 inherit system; 184 # config.permittedInsecurePackages = [ 185 # "forgejo-1.19.4-0" # Needed for archivebox deployments on curve 186 # # Check when archive box updates it's dependeny 187 # ]; 188 overlays = [ 189 agenix.overlays.default 190 self.overlays.additions 191 self.overlays.modifications 192 tidalcycles.overlays.default # needed for nvim which comes pre-installed lol 193 ]; 194 }); 195 196 # for deck 197 deckPkgsFor = forAllSystems (system: import unstable { 198 inherit system; 199 config = { 200 allowUnfree = true; 201 }; 202 overlays = [ 203 breezy.overlays.default 204 xr-linux.overlays.default 205 nur.overlay 206 ]; 207 }); 208 209 darwinSystems = [ "aarch64-darwin" "x86_64-darwin" ]; 210 in 211 { 212 packages = forAllSystems (system: 213 let pkgs = nixpkgsFor.${system}; 214 in import ./pkgs { pkgs = pkgs; } 215 ); 216 217 # Devshell for bootstrapping 218 # Acessible through 'nix develop' or 'nix-shell' (legacy) 219 devShells = forAllSystems (system: 220 let pkgs = nixpkgsFor.${system}; 221 in import ./shell.nix { pkgs = pkgs; } 222 ); 223 224 # Your custom packages and modifications, exported as overlays 225 overlays = import ./overlays; 226 # Reusable nixos modules you might want to export 227 # These are usually stuff you would upstream into nixpkgs 228 nixosModules = import ./modules/nixos; 229 # Reusable home-manager modules you might want to export 230 # These are usually stuff you would upstream into home-manager 231 homeManagerModules = import ./modules/home-manager; 232 233 darwinConfigurations = { 234 "Anishs-MacBook-Pro" = darwin.lib.darwinSystem rec { 235 system = "aarch64-darwin"; 236 pkgs = nixpkgsFor.${system}; 237 specialArgs = { inherit inputs self; }; 238 modules = [ 239 ./hosts/darwin 240 home-manager.darwinModules.home-manager 241 agenix.darwinModules.default 242 # nix-homebrew.darwinModules.nix-homebrew 243 { 244 users.users.anishlakhwara.home = "/Users/anishlakhwara"; 245 home-manager = { 246 users.anishlakhwara = import ./home/darwin; 247 useGlobalPkgs = true; 248 useUserPackages = true; 249 }; 250 # nix-homebrew = { 251 # user = "anishlakhwara"; 252 # enable = true; 253 # # taps = { 254 # # "homebrew/homebrew-core" = homebrew-core; 255 # # "homebrew/homebrew-cask" = homebrew-cask; 256 # # "homebrew/homebrew-bundle" = homebrew-bundle; 257 # # "sourcegraph/homebrew-src-cli" = sourcegraph-src-cli-cask; 258 # # }; 259 # mutableTaps = true; 260 # autoMigrate = true; 261 # }; 262 } 263 ]; 264 }; 265 }; 266 267 # NixOS configuration entrypoint 268 nixosConfigurations = { 269 curve = nixpkgs.lib.nixosSystem rec { 270 specialArgs = { inherit inputs self; }; 271 system = "x86_64-linux"; 272 pkgs = nixpkgsFor.${system}; 273 modules = [ 274 ./hosts/curve 275 agenix.nixosModules.age 276 self.nixosModules.backup 277 self.nixosModules.wireguard 278 self.nixosModules.wallabag 279 nixos-hardware.nixosModules.lenovo-thinkpad-x270 280 home-manager.nixosModules.home-manager 281 { 282 nix.registry.nixpkgs.flake = nixpkgs; 283 nix.registry.unstable.flake = unstable; 284 home-manager.useGlobalPkgs = true; 285 home-manager.useUserPackages = true; 286 home-manager.users.anish = import ./home/gui; 287 } 288 ]; 289 }; 290 291 helix = nixpkgs.lib.nixosSystem rec { 292 specialArgs = { inherit inputs self; }; 293 system = "x86_64-linux"; 294 pkgs = litePkgsFor.${system}; 295 modules = [ 296 ./hosts/helix 297 agenix.nixosModules.age 298 self.nixosModules.backup 299 self.nixosModules.wireguard 300 basant.nixosModule 301 # self.nixosModules.microbin 302 disko.nixosModules.disko 303 { 304 nixpkgs.flake.setNixPath = false; 305 nixpkgs.flake.setFlakeRegistry = false; 306 } 307 ]; 308 }; 309 310 lituus = nixpkgs.lib.nixosSystem rec { 311 specialArgs = { inherit inputs self; }; 312 system = "x86_64-linux"; 313 pkgs = nixpkgsFor.${system}; 314 modules = [ 315 ./hosts/lituus 316 agenix.nixosModules.age 317 self.nixosModules.backup 318 self.nixosModules.hesienbridge 319 nix-matrix-appservices.nixosModule 320 home-manager.nixosModules.home-manager 321 { 322 home-manager.useGlobalPkgs = true; 323 home-manager.useUserPackages = true; 324 home-manager.users.anish = import ./home/core; 325 } 326 ]; 327 }; 328 329 box = nixpkgs.lib.nixosSystem rec { 330 specialArgs = { inherit inputs self; }; 331 system = "x86_64-linux"; 332 pkgs = nixpkgsFor.${system}; 333 modules = [ 334 ./hosts/box 335 agenix.nixosModules.age 336 self.nixosModules.backup 337 self.nixosModules.wireguard 338 self.nixosModules.gonic 339 self.nixosModules.gpodder2go 340 self.nixosModules.wallabag 341 self.nixosModules.ulogger-server 342 grasp.nixosModule 343 home-manager.nixosModules.home-manager 344 { 345 nix.registry.nixpkgs.flake = nixpkgs; 346 home-manager.useGlobalPkgs = true; 347 home-manager.useUserPackages = true; 348 home-manager.users.anish = import ./home/core; 349 } 350 ]; 351 }; 352 353 deck = unstable.lib.nixosSystem rec { 354 specialArgs = { inherit inputs self; }; 355 system = "x86_64-linux"; 356 pkgs = deckPkgsFor.${system}; 357 modules = [ 358 ./hosts/deck 359 jovian.nixosModules.default 360 self.nixosModules.wireguard 361 agenix.nixosModules.age 362 self.nixosModules.backup 363 home-manager.nixosModules.home-manager 364 { 365 nix.registry.nixpkgs.flake = unstable; 366 home-manager.useGlobalPkgs = true; 367 home-manager.useUserPackages = true; 368 home-manager.users.anish = import ./home/gui; 369 } 370 ]; 371 }; 372 }; 373 374 # Standalone home-manager configuration entrypoint 375 # Available through 'home-manager --flake .#your-username@your-hostname' 376 homeConfigurations = { 377 "anish@work" = home-manager.lib.homeManagerConfiguration { 378 pkgs = nixpkgsFor."x86_64-linux"; # Home-manager requires 'pkgs' instance 379 extraSpecialArgs = { inherit inputs; }; 380 modules = [ 381 ./home/core.nix 382 ./home/profiles/firefox 383 ]; 384 }; 385 }; 386 387 deploy.nodes = { 388 box = { 389 hostname = "mossnet.lan"; 390 autoRollback = false; 391 magicRollback = false; 392 remoteBuild = true; 393 profiles.system = { 394 user = "root"; 395 path = deploy-rs.lib.x86_64-linux.activate.nixos self.nixosConfigurations.box; 396 }; 397 }; 398 lituus = { 399 hostname = "sealight.xyz"; 400 # autoRollback = false; 401 profiles.system = { 402 user = "root"; 403 path = deploy-rs.lib.x86_64-linux.activate.nixos self.nixosConfigurations.lituus; 404 }; 405 }; 406 helix = { 407 hostname = "git.sealight.xyz"; 408 autoRollback = false; 409 magicRollback = false; 410 profiles.system = { 411 user = "root"; 412 path = deploy-rs.lib.x86_64-linux.activate.nixos self.nixosConfigurations.helix; 413 }; 414 }; 415 }; 416 417 checks = builtins.mapAttrs (system: deployLib: deployLib.deployChecks self.deploy) deploy-rs.lib; 418 }; 419}