AKA "dotfiles"
This repo is designed to be checked out to $XDG_CONFIG_HOME.
See XDG Base Directory Specification for more.
I try to follow XDG conventions, but this is a mac-centric config.
The following are used for managing dependencies and installation.
The install task will attempt to bootstrap these things if they are missing.
The default $XDG_CONFIG_HOME dir is ~/.config,
and that is where we will install.
Note that
$XDG_CONFIG_HOMEdoes not have not to be set yet. Installation will attempt to configure it for you, which will require admin credentials.
If you have no config dir yet:
mkdir ~/.config
cd ~/.config
git clone git@github.com:lettertwo/config.git .
make installIf you have stuff in ~/.config already:
cd ~/.config
git init
git remote add origin git@github.com:lettertwo/config.git
git fetch
git reset origin/main
git checkout -t origin/main
make installAn update will do the following:
- pull the latest from lettertwo/config
- update Homebrew and installed dependencies
- update Sheldon and installed dependencies
- update Fisher and installed dependencies
- update Neovim and installed dependencies
- update Kitty
cd ~/.config
make updateThe git/config will try to include a git/user config file.
I do it this way to avoid having to modify the git/config file
with any settings that aren't shareable.
You can add your own user and other settings to git/user like this:
touch ~/.config/git/user
git config --file ~/.config/git/user user.name "Your Name Here"
git config --file ~/.config/git/user user.email "your@email.here"
git config --file ~/.config/git/user credential.helper osxkeychainClaude Code is not XDG-aware — it defaults to ~/.claude. We point it at
~/.config/claude instead via CLAUDE_CONFIG_DIR (set in fish/conf.d/claude.fish), so
its config is tracked here directly with no symlinks. Claude writes all of its runtime
state into that directory too; an allowlist claude/.gitignore keeps everything except the
portable config out of git.
On a new machine — or when switching a machine that still has a real ~/.claude — run
make claude (after quitting all Claude sessions). The ~/.claude target relocates any
existing runtime state into ~/.config/claude and replaces ~/.claude with a fallback
symlink so GUI/IDE launches that don't inherit CLAUDE_CONFIG_DIR still resolve here. It's
idempotent and refuses to relocate while Claude is open.
Never run
git clean -fdx/-fdXin this repo — the-x/-Xflag deletes the gitignored Claude runtime state (history, projects, sessions). Plaingit clean -fdis safe.