You may not need Oh My Zsh

3 min read

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.