# Dotfiles Management ## Create new bare repo ### 1. Initialize a bare repo in your home directory `git init --bare $HOME/.dotfiles` ### 2. Create an alias (add this to your .bashrc / .zshrc) `alias config='git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME'` ### 3. Hide untracked files (so 'config status' isn't noisy) `config config --local status.showUntrackedFiles no` ### 4. Start tracking files `config add ~/.config/nvim/init.lua` `config add ~/.config/alacritty/alacritty.toml` `config commit -m "Add nvim and alacritty config"` `config push` ## Clone to a new machine ### Clone repo `git clone --bare https://github.com/you/dotfiles.git $HOME/.dotfiles` ### Set up the alias again, then checkout `alias config='git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME'` `config checkout` ### If there are conflicts with existing files, back them up first `mkdir -p ~/.config-backup && \` `config checkout 2>&1 | grep "\s\+\." | awk '{print $1}' | \` `xargs -I{} mv {} ~/.config-backup/{}` ``` ## Key Principles **What to track selectively** — don't blindly add all of `~/.config`. Be intentional: - ✅ App configs you've customized (nvim, tmux, git, zsh, etc.) - ❌ Secrets, tokens, credentials (use `.gitignore` or a secrets manager) - ❌ Cache dirs (`~/.config/*/Cache`, `~/.config/*/logs`) - ❌ Machine-specific state files **Use a `.gitignore`** at `$HOME` level: ``` .config/*/Cache .config/*/cache .config/**/sessions .config/chromium # browser data