Home Manager
2 min read
This project provides a basic system for managing a user environment using the Nix package manager together with the Nix libraries found in Nixpkgs. It allows declarative configuration of user specific (non-global) packages and dotfiles.

Install
Standalone

Run with: nix run home-manager -- switch

Nixos Module

nix
{
description = "Nixos flake";

inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";

home-manager = {
url = "github:nix-community/home-manager";
inputs.nixpkgs.follows = "nixpkgs";
};
};

outputs =
{
self,
nixpkgs,
home-manager,
...
}:
{
nixosConfigurations.myhost = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
modules = [
./configuration.nix

# Integrate Home Manager as a NixOS module
home-manager.nixosModules.home-manager

{
home-manager = {
extraSpecialArgs = { inherit inputs; };
users.username = import ./home.nix;
};
}
];
};
};
}

Darwin Module

nix
{
description = "Nixos flake";

inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";

home-manager = {
url = "github:nix-community/home-manager";
inputs.nixpkgs.follows = "nixpkgs";
};

nix-darwin = {
url = "github:nix-darwin/nix-darwin/master";
inputs.nixpkgs.follows = "nixpkgs";
};
};

outputs =
{
self,
nixpkgs,
home-manager,
...
}:
{
darwinConfigurations.hostname = inputs.nix-darwin.lib.darwinSystem {
specialArgs = { inherit inputs; };
modules = [
./configuration.nix
home-manager.darwinModules.home-manager
];
};
};
}

Usage
Basic Config:

nix
# home.nix
{ config, pkgs, ... }:

{
# Home Manager needs a bit of information about you and the
# paths it should manage.
home.username = "jdoe";
home.homeDirectory = "/home/jdoe";

# This value determines the Home Manager release that your
# configuration is compatible with. This helps avoid breakage
# when a new Home Manager release introduces backwards
# incompatible changes.
#
# You can update Home Manager without changing this value. See
# the Home Manager release notes for a list of state version
# changes in each release.
home.stateVersion = "25.05";

# Let Home Manager install and manage itself.
programs.home-manager.enable = true;
}

nix
# flake.nix
{
description = "Home Manager configuration";

inputs = {
# Increment release branch for NixOS
nixpkgs.url = "github:NixOS/nixpkgs/nixos-25.05";
home-manager = {
# Follow corresponding `release` branch from Home Manager
url = "github:nix-community/home-manager/release-25.05";
inputs.nixpkgs.follows = "nixpkgs";
};
};

outputs = { nixpkgs, home-manager, ... }: {
homeConfigurations."yourusername" = home-manager.lib.homeManagerConfiguration {
pkgs = nixpkgs.legacyPackages.x86_64-linux;
modules = [ ./home.nix ];
};
};
}

To active run home-manager switch --flake .

For options see Options, Option Search.