This is my personal dotfiles repository. It contains my configuration files for various programs and tools. I use this repository to keep my dotfiles in sync across multiple machines.
Main tools used:
- Brew
- Git
- Fish / Fisher
- Starship
Only home/ is stowed, and it mirrors $HOME. Everything else (scripts/, docs, license) stays in the repo.
The repo has to live at ~/projects/personal/dotfiles. Both scripts/setup.sh and
home/.config/fish/conf.d/stow.fish hardcode that path.
Install Homebrew first:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"Clone over HTTPS, not SSH. The insteadOf rule in home/.config/git/config rewrites HTTPS to SSH, but that
config is not linked into $HOME until stow has run:
mkdir -p ~/projects/personal
git clone https://github.com/seanogdev/dotfiles.git ~/projects/personal/dotfiles
cd ~/projects/personal/dotfiles
./scripts/setup.shscripts/setup.sh installs stow, symlinks home/ into $HOME, installs the .Brewfile packages, copies
the iCloud fonts, and sets fish as the default shell.
Two things are not in the repo and need doing by hand afterwards:
- The private files and skills live in the iCloud Store at
~/Library/Mobile Documents/com~apple~CloudDocs/Code/dotfiles/. Runstow-icloud. - The managed skills from
.Skillfile. Runskills-restore.
Two personal skills live at home/.agents/skills/<name>/SKILL.md in this repo: manage-skills and
manage-stow. Both are dotfiles-specific tooling — they reference this repo's own fish functions
and layout — so they stay here rather than in a general-purpose skills repo. home/.claude/skills/<name>
is a symlink to ../../.agents/skills/<name>, stowed into $HOME.
The rest of the personal skills (address-review, prune-merged-branches,
quote-clip) live in seanogdev/skills. On this machine
they're tracked in .Skillfile and installed via gh skill, the same as any other third-party
skill — see the manage-skills skill.
cd ~/projects/personal/dotfiles
git pull
stow-local # only needed when files were added or renamedIf git pull reports diverged histories, the remote history was rewritten. Nothing is wrong with
your clone; it is holding commits that no longer exist. Check for local work you have not pushed,
then take the remote copy:
git stash list; git status # check first
git fetch origin
git reset --hard origin/main
stow-localThe files in $HOME are symlinks into this repo, so a reset changes them in place. No relinking is
needed unless paths moved.