A comprehensive macOS development environment configuration using GNU Stow for symlink management.
This repository contains my personal development environment setup that I use daily for software development on macOS. It's designed to:
- Quickly set up a new machine with all your favorite tools and configurations
- Keep configurations in sync across multiple machines
- Version control your dotfiles with proper organization
- Easy maintenance with simple stow commands
- Neovim - Modern Vim-based editor with Lazy.nvim plugin manager
- Git - Version control with custom configuration
- 21 Custom Git Commands - Enhanced git workflow (via submodule)
- Claude Code - AI coding assistant with pre-configured permissions and status line
- Zsh - Modern shell configuration
- Starship - Cross-shell prompt with custom theming
- Multiple Terminal Emulators: Ghostty, WezTerm, Kitty
- Enhanced CLI Tools: bat, eza, fzf, zoxide integration
- Window Management Configs - Aerospace, yabai, skhd (legacy)
- JankyBorders - Beautiful window borders with Eldritch theme colors
- Karabiner Elements - Keyboard customization
- SketchyBar - Custom status bar (legacy)
- Bat - Syntax highlighting with custom themes
- Homebrew Brewfile - Manages 194+ packages, apps, fonts, and VS Code extensions
- Development tools (Node.js, Python, Go, Docker)
- Productivity apps (Raycast, Cursor, CleanShot)
- 7 Beautiful fonts including Nerd Fonts for terminal icons
- VS Code extensions (28 curated extensions)
Perfect for terminals and coding with full icon support:
- 📖 View Font Specimen | 🔗 Nerd Font Version
- Clean, readable monospace designed specifically for source code
- Best for: General coding, excellent readability at all sizes
- Features: Full Nerd Font icon set, optimized letter spacing
- 📖 View Font Specimen | 🔗 Download Page
- Microsoft's Cascadia Code enhanced with programming ligatures and Nerd Font icons
- Best for: Modern development, TypeScript/JavaScript, C#
- Features: Beautiful ligatures (!=, =>, <=), cursive italics
- 📖 View Font Specimen | 🔗 GitHub
- Warm, friendly monospace perfect for long coding sessions
- Best for: Comfortable extended coding, reduced eye strain
- Features: Rounded characters, excellent readability
- 📖 View Font Specimen | 🔗 Original
- Based on Anonymous Pro - excellent clarity at smaller sizes
- Best for: Terminal work, shell scripting, system administration
- Features: Sharp, clean letterforms, great for small text
- 📖 View Font Specimen | 🔗 Microsoft Docs
- Microsoft's flagship coding font with programming ligatures
- Best for: Windows development, PowerShell, modern editors
- Features: Programming ligatures, cursive italics, multiple weights
- 📖 View Font Specimen | 🔗 GitHub
- GitHub's revolutionary font superfamily with 5 distinct styles
- Variants: Neon, Argon, Xenon, Radon, Krypton
- Best for: Syntax highlighting diversity, modern development
- Features: Texture healing, multiple widths, advanced typography
- 📖 View Font Specimen | 🔗 GitHub
- The original version without Nerd Font patches
- Best for: Minimalist setups, when you don't need icons
- Features: Clean design, warm appearance, good contrast
🔗 Programming Ligatures (Cascadia Code, CaskaydiaCove):
- Combines character sequences like
!=,<=,>=,=>,->into single symbols - Makes code more readable and aesthetically pleasing
- See Ligatures in Action
🎨 Nerd Font Icons (All Nerd Font variants):
- 3,600+ icons for file types, folders, git status, and development tools
- Shows file extensions as icons in terminal file listings
- Git branch/status symbols in your prompt
- Browse All Icons
⚡ Terminal Optimization:
- All fonts tested for readability at 12-14pt sizes
- Excellent character distinction (0 vs O, 1 vs l vs I)
- Proper spacing for tabular data and code alignment
- UTF-8 and emoji support for modern development
🎯 Installation Tip: Try Hack Nerd Font first - it offers the best balance of readability, icon support, and general compatibility. You can always switch later!
Before starting, ensure you have:
- macOS (tested on recent versions)
- Command Line Tools installed:
xcode-select --install
# Clone to your home directory
cd ~
git clone https://github.com/FunnyGhost/dotfiles.git
cd dotfilesWhat this does: Downloads all the configuration files to ~/dotfiles
git submodule update --init --recursiveWhat this does: Downloads the git-commands repository that contains 21 custom git commands for enhanced workflows
# Install Homebrew if you don't have it
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# Install all packages (this will take a while!)
brew bundle installWhat this does:
- Installs Homebrew package manager if needed
- Installs 194+ packages including development tools, applications, fonts, and VS Code extensions
- Sets up tools like stow, git, neovim, starship, and many others
Stow creates symbolic links from your home directory to the configuration files in this repo.
# Install all main configurations
stow -d config -t ~ aerospace bat borders claude ghostty git karabiner kitty lazygit nvim sketchybar skhd starship wezterm zsh
# Install git commands
stow -d . -t ~ git-commandsWhat this does:
- Creates symlinks like
~/.config/nvim → ~/dotfiles/config/nvim/.config/nvim - Links git config
~/.gitconfig → ~/dotfiles/config/git/.gitconfig - Links shell config
~/.zshrc → ~/dotfiles/config/zsh/.zshrc - Links git commands
~/.git-commands → ~/dotfiles/git-commands/.git-commands - All changes you make to configs are automatically tracked in the git repo
The terminal setup requires Nerd Fonts for icons to display properly:
# Fonts are already installed via Brewfile, but you need to:
# 1. Open your terminal app (Ghostty, WezTerm, Kitty, etc.)
# 2. Go to Settings/Preferences → Font
# 3. Choose one of these installed fonts:
# • "Hack Nerd Font" (recommended)
# • "CaskaydiaCove Nerd Font"
# • "Mononoki Nerd Font"
# • "Anonymice Nerd Font"
# 4. Enable font ligatures if available
# 5. Set font size to 12-14pt for optimal readabilityWhat this does: Ensures icons and symbols in your terminal prompt display correctly
# Start a new terminal session or run:
exec zshWhat this does: Loads your new shell configuration with Starship prompt and all customizations
After setup, you'll have:
- Starship prompt showing git status, directory, and more
- Enhanced commands:
lsbecomesezawith icons,cdbecomeszoxidesmart navigation - Fuzzy finding:
fzfintegration for file/directory search - Syntax highlighting:
batfor file viewing with themes
- Terminal UI for Git operations with custom configuration
- Disabled auto-fetch for better performance in large repos
- Keyboard-driven interface with intuitive shortcuts
- Full integration with Neovim via
<leader>lg
- 21 custom git commands for enhanced productivity:
git co- Interactive branch checkout with fzf fuzzy finder and previewgit author-stats- Analyze author contributions (lines added/removed/modified)git delete-merged-branches- Delete all branches merged into mastergit remaster- Fetch latest master and rebase current branch on topgit review- Interactive commit review with diff preview
git dig- Search for commits containing specific strings in changesetsgit find- Find files containing search strings in any ordergit grep-rank- Show authors of files containing string, ranked by frequencygit rank- Display author ranking by commits + extra stats
git repush- Delete remote branch then push again (works around-frestrictions)git snapshot- Create named stash with optional note (safety checkpoints)git stash-merge- Merge stashes even over dirty treesgit list-autostash- List auto-stash entries
git shower- Run GC + prune (optimized for large repositories)git size- Show bytes introduced/removed by specific commitgit sort- Sort SHA1 hashes by their ordering in history
git open- Open all changed files in$EDITORaccording togit status
- Neovim configured with modern plugins
- Multiple terminal options ready to use
- Git configuration optimized for development
# Install a specific config
stow -d config -t ~ nvim
# Remove a config (unstow)
stow -d config -t ~ -D nvim
# Reinstall all configs
stow -d config -t ~ --restow aerospace bat borders claude ghostty git karabiner kitty lazygit nvim sketchybar skhd starship wezterm zshcd ~/dotfiles/git-commands/.git-commands
git pull origin master- Create directory:
config/newtool/.config/newtool/ - Add your config files inside
- Run:
stow -d config -t ~ newtool
This repository uses a local override pattern to securely handle work-specific and private configurations without exposing secrets in version control.
The .zshrc automatically sources work-specific configuration:
config/zsh/.zshrc.local (automatically loaded):
# Work-specific secrets and configuration
# This file should not be committed to version control
export COMPANY_USERNAME=your-username
export COMPANY_API_TOKEN=your-secret-token
export DATABASE_URL="postgresql://user:pass@host:5432/db"
# Package manager credentials (if needed)
export HOMEBREW_COMPANY_USER=${COMPANY_USERNAME}
export HOMEBREW_COMPANY_TOKEN=${COMPANY_API_TOKEN}
# Add any other work-specific environment variables here
export AWS_PROFILE="work"
export DOCKER_REGISTRY="company.registry.com"How it works:
- Main
.zshrccontains this line:[[ -f ~/.zshrc.local ]] && source ~/.zshrc.local - If the local file exists, it's automatically loaded
- If it doesn't exist, no error occurs
- All secrets stay out of version control
The Brewfile system supports work-specific packages:
Brewfile.local (work packages):
# Work-specific Homebrew packages
# This file should not be committed to version control
# Work-specific taps (private repositories)
tap "company/internal-tools"
tap "organization/private-tap", "git@github.com:organization/homebrew-private.git"
# Work-specific tools and applications
brew "company/cli-tool"
brew "organization/development-utils"
cask "company-vpn"
cask "internal-app"Automated Management:
The bbd alias now handles both files automatically:
# Updates both Brewfiles safely
bbd # This runs: brew bundle dump for main + local files
# Manual installation (if needed)
brew bundle install # Public packages
brew bundle install --file=Brewfile.local # Work packages (if file exists)Safety Features:
- Both
.zshrc.localandBrewfile.localare gitignored - Commands use conditional logic:
[[ -f Brewfile.local ]] && ... - No errors if local files don't exist
- Secrets never accidentally committed
This repo contains configurations for multiple window managers. The current setup uses Aerospace for tiling window management with Sketchybar integration.
The Aerospace window manager provides a powerful tiling system with the following features:
Core Features:
- Automatic window tiling with smart layouts
- Multiple workspaces with monitor assignments
- Mouse follows focus
- Sketchybar integration for workspace indicators
Key Bindings:
- Window Focus:
alt + h/j/k/l- Focus left/down/up/right - Window Movement:
alt + shift + h/j/k/l- Move window left/down/up/right - Layouts:
alt + e- Tile layout (horizontal/vertical)alt + comma- Accordion layoutalt + f- Toggle fullscreenalt + y- Join with window below
Workspace Management:
alt + 1-5- Switch to workspace 1-5alt + shift + 1-5- Move window to workspace 1-5alt + tab- Switch between last two workspacesalt + shift + tab- Move workspace to next monitor
Quick App Launch:
alt + b- Brave Browseralt + c- Cursoralt + g- Ghosttyalt + w- Weztermalt + s- Slackalt + m- Mail
Service Mode (accessed with alt + shift + semicolon):
r- Reset layout (flatten workspace tree)f- Toggle floating/tiling layoutbackspace- Close all windows but currentesc- Reload config and exit service mode
Window Gaps:
- Inner gaps: 8px (horizontal and vertical)
- Outer gaps: 5px (bottom, right, left)
- Top gap: 10px for main monitor
Monitor Configuration:
- Workspaces 1-5 assigned to main monitor
- Workspaces 6-7 assigned to secondary monitor
- Automatic window placement (e.g., Brave Browser opens in workspace 1)
Integration:
- Sketchybar workspace indicators
- Automatic workspace icon updates
- Mouse follows focus across monitors
All configurations are designed to be customizable:
- Starship prompt: Edit
config/starship/.config/starship/starship.toml - Shell aliases: Edit
config/zsh/.zshrc - Git settings: Edit
config/git/.gitconfig - Neovim: See
config/nvim/.config/nvim/ - Claude Code: Edit
config/claude/.claude/settings.json(global permissions, status line) orsettings.local.json(machine-specific permissions)
If stow reports conflicts:
# Remove existing config and re-stow
rm ~/.config/problematic-config
stow -d config -t ~ problematic-config- Ensure you've selected one of the installed Nerd Fonts:
- "Hack Nerd Font" (recommended)
- "CaskaydiaCove Nerd Font"
- "Mononoki Nerd Font"
- "Anonymice Nerd Font"
- Enable font ligatures in terminal settings
- Restart your terminal after font changes
- Ensure
~/.git-commandsis in your PATH (should be automatic) - Check:
echo $PATH | grep git-commands
This project is licensed under the MIT License - see the LICENSE file for details.
Feel free to fork this repository and adapt it for your own use! If you find improvements or fixes, pull requests are welcome.
Happy coding! 🚀
"The best dotfiles are the ones you actually use daily"