Mac Developer Essentials
Essential tools for Mac development: GitHub CLI, Git, Node.js, pnpm, Cursor, Claude Code, and Powerlevel10k.
How long will this setup take?
The complete setup takes about 15-20 minutes. You can also pick and choose specific tools if you already have some installed.
Setting up a new Mac for development can feel overwhelming with countless tools and configurations. This guide gives you exactly what you need to be productive immediately.
Weâll start with foundational tools, then layer in productivity enhancers that make Mac development enjoyable.
Package Manager Setup
Why start with Homebrew?
Homebrew is the missing package manager for macOS. Instead of hunting down installers, dealing with version conflicts, or manually managing dependencies, Homebrew handles everything with simple commands. Itâs how experienced Mac developers install and manage their tools - one command instead of clicking through dozens of installation wizards.
Before installing anything else, we need a package manager. Homebrew is the Mac standard. Every tool installed through Homebrew follows the same patterns, updates the same way, and can be removed cleanly without leaving artifacts scattered across your system.
Install Homebrew
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
After installation, you need to add Homebrew to your PATH. This step is often missed, leading to âcommand not foundâ errors that frustrate new users. The location depends on your Macâs architecture:
For Apple Silicon Macs (M1/M2/M3):
echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zprofile
eval "$(/opt/homebrew/bin/brew shellenv)"
For Intel Macs:
echo 'eval "$(/usr/local/bin/brew shellenv)"' >> ~/.zprofile
eval "$(/usr/local/bin/brew shellenv)"
The difference in paths exists because Apple Silicon Macs use a different directory structure to maintain compatibility with both ARM and Intel binaries. Donât worry if this seems complex - once set up, youâll never think about it again.
Git & GitHub CLI
Why do I need both Git and GitHub CLI?
Git handles version control locally, while GitHub CLI connects you to GitHubâs services. Together, they eliminate the friction of managing code. No more switching to the browser to create pull requests, no more complex SSH key setups - just seamless integration between your local work and GitHub.
Git provides version control, change history, and safe experimentation. The GitHub CLI brings GitHubâs collaborative features directly to your terminal.
Install Git and GitHub CLI
This single command installs both tools. Homebrew handles all the dependencies, ensures theyâre compatible, and sets up the necessary paths. Compare this to manually downloading installers, running them, and hoping everything works together.
Authenticate GitHub CLI
Choose:
- GitHub.com
- HTTPS
- Login with web browser
What about SSH keys?
GitHub CLI handles authentication automatically, creating and managing credentials securely. You can still set up SSH keys if you prefer, but for most developers, the GitHub CLIâs authentication is simpler and just as secure.
The authentication process opens your browser, confirms your identity, and securely stores your credentials. This modern approach is more secure than manually managing SSH keys and works seamlessly across different repositories and organizations.
Git Configuration
Why configure Git beyond the basics?
These configurations arenât just preferences - they solve real problems. Setting your identity ensures your commits are properly attributed. The other settings prevent common frustrations like merge conflicts, orphaned branches, and inconsistent branch names across projects.
Gitâs defaults are conservative. These configurations address specific pain points that developers encounter daily.
Set Your Identity
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"
This identifies your commits across all repositories. Use the same email associated with your GitHub account to link your commits to your profile.
Essential Git Defaults
# Set main as default branch
git config --global init.defaultBranch main
# Auto-setup remote tracking
git config --global push.autoSetupRemote true
# Better merge conflict display
git config --global merge.conflictstyle diff3
# Prune deleted remote branches
git config --global fetch.prune true
Why each setting matters:
- Default branch as main: Aligns with modern conventions and GitHubâs defaults
- Auto-setup remote tracking: Eliminates the âno upstream branchâ error when pushing new branches
- Diff3 conflict style: Shows the common ancestor in merge conflicts, making resolution clearer
- Prune on fetch: Automatically cleans up references to deleted remote branches
These settings prevent small frustrations that compound into major productivity losses.
Node.js & pnpm
Why pnpm instead of npm or yarn?
pnpm is faster and uses significantly less disk space by sharing dependencies across projects. If a hundred projects use React 18, pnpm stores it once and links it everywhere. It also prevents the âworks on my machineâ problem by ensuring stricter dependency resolution.
JavaScript development requires a package manager. While npm comes with Node.js, pnpm solves real problems that plague JavaScript projects: disk space consumption, installation speed, and phantom dependencies.
Install Node.js
This installs the latest stable Node.js and npm. Even if you plan to use pnpm exclusively, npm is needed for global packages and as a fallback.
Install pnpm
npm install -g pnpm
# Enable corepack (Node's official package manager manager)
corepack enable
corepack prepare pnpm@latest --activate
Will pnpm work with my existing projects?
Yes! pnpm is fully compatible with npm and yarn projects. You can use pnpm install
in any project with a package.json. Your teammates can continue using npm or yarn - pnpm generates a standard node_modules structure.
Corepack is Nodeâs built-in tool for managing package managers. It ensures everyone on a project uses the same package manager version, preventing âworks on my machineâ issues. This is especially valuable in team environments where consistency matters.
Code Editors
Do I need both Cursor and Claude Code?
They serve different purposes. Cursor is your primary IDE for deep work - writing features, refactoring, debugging. Claude Code excels at quick edits, code generation, and interactive problem-solving from the terminal. Think of Cursor as your workshop and Claude Code as your Swiss Army knife.
Modern developers use multiple tools for different tasks. Cursor and Claude Code complement each other, covering everything from quick fixes to complex development sessions.
Install Cursor
brew install --cask cursor
Cursor is a fork of VS Code with AI capabilities built in:
- AI understands your entire codebase context
- Natural language editing that actually works
- Predictions that feel like a senior developer looking over your shoulder
The --cask
flag tells Homebrew this is a GUI application. Homebrew Cask manages these just like command-line tools, providing consistent installation and updates.
Install Claude Code
npm install -g @anthropic/claude-code
# Start using it
claude
Claude Code brings Anthropicâs Claude directly to your terminal. Use it for:
- Rapid prototyping without leaving the command line
- Explaining complex code sections
- Generating boilerplate that actually fits your projectâs patterns
- Interactive debugging sessions where you can ask âwhy isnât this working?â
The first thing youâll realize is that Claude Code asks your permission for literally everything - every file read, every command execution, every edit. This is by design for safety, but once you feel comfortable with it, running claude --dangerously-skip-permissions
will bypass permission checks. Iâm not responsible for what might happen if you use this flag - itâs powerful but removes important safeguards!
Powerlevel10k Terminal Theme
Why customize my terminal?
A well-configured terminal isnât about aesthetics - itâs about information density and reducing cognitive load. Powerlevel10k shows git status, execution time, error states, and context without requiring separate commands. Youâll spot issues faster and understand your environment at a glance.
The default terminal shows just a dollar sign and cursor. Powerlevel10k transforms it into an information-rich environment that helps you work better.
Install Powerlevel10k
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ~/powerlevel10k
echo 'source ~/powerlevel10k/powerlevel10k.zsh-theme' >> ~/.zshrc
The --depth=1
flag performs a shallow clone, downloading only the latest version without the entire history. This saves time and space while giving you everything you need.
Add Helpful Zsh Plugins
These plugins transform your terminal from a command executor to an intelligent assistant:
# Auto-suggestions as you type
git clone https://github.com/zsh-users/zsh-autosuggestions ~/.zsh/zsh-autosuggestions
echo "source ~/.zsh/zsh-autosuggestions/zsh-autosuggestions.zsh" >> ~/.zshrc
# Syntax highlighting for commands
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ~/.zsh/zsh-syntax-highlighting
echo "source ~/.zsh/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh" >> ~/.zshrc
Auto-suggestions remember your command history and suggest completions as you type. Syntax highlighting shows valid commands in green and errors in red before you press enter. Together, they catch typos, remind you of forgotten flags, and speed up repetitive tasks.
Restart terminal and run:
Recommended settings for developers:
- Prompt Style: Lean (clean and fast)
- Character Set: Unicode
- Prompt Height: One line
- Prompt Spacing: Compact
The configuration wizard is interactive and shows you exactly how your prompt will look. You can reconfigure anytime by running the command again.
Verification Checklist
How do I know everything is working?
Run through this checklist to verify your installation. Each command should return a version number or status message. If something fails, that component needs attention - but donât let one failure stop you from checking everything else.
# Package manager
brew --version
# Version control
git --version
gh --version
# Node.js and pnpm
node --version
pnpm --version
# Editors (if installed)
cursor --version
claude-code --version
# Check git config
git config --get user.name
git config --get user.email
# Test GitHub CLI
gh auth status
Save this checklist - itâs useful whenever you set up a new machine or help a colleague debug their environment.
One-Command Setup
Can I automate all of this?
Absolutely! This script installs everything in one go. Itâs perfect for setting up new machines, onboarding team members, or recovering from a system reinstall. The script is idempotent - running it multiple times wonât cause issues.
Save this as ~/setup-essentials.sh
:
#!/bin/bash
echo "Installing Mac Developer Essentials..."
# Install Homebrew
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
eval "$(/opt/homebrew/bin/brew shellenv)"
# Git and GitHub CLI
brew install git gh
# Node.js
brew install node
npm install -g pnpm
# Code editors
brew install --cask cursor
npm install -g @anthropic/claude-code
# Powerlevel10k
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ~/powerlevel10k
# Zsh plugins
git clone https://github.com/zsh-users/zsh-autosuggestions ~/.zsh/zsh-autosuggestions
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ~/.zsh/zsh-syntax-highlighting
echo "Setup complete! Restart terminal and:"
echo "1. Run 'p10k configure' to set up your prompt"
echo "2. Run 'gh auth login' to connect GitHub"
echo "3. Configure git with your name and email"
Make it executable and run:
chmod +x ~/setup-essentials.sh
~/setup-essentials.sh
The script provides clear next steps because some configurations require interactive input.
Next Steps
Your essentials are installed. The tools form a solid foundation for productivity enhancers that multiply your effectiveness.
Each next step builds on what youâve installed. Productivity apps leverage your terminal setup. Aliases enhance your shell. Keyboard shortcuts work across all tools. Each piece of the system amplifies the others.