1
0
Fork 0
mirror of https://github.com/LnL7/nix-darwin.git synced 2025-03-06 08:47:00 +00:00
nix-darwin/modules/nix/linux-builder.nix

110 lines
3.2 KiB
Nix
Raw Normal View History

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 {
modules = [ cfg.config ];
2023-06-07 12:50:00 +10:00
};
in
{
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.
'';
};
config = mkOption {
type = types.deferredModule;
default = { };
2023-06-07 12:50:00 +10:00
example = literalExpression ''
({ pkgs, ... }:
2023-06-07 12:50:00 +10:00
{
environment.systemPackages = [ pkgs.neovim ];
})
2023-06-07 12:50:00 +10:00
'';
description = lib.mdDoc ''
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
'';
};
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 = [ {
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=";
inherit (cfg) maxJobs;
2023-06-07 12:50:00 +10:00
}];
nix.settings.builders-use-substitutes = true;
};
}