Skip to content

New Mac Setup Guide

Posted on:January 282023

As someone who builds software for a living & as a hobby - I go through lots of computers. I also like to occasionally wipe my machines and reinstall from a clean state. Therefore I spend a lot of time setting up new Apple computers. This blog is intended to be a living document of steps I take when setting up a new Mac. I use macOS for both personal and professional work, and this setup guide reflects both use cases. Hopefully you will learn some helpful macOS customizations along the way.

Table of contents

Open Table of contents

Browser: Brave

As of March 2023, my daily driver is Brave.

Set up Brave Sync

Stock Apps to Delete

Lets be honest - nobody uses these apps, right?

Apps to Install

Utilities to Install

Terminal

Terminal Theme

Terminal Preferences

Terminal Utilities

.zshrc

Create a .zshrc with touch ~/.zshrc and add the following:

# Colors
export CLICOLOR=1

# Prompt
export PS1="%n@%m %1~ %# "

# Aliases
alias ll="ls -Flht"
alias ls="ls -F"
alias la="ls -Flhta"
alias activate="source env/bin/activate"
alias vactivate="source venv/bin/activate"

# Node.js
export PATH="/opt/homebrew/opt/node@18/bin:$PATH"
export LDFLAGS="-L/opt/homebrew/opt/node@18/lib"
export CPPFLAGS="-I/opt/homebrew/opt/node@18/include"

# Set PATH, MANPATH, etc., for Homebrew.
eval "$(/opt/homebrew/bin/brew shellenv)"

# Case insensitive tab completion
zstyle ':completion:*' matcher-list 'm:{[:lower:][:upper:]}={[:upper:][:lower:]}' 'm:{[:lower:][:upper:]}={[:upper:][:lower:]} l:|=* r:|=*' 'm:{[:lower:][:upper:]}={[:upper:][:lower:]} l:|=* r:|=*' 'm:{[:lower:][:upper:]}={[:upper:][:lower:]} l:|=* r:|=*'

# Automatic CD
setopt AUTO_CD

# ZSH History
export HISTSIZE=20000
export SAVEHIST=10000
setopt sharehistory # share history across multiple zsh sessions

# History search completion
autoload -U history-search-end
zle -N history-beginning-search-backward-end history-search-end
zle -N history-beginning-search-forward-end history-search-end
bindkey "^[[A" history-beginning-search-backward-end
bindkey "^[[B" history-beginning-search-forward-end

# Load the ZSH config changes
autoload -Uz compinit && compinit

# Prompt, git branch on right
function parse_git_branch() {
    git branch 2> /dev/null | sed -n -e 's/^\* \(.*\)/[\\1]/p'
}
setopt PROMPT_SUBST
COLOR_DEFAULT=$'%f'
COLOR_ORANGE=$'%F{214}'
COLOR_GRAY=$'%F{243}'
export PROMPT='${COLOR_ORANGE}%1~ ➤${COLOR_DEFAULT} '
export RPROMPT='${COLOR_GRAY}$(parse_git_branch)${COLOR_DEFAULT}'

# Fun greeting from a random pokemon
fortune -s 50% computers 50% all | pokemonsay

# Docker fix for apple silicon
export DOCKER_DEFAULT_PLATFORM="linux/amd64"
source /Users/ryan/.docker/init-zsh.sh || true # Added by Docker Desktop

After all these modifications - your terminal should look something like this:

My macOS Terminal

VSCode Config

Installed Extensions

User Settings

{
    "workbench.startupEditor": "none",
    "editor.minimap.enabled": false,
    "editor.fontSize": 14,
    "workbench.colorTheme": "One Dark Pro Mix",
    "editor.scrollBeyondLastLine": false,
    "[typescriptreact]": {
        "editor.defaultFormatter": "esbenp.prettier-vscode"
    },
    "[javascript]": {
        "editor.defaultFormatter": "esbenp.prettier-vscode"
    },
    "security.workspace.trust.untrustedFiles": "open",
    "cSpell.ignoreWords": [
        "Siri"
    ],
    "files.exclude": {
        "**/__pycache__": true
    },
    "[json]": {
        "editor.defaultFormatter": "vscode.json-language-features"
    },
    "redhat.telemetry.enabled": false,
    "[python]": {
        "editor.formatOnType": true
    }
}

System Settings

Finder

Finder List View by Default

Finder + Desktop

Finder Sidebar:

Notification Center

Messages

Dock

My macOS Dock

TextEdit