Documentation Index
Fetch the complete documentation index at: https://mintlify.com/soriphoono/homelab/llms.txt
Use this file to discover all available pages before exploring further.
The Home Manager modules provide a comprehensive set of configuration options for managing user environments across NixOS systems. These modules are organized into two main categories: core functionality and user applications.
Module Structure
Home Manager modules are located in modules/home/ and are organized as follows:
modules/home/
├── core/ # Essential system configuration
└── userapps/ # User-facing applications
Core Modules
Core modules provide essential functionality that forms the foundation of your home environment:
- Git Configuration - User identity, signing keys, and project organization
- GitOps - Automated home configuration sync from Git repositories
- Secrets Management - SOPS-based secret handling with age encryption
- Shell Configuration - Fish shell, Starship prompt, and Fastfetch
- SSH Management - Key deployment and SSH agent configuration
- Health Checks - Environment validation and warnings
Learn more about core modules →
User Applications
User application modules provide opt-in configurations for common software:
- Browsers - Firefox, LibreWolf, Chrome, Floorp
- Communication - Discord/Vesktop
- Development Tools - Neovim, VSCode, AI agents, terminals
- Data Fortress - Bitwarden, Nextcloud
- Office Suite - Productivity applications
Learn more about user applications →
Usage Example
Home Manager modules are configured in your user’s homes/<username>/default.nix:
{pkgs, ...}: {
# Core configuration
core = {
secrets = {
enable = true;
defaultSopsFile = ./secrets.yaml;
};
git = {
userName = "soriphoono";
userEmail = "soriphoono@gmail.com";
};
};
# Optional applications
userapps.development.editors.neovim.settings = import ./nvim {inherit pkgs;};
}
Key Features
Modular Design
Each module is self-contained with its own options and configuration logic. Enable only what you need.
Type-Safe Configuration
All options are strongly typed using NixOS module system types, providing validation and documentation.
Declarative Management
Your entire home environment is declared in Nix, making it reproducible across machines.
XDG Integration
Modules follow XDG Base Directory specifications and integrate with system MIME types.
Common Patterns
Priority-Based Defaults
Many modules (browsers, editors) support priority values to determine which application becomes the default:
userapps = {
browsers = {
librewolf.enable = true; # priority = 10 (highest)
firefox.enable = true; # priority = 20
chrome.enable = true; # priority = 100 (fallback)
};
};
Lower priority values win. This allows multiple applications to be installed while controlling which is the default.
Secrets Integration
Core modules integrate with the secrets system automatically:
core = {
secrets.enable = true;
ssh.publicKey = "ssh-ed25519 ...";
};
# SSH private keys are automatically provisioned from secrets
Shell Customization
Shell aliases and environment variables are centralized:
core.shells = {
shellAliases = {
g = "git";
k = "kubectl";
};
sessionVariables = {
EDITOR = "nvim";
};
};
Next Steps