self: super:

let 
  machines = (import ./defs-machines.nix);
  configurations = builtins.listToAttrs (map (machine: {
    name = machine.fqdn;
    value = super.nixos ({ config, pkgs, ... }: {
      networking.hostName = machine.name;
      imports = [
        ./module-base.nix
        ./module-kubernetes.nix
      ];
    });
  }) machines);

  scriptForMachine = machine: let
    configuration = configurations."${machine.fqdn}";
  in ''
   set -e
   remote=root@${machine.fqdn}
   echo "Configuration for ${machine.fqdn} is ${configuration.toplevel}"
   nix copy --no-check-sigs -s --to ssh://$remote ${configuration.toplevel}
   ssh $remote ${configuration.toplevel}/bin/switch-to-configuration $1
  '';

  machineProvisioners = builtins.listToAttrs (map (machine: {
      name = "provision-${machine.name}";
      value = super.writeScriptBin "provision-${machine.name}" (scriptForMachine machine);
    }) machines);
in
{
  provision = ({
    provision = super.writeScriptBin "provision"
      (
        ''
          echo "Available provisioniers:"
        '' + (builtins.concatStringsSep "\n" (map (machine: "echo '  provision-${machine.name}'") machines))
      );
  }) // machineProvisioners;
}
