Files
2025-11-15 23:45:33 +08:00

3.1 KiB

Home-Manager Configuration

This directory contains a refactored, modular home-manager configuration organized by program/tool.

Directory Structure

home-manager/
├── home.nix              # Main entry point with all imports
├── common.nix            # Base configuration (overlays, minimal packages)
│
├── platform/             # Platform-specific configurations
│   ├── darwin.nix        # macOS-specific settings
│   └── linux.nix         # Linux-specific settings
│
└── modules/              # Modular configurations by program/tool
    ├── git.nix           # Git configuration (unified from old common + development)
    ├── shells.nix        # Bash, Zsh, Fish configurations
    ├── cli-tools.nix     # Modern CLI tools (ripgrep, fd, bat, etc.)
    ├── terminal-emulators.nix  # Terminal emulator configs (Alacritty)
    ├── editors.nix       # Text editor configs (Neovim)
    ├── multiplexers.nix  # Terminal multiplexers (tmux)
    └── dev-tools.nix     # Development tools (gh, lazygit, direnv)

What Changed?

Problems Solved

  1. Git configuration conflict: Previously, both common.nix and development.nix configured programs.git, causing conflicts. Now unified in modules/git.nix

  2. Package duplication: Tools like ripgrep and fd were listed in multiple files. Now centralized in modules/cli-tools.nix

  3. Unclear module boundaries: development.nix mixed version control, build tools, and editors without clear purpose. Now split into focused modules.

  4. Mixed concerns: terminal.nix contained terminal emulator + CLI tools + text editor + tmux. Now properly separated.

File Mapping

Old File New Location
development.nix → Split into modules/git.nix and modules/dev-tools.nix
shell.nix modules/shells.nix
terminal.nix → Split into modules/terminal-emulators.nix, modules/editors.nix, modules/multiplexers.nix, and modules/cli-tools.nix
common.nix → Simplified (git config moved to modules/git.nix, CLI tools to modules/cli-tools.nix)
darwin.nix platform/darwin.nix
linux.nix platform/linux.nix

Benefits

  • Clear separation of concerns: Each module has a single, well-defined purpose
  • No more conflicts: Git is configured in one place
  • No duplication: Packages appear once
  • Easy to find things: Need to configure git? Check modules/git.nix
  • Easy to disable features: Comment out imports in home.nix
  • Platform-specific code isolated: macOS and Linux configs clearly separated

Usage

To disable a feature, simply comment out its import in home.nix:

imports = [
  ./common.nix
  ./platform/darwin.nix
  ./platform/linux.nix
  ./modules/git.nix
  ./modules/shells.nix
  # ./modules/multiplexers.nix  # Disable tmux
  # ...
];

Next Steps

  1. Configure your git identity in modules/git.nix (lines 11-13)
  2. Enable/disable optional packages in each module as needed
  3. Add new modules following the same pattern (one file per program/tool category)