Skip to content

Anima-t3d/mac-dev-playbook

 
 

Repository files navigation

Mac Development Ansible Playbook

Build Status

This playbook installs and configures most of the software I use on my Mac for web and software development. Some things in macOS are slightly difficult to automate, so I still have some manual installation steps, but at least it's all documented here.

This is a work in progress, and is mostly a means for me to document my current Mac's setup. I'll be evolving this set of playbooks over time.

See also:

Installation

  1. open terminal and run curl https://raw.githubusercontent.com/Anima-t3d/mac-dev-playbook/master/bootstrap_remote.sh | sh

There seems to be connection issues when installing the ansible roles, if the installation fails when it's downloading role's, please keep re-running the above command.

If the installation hangs after successfully downloading the roles, go to the tmp_laptop folder:

  1. cd ~/tmp_laptop/mac-dev-playbook
  2. Run ansible-playbook main.yml -i inventory -K inside this directory. Enter your account password when prompted.

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.

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 -i inventory -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" }

composer_packages:
  - name: hirak/prestissimo
  - name: drush/drush
    version: '^8.1'

gem_packages:
  - name: bundler
    state: latest

npm_packages:
  - name: webpack

pip_packages:
  - name: mkdocs

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

Included Applications / Configuration (Default)

Applications (installed with Homebrew Cask) TODO: Update this list:

Packages (installed with Homebrew):

  • ansible
  • autoconf # extensible package of M4 macros that produce shell scripts to automatically configure software source code packages
  • aria2 # lightweight multi-protocol & multi-source command-line download utility
  • bash-completion # auto-complete git
  • chromedriver # WebDriver is an open source tool for automated testing of webapps across many browsers
  • docker # open platform for developers and sysadmins to build, ship, and run distributed applications
  • dockutil
  • DNSMasq # provides network infrastructure for small networks: DNS, DHCP, router advertisement and network boot
  • git
  • go # Go is an open source programming language that makes it easy to build simple, reliable, and efficient software.
  • mongodb
  • node # JavaScript runtime built on Chrome's V8 JavaScript engine
  • openssl
  • python
  • ssh-copy-id # OpenSSH is the premier connectivity tool for remote login with the SSH protocol
  • wget # package for retrieving files using HTTP, HTTPS and FTP
  • composer # Dependency Manager for PHP
  • git-extras # GIT utilities -- repo summary, repl, changelog population, author commit percentages and more
  • mas # Mac App Store command line interface
  • npm
  • tree # recursive directory listing command that produces a depth indented listing of files
  • yarn

My dotfiles are also installed into the current user's home directory, including the .osx dotfile for configuring many aspects of macOS for better performance and ease of use. You can disable dotfiles management by setting configure_dotfiles: no in your configuration.

Finally, there are a few other preferences and settings added on for various apps and services.

Future additions

TODO:

  • Clean up code and update documentation
  • Tweak OSX config
  • Split installed software into different files (core/suggested/personal)
  • Add Mackup information
  • Add suggested Atom/PHPStorm config/plugins
  • Add suggested git config

Things that still need to be done manually

It's my hope that I can get the rest of these things wrapped up into Ansible playbooks soon, but for now, these steps need to be completed manually (assuming you already have Xcode and Ansible installed, and have run this playbook).

  1. Install all the apps that aren't yet in this setup (see below).
  2. Setup SSH
  3. Configure git?
  4. Run Mackup
  5. Configure extra Mail and/or Calendar accounts (e.g. Google, Exchange, etc.).

Testing the Playbook

Many people have asked me if I often wipe my entire workstation and start from scratch just to test changes to the playbook. Nope! Instead, Jeff Geerling posted instructions for how build a Mac OS X VirtualBox VM, on which I can continually run and re-run this playbook to test changes and make sure things work correctly.

Additionally, this project is continuously tested on Travis CI's macOS infrastructure.

Ansible for DevOps

Check out Ansible for DevOps, which teaches you how to automate almost anything with Ansible.

New to Ansible?

https://github.com/blacksaildivision/ansible-tutorial

Author

Red Airship, 2017 (inspired by Jeff Geerling) Jeff Geerling, 2014 (originally inspired by MWGriffin/ansible-playbooks).

Dev information

Mackup

If you have Dropbox installed and want to use it to save your config files, that's super easy.

On OS X, if you want an easy install, you can install Homebrew and do:

# Install Mackup
brew install mackup

# Launch it and back up your files
mackup backup

If not running OS X, or you don't like Homebrew, you can use pip.

Note: The below command will check if a previous version of Mackup is already installed on your system. If this is the case, it will be upgraded to the latest version.

# Install Mackup with PIP
pip install --upgrade mackup

# Launch it and back up your files
mackup backup

You're all set and constantly backed up from now on.

Next, on any new workstation, do:

# Install Mackup
brew install mackup

# Launch it and restore your files
mackup restore

Done!

GIT

git by default doesn't have autocompletion on OS X. Super easy to install it:

brew install bash-completion

Then add this line to your ~/.bash_profile:

if [ -f `brew --prefix`/etc/bash_completion ]; then
    . `brew --prefix`/etc/bash_completion
fi

[RECOMMENDED] Use rebase for git merge, use this to set as global config:

git config --global pull.rebase true

Make sure your git pushes only the current branch. Run the following:

git config --global push.default simple

To have git user the OS X Keychain, run this command:

git config --global credential.helper osxkeychain

References

Packages

No packages published

Languages

  • Shell 100.0%