/laptop

Web/app development Mac setup (via Ansible).

Primary LanguageShellOtherNOASSERTION

Laptop

Build Status

Laptop is a playbook to set up an OS X laptop.

It installs and configures most of the software I use.

It can be run multiple times on the same machine safely. It installs, upgrades, or skips packages based on what is already installed on the machine.

Requirements

We've tested it on;

  • OS X Mojave (~10.14.4)

Installation

Fast Install

If you'd like to start with my default list of tools and apps (see Included Apps/Config below), then simply install with;

sh -c "$(curl -fsSL https://raw.githubusercontent.com/asagage/laptop/master/install.sh)"

You can always customize the install after-the-fact (see below), and re-run the playbook. It will skip over any installed apps.

Custom Install

If you want to add/remove to the list of apps/utils installed, its pretty straightforward.

As above, download and bootstrap the script. But stop it before it starts ansible, and edit the playbook as desired, before re-running ansible.

  1. Grab and start the bootstrap script. Let it install the prereqs and clone the full asagage/laptop repo locally...

    sh -c "$(curl -fsSL https://raw.githubusercontent.com/asagage/laptop/master/install.sh)"

  2. Stop the script (Ctrl+C) when ansible asks for the a 'sudo' password.

     ```
     Changing to laptop repo dir ...
    
     Running ansible playbook ...
     SUDO password:  ^c
    
     ```
    
  3. Change into the cloned repo dir

     cd laptop
    
  4. Edit playbook.yml and add/remove the apps/utils you want.

     vi playbook.yml
    
  5. Kick off ansible manually

     ansible-playbook playbook.yml -i hosts --ask-sudo-pass -vvvv 
    

You can do this as many times as you like and re-run the ansible-playbook command. Ansible is smart enough to skip installed apps, so subsequent runs are super fast.

Included Applications / Configuration

Applications

Apps installed with Homebrew Cask:

  • 1password
  • alfred # | http://www.alfredapp.com
  • apptrap # remove associated prefs when uninstalling
  • appzapper # uninstaller
  • bettertouchtool # window snapping. (maybe Moom is more lightweight?)
  • carbon-copy-cloner # backups | https://bombich.com/download
  • cheatsheet # know your shortcuts
  • cyberduck # ftp, s3, openstack
  • dash # totally sick API browser
  • diffmerge # free visual diq
  • disk-inventory-x # reclaim space on your expensive-ass Apple SSD | http://www.derlien.com/
  • dropbox # a worse Mega Sync
  • firefox
  • flux # get more sleep
  • google-chrome
  • imageoptim # optimize images
  • istumbler # network discovery GUI
  • jumpcut # awesome clipboard
  • karabiner # Keyboard customization
  • licecap # GIFs !
  • little-snitch # awesome outbound firewall
  • megasync # a better Dropbox
  • monolingual # remove unneeded osx lang files
  • nvalt # fast note taking
  • qlcolorcode # quick look syntax highlighting
  • qlimagesize # quick look image dimensions
  • qlmarkdown # quick look .md files
  • qlstephen # quick look extension-less text files
  • rowanj-gitx # Awesome gitx fork.
  • sequel-pro # FREE SQL GUI!
  • shortcat # kill your mouse
  • shuttle # ssh management
  • skype #
  • sublime-text3 # (experimental cask) | http://www.sublimetext.com/
  • thunderbird # email
  • tomighty # pomodoro
  • torbrowser # be the noise
  • transmission # torrents
  • tunnelblick # VPN
  • vagrant # | https://www.vagrantup.com/downloads.html
  • vagrant-manager #
  • virtualbox # | https://www.virtualbox.org/
  • vlc

There are several more common cask apps listed in the playbook.yml - simply uncomment them to include them in your install.

Packages/Utilities

Things installed with Homebrew:

  • autoconf
  • autojump # quickly navigate from cmd line
  • bash # Bash 4
  • boot2docker # for running docker on osx
  • brew-cask
  • coreutils # Install GNU core utilities (those that come with OS X are outdated)
  • cowsay # amazing
  • docker # | https://docs.docker.com/installation/mac/
  • findutils # Install GNU find, locate, updatedb, and xargs, g-prefixed
  • git
  • go
  • gpg
  • hub # github
  • keybase # in alpha at time of writing.
  • mtr # better traceroute
  • node
  • npm
  • openssl
  • packer
  • postgresql # yes and nosql
  • python
  • rbenv # ruby. Just installs binaries - assumes you bring in the dotfiles.
  • readline
  • redis
  • rename # rename multiple files
  • rsync
  • ruby-build
  • sqlite # production rails DB
  • the_silver_searcher # fast ack-grep
  • tmux
  • vim
  • wget
  • zsh

There are several more utils listed in the playbook.yml - simply uncomment them to include them in your install.

System Settings

It also installs a few useful system preferences/settings/tweaks with a toned-down verson of Matt Mueller's OSX-for Hackers script.

It does some reasonably gnarly stuff e.g.

  • hide spotlight icon
  • disable app Gate Keeper
  • change stand-by delay from 1hr to 12hrs.
  • Set trackpad tracking rate.
  • Set mouse tracking rate.
  • and lots more...

so you need read it very carefully first. (see scripts/system_settings.sh)

TODO: moar sick settings with https://github.com/ryanmaclean/OSX-Post-Install-Script

User Preferences

It then syncs your user prefs with dotfiles+rcm

It grabs the thoughttbot/dotfiles repo, saves it in ~/src/thoughtbot/dotfiles and symlinks it to ~/dotfiles.

It then grabs asagage/dotfiles repo, saves it in ~/src/asagage/dotfiles and symlinks it to ~/dotfiles-local

You probably want to change the dotfile_repo_username variable to match your github username :-)

It then runs rcup to initialize your dotfiles.

MacStore Apps (WIP)

These apps only available via the App Store. (sigh)

TODO: Port bork : https://github.com/mattly/bork/blob/master/types/macstore.sh and do this automagically!

  • Monosnap
  • Pages
  • Keynote
  • Numbers
  • etc

Application Settings (WIP)

Keep your application settings in sync.

TODO: Add Mackup task

Other

Development

You shouldn't wipe your entire workstation and start from scratch just to test changes to the playbook.

Instead, you can follow theses instructions for how to build a Mac OS X VirtualBox VM, on which you can continually run and re-run this playbook to test changes and make sure things work correctly.

Approach

We've tested it using an OSX 10.14 Vagrant/Virtualbox VM for developing & testing the Ansible scripts.

Simply spin up the MOjave box in a VM, and have vagrant kick off the laptop setup.

Whats included?

Nada. Well not much. The whole point is to test the process of getting our OSX dev machines from zero to hero.

The Vagrant box we use is a clean-ish install of OSX. However the setup notes above uses Packer, which installs Xcode CLI tools. This can't be automated in an actual test run, and needs user intervention to install.

Test Setup

  1. Get Homebrew Cask

     brew install caskroom/cask/brew-cask
    
  2. Install Vagrant

     brew cask install --appdir="/Applications" vagrant
    
  3. Install VirtualBox;

     brew cask install --appdir="/Applications" virtualbox
    
  4. cd into this project directory;

  5. Run

     vagrant init http://files.dryga.com/boxes/osx-yosemite-10.10.3.0.box;
    
  6. The Vagrantfile should be ready as soon as Vagrant downloads the box;

  7. Start VM

     vagrant up
    

Notes

  • VirtualBox doesn't have Guest additions for Mac OS X, so you can't have shared folders. Instead you can use normal network shared folders.

  • If you are rolling your own box with the OSX VM template, this is the Packer config;

    ```
    packer build \
      -var iso_checksum=aaaabbbbbbcccccccdddddddddd \
      -var iso_url=../out/OSX_InstallESD_10.10.4_14E46.dmg \
      -var update_system=0 \
      -var autologin=true \
      template.json
    ```
    

Author

Asa Gage, 2019.

Credits

This project is based off the work of the following folks;

See also:

  • Battleschool is a more general solution than what I've built here. (It may be a better option if you don't want to fork this repo and hack it for your own workstation...).
  • osxc is another more general solution, set up so you can fork the xc-custom repo and get your own local environment bootstrapped quickly.
  • MWGriffin/ansible-playbooks was the original inspiration for this repository, but this project has since been completely rewritten.