From factory reset to coding in five minutes.
My personal Mac setup. One command to go from zero to a fully configured machine.
curl -fsSL https://fmontes.com/install.sh | bashThis clones the repo to ~/.dotfiles and runs the installer.
- Zsh with Oh My Zsh, Starship prompt, autosuggestions, syntax highlighting, atuin history
- Homebrew packages and casks via
Brewfile - Aliases split by context — work aliases stay local, not committed
- Git with delta for diffs, gh-dash for PR reviews
- mise for managing Node, Python, and Java versions
- helix for terminal code search and browsing
- AI skills, instructions, and subagents for agentic coding harnesses
- macOS defaults for Dock, Finder, keyboard
git clone https://github.com/fmontes/dotfiles ~/.dotfiles
cd ~/.dotfiles
./install.shThe script will:
- Install Xcode Command Line Tools
- Install Homebrew and all packages from
Brewfile - Symlink all dotfiles to
~/ - Install Oh My Zsh
- Set up mise and install Node and Python
- Apply macOS defaults
- Install gh-dash, global npm packages, fix permissions, set up cmux
- Sync AI agent config to every platform with
chai
These steps require human interaction and can't be automated:
- Install 1Password and sign in first
- Generate SSH key:
ssh-keygen -t ed25519 -C "your@email.com"and add to GitHub - Update
~/.gitconfigwith your name and email - Run
gh auth login - Run
atuin login(optional, for cross-machine history sync) - Sign in to Raycast to restore extensions
| Alias | Command |
|---|---|
g |
git |
gs |
git status |
ga |
git add |
gaa |
git add . |
gcm |
git commit -m |
gp |
git push |
gco |
git checkout |
gcb |
git checkout -b |
gbd |
git branch -d |
gl |
Git log graph (last 20) |
gll |
Git log graph (all branches) |
gcleanbranches |
Delete local branches whose remote is gone |
| Alias | Replaces |
|---|---|
cat |
bat (syntax highlighted) |
curl |
curlie (friendlier interface) |
f |
fd (faster find) |
| Alias | Command |
|---|---|
port 3000 |
Show process listening on a port |
killport 3000 |
Kill process on a port |
ports |
List all running node/bun/deno processes |
devports |
List processes on common dev ports |
killdev |
Kill all common dev ports at once |
| Alias | Command |
|---|---|
proj |
Fuzzy-jump to a project and open in Cursor |
| Alias | Command |
|---|---|
prs |
Open gh-dash PR dashboard |
| Alias | Command |
|---|---|
dotfiles |
Open dotfiles repo in Cursor |
zreload |
Reload zsh config |
| Alias | Command |
|---|---|
ct |
Launch Claude Code agent teams |
ct-continue |
Resume last agent teams session |
claude-teams |
Same as ct (full name) |
| Alias | Command |
|---|---|
cursor |
Open Cursor in a new window |
run-help |
man (show manual) |
| Tool | Description |
|---|---|
atuin |
Shell history with search and optional sync |
bat |
cat with syntax highlighting |
cloudflared |
Cloudflare tunnel client |
curlie |
Friendlier curl |
deno |
JavaScript/TypeScript runtime |
fd |
Faster find |
ffmpeg |
Audio/video processing |
flyctl |
Fly.io CLI |
fzf |
Fuzzy finder (used by proj, atuin, zsh history) |
gh |
GitHub CLI |
git-delta |
Syntax-highlighted git diffs |
helix |
Terminal editor for code search and browsing |
imagemagick |
Image processing |
jq |
JSON processor |
just |
Task runner (used in dotCMS project) |
mise |
Version manager for Node, Python, Java |
mkcert |
Local SSL certificates |
mole |
SSH tunnel manager |
mprocs |
Run multiple processes in split panes |
ripgrep |
Fast grep replacement |
starship |
Cross-shell prompt |
tlrc |
tldr client — simplified man pages |
tree |
Directory tree viewer |
wget |
File downloader |
yazi |
Terminal file manager with preview |
zoxide |
Smart cd replacement |
| App | Description |
|---|---|
1password-cli |
1Password CLI |
chai |
Sync AI agent config across platforms |
chromium + chromedriver |
Headless browser for Puppeteer |
cmux |
Claude Code agent teams |
codex |
OpenAI Codex CLI |
cursor |
AI code editor |
ghostty |
Terminal emulator |
ollama |
Run local LLMs |
orbstack |
Lightweight Docker alternative |
raycast |
Command launcher |
warp |
AI-powered terminal |
Terminal editor used for code search and browsing. Launch with hx . from any project.
| Key | Action |
|---|---|
Space+/ |
Live grep across all files |
Space+f |
Fuzzy file finder |
Space+s |
Symbol picker (current file) |
Space+S |
Workspace symbol picker |
Ctrl+o |
Copy current file path to clipboard |
gd |
Go to definition |
gr |
Go to references |
K |
Hover docs |
:q |
Quit |
TypeScript LSP: npm install -g typescript-language-server typescript
All AI agent config lives in ai/ as a single source of truth:
ai/instructions/— shared instructions (AGENTS.md)ai/skills/— agent skills (one folder per skill)ai/subagents/— custom subagent definitions
I author the config once and let chai distribute it to every agent platform — Claude, Codex, Droid, OpenCode, and Antigravity — instead of hand-maintaining each one's config files. The manifest lives in home/chai.toml (symlinked to ~/chai.toml).
install.sh runs chai update && chai sync for you, so a fresh machine is ready with no extra steps. Afterwards, the loop for changes is:
# 1. Edit the source of truth
$EDITOR ai/instructions/AGENTS.md # or add a skill/subagent under ai/
# 2. Distribute to every platform listed in chai.toml
chai update # clone/pull any external deps first (skills from other repos, etc.)
chai sync # copy instructions, skills, and subagents into each platform's config dirchai sync uses hash-based dirty detection: if an agent edited its copy, it prompts before overwriting. Add --dry-run to preview changes or --force to skip the dirty check. Because ai/ is the only place you edit, every machine and every agent stays in sync from one commit.
Skills can also come from other people's repos. Declare them under [deps] in chai.toml — chai update clones each to ~/.chai/deps/, and [skills] paths reference them with @name. Current external skills: impeccable, frontend-slides, and dev-browser.
The skills are also installable standalone in any project, without chai:
npx skills add https://github.com/fmontes/dotfiles/tree/main/ai --skill <skill-name>See the skills README for the full list.
dotfiles/
├── Brewfile # Homebrew packages and casks
├── bootstrap.sh # Remote entry point (curl | bash)
├── install.sh # Local installer
├── scripts/ # Individual setup steps
├── ai/ # AI tooling
│ ├── skills/ # Agent skills (any agentic harness)
│ ├── instructions/ # Reusable prompt instructions
│ └── subagents/ # Custom subagent definitions
└── home/ # Dotfiles (mirrored to ~/)
├── .zshrc
├── .gitconfig
├── chai.toml # AI config sync manifest (~/chai.toml)
└── .config/
├── zsh/
│ └── aliases.zsh # Git + misc aliases
├── helix/
│ └── config.toml # Helix editor config
└── starship.toml # Starship prompt config
brew bundle dump --brews --casks --force --file=~/.dotfiles/BrewfileRun this before committing whenever you install new tools.