Remove home-manager from the config entirely, replacing each managed setting with a native NixOS / nix-darwin module or a wrapped package.
Current footprint
Everything lives under modules/home/, wired three ways:
- NixOS:
home-manager.users.soft = … in modules/nixos-workstation.nix (tower) and modules/hosts/leod/configuration.nix
- darwin:
modules/hosts/aaron/configuration.nix
- standalone
homeConfigurations in modules/home/default.nix
- flake input + flakeModule:
flake.nix (home-manager input, inputs.home-manager.flakeModules.home-manager, modules/home/* imports)
Managed settings and their native replacements:
| Source |
What it does |
Replacement |
common.nix |
~/.prettierrc (proseWrap: always) |
activation symlink / environment.etc / commit into repo |
common.nix |
~/.config/home-manager → ~/setup symlink |
drop (HM CLI only) |
common.nix |
username, stateVersion, programs.home-manager.enable |
drop |
linux.nix |
xdg.mime.enable |
NixOS xdg.mime.enable (system option) |
linux.nix |
programs.hyprlock settings |
programs.hyprlock.enable already set; ship config via environment.etc."hypr/hyprlock.conf" or a wrapped pkg |
linux.nix |
services.mpd |
NixOS services.mpd (system service, user = "soft") |
linux.nix |
services.mpdris2 |
no NixOS module → custom systemd.user.services.mpdris2 (mirror darkman.nix) |
hypridle.nix |
services.hypridle |
custom systemd.user.services.hypridle + config file |
darwin.nix |
services.syncthing |
no nix-darwin module → custom launchd.user.agents (serve + settings-push) |
darwin.nix |
~/.hushlogin, shellAliases.bg |
darwin activation script + alias into zsh-wrapped |
pi has no home-manager — nothing to do there.
Plan — atomic PRs
home-manager stays functional until the last PR; each is verified with a host build.
- Linux mpd/mpdris2 — system
services.mpd + custom systemd.user.services.mpdris2. (tower + leod)
- Linux hyprlock config — render settings to
/etc/hypr/hyprlock.conf; keep programs.hyprlock.enable.
- Linux hypridle — custom user service + config file (folds
hypridle.nix + leod.nix).
- Darwin syncthing —
launchd.user.agents.{syncthing,syncthing-init}, reusing lib/syncthing-settings.nix.
- Darwin misc —
.hushlogin via activation; bg alias into zsh-wrapped.
.prettierrc + drop ~/.config/home-manager symlink — cross-host.
- Teardown — delete
modules/home/, remove the 4 home-manager.users/homeConfigurations wirings, drop home-manager.{nixos,darwin}Modules imports from the 3 host files, remove the home-manager package from modules/workstation.nix, the home-manager block (useGlobalPkgs/useUserPackages), the flake input + flakeModule import, and the modules/home/* entries in flake.nix.
Open design choices
.prettierrc: global symlink (preserve behavior) vs. drop and rely on per-project config.
- hyprlock/hypridle config: inline
environment.etc text vs. full *-wrapped packages (matches repo convention, heavier).
Tracking (split into atomic child issues, 2026-06-23)
This epic is split into 7 atomic PRs. PRs 1–6 are independent and run in parallel; PR 7 (teardown) depends on all of 1–6 being merged.
Decisions locked in: .prettierrc kept as a global file (so non-project markdown like ~/sync/doc still gets proseWrap: always); hyprlock + hypridle delivered as *-wrapped packages.
Remove home-manager from the config entirely, replacing each managed setting with a native NixOS / nix-darwin module or a wrapped package.
Current footprint
Everything lives under
modules/home/, wired three ways:home-manager.users.soft = …inmodules/nixos-workstation.nix(tower) andmodules/hosts/leod/configuration.nixmodules/hosts/aaron/configuration.nixhomeConfigurationsinmodules/home/default.nixflake.nix(home-managerinput,inputs.home-manager.flakeModules.home-manager,modules/home/*imports)Managed settings and their native replacements:
common.nix~/.prettierrc(proseWrap: always)environment.etc/ commit into repocommon.nix~/.config/home-manager→~/setupsymlinkcommon.nixusername,stateVersion,programs.home-manager.enablelinux.nixxdg.mime.enablexdg.mime.enable(system option)linux.nixprograms.hyprlocksettingsprograms.hyprlock.enablealready set; ship config viaenvironment.etc."hypr/hyprlock.conf"or a wrapped pkglinux.nixservices.mpdservices.mpd(system service,user = "soft")linux.nixservices.mpdris2systemd.user.services.mpdris2(mirrordarkman.nix)hypridle.nixservices.hypridlesystemd.user.services.hypridle+ config filedarwin.nixservices.syncthinglaunchd.user.agents(serve + settings-push)darwin.nix~/.hushlogin,shellAliases.bgzsh-wrappedpihas no home-manager — nothing to do there.Plan — atomic PRs
home-manager stays functional until the last PR; each is verified with a host build.
services.mpd+ customsystemd.user.services.mpdris2. (tower + leod)/etc/hypr/hyprlock.conf; keepprograms.hyprlock.enable.hypridle.nix+leod.nix).launchd.user.agents.{syncthing,syncthing-init}, reusinglib/syncthing-settings.nix..hushloginvia activation;bgalias intozsh-wrapped..prettierrc+ drop~/.config/home-managersymlink — cross-host.modules/home/, remove the 4home-manager.users/homeConfigurationswirings, drophome-manager.{nixos,darwin}Modulesimports from the 3 host files, remove thehome-managerpackage frommodules/workstation.nix, thehome-managerblock (useGlobalPkgs/useUserPackages), the flake input + flakeModule import, and themodules/home/*entries inflake.nix.Open design choices
.prettierrc: global symlink (preserve behavior) vs. drop and rely on per-project config.environment.etctext vs. full*-wrappedpackages (matches repo convention, heavier).Tracking (split into atomic child issues, 2026-06-23)
This epic is split into 7 atomic PRs. PRs 1–6 are independent and run in parallel; PR 7 (teardown) depends on all of 1–6 being merged.
hyprlock-wrappedhypridle-wrapped+ user service.hushlogin+bgalias.prettierrc(kept global) + drop~/.config/home-managersymlinkmodules/home/, all wiring (Closes #197)Decisions locked in:
.prettierrckept as a global file (so non-project markdown like~/sync/docstill getsproseWrap: always); hyprlock + hypridle delivered as*-wrappedpackages.