macOS on Steroids
The ultimate macOS setup guide for developers who want peak productivity.
This is my almanac for setting up a new macOS machine to my workflows.
Initial System Setup
Step 1: Basic macOS Configuration
Before installing any applications, let's configure macOS for optimal productivity:
1Enable tap to click:
System Settings → Trackpad → Point & Click → Tap to click2Speed up key repeat rate:
defaults write -g InitialKeyRepeat -int 15defaults write -g KeyRepeat -int 23Show hidden files in Finder:
defaults write com.apple.finder AppleShowAllFiles YESkillall Finder4Disable press-and-hold for accented characters:
defaults write -g ApplePressAndHoldEnabled -bool false5Show path bar in Finder:
defaults write com.apple.finder ShowPathbar -bool true6Show status bar with available space in Finder:
defaults write com.apple.finder ShowStatusBar -bool true7Enable Quit option for Finder:
defaults write com.apple.Finder QuitMenuItem 1killall FinderWhat this does: The path bar shows your current folder location at the bottom of Finder windows, while the status bar displays available disk space and item counts. Enabling the Quit menu item allows you to fully quit Finder (useful when using ForkLift as your primary file manager)!
8Dock: right edge, small, instant auto-hide, a Quick Note hot corner (bottom-right), and nothing pinned but Zen. The Hyper keys below launch everything else, so the Dock barely needs to exist:
# Position, size, auto-hide defaults write com.apple.dock orientation -string right defaults write com.apple.dock tilesize -int 32 defaults write com.apple.dock autohide -bool true defaults write com.apple.dock autohide-delay -float 0 defaults write com.apple.dock autohide-time-modifier -float 0.4 # Bottom-right hot corner → Quick Note defaults write com.apple.dock wvous-br-corner -int 14 defaults write com.apple.dock wvous-br-modifier -int 0 # Dock contents: wipe Apple's defaults, pin only Zen brew install dockutil dockutil --remove all --no-restart dockutil --add /Applications/Zen.app --no-restart killall Dock
9Turn off macOS's built-in window tiling so it doesn't fight Rectangle:
defaults write com.apple.WindowManager EnableTilingByEdgeDrag -bool false defaults write com.apple.WindowManager EnableTopTilingByEdgeDrag -bool false defaults write com.apple.WindowManager EnableTilingOptionAccelerator -bool false defaults write com.apple.WindowManager EnableTiledWindowMargins -bool false
Wallpapers & Visual Setup
Desktop Wallpapers
My collection of desktop wallpapers:




Twitter Banners
For your Twitter account banners and social media:





Profile Pictures
For consistency across all your accounts:





Installing Homebrew & Core Applications
Step 1: Install Homebrew
Homebrew is the essential package manager for macOS. It simplifies installing and managing applications.
Run this command in Terminal:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"After installation, add Homebrew to your PATH:
echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zprofileeval "$(/opt/homebrew/bin/brew shellenv)"Step 2: Install Essential Applications
Now let's install all the applications you'll need. I've organized them by category with detailed explanations:
One-Command Installation
Install everything at once. Formulae and casks go in two separate commands, because a --cask anywhere in a single brew install makes Homebrew treat every name as a cask:
CLI tools:
brew install node@24 python tmux git uv bun zoxide atuin yt-dlp gallery-dl fzf eza gh duti dockutil \
ffmpeg exiftool pandoc pngquant gifsicle poppler ghostscript terminal-notifier watch \
awscli azure-cli flyctl mongodb-atlas-cli sqlcmd anomalyco/tap/opencodeApps:
brew install --cask zen-browser arc google-chrome cmux ghostty visual-studio-code cursor \
claude-code@latest codex chatgpt orbstack mongodb-compass ngrok \
notion notion-calendar obsidian bettertouchtool superkey appcleaner flux-app rectangle bartender \
alcove cotypist voiceink iloader forklift libreoffice calibre meru \
discord whatsapp slack telegram zoom cleanshot screen-studio figma iina soundsource finetune \
protonvpn little-snitch mole-app font-jetbrains-mono-nerd-font \
steipete/tap/codexbar steipete/tap/trimmy abue-ammar/tinycast/tinycast kamillobinski/thock/thockNot in the one-liners on purpose: DaVinci Resolve (no cask, see below), Pear Desktop (pinned version, see below), Mac App Store apps, and the alternatives I list next to my picks.
Core Command Line Tools
brew install node@24 && brew link --force node@24Node.js - JavaScript runtime, pinned to the 24 LTS line. node@24 is keg-only, so link it to put node/npm on your PATH
brew install pythonPython - Essential programming language for scripting and development
brew install tmuxtmux - Terminal multiplexer for managing multiple terminal sessions
brew install gitGit - Version control system (brew version is more up-to-date than macOS default)
brew install uvuv - Extremely fast Python package and project manager, written in Rust
brew install zoxidezoxide - Smarter cd command that remembers your most used directories
brew install atuinAtuin - Magical shell history with sync across machines
brew install yt-dlpyt-dlp - Download videos/images from YouTube and 1000+ other sites
brew install gallery-dlgallery-dl - Download image galleries and collections from Instagram, Twitter/X, Reddit, Pinterest, and hundreds of other sites
brew install fzffzf - Command-line fuzzy finder for files, history, and processes
brew install ezaeza - Modern, maintained replacement for ls with colors and icons
brew install ghGitHub CLI - PRs, issues, releases, and auth from the terminal. Coding agents lean on it heavily
brew install ffmpeg exiftool pandoc pngquant gifsicle poppler ghostscriptMedia & document toolbelt:
- ffmpeg - convert, trim, and transcode any audio/video
- exiftool - read, write, and strip photo/video metadata
- pandoc - convert between Markdown, DOCX, HTML, PDF, and friends
- pngquant / gifsicle - shrink PNGs and GIFs
- poppler / ghostscript - PDF text extraction, rendering, and compression
brew install awscli azure-cli flyctl mongodb-atlas-cli sqlcmdCloud & database CLIs: AWS, Azure, Fly.io, MongoDB Atlas, and SQL Server
brew install terminal-notifier watchterminal-notifier - Native macOS notifications from the shell (powers my Claude Code "task complete" hook, see below). watch - rerun a command every N seconds
Browsers
brew install --cask zen-browserZen Browser - Privacy-focused browser with excellent customization. My default browser
brew install --cask arcArc - Chromium browser with spaces and a vertical sidebar. My second browser, on Hyper + Q
brew install --cask google-chromeChrome - Primary browser with excellent DevTools
Development Tools
brew install --cask cursorCursor - AI-powered code editor built on VSCode, perfect for AI-assisted development
brew install --cask visual-studio-codeVS Code - My main editor (Hyper + A), with the Claude Code extension docked in the panel
brew install --cask claude-code@latestClaude Code - Anthropic's terminal coding agent. The @latest cask tracks the fast release channel; plain claude-code is the stable channel. Skills, plugins, and config are covered further down
brew install --cask codexCodex CLI - OpenAI's terminal coding agent. The desktop Codex experience lives inside the ChatGPT app (below)
brew install anomalyco/tap/opencodeopencode - Open-source, provider-agnostic terminal coding agent
brew install --cask orbstackOrbStack - Drop-in Docker Desktop replacement plus lightweight Linux VMs. Faster, lighter on battery, and the docker CLI just works
brew install --cask mongodb-compassMongoDB Compass - GUI for exploring and querying MongoDB
brew install --cask ngrokngrok - Expose a localhost port on a public URL for webhooks and demos
brew install --cask ghosttyGhostty - Fast, feature-rich terminal emulator
brew install --cask cmuxcmux - Ghostty-based terminal built for running coding agents: vertical tabs and per-agent notifications. My daily terminal (Hyper + E)
brew install --cask steipete/tap/codexbarCodexBar - Free, open-source menu bar app that keeps every AI coding usage window, credit balance, and reset timer in view across 40+ providers (Codex, Claude Code, Cursor, and more). No login required
Productivity & System Tools
brew install --cask notionNotion - All-in-one workspace for notes, documents, and project management
brew install --cask obsidianObsidian - Local-first Markdown knowledge base. Plain files on disk, so agents can read and write my notes too (Hyper + D)
brew install --cask abue-ammar/tinycast/tinycastTinycast - Tiny, fully native launcher with hotkeys and clipboard history. My Raycast replacement
brew install --cask bettertouchtoolBetterTouchTool - Customize trackpad gestures, keyboard shortcuts, and Touch Bar
brew install --cask superkeySuperKey - Transform your caps lock into a powerful productivity key
brew install --cask appcleanerAppCleaner - Thoroughly uninstall applications and their associated files
brew install --cask flux-appf.lux - Adjust screen color temperature based on time of day
brew install --cask rectangleRectangle - Window management made simple with keyboard shortcuts
brew install --cask bartenderBartender - My go-to menu bar manager. Hide, reorder, and reveal menu bar items, with triggers, hotkeys, and per-item show/hide rules. Paid, the most polished option. Heads-up: the cask now installs Bartender 7, so check your license covers it
brew install --cask jordanbaird-iceIce - Free, open-source alternative to Bartender. Hide, organize, and reorder menu bar items, with an Ice Bar that tucks overflow items below the notch
Amphetamine - Keep your Mac awake. Free from the Mac App Store with advanced triggers and session control
Klack - Satisfying mechanical keyboard sounds for every keystroke. Available on the Mac App Store
brew install --cask kamillobinski/thock/thockThock - Klack alternative. Free, open-source keyboard sounds, installable with brew
brew install --cask steipete/tap/trimmyTrimmy - Watches your clipboard and folds multi-line shell snippets (pipes, redirects, line continuations) into a single pasteable line. No dock icon, no network, no daemon
brew install --cask cotypistCotypist - On-device AI that predicts your next words in every Mac app. Press Tab to accept. Open source — make your own version
Cotabby - Cotypist alternative. Free, open-source, on-device AI autocomplete in every Mac app, using Apple Intelligence or local GGUF models. Inline ghost text, Tab to accept
brew install --cask voiceinkVoiceInk - Voice-to-text dictation into any app, transcribed on-device. Much faster than typing long prompts to agents
brew install --cask alcoveAlcove - Turns the notch into a Dynamic Island — music controls, notifications, and widgets in the dead space. Lightweight, one-time purchase
brew install --cask iloaderiloader - iOS sideloading companion for getting apps onto your iPhone from the Mac
File Management
brew install --cask forkliftForkLift - Advanced file manager and FTP client
Office & Documents
brew install --cask libreofficeLibreOffice - Free and powerful office suite
brew install --cask notion-calendarNotion Calendar - Calendar for scheduling, linked to Notion docs (Hyper + C)
brew install --cask meruMeru - Gmail as a proper desktop app: native notifications, unread badge, multiple accounts. My default mail app (Hyper + X)
For PDF editing, download PDF Gear - excellent free PDF editor with annotation tools (also on the Mac App Store). My default PDF app.
brew install --cask calibrecalibre - Ebook library manager and converter. How books get onto my Kobo
Communication
brew install --cask discordDiscord - Community and team communication
brew install --cask whatsappWhatsApp - Popular messaging platform
brew install --cask slackSlack - Work and team communication
brew install --cask telegramTelegram - Fast messaging with a native macOS client
brew install --cask zoomZoom - Video calls
Creative & Media Tools
brew install --cask cleanshotCleanShot X - Advanced screenshot and screen recording tool
PixelSnap 2 - Pixel-perfect on-screen measurement tool with edge detection. Measure distances, sizes, and grab colors anywhere on screen. Integrates with CleanShot for design and dev work
brew install --cask screen-studioScreen Studio - Professional screen recording with beautiful animations
DaVinci Resolve - Professional video editing and color grading. The Homebrew cask is gone, so download the installer from Blackmagic directly
brew install --cask figmaFigma - Collaborative design tool for UI/UX
Media Players
brew install --cask iinaIINA - Modern media player designed specifically for macOS. My default for all audio and video (setup below)
brew tap pear-devs/pear && brew install --cask pear-desktopPear Desktop - Unofficial YouTube Music desktop app (formerly th-ch/youtube-music) with ad-block, plugins, and a proper native window. Installs as YouTube Music.app
I'm pinned to 3.11.0. 3.12.0 was a regression for my setup, so the brew cask (which tracks latest) is not the way to restore it. Pull the exact DMG from GitHub releases instead:
cd ~/Downloads curl -LO https://github.com/pear-devs/pear-desktop/releases/download/v3.11.0/YouTube-Music-3.11.0-arm64.dmg MOUNT=$(hdiutil attach -nobrowse YouTube-Music-3.11.0-arm64.dmg | grep -o '/Volumes/.*') rm -rf "/Applications/YouTube Music.app" cp -R "$MOUNT/YouTube Music.app" /Applications/ hdiutil detach "$MOUNT" defaults read "/Applications/YouTube Music.app/Contents/Info.plist" CFBundleShortVersionString # → 3.11.0
Settings and plugins live in ~/Library/Application Support/YouTube Music and survive a swap of the .app. Back that folder up if you care about your config.
Keeping it pinned: plain brew upgrade skips this cask (auto_updates), so the daily routine is safe. Never run brew upgrade --greedy or brew reinstall --cask pear-desktop — both drag in latest. Inside the app, keep auto-update off (Options menu, or set "autoUpdates": false under options in config.json) and decline the update prompt if it ever shows.
Audio Utilities
brew install --cask soundsourceSoundSource - Advanced per-app volume control, audio routing, and system-wide EQ
brew install --cask finetuneFineTune - Free, open-source SoundSource alternative. Per-app volume control and audio routing in the menu bar
Security & Privacy
brew install --cask protonvpnProtonVPN - Secure VPN service with strong privacy focus
brew install --cask little-snitchLittle Snitch - Outbound firewall. See and block every connection every app tries to make
brew install --cask chatgptChatGPT - Official OpenAI desktop app. As of July 2026, the standalone Codex app has merged into ChatGPT: one app with Chat, Work, and Codex modes. No separate Codex desktop install — update ChatGPT (or your old Codex app) and switch to the Codex view for repos, diffs, PRs, and agent coding. You can set Codex as the default view / app icon if you live in the coding agent
Terminal Setup with Oh My Zsh
Step 1: Install Oh My Zsh
Oh My Zsh is a framework for managing your Zsh configuration with tons of helpful features.
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"Step 2: Install Powerlevel10k Theme
The most powerful and customizable Zsh theme:
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10kThen edit your ~/.zshrc:
nano ~/.zshrcChange the theme line to:
ZSH_THEME="powerlevel10k/powerlevel10k"Powerlevel10k's icons need a Nerd Font:
brew install --cask font-jetbrains-mono-nerd-fontThen pick JetBrainsMono Nerd Font as the terminal font.
Step 3: Install Essential Zsh Plugins
zsh-autosuggestions
Suggests commands as you type based on your history:
git clone https://github.com/zsh-users/zsh-autosuggestions.git $ZSH_CUSTOM/plugins/zsh-autosuggestionszsh-syntax-highlighting
Provides syntax highlighting for your shell commands:
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git $ZSH_CUSTOM/plugins/zsh-syntax-highlightingzsh-fast-syntax-highlighting
Faster and more feature-rich syntax highlighting:
git clone https://github.com/zdharma-continuum/fast-syntax-highlighting.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/plugins/fast-syntax-highlightingzsh-autocomplete
Real-time auto-completion as you type:
git clone --depth 1 -- https://github.com/marlonrichert/zsh-autocomplete.git $ZSH_CUSTOM/plugins/zsh-autocompleteEnabling the Plugins
Edit your ~/.zshrc file and update the plugins line:
nvim ~/.zshrcFind the line that says plugins=(git) and replace it with:
plugins=(git zsh-autosuggestions zsh-syntax-highlighting fast-syntax-highlighting zsh-autocomplete)Apply the changes:
source ~/.zshrcConfiguration Wizard: After restarting your terminal, Powerlevel10k will run a configuration wizard. Choose options that match your aesthetic preferences!
Step 4: Advanced Terminal Tools Setup
Initialize Shell History with Atuin
Set up magical shell history sync:
echo 'eval "$(atuin init zsh)"' >> ~/.zshrcatuin import autoThe init line is what actually binds Ctrl+R and the up arrow to Atuin; without it Atuin is installed but does nothing. fzf (below) also claims Ctrl+R, and whichever loads last in ~/.zshrc wins, so keep this line after the fzf one. The import pulls in your existing shell history
Configure Zoxide for Smart Navigation
Initialize zoxide in your shell:
echo 'eval "$(zoxide init zsh)"' >> ~/.zshrcNow use z instead of cd - it remembers your most used directories
Setup FZF Integration
Add fuzzy finding to your shell:
$(brew --prefix)/opt/fzf/installEnables Ctrl+R for history search and Ctrl+T for file search
Step 5: Handy ~/.zshrc Additions
Auto-Activate Python Virtual Environments
Activates the nearest .venv whenever you cd into a project, plus pnpm on the PATH:
# Auto-activate Python virtual environment if .venv exists (no auto-deactivate)
function auto_activate_env() {
local dir=$PWD
while [ "$dir" != "/" ]; do
if [ -d "$dir/.venv" ]; then
source "$dir/.venv/bin/activate"
echo "✅ Activated virtual environment ($dir/.venv)"
return
fi
dir=$(dirname "$dir")
done
}
autoload -U add-zsh-hook
add-zsh-hook chpwd auto_activate_env
# Also activate immediately on shell startup
auto_activate_env
# pnpm
export PNPM_HOME="$HOME/Library/pnpm"
case ":$PATH:" in
*":$PNPM_HOME:"*) ;;
*) export PATH="$PNPM_HOME:$PATH" ;;
esac
# pnpm endGhostty Terminal Configuration
Essential Ghostty Settings
My full Ghostty config. cmux is built on Ghostty and reads the same ~/.config/ghostty/config, so this one file covers both:
# Restore windows, tabs, and splits on relaunch
window-save-state = always
# ~75 MB of scrollback per terminal (the value is in bytes; agent logs get long)
scrollback-limit = 75000000
cursor-style = bar
cursor-style-blink = true
background-opacity = 0.95
background-blur-radius = 20What this does: Ghostty remembers your window positions, sizes, open tabs, and split configurations across sessions, and keeps enough scrollback that long agent runs never fall off the top. Config reference
Hyper Key Setup & Macros
Ultimate Productivity Shortcuts
Using BetterTouchTool's Hyper Key (⌘⌥⌃⇧). Never use your eyes for navigation (vision search is slow), use your muscle memory:
Configure these shortcuts in BetterTouchTool:
- Caps Lock → Act as Hyper Key (⌘⌥⌃⇧)
- Hyper + Q → Launch Arc
- Hyper + W → Launch Zen Browser
- Hyper + E → Launch cmux
- Hyper + R → Launch WhatsApp
- Hyper + A → Launch VS Code
- Hyper + S → Launch ChatGPT (includes Codex)
- Hyper + D → Launch Obsidian
- Hyper + F → Launch Discord
- Hyper + G → Launch YouTube Music
- Hyper + Z → Launch ForkLift
- Hyper + X → Launch Meru (Gmail)
- Hyper + C → Launch Notion Calendar
- Hyper + V → Launch Splinter
- Hyper + N → Launch Figma
- Hyper + 1-5 → Switch to Desktop 1-5
Tip: The Hyper Key eliminates conflicts with existing shortcuts while giving you instant access to any app. It's the most efficient way to navigate your Mac! On a new machine, export your BetterTouchTool preset and import it instead of rebuilding these by hand.
Development Environment Setup
Bun - Fast JavaScript Runtime
Install Bun, a fast all-in-one JavaScript runtime and toolkit:
brew install bunBun is in homebrew-core now, so brew upgrade keeps it current. The old curl -fsSL https://bun.sh/install | bash installer still works if you prefer ~/.bun
What is Bun? Bun is a modern JavaScript runtime that's significantly faster than Node.js. It includes a bundler, test runner, and package manager all in one. Perfect for modern web development!
Python Environment with uv
We already installed uv via Homebrew earlier. Now let's use it to manage Python versions:
uv python install 3.12Homebrew already brings a current Python 3.13/3.14 for scripts; uv manages the per-project versions. Run uv python pin 3.12 inside a project to write its .python-version
Why uv? uv is an extremely fast Python package and project manager written in Rust. It's 10-100x faster than pip and handles both package management and Python version management in one tool!
Git Configuration
Set up your Git identity and preferences:
git config --global user.name "Your Name"git config --global user.email "your.email@example.com"git config --global init.defaultBranch maingit config --global pull.rebase trueSSH Keys for GitHub
Generate and add SSH keys for secure GitHub access:
ssh-keygen -t ed25519 -C "your.email@example.com"eval "$(ssh-agent -s)"ssh-add ~/.ssh/id_ed25519pbcopy < ~/.ssh/id_ed25519.pubNow go to GitHub → Settings → SSH Keys and paste
Or let the GitHub CLI do the key upload and auth in one go:
gh auth loginPick GitHub.com → SSH → your id_ed25519.pub. This also gives coding agents a working gh for PRs and issues
My Global CLAUDE.md & AGENTS.md
Every coding agent I run inherits the same thinking style. I keep this prompt in my global ~/.claude/CLAUDE.md and a matching ~/.codex/AGENTS.md so Claude Code and Codex both reason the way I do by default. The block at the bottom routes work to the skills below:
Be organized, accurate, thorough, and detailed without unnecessary verbosity.
Treat me as an expert. Do not dumb things down.
Optimize for truth and correctness over approval, conformity, politeness, or harmony. If I'm wrong, say so directly.
Value good arguments over authorities or sources. Consider serious contrarian arguments alongside consensus expert views.
When useful, present the strongest counterargument to any position I appear to hold.
Do not capitulate when I push back unless I provide new evidence or a better argument.
Do not anchor on numbers, estimates, or assumptions I provide; generate your own independently.
Be skeptical by default. Look for hidden assumptions, failure modes, and ways to improve the answer, product, argument, or system.
My epistemology is the same as David Deutsch or Karl Popper. Naval Ravikant has serious resonance with my thinking loops.
Be surprisingly resourceful. Suggest non-obvious solutions. Be proactive and anticipate my needs. Assume I am high-agency and can make practically anything happen.
Cite sources. Use examples liberally.
Open-minded and impossible to offend. Be provocative, argumentative, and pointed when useful.
When copy editing, always mark changes inline.
About me: Kshitij (tjay) Dhyani (@type_tjay on X)
Co-founder of Ghostfeed, entrepreneur, technical, range of knowledge/experience.
<!-- BEGIN @agent-native/skills -->
When operating as Claude Fable, use the /efficient-fable skill always.
When using a high-cost frontier model for codebase-heavy work, use the /efficient-frontier skill always.
When writing final response status indicators, use the /quick-recap skill always.
When long-running or parallel work needs usage-limit checks, use the /stay-within-limits skill always.
<!-- END @agent-native/skills -->Claude Code & Codex Skills
Skills are reusable instruction packs that live in ~/.claude/skills/ and load on demand. These are the ones I keep installed:
npx skills add remotion-dev/skillsThe skills CLI installs a skill repo once into ~/.agents/skills/, symlinks it into Claude Code's and Codex's skill folders, and tracks sources in ~/.agents/.skill-lock.json. Swap in any owner/repo below
Code Quality
- thermo-nuclear-code-quality-review - Brutally strict maintainability review. Blocks files past 1,000 lines, rejects ad-hoc spaghetti conditionals, questions thin abstractions and magical behavior, and enforces architectural boundaries. From Cursor's team kit
Agent Orchestration & Usage
From BuilderIO/skills:
efficient-fable- Run Claude Fable as the orchestrator while cheaper subagents do token-heavy research, coding, and testingefficient-frontier- Same orchestration pattern for any high-cost frontier model: delegate heavy lifting, keep planning and final review on the expensive modelstay-within-limits- Respects 5-hour and weekly usage limits — pauses near the cap and resumes when the window clearsquick-recap- Red/yellow/green status block convention for final agent responses
Frontend & Design
frontend-design- Distinctive, production-grade frontend interfaces that avoid generic AI aestheticsui-skills- Opinionated technical constraints for building interfaces (React, TypeScript, Tailwind, composition patterns)web-design-guidelines- Reviews UI code for Web Interface Guidelines compliance — accessibility, UX, and design auditsvercel-react-best-practices- React and Next.js performance optimization guidelines from Vercel Engineeringbetter-ui- Polish pass for existing UI: concentric border radius, optical alignment, surface depth, contextual icons, hit areasemil-design-eng- Emil Kowalski's philosophy on UI polish, component design, and when (not) to animate- make-interfaces-feel-better - Design-engineering details that make interfaces feel polished: micro-interactions, enter/exit animations, shadows, typography, tabular numbers
- remotion-dev/skills - The full Remotion suite (video creation in React): remotion-best-practices is the router, plus create, markup, captions, maps, multimedia, interactivity, studio, render, docs, saas, and upgrade
Writing & Content
- humanizer - Strips signs of AI-generated writing, based on Wikipedia's "Signs of AI writing" guide
seo-writer- Long-form posts built to rank on Google page 1 and show up in AI Overviews: meta titles, schema markup, snippet-ready structuretiktok-hooks- Generates Gen-Z / college-apps TikTok hooks for the first 1-3 seconds of a video- ghostfeed-ai/skills - Drive Ghostfeed over MCP: ghostfeed-avatars, ghostfeed-slideshows (TikTok photo slideshows), and ghostfeed-ugc-reactions (UGC reaction videos)
Claude Code Plugins
From the official claude-plugins-official marketplace. Install each inside Claude Code with /plugin install <name>@claude-plugins-official:
commit-commands- /commit and /commit-push-pr in one stepcode-simplifier- Agent that simplifies recently changed code without changing behaviorcontext7- Pulls current library docs instead of relying on stale training dataplaywright- Browser automation for testing and clicking through flowsgithub,figma,vercel- First-party integrations for repos, design files, and deploysfrontend-design,swift-lsp- Design guidance and Swift language server support
MCP Servers & Hooks
claude mcp add --scope user --transport http linear https://mcp.linear.app/mcpLinear issues and projects from inside any Claude Code session
And a desktop notification whenever Claude Code finishes a task, in ~/.claude/settings.json (uses terminal-notifier from the CLI tools above):
{
"hooks": {
"Stop": [
{
"hooks": [
{
"type": "command",
"command": "terminal-notifier -title \"Claude Code\" -subtitle \"Task Complete\" -message \"Finished working in $(basename \"$PWD\")\" -sound Blow -timeout 10"
}
]
}
]
}
}System Maintenance
Regular Updates
Keep your system and applications up to date:
# Update Homebrew and all packagesbrew update && brew upgrade# Update Oh My Zshomz update# Update npm packages globallynpm update -gCloud Backup: Additionally, use iCloud to sync your important folders.
Mole - Deep Clean Your Mac
Mole deep cleans and optimizes your Mac — find large files, clear caches, and reclaim disk space with a clean, fast UI.
brew install --cask mole-appMole - Multi-language Mac cleaner and optimizer. Mole now lives in Homebrew proper: the mole-app cask is the desktop app, and brew install mole gets the CLI
Essential Extensions & Productivity Tools
VS Code Extensions
These are some very useful VScode Extensions:
Core Productivity Extensions
- Claude Code - Anthropic's official extension; runs Claude Code in the editor panel with inline diffs
- Better Comments - Styled comments with alerts, todos, and highlights
- Color Highlight - Highlight color values in your code
- Error Lens - See errors and warnings inline with your code
- Path Intellisense - Autocomplete for file paths
- TODO Highlight - Highlight TODO, FIXME comments
- DotENV - Syntax highlighting for .env files
- EditorConfig - Respect each repo's .editorconfig
Git Integration
- GitLens - Supercharge Git capabilities with blame annotations
- Git History - View git log, file history, and compare branches
- Git Graph - Visual commit graph with branch actions
- GitHub Actions - View runs and edit workflows with validation
Code Quality & Formatting
- ESLint - JavaScript/TypeScript linting
- Prettier - Code Formatter - Opinionated code formatter
- Ruff - Rust-fast Python linter and formatter (also sorts imports, so no separate isort)
Python Development
- Python - Core Python language support
- Pylance - Fast, feature-rich Python language server
- Python Debugger - Debug Python code with breakpoints
- Python Environments - Pick and manage venvs and interpreters
Web Development
- Tailwind CSS IntelliSense - Class autocomplete, linting, and hover previews
- ES7+ React Snippets - Component and hook snippets
- Auto Rename Tag - Rename the paired HTML/JSX tag as you type
- Live Server - Launch local development server with live reload
Containers
- Container Tools - Manage images, containers, and compose files (works with OrbStack)
- Dev Containers - Open a repo inside a container
Data & Documentation
- Rainbow CSV - Highlight CSV files with colors
- Office Viewer - Open Word, Excel, PDF, and Markdown files right in VS Code
Install the whole set in one go:
for ext in \
anthropic.claude-code aaron-bond.better-comments naumovs.color-highlight \
usernamehw.errorlens christian-kohler.path-intellisense wayou.vscode-todo-highlight \
mikestead.dotenv editorconfig.editorconfig \
eamodio.gitlens donjayamanne.githistory mhutchie.git-graph github.vscode-github-actions \
dbaeumer.vscode-eslint esbenp.prettier-vscode charliermarsh.ruff \
ms-python.python ms-python.vscode-pylance ms-python.debugpy ms-python.vscode-python-envs \
bradlc.vscode-tailwindcss dsznajder.es7-react-js-snippets formulahendry.auto-rename-tag \
ritwickdey.liveserver ms-azuretools.vscode-containers ms-vscode-remote.remote-containers \
mechatroner.rainbow-csv cweijan.vscode-office; do
code --install-extension "$ext"
doneFinal Tips & Tricks
Quick Look Enhancements
Enhance Quick Look (spacebar preview) with plugins:
brew install --cask qlmarkdown syntax-highlightQLMarkdown renders Markdown, Syntax Highlight previews source files. Both are modern Quick Look extensions: open each app once so macOS registers it. The old qlstephen, qlcolorcode, and quicklook-json casks are disabled in Homebrew now
Touch ID for sudo
Enable Touch ID for sudo commands:
sed "s/^#auth/auth/" /etc/pam.d/sudo_local.template | sudo tee /etc/pam.d/sudo_localDon't edit /etc/pam.d/sudo directly: macOS updates overwrite it and silently turn Touch ID back off. sudo_local is included by it and survives updates
Paste Without Formatting (Essential for Cursor)
Set up ⌘⇧V for paste without formatting - crucial when working in Cursor:
System Settings → Keyboard → Keyboard Shortcuts → App ShortcutsAdd shortcut for "Paste and Match Style" with ⌘⇧V

Reference: Reddit guide on paste without formatting
CleanShot X Auto Copy Setup
Enable auto copy to clipboard in CleanShot X for seamless screenshot workflow:
CleanShot X → Preferences → General → Auto copy to clipboardPosition the setting on the right side for easy access
Make CleanShot X the Default Image Viewer
macOS keeps reverting image defaults back to Preview because the "Open With → Change All" Finder dialog only binds a single UTI at a time and silently breaks when LaunchServices gets out of sync. Fix it permanently by setting every image UTI via duti:
brew install dutiA CLI for binding default apps by UTI — what the macOS GUI should have been
# CleanShot X's bundle ID is pl.maketheweb.cleanshotx
duti -s pl.maketheweb.cleanshotx public.jpeg all
duti -s pl.maketheweb.cleanshotx public.png all
duti -s pl.maketheweb.cleanshotx public.tiff all
duti -s pl.maketheweb.cleanshotx public.heic all
duti -s pl.maketheweb.cleanshotx public.heif all
duti -s pl.maketheweb.cleanshotx public.webp all
duti -s pl.maketheweb.cleanshotx com.compuserve.gif all
duti -s pl.maketheweb.cleanshotx public.image all
# Verify it stuck
duti -x jpg
duti -x pngIf it still reverts, your LaunchServices database is corrupt — rebuild it and re-run the binds:
/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -kill -r -domain local -domain system -domain user
killall FinderWhy this works: Finder's "Change All" writes to a per-extension preference that other apps (and macOS updates) can stomp on. duti writes directly to the LaunchServices preferences plist using the canonical UTI, which is the same mechanism macOS itself uses internally — so the binding survives reboots, app updates, and OS upgrades.
Make IINA the Default Audio & Video Player
Same playbook as CleanShot above, but for IINA — the only macOS video player worth running. Bind every common audio/video UTI to com.colliderli.iina so QuickTime and Music stop hijacking your double-clicks:
IINA=com.colliderli.iina
# --- Video UTIs ---
for uti in \
public.movie public.video public.audiovisual-content \
public.mpeg-4 public.mpeg public.mpeg-2-video \
public.avi public.3gpp public.3gpp2 \
com.apple.quicktime-movie com.apple.m4v-video \
com.microsoft.windows-media-wmv com.microsoft.advanced-systems-format \
org.webmproject.webm public.flc-animation; do
duti -s "$IINA" "$uti" all
done
# --- Audio UTIs ---
for uti in \
public.audio public.mp3 public.mpeg-4-audio public.aac-audio \
public.aifc-audio public.aiff-audio \
com.apple.m4a-audio com.apple.coreaudio-format \
com.microsoft.waveform-audio \
org.xiph.flac org.xiph.ogg-audio com.real.realaudio; do
duti -s "$IINA" "$uti" all
done
# --- Extension fallbacks for formats with non-canonical UTIs ---
# (.ts is deliberately left out: it's TypeScript far more often than MPEG-TS video)
for ext in mkv opus webm flac ogg m2ts mts mxf wv ape \
rm rmvb ra asf vob flv f4v divx dv mp2 m3u m3u8; do
duti -s "$IINA" "$ext" all
done
# Force-register IINA so LaunchServices knows its claims
/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -f "/Applications/IINA.app"
killall FinderVerify with duti -x mp4, duti -x mkv, duti -x mp3 — all three should print IINA.
Gotchas: A few obscure formats (tak, amv, xvid) have no registered UTI on macOS and will fail silently — ignore them. .pls playlists are aggressively claimed by Apple Music and IINA doesn't even declare them; not worth fighting since you'll likely never see one. Everything that matters (mp4 / mov / mkv / webm / mp3 / m4a / flac / opus / wav) sticks permanently.
Same trick for PDFs, pointing them at PDF Gear:
duti -s com.pdfeditor.pdfeditormac com.adobe.pdf allMake VS Code the Default for Text & Code
Out of the box, macOS scatters text files everywhere: Markdown into whatever ebook app claimed it, JSON into the browser, CSV into ChatGPT, .ts into a video player. One pass fixes it, and routes Word docs to LibreOffice while we're at it:
VSCODE=com.microsoft.VSCode
# --- Text, code, config, and data UTIs ---
for uti in public.plain-text public.source-code public.script public.shell-script \
public.json public.xml public.yaml public.comma-separated-values-text \
net.daringfireball.markdown com.apple.property-list com.apple.log; do
duti -s "$VSCODE" "$uti" all
done
# --- Extensions macOS knows ---
for ext in md markdown txt log json yaml yml xml plist csv tsv \
js mjs ts py sh zsh bash swift c h cpp hpp java rb php css svg; do
duti -s "$VSCODE" "$ext" all
done
# --- Word-processor docs -> LibreOffice (sheets and slides already go there) ---
for ext in docx doc rtf odt; do
duti -s org.libreoffice.script "$ext" all
doneExtensions no app registers a proper type for (tsx, jsx, go, rs, toml, scss, sql, env, …) make duti fail with error -50. Write those the way Finder's "Change All" does, as extension handlers, then restart LaunchServices so it reloads them instead of saving over them:
D=com.apple.LaunchServices/com.apple.launchservices.secure
defaults export $D /tmp/ls.plist
python3 - <<'EOF'
import plistlib
p = "/tmp/ls.plist"
d = plistlib.load(open(p, "rb"))
exts = ("mdx jsonc toml cjs tsx jsx go rs kt lua scss sass less env ini conf cfg "
"sql graphql vue svelte astro lock").split()
hs = [h for h in d.get("LSHandlers", []) if h.get("LSHandlerContentTag") not in exts]
hs += [{"LSHandlerContentTag": e,
"LSHandlerContentTagClass": "public.filename-extension",
"LSHandlerRoleAll": "com.microsoft.vscode",
"LSHandlerPreferredVersions": {"LSHandlerRoleAll": "-"}} for e in exts]
d["LSHandlers"] = hs
plistlib.dump(d, open(p, "wb"))
EOF
defaults import $D /tmp/ls.plist && killall lsdGotchas: Run the duti commands first, then this. Editing the plist without the killall lsd doesn't stick: LaunchServices keeps its own copy in memory and writes it back over your change. macOS may pop a confirmation for a type another app already owns (.ts vs IINA); click the VS Code option. Verify with duti -x tsx.
Remove Full Screen Shortcut Conflict
Disable ⌘⇧F full screen shortcut to avoid conflicts with code search:
System Settings → Keyboard → Keyboard Shortcuts → App ShortcutsFind "Enter Full Screen" and remove ⌘⇧F shortcut
VS Code Auto Close Tags
Enable automatic tag closing in VS Code for faster HTML/JSX editing:
VS Code → Settings → Search "auto close tags"Enable "Auto Close Tags" setting
VS Code Settings
The handful of settings I change, via Command Palette (⌘⇧P) → "Preferences: Open User Settings (JSON)":
{
// File tree on the right, so opening it doesn't shift the code
"workbench.sideBar.location": "right",
// Never lose work to a forgotten save
"files.autoSave": "afterDelay",
// Claude Code lives in the bottom panel instead of a sidebar
"claudeCode.preferredLocation": "panel",
// Use Homebrew's Python by default
"python.defaultInterpreterPath": "/opt/homebrew/bin/python3"
}Shortcuts to Live By
These keyboard shortcuts will save you time:
VS Code / Cursor Shortcuts
- ⌘ + ← Collapse all folders in file explorer