nixfiles/services/distributed-builds.nix

55 lines
1.5 KiB
Nix

{ config, lib, pkgs, ... }:
let
inherit (builtins) elem;
inherit (lib) mkIf mkEnableOption mkOption types optional;
cfg = config.qenya.services.distributed-builds;
in
{
options.qenya.services.distributed-builds = {
enable = mkEnableOption "distributed builds";
keyFile = mkOption {
type = types.path;
description = ''
Path to the OpenSSH private key to be used for distributed builds.
'';
};
builders = mkOption {
type = types.listOf types.str;
default = [ ];
description = ''
List of builders to attempt to use for distributed builds.
'';
example = [ "kalessin" ];
};
};
config = mkIf cfg.enable {
assertions = [{
assertion = cfg ? keyFile;
message = "must specify a private key to be used for distributed builds";
}];
nix.distributedBuilds = true;
nix.settings.builders-use-substitutes = true;
nix.buildMachines =
(optional (elem "kalessin" cfg.builders) {
hostName = config.birdsong.hosts."kalessin".ipv4;
sshUser = "remotebuild";
sshKey = cfg.keyFile;
systems = [ "aarch64-linux" ];
maxJobs = 2;
supportedFeatures = [ "big-parallel" ];
})
++ (optional (elem "kilgharrah" cfg.builders) {
hostName = config.birdsong.hosts."kilgharrah".ipv4;
sshUser = "remotebuild";
sshKey = cfg.keyFile;
systems = [ "x86_64-linux" ];
maxJobs = 12;
supportedFeatures = [ "big-parallel" ];
});
};
}