The repo is the source of truth. Edit files here, then run ./install.sh to
copy them into ~. (No symlinks — install.sh copies, skips identical files,
and shows a diff before asking to replace a changed file. Removed lines are
from the installed copy; added lines are from the repo.)
Clone the repo and run the install script:
git clone https://github.com/sarink/dotfiles.git ~/dotfiles
cd ~/dotfiles
./install.sh
This copies the shell, vim, and tmux dotfiles into ~, the Claude Code
config into ~/.claude, and the Codex config into ~/.codex. To update
your home copies after editing anything in the repo, just run ./install.sh
again.
.zprofile (login shells) sets up Homebrew; .zshrc (interactive shells)
loads the shared fragments, initializes native zsh completion, activates
mise for Node/Ruby/Python, and sets the prompt.
Everything in this repo is meant to be portable across machines. Anything
specific to one Mac (extra PATH entries for locally installed tools, work
env vars, one-off aliases) goes in ~/.zshrc.local, which .zshrc sources at
the very end if the file exists. It is not tracked here and not touched by
install.sh — create it by hand on each machine that needs it:
echo 'export PATH="$HOME/go/bin:$PATH"' >> ~/.zshrc.local
.zshrc.local is not a zsh built-in, just a common convention; it only works
because of the source line at the bottom of .zshrc.
- Completion is native zsh (
compinit). The old vendored bash completion files (git,tmux,brew) were removed — zsh ships better ones. Homebrew's zsh completions are picked up via$fpath. - Version management uses
miseinstead ofnvm. To make it honor existing.nvmrcfiles (in addition to.tool-versions/mise.toml), run once:mise settings add idiomatic_version_file_enable_tools node - The shared fragments are POSIX-ish and also work if sourced from bash; only the prompt and completion are zsh-specific.
install.sh copies .vimrc. Then clone vundle:
git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim
Open vim, run :VundleInstall to install vim plugins (official vundle docs).
install.sh copies .tmux.conf. Then clone the tmux plugin manager:
git clone [email protected]:tmux-plugins/tpm ~/.tmux/plugins/tpm
Open tmux, run <prefix>I (probably ctrl-aI) to install tmux plugins (official tpm docs).
claude/ mirrors ~/.claude/ — install.sh copies every file in it:
settings.json— Claude Code settingsstatusline.sh— status line scriptskills/— personal skills (/eli5,/id,/qq,/screenshot, and/ponytailwith its-review,-audit,-debt,-help: MIT, from DietrichGebert/ponytail, changed to run only when invoked and only for that request)
Claude Code separates settings from instructions: ~/.claude/settings.json
controls settings and hooks, while ~/.claude/CLAUDE.md holds user-level
instructions for all projects. To carry standing instructions across machines,
add claude/CLAUDE.md here; the installer will copy it automatically.
Project settings live in .claude/settings.json; personal project overrides
live in .claude/settings.local.json.
Paths in settings.json use ~/.claude/..., never an absolute home dir, so
they work on any machine.
Claude Code also writes to ~/.claude/settings.json itself (most /config
options, the /model default). Copy anything you want to keep back into the
repo before running install.sh — answering y replaces the file:
diff ~/.claude/settings.json claude/settings.json
cp ~/.claude/settings.json claude/settings.json
codex/ mirrors ~/.codex/ — install.sh copies every file in it:
AGENTS.md— user-level instructions, including creating Git worktrees in<repo folder>/.codex/worktrees/<worktree-name>under the primary checkout.config.toml— portable settings: no approval prompts and no alternate screen.skills/— Codex versions of all nine Claude skills:$eli5,$id,$qq,$screenshot,$ponytail,$ponytail-review,$ponytail-audit,$ponytail-debt, and$ponytail-help. The first four require explicit invocation;$qqstays read-only until explicitly released. Ponytail applies only to the request where it is invoked.
Edit the files in codex/ here and run ./install.sh on each machine after
pulling the repo. Start a new Codex session to load updated settings and instructions.
The installer currently targets the default ~/.codex location; a custom
CODEX_HOME needs the instructions installed there instead.
AGENTS.md guides agent behavior; it does not configure the desktop app's
managed worktree location. config.toml sets approval_policy = "never" and
tui.alternate_screen = "never"; sandbox permissions are configured separately.
The installer asks before replacing an existing ~/.codex/config.toml and
copies the whole file, without merging. Review any local settings you want to
retain before accepting the replacement. Keep credentials, session history,
and machine-specific project trust entries out of this repo.