Managing Personal Dotfiles with Yadm
This skill manages personal dotfiles using yadm (Yet Another Dotfiles Manager).
Note: For work-specific dotfiles (Spotify GHE), use the managing-work-dotfiles skill with yadm-work commands.
Repository Info
-
Remote: Your dotfiles git repository
-
Work tree: $HOME
-
Yadm repo: ~/.local/share/yadm/repo.git
Getting Current State
Always start by checking the current state:
yadm status # Show modified/staged files yadm ls-files # List all tracked files yadm diff # Show unstaged changes
Managed Files Reference
Run yadm ls-files to get the authoritative list. Common categories:
Category Files
Shell .config/fish/ (config.fish, aliases, env, functions, keybindings, plugins)
Editor .vimrc , Library/Application Support/Code/User/ (settings.json, keybindings.json)
Terminal .tmux.conf , .config/ghostty/config , .config/starship.toml
Git .gitconfig , .gitignore , .gitmodules
Claude .claude/skills/ (commit, creating-pull-requests, managing-dotfiles)
Yadm .config/yadm/ (bootstrap, hooks, README, install-hooks.sh)
Other .config/bat/config , .config/ruff/pyproject.toml , .duti , .hushlogin , Caddyfile
Core Operations
Pull from Remote
yadm pull
If merge conflicts occur:
-
Run yadm status to see conflicted files
-
Edit files to resolve conflicts (remove conflict markers)
-
Stage resolved files: yadm add <file>
-
Complete the merge: yadm commit
Commit and Push Changes
yadm add <file> # Stage specific file yadm add -u # Stage all modified tracked files yadm commit -m "message" # Commit with message yadm push # Push to remote
Commit conventions (from commit skill):
-
No AI/Claude attribution
-
No Co-Authored-By headers
Modify Configuration Files
When asked to modify a config (e.g., "update tmux to do X"):
-
Find the relevant file: yadm ls-files | grep -i tmux
-
Read and understand the current config
-
Make the requested changes
-
Stage, commit, and push: yadm add <modified-file> yadm commit -m "Update <config> to <what was changed>" yadm push
Adding/Removing Files
Add a new file to tracking
yadm add <new-file> yadm commit -m "Add <file> to dotfiles" yadm push
Stop tracking a file (without deleting it)
yadm rm --cached <file> yadm commit -m "Stop tracking <file>" yadm push
Pre-commit Hooks
Pre-commit is configured via ~/.pre-commit-config.yaml . Hooks check for:
-
Private keys and secrets
-
Large files (>500KB)
-
Trailing whitespace
-
Merge conflicts
Run manually:
yadm enter pre-commit run --all-files
If a commit fails due to pre-commit fixes, stage the fixes and retry.
Self-Management
This skill is itself tracked by yadm at ~/.claude/skills/managing-dotfiles/ .
When updating this skill:
-
Make changes to the skill files
-
Commit with yadm: yadm add ~/.claude/skills/managing-dotfiles/ yadm commit -m "Update managing-dotfiles skill" yadm push
When files are added/removed from yadm tracking, update the "Managed Files Reference" section above if the categories change significantly.
Useful Commands
See yadm-command-reference.md for a quick reference of common yadm commands.
Bootstrap (New System Setup)
On a new system after cloning:
yadm bootstrap
This runs ~/.config/yadm/bootstrap which installs Homebrew, uv, vim-plug, and other dependencies.