Why zsh has become my default shell
I didn’t start out with bash and then switch to zsh later on. When I began working seriously in the terminal, zsh was already there. It became my baseline almost automatically. Bash only entered the picture later, mainly on servers where zsh isn’t available or simply isn’t allowed. And every time I work in those environments, I notice the same thing: bash does what it’s supposed to do, but it feels like something is missing.
Nothing dramatic. No show-stopping problems. Just small bits of friction that add up. Autocomplete that doesn’t quite think along with you, history that requires more manual effort, a shell that mostly reacts instead of supporting you. Precisely because I still use bash occasionally, I’ve come to appreciate how pleasant zsh is for everyday, interactive work.
Not because bash is “bad”, but because zsh is clearly designed for people who live in the terminal.
What makes zsh feel different
Working in zsh doesn’t feel like learning something completely new. Everything you’d do in bash still works here. Commands, scripts, aliases — nothing breaks. The difference is mostly in how zsh behaves while you’re typing.
Autocomplete is a good example. Instead of only completing filenames, zsh understands context. Git commands automatically complete branches, flags, and subcommands. Paths you’ve used before resurface naturally. That means I have to remember less and correct myself less often.
Command history works in a way that better matches how I think. I don’t search by time, but by intent. Typing a few characters of something I’ve run before is usually enough to find it again. When you repeat the same kinds of tasks — deploys, SSH sessions, tooling — that saves more time and mental effort than you’d expect.
Bash can be configured to do some of this as well, but often only with extra setup. In zsh, it feels like this is the starting point rather than an optional layer on top.
Themes: not for show, but for calm
When I started using zsh, I tried a number of themes. Not to make things look “cool”, but to understand what actually works for me. I quickly realised that what I value most is calm.
A good zsh theme, for me, does three things: it shows where I am, whether I’m in a Git repository, and whether there are uncommitted changes. That’s it. Anything beyond that — extra colours, symbols, progress indicators — tends to distract more than it helps.
That’s why I stick to a minimal theme. No ASCII art, no elaborate status bars. Just clear, consistent information. The result is that I barely think about my prompt at all, which is exactly how I want it.
Plugins that actually add value
Zsh really shines once you start using plugins, but that’s also where it’s easy to go too far. There’s a huge ecosystem, and it’s tempting to install everything at once. In my experience, that rarely improves your workflow.
I only add plugins when they clearly remove friction. Syntax highlighting while typing is a good example: it helps prevent mistakes before they happen. The same goes for plugins that improve history search or make Git completion smarter.
What I deliberately avoid are plugins that merely seem “nice to have”, force me to learn new behaviour, or noticeably slow down the terminal. Every extra plugin adds cognitive overhead. Fewer plugins usually mean more clarity and more trust in what the shell is doing.
Aliases and configuration: small but intentional
My .zshrc isn’t a showcase. It’s a file I understand. I only add aliases for commands I use multiple times a day. Anything I run occasionally, I prefer to type out in full. That keeps my setup readable and avoids having to remember what some obscure shortcut does.
Here too, configuration follows usage — not the other way around. If I catch myself sighing at the same command over and over again, that’s the signal to improve something.
The terminal itself: why I use Hyper
The shell is one thing, but the terminal you run it in matters just as much. I use Hyper JS as my terminal emulator.
What I like about Hyper is the balance between simplicity and flexibility. It’s cross-platform, fast, and configurable without turning into a hobby. The configuration is straightforward, and I only add extensions when they solve a real problem.
I’ve used other terminals as well, but I often found myself either lacking control or spending too much time tweaking. Hyper feels like a calm foundation. It’s there, it does its job, and it doesn’t demand attention.
What this setup gives me in practice
The benefits of zsh, my theme, and my plugins don’t come from one big feature. They come from the absence of small interruptions. Less typing, fewer corrections, less thinking about things that should just work.
You might not notice that on a single task. But over weeks and months, it adds up. And every time I drop back into bash on a server, I can feel how accustomed I’ve become to that extra layer of support.
Reflection: tools should support, not impress
What all of this has taught me is that good tooling doesn’t shout. It supports. Zsh fits the way I think and work precisely because it stays mostly in the background.
My setup isn’t an endpoint, and it’s certainly not universal advice. From time to time I change something, remove a plugin, or simplify my prompt. I actually enjoy that process — it forces me to stay conscious of how I work.
And honestly, if you spend a lot of time in the terminal, it’s only fair to expect it to meet you halfway.