Setting Up Your Mac

June 08, 2020

My “opinionated” guide to mac setup with a focus on enhancing existing/normal workflows. Tooling and setup has a focus on ease of setup and keeping an experience that isn’t too far from OS defaults.


  • Create an environment which is not bound to any runtime (use asdf)
  • Use mac defaults as much as possible
  • Rely on package managers as much as possible (homebrew and asdf)
  • Easy, quick, and replicatable setup
  • Install Homebrew

    From Homebrew - make sure to follow any additional instructions in the console.

    /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
  • Install git, ZSH tools, and shell completions

    brew install wget zsh-completions git vim \
     && brew install --cask iterm2
  • Setup git

    git config --global user.name "... ..."
    git config --global user.email "[email protected]"
    git config --global pull.rebase false
    git config --global init.defaultBranch main
  • Install oh-my-zsh

    sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
  • Close all all terminals and open iterm
  • Install and apply keybindings for iterm

    mkdir iterm-settings && curl -s https://raw.githubusercontent.com/olmesm/setup-mac/master/iterm-keybindings/com.googlecode.iterm2.plist | sed -e 's|%%HOME%%|'"${HOME}"'|g' > ~/iterm-settings/com.googlecode.iterm2.plist
    • Open iTerm2
    • Open iTerm2 > Preferences or ”⌘” + ”,”
    • Preferences > Load preferences from a custom folder or URL
    • Check and set to ~/iterm-settings
  • Change oh-my-zsh to include full path

    cp ~/.oh-my-zsh/themes/robbyrussell.zsh-theme $ZSH_THEME
    find $ZSH_THEME -type f -exec sed -i '' -e 's|%c%|%~%|g' {} \;
    find ~/.zshrc -type f -exec sed -i '' -e 's|ZSH_THEME="robbyrussell"|ZSH_THEME="ollyrussell"|g' {} \;
  • Install asdf for runtime management.

    git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.8.1
    find ~/.zshrc -type f -exec sed -i '' -e 's|plugins=(|plugins=(asdf |g' {} \;
    . ~/.zshrc
  • Setup node with asdf

    brew install gnupg
    asdf plugin-add nodejs
    echo "
    # Disable asdf nodejs signature check
    NODEJS_CHECK_SIGNATURES=no\n" >> ~/.zshrc
    echo "legacy_version_file = yes" > ~/.asdfrc
    echo "yarn" > ~/.default-npm-packages
    asdf install nodejs lts
    asdf global nodejs $(asdf list nodejs | grep -e "\d.*" | tail -1)
  • Install recommended packages (feel free to delete as required)

    Application brew info link
    Boostnote https://formulae.brew.sh/cask/boostnote
    Chromium https://formulae.brew.sh/cask/chromium
    Cyberduck https://formulae.brew.sh/cask/cyberduck
    Docker https://formulae.brew.sh/cask/docker
    Firefox https://formulae.brew.sh/cask/firefox
    Google Chrome https://formulae.brew.sh/cask/google-chrome
    Intellij Idea https://formulae.brew.sh/cask/intellij-idea
    Itsycal https://formulae.brew.sh/cask/itsycal
    Libreoffice https://formulae.brew.sh/cask/libreoffice
    Ngrok https://formulae.brew.sh/cask/ngrok
    Opera https://formulae.brew.sh/cask/opera
    Postman https://formulae.brew.sh/cask/postman
    Rectangle https://formulae.brew.sh/cask/rectangle
    Slack https://formulae.brew.sh/cask/slack
    Transmission https://formulae.brew.sh/cask/transmission
    Visual Studio Code https://formulae.brew.sh/cask/visual-studio-code
    VLC https://formulae.brew.sh/cask/vlc
    Whatsapp https://formulae.brew.sh/cask/whatsapp
    brew install --cask \
    boostnote \
    chromium \
    cyberduck \
    docker \
    firefox \
    google-chrome \
    intellij-idea \
    itsycal \
    libreoffice \
    ngrok \
    opera \
    postman \
    rectangle \
    slack \
    switchhosts \
    transmission \
    visual-studio-code \
    vlc \

    Note you’ll need to approve most of the above apps from unidentified developers

  • Create a projects and personal directory

    mkdir \
    -p ~/projects/prototypes \
    Directory Description Structure
    projects Client work and prototypes projects/<client>/<code-repo>
    personal Personal and non-company work. personal/<code-repo>
  • Add projects and personal to your favourites

    open ~
    • Drag and drop the projects and personal directories into the left hand favourites pane of the finder window.
  • For a quickly accessible calandar and clock, setup itsycal (depends on itsycal being installed as above)

    • Open itsycal
    • Open Preferences or ”⌘” + ”,”
    • General > Launch at login
    • Preferences > Appearance > E d MMM
  • Install Lastpass in the browser
  • Setup Authy on your mobile device for MFA - do not install this on your laptop.
  • Setup Lastpass on your mobile device.
  • Setup Slack on your mobile device.

Written by Oliver Smit. I love talking about web technologies, good design practices, optimising productivity, and rapid prototyping of projects. Check out my work on Github