I've been a macOS user for a decade now. I'm a converted Windows user who moved over when I discovered the under-the-hood UNIX-y tools that allowed the best of both worlds: a very well designed UI/UX with support for the large world of open source toolchains. Over time, I compiled a list of apps, configurations, & scripts used day-to-day in my work.
For 3 years I've been using Ansible as my go-to for stack provisioning. Last year I stumbled across a few repos designed around provisioning a developer machine, including one using Ansible. I used that as inspiration to tidy up my large accumulation of apps, configs, & scripts so I could have a repeatable provisioning process that could be automated for future machine setups.
Started earlier this year in March, after a few weeks of effort, the result was...
Devbook is an easy-to-use provisioner that's designed to be installed on any new developer machine to retrieve the apps, configs, & CLI tools that a developer needs.
A developer will supply:
- One or more dotfiles Git repos (that stores their public/private configurations)
- A manifest of apps & CLI tools to install.
- Optional extensions to execute their own Ansible playbooks for their machine.
...and Devbook does the rest. In execution, it goes something like this...
- Bootstrap the tools needed: Git & Ansible
- Start the installer with a supplied configuration
- Walk away while Devbook does work.
It looks something like this:
Devbook install workflow (@ 10x speed):
Right now, the project is stable after a month or two of testing. The toughest problem is the inherent instability of customizing a bespoke environment (because developers are special little snowflakes), while getting it to work reliably with a grab bag of evolving tools needed for a development environment.
The biggest development challenge was quick feedback in testing; Devbook is a push-a-button-and-walk-away solution. Most errors encountered were temporary hiccups during package retrieval from various package managers: Homebrew, Mas (Mac App Store CLI), NPM, Packagist, PIP, RubyGems.
Devbook has a quick restart workflow built in for these scenarios (which is helped by Ansible's idempotent nature), but installing a large list of apps, configs, & tools can get pretty lengthy (notice the preview is displayed @ 10x speed). I'm hoping to work in potential optimizations in the future so there's less babysitting involved with Devbook, but that problem will always be there.
The second biggest challenge was a test environment. You can virtualize macOS in Virtualbox but it takes a little work. macOS is inherently tied to its physical hardware, so virtual Hackintoshes are prone to bug out. Regardless, I was able to build a VM and create a script utility to manage it for repeat testing.
You can find Devbook on GitHub if you're interested.