Did something similar recently as well. I did not notice any need for plugins from day one of switching. Fzf can replace a lot of plugins if you know how to use it.
Things like git branch name and virtual envs are handled by starship.
With articles like these popping up all the time, oh-my-zsh is seriously harming zsh's reputation. It's giving the wrong impression of zsh being slow and bloated.
zsh doesn't need configuration frameworks or plugins. All it needs is a change in the default settings so that its powerful completion works out the box. It currently needs more than ideal amount of tweaks to the defaults, which is probably why people flock to these frameworks.
hdjrudni · 44m ago
I don't want to spend ages figuring out which knobs to turn to get a half decent shell. If there's an alternative to oh-my-zsh that looks halfway decent, has that nice fzf integrated, and the 'ghost text' history suggestions, then I welcome it!
doubled112 · 25m ago
Once you have everything figured out, you just keep using the config you have. It might be worth the investment. I stopped using oh-my-zsh when I realized it was what was causing multi-second delays on Raspberry Pis.
I think auto suggestions and syntax highlighting plugins can be installed separately from oh-my-zsh.
I use starship for a better prompt, and it works on more shells than just Zsh.
I also have Atuin installed to share history across machines, and as a benefit the history search is a lot more powerful.
If zsh has its completion fully configured by default, there will be no need for most people to turn knobs nor will it be a "half decent shell." It'll be the best shell, if it isn't already.
I wonder why ghost text history suggestions are popular though, I'd rather not have it. Shell history search works better, and I don't want my shell always showing me or whoever else is looking at the screen random commands that I've previously typed.
alabhyajindal · 37m ago
You should try fish shell. Great user experience out of the box, including history suggestions.
The incompatible syntax of fish makes it a no go for me.
As an SRE, at my day job I often need to copy/paste commands that are generated from a playbook.
Our playbooks use Bash, and in practice Zsh is compatible. But a co-worker using fish often has to manually modify commands before running, and I'm not about that life.
The problem with fish is mostly the different syntax for setting variables and lack of heredocs. Sometimes the string substitution differences come up too.
varispeed · 12m ago
Out of curiosity, what is wrong with oh-my-zsh?
I use it and never had any issue. Am I missing out on something?
srvmshr · 3h ago
I discovered this issue 2-3 years ago. On slightly older machines, there was a palpable startup time. My fix was going through OhMyZSH and stripping away all the parts that I felt unnecessary (I call this my "leanZSH" and its considerably lighter version of OMZ.) It doesn't track upstream, and I manually update the plugin directory once in a while. Surprisingly OhmyZSH is pretty modular and doesn't break easily.
If you want to update it just copy over the latest `plugin/` folder from OMZ repo. You can get rid of all the plugins you dont want, as well as the themes. It somehow works]
I did try to do my whole zsh config/theme from scratch, but it did take some time and lot of small features here and there were no worth the effort (like python version, vevn, and such) so I just switched to starship which is very fast and easy to use
lompad · 2h ago
Why not just use fish at that point? It's been rewritten in Rust too.
To me personally, oh-my-zsh and similar projects feel like a worse version of the stuff fish brings by default.
Jubijub · 1h ago
Fish is awesome, but there are times you need POSIX/ bash-like shell syntax
ewuhic · 1h ago
Then you open bash and get POSIX and not bash-like, but bash.
Fish is the way to go! Used to be a fan of ZSH but also struggled with performance issues. No performance issue with Fish! Only issue might be plugins / some copy/paste bash stuff, but it's so worth the performance.
WhyNotHugo · 3h ago
Oh-my-zsh has a lot of cool and handy features, but it is a huge and complex beast. Personally, I only cared about 3–4 features, so I simply removed it and sought out how to enable those features alone.
Additionally, a lot of functionality which I wanted wasn’t there in OMZ, so my setup had a lot of custom bits anyway.
I'll continue using it until the core features like instant prompt and transient prompt start to break or I run into bugs that I can't live with
jimbru · 55m ago
this is the answer
Sparkenstein · 1h ago
I moved to fish 3 years ago, haven't noticed a difference till date.
cevn · 46m ago
Fish school represent
notnmeyer · 1h ago
you are wise and have good taste
samgranieri · 45m ago
Ooh, bookmarked! My 11 year old zsh setup, which started from YADR and has stuff from other places preserved in chezmoi is starting to drag. Time to speed this up or just rip up and redo
opk · 2h ago
I'd be rather skeptical about the "fix" of updating the completion cache once a day only. Enabling oh-my-zsh already runs `compinit` and it does so after changing the function path in `fpath`. By running it again with a different `fpath` you invalidate the previous cache - meaning it builds a fresh cache twice every time you start zsh. If you use a plugin framework that already runs compinit, simply don't run it again separately. And make sure that `compinit` is only run after the final plugin or whatever has finished changing `fpath`. If you get that right, you'll only ever need to regenerate the cache when something actually updates.
stouset · 2h ago
Fish shell with starship. You will never look back.
f311a · 53m ago
Fish is nice, but syntax difference is a no-go for me.
I frequently log into different servers that usually use bash.
I miss simple things like alias when I temporary want to assign long commands to a shorter alias.
rtkaratekid · 1h ago
I started using fish on a dare from a coworker who thought it would be funny. Joke’s on them, it’s been five years and I still love it. Started using starship this year and agree with you.
marliechiller · 2h ago
Funnily enough, the startup delay of oh-my-zsh is exactly what prompted me to try out fish and eventually starship on top. I have not looked back as you say!
No comments yet
leosanchez · 1h ago
My fish config is maybe 5-10 lines just starship, zoxide, direnv.
jasonjmcghee · 3h ago
Thanks - that pushed me to profile, and as others mentioned nvm was the biggest culprit, then powerline status, which i swapped to powerline-go. nice and snappy startup time now.
rezmason · 3h ago
Aha! Now I know that nvm was slowing my shell startup down. Now I've reconfigured .zshrc to lazy-load nvm, and everything's snappy:
zstyle ':omz:plugins:nvm' lazy yes
Zizizizz · 2h ago
You should try switching to mise. I tried fnm too which was an improvement but mise does the same as fast and supports essentially every language
fwiw you can just use zsh4humans (as long as you promise not to bother the author) and have all the things in omz that matter and approximately zero startup time
RGBCube · 3h ago
From the post, it seems like ZSH tries to update on every shell spawn:
DISABLE_AUTO_UPDATE="true"
WTF? Even if we ignore the crime of non-critical software updating itself, the fact that it does it on every start instead of every day or week is insane.
I do not want my shell sending network requests to odd servers without explicit action from me, thanks.
slacktivism123 · 2h ago
>it seems like ZSH tries to update on every shell spawn
Learn your tools first, not bloated frameworks. There's a gulf of difference between vanilla zsh and this:
>Community-driven (with 2,400+ contributors) framework for managing your zsh configuration
>140+ themes to spice up your morning, and an auto-update tool that makes it easy to keep up with the latest updates from the community
RGBCube · 2h ago
Sorry, I meant oh-my-zsh. I know that the core shell doesn't update.
I still think it's bad. You shouldn't rely on a million different package managers, just 1 is enough. (2 if you are feeling spicy: Flatpak)
Arrowmaster · 48m ago
That's what ZSH has turned into. Every new user installs OMZ because that's what the Internet tells them to do. Then their shell config turns into a huge mess.
So half the users are using OMZ with a bloated slow config and the other half are reinventing new config managers every year because of how terrible OMZ has become. And constantly churning through them as they keep getting abandoned.
I've been happily using zsh4humans for years but will need to find a replacement at some point as it's now going unmaintained too.
c-hendricks · 3h ago
oh-my-zsh, not zsh
gjvc · 1h ago
make sure you haven't got too many plugins enabled (start with zero and work up / enable them as needed)
raffraffraff · 2h ago
As a long time Linux + bash user I switched to zsh three months ago when I was forced to use a Mac at a new job. In every previous job I was able to insist on Linux, but this one is very corporate. I decided not to fight it, except to install AltTab, Karabiner, Rectangle and a script that detects which screen my mouse is on so I can alt-tab through ALL the stuff on that screen (sane XFCE / KDE behaviour).
I can't get used to the atrocious keyboard shortcuts but I have gotten used to the "non-UK UK keyboard layout".
And zsh. I honestly don't know why I didn't just brew install bash right from the start. Without even realising I was doing it, I fought with this bloated bastard for 2 months before finally asking what the fuck I was doing.
I sped up my shell by switching back to bash.
homebrewer · 43m ago
Pure zsh is alright, it's pretty much just bash with fantastic autocomplete that usually provides short form documentation right there along with the options. So no need to remember (or look up) what -X -d -f stands for. Get rid of oh-my-zsh and give the proper shell another chance.
soraminazuki · 1h ago
What on earth are you talking about? zsh isn't bloated by any stretch, nor is it any slower than bash in any meaningful way.
Chances are, like in the article, you installed oh-my-zsh, a third party configuration framework.
Things like git branch name and virtual envs are handled by starship.
My custom config is less than 10 lines now:
zsh doesn't need configuration frameworks or plugins. All it needs is a change in the default settings so that its powerful completion works out the box. It currently needs more than ideal amount of tweaks to the defaults, which is probably why people flock to these frameworks.
I think auto suggestions and syntax highlighting plugins can be installed separately from oh-my-zsh.
I use starship for a better prompt, and it works on more shells than just Zsh.
I also have Atuin installed to share history across machines, and as a benefit the history search is a lot more powerful.
https://github.com/zsh-users/zsh-autosuggestions
https://github.com/zsh-users/zsh-syntax-highlighting
https://starship.rs
https://atuin.sh
I wonder why ghost text history suggestions are popular though, I'd rather not have it. Shell history search works better, and I don't want my shell always showing me or whoever else is looking at the screen random commands that I've previously typed.
https://fishshell.com
As an SRE, at my day job I often need to copy/paste commands that are generated from a playbook.
Our playbooks use Bash, and in practice Zsh is compatible. But a co-worker using fish often has to manually modify commands before running, and I'm not about that life.
The problem with fish is mostly the different syntax for setting variables and lack of heredocs. Sometimes the string substitution differences come up too.
I use it and never had any issue. Am I missing out on something?
[Not the best hackjob out there but here it is:
https://github.com/gradientwolf/leanzsh
If you want to update it just copy over the latest `plugin/` folder from OMZ repo. You can get rid of all the plugins you dont want, as well as the themes. It somehow works]
I did try to do my whole zsh config/theme from scratch, but it did take some time and lot of small features here and there were no worth the effort (like python version, vevn, and such) so I just switched to starship which is very fast and easy to use
To me personally, oh-my-zsh and similar projects feel like a worse version of the stuff fish brings by default.
My own usage: https://code.millironx.com/millironx/nix-dotfiles/src/commit...
Additionally, a lot of functionality which I wanted wasn’t there in OMZ, so my setup had a lot of custom bits anyway.
My zshrc, for reference: https://git.sr.ht/~whynothugo/dotfiles/tree/269248912920d25e...
I miss simple things like alias when I temporary want to assign long commands to a shorter alias.
No comments yet
https://github.com/lukechilds/zsh-nvm?tab=readme-ov-file#laz...
I do not want my shell sending network requests to odd servers without explicit action from me, thanks.
Learn your tools first, not bloated frameworks. There's a gulf of difference between vanilla zsh and this:
>Community-driven (with 2,400+ contributors) framework for managing your zsh configuration
>Includes 300+ optional plugins (rails, git, macOS, hub, docker, homebrew, node, php, python, etc)
>140+ themes to spice up your morning, and an auto-update tool that makes it easy to keep up with the latest updates from the community
I still think it's bad. You shouldn't rely on a million different package managers, just 1 is enough. (2 if you are feeling spicy: Flatpak)
So half the users are using OMZ with a bloated slow config and the other half are reinventing new config managers every year because of how terrible OMZ has become. And constantly churning through them as they keep getting abandoned.
I've been happily using zsh4humans for years but will need to find a replacement at some point as it's now going unmaintained too.
I can't get used to the atrocious keyboard shortcuts but I have gotten used to the "non-UK UK keyboard layout".
And zsh. I honestly don't know why I didn't just brew install bash right from the start. Without even realising I was doing it, I fought with this bloated bastard for 2 months before finally asking what the fuck I was doing.
I sped up my shell by switching back to bash.
Chances are, like in the article, you installed oh-my-zsh, a third party configuration framework.