You may not need Oh My Zsh

I’ve been on pursuit of less with my dotfiles.

This isn’t about me hating Oh My Zsh, it’s just about relying on less code.

Less code means less bugs. Less code usually means faster execution. It means
more control. In turn, more control means more time researching and learning.
More time spent figuring stuff out.

It’s not just about Oh My Zsh, either. I was using Antigen, which was loading in
some stuff from Oh My Zsh. Tmux Plugin Manager for sourcing a mere 3 plugins for
tmux and Vundle for my vim needs.

Four separate package managers to get my environment where I liked it.

The lolz for me was that Antigen was supposed to be the cure, but right in their
documentation they walk you through loading Oh My Zsh so you can leverage their
plugins.

All of this just added to the complexity of things in my opinion. I set out to
get rid of all of them. Less black boxes and more understanding of things.

Oh My Zsh and Antigen… dropped.

Tmux Plugin Manager… no more.

Vundle… Since Vim8, there’s better support for plugins… so yeah, donezo.

As you may already know, my dotfiles live on Github. You know, that
site that changed their header color and all the armchair designers lost their
shit and the people that lack coping mechanisms started crying about how their
depression was triggered.

Sorry, really needed to get that out of my system.

So yeah, I like having my dotfiles out there to share, but I also love using git
to version everything. Since I am using git, I have access to git submodules
which allow me to add other repositories to my dotfiles with ease.

In my eyes, that’s the majority of the value that these package managers and
frameworks provide me. They make it easier to add other repositories and make it
easier to update the libraries.

Sure, things are a bit more manual for me now. I have to add the repository I
want to use as a submodule, then configure it to be used.

The benefit here is that I am taking more time to look at the code I’m trying to
include. Looking at the code means I’m scrutinizing the code and because of
that, I’ve found that I can get away with just copying a small bit of the code
and reducing the amount of bloat.

Have I mentioned that my terminal loads hella fast now without all the
additional bloat? I don’t have any before and after benchmarks but I am seeing
my prompt load immediately, instead of a slight half of a second delay.

There’s something to that though, especially with dropping Oh My Zsh, which in
all fairness is a platform and not simply a package manager. That lack of bloat
also means a lack of niceties and sane defaults that I’ve grown accustomed to.

Just before starting this post, I realized that my zsh history wasn’t working
and have noticed that tab completion doesn’t seem to work when trying to glob
the middle of a filename.

I’m sure in the next few days I’ll find at least a few more things that I didn’t
realize Oh My Zsh provided. Fortunately though, I can just go out to their
repository and cherry pick the specific bits of code I want to include without
the bloat.

Personally, I enjoy fucking around with my dotfiles and trying to juice my
efficiency even by 1%. You may not consider it a productive use of time, and
that’s cool. You probably do something that I think is a waste of time too, like
watching television or investing hundreds of hours in video games.

So like the title says, you may not need Oh My Zsh. But you may also not be
willing to invest time into not needing it. Like most things, what’s great for
me may be horribad for you.

YMMV but the next time your terminal seems sluggish as hell, consider all of the
bloat going on behind the scenes that you may not even need.

Josh Sherman - The Man, The Myth, The Avatar

About Josh

Husband. Father. Pug dad. Musician. Founder of Holiday API, Head of Engineering and Emoji Specialist at Mailshake, and author of the best damn Lorem Ipsum Library for PHP.


If you found this article helpful, please consider buying me a coffee.