
I’ve recently been asked to share my shell setup, which if you ask me, that’s one of the highest levels of praise you can achieve as a software developer 🤣 In this article, I’ll describe the setup I’ve been using for the past few years, and how to achieve similar results yourself.
🖼️ The result
First, let’s look at what we’ll try to achieve by looking at a screenshot I took last year when showing off to a senior co-worker of mine. Visually speaking, almost nothing changed since then, so let me just be lazy for a while and re-use this overly annotated screenshot.

I think some people go for very minimalist shell setups, and I suppose you could say that I prefer the exact opposite of minimalist in this regard 😅 The screenshot above is missing two significant elements, which would be the exit code of previously executed command and presence of background processes – not to worry, these elements are not omitted, just hidden in case no interesting information is available to show (last process terminated successfully/no background processes are running respectively).
👆 Prerequisites
To achieve similar results, I believe you’ll need two pieces of puzzle that I’ll not cover in detail in this article:
- Capable terminal emulator (macOS’
Terminal.app
doesn’t qualify) – I’ve been living in the iTerm2 land since I migrated to macOS, always configured the superior Solarized Dark color theme; - Nerd-patched font for all the special glyphs that our shell will show us – either patch a font of your liking yourself or go with one of the pre-patched fonts; popular choices include FiraCode, Hack, Inconsolata, Iosevka and others.
🐟🐚 It all starts in the shell…
After using bash
for many years and zsh
for many more years, I switched to fish
shell a few years ago. While zsh
is a fine shell, I felt that fish
can be more user-friendly and easier to customize – but I recognize that this doesn’t come without drawbacks, namely that fish
shell doesn’t respect the traditional POSIX syntax so you’ll have to definitely alter some of your habits. Let’s first install fish
shell and then I’ll share a few tricks to get more familiar with fish
shell.
brew install fish
echo /usr/local/bin/fish | sudo tee -a /etc/shells
chsh -s /usr/local/bin/fish $(whoami)
Say “bye-bye” to bash
/zsh
because the next time you open a terminal, you should be welcomed by a friendly interactive shell, like so:

Next, install Oh My Fish, which is essentially a package manager for Fish shell, along with some essential plugins and themes:
curl -L https://get.oh-my.fish | fish
omf install bobthefish # Theme
omf install aws # AWS integration & com