You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
A comprehensive ZSH configuration using Antidote plugin manager for an enhanced shell experience. This repository provides a complete setup with modern tools, productivity plugins, and an extensive collection of aliases for efficient command-line workflows.
Overview
This ZSH configuration includes:
Plugin Management: Antidote for fast, Git-based plugin management
Enhanced Navigation: Directory jumping with zoxide, fuzzy finding with fzf
Syntax Highlighting: Fast syntax highlighting for better readability
Auto-completion: Enhanced tab completion with fzf integration
Version Management: mise for managing programming language versions
Prompt: Starship cross-shell prompt
Extensive Aliases: 100+ aliases for common development tasks
Tools and Dependencies
This configuration relies on the following external tools:
Shell history is handled by atuin (SQLite-backed, searchable). It's a binary rather than an antidote plugin, so it's initialized in rc.d/zz-atuin.zsh (loaded after fzf.zsh so it owns Ctrl-R and the Up arrow). Requires the atuin binary. Run atuin import auto once to bring in existing shell history.
Repository Structure
zdotdir/
├── .zshenv # Environment variables for all ZSH sessions (sourced first)
├── .zprofile # Login-shell setup (OrbStack init, Obsidian PATH)
├── .zshrc # Interactive shell configuration
├── .zstyles # ZSH completion and plugin styles
├── antidote_plugins.conf # Antidote plugin definitions (edit this)
├── antidote_plugins.zsh # Generated static load file, sourced directly by .zshrc (do not edit by hand)
├── docs/
│ └── antidote.md # Antidote usage and annotation reference
├── functions/ # Custom ZSH functions (auto-loaded, one per file)
│ ├── bench-startup
│ ├── calculate_actions_stats
│ ├── fetch_action_stats
│ ├── funcs # Lists your own commands (run `funcs`)
│ ├── grecent
│ ├── is-macos
│ └── os
└── rc.d/ # Modular configuration files
├── 01-hist.zsh # History configuration
├── 02_dirs.zsh # Named directory shortcuts (hash -d ~name)
├── 04-opts.zsh # Shell options
├── 05-aliases.zsh # All shell aliases
├── 06-commands.zsh # Custom shell functions
├── fzf.zsh # FZF integration
├── sharship.zsh # Starship prompt setup
├── zoixide.zsh # Zoxide directory jumper setup
└── zz-atuin.zsh # Atuin shell history (loads after fzf)
Key Files
.zshenv - Environment variables and XDG base dirs; sourced for every shell, before .zprofile and .zshrc
.zprofile - Login-shell setup only (OrbStack init, Obsidian PATH)
.zshrc - Main configuration file that loads plugins and sources rc.d files
.zstyles - ZSH completion styling and antidote configuration
antidote_plugins.conf - Defines all ZSH plugins to be loaded (the file you edit; antidote_plugins.zsh is generated)
functions/ - Custom shell functions auto-loaded at startup
rc.d/ - Modular configuration files for different aspects of the shell
Installation
Install required tools via Homebrew:
brew install antidote fzf zoxide mise starship eza bat ripgrep fd jq neovim atuin
Unit tests are written with zunit and run through a mise task.
Install zunit (and its revolver dependency):
brew install zunit-zsh/zunit/zunit
Run the suite from the repo root:
mise run test# or: mise run t
Tests live in tests/*.zunit with configuration in .zunit.yml; tests/_support/bootstrap autoloads the functions under test. The suite focuses on the functions with real logic (funcs, calculate_actions_stats) — interactive and side-effecting commands are intentionally not covered.
Functions Documentation
Custom shell functions live in two places: one file per function in functions/
(auto-loaded at startup) and inline definitions in rc.d/06-commands.zsh.
Run funcs to discover them at any time — it lists only your own commands
(with descriptions pulled from each function's leading comment) and hides private
helpers and plugin/zsh-internal functions. funcs <pattern> filters by name, and
funcs | fzf emits bare names for scripting. Because it reads the files directly,
any function you add shows up automatically as long as it has a leading comment.
Function
Description
funcs
List your own shell commands with descriptions (this command)
bench-startup
Measure interactive shell startup time using time and hyperfine if available
os
Start the Overmind process manager with the appropriate Procfile
grecent
Interactively check out a recent git branch via fzf
is-macos
Return success when running on macOS
fetch_action_stats
Fetch GitHub Actions run durations for a workflow
calculate_actions_stats
Compute avg/median from piped fetch_action_stats output
mkcd
Create a directory and cd into it
pg_start
Start the PostgreSQL server installed by mise
pg_stop
Stop the currently running PostgreSQL server
pg_switch
Switch the running PostgreSQL server to a given version
delete_git_branches
Interactively delete git branches via fzf
install_casks
Interactively install Homebrew casks via fzf
print_path
Pretty-print $PATH, one entry per line
view_defaults
Browse and export macOS defaults domains via fzf
Aliases Documentation
This document provides a comprehensive list of all available aliases organized by category.