r/o
1
{
2
description = "seraphim & kallax <3";
3
4
inputs = {
5
nixpkgs.url = "github:NixOS/nixpkgs/nixos-25.05";
6
nixpkgs-unstable.url = "github:NixOS/nixpkgs/nixos-unstable";
7
8
nix-darwin = {
9
url = "github:LnL7/nix-darwin/nix-darwin-25.05";
10
inputs.nixpkgs.follows = "nixpkgs";
11
};
12
13
nixos-raspberrypi.url = "github:nvmd/nixos-raspberrypi/main";
14
# nixos-raspberrypi uses github:nvmd/nixpkgs/modules-with-keys-25.05 as its
15
# nixpkgs. We probably shouldn't/can't override it --- the change (still
16
# in an open PR, NixOS/nixpkgs#398456) looks necessary. But the branch is
17
# reasonably up-to-date with 25.05 so it's OK for a while.
18
19
home-manager = {
20
url = "github:nix-community/home-manager/release-25.05";
21
inputs.nixpkgs.follows = "nixpkgs";
22
};
23
24
sops-nix = {
25
url = "github:Mic92/sops-nix";
26
inputs.nixpkgs.follows = "nixpkgs";
27
};
28
29
helix = {
30
url = "github:helix-editor/helix";
31
inputs.nixpkgs.follows = "nixpkgs";
32
inputs.rust-overlay.follows = "rust-overlay";
33
};
34
35
furpoll = {
36
url = "git+https://nossa.ee/~talya/furpoll";
37
inputs.nixpkgs.follows = "nixpkgs";
38
};
39
40
comenzar = {
41
url = "git+https://nossa.ee/~talya/comenzar";
42
inputs.nixpkgs.follows = "nixpkgs";
43
};
44
45
rust-overlay = {
46
url = "github:oxalica/rust-overlay";
47
inputs.nixpkgs.follows = "nixpkgs";
48
};
49
50
fenix = {
51
url = "github:nix-community/fenix";
52
inputs.nixpkgs.follows = "nixpkgs";
53
};
54
55
jj = {
56
url = "github:jj-vcs/jj";
57
inputs.nixpkgs.follows = "nixpkgs";
58
inputs.rust-overlay.follows = "rust-overlay";
59
};
60
61
nossa = {
62
url = "git+https://nossa.ee/~talya/nossa";
63
inputs.nixpkgs.follows = "nixpkgs";
64
inputs.fenix.follows = "fenix";
65
};
66
67
outfoxsync = {
68
url = "git+https://nossa.ee/~talya/outfoxsync";
69
inputs.nixpkgs.follows = "nixpkgs";
70
};
71
72
nix-rosetta-builder = {
73
url = "git+https://nossa.ee/~talya/nix-rosetta-builder?ref=t";
74
inputs.nixpkgs.follows = "nixpkgs";
75
};
76
77
a1d = {
78
url = "git+https://nossa.ee/~talya/a1d";
79
inputs.nixpkgs.follows = "nixpkgs";
80
inputs.fenix.follows = "fenix";
81
};
82
83
iqan = {
84
url = "git+https://nossa.ee/~talya/iqan";
85
inputs.nixpkgs.follows = "nixpkgs";
86
inputs.fenix.follows = "fenix";
87
};
88
};
89
90
outputs =
91
{
92
self,
93
nixpkgs,
94
nixpkgs-unstable,
95
nix-darwin,
96
nixos-raspberrypi,
97
home-manager,
98
sops-nix,
99
helix,
100
furpoll,
101
comenzar,
102
rust-overlay,
103
fenix,
104
jj,
105
nossa,
106
outfoxsync,
107
nix-rosetta-builder,
108
a1d,
109
iqan,
110
}:
111
let
112
mkHost =
113
hostName: system:
114
{
115
rpi ? null,
116
modules ? [ ],
117
overlays ? [ ],
118
}:
119
assert rpi != null -> system == "aarch64-linux";
120
let
121
configurationRevision =
122
if (self ? rev) then self.rev else throw "refuse to build: git tree is dirty";
123
isDarwin = builtins.elem system nixpkgs.lib.platforms.darwin;
124
plat =
125
if rpi == 5 then
126
{
127
nixSystem = nixos-raspberrypi.lib.nixosSystem;
128
modules = [
129
nixos-raspberrypi.nixosModules.raspberry-pi-5.base
130
home-manager.nixosModules.home-manager
131
sops-nix.nixosModules.sops
132
furpoll.nixosModules.${system}.default
133
outfoxsync.nixosModules.${system}.default
134
];
135
hm-modules = [
136
sops-nix.homeManagerModules.sops
137
];
138
}
139
else if rpi == 4 then
140
{
141
nixSystem = nixos-raspberrypi.lib.nixosSystem;
142
modules = [
143
nixos-raspberrypi.nixosModules.raspberry-pi-4.base
144
home-manager.nixosModules.home-manager
145
sops-nix.nixosModules.sops
146
furpoll.nixosModules.${system}.default
147
outfoxsync.nixosModules.${system}.default
148
];
149
hm-modules = [
150
sops-nix.homeManagerModules.sops
151
];
152
}
153
else if !isDarwin then
154
{
155
nixSystem = nixpkgs.lib.nixosSystem;
156
modules = [
157
home-manager.nixosModules.home-manager
158
sops-nix.nixosModules.sops
159
furpoll.nixosModules.${system}.default
160
outfoxsync.nixosModules.${system}.default
161
];
162
hm-modules = [
163
sops-nix.homeManagerModules.sops
164
];
165
}
166
else
167
{
168
nixSystem = nix-darwin.lib.darwinSystem;
169
modules = [
170
home-manager.darwinModules.home-manager
171
comenzar.darwinModules.${system}.default
172
outfoxsync.darwinModules.${system}.default
173
];
174
hm-modules = [
175
sops-nix.homeManagerModules.sops
176
];
177
};
178
globalConfig = (
179
{ pkgs, ... }:
180
{
181
system = { inherit configurationRevision; };
182
183
# Needed to build the flake.
184
environment.systemPackages = [ pkgs.git ];
185
186
nixpkgs.overlays = [
187
helix.overlays.helix
188
jj.overlays.default
189
] ++ overlays;
190
191
nix.settings = {
192
builders-use-substitutes = true;
193
194
experimental-features = [
195
"nix-command"
196
"flakes"
197
];
198
};
199
}
200
);
201
hostConfig = import ./hosts/${hostName};
202
homeManagerConfig = (
203
{ config, ... }:
204
{
205
home-manager = {
206
useGlobalPkgs = true;
207
useUserPackages = true;
208
users.${config.vyx.vyxUser} = import ./home.nix;
209
sharedModules = plat.hm-modules;
210
extraSpecialArgs = {
211
inherit isDarwin;
212
inherit (config.vyx)
213
vyxName
214
vyxMailName
215
vyxColour
216
isServer
217
;
218
inherit nixpkgs-unstable;
219
};
220
};
221
}
222
);
223
in
224
plat.nixSystem {
225
inherit system;
226
modules =
227
[
228
./modules
229
globalConfig
230
hostConfig
231
homeManagerConfig
232
]
233
++ plat.modules
234
++ modules;
235
236
specialArgs =
237
{
238
inherit nixpkgs isDarwin hostName;
239
vyxPorts = import ./vyxPorts.nix;
240
}
241
// nixpkgs.lib.optionalAttrs (rpi != null) {
242
inherit nixos-raspberrypi;
243
};
244
};
245
eachSystem = nixpkgs.lib.genAttrs [
246
"x86_64-linux"
247
"aarch64-linux"
248
"x86_64-darwin"
249
"aarch64-darwin"
250
];
251
in
252
{
253
formatter = eachSystem (system: nixpkgs.legacyPackages.${system}.nixfmt-rfc-style);
254
checks = eachSystem (system: {
255
vyxnix = import ./tests/vyxnix.nix { inherit system nixpkgs; };
256
});
257
nixosConfigurations = {
258
kala = mkHost "kala" "x86_64-linux" {
259
modules = [
260
nossa.nixosModules."x86_64-linux".nossa
261
];
262
};
263
koer = mkHost "koer" "x86_64-linux" { };
264
kass = mkHost "kass" "x86_64-linux" { };
265
cass = mkHost "cass" "aarch64-linux" {
266
rpi = 5;
267
modules = [
268
a1d.nixosModules."aarch64-linux".default
269
];
270
};
271
coer = mkHost "coer" "aarch64-linux" { rpi = 4; };
272
};
273
darwinConfigurations = {
274
seraphim = mkHost "seraphim" "aarch64-darwin" {
275
modules = [
276
nix-rosetta-builder.darwinModules.default
277
];
278
overlays = [
279
(
280
final: prev:
281
let
282
pkg = iqan.packages."aarch64-darwin".iqan;
283
in
284
{
285
iqan = pkg;
286
}
287
)
288
];
289
};
290
};
291
};
292
}
293