This directory contains tools and scripts to set up a complete development environment on macOS using Homebrew.
Brewfile- Declarative list of all development tools and packagesinstall-brewfile.sh- Full-featured installation script with error handlinginstall-now.sh- Quick one-liner installation scriptconfigure-delta.sh- Configure delta as git pager for beautiful diffsconfigure-zsh-autocomplete.sh- Configure zsh with fzf-tab and autocompletion plugins
- macOS (Ventura 13+ or higher recommended)
- Administrator access (for some installations like Docker Desktop)
- Internet connection
If you don't have Homebrew installed:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"After installation, add Homebrew to your PATH:
# For Apple Silicon Macs
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)"# If you have this in a git repo
git clone https://github.com/IcodeNet/mac-tools.git ~/dev/mac-tools
cd ~/dev/mac-tools
# Or if you already have it
cd ~/dev/mac-toolsOption 1: Full Installation Script (Recommended)
bash install-brewfile.shThis script:
- β Sets PATH correctly
- β Detects Homebrew automatically
- β Handles errors gracefully (including sudo password prompts)
- β Shows progress and results
- β Safe to run multiple times (idempotent)
Option 2: Quick Installation
bash install-now.shOption 3: Direct Homebrew Command
brew bundle install --file Brewfile --no-upgradeThis step sets up fuzzy tab completion and command suggestions:
bash configure-zsh-autocomplete.shThis will configure:
- β zinit plugin manager
- β fzf-tab (fuzzy searchable tab completions)
- β zsh-autosuggestions (command suggestions)
- β zsh-completions (enhanced completions)
- β fast-syntax-highlighting (syntax colors)
- β Starship prompt (if installed) - Beautiful, informative prompt with git status, language versions, and more
After running this script:
- Restart your terminal (close and reopen completely)
- Or run:
source ~/.zshrc
Test it:
cd <Tab> # Should show fuzzy searchable menu
git checkout <Tab> # Should show fuzzy branch search
Ctrl+R # Should show fuzzy history searchFor beautiful git diffs:
bash configure-delta.sh# Check key tools
zsh --version
fzf --version
git --version
node --version
python3 --version
# Check if autocompletion is working
# In a new terminal, try: cd <Tab>After running configure-zsh-autocomplete.sh, you'll have:
- Beautiful Prompt - Starship prompt with git status, language versions, and contextual information
- Fuzzy Tab Completion - Type
cd <Tab>to see searchable directory menu - Command Suggestions - Gray text suggests commands as you type (press
βto accept) - Enhanced Completions - Better completions for git, python, npm, etc.
- Syntax Highlighting - Commands are colored as you type
- History Search -
Ctrl+Rfor fuzzy command history search - File Search -
Ctrl+Tfor fuzzy file search
- Modern CLI Tools - eza (ls), bat (cat), fd (find), ripgrep (grep)
- Package Managers - npm, pnpm, yarn, pip, uv, poetry, pdm, hatch, conda/mamba
- Version Managers - volta (Node.js), pyenv (Python)
- Container Tools - Docker Desktop, Rancher Desktop
- Code Editors - VS Code, Cursor
- And much more - See full tool list below
Both installation scripts perform the same core function but with different levels of detail:
- Set PATH correctly - Ensures all system commands (
curl,grep,cut, etc.) are available - Detect Homebrew - Automatically finds Homebrew installation (Apple Silicon or Intel)
- Install packages - Installs all packages listed in the Brewfile
- Idempotent - Safe to run multiple times; skips already installed packages
Why we need them:
- PATH Safety: Prevents "command not found" errors during installation
- Automation: One command installs your entire development environment
- Reproducibility: Same setup on any Mac, anytime
- Idempotency: Can run multiple times without breaking anything
The Brewfile is a declarative configuration file that lists all your development tools. It's like a package.json for your Mac.
What it contains:
- Core Tools: zsh, git, gh (GitHub CLI)
- Modern CLI Tools: eza (ls), bat (cat), fd (find), ripgrep (grep)
- Development Tools: direnv, volta, pnpm, fzf, jq, httpie
- System Tools: btop, tmux, starship, powerlevel10k
- Database Tools: libpq, pgcli
- Applications: ngrok, iterm2
Why we need it:
- Version Control: Track your development environment setup
- Quick Setup: Set up a new Mac in minutes
- Team Consistency: Share the same tools across your team
- Documentation: Self-documenting list of what you use
- zsh - Modern shell with better features than bash
- git - Version control system
- gh - GitHub CLI for managing repositories and issues
- eza - Modern
lswith colors, icons, and better formatting - bat - Modern
catwith syntax highlighting and Git integration - fd - Fast, user-friendly alternative to
find - ripgrep (rg) - Extremely fast text search tool
- delta - Beautiful Git diff viewer
- direnv - Automatically load/unload environment variables per directory
- volta - Fast, reliable JavaScript tool manager and Node.js version manager
- pnpm - Fast, disk space efficient package manager
- fzf - Fuzzy finder for command-line
- jq - Command-line JSON processor
- httpie - User-friendly HTTP client
- yarn - Fast, reliable package manager (alternative to pnpm)
- typescript - TypeScript compiler for type-safe JavaScript development
- btop - Modern system monitor (better than htop)
- tmux - Terminal multiplexer for managing multiple sessions
- starship - Fast, customizable cross-shell prompt
- powerlevel10k - Zsh theme framework
- tree - Display directory structure
- libpq - PostgreSQL client library
- pgcli - Interactive PostgreSQL CLI with autocompletion
- node@20 - Node.js LTS for React/Expo development
- npm - Comes automatically with Node.js (no separate installation needed)
- volta - Fast Node.js version manager (already installed, see line 17)
- watchman - File watching service (essential for React Native/Expo hot reloading)
- yarn - Fast, reliable package manager
- pnpm - Fast, disk space efficient package manager (already installed)
- typescript - TypeScript compiler for type-safe development
Node Version Managers:
- Volta (already installed) - Fast, reliable, recommended
- nvm - Available via Homebrew (note: upstream doesn't officially support Homebrew install)
- n - Simple alternative to nvm, also available via Homebrew
- [email protected] - Python for AI/ML development (latest stable version)
- jupyterlab - Jupyter Lab for interactive notebooks and data science
- docker-desktop - Containerization for AI models and development environments
- Rancher Desktop (manual install) - Alternative to Docker Desktop with built-in Kubernetes support
- node@20 - Node.js LTS (see Node.js section above)
- watchman - File watching for hot reloading (see Node.js section above)
- bruno - Open-source API client (alternative to Postman) for testing REST/GraphQL APIs
- mockoon - API mocking tool for local development and testing
- docker-desktop - Containerization for React apps and services
- Rancher Desktop (manual install) - Alternative container runtime with Kubernetes
- typescript - Type-safe JavaScript (see Node.js section above)
- visual-studio-code - Essential editor for React, .NET, and AI development
- dotnet@8 - .NET 8 SDK for C# and .NET development
- dotnet - .NET 9 SDK (latest stable) for C# and .NET development
- visual-studio-code - VS Code with C# extension for .NET development
- Note: Both .NET 8 and 9 are installed and can be used simultaneously
- azure-cli - Azure CLI for managing Azure resources from command line
- azcopy - Command-line utility for transferring data to/from Azure Storage
- azure-data-studio - Cross-platform database tool for Azure SQL, Cosmos DB, and more
- microsoft-azure-storage-explorer - Standalone app for managing Azure Storage accounts
- Note: Azure Cosmos DB Emulator is Windows-only; use Docker or Azure portal for local development
- ngrok - Secure tunneling to localhost (see usage below)
- iterm2 - Advanced terminal emulator
- raycast - Best-of-breed app launcher with extensions, intellisense, and productivity features
- dash - API documentation browser with code snippets, autocomplete, and offline access
- bruno - Open-source API client (replaces Postman)
- mockoon - API mocking tool for local development
- docker-desktop - Docker Desktop for containerization
- notion - All-in-one workspace with AI capabilities for project management
- visual-studio-code - VS Code editor (essential for multi-language development)
To update all installed packages:
brew update
brew upgradeTo update specific packages, edit the Brewfile and run the installation script again.
To remove packages not in your Brewfile:
cd ~/dev/mac-tools
brew bundle cleanup --file Brewfile- Edit
Brewfile - Add the package:
brew "package-name"orcask "app-name" - Run the installation script again
- Remove the line from
Brewfile - Run:
brew uninstall package-name(orbrew uninstall --cask app-name)
The installation scripts set PATH correctly. If you still see errors:
- Make sure you're running the script from the
mac-toolsdirectory - Check that Homebrew is installed:
brew --version - Restart your terminal after installation
If you see symlink errors (like with pnpm), run:
brew link --overwrite package-nameThe scripts are idempotent - they'll skip already installed packages. This is normal and safe.
After installing packages, set up enhanced terminal autocompletion:
cd ~/dev/mac-tools
bash configure-zsh-autocomplete.shThis script configures:
- Starship prompt - Beautiful, informative prompt with git status, language versions, and more (if installed)
- fzf-tab - Fuzzy searchable tab completions (
cd <Tab>shows searchable menu) - zsh-autosuggestions - Command suggestions as you type (press
βto accept) - zsh-completions - Enhanced tab completions for all commands
- fast-syntax-highlighting - Real-time syntax highlighting
Features:
- Fuzzy searchable tab completions for all commands
- Command suggestions based on history
- Enhanced completions for git, python, npm, etc.
- Syntax highlighting as you type
Test it:
cd <Tab>- Fuzzy search directoriesgit checkout <Tab>- Fuzzy search branchesCtrl+R- Search command historyCtrl+T- Search files
For beautiful git diffs:
cd ~/dev/mac-tools
bash configure-delta.shThis will set up delta with:
- Side-by-side diff view
- Syntax highlighting
- Line numbers
- Navigation support (arrow keys)
- Dracula theme (customizable)
What is delta? Delta is a syntax-highlighting pager for git, diffs, and grep output. It makes reading code changes much easier with:
- Color-coded additions (green) and deletions (red)
- Syntax highlighting for code
- Side-by-side comparison view
- Better readability than default git diff
Raycast is a powerful app launcher that provides intelligent autocomplete and productivity features:
- Fast app/file search with fuzzy matching
- Extensions ecosystem - GitHub, Jira, Linear, and more
- Clipboard history with search
- Window management and quick actions
- Custom workflows and scripts
Usage:
- Press
Cmd+Space(or customize) to open Raycast - Type to search apps, files, or use extensions
- Install extensions from the Raycast Store
Dash provides offline access to API documentation with intelligent search:
- 200+ docsets for popular frameworks and languages
- Code snippets management
- Intelligent autocomplete for API references
- Offline access - works without internet
- Integration with editors (VS Code, Cursor, etc.)
Usage:
- Search API documentation offline
- Store and organize code snippets
- Quick reference while coding
π Quick Setup (Recommended):
After installing packages from Brewfile, run the autocompletion setup script:
cd ~/dev/mac-tools
bash configure-zsh-autocomplete.shThis script will:
- β Install zinit plugin manager
- β Configure Starship prompt (if installed) - Beautiful prompt with git status, language versions, and contextual info
- β Configure fzf-tab for fuzzy tab completion
- β Set up zsh-autosuggestions (command suggestions)
- β Configure zsh-completions (enhanced completions)
- β Set up fast-syntax-highlighting (syntax colors)
- β Configure proper plugin loading order
What You Get:
-
Starship Prompt - Beautiful, informative prompt (if Starship is installed)
- Shows git branch, status, and commit info
- Displays language versions (Node.js, Python, Rust, etc.)
- Shows directory path with smart truncation
- Command execution time for long-running commands
- Customizable colors and format
-
fzf-tab - Beautiful fuzzy searchable tab completions
- Type
cd <Tab>to see fuzzy searchable directory menu - Type to filter, arrow keys to navigate, Enter to select
- Works for all commands (git, python, etc.)
- Type
-
zsh-autosuggestions - Command suggestions as you type
- Gray text appears showing suggestions from history
- Press
β(right arrow) to accept suggestion
-
zsh-completions - Enhanced tab completions
- Better completions for many commands
- Press
Tabonce to complete, twice to see options
-
fast-syntax-highlighting - Real-time syntax highlighting
- Valid commands in green, invalid in red
- Colors file paths, options, etc.
-
fzf - Fuzzy finder (already installed via Brewfile)
Ctrl+R- Search command historyCtrl+T- Search files in current directoryAlt+C- Search and cd into directories
Manual Setup (If Needed):
If you prefer to configure manually, the plugins are:
zsh-autosuggestions- Suggests commands as you type based on historyzsh-syntax-highlighting- Real-time syntax highlighting for commandszsh-completions- Additional completion definitionsfzf-tab- Fuzzy tab completion using fzf
Important: Plugin loading order matters! fzf-tab must load BEFORE autosuggestions and syntax-highlighting. The setup script handles this automatically.
Testing:
After running the setup script:
- Restart your terminal or run:
source ~/.zshrc - Test:
cd <Tab>- should show fuzzy searchable menu - Test:
git checkout <Tab>- should show fuzzy branch search - Test:
Ctrl+R- should show fuzzy history search
Troubleshooting:
If tab completion doesn't work:
# Rebuild completion cache
rm ~/.zcompdump* && exec zsh
# Verify fzf is installed
fzf --version
# Check if plugins are loaded
zinit listNode.js is installed via Homebrew (node@20 - LTS version). npm (Node Package Manager) comes automatically with Node.js - you don't need to install it separately.
Verify installation:
node --version # Should show v20.x.x or higher
npm --version # Should show 10.x.x or higherYou have Volta already installed (line 17 in Brewfile), which is a fast and reliable Node.js version manager. Here are your options:
- Fast - Written in Rust, very performant
- Automatic - Automatically switches Node versions per project
- Reliable - No shell startup delays
Usage:
volta install node@20 # Install Node.js version
volta install node@18 # Install another version
volta pin node@20 # Pin version for current projectAvailable via Homebrew, but note: upstream doesn't officially support Homebrew installation. Better to install via their official script:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.0/install.sh | bashSimple Node version manager, also available via Homebrew:
brew install n
n lts # Install latest LTS
n latest # Install latest versionRecommendation: Stick with Volta since it's already installed and is the fastest option.
You have multiple package managers available:
- npm - Comes with Node.js (default)
- pnpm - Already installed (line 18), fast and disk-efficient
- yarn - Added to Brewfile, fast and reliable
Choose based on your needs:
- npm - Default, works everywhere
- pnpm - Best for disk space and speed
- yarn - Great for large monorepos
Docker Desktop is included in the Brewfile and provides:
- Container runtime (Docker Engine)
- Docker CLI tools
- GUI for managing containers
- Built-in Kubernetes (optional)
Usage:
docker --version # Verify installation
docker ps # List running containers
docker run hello-world # Test DockerRancher Desktop is a great alternative to Docker Desktop, especially if you need Kubernetes:
Features:
- β Built-in Kubernetes (no separate setup needed)
- β
Supports both
containerdanddockerd (moby)engines - β Open-source and free
- β Works with Docker CLI (when using dockerd engine)
- β Better for Kubernetes development
Installation (Manual - Not via Homebrew):
- Visit https://rancherdesktop.io/
- Download the
.dmgfor your Mac (Apple Silicon or Intel) - Open the
.dmgand drag to Applications folder - Launch and configure:
- Choose container engine (dockerd for Docker CLI compatibility)
- Enable Kubernetes if needed
- Set PATH to "Automatic"
System Requirements:
- macOS 13 (Ventura) or higher
- 8 GB RAM minimum (16 GB recommended)
- 4 CPU cores minimum
- Apple Silicon or Intel with VT-x
When to use Rancher Desktop vs Docker Desktop:
- Rancher Desktop: If you need Kubernetes, prefer open-source, or want built-in K8s
- Docker Desktop: If you just need containers, prefer the official Docker tooling, or need Docker Desktop-specific features
Note: Both can coexist, but you typically use one at a time. Rancher Desktop can use the same Docker CLI commands when configured with dockerd engine.
Bruno is a modern, open-source alternative to Postman for API testing:
Features:
- β Open-source and free
- β Collections stored as files (version control friendly)
- β No cloud sync required (privacy-focused)
- β Supports REST, GraphQL, and more
- β Beautiful, modern UI
- β Works offline
Usage:
- Launch Bruno from Applications
- Create collections to organize your API requests
- Collections are saved as folders (great for Git)
- Perfect for React/Expo backend development
Website: https://www.usebruno.com/
Mockoon is a powerful API mocking tool for local development:
Features:
- β Create mock APIs instantly
- β No coding required
- β Supports REST, GraphQL, and WebSockets
- β Environment variables and templating
- β Great for frontend development without backend
- β Export/import mock configurations
Usage:
- Launch Mockoon from Applications
- Create mock servers for your React/Expo apps
- Test frontend without waiting for backend APIs
- Perfect for development and testing
Website: https://mockoon.com/
Both .NET 8 (dotnet@8) and .NET 9 (dotnet) are installed via Homebrew. These are "keg-only" formulas, meaning they're not automatically added to your PATH.
Setup .NET in your shell:
Add to your ~/.zshrc (or ~/.bash_profile if using bash):
# .NET SDK (defaults to .NET 9, latest)
export DOTNET_ROOT="/opt/homebrew/opt/dotnet/libexec"
export PATH="$DOTNET_ROOT:$PATH"
# Optional: If you need to switch to .NET 8, use:
# export DOTNET_ROOT="/opt/homebrew/opt/dotnet@8/libexec"
# export PATH="$DOTNET_ROOT:$PATH"Then reload your shell:
source ~/.zshrcVerify installation:
dotnet --version # Should show 9.x.x (or 8.x.x if using dotnet@8)
dotnet --list-sdks # List all installed SDKs (both 8 and 9)Both .NET 8 and 9 are installed simultaneously. The dotnet command will use whichever version is in your PATH (defaults to .NET 9).
To switch between versions:
-
Change PATH in your shell config (permanent):
# For .NET 9 (default) export DOTNET_ROOT="/opt/homebrew/opt/dotnet/libexec" # For .NET 8 export DOTNET_ROOT="/opt/homebrew/opt/dotnet@8/libexec"
-
Use global.json in your project (project-specific):
{ "sdk": { "version": "8.0.122", "rollForward": "latestMinor" } } -
Check which SDKs are available:
dotnet --list-sdks # Output will show both versions: # 8.0.122 [/opt/homebrew/opt/dotnet@8/libexec] # 9.0.8 [/opt/homebrew/opt/dotnet/libexec]
Visual Studio Code is included in the Brewfile. For .NET development:
- Install the C# Dev Kit extension
- Install the C# extension (by Microsoft)
- Install .NET Install Tool extension
Recommended VS Code Extensions for .NET:
- C# Dev Kit
- C# (by Microsoft)
- .NET Install Tool
- NuGet Package Manager
Azure CLI (az) is installed via Homebrew. This is the primary tool for managing Azure resources from the command line.
Initial Setup:
-
Login to Azure:
az login
This will open a browser window for authentication.
-
Set your default subscription (if you have multiple):
az account list --output table # List all subscriptions az account set --subscription "Your Subscription Name or ID"
-
Verify installation:
az --version # Show Azure CLI version az account show # Show current subscription
Common Azure CLI Commands:
# Resource Groups
az group list
az group create --name myResourceGroup --location eastus
# Cosmos DB
az cosmosdb list
az cosmosdb create --name myCosmosDB --resource-group myResourceGroup
# Storage Accounts
az storage account list
az storage account create --name mystorageaccount --resource-group myResourceGroup
# App Services
az webapp list
az functionapp listAzCopy is a command-line utility for transferring data to and from Azure Storage.
Usage:
# Upload files to Azure Blob Storage
azcopy copy "local-path" "https://account.blob.core.windows.net/container" --recursive
# Download from Azure Blob Storage
azcopy copy "https://account.blob.core.windows.net/container" "local-path" --recursive
# Sync directories
azcopy sync "local-path" "https://account.blob.core.windows.net/container" --recursiveAzure Data Studio is a cross-platform database tool for:
- Azure SQL Database
- Azure Cosmos DB
- SQL Server
- PostgreSQL
- MySQL
Features:
- Query editor with IntelliSense
- Connection management
- Query history
- Extensions marketplace
- Integrated terminal
Usage:
- Launch Azure Data Studio from Applications
- Connect to your Azure Cosmos DB or SQL Database
- Use the query editor to run SQL queries
- Install extensions for additional features
Azure Storage Explorer is a standalone app for managing Azure Storage accounts:
Features:
- Browse and manage Blob containers, File shares, Queues, and Tables
- Upload, download, and manage files
- View and edit properties
- Generate shared access signatures (SAS)
Usage:
- Launch Azure Storage Explorer from Applications
- Sign in with your Azure account
- Browse your storage accounts and resources
- Right-click for context menus to manage resources
Note: The Azure Cosmos DB Emulator is Windows-only. For macOS development:
Option 1: Use Azure Portal
- Create a Cosmos DB account in Azure Portal
- Use the connection string in your local development
- Free tier available for development
Option 2: Use Docker (Recommended for Local Development)
# Run Cosmos DB emulator in Docker
docker run -p 8081:8081 -p 10250-10255:10250-10255 \
-m 3g --name azure-cosmosdb-emulator \
mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulatorOption 3: Use Azure Data Studio
- Connect to your Cosmos DB account
- Query and manage databases and containers
- Use the integrated query editor
VS Code Extensions for Azure:
- Azure Databases - Connect to and manage Azure Cosmos DB
- Azure Account - Sign in to Azure
- Azure App Service - Deploy to Azure App Service
- Azure Functions - Develop Azure Functions
- Azure Resources - Browse Azure resources
Multiple authentication methods:
-
Interactive Login (Recommended for development):
az login
-
Service Principal (For CI/CD):
az login --service-principal -u <app-id> -p <password> --tenant <tenant-id>
-
Managed Identity (For Azure VMs):
az login --identity
Check your authentication:
az account show # Current account
az account list # All available accountsDocker Desktop requires administrator privileges (sudo password) during installation. If the installation fails:
- Option 1: Install manually when prompted for password
- Option 2: Install separately:
brew install --cask docker-desktop
- Option 3: Use Rancher Desktop instead (no sudo required)
The installation script now handles errors gracefully. If some packages fail:
- Check the error message
- For packages requiring sudo (like docker-desktop), install manually
- Retry failed packages:
brew bundle install --file Brewfile
Some tools may need manual installation:
- Rancher Desktop: Download from https://rancherdesktop.io/
- Bun:
curl -fsSL https://bun.sh/install | bash
Use this checklist to ensure everything is set up correctly:
- Homebrew installed
- Packages installed (
bash install-brewfile.sh) - Terminal autocompletion configured (
bash configure-zsh-autocomplete.sh) - Terminal restarted
- Tab completion tested (
cd <Tab>should show fuzzy menu) - Git pager configured (optional,
bash configure-delta.sh) - Verify key tools:
zsh --version,fzf --version,git --version,node --version,python3 --version
- Keep Brewfile in version control - Track your development environment
- Run scripts from the directory - Ensures correct paths
- Review before installing - Check the Brewfile to see what will be installed
- Update regularly - Keep your tools up to date for security and features
- Configure autocompletion - Run
configure-zsh-autocomplete.shfor enhanced terminal experience - Configure delta - Run
configure-delta.shafter installation for better git diffs
Your Mac development environment is now configured with:
- β All development tools installed
- β Enhanced terminal autocompletion
- β Modern CLI tools
- β Package managers and version managers
- β Code editors and productivity tools
Happy coding! π
Note: These scripts are designed to be safe and repeatable. You can run them multiple times without issues.