summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/default.nix14
-rw-r--r--lib/host.nix49
-rw-r--r--lib/user.nix40
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 [];
+ });
+}