A one-command macOS bootstrap script to configure system preferences and install common developer tools and apps.
✅ Compatible with macOS default /bin/bash (Bash 3.2)
✅ Designed for fresh setups / onboarding
✅ Installs apps via Homebrew, Mac App Store (mas), and Installomator
✅ Applies common macOS defaults, configures Dock, enables Touch ID for sudo, and installs Oh My Zsh
Applies common defaults using defaults write, including:
- Dock positioning and behavior
- Dock at bottom
- Auto-hide enabled
- Recent apps disabled
- Spaces not reordered automatically
- Finder improvements
- Show Path Bar + Status Bar
- Group by Kind
- Column view by default
- Allow text selection in Quick Look
- Disable extension-change warning
- Global UI behavior
- Expand Save/Print dialogs by default
- Show all file extensions
- Disable smart quotes and smart dashes (better for coding)
- Time Machine
- Disable prompts to use newly connected disks for backup
- Filesystem hygiene
- Prevent
.DS_Storecreation on network volumes
- Prevent
After applying preferences, the script restarts Dock/Finder/SystemUIServer where needed.
- If Homebrew is missing, it installs it
- If Homebrew exists, it runs:
brew updatebrew upgradebrew cleanup
- On Apple Silicon (arm64), it ensures Homebrew shell env is configured for future sessions
The script installs a defined list of apps from Homebrew:
- GUI apps via casks
- CLI utilities via formulae
It skips anything already installed and shows a progress bar while installing.
Installs Mac App Store apps by ID (e.g. Xcode, Keynote, Pages, Numbers, etc.).
If you’re not signed into the App Store, installs may prompt or fail.
Also attempts:
mas upgrade
- Installs the latest Installomator
.pkgdynamically from GitHub Releases - Runs a list of Installomator labels
- Installomator runs as root using
sudo - Default Installomator flags:
DEBUG=0NOTIFY=silent
Installomator path used:
/usr/local/Installomator/Installomator.sh
Downloads and installs the latest Tart release from GitHub into:
/opt/homebrew/bin(Apple Silicon if available)/usr/local/bin(Intel / fallback)
Uses dockutil to set the Dock to a specific app layout for the currently logged-in user.
- Clears existing Dock items
- Adds apps in order from the
DOCK_APPSlist - Adds Downloads stack
If the system supports Touch ID PAM modules (e.g. pam_tid.so*), the script:
-
Backs up
/etc/pam.d/sudo -
Inserts the Touch ID line after any header comments:
auth sufficient pam_tid.so
This allows Touch ID authentication when running sudo.
- Installs Oh My Zsh (or updates it if already present)
- Creates a symlink from an iCloud-managed
.zshrcinto$HOME/.zshrc
Expected iCloud .zshrc location:
~/Library/Mobile Documents/com~apple~CloudDocs/Documents/profiles/.zshrc
Before running:
- ✅ macOS with Terminal access
- ✅ Stable internet connection
- ✅ You can authenticate with
sudo - ✅ You are signed in to the Mac App Store (recommended)
- ✅ You trust what the script installs/configures
bash -c "$(curl -fsSL https://raw.githubusercontent.com/bmortens115/macOS-Onboarding/main/macOS_Setup.sh)" curl -fsSL https://raw.githubusercontent.com/<YOUR_USER>/<YOUR_REPO>/main/macOS_Setup.sh -o macOS_Setup.sh
less macOS_Setup.sh
chmod +x macOS_Setup.sh
./macOS_Setup.sh git clone https://github.com/<YOUR_USER>/<YOUR_REPO>.git
cd <YOUR_REPO>
chmod +x macOS_Setup.sh
./macOS_Setup.shThis script is designed to be easy to customize by editing these lists:
APPS— Homebrew formulae & casksMAS_APPS— Mac App Store apps (IDs)INSTALLOMATOR_APPS— Installomator labelsDOCK_APPS— Dock app layout (path|label)
Make sure you are signed in:
- Open App Store and sign in
- Re-run the script
- Confirm Touch ID is supported and enrolled in System Settings
- macOS updates may overwrite
/etc/pam.d/sudo— re-run script if needed
The script skips apps that do not exist at the listed paths.
Make sure the apps are installed and located in /Applications.
This script makes system changes and installs software.
Always review scripts before running:
✅ Use the download/review method if running on a corporate or production machine.
MIT License (c) 2026 Mort