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}