Bootstrapper is a script to set up an machine for development within the Platform R&D team.
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.
We support:
- OS X Yosemite (10.10)
- OS X El Capitan (10.11)
- OS X Sierra (10.12)
- MacOS High Sierra (10.13)
Older versions may work but aren't regularly tested. Bug reports for older versions are welcome.
If you are starting on a fresh new machine, continue with the following steps:
- Clone this repo and run the bootstrapper:
# Clone
git clone https://github.com/concur/bootstrapper.git
# Run the bootstrapper
./bin/bootstrapper install-mac 2>&1 | tee bootstrapper.log
Your last bootstrapper run will be saved to ~/bootstrapper.log
.
Read through it to see if you can debug the issue yourself.
If not, copy the lines where the script failed into a
new GitHub Issue for us.
Or, attach the whole log file as an attachment.
You may have problems installing Homebrew for the first time on OS X El Capitan due to permission changes to the /usr directory (within which the Homebrew installation is typically located). See the Homebrew El Capitan troubleshooting instructions for steps to resolve the permissions issues that interfere with Homebrew's installation.
Mac OS X tools:
- Homebrew for managing operating system libraries.
Configuration:
- Generates SSH key if needed
- Asks for name and email for git commits if not set
- Adds github.com to ssh config
Unix tools:
- binutils a collection of binary tools
- diffutils a package of several programs related to finding differences between files
- ed the original text editor for Unix
- findutils are the basic directory searching utilities of the GNU operating system
- gawk to select particular records in a file and perform operations upon them
- indent a code prettifier
- sed the famous stream editor
- tar the famous archiving utility
- which the famous which utility
- gnutls the Transport Layer Security (TLS) Library
- grep search files for lines containing a match to a specified pattern, take a look at Silver Searcher as well
- gzip a data compression program
- watch executes a program periodically, showing output fullscreen
- wdiff displays word differences between text files
- wget an internet file retriever
- Exuberant Ctags for indexing files for vim tab completion
- Git for version control
- OpenSSL for Transport Layer Security (TLS)
- RCM for managing company and personal dotfiles
- The Silver Searcher for finding things in files
- Vim for an alternative text editor
- Tmux for saving project state and switching between projects
- Zsh as your shell
- tree displays directories as trees (with optional color/HTML output)
Utilities:
- httpie for a prettier console HTTP client
- jq for processing JSON from the console like grep is for text
- git-radar a heads up display for git
- Certifi CA Bundle a carefully curated collection of Root Certificates
GitHub tools:
- Hub for interacting with the GitHub API
Image tools:
- ImageMagick for cropping and resizing images
Toolchain and configuration:
- Bundler for managing Ruby libraries
- Node.js and NPM, for running apps and installing JavaScript packages
- NVM for managing versions of Node.js
- Rbenv for managing versions of Ruby
- Ruby Build for installing Rubies
- Ruby stable for writing general-purpose code
- Python stable for writing general-purpose code with pip and virtualenv configured
- Elixir stable for writing general-purpose code
- Rust stable for writing general-purpose code
- Go stable for writing general-purpose code
- Godep a dependency tool for Go
- kubectl for controlling Kubernetes clusters
- docker what Virtual Machines did for Operating Systems, Docker does for processes
- docker-compose lets you define a multi-container application in a single file
- terraform for building, combining, and launching infrastructure
- packer a tool for creating machine and container images for multiple platforms
- vault a tool for managing secrets
- AWS CLI a unified tool for managing AWS service via the command line
- dvm a docker version manager
- bats a bash automated testing system
- watchman a file watching service
- corectl CoreOS over OS X made very simple
It should take less than 15 minutes to install (depends on your machine).
Your ~/.bootstrapper.local
is run at the end of the bootstrapper script.
Put your customizations there.
For example:
#!/usr/bin/env bash
brew_install_or_upgrade 'ranger'
brew_install_or_upgrade 'tig'
fancy_echo "Cleaning up old Homebrew formulae ..."
brew cleanup
brew cask cleanup
if [ -r "$HOME/.rcrc" ]; then
fancy_echo "Updating dotfiles ..."
rcup
fi
Write your customizations such that they can be run safely more than once.
See the libexec/bootstrapper-install-mac
script for examples.
Bootstrapper functions such as fancy_echo
,
brew_install_or_upgrade
,
brew_tap
,
brew_launchctl_restart
, and
gem_install_or_update
can be used in your ~/.bootstrapper.local
.
WARNING: This will uninstall Homebrew, if you have installed any applications
using Homebrew not in the list above, they will not be reinstalled via the
Bootstrapper install-mac
command. Please make note of any applications and any
custom configurations you may have setup as well. Add them to a
~/.bootstrapper.local
file as explained above.
NOTE: It may make more sense to run any project dependencies as Docker containers.
./bin/bootstrapper uninstall-mac 2>&1 | tee bootstrapper.log
You will be prompted to delete your .zshrc file if you're not going to
need it anymore, answer with a y
.
Reach out to see if what you want to add qualifies to be in the install list.
Edit the libexec/bootstrapper-install-mac
file.
Document in the README.md
file.
Follow shell style guidelines by using ShellCheck and Syntastic.
brew install shellcheck
This repo and script was heavily inspired by Thoughtbot's Laptop script.