diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/configs.nix | 81 | ||||
| -rw-r--r-- | lib/default.nix | 11 |
2 files changed, 92 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})); +} diff --git a/lib/default.nix b/lib/default.nix new file mode 100644 index 0000000..4682b2f --- /dev/null +++ b/lib/default.nix @@ -0,0 +1,11 @@ +lib: inputs: let + inherit (lib) forEach genAttrs removeSuffix; + files = let + inherit (builtins) attrNames readDir; + inherit (lib) filterAttrs hasSuffix; + check = n: v: n != "default.nix" && hasSuffix ".nix" n && v == "regular"; + dir = readDir ./.; + in + attrNames (filterAttrs check dir); +in + genAttrs (forEach files (removeSuffix ".nix")) (f: (import ./${f + ".nix"} {inherit lib inputs;})) |
