Skip to content

Instantly share code, notes, and snippets.

@kevinelliott
Last active April 2, 2023 11:46
Show Gist options
  • Save kevinelliott/ab14cfb080cc85e0f8a415b147a0d895 to your computer and use it in GitHub Desktop.
Save kevinelliott/ab14cfb080cc85e0f8a415b147a0d895 to your computer and use it in GitHub Desktop.
macOS 10.14 Mojave Mostly-Automated Setup

To support my open-source work, consider adding me on Patreon.

macOS 10.14 Mojave Mostly-Automated Setup

An easy to refer to document for regularly setting up macOS 10.14 Mojave.

Controversy

The topic of recipe-based frequent fresh reinstalls of macOS is a controversial issue. Some people are against reinstalling macOS, citing that they have never had an issue with Apple provided upgrade installs. While this can often be true, this depends on a number of things, such as how customized your system settings are and how much cruft has developed since the last fresh install.

Purpose of Fresh Installs

I use this gist to keep track of the important software and steps required to have a functioning system after a semi-annual fresh install. I generally reinstall each computer from scratch every 6 months, and I do not perform upgrades between releases.

This keeps the system performing at top speeds, clean of trojans, spyware, and ensures that I maintain good organizational practices for my content and backups. I highly recommend this.

By using this document and re-install pattern, I can usually be up and running within 60 minutes with a fully-functioning system, so that I minimize downtime of productive work.

You are encouraged to fork this and modify it to your heart's content to match your own needs.

If you find it useful: feel free to shoot me an email ([email protected]), leave a comment, or tell others about it.

Previous Setup Gists

I have a long history of creating these gists... one for every major version of the OS.

My previous macOS / OSX setup gists:

Install Software

The software selected is software that is "tried and true" --- software I need after any fresh install. I often install other software not listed here, but is handled in a case-by-case basis.

Prerequisites

System Config Files

Files from my personal system-config repository on GitHub. There are some useful scripts and configs that make this process quick. This contains a Brewfile, for example.

git clone https://github.com/kevinelliott/system-config ~/.system-config

Homebrew

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

Xcode Command Line Tools

During install of Homebrew, the script will kindly detect that you have not yet installed Xcode Command Line Tools, and pop up a dialog asking if you want to install it. Yes, you do. I defer to install the full Xcode until later since the download takes longer and I want to keep moving forward. For now, just the Xcode Command Line Tools.

Mac App Store Command Line Tools

The mas command by argon is a handy tool to interact with the App Store without needing to point and click, search, and otherwise need manual intervention. This lets us install the next batch of software very quickly using Terminal.

Now that Homebrew is installed, it's easy to get mas:

brew install mas

Then signin to the Mac App Store for the first time (if you are already signed in, then it will tell you):

mas signin [email protected]

Install binaries from a Brewfile (apps from App Store using mas, apps from Cask)

Edit Brewfile for last minute changes

You may wish to add or remove a few App Store or Cask items before initiating Homebrew to install all of the applications. If you wish to review these now you may fork the system-config repo and edit the Brewfile (~/.system-config/Brewfile) now.

Install apps

brew bundle --file=~/.system-config/Brewfile

This will take some time, especially if you have a slow internet connection and because Xcode is huge. But it's faster than you having to search the App Store app and click to install for each of these!

aww yeah

tap "caskroom/cask"
tap "caskroom/drivers"
tap "caskroom/fonts"
tap "heroku/brew"
tap "homebrew/bundle"
tap "homebrew/core"
tap "homebrew/fuse"
tap "homebrew/science"
tap "homebrew/services"
tap "luckyframework/lucky"
tap "mapbox/cli"
tap "pothosware/pothos"
tap "rcmdnk/file"
cask "osxfuse"
brew "ack"
brew "readline"
brew "asciinema"
brew "autoconf"
brew "autojump"
brew "automake"
brew "isl"
brew "p7zip"
brew "ssdeep"
brew "binwalk"
brew "colordiff"
brew "coreutils"
brew "libevent"
brew "libyaml"
brew "crystal-lang"
brew "curl"
brew "libgpg-error"
brew "libksba"
brew "pth"
brew "dirmngr"
brew "docker", link: false
brew "ettercap"
brew "ffmpeg", args: ["with-sdl2"]
brew "figlet"
brew "foremost"
brew "fzf"
brew "gettext"
brew "gist"
brew "git"
brew "git-flow"
brew "git-standup"
brew "gnupg"
brew "go"
brew "gpg-agent"
brew "gx"
brew "gx-go"
brew "htop"
brew "hub"
brew "icecast"
brew "icoutils"
brew "libtool"
brew "imagemagick"
brew "ipfs"
brew "memcached"
brew "libmemcached"
brew "libusb-compat"
brew "libxml2"
brew "mas"
brew "mitmproxy"
brew "mosh"
brew "mtr"
brew "mysql"
brew "nmap"
brew "nvm"
brew "[email protected]"
brew "ossp-uuid"
brew "pkg-config"
brew "postgresql", restart_service: true
brew "python"
brew "qemu"
brew "redis", restart_service: true
brew "ripgrep"
brew "sdl2"
brew "speedtest-cli"
brew "sshfs"
brew "sslsplit"
brew "tcpflow"
brew "the_silver_searcher"
brew "tmux"
brew "utf8proc"
brew "wget"
brew "wireshark", link: false
brew "yarn"
brew "heroku/brew/heroku"
brew "luckyframework/lucky/lucky"
brew "rcmdnk/file/brew-file"
cask "adium"
cask "adobe-creative-cloud"
cask "amazon-drive"
cask "amazon-music"
cask "android-studio"
cask "angry-ip-scanner"
cask "anvil"
cask "arq"
cask "atom"
cask "boinc"
cask "bonjour-browser"
cask "chromium"
cask "cocoapods-app"
cask "ultimaker-cura"
cask "discord"
cask "docker"
cask "docker-toolbox"
cask "dropbox"
cask "etcher"
cask "filezilla"
cask "firefox"
cask "geekbench"
cask "github"
cask "google-chrome"
cask "google-earth-pro"
cask "grandperspective"
cask "hipchat"
cask "hyper"
cask "itch"
cask "iterm2"
cask "java"
cask "joinme"
cask "keybase"
cask "kitematic"
cask "little-snitch"
cask "livereload"
cask "lunchy"
cask "macdown"
cask "metasploit"
cask "mono-mdk"
cask "ngrok"
cask "now"
cask "obs"
cask "openemu"
cask "opera"
cask "parallels"
cask "postman"
cask "psequel"
cask "quik"
cask "rescuetime"
cask "sidestep"
cask "sketch"
cask "skitch"
cask "skype"
cask "soundflower"
cask "spotify"
cask "steam"
cask "sublime-text"
cask "transmit"
cask "visual-studio"
cask "visual-studio-code"
cask "vlc"
cask "wd-firmware-updater"
cask "wireshark"
cask "caskroom/drivers/3dconnexion"
cask "caskroom/drivers/sonos"
cask "caskroom/fonts/font-hack-nerd-font"
cask "caskroom/fonts/font-menlo-for-powerline"
mas "Blackmagic Disk Speed Test", id: 425264550
mas "CARROT Weather", id: 993487541
mas "CCMenu", id: 603117688
mas "Compressor", id: 424390742
mas "DeskCover", id: 1257711898
mas "DrCleaner", id: 921458519
mas "Earth 3D", id: 476566660
mas "Final Cut Pro", id: 424389933
mas "Frame.io", id: 992958444
mas "GarageBand", id: 682658836
mas "iMovie", id: 408981434
mas "Keynote", id: 409183694
mas "Logic Pro X", id: 634148309
mas "Magnet", id: 441258766
mas "MainStage 3", id: 634159523
mas "Motion", id: 434290957
mas "Numbers", id: 409203825
mas "Pages", id: 409201541
mas "Parcel", id: 639968404
mas "QuickBooks", id: 640830064
mas "Slack", id: 803453959
mas "Snappy", id: 512617038
mas "Speedtest", id: 1153157709
mas "Trello", id: 1278508951
mas "Unsplash Wallpapers", id: 1284863847
mas "WiFi Explorer", id: 494803304
mas "WiFi Signal", id: 525912054
mas "Xcode", id: 497799835
#!/usr/bin/sh
## macOS Preferences
# Set a blazingly fast keyboard repeat rate
defaults write NSGlobalDomain KeyRepeat -int 1
# Set a shorter Delay until key repeat
defaults write NSGlobalDomain InitialKeyRepeat -int 10
# Add a context menu item for showing the Web Inspector in web views
defaults write NSGlobalDomain WebKitDeveloperExtras -bool true
# Show the ~/Library folder
chflags nohidden ~/Library
# Store screenshots in subfolder on desktop
mkdir ~/Desktop/Screenshots
defaults write com.apple.screencapture location ~/Desktop/Screenshots
## Github
ssh-keygen -t rsa -C "kevin@`hostname -s`"
# Copy public key to Github.com
cat ~/.ssh/id_rsa.pub
# Test connection
ssh -T [email protected]
# Git global config
git config --global user.name "Kevin Elliott"
git config --global user.email "[email protected]"
git config --global github.user kevinelliott
git config --global github.token your_token_here
git config --global core.editor "code -w"
git config --global color.ui true
# Dropbox work directory
mkdir ~/Cloud/Dropbox/work
ln -s ~/Cloud/Dropbox/work ~/work
#!/usr/bin/sh
# Install zgen
git clone https://github.com/tarjoilija/zgen.git "${HOME}/.zgen"
# Setup ~/.zshrc
cp ~/.system-config/dotfile-zshrc ~/.zshrc
# Run ZSH so that everything intializes
zsh
# Change user shell to zsh
chsh
# PENDING
# load zgen
ZGEN_PREZTO_LOAD_DEFAULT=0
source "${HOME}/.zgen/zgen.zsh"
# if the init scipt doesn't exist
if ! zgen saved; then
echo "Creating a zgen save"
zgen prezto prompt theme 'sorin'
#zgen prezto tmux:auto-start local 'yes'
zgen prezto editor key-bindings 'vi'
zgen prezto utility:ls color 'yes'
zgen prezto '*:*' case-sensitive 'yes'
zgen prezto '*:*' color 'yes'
zgen prezto
zgen prezto git
zgen prezto environment
zgen prezto terminal
zgen prezto editor
zgen prezto directory
zgen prezto spectrum
zgen prezto utility
zgen prezto prompt
zgen prezto archive
zgen prezto ruby
zgen prezto rails
zgen prezto command-not-found
#zgen prezto tmux
zgen prezto fasd
zgen prezto history-substring-search
zgen prezto syntax-highlighting
zgen load m42e/prezto_extras
zgen load caarlos0/zsh-git-sync
zgen load TBSliver/zsh-plugin-colored-man
zgen load mafredri/zsh-async
zgen load junegunn/fzf shell
zgen load zsh-users/zsh-syntax-highlighting
zgen load tarruda/zsh-autosuggestions
zgen save
fi
autoload -Uz add-zsh-hook
add-zsh-hook precmd newline-after-command
function newline-after-command() {
print ''
}
export FZF_COMPLETION_TRIGGER=''
bindkey '^T' fzf-completion
##################
# Node
export NVM_DIR=~/.nvm
source $(brew --prefix nvm)/nvm.sh
# Ruby
export PATH="$PATH:$HOME/.rvm/bin"
# Git / Github
export GITHUB_USERNAME=kevinelliott
alias git-prune="git branch --merged master | grep -v \"\* master\" | grep -v \" master\" | xargs -n 1 git branch -d"
#!/usr/bin/sh
## Ruby
# Setup RVM
gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
echo progress-bar > ~/.curlrc
curl -sSL https://get.rvm.io | bash
# Install Ruby
rvm install ruby-2.4.3
# Install powder/pow
gem install powder
powder install
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment