Skip to content

mehd-io/dotfiles

Repository files navigation

dotfiles

This dotfiles repository provides a modern, productive, and visually appealing development environment for macOS. It brings together:

  • Aerospace — i3-like tiling window manager for macOS
  • Sketchybar — highly customizable status bar for macOS
  • Zsh — main shell with Starship prompt using the Pastel Powerline preset
  • Atuin — magical shell history with sync across machines
  • Tmux — terminal multiplexing with Claude Code integration and process management
  • Neovim with LazyVim — pre-configured, extensible code editing
  • Ghostty — fast, native terminal emulator
  • Claude Code — AI coding assistant with custom hooks and status line
  • 1Password CLI — secrets injected at login via op inject
  • Hiddenbar and Stats — menu bar and system monitoring

Terminal and status bar setup Example: Starship prompt (Pastel Powerline), Ghostty terminal, and Sketchybar on macOS.


Table of Contents


Getting Started

Prerequisites

The install script backs up existing configuration files, but read below before running it!

Requirements:

# Install Homebrew if not already installed
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

Install

git clone https://github.com/mehd-io/dotfiles ~/.dotfiles
cd ~/.dotfiles
./install.sh              # Core tools, symlinks, Ghostty, Starship, Hiddenbar, Stats, LazyVim, Atuin
./install_sketchybar.sh   # Sketchybar and dependencies
./install_aerospace.sh    # Aerospace window manager

Post-Install

After installation, you may want to:

  1. Restart your terminal to apply all shell changes
  2. Log out and back in for Aerospace to take effect
  3. Configure Atuin by running atuin login to sync shell history across machines
  4. Set up 1Password — create items referenced in zsh/env.tpl (see Secrets Management)

What Each Install Script Does

install.sh

  • Installs packages via Homebrew: neovim, tmux, tree, wget, zsh, curl, starship, atuin
  • Symlinks configuration files:
    • ~/.zshrc, ~/.zprofile (Zsh)
    • ~/.tmux.conf, ~/.tmux.conf.local (Tmux)
    • ~/.tmux/pane-info.sh, open-url.sh, log-pane.sh (Tmux runtime scripts)
    • ~/.config/ghostty/config (Ghostty)
    • ~/.config/starship.toml (Starship)
    • ~/.config/atuin/config.toml (Atuin)
    • ~/.config/borders/bordersrc (Borders)
    • ~/.claude/settings.json (Claude Code hooks and status line)
  • Installs macOS apps via Homebrew Cask: Ghostty, Hiddenbar, Stats
  • Installs LazyVim (Neovim starter config)
  • Sets Zsh as default shell

install_sketchybar.sh

  • Installs Sketchybar and dependencies (sf-symbols, jq, gh)
  • Downloads and installs sketchybar-app-font (required for workspace app icons)
  • Backs up existing config and symlinks new config
  • Restarts Sketchybar service

install_aerospace.sh

  • Installs Aerospace window manager
  • Backs up existing config and symlinks new config

Secrets Management

Environment variables (API keys, tokens) are injected at first login via 1Password CLI op inject. The template zsh/env.tpl contains op:// references that resolve at runtime and are cached for the session.


Tmux

  • Theme from gpakosz/.tmux, prefix remapped to backtick (`)
  • Vim-style pane navigation (h/j/k/l)
  • Pane borders show: git branch, listening ports, devcontainer status
  • Process state written to /tmp/tmux-proc-state/ for tooling integration
  • Auto-cleanup: when the last pane for a repo closes, orphaned processes and devcontainers are stopped

Tmux Scripts

Script Purpose
pane-info.sh Pane border info: branch, ports, devcontainer links
open-url.sh prefix + U — open URLs from pane border in browser
log-pane.sh prefix + L — toggle log viewer pane
toggle-nvim.sh prefix + n — toggle nvim + Neotree pane
tmux-cleanup.sh Auto-kill processes/devcontainers on pane exit

Claude Code Integration

Claude Code is configured via claude/settings.json (symlinked to ~/.claude/settings.json).

Hooks

Hook Script Purpose
PreToolUse claude-on-busy.sh Sets Claude status to "busy" for tmux status line
PreToolUse (Bash) claude-pretool-check.sh Blocks duplicate server starts when ports are in use
Notification claude-on-waiting.sh Sets Claude status to "waiting"
Stop / SubagentStop claude-on-idle.sh Sets Claude status to "idle"

Status Line

claude-statusline.sh provides a compact status line showing: state icon, directory, git branch (with worktree detection), model, and context remaining.


Cheatsheet

See docs/cheatsheet.md for all keyboard shortcuts (tmux, neovim, zsh, Claude Code).


My Mac Setup

A comprehensive list of apps and tools I use for development and productivity.

Terminal & Shell

Tool Description
Ghostty Fast, native terminal emulator
Starship Cross-shell prompt with Pastel Powerline theme
Atuin Magical shell history with sync
Tmux Terminal multiplexer
Yazi Blazing fast terminal file manager

Code Editors & IDEs

Tool Description
Cursor AI-powered code editor
Neovim + LazyVim Extensible text editor

AI Tools

Tool Description
Claude Desktop Claude AI desktop app
Claude Code AI coding assistant CLI

Window Management & Menu Bar

Tool Description
Aerospace i3-like tiling window manager
Sketchybar Customizable status bar
Hiddenbar Hide menu bar icons
Stats System monitoring in menu bar

Productivity

Tool Description
Raycast Spotlight replacement with extensions
Obsidian Markdown-based knowledge base
Notion All-in-one workspace
1Password Password & secrets manager
Annotate Screenshot annotation tool

Development & DevOps

Tool Description
Homebrew Package manager for macOS
OrbStack Fast Docker & Linux on macOS
AWS CLI Amazon Web Services CLI
gcloud CLI Google Cloud CLI
dua Disk usage analyzer

Browsers

Tool Description
Brave Privacy-focused browser
Chrome Google Chrome
Firefox Mozilla Firefox

Media & Creative

Tool Description
Spotify Music streaming
OBS Streaming and recording
Adobe Photoshop Image editing
Adobe Premiere Pro Video editing
Ableton Live Music production

Utilities

Tool Description
Keka File archiver
Zoom Video conferencing

About Aerospace

I made a deep dive video on this tiling window manager:

Aerospace Window Manager Deep Dive


Starship Prompt : Pastel Powerline

This setup uses Starship with the Pastel Powerline preset for a modern, colorful, and informative shell prompt.

About

My dotfiles - including aerospace/sketchybar setup

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors