summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorseth <[email protected]>2023-04-20 20:14:31 -0400
committerseth <[email protected]>2023-04-20 21:32:06 -0400
commit5e476304b0ec6109cb9d09a89872a6b9a138efbf (patch)
tree59ab4166aa0cb5fece84689f8a7d43404c5ef7e1
parent9f2f5d2c7ee6528afe9133bb6929ea2abeb5ac29 (diff)
feat: add lib
-rw-r--r--flake.nix2
-rw-r--r--lib/configs.nix81
-rw-r--r--lib/default.nix11
3 files changed, 94 insertions, 0 deletions
diff --git a/flake.nix b/flake.nix
index 73c18d6..c4f95e3 100644
--- a/flake.nix
+++ b/flake.nix
@@ -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;}))