macOS setup for my terminal and dev tools. Bare repo at ~/dots, work tree
$HOME. No Homebrew: official installers or prebuilt binaries only. When a
tool is installed, add it here.
xcode-select --install
git config --global user.name "<name>"
git config --global user.email "<email>"
ssh-keygen -t ed25519 -C "<email>"
Add the public key to GitHub, and to ~/.ssh/config:
Host github.com
AddKeysToAgent yes
UseKeychain yes
IdentityFile ~/.ssh/id_ed25519
Prebuilt gh from github.com/cli/cli releases (macOS arm64 zip), copied to
~/.local/bin/gh. Then gh auth login (choose SSH).
git clone --bare git@github.com:dbuddha/dotfiles.git $HOME/dots
alias config='/usr/bin/git --git-dir=$HOME/dots/ --work-tree=$HOME'
config checkout
config config --local status.showUntrackedFiles no
exec zsh
If checkout reports conflicts, move those files aside and run it again.
~/.gitignore ignores everything except an allowlist: add a !path line
to track a new file.
Keep tokens in an untracked ~/.secrets (export NAME=value lines);
.zprofile sources it first. Never put a token in .zshrc or .zprofile:
both are tracked and this repo is public.
curl -L https://github.com/libevent/libevent/releases/download/release-2.1.12-stable/libevent-2.1.12-stable.tar.gz -o /tmp/libevent.tar.gz
tar xzf /tmp/libevent.tar.gz -C /tmp && cd /tmp/libevent-2.1.12-stable
./configure --prefix=/usr/local --disable-shared && make && sudo make install
Then download the latest tmux release tarball from github.com/tmux/tmux,
./configure --prefix=$HOME/.local && make && make install. Check tmux -V.
- vim: macOS ships 9.1 at
/usr/bin/vim. - Alacritty:
.dmgfrom github.com/alacritty/alacritty releases. - Font:
cp ~/.config/fonts/JetBrainsMonoNLNerdFont-Regular.ttf ~/Library/Fonts/(family "JetBrainsMonoNL Nerd Font"). - Theme:
~/.config/theme/generate.shwrites the glitchberry files for Alacritty, vim and tmux.
- Rust:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y(.zprofilesources~/.cargo/envafterpath_helper). - Node: nvm (
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/master/install.sh | bash), thennvm install --ltsandnpm install -g pnpm. - bun:
curl -fsSL https://bun.sh/install | bash. - uv:
curl -LsSf https://astral.sh/uv/install.sh | sh, thenuv python install 3.12anduv tool install modal.
- gcloud: Google's installer into
~/.local/share/google-cloud-sdk..zshrcsources its path and completion files and setsCLOUDSDK_PYTHONto uv's Python 3.12 (macOS Python is too old). - kubectl, helm, tilt, tectonic: prebuilt binaries in
~/.local/bin. - tsh (Teleport): official macOS package, installs
/usr/local/bin/tsh. - OrbStack: official app (Docker);
dockerandorblive in~/.orbstack/bin. - Postgres.app: official app;
.zprofileadds itsbintoPATH.
- Claude Code: official installer (
~/.local/bin/claude). In~/.claude/settings.json:attributionwith emptycommitandpr,pluginConfigs."agents-md@builtin".options.instructionFiles = "claude-md-and-agents-md",autoMemoryEnabled: false. - Codex: ships with the ChatGPT app. In
~/.codex/config.toml:project_root_markers = [".agents-root"]andproject_doc_fallback_filenames = ["CLAUDE.md"]; put an empty.agents-rootat the top of the workspace (~/dev). - Cursor CLI (
agent): official installer (~/.local/bin/agent). Commit and PR attribution off in~/.cursor/cli-config.json.
gh --version; config status; tmux -V; vim --version | head -1
cargo -V; node --version; pnpm --version; bun --version; uv --version
gcloud --version | head -1; kubectl version --client; tsh version; docker version