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
Example: Starship prompt (Pastel Powerline), Ghostty terminal, and Sketchybar on macOS.
- Getting Started
- What Each Install Script Does
- Secrets Management
- Tmux
- Claude Code Integration
- Cheatsheet
- My Mac Setup
- About Aerospace
The install script backs up existing configuration files, but read below before running it!
Requirements:
- Git
- Homebrew (macOS package manager)
- 1Password CLI (
op) — for secrets injection
# Install Homebrew if not already installed
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"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 managerAfter installation, you may want to:
- Restart your terminal to apply all shell changes
- Log out and back in for Aerospace to take effect
- Configure Atuin by running
atuin loginto sync shell history across machines - Set up 1Password — create items referenced in
zsh/env.tpl(see Secrets Management)
- 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
- 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
- Installs Aerospace window manager
- Backs up existing config and symlinks new config
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.
- 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
| 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 is configured via claude/settings.json (symlinked to ~/.claude/settings.json).
| 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" |
claude-statusline.sh provides a compact status line showing: state icon, directory, git branch (with worktree detection), model, and context remaining.
See docs/cheatsheet.md for all keyboard shortcuts (tmux, neovim, zsh, Claude Code).
A comprehensive list of apps and tools I use for development and productivity.
| 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 |
| Tool | Description |
|---|---|
| Cursor | AI-powered code editor |
| Neovim + LazyVim | Extensible text editor |
| Tool | Description |
|---|---|
| Claude Desktop | Claude AI desktop app |
| Claude Code | AI coding assistant CLI |
| Tool | Description |
|---|---|
| Aerospace | i3-like tiling window manager |
| Sketchybar | Customizable status bar |
| Hiddenbar | Hide menu bar icons |
| Stats | System monitoring in menu bar |
| 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 |
| 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 |
| Tool | Description |
|---|---|
| Brave | Privacy-focused browser |
| Chrome | Google Chrome |
| Firefox | Mozilla Firefox |
| Tool | Description |
|---|---|
| Spotify | Music streaming |
| OBS | Streaming and recording |
| Adobe Photoshop | Image editing |
| Adobe Premiere Pro | Video editing |
| Ableton Live | Music production |
| Tool | Description |
|---|---|
| Keka | File archiver |
| Zoom | Video conferencing |
I made a deep dive video on this tiling window manager:
This setup uses Starship with the Pastel Powerline preset for a modern, colorful, and informative shell prompt.
