/ 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  }