infrastructure/modules/meta/network.nix
2023-05-05 14:05:01 -07:00

97 lines
2.2 KiB
Nix

{
pkgs,
inputs,
lib,
meta,
config,
...
}:
/*
This module:
* Makes hosts nixosModules.
* Manages module imports and specialArgs.
* Builds network.nodes.
*/
with lib; {
options.network = {
nixos = {
extraModules = mkOption {
type = types.listOf types.unspecified;
default = [];
};
specialArgs = mkOption {
type = types.attrsOf types.unspecified;
default = {};
};
modulesPath = mkOption {
type = types.path;
default = toString (pkgs.path + "/nixos/modules");
};
};
nodes = let
nixosModule = {
name,
config,
meta,
modulesPath,
lib,
...
}:
with lib; {
options = {
nixpkgs.crossOverlays = mkOption {
type = types.listOf types.unspecified;
default = [];
};
};
config = {
nixpkgs = {
system = mkDefault "x86_64-linux";
pkgs = let
pkgsReval = import pkgs.path {
inherit (config.nixpkgs) localSystem crossSystem crossOverlays;
inherit (pkgs) overlays config;
};
in
mkDefault (
if config.nixpkgs.config == pkgs.config && config.nixpkgs.system == pkgs.targetPlatform.system
then pkgs
else pkgsReval
);
};
};
};
nixosType = let
baseModules = import (config.network.nixos.modulesPath + "/module-list.nix");
in
types.submoduleWith {
modules =
baseModules
++ singleton nixosModule
++ config.network.nixos.extraModules;
specialArgs =
{
inherit baseModules;
inherit (config.network.nixos) modulesPath;
}
// config.network.nixos.specialArgs;
};
in
mkOption {
type = types.attrsOf nixosType;
default = {};
};
};
config.network = {
nixos = {
extraModules = [
meta.modules.nixos
];
specialArgs = {
inherit (config.network) nodes;
inherit inputs meta pkgs;
};
};
};
}