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 import-tree.url = "github:vic/import-tree";
77
78 nur = {
79 url = "github:nix-community/NUR";
80 inputs.nixpkgs.follows = "nixpkgs";
81 };
82
83 cedarlogic = {
84 url = "github:taciturnaxolotl/CedarLogic";
85 inputs.nixpkgs.follows = "nixpkgs";
86 };
87
88 soapdump = {
89 url = "github:taciturnaxolotl/soapdump";
90 inputs.nixpkgs.follows = "nixpkgs";
91 };
92
93 wakatime-ls = {
94 url = "github:mrnossiom/wakatime-ls";
95 inputs.nixpkgs.follows = "nixpkgs";
96 };
97
98 deploy-rs = {
99 url = "github:serokell/deploy-rs";
100 inputs.nixpkgs.follows = "nixpkgs";
101 };
102
103 tangled = {
104 url = "git+https://tangled.org/tangled.org/core";
105 inputs.nixpkgs.follows = "nixpkgs";
106 };
107
108 battleship-arena = {
109 url = "github:taciturnaxolotl/battleship-arena";
110 inputs.nixpkgs.follows = "nixpkgs";
111 };
112
113 zmx = {
114 url = "github:neurosnap/zmx";
115 };
116 };
117
118 outputs =
119 {
120 self,
121 nixpkgs,
122 nixpkgs-unstable,
123 agenix,
124 home-manager,
125 nur,
126 nix-darwin,
127 deploy-rs,
128 tangled,
129 ...
130 }@inputs:
131 let
132 outputs = inputs.self.outputs;
133 unstable-overlays = {
134 nixpkgs.overlays = [
135 (final: prev: {
136 unstable = import nixpkgs-unstable {
137 system = final.stdenv.hostPlatform.system;
138 config.allowUnfree = true;
139 };
140
141 bambu-studio = prev.bambu-studio.overrideAttrs (oldAttrs: {
142 version = "01.00.01.50";
143 src = prev.fetchFromGitHub {
144 owner = "bambulab";
145 repo = "BambuStudio";
146 rev = "v01.00.01.50";
147 hash = "sha256-7mkrPl2CQSfc1lRjl1ilwxdYcK5iRU//QGKmdCicK30=";
148 };
149 });
150
151 zmx-binary = prev.callPackage ./packages/zmx.nix { };
152 })
153 ];
154 };
155 in
156 {
157 # NixOS configuration entrypoint
158 # Available through 'nixos-rebuild --flake .#hostname'
159 nixosConfigurations = {
160 moonlark = nixpkgs.lib.nixosSystem {
161 specialArgs = { inherit inputs outputs; };
162 modules = [
163 inputs.disko.nixosModules.disko
164 { disko.devices.disk.disk1.device = "/dev/vda"; }
165 agenix.nixosModules.default
166 unstable-overlays
167 ./machines/moonlark
168 nur.modules.nixos.default
169 ];
170 };
171
172 prattle = nixpkgs.lib.nixosSystem {
173 specialArgs = { inherit inputs outputs; };
174 modules = [
175 inputs.disko.nixosModules.disko
176 agenix.nixosModules.default
177 inputs.nixos-facter-modules.nixosModules.facter
178 { config.facter.reportPath = ./machines/prattle/facter.json; }
179 unstable-overlays
180 ./machines/prattle
181 nur.modules.nixos.default
182 ];
183 };
184
185 terebithia = 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/terebithia/facter.json; }
192 unstable-overlays
193 ./machines/terebithia
194 nur.modules.nixos.default
195 ];
196 };
197 };
198
199 # Standalone home-manager configurations
200 # Available through 'home-manager --flake .#hostname'
201 homeConfigurations = {
202 "tacyon" = home-manager.lib.homeManagerConfiguration {
203 pkgs = nixpkgs.legacyPackages.aarch64-linux;
204 extraSpecialArgs = {
205 inherit inputs outputs;
206 nixpkgs-unstable = nixpkgs-unstable;
207 };
208 modules = [
209 ./machines/tacyon
210 unstable-overlays
211 ];
212 };
213
214 "nest" = home-manager.lib.homeManagerConfiguration {
215 pkgs = nixpkgs.legacyPackages.x86_64-linux;
216 extraSpecialArgs = {
217 inherit inputs outputs;
218 nixpkgs-unstable = nixpkgs-unstable;
219 system = "x86_64-linux";
220 };
221 modules = [
222 ./machines/nest
223 unstable-overlays
224 ];
225 };
226
227 "ember" = home-manager.lib.homeManagerConfiguration {
228 pkgs = nixpkgs.legacyPackages.x86_64-linux;
229 extraSpecialArgs = {
230 inherit inputs outputs;
231 nixpkgs-unstable = nixpkgs-unstable;
232 };
233 modules = [
234 ./machines/ember
235 unstable-overlays
236 ];
237
238 };
239 "john" = home-manager.lib.homeManagerConfiguration {
240 pkgs = nixpkgs.legacyPackages.x86_64-linux;
241 extraSpecialArgs = {
242 inherit inputs outputs;
243 nixpkgs-unstable = nixpkgs-unstable;
244 system = "x86_64-linux";
245 };
246 modules = [
247 ./machines/john
248 unstable-overlays
249 ];
250 };
251 };
252
253 # Darwin configurations
254 # Available through 'darwin-rebuild switch --flake .#hostname'
255 darwinConfigurations = {
256 atalanta = nix-darwin.lib.darwinSystem {
257 system = "aarch64-darwin";
258 specialArgs = { inherit inputs outputs; };
259 modules = [
260 home-manager.darwinModules.home-manager
261 agenix.darwinModules.default
262 unstable-overlays
263 nur.modules.darwin.default
264 ./machines/atalanta
265 ];
266 };
267 };
268
269 formatter.x86_64-linux = nixpkgs.legacyPackages.x86_64-linux.nixfmt-tree;
270 formatter.aarch64-darwin = nixpkgs.legacyPackages.aarch64-darwin.nixfmt-tree;
271
272 # Deploy-rs configurations
273 deploy.nodes = {
274 # NixOS servers
275 terebithia = {
276 hostname = "terebithia";
277 profiles.system = {
278 sshUser = "kierank";
279 user = "root";
280 path = deploy-rs.lib.aarch64-linux.activate.nixos self.nixosConfigurations.terebithia;
281 };
282 };
283 };
284
285 # Validation checks
286 checks = builtins.mapAttrs (system: deployLib: deployLib.deployChecks self.deploy) deploy-rs.lib;
287 };
288}