forked from Fediversity/Fediversity
135 lines
4.4 KiB
Nix
135 lines
4.4 KiB
Nix
{
|
|
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
|
|
]
|
|
++ (
|
|
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
|
|
)
|
|
);
|
|
};
|
|
}
|