I just upgraded my personal laptop from a 2019 Intel MacBook Pro to an M4 MacBook Pro. Like all my new devices, instead of restoring from a backup, I try to Marie Kondo my digital life and start from a clean slate. This also lets me reexamine my existing tools and explore new options. Here’s my minimal Mac setup guide if you want to follow along.
MacOS settings
- Apple ID: Sign in MacOS update: Settings -> General -> Software Update Keyboard: Switch to Dvorak, key repeat = fast, delay until repeat = short Trackpad: Max tracking speed, tap to click, click = light, natural scroll = off Displays: Switch to Apple Display (p3-600) for slightly better battery life Finder: Show Library, show hidden files, show path to dir
# show Library folderchflags nohidden ~/Library# show hidden filesdefaults write com.apple.finder AppleShowAllFiles YES# add pathbar to titledefaults write com.apple.finder _FXShowPosixPathInTitle -bool true# restart finderkillall Finder;- Screenshots (to clipboard):
CMD + SHIFT + F5 and change setting in “Option” menu. This lets me screenshot and paste into docs, chats, social media, etc directly (without saving a separate file). If I need to save it, open Preview and CMD + N. Dock: Hide and show dock, reduce size, remove most default apps- Homebrew (might take a while as it also installs Xcode)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"# add brew to default shell pathecho >> /Users/eugeneyan/.zprofileecho 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> /Users/eugeneyan/.zprofileeval "$(/opt/homebrew/bin/brew shellenv)"# check for updatesbrew update- Terminal: Trying Warp instead of my usual iTerm. (If you use my referral code I can get some swag—thank you!)
brew install --cask warpbrew install --cask font-inconsolata-for-powerline# Update warp font: Settings -> Appearance -> Terminal font- Shell: Trying Fish instead of my usual Oh My Zsh
brew install fish# make fish default shellecho $(which fish) | sudo tee -a /etc/shellschsh -s $(which fish)# add brew to fish pathecho >> /Users/eugeneyan/.config/fish/config.fishecho 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> /Users/eugeneyan/.config/fish/config.fisheval "$(/opt/homebrew/bin/brew shellenv)"ssh-keygen -t ed25519 -C "[email protected]"eval "$(ssh-agent -s)"touch ~/.ssh/configopen ~/.ssh/config# add to configHost github.com AddKeysToAgent yes UseKeychain yes IdentityFile ~/.ssh/id_ed25519Also see the Github docs to generate a new ssh key and add to ssh agent, and add a new ssh key to Github account.
brew install gitgit config --global core.editor "nano"git config --global init.defaultBranch maingit config --global user.name "eugeneyan"git config --global user.email [email protected]Research, writing, development
- Obsidian: All my notes, writing, CRM, etc. live here
brew install --cask obsidian# clone obsidian vault (i use obsidian-git for syncing)git clone [email protected]:<github-username>/<obsidian-vault>.git- Zotero: Papers and annotations. Zotero has a nice PDF reader and markup tools, and also has an iPad app that syncs seamlessly. (Previously Google Drive)
brew install --cask zotero# enable zotero plugin in safari- Cursor: Daily driver for prototyping and building. (Previously vscode)
brew install --cask cursor# old machine: cmd+shift+p > export profile# new machine: cmd+shift+p > import profile- Sublime: Simple code and text edits
brew install --cask sublime-text- Chrome: For web development
brew install --cask google-chrome- Postgres: To prototype web apps that need persistent storage
brew install postgresql@16# very fast python package managerbrew install uv# install the latest pythonuv python install 3.12brew install nodebrew install nvm# still deciding between pnpm and bunbrew install pnpmbrew install oven-sh/bun/bunbrew install chruby-fish ruby-install ruby-buildbrew install rbenv# workaround for fish shellset --universal fish_user_paths $fish_user_paths ~/.rbenv/shimsrbenv global 3.3.5rbenv rehashbrew install --cask docker- Ollama + Open WebUI: Running local models via a nice interface
brew install ollamaollama serve# in another terminal, pull some models to tryollama pull llama3.2 nemotron # 3B and 70B respectivelyuv tool install open-webuiuv tool run open-webui serveProductivity and quality of life
- Raycast: A better spotlight
brew install --cask raycast- Rectangle: Window management.
brew install --cask rectangleWhile Raycast already has window management, Rectangle lets you hit the hotkey again (e.g., CTRL + CMD + LEFT) to resize windows from 1/3 to 1/2 to 2/3. Great for widescreens.

Rectangle settings for resizing windows
Update: Turns out Raycast has this too (h/t @mwheatfill), and also has presets for Rectangle hotkeys. I’ve since moved to Raycast window management.
Wispr Flow: Download and set output language = English. Speech-to-text. Returns accurate transcripts with decent punctuation and formatting. (If you use my referral link you earn good karma and I get $15 in credits! )
Google Drive: Syncing documents, files, media, etc.
brew install --cask google-drive- Stats + Ice: Adding system stats to menu bar and customizing the menu bar
brew install statsbrew install jordanbaird-iceEntertainment and communications
brew install --cask vlcbrew install --cask spotifybrew install --cask telegrambrew install --cask discordbrew install --cask slackReferences
If you found this useful, please cite this write-up as:
Yan, Ziyou. (Nov 2024). My Minimal MacBook Pro Setup Guide. eugeneyan.com. https://eugeneyan.com/writing/mac-setup/.
or
@article{yan2024macsetup, title = {My Minimal MacBook Pro Setup Guide}, author = {Yan, Ziyou}, journal = {eugeneyan.com}, year = {2024}, month = {Nov}, url = {https://eugeneyan.com/writing/mac-setup/}}