Skip to content

Home Manager

Overview

Home Manager is a nix-community project that manages a user environment with Nix: declarative user packages and dotfiles, evaluated with the same Nix module system as NixOS. It is not part of Nixpkgs; it ships its own option tree and module set, parallel to the nixpkgs NixOS modules and nix-darwin ecosystems.

This page places Home Manager in the module-ecosystem landscape. Install modes, authoring modules, and dotfile patterns live under Home Manager (user domain).

Details

What it evaluates. Home Manager calls the Nixpkgs module system (lib.evalModules) over a curated list of HM modules plus the user’s config. Options land under home-oriented namespaces (home.*, programs.*, services.*, xdg.*, …), not the system-wide NixOS tree (boot.*, networking.*, systemd.services, …). The evaluation target is a user profile and home-directory state, not a full OS closure. Mechanics of writing modules: Writing HM modules; module-system basics: Module system.

Where it sits vs NixOS modules. NixOS modules (from Nixpkgs) configure the host. Home Manager modules configure one user’s home. Overlap exists for some programs (both ecosystems may wrap the same package), but the option paths and activation targets differ—do not assume a NixOS option exists under HM, or the reverse. When HM is imported as a NixOS module, it adds NixOS options such as home-manager.users.<name> that nest a full HM evaluation inside the system eval.

Three entry points (same options).

Mode Role in the ecosystem
Standalone (home-manager / homeConfigurations) Independent user profile; only choice on non-NixOS / non-Darwin
NixOS module (home-manager.nixosModules.home-manager) User profiles rebuild with nixos-rebuild
nix-darwin module (home-manager.darwinModules.home-manager) Same shape on Darwin with darwin-rebuild

Mode choice and flake wiring: Standalone vs NixOS module.

Release track. Developed against nixpkgs-unstable; stable users pin matching release-YY.MM branches so HM and Nixpkgs stay aligned (e.g. release-26.05 next to NixOS 26.05, as of 2026-07). New modules usually land on unstable first.

Among module ecosystems. Like NixOS and nix-darwin, HM is a large, opinionated option catalog for a domain (the home directory). flake-parts also uses modules, but for flake outputs, not user state—orthogonal composition, not a substitute for HM.

Examples

Illustrative contrast: system vs home option trees (not a full install):

# NixOS module (host) — from nixpkgs
{ services.openssh.enable = true; }

# Home Manager module (user) — from home-manager
{ programs.git.enable = true; home.packages = [ pkgs.htop ]; }

Embedding HM inside NixOS (landscape shape only):

imports = [ home-manager.nixosModules.home-manager ];
home-manager.users.alice = import ./home.nix;

For concrete standalone vs embedded flakes and activation commands, see Standalone vs NixOS module.

References

See also