From 60bef752cb190bcb8ca0b2d2eb7930a113410afa Mon Sep 17 00:00:00 2001 From: Erik Simon Date: Sat, 22 Aug 2026 05:03:43 +0200 Subject: [PATCH] home-manager: enable for darman on every host, not just terra terra was the only host with real ~/.zshrc/.zshenv (via home-manager), so it never hit the plain-zsh zsh-newuser-install wizard that shows up on first login everywhere else. Wire home-manager.nixosModules.home-manager into jupiter/neptun/mars/mercury (+ mercury-vm/jupiter-vbox test targets) and give darman terra's shared zsh baseline via home/common.nix, imported from common.nix. terra's own home.nix now only carries its desktop/dev-specific profile (Hyprland, alacritty, git identity, direnv, dev packages) layered on top via home-manager.users.darman.imports. Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01Du1WQRk1F8DenrPhf8TofF --- common.nix | 13 +++++++++++++ flake.nix | 10 +++++++++- hosts/terra/configuration.nix | 9 +++++---- hosts/terra/home.nix | 7 +++---- 4 files changed, 30 insertions(+), 9 deletions(-) diff --git a/common.nix b/common.nix index a06de74..3284006 100644 --- a/common.nix +++ b/common.nix @@ -53,6 +53,19 @@ environment.systemPackages = with pkgs; [ git btop tmux curl wget zsh-powerlevel10k lsd ]; + # ---- home-manager (user-level config for darman, all hosts) ---- + # Requires home-manager.nixosModules.home-manager in the host's own + # `modules` list (flake.nix) — this only sets values for options that + # module declares, it doesn't import it, so every nixosSystem using + # common.nix needs that line too (mirrors terra's original setup). + home-manager.useGlobalPkgs = true; + home-manager.useUserPackages = true; + # Protects activation if a plain (non-symlink) ~/.zshrc etc. already + # exists from before home-manager managed it — e.g. a host where the + # zsh-newuser-install wizard's option (0) was used to silence itself. + home-manager.backupFileExtension = "hm-bak"; + home-manager.users.darman.imports = [ ./home/common.nix ]; + # ---- zsh / oh-my-zsh / powerlevel10k ---- programs.zsh = { enable = true; diff --git a/flake.nix b/flake.nix index f9b2bf6..fc1b2a8 100644 --- a/flake.nix +++ b/flake.nix @@ -80,6 +80,7 @@ modules = [ disko.nixosModules.disko sops-nix.nixosModules.sops + home-manager.nixosModules.home-manager ./hosts/jupiter/configuration.nix ]; }; @@ -91,6 +92,7 @@ modules = [ disko.nixosModules.disko sops-nix.nixosModules.sops + home-manager.nixosModules.home-manager ./hosts/neptun/configuration.nix ]; }; @@ -117,6 +119,7 @@ modules = [ disko.nixosModules.disko sops-nix.nixosModules.sops + home-manager.nixosModules.home-manager ./hosts/mars/configuration.nix ]; }; @@ -131,6 +134,7 @@ modules = [ (nixpkgs + "/nixos/modules/installer/sd-card/sd-image-aarch64.nix") sops-nix.nixosModules.sops + home-manager.nixosModules.home-manager ./hosts/mercury/configuration.nix ]; }; @@ -143,6 +147,7 @@ inherit system; # x86_64-linux, fast to build/boot with KVM modules = [ (nixpkgs + "/nixos/modules/virtualisation/qemu-vm.nix") + home-manager.nixosModules.home-manager ./common.nix ./services/network/unbound.nix ./services/network/pihole.nix @@ -169,7 +174,10 @@ jupiter-vbox = nixpkgs.lib.nixosSystem { inherit system; specialArgs = { inherit inputs; }; - modules = [ ./hosts/jupiter/vm.nix ]; + modules = [ + home-manager.nixosModules.home-manager + ./hosts/jupiter/vm.nix + ]; }; # Custom kexec installer with our SSH key baked in, for headless install diff --git a/hosts/terra/configuration.nix b/hosts/terra/configuration.nix index 6a205bc..deaff91 100644 --- a/hosts/terra/configuration.nix +++ b/hosts/terra/configuration.nix @@ -43,11 +43,12 @@ in programs.nix-ld.enable = true; # ---- home-manager (user-level config for darman) ---- - home-manager.useGlobalPkgs = true; - home-manager.useUserPackages = true; - home-manager.backupFileExtension = "hm-bak"; + # Base settings (useGlobalPkgs/useUserPackages/backupFileExtension) and the + # shared zsh baseline now live in common.nix + home/common.nix, applied to + # every host. This just layers terra's desktop/dev-specific profile on top + # — home-manager.users.darman.imports merges additively across modules. home-manager.extraSpecialArgs = { inherit unstable inputs; }; - home-manager.users.darman = import ./home.nix; + home-manager.users.darman.imports = [ ./home.nix ]; # ---- Boot (UEFI) ---- boot.loader.systemd-boot.enable = true; diff --git a/hosts/terra/home.nix b/hosts/terra/home.nix index 25fab03..9f7bb5b 100644 --- a/hosts/terra/home.nix +++ b/hosts/terra/home.nix @@ -3,9 +3,11 @@ let tome = pkgs.callPackage ../../pkgs/tome.nix { src = inputs.tome; }; in { + # home.stateVersion, programs.home-manager.enable, programs.zsh.enable all + # come from home/common.nix (shared across every host) via + # configuration.nix's home-manager.users.darman.imports. imports = [ ./home/hyprland.nix ./home/theme.nix ]; - home.stateVersion = "26.05"; home.keyboard.layout = "de"; programs.git = { @@ -15,9 +17,6 @@ in user.email = "mail@erik-s.dev"; }; }; - programs.home-manager.enable = true; - - programs.zsh.enable = true; # direnv + nix-direnv: lets per-repo devShells (e.g. ~/Data/Dev/repos/Tome's # flake.nix) auto-load in the shell AND in Rider via its "direnv