원클릭으로
mac-onboarding
Export macOS app configs and settings from source Mac, install on target Mac without Time Machine or cloud sync
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Export macOS app configs and settings from source Mac, install on target Mac without Time Machine or cloud sync
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
| name | mac-onboarding |
| description | Export macOS app configs and settings from source Mac, install on target Mac without Time Machine or cloud sync |
| tags | ["macos","dotfiles","configuration","bootstrap","mdm-safe","tailscale"] |
Fast, privacy-first macOS configuration exporter and installer. One script, one command—migrate your entire Mac environment to a new machine without Time Machine, iCloud, or cloud backups.
NOT for: Migrating user data (photos, documents, mail), password managers (separate process per app), SSH keys (add manually), Time Machine replacement.
| Category | What's Exported | Install Behavior |
|---|---|---|
| Package managers | Homebrew (via brew bundle dump) | brew bundle install |
| Shell | zsh/bash rc files, oh-my-zsh custom | Secrets redacted, configs restored |
| Git | .gitconfig, .gitignore_global, .config/git/ | Credential helpers redacted |
| Code editors | Cursor, Claude Code, Codex, pi.dev | Settings, keybindings, extensions, AI tokens redacted |
| Terminal | Kitty full config | Full restore |
| System | Dock, Finder, keyboard repeat, trackpad, screenshot location | MDM-safe allowlist |
| Hotkeys | Global shortcuts via com.apple.symbolichotkeys | Full restore, pbs daemon restarted |
| Apps | SwiftBar, Alfred, Klack, f.lux, BetterDisplay, OrbStack, Tailscale, Shottr, Synology | Plist restore (⚠️ audit Alfred for credentials) |
| Cloud tools | 1Password | Setup guide only (security) |
# Install (if not using Homebrew yet)
git clone https://github.com/oleg-koval/mac-onboarding.git
cd mac-onboarding
make build
sudo mv dist/mac-onboarding /usr/local/bin/
# Copy and edit config
cp onboard.yaml.example onboard.yaml
nano onboard.yaml # set source.host for bridge mode (optional)
# Dry-run
mac-onboarding export --dry-run ~/onboard.tar.gz
# Export
mac-onboarding export ~/onboard.tar.gz
# → Captures 21 modules: bootstrap, brew, shell, git, system, hotkeys, ...
# Copy config if using bridge mode
scp onboard.yaml target-mac:~/onboard.yaml
# Get archive and install
scp source-mac:~/onboard.tar.gz ~/
# Dry-run
mac-onboarding install --dry-run ~/onboard.tar.gz
# Apply
mac-onboarding install ~/onboard.tar.gz
# → Installs Xcode CLT, Homebrew, apps, dotfiles, settings, hotkeys
# On target Mac, update source.host in onboard.yaml
echo "source:" > onboard.yaml
echo " host: source-mac.tailscale.com" >> onboard.yaml
# Pull live from source Mac via Tailscale SSH
mac-onboarding bridge pull --dry-run
mac-onboarding bridge pull --only brew,shell
mac-onboarding bridge pull # all modules
onboard.yaml (copied from onboard.yaml.example):
source:
host: your-mac-hostname # Tailscale hostname (bridge mode only)
modules:
bootstrap:
skip: false # Installs Xcode CLT, Homebrew
brew:
skip: false
options:
brewfile_path: ~/.Brewfile
shell:
skip: false
options:
redact_pattern: "export .*(KEY|TOKEN|SECRET|PASSWORD|API)=.*"
git:
skip: false
system:
skip: false # Dock, Finder, keyboard defaults (MDM-safe)
hotkeys:
skip: false
# ... 15 more modules (see onboard.yaml.example)
All paths support ~ and $HOME expansion.
Typical for USB transfer, email, cloud storage:
# Source
mac-onboarding export ~/onboard-$(date +%Y%m%d).tar.gz
# Transfer archive to target (USB, iCloud, S3, whatever)
# Target
mac-onboarding install ~/onboard.tar.gz
Direct streaming via SSH:
# Source and target on same network
ssh user@source-mac "mac-onboarding export --to-stdout" | \
mac-onboarding install --from-stdin
Fastest for single modules:
# Target Mac
mac-onboarding bridge pull --only brew,shell
# Or everything
mac-onboarding bridge pull
Requires:
source.host in onboard.yamlSkip unwanted modules:
modules:
brew:
skip: true # Don't export/install Homebrew
onepassword:
skip: true # 1Password needs manual setup
Or CLI:
mac-onboarding export --only shell,git ~/minimal.tar.gz
mac-onboarding install --only shell,git ~/minimal.tar.gz
mac-onboarding bridge pull --only kitty,cursor
Always test before applying:
mac-onboarding export --dry-run ~/test.tar.gz
# Review output, then:
mac-onboarding export ~/test.tar.gz
mac-onboarding install --dry-run ~/test.tar.gz
# Review output, then:
mac-onboarding install ~/test.tar.gz
By design:
Before open-sourcing:
onboard.yaml for any API keys you missedtar tzf onboard.tar.gzgrep -i token onboard.tar.gz should show no real valuesWhat's NOT captured:
| Issue | Solution |
|---|---|
config: no onboard.yaml found | Copy onboard.yaml.example to onboard.yaml and edit |
| Module skip not working | Check YAML indentation (spaces not tabs) |
| Secrets leaked in archive | Review shell.redact_pattern and test: tar xzOf onboard.tar.gz shell/.zshrc | grep -i token |
| MDM won't let system defaults install | Some domains (Dock, Finder) are protected—check logs for which ones failed |
| Bridge pull fails | Verify source Mac's Tailscale hostname in config; run tailscale status on source |
| Hotkeys not applied | Restart System Preferences or restart Mac (pbs daemon is auto-restarted) |
| Homebrew install fails | Ensure Xcode CLT is installed first (bootstrap module handles this) |
make build requires Go)make build # Build mac-onboarding binary in dist/
make test # Run tests
make lint # Run go vet
make release # Build darwin/amd64 and darwin/arm64
make install # Install to /usr/local/bin
make clean # Clean dist/
Automated tests and releases via GitHub Actions:
main: increments and pushes the latest patch version tag, builds Intel + Apple Silicon binaries, creates a GitHub release with checksums, and updates the Homebrew tap formulaRelease prerequisites:
# GitHub repo secret required:
# HOMEBREW_TAP_GITHUB_TOKEN
# -> Fine-grained token with contents:write on oleg-koval/homebrew-tap
# Old Mac (source)
mac-onboarding export ~/my-setup.tar.gz
# Move USB to new Mac
scp /Volumes/USB/my-setup.tar.gz ~
# New Mac (target)
mac-onboarding install ~/my-setup.tar.gz
# → 5 minutes later: Xcode CLT, Homebrew, apps, dotfiles, settings all restored
# Shared repo with onboard.yaml checked in
git clone https://github.com/company/mac-setup.git
cd mac-setup
# Each engineer
mac-onboarding export ~/standard.tar.gz
# Archive reviewed and committed to repo
tar tzf ~/standard.tar.gz | head -20
# New team member
git clone https://github.com/company/mac-setup.git
cd mac-setup
mac-onboarding install ~/standard.tar.gz
# → Identical environment as everyone else
# Source
mac-onboarding export --only shell,git ~/dotfiles.tar.gz
# Target
mac-onboarding install --only shell,git ~/dotfiles.tar.gz
# → Just rc files and git config, no apps or settings
# Target Mac's onboard.yaml
source:
host: old-mac.tailscale.com
# Pull specific modules live
mac-onboarding bridge pull --only kitty,cursor
# → No archive, direct SSH stream from old-mac
Before sharing onboard.yaml or archive:
onboard.yaml for any hardcoded secretstar tzf onboard.tar.gz | grep -E '(token|key|secret|password)' (should be empty or redacted)shell/ files for env varsgit/ for credential helpersai_tools/ for API tokens (should be redacted)MIT
Issues and PRs welcome. Before contributing, read CONTRIBUTING.md (coming soon).