ZSH, also called the Z shell, is an extended version of the Bourne Shell (sh), with plenty of new features, and support for plugins and themes. Since it’s based on the same shell as Bash, ZSH has many of the same features, and switching over is a breeze.

So Why Use It?

ZSH has too many features to list here, some just minor improvements to Bash, but here are some of the major ones:

  • Automatic cd: Just type the name of the directory
  • Recursive path expansion: For example “/u/lo/b” expands to “/usr/local/bin”
  • Spelling correction and approximate completion: If you make a minor mistake typing a directory name, ZSH will fix it for you
  • Plugin and theme support: ZSH includes many different plugin frameworks

Plugin and theme support is probably the coolest feature of ZSH and is what we’ll focus on here.

Installing ZSH

If you’re on macOS and have Homebrew installed (which you should), you can install ZSH with a single command:

brew install zsh

Also for macOS users, you should probably use iTerm instead of the native terminal, as it has much better color support (plus a lot of other features).

If you’re on Linux, the commands can vary by the distro, but it should be a default package in your package manager. You can consult this guide if you’re having trouble.

If you’re on Windows, you may not even have Bash in the first place. You can follow this guide to set that up and enable ZSH.

Installing Oh-My-Zsh

Oh-My-Zsh is the most popular plugin framework for ZSH, and it comes with many built-in plugins and themes as well. There are also a couple of other plugin frameworks, including Antigen, which is a full package manager for ZSH, but Oh-My-Zsh has loads of plugins built right in and does its job well.

Oh-My-Zsh has a simple install script you can run:

sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"

From there, you can enable and disable plugins by adding them to your .zshrc file, located in your ~ directory.

You can get a full list of plugins on the Oh-My-Zsh repository.

Themes

There are plenty of themes to go around, but powerlevel9k is by far the coolest. It adds a right-aligned info box, integration with git and command history, incredible customization, and wraps it all up in a slick interface based on the powerline plugin for vim.

You’ll want to use iTerm on macOS, or any terminal with 24-bit color, to get the most out of powerlevel9k (or any ZSH theme, really).

To set up powerlevel9k (if you installed Oh-My-Zsh) just clone the repository into the .oh-my-zsh custom themes folder:

git clone https://github.com/bhilburn/powerlevel9k.git ~/.oh-my-zsh/custom/themes/powerlevel9k

Then you need to enable it in .zshrc:

ZSH_THEME="powerlevel9k/powerlevel9k"

After that, source your .zshrc, and you should see the changes applied.

If you want, you can customize the default prompt by defining POWERLEVEL9K_LEFT_PROMPT_ELEMENTS in your .zshrc. Here’s mine, with a minimal prompt:

POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(vcs dir rbenv)
POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(root_indicator background_jobs status load)

You can find the full documentation for powerlevel9k on the repo.