{ lib, config, pkgs, ... }:
{
  #networking.firewall.allowedTCPPorts = [ 8010 9989 ];
  krebs.buildbot.master = {
    slaves = {
      testslave = "lasspass";
    };
    change_source.stockholm = ''
      stockholm_repo = 'http://cgit.mors/stockholm'
      cs.append(changes.GitPoller(
              stockholm_repo,
              workdir='stockholm-poller', branch='master',
              project='stockholm',
              pollinterval=120))
    '';
    scheduler = {
      force-scheduler = ''
        sched.append(schedulers.ForceScheduler(
                                    name="force",
                                    builderNames=["fast-tests"]))
      '';
      fast-tests-scheduler = ''
        # test the master real quick
        sched.append(schedulers.SingleBranchScheduler(
                                    change_filter=util.ChangeFilter(branch="master"),
                                    name="fast-master-test",
                                    builderNames=["fast-tests"]))
      '';
    };
    builder_pre = ''
      # prepare grab_repo step for stockholm
      grab_repo = steps.Git(repourl=stockholm_repo, mode='incremental')

      env = {"LOGNAME": "lass", "NIX_REMOTE": "daemon"}

      # prepare nix-shell
      # the dependencies which are used by the test script
      deps = [ "gnumake", "jq","nix","rsync" ]
      # TODO: --pure , prepare ENV in nix-shell command:
      #                   SSL_CERT_FILE,LOGNAME,NIX_REMOTE
      nixshell = ["nix-shell", "-I", "stockholm=.", "-p" ] + deps + [ "--run" ]

      # prepare addShell function
      def addShell(factory,**kwargs):
        factory.addStep(steps.ShellCommand(**kwargs))
    '';
    builder = {
      fast-tests = ''
        f = util.BuildFactory()
        f.addStep(grab_repo)
        addShell(f,name="mors-eval",env=env,
                  command=nixshell + ["make -s eval get=krebs.deploy filter=json system=mors"])

        bu.append(util.BuilderConfig(name="fast-tests",
              slavenames=slavenames,
              factory=f))
      '';
    };
    enable = true;
    web.enable = true;
    irc = {
      enable = true;
      nick = "buildbot-lass";
      server = "cd.retiolum";
      channels = [ "retiolum" ];
      allowForce = true;
    };
  };

  krebs.buildbot.slave = {
    enable = true;
    masterhost = "localhost";
    username = "testslave";
    password = "lasspass";
    packages = with pkgs;[ git nix ];
    extraEnviron = { NIX_PATH="nixpkgs=${toString <nixpkgs>}"; };
  };
}