charliecano
2/11/2018 - 11:37 PM

brew-sync.sh

#!/bin/bash
# Sync Homebrew installations between Macs via a specified sync folder (e.g. for use with Bittorrent Sync)
# Also syncs gui applications installed using brew-cask (https://github.com/phinze/homebrew-cask)
# Modified from https://gist.github.com/jpawlowski/5248465
# Modified from https://gist.github.com/7601962.git
#

SYNC_FOLDER="$HOME/Sync"
BREW=`which brew`

# first get local settings
echo "Reading local settings ..."
rm -f /tmp/brew-sync.*
$BREW tap > /tmp/brew-sync.taps
$BREW list > /tmp/brew-sync.installed
$BREW cask list > /tmp/brew-sync.casks

# then combine it with list in sync folder
echo "Reading settings from Sync folder ..."
[ -e ${SYNC_FOLDER}/Homebrew/brew-sync.taps ] && cat ${SYNC_FOLDER}/Homebrew/brew-sync.taps >> /tmp/brew-sync.taps
[ -e ${SYNC_FOLDER}/Homebrew/brew-sync.installed ] && cat ${SYNC_FOLDER}/Homebrew/brew-sync.installed >> /tmp/brew-sync.installed
[ -e ${SYNC_FOLDER}/Homebrew/brew-sync.casks ] && cat ${SYNC_FOLDER}/Homebrew/brew-sync.casks >> /tmp/brew-sync.casks

# make the lists unique and sync into Dropbox
echo "Syncing to Sync folder ..."
mkdir -p ${SYNC_FOLDER}/Homebrew
cat /tmp/brew-sync.taps | sort | uniq > ${SYNC_FOLDER}/Homebrew/brew-sync.taps
cat /tmp/brew-sync.installed | sort | uniq > ${SYNC_FOLDER}/Homebrew/brew-sync.installed
cat /tmp/brew-sync.casks | sort | uniq > ${SYNC_FOLDER}/Homebrew/brew-sync.casks

# Set taps
echo "Enabling taps ..."
for TAP in `cat ${SYNC_FOLDER}/Homebrew/brew-sync.taps`; do
	$BREW tap ${TAP} >/dev/null
done

# Install missing Homebrew packages
echo "Install missing packages ..."
for PACKAGE in `cat ${SYNC_FOLDER}/Homebrew/brew-sync.installed`; do
	$BREW list ${PACKAGE} >/dev/null
	[ "$?" != "0" ] && $BREW install ${PACKAGE}
done

# Verify that brew-cask is installed (just to be a little paranoid)
$BREW list brew-cask >/dev/null
[ "$?" != "0" ] && $BREW install brew-cask

# Install apps from cask
echo "Install missing casks ..."
for CASK in `cat ${SYNC_FOLDER}/Homebrew/brew-sync.casks`; do
	$BREW cask info ${CASK} >/dev/null #try to get info from installed cask
	[ "$?" != "0" ] && $BREW cask install ${CASK} #if info returned 0, cask is installed, if not install it
done