{ lib, config, ... }: let vivariumBuilderDefault = { systems = [ "x86_64-linux" ]; protocol = "ssh-ng"; sshUser = "nixremote"; }; # MANU ssh-keygen -y -f /etc/ssh/ssh_host_ed25519_key # TODO Proper configuration option instead of pile of defs and hacks vivariumBuilders = [ { hostName = "morton.frogeye.fr"; publicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEetvIp4ZrP+ofXNDypnrLxdU034SBYg7fx9FxClDJA3"; supportedFeatures = [ "nixos-test" "benchmark" "big-parallel" "kvm" ]; maxJobs = 12; # 8 cores, 16 with hyperthreading, trying not to overload the thing } ]; # MANU pass vivarium/lemmy/remote-builds/cache | nix key convert-secret-to-public | cat publicKeys = [ "ludwig.frogeye.fr:jTlN0fCOLU49M3LQw5j/u++Gmwrsv3m9RGs0slSg6r0=" "abavorana.frogeye.fr:rcKZ9gwaIQLcst/vbhbF7meUQD5sveT2QQN4a+Zo1BM=" "morton.frogeye.fr:rSjbCZ4mgXkb+ENKI7sk/KIbftlQzCTQA7pWkdfS2r4=" ]; in { config = { programs.ssh.knownHosts = lib.trivial.pipe vivariumBuilders [ (builtins.map (builder: { name = builder.hostName; value.publicKey = builder.publicKey; })) builtins.listToAttrs ]; # Currently using port 22 only because: # - Morton has to use it for git # - Hopefully allowed on some firewalls # - Thought you couldn't set SSH config # You might be able to set SSH config with porgrams.ssh, although I only tried creating a /root/.ssh/config file # (which does not work, unless logged in as root. host keys from root are used regardless of the user, though) nix = { buildMachines = builtins.map ( vivariumBuilder: lib.attrsets.filterAttrs (k: v: k != "publicKey") (vivariumBuilderDefault // vivariumBuilder) ) vivariumBuilders; distributedBuilds = true; settings = { builders-use-substitutes = true; trusted-public-keys = publicKeys; substituters = builtins.map ( builder: "${builder.protocol}://${builder.sshUser}@${builder.hostName}" ) config.nix.buildMachines; }; }; }; }