Zsh + Oh My Zsh turns a plain terminal into a fast, autocompleting, good-looking shell. This is the guide I keep coming back to — freshly revised for 2026, covering both Linux and macOS, with the plugins and fonts that actually make a difference.

Revised (July 2026): rewritten with separate Linux/macOS tracks, current install commands, Nerd Fonts, and the two plugins I install on every machine.

Jump to your platform:


🐧 Linux — Ubuntu / Debian

Tested on Ubuntu 20.04, 22.04 and 24.04 (and Debian 11/12). Everything here is apt-based.

1. Update the system

bash
sudo apt update && sudo apt full-upgrade -y

2. Install Zsh and dependencies

bash
sudo apt install -y zsh git curl

Confirm it installed:

bash
zsh --version
# zsh 5.9 (x86_64-ubuntu-linux-gnu)

3. Install Oh My Zsh

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

The installer offers to make Zsh your default shell — say yes. If you skipped it (or it couldn’t), set it manually:

bash
chsh -s "$(which zsh)"

Log out and back in (or open a new terminal) for the default-shell change to take effect.

Now jump to Configure & make it yours — the setup from here is identical on every OS.


🍎 macOS

Since macOS Catalina (10.15), Zsh is already the default shell — you may not need to install anything. The one thing worth doing is installing Homebrew so you can manage the newest Zsh, fonts, and tools.

1. Check what you already have

bash
zsh --version        # macOS ships a recent Zsh out of the box
echo "$SHELL"        # /bin/zsh means Zsh is already your login shell

If $SHELL isn’t /bin/zsh, set it:

bash
chsh -s /bin/zsh
bash
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

On Apple Silicon, follow the post-install hint to add Homebrew to your PATH (it lives in /opt/homebrew):

bash
echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zprofile
eval "$(/opt/homebrew/bin/brew shellenv)"

3. (Optional) Get the newest Zsh + install Oh My Zsh

Apple’s bundled Zsh is fine, but Homebrew keeps you on the latest:

bash
brew install zsh git curl

Then install Oh My Zsh:

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

Continue to Configure & make it yours below.


⚙️ Configure & make it yours

Everything below works the same on Linux and macOS. Your config lives in ~/.zshrc:

bash
nano ~/.zshrc      # or: code ~/.zshrc / vim ~/.zshrc

After any change, reload the shell to apply it:

bash
source ~/.zshrc

Pick a theme

Oh My Zsh ships with 150+ themes. Set ZSH_THEME in ~/.zshrc:

bash
ZSH_THEME="robbyrussell"   # the clean default
# ZSH_THEME="agnoster"     # popular powerline-style (needs a Nerd Font, below)

Want the fast, highly-configurable prompt everyone’s using now? Try Powerlevel10k:

bash
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git \
  "${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k"

Then set ZSH_THEME="powerlevel10k/powerlevel10k" and reload — it runs a config wizard on first launch.

Install a Nerd Font (fixes icons/glyphs)

Powerline and Powerlevel10k themes use special glyphs. Install a Nerd Font and select it in your terminal’s settings.

Linux:

bash
sudo apt install -y fonts-powerline
# For full Nerd Font glyphs, download one from nerdfonts.com and drop it in ~/.local/share/fonts, then:
fc-cache -f

macOS (Homebrew):

bash
brew install --cask font-meslo-lg-nerd-font

The two plugins I install everywhere

These two transform daily use — autosuggestions (fish-style greyed-out completions from history) and syntax highlighting (commands turn green when valid, red when not).

bash
git clone https://github.com/zsh-users/zsh-autosuggestions \
  "${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/plugins/zsh-autosuggestions"

git clone https://github.com/zsh-users/zsh-syntax-highlighting \
  "${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting"

Then enable them in ~/.zshrc. Find the plugins=(...) line and update it:

bash
plugins=(git zsh-autosuggestions zsh-syntax-highlighting)

Order matters: keep zsh-syntax-highlighting last in the list — it needs to wrap everything else.

Reload once more and you’re done:

bash
source ~/.zshrc

That’s it

You now have a modern Zsh setup — same muscle memory on Linux and macOS. From here, browse the plugin list and add ones for your stack (docker, kubectl, python, npm, …). Each just gets appended to the plugins=(...) line.

Handy references: