Repository Layout
Dotfiles organization with rcm.
Structure
dotfiles/
├── rcrc # -> ~/.rcrc
├── zshrc # -> ~/.zshrc
├── zimrc # -> ~/.zimrc
├── gitconfig # -> ~/.gitconfig
├── tmux.conf # -> ~/.tmux.conf
├── editorconfig # -> ~/.editorconfig
│
├── config/ # -> ~/.config/
│ ├── nvim/ # Neovim configs (NVIM_APPNAME)
│ │ ├── lazyvim/ # nvim/lazyvim
│ │ └── nvchad/ # nvim/nvchad
│ ├── kitty/
│ ├── alacritty/
│ └── htop/
│
├── zsh/ # Sourced by zshrc, not symlinked
│ ├── zimrc
│ └── functions/
│
├── tmux/ # Sourced by tmux.conf
│ └── conf/
│
├── git/ # Included by gitconfig
│ ├── aliases.gitconfig
│ ├── colors.gitconfig
│ └── delta.gitconfig
│
├── tag-macos/ # macOS-specific
│ └── config/karabiner/
│
├── tag-linux/ # Linux-specific
│ └── config/i3/
│
├── tag-server/ # Server overrides (minimal configs)
│ ├── zshrc
│ └── tmux.conf
│
├── macos/ # Setup scripts (not symlinked)
│ ├── setup.sh
│ └── defaults.sh
│
└── packages/ # Package management (not symlinked)
├── install.sh
├── macos/
├── arch/
└── debian/
How rcm works
Files at repo root get symlinked to $HOME with a dot prefix:
zshrc->~/.zshrcgitconfig->~/.gitconfig
The config/ directory becomes ~/.config/:
config/nvim/lazyvim/->~/.config/nvim/lazyvim/config/nvim/nvchad/->~/.config/nvim/nvchad/config/kitty/->~/.config/kitty/
Use NVIM_APPNAME=nvim/lazyvim to switch neovim configs (see Neovim).
Support directories
zsh/, tmux/, git/ contain files that are sourced or included by the main configs. Not symlinked directly - referenced by full path:
# in ~/.zshrc
source ~/workspace/dotfiles/zsh/functions/utils.sh
Tags
Tags add machine-specific configs:
| Machine | Tags | What’s added |
|---|---|---|
| macOS | desktop macos | Karabiner |
| Linux | desktop linux | i3 |
| Server | server | Minimal zshrc/tmux |
Set tags in ~/.rcrc.local:
TAGS="desktop macos"
Excluded from rcm
packages/- Managed by install.shmacos/- Setup scriptsdocs/- Documentation*.mdfiles
Common tasks
# Edit directly
vim ~/.zshrc
# Add existing file to dotfiles
mkrc -o ~/.config/newapp/config.toml
# Sync on another machine
git pull && rcup