nixfiles/modules/common/distributed.nix

55 lines
1.7 KiB
Nix
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{ lib, config, inputs, ... }: let
# TODO: convert to nix-std
inherit (lib.attrsets) mapAttrsToList mapAttrs;
inherit (lib.lists) optionals;
inherit (lib.options) mkOption;
inherit (lib.types) int attrsOf submodule;
buildMachines = mapAttrsToList (name: extern_: let
extern = extern_.config;
in {
hostName = "${name}.inskip.me";
sshUser = "deploy";
systems = [ extern.nixpkgs.system ] ++ optionals (extern.nix.settings ? extra-platforms) extern.nix.settings.extra-platforms;
maxJobs = 100;
speedFactor = config.distributed.outputs.${name};
supportedFeatures = [ "nixos-test" "benchmark" "big-parallel" "kvm" ];
} ) (inputs.self.nixosConfigurations // inputs.self.darwinConfigurations);
daiyousei = {
hostName = "daiyousei.inskip.me";
sshUser = "root";
system = "aarch64-linux";
maxJobs = 100;
speedFactor = 1;
supportedFeatures = ["benchmark" "big-parallel" "kvm"];
mandatoryFeatures = [];
};
in {
options.distributed = let
baseOptions = {
options.preference = mkOption {
type = int;
default = 1;
};
};
in baseOptions.options // {
systems = mkOption {
type = attrsOf (submodule baseOptions);
default = {};
};
outputs = mkOption {
type = attrsOf int;
default = {};
};
};
config = {
distributed.outputs = mapAttrs (name: extern: extern.config.distributed.preference +
(if config.distributed.systems ? ${name} && config.distributed.systems.${name} ? preference then
config.distributed.systems.${name}.preference
else 0)
) (inputs.self.nixosConfigurations // inputs.self.darwinConfigurations);
nix = {
inherit buildMachines;
distributedBuilds = true;
};
};
}