Zsh Usage

A working zsh config from 2021 plus the swap-ins worth making for a 2026 setup.

What’s current (2026)

The plugin manager and prompt below still work, but they are no longer the modern default:

  • Plugin manager: antigen has had no real maintenance since 2018. New setups use zinit (fast, lazy-load, hooks for everything), znap (smaller surface, faster startup), or oh-my-zsh’s built-in plugin loader (no third-party manager needed for the common case).
  • Prompt: Powerlevel10k still works, but its maintainer paused most active development in 2024. Starship is the current cross-shell default: one Rust binary, one TOML config, identical prompt under zsh, bash, fish, nu. Old ~/.p10k.zsh is not portable, so allow some time to recreate the segments worth keeping.
  • CLI replacements: bat for cat, fd for find, ripgrep for grep, dust for du, procs for ps, zoxide for z/autojump. See Mac development setup for the full list.

Migrate the prompt first; plugins rarely need rewriting when only the manager changes.

Install oh-my-zsh

oh-my-zsh is still the easiest base, even if you skip antigen:

1
sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

Plugins overview.

Reference .zshrc (2021 setup, oh-my-zsh + antigen + Powerlevel10k)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
######################## Powerlevel10k ########################
# Enable Powerlevel10k instant prompt. Should stay close to the top of ~/.zshrc.
# Initialization code that may require console input (password prompts, [y/n]
# confirmations, etc.) must go above this block; everything else may go below.
if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then
source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh"
fi

# To customize prompt, run `p10k configure` or edit ~/.p10k.zsh.
[[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh


######################## Antigen ########################

source /opt/homebrew/share/antigen/antigen.zsh
source $HOMEBREW_PREFIX/opt/chruby/share/chruby/chruby.sh
chruby ruby-3.4.2

# Load the oh-my-zsh's library.
antigen use oh-my-zsh

# Bundles from the default repo (robbyrussell's oh-my-zsh)
antigen bundle colored-man-pages
antigen bundle extract
antigen bundle history
antigen bundle z
antigen bundle git
antigen bundle npm
antigen bundle gem
antigen bundle python
antigen bundle brew
antigen bundle osx
antigen bundle pod

# Fish shell like syntax highlighting for Zsh.
antigen bundle zsh-users/zsh-syntax-highlighting

# Fish-like autosuggestions for zsh
antigen bundle zsh-users/zsh-autosuggestions

# Additional completion definitions for Zsh.
antigen bundle zsh-users/zsh-completions

# Load the theme.
antigen theme romkatv/powerlevel10k

# Tell Antigen that you're done.
antigen apply

######################## User Configuration ########################

# list
alias ls='ls -hFG'
alias tree='tree -C -I node_modules'
alias l='eza -aghlF --git --icons'
alias ltree='eza -ghlTF --git -I=node_modules'

# ncdu
alias ncdu="ncdu --color dark -r -x"
alias ncdu-exclude="ncdu --color dark -r -x --exclude .git --exclude node_modules"