Setup guide for fresh install on Mac OS

README.md

Marko's Setup #

The following is a guide I wrote to guide one through a fresh installation on a new machine. Enjoy!

[!NOTE] > Tangled I've moved this repo over to self hosted Tangled.

Quote time:

“To be in hell is to drift; to be in heaven is to steer.” ― George Bernard Shaw

Version #

1.9.6

Last Tested on MacOS 15.7.5

App Store Applications #

  • Xcode
    • sudo xcodebuild -license accept

Third Party Applications #

  • Raycast A collection of powerful productivity tools all within an extendable launcher. Fast, ergonomic and reliable. I install this with Homebrew, just wanted to highlight it here.
  • StartyParty for firefox, made by me
  • StartyParty Addons

Dotfiles #

Majority of configurations are stored in my private dotfiles repository; currently a private repository.

Non Dotfile Settings & Configs #

Fonts #

Fonts are Backed up to /Dropbox/Resources and dotfiles and are installed via Homebrew.

zsh #

# Install Oh-My-zsh
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

# Install plugins
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
git clone https://github.com/zsh-users/zsh-syntax-highlighting ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting

Add to plugins=() in ~/.zshrc:

plugins=(git zsh-autosuggestions zsh-syntax-highlighting)

Set Up SSH Keys #

# Generate SSH
ssh-keygen -t ed25519 -C "your_email@example.com"

# Add to keychain & agent
ssh-add --apple-use-keychain ~/.ssh/id_ed25519

# Copy public key
pbcopy < ~/.ssh/id_ed25519.pub

# Test if worked
ssh -T git@github.com

Add to ~/.ssh/config:

Host *
  AddKeysToAgent yes
  UseKeychain yes
  IdentityFile ~/.ssh/id_ed25519

Set Up Git #

git config --global user.name "Name"
git config --global user.email email@email.com
git config --global github.user user_name_here
git config --global github.token your_token_here
git config -l --global
git config --global core.editor "zed --wait"
git config --global color.ui true

.gitconfig is contained within the dotfiles repository and contains further Git configurations.

Git Commit Signing (SSH) #

git config --global gpg.format ssh
git config --global user.signingkey ~/.ssh/id_ed25519.pub
git config --global commit.gpgsign true

Set Hostname #

sudo scutil --set HostName ###

Set Up Mac OS Preferences #

Commands to customize Mac OS settings and preferences. Pick and choose what you want to change, make sure to run the killall Finder Dock SystemUIServer command after changing any settings.

Finder #

# Show hidden files in Finder
defaults write com.apple.finder AppleShowAllFiles YES

# Show the ~/Library folder
chflags nohidden ~/Library

# Finder: show all filename extensions
defaults write NSGlobalDomain AppleShowAllExtensions -bool true

# Finder: show status bar
defaults write com.apple.finder ShowStatusBar -bool true

# Finder: show path bar
defaults write com.apple.finder ShowPathbar -bool true

# When performing a search, search the current folder by default
defaults write com.apple.finder FXDefaultSearchScope -string "SCcf"

Global #

# Set a fast keyboard repeat rate
defaults write NSGlobalDomain KeyRepeat -int 0

# Set a shorter delay until key repeat
defaults write NSGlobalDomain InitialKeyRepeat -int 12

# Store screenshots in subfolder on desktop
mkdir ~/Screenshots
defaults write com.apple.screencapture location ~/Screenshots
killall SystemUIServer

# Skip Verify Images
defaults write com.apple.frameworks.diskimages skip-verify true

# Prevent Apple Character Press and Hold
defaults write -g ApplePressAndHoldEnabled -bool false

# Enable Text Selection in QuickLook
defaults write com.apple.finder QLEnableTextSelection -bool TRUE

# Disable the warning before emptying the Trash
defaults write com.apple.finder WarnOnEmptyTrash -bool false

# Disable shadow in screenshots
defaults write com.apple.screencapture disable-shadow -bool TRUE

Dock #


# Remove Animations
defaults write NSGlobalDomain NSWindowResizeTime -float 0.001

# Hide the Desktop
defaults write com.apple.finder CreateDesktop false

# Set the size of the icons on the dock
defaults write com.apple.dock tilesize -int 54

# Clear out the dock of default icons
defaults delete com.apple.dock persistent-apps
defaults delete com.apple.dock persistent-others

# Faster Dock Animation
defaults write com.apple.dock autohide-time-modifier -float 0.15

# Dull Hidden Apps in Dock
defaults write com.apple.Dock showhidden -bool TRUE

# Make Dock only Show Active Apps
defaults write com.apple.dock static-only -bool true

# Automatically hide and show the Dock
defaults write com.apple.dock autohide -bool true

# Don’t show recent applications in Dock
defaults write com.apple.dock show-recents -bool false

# Dont' show indicator lights for open applications in the Dock
defaults write com.apple.dock show-process-indicators -bool false

Dashboard & Spaces #


# Add a contextual menu item to show the Web Inspector in web views
defaults write NSGlobalDomain WebKitDeveloperExtras -bool true

# Don’t show Dashboard as a Space
defaults write com.apple.dock dashboard-in-overlay -bool true

# Automatically rearrange Spaces based on most recent use FALSE
defaults write com.apple.dock mru-spaces -bool false

# Disable Dashboard
defaults write com.apple.dashboard mcx-disabled -bool true

Login Screen #

# Add Message to Login Screen
sudo defaults write /Library/Preferences/com.apple.loginwindow LoginwindowText "In found, please call ###-###-####"

Security #

# Enable FileVault
sudo fdesetup enable

# Enable Firewall
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setglobalstate on
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setloggingmode on

Siri #


# Opt-out from Siri data collection
defaults write com.apple.assistant.support 'Siri Data Sharing Opt-In Status' -int 2

# Disable 'Ask Siri'
defaults write com.apple.assistant.support 'Assistant Enabled' -bool false

# Disable Siri voice feedback
defaults write com.apple.assistant.backedup 'Use device speaker for TTS' -int 3

# Disable 'Do you want to enable Siri?' pop-up
defaults write com.apple.SetupAssistant 'DidSeeSiriSetup' -bool True

# Hide Siri from menu bar
defaults write com.apple.Siri 'StatusMenuVisible' -bool false
defaults write com.apple.Siri 'UserHasDeclinedEnable' -bool true

# Disable Siri services (Siri and assistantd)
launchctl disable "user/$UID/com.apple.assistantd"
launchctl disable "gui/$UID/com.apple.assistantd"
sudo launchctl disable 'system/com.apple.assistantd'
launchctl disable "user/$UID/com.apple.Siri.agent"
launchctl disable "gui/$UID/com.apple.Siri.agent"
sudo launchctl disable 'system/com.apple.Siri.agent'

# Just in Case: Revert Dock to Default
defaults write com.apple.dock static-only -bool false
# Restart Finder, Dock, and SystemUIServer
killall Finder Dock SystemUIServer

Install Xcode Command Line Tools #

xcode-select --install

Install Homebrew #

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

Homebrew PATH (Apple Silicon) #

# Add to ~/.zshrc or ~/.zprofile
eval "$(/opt/homebrew/bin/brew shellenv)"

Install Apps Via Homebrew Cask #

# install tools
brew install awscli bat borders btop ccache cmake colordiff ddgr deno elixir eza fd ffmpeg fzf gh git go gnu-sed imagemagick jq lazygit mackup mas mdcat memcached mysql neovim nightlight nmap node nvm postgresql@14 redis ripgrep ruff rust shellcheck shfmt sketchybar skhd spicetify-cli stow stylua supabase switchaudio-osx telnet terminal-notifier tmux uv web-ext wget yabai yarn yt-dlp z zsh

# install casks
brew install --cask affinity-photo apparency bitwarden calibre chromedriver discord displaylink docker docker-desktop dropbox figma font-hack-nerd-font google-chrome imageoptim kitty little-snitch lm-studio mimestream mongodb-compass obsidian qlcolorcode qlimagesize qlmarkdown qlstephen qlvideo quicklook-json quicklookase raycast spotify surfshark suspicious-package syntax-highlight the-unarchiver transmit ungoogled-chromium vlc whatsapp yaak zed zen zen-browser

Node #

# Install LTS Node via nvm
nvm install --lts
nvm use --lts
nvm alias default node

Restore Dotfiles #

I use Mackup to restore my dotfiles.

mackup restore

Window Managers #

# Start services
yabai --start-service
skhd --start-service
brew services start sketchybar
brew services start borders

Marko Bajlovic #

Sourced from all over and throughout the years.