Personal macOS dotfiles. Shell: zsh + Oh My Zsh. Terminal: cmux. AI: Claude Code.
On a fresh Mac, git isn't available until Xcode CLI tools are installed. Open Terminal and run:
xcode-select --installWait for it to finish, then:
git clone https://github.com/qxhu/dotfiles.git ~/projects/dotfiles
cd ~/projects/dotfiles
./setup.shTo update an existing machine after this repository changes:
cd ~/projects/dotfiles
git pull --ff-only
./setup.shRe-running setup refreshes symlinks; updates Homebrew packages, Oh My Zsh, TPM,
and tmux plugins; and reapplies macOS defaults only when macos.sh changes.
Run a non-mutating health check at any time:
./setup.sh --checksetup.sh will:
- Install Xcode CLI tools (if missing)
- Install Homebrew, 1Password if missing, and run
brew bundle - Prompt for git identities (per-profile)
- Symlink all configs into place
- Validate that 1Password exposes the expected SSH keys
- Set Homebrew zsh as default shell
- Install tmux plugin manager, uv-managed Python, fzf shell integration
.zshenv # Loaded first; XDG dirs and tool env vars
.zprofile / .bash_profile # PATH setup
AGENTS.md # Repository guidance for AI coding agents
.config/
1Password/ssh/agent.toml # SSH keys exposed by the 1Password agent
zsh/.zshrc # zsh config (completions, history, plugins)
cmux/settings.json # cmux terminal config
git/config # Git config (multi-profile support)
git/ignore # Global gitignore
git/qxhu # Portable qxhu GitHub no-reply identity
git/qxhu-signing.pub # Public key used for verified commit signing
git/allowed_signers # Trusted signer for local signature verification
claude/
CLAUDE.md # Global Claude Code instructions
settings.json # Claude Code preferences
keybindings.json # Claude Code keybindings
commands/ # Shared slash commands / skills
conf_docker.sh # Docker aliases (source manually)
conf_python.sh # Python config (PIP_REQUIRE_VIRTUALENV, gpip)
.ssh/config # SSH config (keys not tracked)
.tmux.conf # Tmux (remote/SSH sessions only)
Brewfile # Declarative package list
setup.sh # Bootstrap script
| Tool | Purpose |
|---|---|
| cmux | Terminal multiplexer for local dev |
| tmux | Multiplexer for remote/SSH sessions only |
| Raycast | App launcher |
| Oh My Zsh | Shell framework and prompt |
| fzf + zoxide | Fuzzy find + smart cd |
| ripgrep + bat + eza | Better grep, cat, ls |
| git-delta | Syntax-highlighted diffs |
| zsh-autosuggestions | Fish-style inline history suggestions |
| zsh-syntax-highlighting | Command coloring before you hit enter |
| zsh-history-substring-search | ↑/↓ searches history by typed prefix |
| Claude Code | AI coding assistant (installed via brew cask) |
- Restart terminal
- In 1Password, enable Settings > Developer > Use the SSH agent if setup warns that it is unavailable
- Authenticate GitHub:
gh auth login - Run
claudeto authenticate with Anthropic - Import Raycast settings (extensions + hotkeys): Raycast → Settings → Advanced → Import, select
.config/raycast/settings.rayconfig. This is import-only — Raycast can't load it via symlink, so re-export to update.