cluster/nix: integrate with readtree

This unifies nixpkgs with the one defined in //default.nix and makes it
possible to use readTree to build the provisioners:

   nix-build -A cluster.nix.provision

   result/bin/provision

Change-Id: I68dd70b9c8869c7c0b59f5007981eac03667b862
diff --git a/cluster/clustercfg/clustercfg.py b/cluster/clustercfg/clustercfg.py
index c5f5c6c..0adef40 100644
--- a/cluster/clustercfg/clustercfg.py
+++ b/cluster/clustercfg/clustercfg.py
@@ -207,8 +207,8 @@
         ca_admitomatic.make_cert('admitomatic-webhook', ou='Admitomatic Webhook', hosts=['admitomatic.admitomatic.svc'])
 
     subprocess.check_call(["nix", "run",
-                           "-f", os.path.join(local_root, "cluster/nix/default.nix"),
-                           "provision",
+                           "-f", local_root,
+                           "cluster.nix.provision",
                            "-c", "provision-{}".format(fqdn.split('.')[0])])
 
 
diff --git a/cluster/nix/default.nix b/cluster/nix/default.nix
deleted file mode 100644
index 39d693b..0000000
--- a/cluster/nix/default.nix
+++ /dev/null
@@ -1,15 +0,0 @@
-let
-  # Tracking nixos-unstable as of 2021-01-31.
-  nixpkgsCommit = "44ad80ab1036c5cc83ada4bfa451dac9939f2a10";
-  nixpkgsSrc = fetchTarball {
-    url = "https://github.com/NixOS/nixpkgs/archive/${nixpkgsCommit}.tar.gz";
-    sha256 = "1b61nzvy0d46cspy07szkc0rggacxiqg9v1py27pkqpj7rvawfsk";
-  };
-  pkgs = import nixpkgsSrc;
-  cfg = {
-    overlays = [
-      (import ./provision.nix)
-    ];
-  };
-
-in pkgs cfg
diff --git a/cluster/nix/provision.nix b/cluster/nix/provision.nix
index 20ed0a0..7ab7e71 100644
--- a/cluster/nix/provision.nix
+++ b/cluster/nix/provision.nix
@@ -1,10 +1,12 @@
-self: super:
+{ hscloud, pkgs, ... }:
+
+with builtins;
 
 let 
   machines = (import ./defs-machines.nix);
   configurations = builtins.listToAttrs (map (machine: {
     name = machine.fqdn;
-    value = super.nixos ({ config, pkgs, ... }: {
+    value = pkgs.nixos ({ config, pkgs, ... }: {
       networking.hostName = machine.name;
       imports = [
         ./modules/base.nix
@@ -32,18 +34,16 @@
    fi
   '';
 
-  machineProvisioners = builtins.listToAttrs (map (machine: {
-      name = "provision-${machine.name}";
-      value = super.writeScriptBin "provision-${machine.name}" (scriptForMachine machine);
-    }) machines);
+  provisioners = (map (machine:
+    pkgs.writeScriptBin "provision-${machine.name}" (scriptForMachine machine)
+  ) machines);
+
+  provision = pkgs.writeScriptBin "provision" (
+    ''
+      echo "Available provisioniers:"
+    '' + (concatStringsSep "\n" (map (machine: "echo '  provision-${machine.name}'") machines)));
 in
-{
-  provision = ({
-    provision = super.writeScriptBin "provision"
-      (
-        ''
-          echo "Available provisioniers:"
-        '' + (builtins.concatStringsSep "\n" (map (machine: "echo '  provision-${machine.name}'") machines))
-      );
-  }) // machineProvisioners;
+pkgs.symlinkJoin {
+  name = "provision";
+  paths = [ provision ] ++ provisioners;
 }