Shared configuration files for Mac development setup.
- Powerlevel10k (
dot-p10k.zsh) - Zsh theme configuration - WezTerm (
dot-wezterm.lua) - Terminal configuration - Cursor (
dot-cursor-settings.json,dot-cursor-keybindings.json) - Editor settings - SizeUp (
dot-sizeup.plist) - Window management preferences - SSH Config (
dot-ssh-config) - SSH configuration with 1Password agent setup - Zsh Config (
dot-zshrc) - Shared shell configuration (aliases, PATH, conda lazy loading) - Git Config (
dot-gitconfig) - Git configuration template (user info set separately)
bootstrap_mac.sh- Main bootstrap script for setting up a new Macsetup_git.sh- Interactive Git configuration (name, email, GitHub CLI)install_dev_tools.sh- Install development tools (pixi, conda, Node.js, Rust, Go, etc.)sync_ssh.sh- SSH key setup and synchronization helperexport_brewfile.sh- Export Homebrew packages to Brewfile
SETUP_CHECKLIST.md- Comprehensive checklist for setting up a new Mac
-
Clone this repository:
git clone <your-repo-url> ~/git/dotfiles
-
Run the bootstrap script:
~/git/dotfiles/bootstrap_mac.shThis will:
- Create symlinks for all config files
- Back up any existing configs
- Verify all symlinks are correct
- Check for Homebrew and offer to install it
- Install packages from
Brewfileif it exists
-
Configure Git:
~/git/dotfiles/setup_git.sh -
Set up SSH keys:
~/git/dotfiles/sync_ssh.sh -
Install development tools (optional):
~/git/dotfiles/install_dev_tools.sh
Preview changes without applying them:
~/git/dotfiles/bootstrap_mac.sh --dry-runThe bootstrap_mac.sh script includes:
- Safe symlinking - Backs up existing files before overwriting
- Dry-run mode - Preview changes with
--dry-runor-n - Verification - Checks all symlinks after creation
- Homebrew integration - Checks for Homebrew and offers to install it
- Brewfile support - Automatically installs packages from
Brewfileif present - Idempotent - Safe to run multiple times
A complete setup for running persistent Claude AI agents on remote servers, with mobile access via mosh.
┌─────────────────────────────────────────────────────────────────┐
│ Your Mac (WezTerm) │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ Coordinator │ │ Agent 1 │ │ Agent 2 │ ← Tabs │
│ │ Tab │ │ Tab │ │ Tab │ │
│ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │
│ │ │ │ │
│ └───────────────┼───────────────┘ │
│ │ SSH │
└─────────────────────────┼───────────────────────────────────────┘
▼
┌─────────────────────────────────────────────────────────────────┐
│ Remote Server (apollo) │
│ │
│ tmux sessions: │
│ ┌─────────────────────────────────────────────┐ │
│ │ claude-myrepo-coordinator │ │
│ │ ┌─────────────────────────────────────────┐ │ │
│ │ │ watch (status) │ 25% │ │ │
│ │ ├─────────────────────────────────────────┤ │ │
│ │ │ shell (merge/review) │ 75% │ │ │
│ │ └─────────────────────────────────────────┘ │ │
│ └─────────────────────────────────────────────┘ │
│ ┌─────────────────────┐ ┌─────────────────────┐ │
│ │ claude-myrepo-agent1│ │ claude-myrepo-agent2│ │
│ │ (claude CLI running)│ │ (claude CLI running)│ │
│ └─────────────────────┘ └─────────────────────┘ │
│ │
│ Git worktrees (isolated working directories): │
│ ~/agent-workspace/myrepo/ │
│ ├── main/ ← coordinator (base branch) │
│ ├── agent1/ ← agent 1 worktree (feature branch) │
│ └── agent2/ ← agent 2 worktree (feature branch) │
│ │
└─────────────────────────────────────────────────────────────────┘
▲
│ mosh (survives network changes)
┌─────────────────────────┼───────────────────────────────────────┐
│ iPhone (Blink Shell) │ │
│ - Check agent status │
│ - Give agents new tasks │
│ - Merge completed work │
└─────────────────────────────────────────────────────────────────┘
# One-liner to set up a new server
curl -fsSL https://raw.githubusercontent.com/bigwill/dotfiles/main/bootstrap_claude_server.sh | bash
# Start new shell
exec zsh
# Initialize a workspace
cw init myproject git@github.com:user/myproject.git main
# Start the coordinator
cw new myproject mainThe WezTerm keybindings are set up automatically when you run bootstrap_mac.sh.
| Keybinding | Action |
|---|---|
CMD+SHIFT+C |
Create new Claude workspace (prompts for repo/branch) |
CMD+SHIFT+N |
Add new agent tab (prompts for task name) |
CMD+SHIFT+W |
Wrap up agent (merge branch, cleanup) |
- Install Blink Shell and Tailscale from App Store
- Set up SSH key with Face ID (Secure Enclave) in Blink
- Add public key to server's
~/.ssh/authorized_keys - Connect:
mosh yourserver - Use CLI commands:
cw status,cw agent taskname, etc.
Run these on the server (or via cw wrapper from Mac):
| Command | Description |
|---|---|
cw status |
Show all sessions and worktrees |
cw new <repo> <branch> |
Create coordinator session |
cw agent [name] |
Create/attach to agent (prompts if no name) |
cw wrapup [name] |
Merge agent branch and cleanup |
cw coord |
Attach to coordinator |
cw kill <name|all> |
Kill session(s) |
cw init <repo> <url> [branch] |
Initialize workspace from git |
# 1. On Mac: Create workspace (CMD+SHIFT+C)
# Or from terminal:
ssh apollo
cw new abax-kryptos rust-ckks-system
# 2. Add agents (CMD+SHIFT+N or from terminal)
cw agent ckks-encoder # Creates branch: rust-ckks-system-ckks-encoder
cw agent poly-tests # Creates branch: rust-ckks-system-poly-tests
# 3. In each agent tab, run claude CLI and assign tasks
claude
# "Implement the CKKS encoder from section 2 of PLAN.md"
# 4. Close laptop - agents keep running in tmux!
# 5. Check from iPhone
mosh apollo
cw status
cw agent ckks-encoder # Reattach to see progress
# 6. When agent is done, merge from coordinator
cw coord
# In bottom pane:
git diff main..rust-ckks-system-ckks-encoder
git merge rust-ckks-system-ckks-encoder
# 7. Cleanup completed agent
cw wrapup ckks-encoder| File | Location | Purpose |
|---|---|---|
dot-wezterm.lua |
Mac ~/.wezterm.lua |
WezTerm keybindings |
dot-zshrc |
Mac ~/.zshrc |
Mac-side cw wrapper |
dot-zshrc-claude |
Server ~/.zshrc |
Server-side cw CLI |
bootstrap_claude_server.sh |
Run on server | Full server setup |
Inside a tmux session:
| Shortcut | Action |
|---|---|
Ctrl+B d |
Detach (session keeps running) |
Ctrl+B o |
Switch between panes |
Ctrl+B z |
Zoom current pane (toggle) |
Ctrl+B [ |
Scroll mode (q to exit) |
Ctrl+B ↑/↓ |
Move to pane above/below |
Server:
- Linux (Debian/Ubuntu, RHEL, Arch)
- SSH access
- Git, tmux, mosh (installed by bootstrap script)
Mac:
- WezTerm terminal
- SSH key configured for server
iPhone (optional):
- Blink Shell app
- Tailscale (for easy remote access)
Interactive script to configure Git:
- Prompts for user name and email
- Sets git config globally
- Optionally sets up GitHub CLI authentication
Interactive installer for common development tools:
- pixi - Package manager
- Conda - Python environment manager
- Node.js - Via nvm or Homebrew
- Rust - Via rustup
- Go - Via Homebrew
- Python - Via Homebrew
- Cloud CLIs - gcloud, AWS CLI
SSH key setup helper:
- Checks for existing SSH keys
- Generates new SSH keys
- Guides copying keys from another machine
- Helps set up 1Password SSH agent
- Tests GitHub SSH connection
~/git/dotfiles/export_brewfile.shThis creates a Brewfile in the dotfiles directory.
The bootstrap script will automatically install packages from Brewfile if it exists. Or manually:
brew bundle install --file=~/git/dotfiles/BrewfileIf you prefer to set up manually:
ln -sf ~/git/dotfiles/dot-p10k.zsh ~/.p10k.zsh
ln -sf ~/git/dotfiles/dot-wezterm.lua ~/.wezterm.lua
ln -sf ~/git/dotfiles/dot-zshrc ~/.zshrc
ln -sf ~/git/dotfiles/dot-gitconfig ~/.gitconfig
ln -sf ~/git/dotfiles/dot-cursor-settings.json ~/Library/Application\ Support/Cursor/User/settings.json
ln -sf ~/git/dotfiles/dot-cursor-keybindings.json ~/Library/Application\ Support/Cursor/User/keybindings.json
ln -sf ~/git/dotfiles/dot-sizeup.plist ~/Library/Preferences/com.irradiatedsoftware.SizeUp.plist
ln -sf ~/git/dotfiles/dot-ssh-config ~/.ssh/config
chmod 600 ~/.ssh/configSome settings are machine-specific and should be configured separately:
-
Git user info - Use
setup_git.shor manually:git config --global user.name "Your Name" git config --global user.email "your.email@example.com"
-
Secrets/API keys - Store in
~/.zshenv.localor~/.zshrc.local:# These files are sourced by dot-zshrc if they exist # Keep them out of git (add to .gitignore)
-
1Password SSH Agent - Enable in 1Password:
- Settings → Developer → Enable "Use the SSH agent"
- The SSH config is already set up to use it
After running the bootstrap script, see SETUP_CHECKLIST.md for a comprehensive list of additional setup steps including:
- System preferences
- Application settings
- Development environment setup
- Cloud CLI configuration