{ config, lib, ... }: let data = (import ../../data); machines = lib.filterAttrs (k: _: k != config.networking.hostName) data.machines; mkKnownHost = name: { publicKey, domains, aliases ? [ ], ... }: { inherit publicKey; extraHostNames = (map (domain: "${name}.${domain}") domains) ++ aliases; }; mkBuilder = { system, systems ? [ system ], sshUser ? "nixremote", protocol ? "ssh-ng", ... }@builder: builder // { inherit sshUser systems protocol ; }; mkBuildMachine = hostName: machine: (mkBuilder machine.builder) // { inherit hostName; }; in { programs.ssh.knownHosts = lib.mapAttrs mkKnownHost machines; nix = { distributedBuilds = true; buildMachines = lib.mapAttrsToList mkBuildMachine (lib.filterAttrs (n: v: v ? builder) machines); settings = { connect-timeout = 1; }; }; }