{ pkgs, lib, config, ... }:
let
  vivariumBuilderDefault = {
    systems = [ "x86_64-linux" "aarch64-linux" ];
    protocol = "ssh-ng";
    sshUser = "nixremote";
    # sshKey doesn't work
  };
  # MANU ssh-keygen -y -f /etc/ssh/ssh_host_ed25519_key | base64 -w0
  vivariumBuilders = [
    {
      hostName = "abavorana.frogeye.fr";
      publicHostKey = "c3NoLWVkMjU1MTkgQUFBQUMzTnphQzFsWkRJMU5URTVBQUFBSU5iNzcrS01tRHI0MVhZdmZITXQvK3NHMkJCSEIzYUl4M045WDNVejhFaUogZ2VvZmZyZXlAY3VyYWNhbwo=";
      supportedFeatures = [ "nixos-test" "benchmark" "big-parallel" "kvm" ];
      maxJobs = 8;
    }
    {
      hostName = "ludwig.clowncar.frogeye.fr";
      publicHostKey = "c3NoLWVkMjU1MTkgQUFBQUMzTnphQzFsWkRJMU5URTVBQUFBSU41SXZhMzNXeGplN095cHVEUHBSakFNMTlvRUtEVDRiYlpUTm82V1FLZTAgZ2VvZmZyZXlAY3VyYWNhbwo=";
      maxJobs = 4;
    }
  ];
  # MANU pass vivarium/lemmy/remote-builds/cache | nix key convert-secret-to-public | cat
  publicKeys = [
    "abavorana.frogeye.fr:rcKZ9gwaIQLcst/vbhbF7meUQD5sveT2QQN4a+Zo1BM="
    "ludwig.clowncar.frogeye.fr:jTlN0fCOLU49M3LQw5j/u++Gmwrsv3m9RGs0slSg6r0="
  ];
in
{
  config = {
    system.activationScripts.remote = {
      supportsDryActivation = true;
      text = ''
        mkdir -p /root/.ssh
        cat ${pkgs.writeText "root-ssh-config" (lib.strings.concatLines (builtins.map (builder: ''
        Host ${builder.hostName}
          ControlMaster auto
          ControlPath ~/.ssh/master-%r@%n:%p
          ControlPersist 60s
        '') vivariumBuilders)) } > /root/.ssh/config
      '';
    };
    nix = {
      buildMachines = builtins.map (vivariumBuilder: vivariumBuilderDefault // vivariumBuilder) vivariumBuilders;
      distributedBuilds = false;
      settings = {
        builders-use-substitutes = true;
        trusted-public-keys = publicKeys;
        trusted-substituters = builtins.map (builder: "${builder.protocol}://${builder.sshUser}@${builder.hostName}") config.nix.buildMachines;
      };
    };
  };
}