2023-06-07 12:50:00 +10:00
|
|
|
{ config, lib, pkgs, ... }:
|
|
|
|
|
|
|
|
with lib;
|
|
|
|
|
|
|
|
let
|
|
|
|
inherit (pkgs) stdenv;
|
|
|
|
|
|
|
|
cfg = config.nix.linux-builder;
|
|
|
|
|
|
|
|
builderWithOverrides = cfg.package.override {
|
2023-09-28 01:49:38 +01:00
|
|
|
modules = [ cfg.config ];
|
2023-06-07 12:50:00 +10:00
|
|
|
};
|
|
|
|
in
|
|
|
|
|
|
|
|
{
|
2023-09-28 01:49:38 +01:00
|
|
|
imports = [
|
|
|
|
(mkRemovedOptionModule [ "nix" "linux-builder" "modules" ] "This option has been replaced with `nix.linux-builder.config` which allows setting options directly like `nix.linux-builder.config.networking.hostName = \"banana\";.")
|
|
|
|
];
|
|
|
|
|
2023-06-07 12:50:00 +10:00
|
|
|
options.nix.linux-builder = {
|
|
|
|
enable = mkEnableOption (lib.mdDoc "Linux builder");
|
|
|
|
|
|
|
|
package = mkOption {
|
|
|
|
type = types.package;
|
|
|
|
default = pkgs.darwin.linux-builder;
|
|
|
|
defaultText = "pkgs.darwin.linux-builder";
|
|
|
|
description = lib.mdDoc ''
|
|
|
|
This option specifies the Linux builder to use.
|
|
|
|
'';
|
|
|
|
};
|
|
|
|
|
2023-09-28 01:49:38 +01:00
|
|
|
config = mkOption {
|
|
|
|
type = types.deferredModule;
|
|
|
|
default = { };
|
2023-06-07 12:50:00 +10:00
|
|
|
example = literalExpression ''
|
2023-09-28 01:49:38 +01:00
|
|
|
({ pkgs, ... }:
|
2023-06-07 12:50:00 +10:00
|
|
|
|
2023-09-28 01:49:38 +01:00
|
|
|
{
|
|
|
|
environment.systemPackages = [ pkgs.neovim ];
|
|
|
|
})
|
2023-06-07 12:50:00 +10:00
|
|
|
'';
|
|
|
|
description = lib.mdDoc ''
|
2023-09-28 01:49:38 +01:00
|
|
|
This option specifies extra NixOS configuration for the builder. You should first use the Linux builder
|
|
|
|
without changing the builder configuration otherwise you may not be able to build the Linux builder.
|
2023-06-07 12:50:00 +10:00
|
|
|
'';
|
|
|
|
};
|
2023-08-02 12:33:34 -07:00
|
|
|
|
|
|
|
maxJobs = mkOption {
|
|
|
|
type = types.ints.positive;
|
|
|
|
default = 1;
|
|
|
|
example = 4;
|
|
|
|
description = lib.mdDoc ''
|
|
|
|
This option specifies the maximum number of jobs to run on the Linux builder at once.
|
|
|
|
|
|
|
|
This sets the corresponding `nix.buildMachines.*.maxJobs` option.
|
|
|
|
'';
|
|
|
|
};
|
2023-06-07 12:50:00 +10:00
|
|
|
};
|
|
|
|
|
|
|
|
config = mkIf cfg.enable {
|
|
|
|
assertions = [ {
|
2023-07-09 13:07:03 +10:00
|
|
|
assertion = config.nix.settings.trusted-users != [ "root" ] || (config.nix.settings.extra-trusted-users or [ ]) != [ ];
|
2023-06-07 12:50:00 +10:00
|
|
|
message = ''
|
|
|
|
Your user or group (@admin) needs to be added to `nix.settings.trusted-users` or `nix.settings.extra-trusted-users`
|
|
|
|
to use the Linux builder.
|
|
|
|
'';
|
|
|
|
} ];
|
|
|
|
|
|
|
|
system.activationScripts.preActivation.text = ''
|
|
|
|
mkdir -p /var/lib/darwin-builder
|
|
|
|
'';
|
|
|
|
|
|
|
|
launchd.daemons.linux-builder = {
|
|
|
|
environment = {
|
|
|
|
inherit (config.environment.variables) NIX_SSL_CERT_FILE;
|
|
|
|
};
|
|
|
|
serviceConfig = {
|
|
|
|
ProgramArguments = [
|
|
|
|
"/bin/sh" "-c"
|
|
|
|
"/bin/wait4path /nix/store && exec ${builderWithOverrides}/bin/create-builder"
|
|
|
|
];
|
|
|
|
KeepAlive = true;
|
|
|
|
RunAtLoad = true;
|
|
|
|
WorkingDirectory = "/var/lib/darwin-builder";
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
environment.etc."ssh/ssh_config.d/100-linux-builder.conf".text = ''
|
|
|
|
Host linux-builder
|
|
|
|
Hostname localhost
|
|
|
|
HostKeyAlias linux-builder
|
|
|
|
Port 31022
|
|
|
|
'';
|
|
|
|
|
|
|
|
nix.distributedBuilds = true;
|
|
|
|
|
|
|
|
nix.buildMachines = [{
|
|
|
|
hostName = "linux-builder";
|
|
|
|
sshUser = "builder";
|
|
|
|
sshKey = "/etc/nix/builder_ed25519";
|
|
|
|
system = "${stdenv.hostPlatform.uname.processor}-linux";
|
|
|
|
supportedFeatures = [ "kvm" "benchmark" "big-parallel" ];
|
|
|
|
publicHostKey = "c3NoLWVkMjU1MTkgQUFBQUMzTnphQzFsWkRJMU5URTVBQUFBSUpCV2N4Yi9CbGFxdDFhdU90RStGOFFVV3JVb3RpQzVxQkorVXVFV2RWQ2Igcm9vdEBuaXhvcwo=";
|
2023-08-02 12:33:34 -07:00
|
|
|
inherit (cfg) maxJobs;
|
2023-06-07 12:50:00 +10:00
|
|
|
}];
|
|
|
|
|
|
|
|
nix.settings.builders-use-substitutes = true;
|
|
|
|
};
|
|
|
|
}
|