nix config
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}