{myvars, ...}: { #################################################################### # # NixOS's Configuration for Remote Building / Distributed Building # # Related Docs: # 1. https://github.com/NixOS/nix/issues/7380 # 2. https://nixos.wiki/wiki/Distributed_build # 3. https://github.com/NixOS/nix/issues/2589 # #################################################################### # set local's max-job to 0 to force remote building(disable local building) # nix.settings.max-jobs = 0; nix.distributedBuilds = true; nix.buildMachines = let sshUser = myvars.username; # ssh key's path on local machine sshKey = "/etc/agenix/ssh-key-romantic"; systems = [ # native arch "x86_64-linux" # emulated arch using binfmt_misc and qemu-user "aarch64-linux" "riscv64-linux" ]; # all available system features are poorly documentd here: # https://github.com/NixOS/nix/blob/e503ead/src/libstore/globals.hh#L673-L687 supportedFeatures = [ "benchmark" "big-parallel" "kvm" ]; in [ # Nix seems always try to build on the machine remotely # to make use of the local machine's high-performance CPU, do not set remote builder's maxJobs too high. # { # # some of my remote builders are running NixOS # # and has the same sshUser, sshKey, systems, etc. # inherit sshUser sshKey systems supportedFeatures; # # # the hostName should be: # # 1. a hostname that can be resolved by DNS # # 2. the ip address of the remote builder # # 3. a host alias defined globally in /etc/ssh/ssh_config # hostName = "aquamarine"; # # remote builder's max-job # maxJobs = 3; # # speedFactor's a signed integer # # https://github.com/ryan4yin/nix-config/issues/70 # speedFactor = 1; # } # { # inherit sshUser sshKey systems supportedFeatures; # hostName = "ruby"; # maxJobs = 2; # speedFactor = 1; # } # { # inherit sshUser sshKey systems supportedFeatures; # hostName = "kana"; # maxJobs = 2; # speedFactor = 1; # } ]; # optional, useful when the builder has a faster internet connection than yours nix.extraOptions = '' builders-use-substitutes = true ''; }