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.05";
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.05";
14 home-manager.inputs.nixpkgs.follows = "nixpkgs";
15
16 # Nix-Darwin
17 nix-darwin.url = "github:nix-darwin/nix-darwin/nix-darwin-25.05";
18 nix-darwin.inputs.nixpkgs.follows = "nixpkgs";
19
20 disko.url = "github:nix-community/disko";
21 disko.inputs.nixpkgs.follows = "nixpkgs";
22
23 # agenix
24 agenix.url = "github:ryantm/agenix";
25
26 spicetify-nix = {
27 url = "github:Gerg-L/spicetify-nix";
28 inputs.nixpkgs.follows = "nixpkgs";
29 };
30
31 catppuccin = {
32 url = "github:catppuccin/nix?rev=f518f96a60aceda4cd487437b25eaa48d0f1b97d";
33 inputs.nixpkgs.follows = "nixpkgs";
34 };
35
36 catppuccin-vsc = {
37 url = "github:catppuccin/vscode";
38 };
39
40 nix-vscode-extensions.url = "github:nix-community/nix-vscode-extensions";
41
42 frc-nix = {
43 url = "github:frc4451/frc-nix";
44 inputs.nixpkgs.follows = "nixpkgs";
45 };
46
47 claude-desktop = {
48 url = "github:k3d3/claude-desktop-linux-flake";
49 inputs.nixpkgs.follows = "nixpkgs";
50 };
51
52 hyprland-contrib = {
53 url = "github:hyprwm/contrib";
54 inputs.nixpkgs.follows = "nixpkgs";
55 };
56
57 nixvim.url = "github:taciturnaxolotl/nixvim";
58
59 terminal-wakatime = {
60 url = "github:taciturnaxolotl/terminal-wakatime";
61 inputs.nixpkgs.follows = "nixpkgs";
62 };
63
64 ctfd-alerts = {
65 url = "github:taciturnaxolotl/ctfd-alerts";
66 inputs.nixpkgs.follows = "nixpkgs";
67 };
68
69 flare = {
70 url = "github:ByteAtATime/flare/feat/nix";
71 inputs.nixpkgs.follows = "nixpkgs";
72 };
73
74 import-tree.url = "github:vic/import-tree";
75
76 nur = {
77 url = "github:nix-community/NUR";
78 inputs.nixpkgs.follows = "nixpkgs";
79 };
80
81 cedarlogic = {
82 url = "github:taciturnaxolotl/CedarLogic";
83 inputs.nixpkgs.follows = "nixpkgs";
84 };
85
86 soapdump = {
87 url = "github:taciturnaxolotl/soapdump";
88 inputs.nixpkgs.follows = "nixpkgs";
89 };
90
91 wakatime-ls = {
92 url = "github:mrnossiom/wakatime-ls";
93 inputs.nixpkgs.follows = "nixpkgs";
94 };
95 };
96
97 outputs =
98 {
99 self,
100 nixpkgs,
101 nixpkgs-unstable,
102 agenix,
103 home-manager,
104 nur,
105 nix-darwin,
106 ...
107 }@inputs:
108 let
109 outputs = inputs.self.outputs;
110 unstable-overlays = {
111 nixpkgs.overlays = [
112 (final: prev: {
113 unstable = import nixpkgs-unstable {
114 system = final.system;
115 config.allowUnfree = true;
116 };
117
118 bambu-studio = prev.bambu-studio.overrideAttrs (oldAttrs: {
119 version = "01.00.01.50";
120 src = prev.fetchFromGitHub {
121 owner = "bambulab";
122 repo = "BambuStudio";
123 rev = "v01.00.01.50";
124 hash = "sha256-7mkrPl2CQSfc1lRjl1ilwxdYcK5iRU//QGKmdCicK30=";
125 };
126 });
127 })
128 ];
129 };
130 in
131 {
132 # NixOS configuration entrypoint
133 # Available through 'nixos-rebuild --flake .#hostname'
134 nixosConfigurations = {
135 moonlark = nixpkgs.lib.nixosSystem {
136 specialArgs = { inherit inputs outputs; };
137 modules = [
138 inputs.disko.nixosModules.disko
139 { disko.devices.disk.disk1.device = "/dev/vda"; }
140 agenix.nixosModules.default
141 unstable-overlays
142 ./machines/moonlark
143 nur.modules.nixos.default
144 ];
145 };
146
147 prattle = nixpkgs.lib.nixosSystem {
148 specialArgs = { inherit inputs outputs; };
149 modules = [
150 inputs.disko.nixosModules.disko
151 agenix.nixosModules.default
152 unstable-overlays
153 ./machines/prattle
154 nur.modules.nixos.default
155 ];
156 };
157
158 terebithia = nixpkgs.lib.nixosSystem {
159 specialArgs = { inherit inputs outputs; };
160 modules = [
161 inputs.disko.nixosModules.disko
162 agenix.nixosModules.default
163 unstable-overlays
164 ./machines/terebithia
165 nur.modules.nixos.default
166 ];
167 };
168 };
169
170 # Standalone home-manager configurations
171 # Available through 'home-manager --flake .#hostname'
172 homeConfigurations = {
173 "tacyon" = home-manager.lib.homeManagerConfiguration {
174 pkgs = nixpkgs.legacyPackages.aarch64-linux;
175 extraSpecialArgs = {
176 inherit inputs outputs;
177 nixpkgs-unstable = nixpkgs-unstable;
178 };
179 modules = [
180 ./machines/tacyon
181 unstable-overlays
182 ];
183 };
184
185 "nest" = home-manager.lib.homeManagerConfiguration {
186 pkgs = nixpkgs.legacyPackages.x86_64-linux;
187 extraSpecialArgs = {
188 inherit inputs outputs;
189 nixpkgs-unstable = nixpkgs-unstable;
190 system = "x86_64-linux";
191 };
192 modules = [
193 ./machines/nest
194 unstable-overlays
195 ];
196 };
197
198 "ember" = home-manager.lib.homeManagerConfiguration {
199 pkgs = nixpkgs.legacyPackages.x86_64-linux;
200 extraSpecialArgs = {
201 inherit inputs outputs;
202 nixpkgs-unstable = nixpkgs-unstable;
203 };
204 modules = [
205 ./machines/ember
206 unstable-overlays
207 ];
208
209 };
210 "john" = home-manager.lib.homeManagerConfiguration {
211 pkgs = nixpkgs.legacyPackages.x86_64-linux;
212 extraSpecialArgs = {
213 inherit inputs outputs;
214 nixpkgs-unstable = nixpkgs-unstable;
215 system = "x86_64-linux";
216 };
217 modules = [
218 ./machines/john
219 unstable-overlays
220 ];
221 };
222 };
223
224 # Darwin configurations
225 # Available through 'darwin-rebuild switch --flake .#hostname'
226 darwinConfigurations = {
227 atalanta = nix-darwin.lib.darwinSystem {
228 system = "aarch64-darwin";
229 specialArgs = { inherit inputs outputs; };
230 modules = [
231 home-manager.darwinModules.home-manager
232 agenix.darwinModules.default
233 unstable-overlays
234 ./machines/atalanta
235 ];
236 };
237 };
238
239 formatter.x86_64-linux = nixpkgs.legacyPackages.x86_64-linux.nixfmt-tree;
240 formatter.aarch64-darwin = nixpkgs.legacyPackages.aarch64-darwin.nixfmt-tree;
241 };
242}