Personal macOS bootstrap script for setting up a new machine with Homebrew, Node.js, fonts, App Store apps, npm packages, Cursor extensions, a preferred Dock layout, and shell defaults.
Run the script from anywhere:
bash /absolute/path/to/init.shOr from the repository root:
bash ./init.shThe script is designed to be rerun. It skips installed Homebrew formulae, casks, and App Store apps when possible.
- Installs Homebrew if it is missing, then runs
brew updateandbrew upgrade - Installs
nvm, then installs and activates Node.js24 - Installs the Homebrew formulae, casks, fonts, and Mac App Store apps listed in
Brewfileviabrew bundle - Installs the npm packages listed in
lib/npm.sh - Installs the Cursor extensions listed in
lib/cursor.sh - Symlinks the tracked configs in
dotfiles/into place vialib/dotfiles.sh(existing files are backed up with a timestamped suffix, not overwritten) - Applies the macOS
defaultslisted inlib/defaults.sh - Configures the Dock order listed in
lib/dock.sh - Sets sensible git defaults via
lib/git.sh(init.defaultBranch=main,push.autoSetupRemote=true); identity, SSH, and commit signing are left to GitHub Desktop, 1Password's developer SSH agent, andgh auth login - Updates
.zshrcusinglib/zshrc.sh, enabling the Oh My Zshgitplugin when available, loadingnvmin future zsh sessions, plusautocdand dot-directory shortcuts - Prints the manual follow-up steps listed in
lib/postflight.sh
- macOS only
- An internet connection
- Sign in to the Mac App Store before running if you want
masinstalls to succeed
If the App Store account is unavailable, Genesis skips those steps and prints a message.