let
  krops = builtins.fetchGit {
    url = "https://cgit.krebsco.de/krops/";
  };
  lib = import "${krops}/lib";
  pkgs = import "${krops}/pkgs" {};
  importJson = (import <nixpkgs> {}).lib.importJSON;

  source = name: lib.evalSource [
    {
      config.file  = toString ./config/${name};
      modules.file = toString ./modules;
      nixos-config.symlink = "config/configuration.nix";
      secrets.pass = {
        dir  = toString ~/.password-store/nixin-password-store/krops;
        name = "${name}";
      };
      nixpkgs.git = {
        ref = (importJson ./nixpkgs.json).rev;
        url = https://github.com/NixOS/nixpkgs;
        shallow = true;
      };
    }
  ];

  arachnide = pkgs.krops.writeDeploy "deploy-server-arachnide" {
    source = source "arachnide";
    target = lib.mkTarget "douzeb@192.168.36.9" // {
      port = "144";
      sudo = true;
    };
    # only build the configuration and do not activate it for now (could also use writeTest instead of writeDeploy for doing that)
    operation = "build";
  };

  dromadaire = pkgs.krops.writeDeploy "deploy-server-dromadaire" {
    source = source "dromadaire";
    target = "root@192.168.36.6";
  };

in {
  arachnide = arachnide;
  dromadaire = dromadaire;
  all = pkgs.writeScript "deploy-all-servers"
    (lib.concatStringsSep "\n" [ arachnide dromadaire ]);
}