Finally, Dotfiles I Actually Like
Christina Chan |
I've never been able to maintain dotfiles. Every few years I'd start fresh, copy-paste configs from random GitHub repos, forget what half of it did, and abandon everything when something broke. Setting up a new laptop was something I actively dreaded.
So I pointed Claude Code at my mess. The result is at github.com/cchawn/dotfiles. Friends have started using it to bootstrap their own setups, which is wild considering my previous dotfiles were graveyards of half-finished configs.
The Commit History Tells the Story
My git log is embarrassing. The repo starts in April 2020 with first commit,
followed by zsh, then .git (yes, those are the actual messages). Two years
later: chore: updated config. Then nothing until 2024, where I added a custom
theme, deleted it, tried asdf, switched to mise, gave up, and went back to
random version managers. 😅
Then in 2025, I started using Claude Code:
2025-07-17 feat: add mise
2025-07-17 feat: add .gitignore_global
2025-07-31 chore: reorganize files
2025-07-31 feat: better git config
2025-07-31 feat: better ghostty config
2025-08-08 feat: add .claude files
2025-08-24 feat: add install script
2025-08-26 fix: add gpg signing and alphabetize .gitconfig
2025-10-23 feat: add zed config
More meaningful commits in three months than the previous four years combined. Each one was a deliberate improvement I understood, not a copy-paste I hoped would work.
How I Built It
Reorganizing the Mess
Claude's first suggestion was simple: separate configs by tool into a config/
directory instead of scattering everything in the root.
config/git/,config/ghostty/,config/starship.toml,config/mise/zsh/for shell configurationprivate/for work-specific settings (git-ignored)
The Install Script
My previous READMEs said things like "copy these files to your home directory." I asked Claude for a script that handles symlinks, backs up existing files, and doesn't break if I run it twice.
None of this happened in one session. The private/ directory came after I ran
the install script on my work laptop and realized half my settings assumed my
personal machine. The template system came after I accidentally pushed a commit
with my work email:
if [[ ! -f "$DOTFILES_DIR/private/git/user.gitconfig" ]]; then
log "Creating user git config from template..."
cp "$DOTFILES_DIR/config/git/user.gitconfig.template" \
"$DOTFILES_DIR/private/git/user.gitconfig"
echo "⚠️ Please edit with your git user details"
fi
The good solutions came from me hitting real problems on real machines and then asking Claude how to fix them.
Claude Code Skills
The most recent additions are skills — custom commands for Jira and Sentry so I can ask questions about tickets or errors without leaving my terminal. The dotfiles repo now extends the tool I used to build it.
The Tools
- Ghostty: A colleague suggested Ghostty. The config is just a text file instead of a preferences pane. Sold.
- mise: Replaced my grab-bag of version managers for Node, Python, Ruby, and Deno. Also handles Claude Code.
- Starship: I went overboard with a custom Dracula theme and emoji git status (🌷 for up-to-date, 💀 for diverged, 💅 for staged). It's more playful than minimal, but it's mine, and I love her!
Learnings
My first attempts were too vague ("write an install script") and missed edge cases. When I got specific ("back up existing files, support dry-run mode, make it idempotent"), the output was immediately usable.
I actually understand my setup now. When Claude suggested a tool, I'd ask why. "Why mise instead of asdf?" "What does this zsh option do?" This turned config generation into a conversation.
My favourite trick: asking Claude to "show me your source." When it suggests a git config option, I ask for documentation links. It runs a web search and gives me the actual docs. This caught a few hallucinated options.
I still tested everything myself. Claude doesn't know my macOS version or what's in my home directory. Trust, but verify.
The Results
github.com/cchawn/dotfiles — 73 commits and counting. For the first time in a decade of trying, I know what all of it does. More importantly, I'm not dreading the next laptop setup. 😌