Recently after moving companies, I realised how cumbersome it is to setup up a new development machine with the right tools and software, configured just the way you like it. After a week or so of working on different projects, it soon becomes apparent of how much time is invested in remembering, downloading, configuring and maintaining everything.
Rather than starting from scratch, only to have to repeat myself again in future, I decided to use Ansible. I have previously covered Ansible, but after reading this article by Nick Hammond I decided that I could do the same. Everytime I installed something new, I added it to my playbook. This started off very basic at first with packages like the latest version of PHP, Node.js and SASS and has become more extensive over time. Ansible also has support for Homebrew Cask out of the box, which means that I can also keep track of my desktop applications like Dropbox, Vagrant and iTerm2.
Below is a short example of my playbook tasks for installing Homebrew and Homebrew Cask packages:
- name: Install packages from Homebrew
homebrew: name={% raw %}{{ item }}{% endraw %} state=present update_homebrew=yes
with_items:
- caskroom/cask/brew-cask
- php70
- httpie
- exiftool
- git-extras
- pandoc
- composer
- node
- name: Install Brew Cask packages
ignore_errors: yes
homebrew_cask: name={% raw %}{{ item }}{% endraw %} state=present
with_items:
- alfred
- virtualbox
- vagrant
- macdown
- firefox
- atom
- iterm2
In future I hope to add more, including:
dotfiles
from a Github repo, with automatic updating and symlinkingosx_defaults
This is all open source and can be found on Github. The great thing about Ansible, is that it is Immutable, I can run it over and over again without having to worry about re-applying and breaking the state of my machine, or having packages or applications installed multiple times. As an added bonus, I can add new tools that I find whilst at work, and have them automatically install on my Macbook at home the next time the provisioning task is run (or scheduled as a recurring task).
If you think you can improve anything, or suggest more things to be added and maintained, please leave a comment below, star the project on Github or open a pull request.