macOS dotfiles with extensive Claude Code customization - shell config, git, Homebrew, plus Claude commands, hooks, skills, and plugins for AI-assisted development.
git clone git@github.com:Dbochman/dotfiles.git ~/dotfiles
~/dotfiles/install.sh.zshrc- Shell config with PATH and aliases.gitconfig- Git user info, LFS, sensible defaults
.codex/config.toml- Codex model and feature settings.local/bin/codex-quick- Fast Codex CLI wrapper (medium reasoning)
.claude/CLAUDE.md- Global instructions for all projects.claude/preferences.md- User preferences and working style.claude/settings.json- Hooks config, enabled plugins.claude/skills/- 14 custom skills (debugging patterns, gotchas).claude/commands/- Custom slash commands (rams, ui-skills, etc.).claude/hooks/- Pre-tool hooks (no-rm safety, continuous learning)
ssh_config- Uses 1Password SSH Agent for all hostssetup-1password.md- Guide for SSH keys and environment variables
SSH keys are stored in 1Password and served via the SSH Agent. No keys on disk.
Setup:
- Install 1Password desktop app
- Settings → Developer → Enable "SSH Agent"
- Settings → Developer → Enable "Integrate with 1Password CLI"
- Run
install.sh(links~/.ssh/config)
Secrets are stored in 1Password and accessed via op CLI. Never in dotfiles.
Install CLI:
brew install 1password-cli
op signinCommon references:
# OpenAI
export OPENAI_API_KEY=$(op read "op://Private/OpenAI API Key/password")
# GitHub
export GITHUB_TOKEN=$(op read "op://Private/GitHub Personal Access Token/token")
# Codex
export CODEX_API_KEY=$(op read "op://Private/API Credentials - Codex/credential")Per-project secrets: See setup-1password.md for direnv integration.
Install all packages from Brewfile:
brew bundle --file=~/dotfiles/BrewfileTo update Brewfile after installing new packages:
brew bundle dump --file=~/dotfiles/Brewfile --force
cd ~/dotfiles && git add Brewfile && git commit -m "Update Brewfile"The sync.sh script manages synchronization between your local Claude Code config and this repo.
./sync.sh # Show what's synced vs local-only# Created a new skill locally? Add it to the repo:
./sync.sh add skill my-new-skill
# Same for commands and hooks:
./sync.sh add command my-command
./sync.sh add hook my-hook# Remove from repo but keep your local copy:
./sync.sh remove skill experimental-skill# Pull latest changes and reinstall:
./sync.sh pull
# Push your changes:
./sync.sh push "Add new skill for X"./sync.sh undo # Restore from last backup./sync.sh validate # Check all skills, commands, hooks-n, --dry-run: Preview changes without making them-f, --force: Replace conflicts without prompting
- Copy the file to
~/dotfiles/ - Add a symlink line to
install.sh - Commit and push