Personal macOS bootstrap for a fresh machine.
- CLI: fish, mise, gh, lazygit, fzf, ripgrep, the_silver_searcher, coreutils, gawk, neovim, shfmt, imagemagick@6, ffmpeg
- Apps (brew cask): iTerm2, VS Code, Brave, Bitwarden, Slack, Telegram, Spark Desktop, Fantastical, Linear, TickTick, Obsidian, Notion, Raycast, AppCleaner, BetterDisplay, Hidden Bar, ImageOptim, Gifox, Claude, Claude Code, Postman, Docker, Tailscale, Mullvad VPN
- Font: JetBrains Mono Nerd
- Runtimes (via mise): ruby 3.1.1, node lts, python 3.13.2, pnpm latest, yarn 1.x
- Default gems (re-installed for every new Ruby): bundler, pry, foreman
- Shell: fish + Oh My Fish + balias package + sushi theme
- VS Code extensions: 34 extensions listed in
.vscode-extensions
# 1. Install Xcode Command Line Tools (needed for git + compilers)
xcode-select --install
# 2. Clone this repo
git clone https://github.com/<your-user>/dotfiles.git ~/projects/personal/dotfiles
cd ~/projects/personal/dotfiles
# 3. Run the bootstrap
./bootstrap.shbootstrap.sh runs in this order:
rsyncdotfiles →~brew.sh— Homebrew + packages + casks + fontshell.sh— fish login shell, OMF, mise runtimes, fzf, gitignore globaleomf.fish— OMF plugins/theme reloadvscode.sh— VS Code extensions from.vscode-extensions
macos.sh is NOT run automatically (it rebuilds the Dock from scratch). Run on-demand:
bash ./macos.shThings that can't (or shouldn't) be automated:
-
gh auth login— authenticate GitHub CLI -
ssh-keygen -t ed25519 -C "andrea.vassallo.94@gmail.com"+ add to GitHub - Sign in to: 1Password/Bitwarden, Slack, Telegram, Spark, Fantastical, Linear, TickTick, Obsidian, Raycast, Tailscale, Mullvad
- App Store login (if needed for App Store-only apps)
-
cd <project>thenmise trustto allow project-levelmise.toml/.tool-versions
VS Code extensions are reinstalled via vscode.sh, but settings, keybindings, and snippets are not. Enable VS Code Settings Sync (Account icon → Turn on Settings Sync) before reinstalling to back them up.
The ~/.iterm2/com.googlecode.iterm2.plist is in this repo, but iTerm2 loads it only after macos.sh runs (it sets LoadPrefsFromCustomFolder=true and points to ~/.iterm2).
After bash ./macos.sh, restart iTerm2 to pick up the prefs.
update_aliases # sync this repo's init.fish → ~/.config/omf/init.fish, reloadTo update the apps list / brew packages / dock apps, edit the relevant .sh file and re-run it.
shfmt -i 4 -ci -w *.sh
fish_indent -w .config/fish/config.fish .config/omf/init.fish omf.fishSee AGENTS.md.