Two configuration approaches: Local (traditional symlinks) and Nix (flake-based home-manager).
| Approach | Command | Status |
|---|---|---|
| Local | ./install.sh |
Stable |
| Nix | hms |
Active |
Flake-based home-manager setup in nix/:
nix/
├── flake.nix # Entry point
├── home/
│ ├── default.nix # Main config
│ ├── *.nix # Tool modules (tmux, shell, kitty, etc.)
│ └── scripts/ # Executable scripts (runtime)
│ └── tmux/
└── files/ # Static assets (configs, themes, wallpapers)
├── starship/
├── yazi/
└── wallpapers/
# Apply configuration
hms
# Apply a specific worktree/branch configuration
hms feat/kitty-integration
# Preview changes without applying
hms --dry-run
hms feat/kitty-integration --dry-run
# Roll back to previous generation
home-manager switch --rollback
# List all generations
home-manager generationshms supports both repository layouts:
- Without worktrees (single clone)
~/dotfiles/
nix/
lazy-vim/
hms resolves to ~/dotfiles/nix.
- With worktrees (branch-aware setup)
~/dotfiles/
master/
nix/
lazy-vim/
feat/kitty-integration/
nix/
lazy-vim/
current -> master (or another selected worktree)
hmsresolves to~/dotfiles/master/nix(fallback~/dotfiles/nix)hms feat/kitty-integrationresolves to~/dotfiles/feat/kitty-integration/nix- On successful switch,
hmsupdates~/dotfiles/currentto the selected worktree - Neovim is linked to
~/dotfiles/current/lazy-vim, so editor config follows the active worktree
Edit the relevant module in nix/home/:
- Shell tools →
dev-tools.nix - Media tools →
media.nix - Editors →
editors.nix
Then apply with hms.
Traditional symlink-based configs:
| Directory | Purpose | Target |
|---|---|---|
zsh/ |
Shell config (.zshrc, .aliases) | ~/.zshrc, ~/.aliases |
lazy-vim/ |
Neovim (LazyVim) | ~/.config/nvim |
intellij/ |
IntelliJ settings exports | Manual import |
vscode/ |
VS Code profiles | Manual import |
iterm/ |
iTerm2 preferences | Manual import |
tilix/ |
Tilix terminal (Linux) | Manual import |
tooling/ |
Custom tools (bookmarks CLI) | - |
Without worktrees:
ln -sf ~/dotfiles/lazy-vim ~/.config/nvim
ln -sf ~/dotfiles/zsh/.zshrc ~/.zshrc
ln -sf ~/dotfiles/zsh/.aliases ~/.aliasesWith worktrees:
ln -sf ~/dotfiles/current/lazy-vim ~/.config/nvim
ln -sf ~/dotfiles/current/zsh/.zshrc ~/.zshrc
ln -sf ~/dotfiles/current/zsh/.aliases ~/.aliases