1# Like distcc but not really
2{
3 lib,
4 inputs,
5 config,
6 hostname,
7 ...
8}:
9let
10 baselineFeatures = [
11 "big-parallel"
12 "ca-derivations"
13 ];
14
15 mkBuildMachines =
16 attr:
17 let
18 cleanAttr = builtins.removeAttrs attr [ hostname ];
19 in
20 lib.mapAttrsToList (
21 name: value:
22 {
23 hostName = name + ".mist-nessie.ts.net";
24
25 protocol = "ssh"; # nevermind we need hydra
26 sshUser = "builder";
27 sshKey = config.sops.secrets.builder_key.path;
28
29 speedFactor = 1;
30 maxJobs = 2;
31 supportedFeatures = baselineFeatures;
32
33 systems = [
34 "i686-linux"
35 "x86_64-linux"
36 ];
37 }
38 // value
39 ) cleanAttr;
40in
41{
42 sops.secrets.builder_key = {
43 sopsFile = inputs.self + "/creds/sops/global/id_builder";
44 format = "binary";
45 };
46
47 nix.distributedBuilds = true;
48 nix.settings.builders-use-substitutes = true;
49 nix.buildMachines = mkBuildMachines {
50 renko = {
51 supportedFeatures = baselineFeatures ++ [
52 "kvm"
53 "nixos-test"
54 ];
55 speedFactor = 5;
56 publicHostKey = "c3NoLWVkMjU1MTkgQUFBQUMzTnphQzFsWkRJMU5URTVBQUFBSUoreGNleXA4YnRVNnd0dThpRUFKMkZ4cm5rZlBsS1M3TWFJL2xLT0ZuUDEgcm9vdEByZW5rbwo=";
57 };
58 nijika = {
59 systems = [ "aarch64-linux" ];
60 publicHostKey = "c3NoLWVkMjU1MTkgQUFBQUMzTnphQzFsWkRJMU5URTVBQUFBSVBsWGZ5MnMxejRIQ05oem92Rk55UzBhcCtyMEF2ZzAzNDlKeFFjMW0xaFEK";
61 };
62 };
63
64 services.openssh.extraConfig = lib.mkAfter ''
65 Match User builder
66 Banner none
67 PasswordAuthentication no
68 KbdInteractiveAuthentication no
69 '';
70}