The home manager is a set of modules that declaratively define per user configuration for stuff like installed programs and packages.


Packages

Packages can be installed without configuration with home.packages:

{pkgs, ...}: {
	home.packages = with pkgs; [
		cowsay
	];
}

Configurable Programs

Many packages are available as programs with their own config options handled by nix which are then translated into the native configuration language (JSON, TOML, etc).

# Enable gnu privacy guard
# https://gnupg.org/
programs.gnupg.agent = {
	enable = true;
	enableSSHSupport = true;
};

Home settings

There are many user level configuration options available in home manager used for many settings from calendars to environment variables.

For example, configuring some user settings might look like:

home.username = "luke";
home.homeDirectory = "/home/luke";
home.stateVersion = "24.11";

A full list of options can be found here.