diff options
| author | seth <[email protected]> | 2023-04-20 20:14:31 -0400 |
|---|---|---|
| committer | seth <[email protected]> | 2023-04-20 21:32:06 -0400 |
| commit | 5e476304b0ec6109cb9d09a89872a6b9a138efbf (patch) | |
| tree | 59ab4166aa0cb5fece84689f8a7d43404c5ef7e1 | |
| parent | 9f2f5d2c7ee6528afe9133bb6929ea2abeb5ac29 (diff) | |
feat: add lib
| -rw-r--r-- | flake.nix | 2 | ||||
| -rw-r--r-- | lib/configs.nix | 81 | ||||
| -rw-r--r-- | lib/default.nix | 11 |
3 files changed, 94 insertions, 0 deletions
@@ -45,6 +45,8 @@ p // {default = p.treefetch;} ); + lib = import ./lib nixpkgs.lib; + overlays.default = final: prev: packageSet final // overrides prev; }; } 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;})) |
