Supercharge Your Terminal: iTerm2, Oh My Zsh, Powerlevel10k, and fzf

ysskrishna
5 min read

The stack I reinstall on a new Mac

Your terminal should work for you, not against you. If you spend your day in the shell and aren't using fuzzy history search or contextual prompts, you are paying a heavy tax in repetition and guessing.

The built-in macOS Terminal is fine for occasional use. Clumsy history, invisible git branches, and retyped paths still pile up over time.

I keep my setup lean. This stack isn't about making a terminal look fancy for screenshots; it's a baseline to make every machine feel instantly familiar without turning configuration into a weekend project.

What I install:

  • Homebrew: A tool that lets you install tools and apps from the command line (like an app store for your terminal).
  • iTerm2: A more capable replacement for the default Mac Terminal: stronger search, tabs, and a window that's easier to work in day to day.
  • Oh My Zsh: Makes Zsh easier to use by adding helpful defaults, plugins, and themes.
  • Powerlevel10k: Improves your command prompt so you can see useful info (like Git status) at a glance.
  • zsh-autosuggestions: Suggests commands as you type based on your history (like autocomplete in Google).
  • zsh-syntax-highlighting: Highlights commands in different colors so you can spot mistakes before running them.
  • fzf: Helps you quickly search files, folders, and past commands, even when you can't remember the exact name.

Modern macOS already ships Zsh. This setup sharpens that default; it isn't a full shell overhaul.

Install Homebrew first

Homebrew is the package manager I use on every Mac. Same install commands each time beats hunting download pages machine by machine.

Install with the official command from the Homebrew installation docs:

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

Then verify it:

brew --version

If Homebrew prints a version number, you're ready to use brew install and brew install --cask.

Install iTerm2

This is usually the first upgrade that pays off daily: searchable scrollback, tabs, profiles, panes, and sane font control for prompts with icons.

Install with Homebrew:

brew install --cask iterm2

Then open iTerm2 from Applications.

Why I use iTerm2 instead of the default Terminal

Search. Dense command output stays useful when you can find a line in the buffer instead of re-running or scrolling until you squint. The usual shortcut is Command + F.

Searching terminal output in iTerm2 with matching text highlighted

Rendering and tabs. Fonts, colors, profiles, and prompt icons are easy to tune, which matters once Powerlevel10k and Nerd Fonts are in play.

Multiple iTerm2 tabs used for a local development workflow

The features page goes deeper. Day to day I mostly care about search, readable prompts, and window layout.

Check that Zsh is your shell

Before Oh My Zsh, sanity-check the shell. Everything below assumes Zsh is reading ~/.zshrc.

Run:

echo $SHELL

You should usually see:

/bin/zsh

If you don't, switch to Zsh:

chsh -s /bin/zsh

Then restart iTerm2.

Install Oh My Zsh

Oh My Zsh is mostly scaffolding: sane defaults plus a predictable place for themes and plugins so ~/.zshrc stays legible.

Install with the script from the Oh My Zsh repository:

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

After installation, your main config file is:

~/.zshrc

That's where the theme and plugins live. I'd rather skip mystery plugins than debug a messy startup.

Install Powerlevel10k

Powerlevel10k is my prompt theme. It shows directory, branch, dirty tree, exit status, and timing so I'm not constantly re-running pwd or git status. Useful context, not flair.

Clone into Oh My Zsh's custom themes directory:

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

Open your Zsh config:

nano ~/.zshrc

Set the theme:

ZSH_THEME="powerlevel10k/powerlevel10k"

Save the file, then reload Zsh:

exec zsh

If the Powerlevel10k wizard doesn't open automatically, run:

p10k configure

Do not skip the font step

Powerlevel10k relies on glyphs for Git, paths, tooling, and status. The wrong font means boxes instead of cues.

During p10k configure, accept the Meslo Nerd Font install if offered. Doing it manually? Follow Powerlevel10k's font notes.

In iTerm2, set:

iTerm2 -> Settings -> Profiles -> Text -> Font

Without that, you're debugging missing symbols instead of your actual work.

Add two Zsh plugins

Two I keep on always:

Most sessions repeat the same builds, deploys, and repo hops; autosuggestions make that cheaper. Highlighting catches a lot of fat-finger mistakes before Enter. It's not bulletproof, but it stops a lot of "why did nothing happen."

Install autosuggestions:

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

Install syntax highlighting:

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

Now edit ~/.zshrc:

nano ~/.zshrc

Set your plugins:

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

Reload:

source ~/.zshrc

Type the start of an old command. The grey suggestion is the whole trick: accept it, tweak it, or ignore it without leaving the line.

Zsh autosuggestions showing a previously used npm command while typing

fzf is a fuzzy finder for the common case: you recall a fragment (npm, a path, preview) but not the full string.

Install:

brew install fzf

Then run the install script that wires up shell integrations:

$(brew --prefix)/opt/fzf/install

Shortcuts worth muscle memory:

  • Control + R: fuzzy history
  • Control + T: fuzzy files

If you remember the command almost exactly, vanilla history is fine. If you only remember a piece of it, fzf gives you a list you can filter in place.

fzf history search in iTerm2 filtering previous npm commands

A minimal .zshrc

Once the above is wired, these lines are enough of a backbone:

ZSH_THEME="powerlevel10k/powerlevel10k"

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

Long plugin lists slow startup and make problems harder to trace. I pick boring and fast over clever and fragile.

My final checklist

Before I call the shell "done" on a new Mac:

  • brew --version works
  • iTerm2 is installed and using the right font
  • echo $SHELL shows Zsh
  • Oh My Zsh loads without errors
  • Powerlevel10k opens with p10k configure
  • Autosuggestions appear while typing
  • Invalid commands get highlighted before running
  • Control + R opens fuzzy history search after fzf setup

Same stack each time: nothing flashy on purpose. The goal is a terminal that helps you move and then gets out of the way.

Similar posts