diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/default.nix | 14 | ||||
| -rw-r--r-- | lib/host.nix | 49 | ||||
| -rw-r--r-- | lib/user.nix | 40 |
3 files changed, 103 insertions, 0 deletions
diff --git a/lib/default.nix b/lib/default.nix new file mode 100644 index 0000000..b909fe5 --- /dev/null +++ b/lib/default.nix @@ -0,0 +1,14 @@ +{ + inputs, + lib, +}: let + inherit (builtins) readDir; + inherit (lib) filterAttrs mapAttrs; + + mapFilterDirs = dir: filter: map: let + dirs = filterAttrs filter (readDir dir); + in + mapAttrs map dirs; +in + (import ./host.nix {inherit inputs mapFilterDirs;}) + // (import ./user.nix {inherit inputs mapFilterDirs;}) diff --git a/lib/host.nix b/lib/host.nix new file mode 100644 index 0000000..b5e00b3 --- /dev/null +++ b/lib/host.nix @@ -0,0 +1,49 @@ +{ + inputs, + mapFilterDirs, +}: rec { + mkHost = { + name, + modules, + specialArgs ? {}, + system ? "x86_64-linux", + stateVersion ? "22.11", + pkgs, + }: + with pkgs.lib; + nixosSystem { + inherit system specialArgs; + modules = + [ + ../modules + ../hosts/${name} + + { + system.stateVersion = stateVersion; + networking.hostName = mkDefault name; + + nixpkgs = { + overlays = with inputs; [nur.overlay getchoo.overlays.default]; + config.allowUnfree = true; + }; + nix.registry.getchoo.flake = inputs.getchoo; + + nixos.enable = true; + } + ] + ++ modules; + }; + + mapHosts = inputs: let + hosts = import ../hosts inputs; + in + mapFilterDirs ../hosts (n: v: v == "directory" && n != "turret") (name: _: + mkHost { + inherit name; + inherit (hosts.${name}) modules system stateVersion pkgs; + specialArgs = + if builtins.hasAttr "specialArgs" hosts.${name} + then hosts.${name}.specialArgs + else {}; + }); +} diff --git a/lib/user.nix b/lib/user.nix new file mode 100644 index 0000000..6377faa --- /dev/null +++ b/lib/user.nix @@ -0,0 +1,40 @@ +{ + inputs, + mapFilterDirs, +}: rec { + mkHMUser = { + username, + pkgs, + stateVersion ? "22.11", + modules ? [], + }: + inputs.home-manager.lib.homeManagerConfiguration { + inherit pkgs; + modules = + [ + ../users/${username}/home.nix + { + home = { + inherit username stateVersion; + homeDirectory = "/home/${username}"; + }; + + programs.home-manager.enable = true; + } + ] + ++ modules; + }; + + mapHMUsers = inputs: system: let + users = import ../users inputs system; + in + mapFilterDirs ../users (n: v: v == "directory" && n != "secrets") (username: _: + mkHMUser { + inherit username; + inherit (users.${username}) pkgs stateVersion; + modules = + if builtins.hasAttr "modules" users.${username} + then users.${username}.modules + else []; + }); +} |
