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 zmx = {
114 url = "github:neurosnap/zmx";
115 };
116
117 };
118
119 outputs =
120 {
121 self,
122 nixpkgs,
123 nixpkgs-unstable,
124 agenix,
125 home-manager,
126 nur,
127 nix-darwin,
128 deploy-rs,
129 tangled,
130 ...
131 }@inputs:
132 let
133 outputs = inputs.self.outputs;
134
135 unstable-overlays = {
136 nixpkgs.overlays = [
137 nur.overlays.default
138 (final: prev: {
139 unstable = import nixpkgs-unstable {
140 system = final.stdenv.hostPlatform.system;
141 config.allowUnfree = true;
142 };
143
144 bambu-studio = prev.bambu-studio.overrideAttrs (oldAttrs: {
145 version = "01.00.01.50";
146 src = prev.fetchFromGitHub {
147 owner = "bambulab";
148 repo = "BambuStudio";
149 rev = "v01.00.01.50";
150 hash = "sha256-7mkrPl2CQSfc1lRjl1ilwxdYcK5iRU//QGKmdCicK30=";
151 };
152 });
153
154 zmx-binary = prev.callPackage ./packages/zmx.nix { };
155 bore-auth = prev.callPackage ./packages/bore-auth.nix { };
156 herald = inputs.herald.packages.${prev.stdenv.hostPlatform.system}.default;
157 })
158 ];
159 };
160 in
161 {
162 # NixOS configuration entrypoint
163 # Available through 'nixos-rebuild --flake .#hostname'
164 nixosConfigurations = {
165 moonlark = nixpkgs.lib.nixosSystem {
166 specialArgs = { inherit inputs outputs; };
167 modules = [
168 inputs.disko.nixosModules.disko
169 { disko.devices.disk.disk1.device = "/dev/vda"; }
170 agenix.nixosModules.default
171 unstable-overlays
172 ./machines/moonlark
173 ];
174 };
175
176 prattle = nixpkgs.lib.nixosSystem {
177 specialArgs = { inherit inputs outputs; };
178 modules = [
179 inputs.disko.nixosModules.disko
180 agenix.nixosModules.default
181 inputs.nixos-facter-modules.nixosModules.facter
182 { config.facter.reportPath = ./machines/prattle/facter.json; }
183 unstable-overlays
184 ./machines/prattle
185 ];
186 };
187
188 terebithia = nixpkgs.lib.nixosSystem {
189 specialArgs = { inherit inputs outputs; };
190 modules = [
191 inputs.disko.nixosModules.disko
192 agenix.nixosModules.default
193 inputs.nixos-facter-modules.nixosModules.facter
194 { config.facter.reportPath = ./machines/terebithia/facter.json; }
195 unstable-overlays
196 ./machines/terebithia
197 ];
198 };
199 };
200
201 # Standalone home-manager configurations
202 # Available through 'home-manager --flake .#hostname'
203 homeConfigurations = {
204 "tacyon" = home-manager.lib.homeManagerConfiguration {
205 pkgs = nixpkgs.legacyPackages.aarch64-linux;
206 extraSpecialArgs = {
207 inherit inputs outputs;
208 nixpkgs-unstable = nixpkgs-unstable;
209 };
210 modules = [
211 ./machines/tacyon
212 unstable-overlays
213 ];
214 };
215
216 "nest" = home-manager.lib.homeManagerConfiguration {
217 pkgs = nixpkgs.legacyPackages.x86_64-linux;
218 extraSpecialArgs = {
219 inherit inputs outputs;
220 nixpkgs-unstable = nixpkgs-unstable;
221 system = "x86_64-linux";
222 };
223 modules = [
224 ./machines/nest
225 unstable-overlays
226 ];
227 };
228
229 "ember" = home-manager.lib.homeManagerConfiguration {
230 pkgs = nixpkgs.legacyPackages.x86_64-linux;
231 extraSpecialArgs = {
232 inherit inputs outputs;
233 nixpkgs-unstable = nixpkgs-unstable;
234 };
235 modules = [
236 ./machines/ember
237 unstable-overlays
238 ];
239
240 };
241 };
242
243 # Darwin configurations
244 # Available through 'darwin-rebuild switch --flake .#hostname'
245 darwinConfigurations = {
246 atalanta = nix-darwin.lib.darwinSystem {
247 system = "aarch64-darwin";
248 specialArgs = { inherit inputs outputs; };
249 modules = [
250 home-manager.darwinModules.home-manager
251 agenix.darwinModules.default
252 ./machines/atalanta
253 ];
254 };
255 };
256
257 # Service manifest for infra dashboard
258 # Evaluate with: nix eval --json .#services-manifest
259 services-manifest = import ./lib/services-manifest.nix {
260 configSets = [
261 self.nixosConfigurations
262 self.darwinConfigurations
263 self.homeConfigurations
264 ];
265 extraMachines = {
266 everseen = { type = "client"; tailscaleHost = "everseen"; };
267 };
268 lib = nixpkgs.lib;
269 };
270
271 # Documentation site (mdBook + nixdoc + atelier options)
272 # Build with: nix build .#docs
273 # Serve with: nix run .#docs.serve
274 packages =
275 let
276 mkDocs = system:
277 let
278 pkgs = nixpkgs.legacyPackages.${system};
279 in
280 pkgs.callPackage ./packages/docs.nix {
281 servicesManifest = self.services-manifest;
282 inherit self;
283 };
284 in
285 {
286 x86_64-linux.docs = mkDocs "x86_64-linux";
287 aarch64-linux.docs = mkDocs "aarch64-linux";
288 aarch64-darwin.docs = mkDocs "aarch64-darwin";
289 };
290
291 formatter.x86_64-linux = nixpkgs.legacyPackages.x86_64-linux.nixfmt-tree;
292 formatter.aarch64-darwin = nixpkgs.legacyPackages.aarch64-darwin.nixfmt-tree;
293
294 devShells.aarch64-darwin.default = nixpkgs.legacyPackages.aarch64-darwin.mkShell {
295 packages = [ deploy-rs.packages.aarch64-darwin.deploy-rs ];
296 };
297 devShells.x86_64-linux.default = nixpkgs.legacyPackages.x86_64-linux.mkShell {
298 packages = [ deploy-rs.packages.x86_64-linux.deploy-rs ];
299 };
300 devShells.aarch64-linux.default = nixpkgs.legacyPackages.aarch64-linux.mkShell {
301 packages = [ deploy-rs.packages.aarch64-linux.deploy-rs ];
302 };
303
304 # Deploy-rs configurations
305 deploy.nodes = {
306 # NixOS servers
307 terebithia = {
308 hostname = "terebithia";
309 profiles.system = {
310 sshUser = "kierank";
311 user = "root";
312 path = deploy-rs.lib.aarch64-linux.activate.nixos self.nixosConfigurations.terebithia;
313 };
314 };
315 };
316
317 # Validation checks
318 checks = builtins.mapAttrs (system: deployLib: deployLib.deployChecks self.deploy) deploy-rs.lib;
319 };
320}