nix: use attrSet to achive variadic function call

This commit is contained in:
Primrose 2024-07-13 14:14:10 +02:00
parent 457d196041
commit 173e1440c1
Signed by: primrose
GPG key ID: 4E887A4CA9714ADA
2 changed files with 80 additions and 48 deletions

View file

@ -3,24 +3,32 @@ localFlake:
{ inputs, ... }:
let
mkNixOS =
nixosModulesOf: homeModulesOf: name: sys: hmOpts:
localFlake.withSystem sys (
nixosModulesOf: homeModulesOf:
{
hostname,
system,
extraNixOSConfig ? { },
extraHomeConfig ? { },
...
}@args:
localFlake.withSystem system (
{ pkgs, ... }:
let
args = {
specialArgs = {
inherit pkgs;
hostname = name;
inherit hostname;
};
in
inputs.nixpkgs.lib.nixosSystem {
specialArgs = args;
modules = nixosModulesOf name sys ++ [
inherit specialArgs;
modules = nixosModulesOf args ++ [
extraNixOSConfig
{
home-manager = {
useGlobalPkgs = true;
useUserPackages = true;
extraSpecialArgs = args;
users.leana.imports = homeModulesOf name sys ++ [ hmOpts ];
extraSpecialArgs = specialArgs;
users.leana.imports = homeModulesOf args ++ [ extraHomeConfig ];
};
}
];
@ -28,24 +36,32 @@ let
);
mkDarwin =
darwinModulesOf: homeModulesOf: name: sys: hmOpts:
localFlake.withSystem sys (
darwinModulesOf: homeModulesOf:
args@{
hostname,
system,
extraDarwinConfig ? { },
extraHomeConfig ? { },
...
}:
localFlake.withSystem system (
{ pkgs, ... }:
let
args = {
specialArgs = {
inherit pkgs;
hostname = name;
inherit hostname;
};
in
inputs.nix-darwin.lib.darwinSystem {
specialArgs = args;
modules = darwinModulesOf name sys ++ [
inherit specialArgs;
modules = darwinModulesOf args ++ [
extraDarwinConfig
{
home-manager = {
useGlobalPkgs = true;
useUserPackages = true;
extraSpecialArgs = args;
users.leana.imports = homeModulesOf name sys ++ [ hmOpts ];
extraSpecialArgs = specialArgs;
users.leana.imports = homeModulesOf args ++ [ extraHomeConfig ];
};
}
];
@ -53,22 +69,29 @@ let
);
mkHomeManager =
homeModulesOf: name: sys: hmOpts:
localFlake.withSystem sys (
homeModulesOf:
args@{
hostname,
system,
extraHomeConfig ? { },
...
}:
localFlake.withSystem system (
{ pkgs, ... }:
let
args = {
specialArgs = {
inherit pkgs;
hostname = name;
inherit hostname;
};
in
inputs.home-manager.lib.homeManagerConfiguration {
inherit (args) pkgs;
extraSpecialArgs = args;
modules = homeModulesOf name sys ++ [ hmOpts ];
inherit (specialArgs) pkgs;
extraSpecialArgs = specialArgs;
modules = homeModulesOf args ++ [ extraHomeConfig ];
}
);
many = func: builtins.mapAttrs (name: hmOpts: func name hmOpts.system (hmOpts.settings or { }));
many = func: builtins.mapAttrs (hostname: cfgs: func (cfgs // { inherit hostname; }));
in
{
_module.args = {