diff options
Diffstat (limited to 'lib/configs.nix')
| -rw-r--r-- | lib/configs.nix | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/lib/configs.nix b/lib/configs.nix new file mode 100644 index 0000000..d7460ac --- /dev/null +++ b/lib/configs.nix @@ -0,0 +1,81 @@ +# this is mainly for my host/hm configurations +{ + lib, + inputs, +}: let + inherit (builtins) mapAttrs readDir; + inherit (lib) filterAttrs hasPrefix; +in rec { + mapFilterDir = dir: filter: map: let + dirs = filterAttrs filter (readDir dir); + in + mapAttrs map dirs; + + mapModules = dir: let + check = n: v: v == "directory" && !(hasPrefix "_" n); + in + mapFilterDir dir check; + + mkHMUser = { + username, + pkgs, + modules ? [], + extraSpecialArgs ? {}, + inputs, + dir, + }: + inputs.home-manager.lib.homeManagerConfiguration { + inherit pkgs; + extraSpecialArgs = inputs // extraSpecialArgs; + modules = + [ + "${dir}/${username}/home.nix" + + { + programs.home-manager.enable = true; + } + ] + ++ modules; + }; + + mapHMUsers = system: dir: let + users = import dir system inputs; + in + mapModules dir ( + username: _: + mkHMUser ({ + inherit username inputs dir; + inherit (users.${username}) extraSpecialArgs modules pkgs; + } + // users.${username}) + ); + + mkHost = { + name, + modules ? [], + specialArgs ? {}, + system ? "x86_64-linux", + inputs ? {}, + builder, + dir, + }: + builder { + inherit system; + specialArgs = inputs // specialArgs; + modules = + [ + "${dir}/${name}" + ] + ++ modules; + }; + + mapHosts = dir: let + hosts = import "${dir}" inputs; + in + mapModules dir (name: _: + mkHost ({ + inherit name dir inputs; + inherit (hosts.${name}) builder system; + } + // hosts.${name})); +} |
