From 827217da51fa55eda69f4c405e88e9c365f05a32 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20Schr=C3=B6ter?= <dev@felschr.com> Date: Mon, 28 Apr 2025 17:02:09 +0200 Subject: [PATCH] feat: expose home-manager configurations --- flake.nix | 8 +--- home/flake-module.nix | 55 +++++++++++++++++++++++++ hosts/flake-module.nix | 21 +++++----- lib/createUser.nix | 91 +++++++++++++++++++++--------------------- lib/flake-module.nix | 15 +++---- 5 files changed, 117 insertions(+), 73 deletions(-) create mode 100644 home/flake-module.nix diff --git a/flake.nix b/flake.nix index 4219e6d..fd02c7a 100644 --- a/flake.nix +++ b/flake.nix @@ -103,6 +103,7 @@ rec { ./pkgs/flake-module.nix ./lib/flake-module.nix ./hosts/flake-module.nix + ./home/flake-module.nix ./overlays.nix ]; flake = { @@ -113,13 +114,6 @@ rec { systemdNotify = import ./modules/systemdNotify.nix; inadyn = import ./modules/inadyn.nix; }; - - homeManagerModules = { - git = import ./home/modules/git.nix; - firefox = import ./home/modules/firefox/firefox.nix; - tor-browser = import ./home/modules/firefox/tor-browser.nix; - mullvad-browser = import ./home/modules/firefox/mullvad-browser.nix; - }; }; perSystem = { diff --git a/home/flake-module.nix b/home/flake-module.nix new file mode 100644 index 0000000..6722451 --- /dev/null +++ b/home/flake-module.nix @@ -0,0 +1,55 @@ +{ + self, + inputs, + pkgs, + ... +}: + +let + createHomeConfig = + name: args: + inputs.home-manager.lib.homeManagerConfiguration ( + { + inherit pkgs; + extraSpecialArgs = { inherit inputs; }; + } + // args + ); +in +{ + flake = { + homeModules = { + git = import ./modules/git.nix; + firefox = import ./modules/firefox/firefox.nix; + tor-browser = import ./modules/firefox/tor-browser.nix; + mullvad-browser = import ./modules/firefox/mullvad-browser.nix; + + # users + felschr = import ./felschr.nix; + felschr-server = import ./felschr-server.nix; + felschr-work = import ./felschr-work.nix; + }; + homeConfigurations = { + felschr = createHomeConfig { + modules = [ + self.homeModules.git + self.homeModules.felschr + ]; + }; + felschr-server = createHomeConfig { + modules = [ + self.homeModules.git + self.homeModules.felschr-server + ]; + }; + felschr-work = createHomeConfig { + modules = [ + self.homeModules.git + self.homeModules.felschr-work + ]; + }; + }; + # HINT alias for deprecated output + homeManagerModules = self.homeModules; + }; +} diff --git a/hosts/flake-module.nix b/hosts/flake-module.nix index 1a4387f..218e42f 100644 --- a/hosts/flake-module.nix +++ b/hosts/flake-module.nix @@ -10,12 +10,13 @@ inputs.nixos-hardware.nixosModules.common-pc-ssd inputs.nixos-hardware.nixosModules.common-cpu-amd-pstate inputs.nixos-hardware.nixosModules.common-gpu-amd - (self.lib.createSystem "home-pc" { + (self.lib.createSystemModule "home-pc" { hardwareConfig = ../hardware/home-pc.nix; config = ../hosts/home-pc.nix; }) self.lib.createMediaGroup - (self.lib.createUser "felschr" { + (self.lib.createUserModule "felschr" { + homeModule = self.homeModules.felschr; user.extraGroups = [ "wheel" "networkmanager" @@ -26,8 +27,6 @@ "gamemode" "media" ]; - modules = [ self.homeManagerModules.git ]; - config = ../home/felschr.nix; usesContainers = true; }) ( @@ -48,18 +47,17 @@ inputs.nixos-hardware.nixosModules.common-pc inputs.nixos-hardware.nixosModules.common-pc-ssd inputs.nixos-hardware.nixosModules.common-cpu-intel - (self.lib.createSystem "pilot1" { + (self.lib.createSystemModule "pilot1" { hardwareConfig = ../hardware/pilot1.nix; config = ../hosts/work-pc.nix; }) - (self.lib.createUser "felschr" { + (self.lib.createUserModule "felschr" { + homeModule = self.homeModules.felschr-work; user.extraGroups = [ "wheel" "audio" "disk" ]; - modules = [ self.homeManagerModules.git ]; - config = ../home/felschr-work.nix; usesContainers = true; }) ]; @@ -76,12 +74,13 @@ inputs.nixos-hardware.nixosModules.common-cpu-intel inputs.nixos-hardware.nixosModules.common-gpu-intel-kaby-lake inputs.matrix-appservices.nixosModule - (self.lib.createSystem "home-server" { + (self.lib.createSystemModule "home-server" { hardwareConfig = ../hardware/lattepanda.nix; config = ../hosts/home-server.nix; }) self.lib.createMediaGroup - (self.lib.createUser "felschr" { + (self.lib.createUserModule "felschr" { + homeModule = self.homeModules.felschr-server; user = { extraGroups = [ "wheel" @@ -93,8 +92,6 @@ "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIP751vlJUnB7Pfe1KNr6weWkx/rkP4J3lTYpAekHdOgV" ]; }; - modules = [ self.homeManagerModules.git ]; - config = ../home/felschr-server.nix; }) ]; specialArgs = { diff --git a/lib/createUser.nix b/lib/createUser.nix index ada8dcc..56f68d3 100644 --- a/lib/createUser.nix +++ b/lib/createUser.nix @@ -1,52 +1,53 @@ -name: -{ - user ? { }, - hm ? { }, - modules ? [ ], - config, - usesContainers ? false, - ... -}: +{ self, ... }: { - inputs, - pkgs, - lib, - home-manager, - ... -}: -{ - imports = [ home-manager.nixosModules.home-manager ]; + flake.lib.createUserModule = + name: + { + homeModule, + user ? { }, + usesContainers ? false, + ... + }: + { + inputs, + pkgs, + lib, + ... + }: + { + imports = [ inputs.home-manager.nixosModules.home-manager ]; - users.users."${name}" = { - isNormalUser = true; - shell = pkgs.zsh; + users.users."${name}" = { + isNormalUser = true; + shell = pkgs.zsh; - # increase sub{u,g}id range for container user namespaces - subUidRanges = lib.optionals usesContainers [ - { - startUid = 100000; - count = 60000000; - } - ]; - subGidRanges = lib.optionals usesContainers [ - { - startGid = 100000; - count = 60000000; - } - ]; - } // user; + # increase sub{u,g}id range for container user namespaces + subUidRanges = lib.optionals usesContainers [ + { + startUid = 100000; + count = 60000000; + } + ]; + subGidRanges = lib.optionals usesContainers [ + { + startGid = 100000; + count = 60000000; + } + ]; + } // user; - home-manager = { - useUserPackages = true; - useGlobalPkgs = true; - backupFileExtension = "backup"; - users."${name}" = lib.mkMerge [ - { imports = modules; } - (import config) - ]; - extraSpecialArgs = { - inherit inputs; + home-manager = { + useGlobalPkgs = true; + useUserPackages = true; + backupFileExtension = "backup"; + users."${name}" = { + imports = [ + self.homeModules.git + homeModule + ]; + }; + extraSpecialArgs = { inherit inputs; }; + }; }; - } // hm; } diff --git a/lib/flake-module.nix b/lib/flake-module.nix index 9a1cb3f..843786a 100644 --- a/lib/flake-module.nix +++ b/lib/flake-module.nix @@ -1,13 +1,13 @@ -{ inputs, lib, ... }: +{ lib, ... }: -let - createUser' = import ./createUser.nix; -in { - imports = [ ./openwrt.nix ]; + imports = [ + ./createUser.nix + ./openwrt.nix + ]; options.flake.lib = lib.mkOption { type = with lib.types; lazyAttrsOf raw; }; config.flake.lib = { - createSystem = + createSystemModule = hostName: { hardwareConfig, config }: ( @@ -22,9 +22,6 @@ in ]; } ); - createUser = - name: args: - ({ pkgs, ... }@args2: (createUser' name args) ({ inherit (inputs) home-manager; } // args2)); createMediaGroup = _: { users.groups.media.gid = 600; }; }; }