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 = [
        ./modules/base.nix
        ./modules/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}
   echo "/etc/systemd/system diff:"
   ssh $remote diff -ur /var/run/current-system/etc/systemd/system ${configuration.toplevel}/etc/systemd/system || true
   echo ""
   echo ""
   ssh $remote ${configuration.toplevel}/bin/switch-to-configuration dry-activate
   read -p "Do you want to switch to this configuration? " -n 1 -r
   echo
   if [[ $REPLY =~ ^[Yy]$ ]]; then
       ssh $remote ${configuration.toplevel}/bin/switch-to-configuration switch
   fi
  '';

  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;
}
