{ inputs, lib, pkgs, config, sources, ... }: let inherit (lib) mkOption mkForce concatLists types ; in { _class = "nixos"; imports = [ ./sharedOptions.nix ]; options.system.extraDependenciesFromModule = mkOption { type = types.deferredModule; description = '' Grab the derivations needed to build the given module and dump them in system.extraDependencies. You want to put in this module a superset of all the things that you will need on your target machines. NOTE: This will work as long as the union of all these configurations do not have conflicts that would prevent evaluation. ''; default = { }; }; config = { virtualisation = { ## NOTE: The deployer machines needs more RAM and default than the ## default. These values have been trimmed down to the gigabyte. ## Memory use is expected to be dominated by the NixOS evaluation, ## which happens on the deployer. memorySize = 4 * 1024; diskSize = 4 * 1024; cores = 2; }; nix.settings = { substituters = mkForce [ ]; hashed-mirrors = null; connect-timeout = 1; extra-experimental-features = "flakes"; }; system.extraDependencies = [ inputs.nixops4 inputs.nixops4-nixos inputs.nixpkgs sources.flake-parts sources.nixpkgs sources.flake-inputs sources.git-hooks pkgs.stdenv pkgs.stdenvNoCC pkgs.automake pkgs.autoconf pkgs.binutils pkgs.bison ] ++ ( let ## We build a whole NixOS system that contains the module ## `system.extraDependenciesFromModule`, only to grab its ## configuration and the store paths needed to build it and ## dump them in `system.extraDependencies`. machine = (pkgs.nixos [ ./targetNode.nix config.system.extraDependenciesFromModule { nixpkgs.hostPlatform = "x86_64-linux"; _module.args = { inherit inputs sources; }; enableAcme = config.enableAcme; acmeNodeIP = config.acmeNodeIP; } ]).config; in [ machine.system.build.toplevel.inputDerivation machine.system.build.etc.inputDerivation machine.system.build.etcBasedir.inputDerivation machine.system.build.etcMetadataImage.inputDerivation machine.system.build.extraUtils.inputDerivation machine.system.path.inputDerivation machine.system.build.setEnvironment.inputDerivation machine.system.build.vm.inputDerivation machine.system.build.bootStage1.inputDerivation machine.system.build.bootStage2.inputDerivation pkgs.automake.inputDerivation pkgs.autoconf.inputDerivation pkgs.bash.inputDerivation pkgs.binutils.inputDerivation pkgs.bison.inputDerivation ] ++ concatLists ( lib.lists.map ( pkg: if pkg ? inputDerivation # error: output '/nix/store/dki9d3vldafg9ydrfm7x0g0rr0qljk98-sudo-1.9.16p2' is not allowed to refer to the following paths: # /nix/store/2xdmps65ryklmbf025bm4pxv16gb8ajv-sudo-1.9.16p2.tar.gz # /nix/store/58br4vk3q5akf4g8lx0pqzfhn47k3j8d-bash-5.2p37 # /nix/store/8v6k283dpbc0qkdq81nb6mrxrgcb10i1-gcc-wrapper-14-20241116 # /nix/store/9r1nl9ksiyszy4qzzg6y2gcdkca0xmhy-stdenv-linux # /nix/store/a4rmp6in7igbl1wbz9pli5nq0wiclq0y-groff-1.23.0 # /nix/store/dki9d3vldafg9ydrfm7x0g0rr0qljk98-sudo-1.9.16p2 # /nix/store/f5y58qz2fzpzgkhp0nizixi10x04ppyy-linux-pam-1.6.1 # /nix/store/shkw4qm9qcw5sc5n1k5jznc83ny02r39-default-builder.sh # /nix/store/vj1c3wf9c11a0qs6p3ymfvrnsdgsdcbq-source-stdenv.sh # /nix/store/yh6qg1nsi5h2xblcr67030pz58fsaxx3-coreutils-9.6 && !(lib.strings.hasInfix "sudo" (builtins.toString pkg)) then [ pkg.inputDerivation ] else [ ] ) machine.environment.systemPackages ) ++ concatLists ( lib.mapAttrsToList ( _k: v: if v ? source.inputDerivation then [ v.source.inputDerivation ] else [ ] ) machine.environment.etc ) ); }; }