{ lib, ... }:

let
  # FIXME (roberth) reference issue
  inputDerivation =
    pkg:
    (pkg.overrideAttrs (o: {
      disallowedReferences = [ ];
    })).inputDerivation;

in
{
  # We rarely change the script in a way that benefits from type checking, so
  # we skip it to save time.
  skipTypeCheck = true;

  nodes.machine =
    { config, pkgs, ... }:
    {

      virtualisation.writableStore = true;
      system.extraDependencies = [
        (inputDerivation config.nix.package)
      ];

      nix.settings.substituters = lib.mkForce [ ];

      environment.systemPackages =
        let
          run-test-suite = pkgs.writeShellApplication {
            name = "run-test-suite";
            runtimeInputs = [
              pkgs.gnumake
              pkgs.jq
              pkgs.git
            ];
            text = ''
              set -x
              cat /proc/sys/fs/file-max
              ulimit -Hn
              ulimit -Sn
              cd ~
              cp -r ${
                pkgs.nix.overrideAttrs (o: {
                  name = "nix-configured-source";
                  outputs = [ "out" ];
                  separateDebugInfo = false;
                  disallowedReferences = [ ];
                  buildPhase = ":";
                  checkPhase = ":";
                  installPhase = ''
                    cp -r . $out
                  '';
                  installCheckPhase = ":";
                  fixupPhase = ":";
                  doInstallCheck = true;
                })
              } nix
              chmod -R +w nix
              cd nix

              # Tests we don't need
              echo >tests/functional/plugins/local.mk
              sed -i tests/functional/local.mk \
                -e 's!nix_tests += plugins\.sh!!' \
                -e 's!nix_tests += test-libstoreconsumer\.sh!!' \
                ;

              export isTestOnNixOS=1
              export version=${config.nix.package.version}
              export NIX_REMOTE_=daemon
              export NIX_REMOTE=daemon
              export NIX_STORE=${builtins.storeDir}
              make -j1 installcheck --keep-going
            '';
          };
        in
        [
          run-test-suite
          pkgs.git
        ];
    };
}
