Kieran's opinionated (and probably slightly dumb) nix config
1{
2 description = "Kieran's opinionated (and probably slightly dumb) nix config";
3
4 inputs = {
5 # Nixpkgs
6 nixpkgs.url = "github:nixos/nixpkgs/nixos-25.11";
7 nixpkgs-unstable.url = "github:nixos/nixpkgs/nixos-unstable";
8
9 # NixOS hardware configuration
10 hardware.url = "github:NixOS/nixos-hardware/master";
11
12 # Home manager
13 home-manager.url = "github:nix-community/home-manager/release-25.11";
14 home-manager.inputs.nixpkgs.follows = "nixpkgs";
15
16 # Nix-Darwin
17 nix-darwin.url = "github:nix-darwin/nix-darwin/nix-darwin-25.11";
18 nix-darwin.inputs.nixpkgs.follows = "nixpkgs";
19
20 disko.url = "github:nix-community/disko";
21 disko.inputs.nixpkgs.follows = "nixpkgs";
22
23 nixos-facter-modules.url = "github:numtide/nixos-facter-modules";
24
25 # agenix
26 agenix.url = "github:ryantm/agenix";
27
28 spicetify-nix = {
29 url = "github:Gerg-L/spicetify-nix";
30 inputs.nixpkgs.follows = "nixpkgs";
31 };
32
33 catppuccin = {
34 url = "github:catppuccin/nix?rev=f518f96a60aceda4cd487437b25eaa48d0f1b97d";
35 inputs.nixpkgs.follows = "nixpkgs";
36 };
37
38 catppuccin-vsc = {
39 url = "github:catppuccin/vscode";
40 };
41
42 nix-vscode-extensions.url = "github:nix-community/nix-vscode-extensions";
43
44 frc-nix = {
45 url = "github:frc4451/frc-nix";
46 inputs.nixpkgs.follows = "nixpkgs";
47 };
48
49 claude-desktop = {
50 url = "github:k3d3/claude-desktop-linux-flake";
51 inputs.nixpkgs.follows = "nixpkgs";
52 };
53
54 hyprland-contrib = {
55 url = "github:hyprwm/contrib";
56 inputs.nixpkgs.follows = "nixpkgs";
57 };
58
59 nixvim.url = "github:taciturnaxolotl/nixvim";
60
61 terminal-wakatime = {
62 url = "github:taciturnaxolotl/terminal-wakatime";
63 inputs.nixpkgs.follows = "nixpkgs";
64 };
65
66 ctfd-alerts = {
67 url = "github:taciturnaxolotl/ctfd-alerts";
68 inputs.nixpkgs.follows = "nixpkgs";
69 };
70
71 flare = {
72 url = "github:ByteAtATime/flare/feat/nix";
73 inputs.nixpkgs.follows = "nixpkgs";
74 };
75
76 herald = {
77 url = "git+https://tangled.org/dunkirk.sh/herald?ref=main";
78 inputs.nixpkgs.follows = "nixpkgs";
79 };
80
81 import-tree.url = "github:vic/import-tree";
82
83 nur = {
84 url = "github:nix-community/NUR";
85 inputs.nixpkgs.follows = "nixpkgs";
86 };
87
88 cedarlogic = {
89 url = "github:taciturnaxolotl/CedarLogic";
90 inputs.nixpkgs.follows = "nixpkgs";
91 };
92
93 soapdump = {
94 url = "github:taciturnaxolotl/soapdump";
95 inputs.nixpkgs.follows = "nixpkgs";
96 };
97
98 wakatime-ls = {
99 url = "github:mrnossiom/wakatime-ls";
100 inputs.nixpkgs.follows = "nixpkgs";
101 };
102
103 deploy-rs = {
104 url = "github:serokell/deploy-rs";
105 inputs.nixpkgs.follows = "nixpkgs";
106 };
107
108 tangled = {
109 url = "git+https://tangled.org/tangled.org/core";
110 inputs.nixpkgs.follows = "nixpkgs";
111 };
112
113 battleship-arena = {
114 url = "github:taciturnaxolotl/battleship-arena";
115 inputs.nixpkgs.follows = "nixpkgs";
116 };
117
118 zmx = {
119 url = "github:neurosnap/zmx";
120 };
121
122 tranquil-pds = {
123 url = "git+https://tangled.org/lewis.moe/bspds-sandbox";
124 inputs.nixpkgs.follows = "nixpkgs";
125 };
126 };
127
128 outputs =
129 {
130 self,
131 nixpkgs,
132 nixpkgs-unstable,
133 agenix,
134 home-manager,
135 nur,
136 nix-darwin,
137 deploy-rs,
138 tangled,
139 ...
140 }@inputs:
141 let
142 outputs = inputs.self.outputs;
143
144 unstable-overlays = {
145 nixpkgs.overlays = [
146 (final: prev: {
147 unstable = import nixpkgs-unstable {
148 system = final.stdenv.hostPlatform.system;
149 config.allowUnfree = true;
150 };
151
152 bambu-studio = prev.bambu-studio.overrideAttrs (oldAttrs: {
153 version = "01.00.01.50";
154 src = prev.fetchFromGitHub {
155 owner = "bambulab";
156 repo = "BambuStudio";
157 rev = "v01.00.01.50";
158 hash = "sha256-7mkrPl2CQSfc1lRjl1ilwxdYcK5iRU//QGKmdCicK30=";
159 };
160 });
161
162 zmx-binary = prev.callPackage ./packages/zmx.nix { };
163 bore-auth = prev.callPackage ./packages/bore-auth.nix { };
164 herald = inputs.herald.packages.${prev.system}.default;
165 })
166 ];
167 };
168 in
169 {
170 # NixOS configuration entrypoint
171 # Available through 'nixos-rebuild --flake .#hostname'
172 nixosConfigurations = {
173 moonlark = nixpkgs.lib.nixosSystem {
174 specialArgs = { inherit inputs outputs; };
175 modules = [
176 inputs.disko.nixosModules.disko
177 { disko.devices.disk.disk1.device = "/dev/vda"; }
178 agenix.nixosModules.default
179 unstable-overlays
180 ./machines/moonlark
181 nur.modules.nixos.default
182 ];
183 };
184
185 prattle = nixpkgs.lib.nixosSystem {
186 specialArgs = { inherit inputs outputs; };
187 modules = [
188 inputs.disko.nixosModules.disko
189 agenix.nixosModules.default
190 inputs.nixos-facter-modules.nixosModules.facter
191 { config.facter.reportPath = ./machines/prattle/facter.json; }
192 unstable-overlays
193 ./machines/prattle
194 nur.modules.nixos.default
195 ];
196 };
197
198 terebithia = nixpkgs.lib.nixosSystem {
199 specialArgs = { inherit inputs outputs; };
200 modules = [
201 inputs.disko.nixosModules.disko
202 agenix.nixosModules.default
203 inputs.nixos-facter-modules.nixosModules.facter
204 { config.facter.reportPath = ./machines/terebithia/facter.json; }
205 unstable-overlays
206 ./machines/terebithia
207 nur.modules.nixos.default
208 ];
209 };
210 };
211
212 # Standalone home-manager configurations
213 # Available through 'home-manager --flake .#hostname'
214 homeConfigurations = {
215 "tacyon" = home-manager.lib.homeManagerConfiguration {
216 pkgs = nixpkgs.legacyPackages.aarch64-linux;
217 extraSpecialArgs = {
218 inherit inputs outputs;
219 nixpkgs-unstable = nixpkgs-unstable;
220 };
221 modules = [
222 ./machines/tacyon
223 unstable-overlays
224 ];
225 };
226
227 "nest" = home-manager.lib.homeManagerConfiguration {
228 pkgs = nixpkgs.legacyPackages.x86_64-linux;
229 extraSpecialArgs = {
230 inherit inputs outputs;
231 nixpkgs-unstable = nixpkgs-unstable;
232 system = "x86_64-linux";
233 };
234 modules = [
235 ./machines/nest
236 unstable-overlays
237 ];
238 };
239
240 "ember" = home-manager.lib.homeManagerConfiguration {
241 pkgs = nixpkgs.legacyPackages.x86_64-linux;
242 extraSpecialArgs = {
243 inherit inputs outputs;
244 nixpkgs-unstable = nixpkgs-unstable;
245 };
246 modules = [
247 ./machines/ember
248 unstable-overlays
249 ];
250
251 };
252 "john" = home-manager.lib.homeManagerConfiguration {
253 pkgs = nixpkgs.legacyPackages.x86_64-linux;
254 extraSpecialArgs = {
255 inherit inputs outputs;
256 nixpkgs-unstable = nixpkgs-unstable;
257 system = "x86_64-linux";
258 };
259 modules = [
260 ./machines/john
261 unstable-overlays
262 ];
263 };
264 };
265
266 # Darwin configurations
267 # Available through 'darwin-rebuild switch --flake .#hostname'
268 darwinConfigurations = {
269 atalanta = nix-darwin.lib.darwinSystem {
270 system = "aarch64-darwin";
271 specialArgs = { inherit inputs outputs; };
272 modules = [
273 home-manager.darwinModules.home-manager
274 agenix.darwinModules.default
275 nur.modules.darwin.default
276 ./machines/atalanta
277 ];
278 };
279 };
280
281 formatter.x86_64-linux = nixpkgs.legacyPackages.x86_64-linux.nixfmt-tree;
282 formatter.aarch64-darwin = nixpkgs.legacyPackages.aarch64-darwin.nixfmt-tree;
283
284 # Patched deploy-rs for Nix 2.33 compatibility
285 packages.x86_64-linux.deploy-rs = deploy-rs.packages.x86_64-linux.deploy-rs.overrideAttrs (oldAttrs: {
286 patches = (oldAttrs.patches or []) ++ [ ./patches/deploy-rs-nix-2.33.patch ];
287 });
288 packages.aarch64-linux.deploy-rs = deploy-rs.packages.aarch64-linux.deploy-rs.overrideAttrs (oldAttrs: {
289 patches = (oldAttrs.patches or []) ++ [ ./patches/deploy-rs-nix-2.33.patch ];
290 });
291 packages.aarch64-darwin.deploy-rs = deploy-rs.packages.aarch64-darwin.deploy-rs.overrideAttrs (oldAttrs: {
292 patches = (oldAttrs.patches or []) ++ [ ./patches/deploy-rs-nix-2.33.patch ];
293 });
294
295 # Dev shells with patched deploy-rs
296 devShells.aarch64-darwin.default = nixpkgs.legacyPackages.aarch64-darwin.mkShell {
297 packages = [ outputs.packages.aarch64-darwin.deploy-rs ];
298 };
299 devShells.x86_64-linux.default = nixpkgs.legacyPackages.x86_64-linux.mkShell {
300 packages = [ outputs.packages.x86_64-linux.deploy-rs ];
301 };
302 devShells.aarch64-linux.default = nixpkgs.legacyPackages.aarch64-linux.mkShell {
303 packages = [ outputs.packages.aarch64-linux.deploy-rs ];
304 };
305
306 # Deploy-rs configurations
307 deploy.nodes = {
308 # NixOS servers
309 terebithia = {
310 hostname = "terebithia";
311 profiles.system = {
312 sshUser = "kierank";
313 user = "root";
314 path = deploy-rs.lib.aarch64-linux.activate.nixos self.nixosConfigurations.terebithia;
315 };
316 };
317 };
318
319 # Validation checks
320 checks = builtins.mapAttrs (system: deployLib: deployLib.deployChecks self.deploy) deploy-rs.lib;
321 };
322}