Last active
July 23, 2023 15:21
-
-
Save maxackerman/930146246c6a023f4ac0e7c09cf05a68 to your computer and use it in GitHub Desktop.
bash srcipt to setup a new mac with homebrew and dev environment
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/sh | |
# run "sh setup.sh" | |
# BACKUP BEFORE WIPE: | |
# SSH keys | |
# Fonts | |
# Keychain passwords | |
# files outside dropbox: downloads, documents, photos, photobooth | |
# bash/zsh profile | |
# transmit favs | |
# reference: | |
# https://github.com/thoughtbot/laptop | |
# https://github.com/tylucaskelley/setup | |
# http://sourabhbajaj.com/mac-setup/ | |
fancy_echo() { | |
local fmt="$1"; shift | |
# shellcheck disable=SC2059 | |
printf "\\n$fmt\\n" "$@" | |
} | |
append_to_zshrc() { | |
local text="$1" zshrc | |
local skip_new_line="${2:-0}" | |
if [ -w "$HOME/.zshrc.local" ]; then | |
zshrc="$HOME/.zshrc.local" | |
else | |
zshrc="$HOME/.zshrc" | |
fi | |
if ! grep -Fqs "$text" "$zshrc"; then | |
if [ "$skip_new_line" -eq 1 ]; then | |
printf "%s\\n" "$text" >> "$zshrc" | |
else | |
printf "\\n%s\\n" "$text" >> "$zshrc" | |
fi | |
fi | |
} | |
# shellcheck disable=SC2154 | |
trap 'ret=$?; test $ret -ne 0 && printf "failed\n\n" >&2; exit $ret' EXIT | |
set -e | |
if [ ! -d "$HOME/.bin/" ]; then | |
mkdir "$HOME/.bin" | |
fi | |
if [ ! -f "$HOME/.zshrc" ]; then | |
touch "$HOME/.zshrc" | |
fi | |
# shellcheck disable=SC2016 | |
append_to_zshrc 'export PATH="$HOME/.bin:$PATH"' | |
# Determine Homebrew prefix | |
arch="$(uname -m)" | |
if [ "$arch" = "arm64" ]; then | |
HOMEBREW_PREFIX="/opt/homebrew" | |
else | |
HOMEBREW_PREFIX="/usr/local" | |
fi | |
update_shell() { | |
local shell_path; | |
shell_path="$(command -v zsh)" | |
fancy_echo "Changing your shell to zsh ..." | |
if ! grep "$shell_path" /etc/shells > /dev/null 2>&1 ; then | |
fancy_echo "Adding '$shell_path' to /etc/shells" | |
sudo sh -c "echo $shell_path >> /etc/shells" | |
fi | |
sudo chsh -s "$shell_path" "$USER" | |
} | |
case "$SHELL" in | |
*/zsh) | |
if [ "$(command -v zsh)" != '/usr/local/bin/zsh' ] ; then | |
update_shell | |
fi | |
;; | |
*) | |
update_shell | |
;; | |
esac | |
if ! command -v brew >/dev/null; then | |
fancy_echo "Installing Homebrew ..." | |
/bin/bash -c \ | |
"$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" | |
append_to_zshrc "eval \"\$($HOMEBREW_PREFIX/bin/brew shellenv)\"" | |
export PATH="$HOMEBREW_PREFIX/bin:$PATH" | |
fi | |
if brew list | grep -Fq brew-cask; then | |
fancy_echo "Uninstalling old Homebrew-Cask ..." | |
brew uninstall --force brew-cask | |
fi | |
fancy_echo "Updating Homebrew formulae ..." | |
brew update --force # https://github.com/Homebrew/brew/issues/1151 | |
fancy_echo "Begin Homebrew bundle install..." | |
brew bundle --file=- <<EOF | |
tap "homebrew/cask-drivers" | |
# brew | |
brew "composer" | |
brew "git" | |
brew "ffmpeg" | |
brew "yt-dlp" | |
brew "imagemagick" | |
brew "php" | |
brew "rsync" | |
brew "asdf" | |
# osx apps | |
cask "adobe-creative-cloud" | |
cask "alfred" | |
cask "dropbox" | |
cask "firefox" | |
cask "figma" | |
cask "google-chrome" | |
cask "hazel" | |
cask "notion" | |
cask "rectangle" | |
cask "rightfont" | |
cask "slack" | |
cask "sublime-text" | |
cask "sublime-merge" | |
cask "transmit" | |
cask "visual-studio-code" | |
cask "vlc" | |
cask "zoom" | |
# drivers | |
cask "wacom-tablet" | |
EOF | |
fancy_echo "Configuring asdf version manager ..." | |
if [ ! -d "$HOME/.asdf" ]; then | |
brew install asdf | |
append_to_zshrc "source $(brew --prefix asdf)/libexec/asdf.sh" 1 | |
fi | |
alias install_asdf_plugin=add_or_update_asdf_plugin | |
add_or_update_asdf_plugin() { | |
local name="$1" | |
local url="$2" | |
if ! asdf plugin-list | grep -Fq "$name"; then | |
asdf plugin-add "$name" "$url" | |
else | |
asdf plugin-update "$name" | |
fi | |
} | |
# shellcheck disable=SC1091 | |
. "$(brew --prefix asdf)/libexec/asdf.sh" | |
add_or_update_asdf_plugin "ruby" "https://github.com/asdf-vm/asdf-ruby.git" | |
add_or_update_asdf_plugin "nodejs" "https://github.com/asdf-vm/asdf-nodejs.git" | |
install_asdf_language() { | |
local language="$1" | |
local version | |
version="$(asdf list-all "$language" | grep -v "[a-z]" | tail -1)" | |
if ! asdf list "$language" | grep -Fq "$version"; then | |
asdf install "$language" "$version" | |
asdf global "$language" "$version" | |
fi | |
} | |
fancy_echo "Installing latest Ruby ..." | |
install_asdf_language "ruby" | |
gem update --system | |
number_of_cores=$(sysctl -n hw.ncpu) | |
bundle config --global jobs $((number_of_cores - 1)) | |
fancy_echo "Installing latest Node ..." | |
install_asdf_language "nodejs" | |
fancy_echo "brew cleanup..." | |
brew cleanup | |
# youtube-dl config | |
mkdir ~/.config/yt-dlp && touch ~/.config/yt-dlp/config | |
echo '-f bestvideo[ext=mp4]+bestaudio[ext=m4a]/mp4' >> ~/.config/yt-dlp/config | |
fancy_echo "Begin OSX Settings..." | |
# OSX Settings | |
# reference: https://github.com/keith/dotfiles/blob/master/osx/defaults.sh | |
# Disable "shake to find mouse" | |
defaults write NSGlobalDomain CGDisableCursorLocationMagnification -bool true | |
# set key repeat speed | |
defaults write -g InitialKeyRepeat -int 15 | |
defaults write -g KeyRepeat -int 2 | |
# Automatically hide and show the Dock | |
defaults write com.apple.dock autohide -bool true | |
# Dock setup | |
defaults delete com.apple.dock persistent-apps; killall Dock | |
# Change the auto-hiding Dock delay adn speed | |
defaults write com.apple.dock autohide-delay -float 0.0 | |
defaults write com.apple.dock autohide-time-modifier -float 0.5 | |
# Disable the Launchpad gesture (pinch with thumb and three fingers) | |
defaults write com.apple.dock showLaunchpadGestureEnabled -int 0 | |
# set DNS servers | |
networksetup -setdnsservers Wi-Fi 1.1.1.1 1.0.0.1 2606:4700:4700::1111 2606:4700:4700::1001 | |
echo "Setup process complete!" | |
# MANUAL SETUP | |
# install Laravel Valet | |
# adobe-creative-cloud install apps | |
# xcode cli tools run: "xcode-select --install" | |
# git config | |
# setup Dropbox | |
# Sublime: link settings in dropbox with symlink (https://packagecontrol.io/docs/syncing#dropbox-osx) | |
# Alfred: link settings in dropbox | |
# RightFont: link dropbox | |
# arq | |
# authy |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment