utils/lib/mkSystem.nix
2025-10-06 17:18:22 +02:00

78 lines
2.3 KiB
Nix

{lib}: userConfig: let
inherit (lib) evalModules types assertMsg isAttrs optionals mkDefault;
evaled = evalModules {
modules = [
./ren-module.nix
userConfig
{
config._module.check = true;
config._module.freeformType = types.unspecified;
}
];
};
isDarwin = evaled.options.ren.nix-darwin.isDefined;
nix-darwin = assert assertMsg (isAttrs evaled.config.ren.nix-darwin) "nix-darwin input unset"; evaled.config.ren.nix-darwin;
baseModules = [./ren-module.nix userConfig];
nixosModules = import (evaled.config.ren.pkgs.path + "/nixos/modules/module-list.nix");
darwinModules = import (evaled.config.ren.nix-darwin + "/modules/module-list.nix");
extraNixosConfig = {
nixpkgs = {
inherit (evaled.config.ren) system pkgs;
};
imports =
# add home-manager if the input is passed
optionals evaled.options.ren.home-manager.isDefined [
evaled.config.ren.home-manager.nixosModules.home-manager
{
home-manager.useGlobalPkgs = mkDefault true;
home-manager.useUserPackages = mkDefault false;
}
]
# add nixos-wsl if the input is passed
++ optionals evaled.options.ren.nixos-wsl.isDefined [
evaled.config.ren.nixos-wsl.nixosModules.wsl
{
wsl.enable = mkDefault true;
}
]
# add disko if the input is passed
++ optionals evaled.options.ren.disko.isDefined [
evaled.config.ren.disko.nixosModules.disko
];
};
extraDarwinConfig = {
# add home-manager if the input is passed
imports = optionals evaled.options.ren.home-manager.isDefined [
evaled.config.ren.home-manager.darwinModules.home-manager
{
home-manager.useGlobalPkgs = mkDefault true;
home-manager.useUserPackages = mkDefault false;
}
];
};
systemConfig = import (evaled.config.ren.pkgs.path + "/nixos/lib/eval-config.nix") {
system = null;
modules = baseModules ++ [extraNixosConfig] ++ nixosModules;
};
darwinConfig = nix-darwin.lib.darwinSystem {
inherit (evaled.config.ren) system pkgs;
modules = baseModules ++ [extraDarwinConfig] ++ darwinModules;
};
in
(
if isDarwin
then darwinConfig
else systemConfig
)
// {
inherit userConfig;
innerConfig = {
imports = [userConfig ./ren-module.nix];
};
}