/macOS-ansible

Provision your Mac with Ansible

Primary LanguageJinjaMIT LicenseMIT

macOS

Ansible MacOS Playbook

This playbook installs and configures most of the software I use on my Mac for web and software development.

Installation

  1. Ensure Apple's command line tools are installed (xcode-select --install to launch the installer).
  2. Install Ansible:
    1. Run the following command to add Python 3 to your $PATH: export PATH="$HOME/Library/Python/3.8/bin:/opt/homebrew/bin:$PATH"
    2. Upgrade Pip: sudo pip3 install --upgrade pip
    3. Install Ansible: pip3 install ansible
  3. Clone or download this repository to your local drive.
  4. Run ansible-galaxy install -r requirements.yml inside this directory to install required Ansible roles.
  5. Run ansible-playbook main.yml --ask-become-pass inside this directory. Enter your macOS account password when prompted for the 'BECOME' password.

Note: If some Homebrew commands fail, you might need to agree to Xcode's license or fix some other Brew issue. Run brew doctor to see if this is the case.

Use with a remote Mac

You can use this playbook to manage other Macs as well; the playbook doesn't even need to be run from a Mac at all! If you want to manage a remote Mac, either another Mac on your network, or a hosted Mac like the ones from MacStadium, you just need to make sure you can connect to it with SSH:

  1. (On the Mac you want to connect to:) Go to System Preferences > Sharing.
  2. Enable 'Remote Login'.

You can also enable remote login on the command line:

sudo systemsetup -setremotelogin on

Then edit the inventory.yml file in this repository and change the config to something like this:

---
machines:
  hosts:
    [ip address or hostname of mac]:
      ansible_user: [mac ssh username]

If you need to supply an SSH password (if you don't use SSH keys), make sure to pass the --ask-pass parameter to the ansible-playbook command.

Running a specific set of tagged tasks

You can filter which part of the provisioning process to run by specifying a set of tags using ansible-playbook's --tags flag. The tags available are dotfiles, homebrew, mas, extra-packages and osx.

ansible-playbook main.yml -K --tags "dotfiles,homebrew"

Overriding Defaults

Not everyone's development environment and preferred software configuration is the same.

You can override any of the defaults configured in default.config.yml by creating a config.yml file and setting the overrides in that file. For example, you can customize the installed packages and apps with something like:

homebrew_installed_packages:
  - cowsay
  - git
  - go

mas_installed_apps:
  - { id: 443987910, name: "1Password" }
  - { id: 498486288, name: "Quick Resizer" }
  - { id: 557168941, name: "Tweetbot" }
  - { id: 497799835, name: "Xcode" }

npm_packages:
  - name: webpack

Any variable can be overridden in config.yml; see the supporting roles' documentation for a complete list of available variables.

Acknowledgements

This playbook is heavily inspired by Dan Bohea's macsible Jeff Geerling's mac-dev-playbook and Jérôme Gamez's ansible-macos-playbook.

The macOS settings (a.k.a. defaults writes) are mostly taken from Mathias Bynens' defaults scripts or from one of the dotfiles repos from http://dotfiles.github.io.

You can find other defaults here.