Setting Up a New Mac the Easy Way
When I bought my last new Mac two years ago, I set it up the way I had been setting up my personal computers for years: plug in a Time Machine drive and run Migration Assistant. On a modern Mac with an SSD, even if you have hundreds of apps installed like I do, the whole process takes about 20 minutes. It recreates your Applications folder, brings over preferences, and generally makes the new machine feel finished almost immediately.
Nothing could be easier.
There is a downside, though. Migration Assistant faithfully brings over all the accumulated cruft along with the good stuff. That’s how I ended up with Keychain entries for wireless access points I installed in 2014, and references in ~/Library/Application Support to apps I haven’t touched in years.
UPS is dropping a Mac mini on my doorstep sometime this morning. For the first time in a long time, I’m not going to use Migration Assistant.
Automated App Installation
Thanks to tools like Updatest and Cork, I’ve moved every application that can be managed by Homebrew into that ecosystem. On my current machine that covers 212 GUI apps plus 260 CLI packages and dependencies.
Recreating that environment on a new Mac is trivial.
To back up your current setup:
brew bundle dump
To install everything on a new Mac:
brew bundle install
By default, Homebrew can also install Mac App Store apps using the mas CLI. The generated Brewfile is plain text and extremely easy to edit if you want to remove anything before installing.
A small sample looks like this:
cask "gechr/tap/whichspace" cask "wifi-explorer" cask "wins" cask "xbar" cask "xnconvert" cask "xnviewmp" cask "zen" cask "zotero" mas "Acidity", id: 6472630023 mas "Actions", id: 1586435171 mas "Actions For Obsidian", id: 1659667937 mas "Amphetamine", id: 937984704 mas "AppTela", id: 6752568197 mas "AutoMounter", id: 1160435653
If you don’t use Homebrew, you can still automate Mac App Store installs directly with the mas CLI.
To export a list of installed App Store apps:
mas list | cut -d' ' -f1 > mas-app-ids.txt
To install them on a new Mac:
xargs -n1 mas install < mas-app-ids.txt
To identify apps that were installed outside Homebrew or the Mac App Store, run:
system_profiler SPApplicationsDataType -json > installed-apps.json
Open the resulting JSON file in a text editor like BBEdit. Any app showing:
_“obtained_from” : “identified_developer” _
was installed directly from a developer download and will need to be reinstalled manually.
Configuration
Applications are the easy part. Configuration is harder.
Just entering license keys and registration details for my paid apps could easily take hours.
I briefly looked at Mackup, but it doesn’t seem well suited for a GUI-heavy workflow like mine. A more modern tool, chezmoi, looks promising for exporting and restoring my dotfiles, including things like:
• .zshrc
• .gitconfig
• ~/.ssh/config
• .config/nvim/init.vim
For everything else, my plan is simple: build a small set of rsync jobs by hand and move over only what I actually need.
To avoid permission issues and sandbox quirks, I’ll launch each application once before restoring its configuration so macOS creates the necessary directories:
~/Library/Application Support/
~/Library/Preferences/
~/Library/Containers/
~/Library/Group Containers/
Because I run a heavily automated setup with apps like Keyboard Maestro, BetterTouchTool, Hazel, and Raycast, I’ll rely on their built-in export/import features rather than trying to automate those configs.
It’s technically possible to script the capture of a large number of system settings. In practice, the time it would take to build and debug that script would probably exceed the time it takes me to reconfigure things manually.
Teaching an Old Dog New Tricks
Earlier in my career in edtech, I spent a lot of time doing large-scale Mac deployments. The workflow was simple: build a golden image and deploy it hundreds of times using NetBoot to whatever hardware the district had just purchased.
Later we moved to modern deployment systems like Jamf.
If you need 900 eMacs unboxed and deployed, I’m your guy.
Highly opinionated personal setups like the ones most of us run on our own Macs are a different animal entirely. There’s no universal image for that kind of machine.
But there’s a lot we can learn from each other about building reproducible setups that stay clean over time instead of dragging a decade of digital barnacles from one Mac to the next.