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 configuration
  • private/ 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. 😌


Recent Posts

AI for Bulk Changes

Reading List (2023)

;