[HN Gopher] Oh My Zsh adds bloat
       ___________________________________________________________________
        
       Oh My Zsh adds bloat
        
       Author : fla
       Score  : 295 points
       Date   : 2026-01-10 04:35 UTC (18 hours ago)
        
 (HTM) web link (rushter.com)
 (TXT) w3m dump (rushter.com)
        
       | Swizec wrote:
       | I installed oh-my-zsh back in early college some 15 years ago,
       | before zsh was even the default on macs, and it is so good I've
       | never felt compelled to experiment or try any other shells
       | terminals or configs. It's the first thing I install on every new
       | computer.
        
       | metax wrote:
       | Or simply use fish
        
         | eddd-ddde wrote:
         | +1
         | 
         | Nowadays I just use fish with the out of box installation and
         | it fits all my needs.
        
         | lillecarl wrote:
         | Craziest thing: You can still script in bash/zsh even if you
         | use fish but you can't always copy-paste from StackOverflow.
        
           | dietr1ch wrote:
           | The problem is that I forgot (if I ever knew) bash.
           | 
           | I can write fish, scripting or interactively on my shell
           | without thinking too hard about the syntax, but when
           | scripting in bash I require an example or using my snippets
           | to be sure I'm not shooting myself on the foot or writing
           | something that bash will reject right away.
        
             | lillecarl wrote:
             | The trick is to use "shellcheck" on your bash scripts, it's
             | an overly anal linter that'll keep you sharp, and it's
             | 2026, everyone can script bash with AI :)
             | 
             | But yeah the syntax with [[, if fi, while stmt; do; done,
             | "$@", case esac, "${!VAR}" and others makes me long for the
             | day fish shell gets "euo pipefail" mode so I can stop
             | writing bash or || true :)
        
               | chuckadams wrote:
               | I think the last time that errexit and pipefail were
               | brought up to the fish devs, we were treated instead to
               | an essay about how errexit is a total hack in bash, how
               | it has all kinds of places where it doesn't work as
               | expected, how it's special-cased away for some
               | constructs, etc. None of which is wrong, but it's still a
               | whole lot better than the nothing that we have with fish
               | now.
               | 
               | So we still have this inflection point where scripts
               | eventually have to graduate into a "real" language, and
               | while those languages give us proper data types and
               | structures on one hand, they take away conveniences like
               | pipes with the other. It's 2026, and we managed to crack
               | artificial freakin' intelligence before we got a decently
               | evolved shell into the mainstream. </yells-at-cloud>
        
         | _ache_ wrote:
         | Yeap, each time I need a complex shell script, actually Python
         | is a better chose. I just don't need a POSIX compliant shell
         | /usr/bin/time -f "%e seconds" fish -i -c exit          0.21
         | seconds
        
         | paulirish wrote:
         | Fish gang represent.
         | 
         | I was a bash => zsh/omz person and had these same complaints.
         | But that was 10 years ago.
         | https://github.com/paulirish/dotfiles/blame/main/fish/config...
         | 
         | The baseline fish experience is just better.
        
         | dieggsy wrote:
         | Seriously. I do think people should spend enough time with bash
         | or posix sh to be comfortable with it, but I'd recommend
         | everyone at least just _try_ fish. It 's a lovely interactive
         | experience out of the box with colors, completions, a great
         | prompt, etc. Plus, the scripting language is quite comfy. Like,
         | somewhere between bash and Python (if you find Python comfy, I
         | guess). At least to me it makes more intuitive sense, once I
         | got over the fact that "it's not bash/zsh."
         | 
         | It's written in Rust, if you care about that sort of thing (I
         | switched before that was a thing). And for simple one-liners,
         | compatibility actually has improved at least a bit (like you
         | can do && now, which wasn't a thing before).
         | 
         | Write your shell-specific helper scripts or personal scripts in
         | fish, write your portable scripts in Python or Bash. Look, I
         | love standards. Sometimes non-standard things make sense
         | though. Sometimes they even make _more_ sense in the right
         | context.
         | 
         | Or maybe you'll hate it. That's fine. People won't know until
         | they try though.
         | 
         | For something newer and even more different, check out nushell.
         | I don't have much experience with it, but a lot of its ideas
         | are enticing.
        
         | ilvez wrote:
         | I've started to play with the idea more recently to try out
         | fish. No appearant reason.. 10 years in zsh is time enough to
         | get comfortable..
        
         | starefossen wrote:
         | Glad to see fish getting some shout outs here. Been using it
         | for over ten years now, and it is super easy to get going on
         | new hosts - it is just one simple install away.
        
       | g947o wrote:
       | I use oh my zsh for exactly one reason: I can get a good shell
       | experience out of the box and immediately start working on stuff
       | productively, whether it's a new machine, a new remote host or a
       | container.
       | 
       | I could spend hours figuring out all those things, bit I'd rather
       | use that time for something more important.
        
         | MeetingsBrowser wrote:
         | > I could spend hours figuring out all those things,
         | 
         | This post is explaining how to set up those things. Less than
         | five minutes to read.
        
           | namuol wrote:
           | > Less than five minutes to read.
           | 
           | OMZ is still easier to set up consistently. That's why we use
           | it.
           | 
           | If the concern is the bloat of OMZ then make FMZ - fast my
           | zsh - that is just as quick to set up and doesn't add
           | "bloat"?
        
             | do_not_redeem wrote:
             | I won't spoil the article, but if you read to the end
             | you'll find out what this "FMZ" project is called.
        
               | Liquid_Fire wrote:
               | Can you spoil it for me, because I read it to the end and
               | saw no mention of such a project. Unless you are
               | referring to the DIY approach the article suggests.
        
               | einsteinx2 wrote:
               | Somewhere else in the comment thread Zim (zimfw) was
               | mentioned which after reading their website sounds pretty
               | much like that.
        
           | SkyPuncher wrote:
           | That misses the point. I don't even want to think about any
           | of that stuff.
           | 
           | It's a single command to install oh-my-zsh. I can fire it
           | off, check Slack, and come back in 5 minutes. If I have to
           | take 5 minutes to setup it up, I'm just not going to do it.
        
             | MeetingsBrowser wrote:
             | Caring enough to read a blog post and comment on
             | hackernews, but not enough to copy/paste the changes from
             | the blog post is a very fine line.
        
               | SkyPuncher wrote:
               | Not sure what your point argument is.
        
               | darkwater wrote:
               | Their point is that what you complain about as "time
               | consuming" is not time consuming at all and that you
               | consumed more time reading the post and commenting on HN
               | that actually installing starship.
               | 
               | In your defense I must say I installed starship ages ago
               | but still not migrated to it from powerline-go because
               | I'm lazy.
        
               | happytoexplain wrote:
               | This is common low-quality internet arguing ("you care
               | enough to come into this thread but..."). You can avoid
               | this by keeping in mind that different things are
               | different things, and analogies have many holes by
               | default.
        
             | subsection1h wrote:
             | > _I don't even want to think about any of that stuff._
             | 
             | Hacker News: Where the hackers don't want to think about
             | any of this command-line nonsense because there is
             | important webshit to build.
        
               | shiredude95 wrote:
               | there's some nuance to this. people might want to spend
               | minimal time hacking on their shell and more time hacking
               | on things they find interesting that are not related to
               | shell setup (and also not webshit). besides even if its
               | webshit, what makes you say shell setup hacking is more
               | or less interesting compared to webshit hacking. the term
               | webshit itself implies you view it as less interesting
               | than shell setup -- fair if thats your pov, but doesnt
               | make it intrinsic.
        
               | SkyPuncher wrote:
               | It's a tool.
               | 
               | Some chefs like to spend hours sharpening their knifes
               | with wet stones. Others are just going to run it through
               | a power sharpener and get on their way.
               | 
               | I like to focus my craft in places other than the
               | terminal.
        
               | anhner wrote:
               | > important webshit to build
               | 
               | hackernews: where a large portion of programmers are
               | considered inferior because of the domain they work in
               | (the domain where hackernews also lives)
        
               | sgarland wrote:
               | It's more that tired experience has taught that of the
               | various disciplines, web devs are the most likely to have
               | a shaky-at-best understanding of fundamentals, and thus
               | do silly things like assume network calls will never
               | fail, or store everything in JSON blobs and then wonder
               | why their queries are slow.
               | 
               | I've also worked with some awesome web devs, to be fair.
        
               | bigstrat2003 wrote:
               | Different strokes I guess. Personally I think any time
               | spent tinkering with the shell is a waste of time: a
               | basic, zero-customization bash is just as good at doing
               | things for me as a shell that I've messed around with the
               | settings on for ages. So I don't waste time on
               | customizing my shell because it provides no value to me,
               | while those who get value can spend the time. We both
               | win.
        
               | troupo wrote:
               | Time is finite.
               | 
               | I could spend that time tinkering with the internals of
               | an ad-hoc informal system cobbled together in the 1970s
               | and held together by spit and glue.
               | 
               | Or I could just not do that.
               | 
               | Also, the implication that fiddling with shell scripts is
               | somehow a better engineering/programming practice than
               | web programming is laughable at best.
        
               | da_grift_shift wrote:
               | Hacker News: Where the hackers don't want to think about
               | the code required to build the webshit nor the command-
               | line nonsense used to write it, because the agents will
               | take care of all that.
        
           | g947o wrote:
           | Less than five minutes to read but how long to set up my own?
           | The author only showed what he needs/prefers ("Here is my
           | config for starship"). I'll need to navigate the
           | documentation of starship to figure out all those options,
           | which _defeats the purpose_. Their config documentation
           | (https://starship.rs/config/) already gives me headaches.
           | 
           | And from the article
           | 
           | > Because cloud services are available globally, I've
           | disabled them.
           | 
           | That's some bad defaults right there.
           | 
           | > When you run a command, it also shows how long it took to
           | execute.
           | 
           | No I absolutely don't want this thing done by the author. Now
           | I am fully in the "customize my config" territory.
           | 
           | Also, most of us are unlike the author, and 0.07s vs 0.38s
           | startup time means no difference.
           | 
           | I think the point of the previous comment has been more than
           | clear enough.
        
             | bostik wrote:
             | > _Also, most of us are unlike the author, and 0.07s vs
             | 0.38s startup time means no difference._
             | 
             | That's quite likely a workflow thing. If you are popping up
             | new (transient) terminals frequently, then a ~400ms wait
             | time for each adds up and makes the entire machine feel
             | _really_ slow. I 'm willing to wait extra half a second for
             | a new terminal -- once -- after I've changed my
             | autocompletion configs (rebuild + rehash takes a while),
             | but if I had to wait for that long every time I hit
             | Win+enter and wait for the terminal to become active, I'd
             | be irritated pretty damn quickly too.
             | 
             | You get conditioned to immediate responses pretty fast.
        
         | tcoff91 wrote:
         | Yeah but you can use something like zim that is better than omz
         | but still easy. The shell starts so fast with zim and it is a
         | breeze to set up
        
           | jauntywundrkind wrote:
           | Exactly. The popular culture has bad picks. We can be low
           | effort without necessarily being 100% unselective! No taste
           | is not mandatory! Just the littlest bit of trying & listening
           | to our peers can make a better world.
           | 
           | There's so many better non-shite alternatives. Just one: Zim
           | aka zimfw is one. It's just so sad that there's such a
           | negative creep energy towards "I tried nothing and did
           | nothing and this is where I am". Bad hacker bad. You deserve
           | no voice.
        
             | bovermyer wrote:
             | People should be encouraged to play and explore. I landed
             | on Zim eventually, but it's far from universally installed
             | on my machines.
        
         | FrenchTouch42 wrote:
         | Try https://starship.rs then. Starship gives you the same "drop
         | in and go" experience but without the 200ms+ prompt lag. One
         | curl -> one line in your rc file, works on
         | zsh/bash/fish/whatever.
         | 
         | Configuration is straightforward and easy imo:
         | https://starship.rs/config/
         | 
         | Give it a spin, I think you won't regret it.
        
           | baby wrote:
           | Oh my zsh makes installing extension so easy, just edit
           | .zshrc and add extract, fzf, z, etc. To the list of plugins
        
             | inapis wrote:
             | What? You still have to install the binary via your package
             | manager. Most OMZ plugins are basically a bunch of shell
             | completions or aliases.
        
           | shimman wrote:
           | Never heard of this, looks pretty good. Are there any
           | community themes based on starship like powerlevel9k/10k?
        
             | sigwinch wrote:
             | It requires a nerd font.
        
           | sandreas wrote:
           | starship is great. I use it with a powerlevel10k fallback in
           | my dotfiles for systems, starship is not installed yet to not
           | break the shell entirely.
        
             | nine_k wrote:
             | Starship is a single binary, pretty easy to carry around
             | even the first time you ssh somewhere.
        
               | sandreas wrote:
               | I'm totally aware... However p10k is the thing I used
               | before so fallback was a low hanging fruit.
        
           | CjHuber wrote:
           | I'm so glad I switched to fish, I'd rather have genuinely
           | good settings out of the box rather than endless
           | configuration, and honestly it's much better out of the box
           | than any configuration I've ever had.
           | 
           | Only drawback is that it's not POSIX, no issue for me, but
           | maybe for people who have a lot of muscle memory with bash.
        
             | Hammershaft wrote:
             | Fish is just excellent out of the box. It's a little tragic
             | how path dependent we are on flawed terminal experiences
             | designed 40 years ago.
        
             | Fnoord wrote:
             | I've been using fish for nearly 10 years.
             | 
             | First, there are some ways to make fish more compatible
             | with bash.
             | 
             | If you want to do some shell scripting in fish, or running
             | other people's shell scripts (or commands) this may aid you
             | since you wouldn't have to port them (or take less time to
             | port them over).
             | 
             | You can achieve this with a plugin system such as 'oh my
             | fish' or 'fisher'. But, as always, it adds complexity (and
             | bloat :P), you'll need it on every fish shell (including
             | remote systems), etc.
             | 
             | It is a bit akin to having nvim with plugins versus being
             | able to use vi. Sometimes, you're going to need to be able
             | to use the latter.
             | 
             | Also, to people who recently adopted fish: fish has been
             | made more and more compatible with bash throughout those
             | years.
             | 
             | FWIW, I use fish with starship these days.
        
               | esseph wrote:
               | When I'm in fish and I want to run a bash script I
               | just... call it with bash :-)
        
               | rovr138 wrote:
               | ./script.sh
               | 
               | and script.sh just starts with #/bin/bash
               | 
               | I'm simple
        
               | maple3142 wrote:
               | This wouldn't work if the script is meant to be sourced
               | (to set environment variables) isn't it?
        
               | rovr138 wrote:
               | No, it doesn't.
               | 
               | The way I actually have things setup, in case it helps. I
               | don't change my default shell. I actually default to
               | pretty much working within tmux. So, I kept my default
               | shell to what the OS brings, then in my tmux config, I
               | have,                   # set shell         set -g
               | default-shell /opt/homebrew/bin/fish
               | 
               | This means, that when I start my terminal, it drops me to
               | zsh (macOS default). Then when I run tmux, it opens fish.
               | The nice thing is that I inherit the environment of zsh.
               | 
               | I have my .zshrc and my .bashrc sourcing a .shellrc file
               | which contains most of my env stuff. This keeps random
               | utilities that write to .bashrc and zshrc working within
               | fish too.
        
             | totetsu wrote:
             | It's only takes a second to run a child bash shell when you
             | need something posix
        
             | chrysoprace wrote:
             | After 10 years on zsh I finally switched 6 months ago and I
             | haven't looked back. If I need POSIX, I'll just run scripts
             | with the right shebang or pipe it to sh.
        
             | ratorx wrote:
             | For POSIX: I leave Bash as the system shell and then shim
             | into Fish only for interactive terminals. This works
             | surprisingly well, and any POSIX env initialisation will be
             | inherited. I very rarely need to do something complicated
             | enough in the REPL of the terminal and can start a subshell
             | if needed.
             | 
             | Fish is nicer to script in by far, and you can keep those
             | isolated with shebang lines and still run Bash scripts
             | (with a proper shebang line). The only thing that's tricky
             | is `source` and equivalents, but I don't think I've ever
             | needed this in my main shell and not a throw-away sub
             | shell.
        
               | hiq wrote:
               | I often write multi-line commands in my zsh shell, like
               | while-loops. The nice thing is that I can readily put
               | them in a script if needed.
               | 
               | I guess that somewhat breaks with fish: either you use
               | bash -c '...' from the start, or you adopt the fish
               | syntax, which means you need to convert again when you
               | switch to a (bash) script.
        
               | ratorx wrote:
               | I guess my workflow for this is more fragmented. Either
               | I'm prototyping a script (and edit and test it directly)
               | or just need throwaway loop (in which case fish is
               | nicer).
               | 
               | I also don't trust myself to not screw up anything more
               | complex than running a command on Bash, without the guard
               | rails of something like shellcheck!
        
               | vladvasiliu wrote:
               | I used to do it this way, but then having the mentally
               | switch from the one to the other became too much of a
               | hassle. Since I realized I only had basic needs, zsh with
               | incremental history search and the like was good enough.
               | 
               | I don't care for mile-long prompts displaying everything
               | under the sun, so zsh is plenty fast.
        
             | normaler wrote:
             | I have been using fish for 10 years now as my main shell
             | and it is just perfect.
        
             | tmsbrg wrote:
             | I tried fish for a while but as someone who heavily used
             | bash before I couldn't get used to the new language. I also
             | didn't feel they the language was much better than bash, at
             | least for my usage. But I loved the default automatic
             | coloring of arguments, underlining of files, etc.
             | 
             | Later I found fizsh, which I love and still use as default
             | shell now. It's basically a configuration around zsh adding
             | the colors, completions, and other good stuff inspired by
             | fish to zsh. Can really recommend it for those who are used
             | to zsh or bash but want their CLI to be more readable.
             | Colors especially help with big command line arguments to
             | show where they start and end, and keeping track of complex
             | stuff like loops and conditional logic in your commands.
        
               | tacoooooooo wrote:
               | fizsh sounds really cool, but the last commit was 7+
               | years ago. do you run into any issues?
               | https://github.com/zsh-users/fizsh
        
               | tmsbrg wrote:
               | I never noticed any issues, actually. I guess the zsh
               | base is solid and stable.
        
           | Zarel wrote:
           | I'm surprised Starship is so popular. It's missing really
           | basic powerlevel10k features like empty segments. If you look
           | at some examples:
           | 
           | https://starship.rs/presets/gruvbox-rainbow
           | 
           | You can see that when the segments are empty, they still
           | appear as a 1-width segment, rather than entirely
           | disappearing.
           | 
           | It also makes you configure many things by hand.
           | powerlevel10k has an interactive wizard that lets you design
           | your prompt one option at a time (do you want a nerd font? do
           | you want it one line or two? etc) but Starship makes you
           | manually write escape codes if your preferences don't match
           | one of the presets.
           | 
           | No judgment, but I do wonder what people like about Starship
           | that makes up for these things.
        
             | dagi3d wrote:
             | Starship allows empty segments, I in this specific case
             | it's just how the preset/theme works as it uses the Unicode
             | character as separator and it needs to set the background
             | and foreground colors depending on which modules is
             | surrounded by
        
               | Zarel wrote:
               | Every preset with powerlevel10k-style segments don't
               | support hiding empty segments. Look at Pastel Powerline,
               | Tokyo Night, Gruvbox Rainbow, Catppucin Powerline...
               | 
               | https://starship.rs/presets/#pastel-powerline
               | 
               | I tried making my own and the config TOML syntax isn't
               | expressive enough to support hiding empty segments.
               | 
               | You're right that it's the thing with the Unicode
               | character as separator, which all the alternatives handle
               | just fine: powerlevel10k, tide, oh-my-posh... it's just
               | everyone seems to love Starship, and that's what confuses
               | me.
        
           | mirzap wrote:
           | I tried using Starship, and it's clearly faster than Oh My
           | Zsh, but my issue was that I relied on some useful Oh My Zsh
           | features that I didn't know how to replicate in Starship. One
           | of these is history filtering - for example, when I type
           | source and press the up arrow, I only see previously run
           | source commands, which makes it easy to find what I'm looking
           | for. I tried to get this working in Starship, but had no
           | luck.
        
             | coaksford wrote:
             | I have never used Oh My Zsh, but I use Atuin to do this and
             | it works excellently at that. You can even make it filter
             | by what folder you're in and whether you want to search
             | only this session or host (you can sync shell history
             | across hosts). It never occurred to me that this is
             | something I'd want from a shell prompt, which is what
             | Starship is.
        
             | seanhunter wrote:
             | Control r. This is a zsh feature not a starship/oh my zsh
             | feature
        
               | vladvasiliu wrote:
               | mirzap was probably using some omz plugin to do that, so
               | if starship fully replaced omz, that functionality went
               | away, too.
        
               | RHSeeger wrote:
               | I think that's just a standard readline functionality.
               | It's available on bash, out of the box.
        
             | dagi3d wrote:
             | check atuin for history search
        
             | wolletd wrote:
             | I haven't checked out starship yet, but if I understand
             | what you are using, that is Zle functionality. It's part of
             | OMZs configuration (here:
             | https://github.com/ohmyzsh/ohmyzsh/blob/master/lib/key-
             | bindi...) but doesn't use other OMZ features.
             | 
             | I don't know if starship is still using Zle. If so, this
             | should be possible to configure without OMZ.
        
           | verdverm wrote:
           | From what I can tell, this doesn't nearly fill the gap that
           | OMZ occupies
           | 
           | Nice history, command auto complete, and similar beyond just
           | the looks, out of the box
        
           | cdrnsf wrote:
           | I'll second this. I've had a really pleasant experience using
           | Starship across development environments.
        
           | arendtio wrote:
           | Just tried Starship, even though it wasn't the first time I'd
           | heard about it. I would not say it is a 'drop-in and go'
           | experience. Let me explain.
           | 
           | After installing and adding it to my bashrc, I was wondering
           | was those version numbers and cloud symbols meant. Turns out:
           | Since NodeJS and Python were installed, it found a good idea
           | to print the respective versions. I could not care less about
           | those versions. The other part was that it thought that I
           | would like to see my AWS region. Well, I mean, I have built
           | something with AWS a few years back, and the config file for
           | that still exists, but no, I don't want to see that region
           | every time I open a shell. Finally, the default is to have
           | the prompt in a new line. I think when you have a long prompt
           | that makes sense, and it might also be a taste thing.
           | However, the documentation has this example at the beginning
           | about newlines:                 # Inserts a blank line
           | between shell prompts       add_newline = true
           | 
           | So I thought `add_newline = false` should do the trick, but
           | it didn't.
           | 
           | Luckily, the AI (GPT-5.2) was pretty good at explaining and
           | giving instructions for changing things. So after 30 minutes,
           | everything was understood and configured to my liking. I like
           | the result, but the default was pretty weird.
        
         | vbezhenar wrote:
         | I've spent few days and got some basic zsh settings adjust for
         | me. Since then I'm mostly using zsh with very little
         | configuration and I like it a lot. Yes, it's a steep curve, but
         | I'm spending all my life in zsh, so I think that was good time
         | investment for me. In my experience default zsh settings are
         | good enough and require very little customization.
        
         | esseph wrote:
         | I just use fish shell. Way easier.
         | 
         | https://fishshell.com/
        
           | petepete wrote:
           | I recreated my several hundred line + several plugins zsh
           | config in a few dozen lines of fish and one plugin
           | (fzf.fish), about 8 years ago. It's been a joy to use.
        
           | mekster wrote:
           | Biggest problem being not being able to paste much of the
           | complicated code found online. You can save it and run it via
           | bash command though.
           | 
           | oh my zsh can recreate much of the fish functionality while
           | maintaining good bash interoperability.
        
             | your_fin wrote:
             | This is the most common complaint I see for switching
             | interactive shells to fish/nushell, but it's not a problem
             | in practice. You don't ever uninstall bash, so if you've
             | got a command to paste:                 bash <enter>
             | <paste> <enter>            exit <enter>
             | 
             | Tada!
        
         | opan wrote:
         | FWIW if you're on a machine where you're allowed to use non-
         | default configs like oh-my-zsh, you could also just copy over
         | your own custom config. It seems like you're implying the
         | alternative to using oh-my-zsh is to rewrite your config from
         | scratch every time or use the default. It doesn't quite add up
         | to me. If you craft a config file of your liking one time, then
         | back it up somewhere, track it with git, whatever, you can keep
         | making use of that config across other machines. I just set up
         | a new personal machine recently, grabbed my dotfiles, now it's
         | the same familiar feeling as my other machine.
        
           | g947o wrote:
           | > just copy over your own custom config
           | 
           | That already defeats the purpose:
           | 
           | I don't want to copy things around
           | 
           | I never spend time crafting a custom config
        
             | RHSeeger wrote:
             | Crafting a custom config is right up on the list of things
             | I enjoy. Right up there with creating new characters in
             | video games that allow lots of customization.
        
         | theK wrote:
         | Hmm, weren't dotfiles invented just for that reason?
         | 
         | I'm joking but on a more serious note, installing a shell as a
         | default shell seems more complicated than copying over your
         | .bashrc
        
           | b40d-48b2-979e wrote:
           | more complicated than copying over your .bashrc
           | 
           | In case you weren't aware, MacOS uses zsh as the default
           | installed shell. The bash version that comes with MacOS is
           | some ancient 3.x version, from 2005.
        
             | theK wrote:
             | I think you where trying to say something and then stopped
             | just short of actually making your point. Please continue.
        
               | b40d-48b2-979e wrote:
               | Just that it would be `.zshrc` since zsh is already the
               | default shell in the context of this post unless you
               | enjoy a mid-2000s existence and none of the nice bash
               | features of this generation (in which whatever `.bashrc`
               | you've crafted is likely broken by time passing).
               | 
               | Maybe I'm underinformed, but I don't personally know any
               | Linux users who convert to zsh, instead opting for fish
               | or something else (oilsh? nushell?).
        
             | al_borland wrote:
             | zsh has similar files that can be copied over to other
             | systems.
        
         | latexr wrote:
         | I _stopped_ using Oh My Zsh for exactly one reason too: It was
         | so freaking slow it had a noticeable effect on my shell and my
         | mood. It frustrated me that I had to stop and wait every time I
         | opened a tab.
         | 
         | So I removed it, then continued using Zsh and whenever I missed
         | something from before I looked up what it was and installed the
         | plugin easily with Homebrew. The whole process took under an
         | hour. I realised I only needed two or three plugins.
         | 
         | Now my shell is fast, without unnecessary bloat, and does what
         | I need. I'm much more productive and happier, and at the end of
         | the day I don't really see what's more important than that
         | (within the scope of the conversation).
        
         | ozim wrote:
         | One man's bloat is another man's feature.
        
         | qudat wrote:
         | just install fish then
        
         | sodapopcan wrote:
         | You really only have to go through that once and it's a good
         | learning experience.
        
           | yolovoe wrote:
           | I will have forgotten almost everything by the time something
           | inevitably breaks in a few years. Unless I am constantly
           | recalling the knowledge and applying it, I don't find it
           | worth it. And I _don't_ want to be constantly recalling this
           | knowledge. I want it to just work.
           | 
           | OMZ has been working steadily for me for the past 8+ years.
           | Autocomplete, syntax highlighting, and a concise prompt--
           | really all I need.
        
       | nickzelei wrote:
       | Like many I installed omz and ran it as the default for a long
       | time. After a while I looked to optimize my shell starts and
       | realized I was only using a fraction of the functionality.
       | 
       | So I figured out what I was using and created my own very paired
       | down version of what I needed. My boot times are much faster and
       | I've been totally happy with it. I also learned a lot more about
       | shell configs as a result.
        
       | anotherpaul wrote:
       | I agree, I used omz a while now but I have since also realised
       | that the features I uses are so basic, it really does not warrant
       | a whole software project as a dependency.
       | 
       | So I went and had Gemini make me a zsh config with the features I
       | actually use. Took 15 minutes to get all the autocompelte,
       | aliases and search functionality and done.
        
       | srvmshr wrote:
       | I had the same gripe as the author. OhmyZSH seems too bloated for
       | my needs. Added to that, the defaults adds (and oft unnecessary)
       | emojis to prompts & outputs - something I don't find tasteful or
       | appealing.
       | 
       | I stripped out most of the OhMyZsh functions (which is pretty
       | modular given a shell package) and created a smaller, leaner
       | package (leanZSH) having only the known stuff I may use. I have
       | been using it without much complaints.
       | 
       | https://github.com/gradientwolf/leanzsh
        
         | changs wrote:
         | In a similar vein, there is slimzsh [1]. For me, it is a
         | minimal config that enables everything that's useful, and only
         | that. Quite a few others and I have been using this for more
         | than a decade. https://github.com/changs/slimzsh
        
       | jbirnick wrote:
       | They complain about a startup time of 380ms, but with the default
       | configuration it's only 60ms on my laptop. That's faster than the
       | final startup time of 70ms of their custom config, and it has all
       | the features that they added to their config. So with all the
       | features they need OMZ should be fast enough for them? I don't
       | get it.
        
         | forgotpwd16 wrote:
         | Startup time depends on hardware and (assume) features you're
         | enabling. Better hardware and less features, less lag.
        
       | __MatrixMan__ wrote:
       | You probably don't need zsh. POSIX shells are holding us back.
        
         | maxbond wrote:
         | Show me an environment where I can interact with my system
         | programmatically, where I can compose together arbitrary tools,
         | and which will never, ever, ever break on me, and I'll switch!
         | My experience with graphical environments has been that they
         | rarely compose, often break, and _constantly_ make arbitrary
         | changes that break my workflow. So every time I try something
         | else I end up coming back to the terminal.
         | 
         | But I agree that terminal environments have serious
         | shortcomings. I think it's a real shame we haven't created
         | anything else that does what the terminal does, and I think
         | it's mostly for lack of trying.
        
           | viraptor wrote:
           | Nushell. Still a terminal experience. But not a POSIX one.
           | https://www.nushell.sh/
        
             | oguz-ismail2 wrote:
             | Colorful outputs and elaborately decorated error messages
             | are cool but maybe it shouldn't deviate that far from POSIX
             | shells.                   $ trap '' chld         $ nu -c
             | test         Error: nu::shell::io::uncategorized_error
             | x I/O error           +->   x failed to get exit code
             | +-[source:1:1]          1 | test            * --+-
             | *   +-- Uncategorized error            +----
             | $
        
               | viraptor wrote:
               | There are other options if you want POSIX. But nushell
               | just does things differently (and in a much more sane way
               | with pipes).
               | 
               | Why would you want `test -e "$foo"` when you have `$foo |
               | path exists`? Why `test -n "$foo"` when you have an
               | actual == comparison and pattern matching expressions?
               | And you don't have to worry about quoting things just
               | right in any of the situations.
               | 
               | Yes, you need to learn a little bit of a new thing. You
               | can even implement a test function itself if you really
               | want to. But sometimes it's nice to just dump the legacy
               | baggage.
        
           | lillecarl wrote:
           | https://fishshell.com/ https://xon.sh/
           | https://www.nushell.sh/ https://elv.sh/
           | 
           | You're replying to someone that says POSIX shells are holding
           | people back, not that the terminal is a bad idea, there are
           | many alternative shells which offer benefits over POSIX
           | shells. fish-shell has everything you want from an
           | interactive shell included, xonsh is a mix Python shell,
           | nushell and elvish are adding types and other things to
           | shell.
           | 
           | The VT protocols that all shells have to confirm with are
           | pretty dated and I'd love to throw them off the roof for
           | something less stateful and with multiple font sizes but
           | there's no arguing that text based interfaces are good.
        
             | rtpg wrote:
             | I'm a nushell user but like... job control in nushell is
             | pretty miserable still unfortunately.
             | 
             | Nushell is definitely my fav of the set (xonsh is a neat
             | experiment but ultimately is missing pipeline programming
             | that nushell gives....), and I write personal shell scripts
             | for myself mostly in nu.
             | 
             | Aside: for shell scripts, my preference is something like
             | nu, then python + stdlib, giving me argparser etc, then
             | just zsh/bash/whatever. Seriously annoying how POSIX shells
             | do not give good argument parsing, tho I get it's a hard
             | problem
        
             | maxbond wrote:
             | zsh isn't strictly POSIX compliant either but this is fair
             | and I should've read that comment a bit deeper.
        
             | bsimpson wrote:
             | Now I'm tempted to try xonsh. It looks like it support the
             | amount of bash that I know, and everything else I can just
             | do in Python. (TBH, the things that I would need Python for
             | are obscure enough in bash that I wouldn't otherwise write
             | them myself.)
        
           | __MatrixMan__ wrote:
           | > I think it's a real shame we haven't created anything else
           | that does what the terminal does, and I think it's mostly for
           | lack of trying
           | 
           | I'd rather just take terminals a step forward, which I agree
           | hasn't happened due to a lack of trying. But the people who
           | aren't trying are the people who are instead tricking out zsh
           | with plugins. I'm a nushell fan myself but my point here is
           | not
           | 
           | > try nushell
           | 
           | but rather,
           | 
           | > be willing to try things that aren't backwards compatible
           | with `sh`
           | 
           | If more people relaxed on that sticking point, we could
           | actually benefit from the excellent post-POSIX work that has
           | been done. As it is, people are reluctant to try new shells
           | for some reason.
        
       | SamuelAdams wrote:
       | > Once in a while, it also checks for updates, which can take up
       | to a few seconds when you open a new tab.
       | 
       | This can be disabled fairly trivially. I then alias the update
       | command to a homebrew update alias.
       | 
       | https://stackoverflow.com/a/25876379
        
       | elcritch wrote:
       | Like others I don't use too many of the features but Oh-My-Zsh is
       | so easy to install.
       | 
       | Even better recently I discovered that FreeBSD has a package for
       | it!
       | 
       | `pkg install ohmyzsh` and 5 seconds later it's ready. Plus I
       | figure it's a bit more secure and insulated to any ohmyzsh
       | breaches.
        
       | gelatocar wrote:
       | I switched to zim years ago and found it has all the features
       | that I need but is much faster and I think easier to install
       | (though I haven't installed either for some time).
       | 
       | https://zimfw.sh/
        
         | jauntywundrkind wrote:
         | Fast as sin, and one of the most flexible installers systems.
         | You can point it at an incredibly diverse array of different
         | things to install, in different forms, with different urls, and
         | it will just do the thing.
         | 
         | Zimfw definitely has it's own ecosystem, plugins which are
         | zimfw capable. But it's remarkably versatile at bringing in zsh
         | code. Most plugin-systems are pretty ego-centric, demand
         | specific implementations, and zimfw stands out not just for
         | it's ridiculously impressive speed & handling, but for it's
         | versatility too.
         | 
         | Zimfw rocks.
        
       | kayson wrote:
       | I have not a small number of plugins on fish and I've never
       | noticed a problem with startup time. I do wish there was a better
       | way of managing or installing plugins. It just feels so fragile.
        
       | hyperadvanced wrote:
       | zsh is still crazy to me. I use bash for everything. I have no
       | idea what I'm missing out on.
        
         | mindcrime wrote:
         | FWIW, I still use bash as well. Nothing against zsh per-se,
         | it's just that I know bash, bash works, and there's no
         | _particular_ pain I experience using bash that will obviously
         | be solved by switching. And when you factor in anticipated
         | switching costs, I haven 't found any compelling reason to
         | spend any significant time on zsh so far.
         | 
         | Maybe one day though.
        
         | paodealho wrote:
         | I've been using it for the last 6 or 7 years and I can only
         | remember one specific feature I use a lot: "unset HISTFILE" to
         | disable history when I need to run commands with passwords.
         | 
         | Other than that, oh-my-zsh with git, systemd, and fzf plugins.
         | Saves a lot of typing.
         | 
         | The main selling point for me is how easy it is to setup.
        
           | sigwinch wrote:
           | Prefixing a space on that command will keep it out of
           | history.
        
           | danielscrubs wrote:
           | Space before the command will have the same effect
        
           | theK wrote:
           | Just out of curiosity, what sort of typing do those plugins
           | save in comparison to doing it in bash? Can you give some
           | examples?
        
             | paodealho wrote:
             | The git and systemd ones create several aliases for
             | frequent commands:
             | 
             | git commit -> gc
             | 
             | git status --short -b -> gsb
             | 
             | git checkout -> gco
             | 
             | systemctl --user restart -> scu-restart
             | 
             | Nothing that you couldn't come up with yourself, but I've
             | been using for so long it has become a standard for me.
             | 
             | The fzf plugin enables a fuzzy finder when you hit ctrl+r
             | or ctrl+t. You need fzf installed.
        
           | chuckadams wrote:
           | I remember when I switched to zsh solely for SUNKEYBOARDHACK.
        
         | commandersaki wrote:
         | I don't think it is crazy, but I know and love the bash quirks.
         | I've got permanent history setup thanks to Eli Bandersky [1]
         | which I know zsh has a solution to already. But what annoys me
         | with zsh is some of the ways it tab completes when navigating
         | the filesystem, and not by default allowing comments on the
         | command line, e.g. '# github api key blahblahblah', which I can
         | then pull later using phgrep.
         | 
         | Slight pain on a mac to get the latest version and use it as
         | terminal shell, but it gets easier everytime I work on a fresh
         | mac.
         | 
         | [1]: https://eli.thegreenplace.net/2013/06/11/keeping-
         | persistent-...
        
         | mianos wrote:
         | If you want vi history editing like you are used to in bash for
         | the last 20 years it's subtly different in a manner that makes
         | it insanity inducing. If you use the traditional emacs like
         | editing it's much the same.
        
           | hyperadvanced wrote:
           | Oh that's good. I'm an emacs guy. I don't like change.
        
         | theK wrote:
         | Yes, I'll throw my hat into this group too. Bash is fine.
         | 
         | YMMV but I have found using zsh too frictitious to be helpful.
         | Sure, theoretically zsh living in a bash world (lets face it,
         | all scripts are bash) is completely fine but reality seems to
         | differ. Copied a one liner from shell history into your script?
         | Crash. Use arrays? Weird bugs. Use shell builtins? Whoa
         | unexpected interactivity!!! Etc...
         | 
         | Bash is absolutely fine as a default shell. As an added
         | benefit, you don't feel like an invalid once logged in to a
         | container or server.
        
       | tristor wrote:
       | Prezto is faster than OMZ, and has been for over a decade.
       | Starship is faster still. I switched from using Prezto standalone
       | to using Prezto + Starship and relying primarily on Starship
       | several years ago. I'd be surprised if many people are still
       | using Oh My ZSH in 2026 vs using Prezto, anyway.
        
         | phearnot wrote:
         | zsh4humans is even faster than Prezto, according to their
         | benchmarks. that's what I'm using daily.
        
       | bitwize wrote:
       | _I_ may not need this sort of shell bling. And I don 't use it.
       | But my first Unix system was an early version of Xenix, which had
       | the original Bourne shell that didn't even support cursor up to
       | get a previous command. (I do use cursor up, C-r, and the shell
       | editing commands.)
       | 
       | But yesterday's conveniences become today's essentials, and those
       | who came in after me have their expectations set by the much more
       | sophisticated things available at the time. Like, I'm still
       | flabbergasted by people--working professionals--who go "I can't
       | program without syntax highlighting, autocomplete, and my IDE
       | generally going bing bing wahoo at me as I work, and I don't know
       | how anybody can." We just type the code in. Like we all had to
       | back in the day.
       | 
       | Anyway I can certainly see where someone younger than about 35,
       | or who came to Linux late, would be completely at sixes and
       | sevens without their colorized racing-stripes shell prompt.
        
         | sigwinch wrote:
         | "Still gangsta" I mutter to myself as I syntax-highlight
         | punchcard #818 by hand and Port-a-Punch a replacement.
        
       | alkh wrote:
       | Like many other people, I use oh-my-zsh for default setup and
       | that's it. I literally use a single plugin for git and very
       | actively autoload my custom functions to avoid startup delay.
       | With my 384 line config and oh-my-zsh on, here are the results:
       | 
       | $ hyperfine -N "zsh -lc 'exit 0'" "zsh -c 'exit 0'"
       | 
       | Benchmark 1: zsh -lc 'exit 0'                 Time (mean +- s):
       | 54.5 ms +-   6.3 ms    [User: 10.2 ms, System: 14.3 ms]
       | Range (min ... max):    38.1 ms ...  64.9 ms    78 runs
       | 
       | Benchmark 2: zsh -c 'exit 0'                 Time (mean +- s):
       | 6.5 ms +-   1.4 ms    [User: 0.8 ms, System: 1.3 ms]
       | Range (min ... max):     3.9 ms ...  14.2 ms    424 runs
       | 
       | It's crazy how their startup time is 380 ms, and I suspect
       | something else might be the reason, not just oh-my-zsh
        
         | jabwd wrote:
         | Trying doing the benchmark in a git repo.
        
           | alkh wrote:
           | That's where I actually did it, by coincidence
        
         | baby wrote:
         | You should try extract, z, and fzf
        
         | maple3142 wrote:
         | I think `zsh -l` start a login shell, which does not load zshrc
         | so oh-my-zsh don't get initialized. Try `zsh -ic exit` and it
         | should load zshrc before executing exit.
         | 
         | That said, the time of `zsh -ic exit` isn't really meaningful
         | metric for measuring the performance of an interactive shell.
         | See https://github.com/romkatv/zsh-bench#how-not-to-benchmark
         | for details.
        
           | alkh wrote:
           | Valid points, I learned something new today. Thanks, you were
           | right. If using -ic flags I am getting around 300 ms...
           | Interesting how I never noticed, guess I don't open many
           | terminal during the day
        
         | archargelod wrote:
         | Better way to benchmark zsh startup time is with zprof. Add
         | this to your ~/.zshrc:                   zmodload zsh/zprof
         | .. rest of your zsh config ..         zprof
         | 
         | And then restart terminal.
        
         | simonair wrote:
         | For anyone who cares about zsh startup performance,
         | `zsh4humans` by `romkatv` (author of powerlevel10k) is worth a
         | look: https://github.com/romkatv/zsh4humans
         | 
         | It achieves instant startup by rendering the prompt before the
         | full shell initializes. Since adopting it, I am done fiddling
         | with my shell config and the fact that `zsh4humans` is in
         | maintenance-mode is actually an advantage as it keeps me from
         | wasting time refactoring `zshrc`.
        
       | yathaid wrote:
       | Slightly off topic but:
       | 
       | >> My workflows involve opening and closing up to hundreds of
       | terminal or tmux tabs a day.
       | 
       | What?!?
        
         | ahmeni wrote:
         | Should have been titled "I probably don't need Oh My Zsh
         | because of my weird niche tab workflow" but that's a lot less
         | clickbaity.
        
       | Spivak wrote:
       | Well yeah, you need antibody https://getantibody.github.io/ and
       | then whatever plugins you desire. Been using it for years and
       | it's never been anything other than fast and reliable.
        
         | imcritic wrote:
         | Why antibody and not any of the 60 alternatives? Is it truly
         | the best among them or is your choice sub-optimal?
         | 
         | Thinking about that I realized I prefer not to use any plugin
         | manager at all.
        
           | Spivak wrote:
           | I mean it's not like I've done any formal benchmarks but like
           | I've used a bunch of plug-in managers and antidote, sorry
           | antibody is the old one, it's just so much faster than all
           | the others.
        
         | obsoleetorr wrote:
         | github says in maintenance since 2022 and that users should
         | move to next great thing, antidote
        
           | Spivak wrote:
           | Oh shit you're right it is actually antidote, God why do they
           | have to name them the same things. Even their websites are
           | similar.
        
       | never_inline wrote:
       | Didn't know about starship and need to check it out.
       | 
       | Shameless plug: I wrote a detailed git prompt in C which is
       | similar to posh-git on Powershell: https://github.com/mahesh-
       | hegde/promptsynth
        
       | seaal wrote:
       | Surprised no one has shout out zsh4humans, perhaps because it's
       | basically in maintenance mode but it's not like I need any new
       | features. Love the ssh teleport feature.
       | 
       | https://github.com/romkatv/zsh4humans
        
       | DocTomoe wrote:
       | > My workflows involve opening and closing up to hundreds of
       | terminal or tmux tabs a day. I do everything from the terminal.
       | Just imagine that opening a new tab in a text editor would take
       | half a second every time.
       | 
       | This sounds like overoptimization on a neglible time loss for
       | what is essentially an unique (and dare I say: broken?) workflow.
       | 
       | I use terminals a lot ... but I work with 4-5 day-persistent
       | terminals that I open once a day and keep in the background. The
       | QoL effects of omz outweigh microtuning startup times
       | significantly.
        
       | gaigalas wrote:
       | At some point you need to remove the training wheels, otherwise
       | you'll never learn to ride the bike.
       | 
       | At first, you need them. You'll fall without it. But if you still
       | rely on them after a while, it's not a good sign.
        
       | commandersaki wrote:
       | Are we really quibbling over 400ms startup delay to open a new
       | terminal?
        
         | nomel wrote:
         | Of course. We're nerds. You should have seen the passionate
         | discourse, a couple days ago, for Brave browser saving 45MB of
         | memory!
        
         | ahofmann wrote:
         | Yes! The very famous xz hack was only found, because a German
         | wondered why his ssh session lagged 200 ms at the start.
         | Everyone should go mad when their main tool lags a few hundred
         | milliseconds. It is unacceptable that we sit on machines, that
         | run billions of calculations per second and our software still
         | lags.
        
         | theodric wrote:
         | 400ms here, 400ms there, and before you know it, you're dead.
         | I've switched terminal emulator and upgraded computers for
         | less.
        
         | neuralfog wrote:
         | Yes, and hundreds of developers just spent 5 minutes reading
         | about it.
         | 
         | This investment makes sense for OP who opens hundreds of
         | terminal sessions, but does it make sense to bother about 1s
         | delay when they start the terminal session once in a while? I
         | have several sessions opened all the time, the last time I
         | wasted my 1s on zsh was in 2025 when I rebooted my machine due
         | to a nvidia drivers update.
        
         | xboxnolifes wrote:
         | 400ms is a ton if you have a terminal centric workflow with
         | short lived shells.
         | 
         | HN has gone on a decade long crusade against Electron, of
         | course 400ms is a lot.
        
       | ilvez wrote:
       | For command search I've replaced regular search and fzf with
       | atuin. Works especially well with multiple hosts..
       | https://atuin.sh/
       | 
       | EDIT: The OP fails to mention zsh profiling: zprof. I discovered
       | that atuin is my biggest waster at the moment with like 20ms and
       | rest of the stuff I could clean up.
        
         | k_bx wrote:
         | I'm using fzf and it's amazing. What does atuin bring
         | additionally? Looks very similar
        
           | aniforprez wrote:
           | Atuin also has syncing and backups though I've never really
           | felt the need to use it. I prefer keeping histories separate
           | and when I need to share shell commands I just do the usual
           | methods like putting it in a shared text file, send it to
           | myself on a chat app or just looking at the command and
           | typing it out
        
             | ilvez wrote:
             | Yeah. It boils down to preferences. By the way, there is
             | also an option to search only in current host and current
             | directory as well (+current session).
        
           | Zizizizz wrote:
           | I use atuin for the shell history as it seems to know when
           | I've run a command in one tab/split while another is open
           | where fzf doesn't seem to sync it all the time. But I still
           | use fzf to find files.
           | 
           | (Bonus, I use Zoxide to replace the alt+d cd shortcut as it's
           | much faster, and use https://github.com/Aloxaf/fzf-tab for
           | tab completions in the terminal to become fuzzy, very very
           | useful)
        
             | opan wrote:
             | >it seems to know when I've run a command in one tab/split
             | while another is open where fzf doesn't seem to sync it all
             | the time.
             | 
             | On my machine this is handled in zsh, not fzf (but then fzf
             | still benefits). You can configure your shells to sync
             | without exiting. You may need to run one command (or just
             | hit enter with nothing typed, maybe) for the shell history
             | to catch up, but then it should all be there. Relevant
             | options:
             | 
             | # share history among terminals
             | 
             | setopt share_history
             | 
             | # append to the history instead of overwriting
             | 
             | setopt append_history
             | 
             | # append to history incrementally instead of when the shell
             | exits
             | 
             | setopt inc_append_history
             | 
             | I think finding out about this is why I originally switched
             | from bash to zsh several years ago.
        
               | Zizizizz wrote:
               | Yeah I believe I have these already configured as such,
               | it was that atuin didn't require me to press enter again
               | but thank you for sharing
        
       | sureglymop wrote:
       | I agree. And you probably neither need Omarchy, CachyOS, etc.
       | Choose boring and get peace of mind.
        
         | pixelatedindex wrote:
         | CachyOS is basically arch on easy mode. I used to spend
         | countless hours tinkering with arch but then I got older and
         | don't have much time. Plus there are helpful meta packages for
         | gaming that work great out of the box, which for a gamer like
         | me sans Windows is pretty awesome.
        
           | sureglymop wrote:
           | I've tinkered at most an hour on my arch install and it's
           | just been running smoothly. The installer these days is easy
           | to go through as well. It's the same for bash, very little
           | customization, then it runs smoothly for years.
           | 
           | I'm not saying CachyOS is bad, just that it is in my opinion
           | another layer of complexity that may change/deprecate/etc.
        
             | pixelatedindex wrote:
             | That's fair, the more steps you take away from the source
             | distribution, the more variances become a potential for
             | trouble. Also it's been over a decade since I used arch,
             | it's probably a whole lot better now.
        
           | opan wrote:
           | >I used to spend countless hours tinkering with arch but then
           | I got older and don't have much time.
           | 
           | Have your lost your old configs that you worked hard on?
           | That's a shame if so. I love moving my configs I've worked
           | hard on to new machines and instantly getting up and running
           | in a now-familiar environment. It saves so much time and
           | effort.
        
       | k_bx wrote:
       | I've discovered plugins zsh-autosuggestions and fzf (available
       | out of the box) and OH MY ZSH am I impressed with my quality of
       | life improvement.
        
       | mmoustafa wrote:
       | I don't think 0.38s is a bad trade-off for convenience when the
       | rest of the tools I need to do my job collectively are another 2s
       | at shell startup. NVM alone adds 0.5-0.6s on my M4 Macbook Air.
       | 
       | Bigger fish to fry if we're being practical.
        
         | Zizizizz wrote:
         | You can replace nvm with https://mise.jdx.dev/ , it starts
         | effectively instantly and works not only for node versions but
         | all programming languages and tools.
         | 
         | `mise use node@latest`
        
           | lombasihir wrote:
           | or asdf
        
             | DanOpcode wrote:
             | I'm using Asdf too. Have heard well about Mise, but I
             | haven't figured out what the difference is, so I have
             | stayed with Asdf
        
               | jacobsenscott wrote:
               | mise has more features - it is a super set of asdf. For
               | example it can set your env vars when you cd into a
               | directory (like direnv). It also has tasks (which I
               | haven't used) - they appear to be similar to what a
               | Makefile does. So you can potentially replace three tools
               | (asdf, direnv, make) with one.
        
               | syhol wrote:
               | Mise started out using the same plugins as asdf, mostly
               | focused on adding performance and usability improvements.
               | Over time it added more features and security.
               | 
               | Most tools are now directly fetched from github releases
               | without the need for random shell scripts (which is what
               | asdf plugins are).
               | 
               | It also grew to be a task runner and environment manager.
               | At first you might think this is scope creep but they're
               | both opt in and very elegant additions. I don't want to
               | ramble but let's just say they've solved real problems
               | I've had.
               | 
               | I'm a fan of it, and I can't think of a reason why I
               | would use asdf over mise. Its real competition is nix
               | (+devbox/devenv/flox), devcontainers, and pixi.
        
         | 2muchcoffeeman wrote:
         | I am seeing a phenomenon of people wanting to hyper optimise
         | their workflows. It's nonsensical when you consider the other
         | stuff you need to do or how slow everything else is.
        
         | PunchyHamster wrote:
         | ..have you checked. It's 0.04s in my setup. I have it a bit
         | customized but I don't remember chasing milliseconds on config
        
         | prodigycorp wrote:
         | Holy heck, I just profiled my zsh initialization and nvm was
         | the big source of bloat, holy hell. Similar setup as you (M4
         | MBP), same amount of startup bloat. Lazy loading it fixes it.
         | 
         | GPT-5.2 changed the nvm initialization script to:
         | export NVM_DIR="$HOME/.nvm"              _nvm_lazy_load() {
         | unset -f nvm node npm npx _nvm_lazy_load       [ -s
         | "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"       }
         | nvm() { _nvm_lazy_load; nvm "$@"; }       node() {
         | _nvm_lazy_load; command node "$@"; }       npm() {
         | _nvm_lazy_load; command npm "$@"; }       npx() {
         | _nvm_lazy_load; command npx "$@"; }
        
           | mmoustafa wrote:
           | Although this is what Opus recommends, it will give you many
           | issues as you don't really have any node runtimes in the path
           | (or worse if you do).
           | 
           | What I recommend is replacing it with $PATH=(a command to
           | find the nvm default alias directory, detect the verion and
           | load it from that specific version directory directly) so you
           | always have default node in path and then lazy loading only
           | nvm itself, so you can switch when you need to.
           | 
           | Sorry I don't have the command handy as I'm on mobile but if
           | you paste the above into Opus you'll get it.
        
             | prodigycorp wrote:
             | Thanks. I modified my comment to disclose that gpt 5.2
             | generated that modification. I'll try your suggestion.
        
       | martianlantern wrote:
       | I have given up on any external bash configurator a long time
       | ago, instead I write my own bash prompts these days, they lack a
       | lot of functionalities but I am much happy with them for now,
       | also a shameless plug:
       | https://martianlantern.github.io/2025/11/updating-my-bash-pr...
        
       | extr wrote:
       | Had this problem awhile ago of my zsh startup being slow. Just
       | opened claude code and told it to benchmark my shell start and
       | then optimize it. Took like 5 minutes and now it's ultra fast.
       | Hardly any idea what it did exactly but worked great.
        
       | socalgal2 wrote:
       | > I'm using starship which is a fast and minimal prompt packed
       | into a single binary.
       | 
       | cargo install starship --locked
       | 
       | downloads 336 packages. So much for "minimal". cargo is the new
       | npm
        
         | lazzlazzlazz wrote:
         | Right. A lot of people when they say "minimal" mean "simple
         | looking at first glance", and it rarely is.
        
         | dwattttt wrote:
         | Some of those are the equivalent of a single C source file.
         | 
         | We wouldn't celebrate a C project for specifically holding down
         | to say, 10 source files max. We'd celebrate it separating
         | concerns well instead.
        
       | thiagowfx wrote:
       | https://grml.org/zsh/
       | 
       | Simple, sensible defaults.
       | 
       | Ships with the Arch Linux installation ISO.
        
         | soupguadeloupe wrote:
         | Yes, that's also what I use. Always found oh-my-zsh a little
         | too much and too hipster-y for my taste.
        
         | jamietanna wrote:
         | I moved from oh-my-zsh to grml ~10 years ago, and I've enjoyed
         | it - it's got good defaults, is extensible (I've added custom
         | stuff to handle how I manage directories for work things) and
         | the single-file nature of the defaults makes it super
         | straightforward to put it onto a new machine (ie a server)
         | without then necessarily needing to do any extra tweaking
        
       | Zizizizz wrote:
       | This is the .zshrc file I have in my dotfiles.
       | 
       | It auto installs everything if you don't have it. Starts
       | effectively instantly.
       | 
       | External dependencies (or remove their line at the bottom)
       | 
       | - [Mise](https://mise.jdx.dev/) fast asdf, runner, and direnv
       | replacement
       | 
       | - [oxide](https://github.com/ajeetdsouza/zoxide) smart and fast
       | cd replacement
       | 
       | -[atuin](https://atuin.sh/) ctrl + r and shell history finder
       | 
       | - [fzf](https://github.com/junegunn/fzf) fuzzy finder
       | 
       | ``` # Plugin Manager
       | 
       | declare -A ZINIT ZINIT[NO_ALIASES]=1 ZINIT_HOME="${XDG_DATA_HOME:
       | -${HOME}/.local/share}/zinit/zinit.git" [ ! -d $ZINIT_HOME ] &&
       | mkdir -p "$(dirname $ZINIT_HOME)" [ ! -d $ZINIT_HOME/.git ] &&
       | git clone https://github.com/zdharma-continuum/zinit.git
       | "$ZINIT_HOME" source "${ZINIT_HOME}/zinit.zsh"
       | 
       | autoload -Uz compinit; compinit
       | 
       | # Plugins zinit light Aloxaf/fzf-tab zstyle ':fzf-tab: _' use-
       | fzf-default-opts yes zinit light zdharma-continuum /fast-syntax-
       | highlighting zinit light zsh-users/zsh-autosuggestions
       | 
       | # Starship zinit ice as"command" from"gh-r" \ atclone"./starship
       | init zsh > init.zsh; ./starship completions zsh > _starship" \
       | atpull"%atclone" src"init.zsh" zinit light starship/starship
       | 
       | zstyle ':fzf-tab:complete:_' fzf-bindings 'shift-tab:toggle'
       | zstyle ':fzf-tab: _' switch-group  ',' '.' zstyle ':fzf-tab:_'
       | continuous-trigger '`'
       | 
       | source <(fzf --zsh)
       | 
       | eval "$(mise activate zsh)" eval "$(zoxide init zsh)" eval
       | "$(atuin init zsh --disable-up-arrow)" ```
        
       | darkamaul wrote:
       | I have been using OMZ for the last 8 years but recently made the
       | switch to plain zsh with : - starship for a better prompt -
       | Claude ported plugins I was using from omz (extract, sudo) -
       | custom written aliases that were muscle memory - zoxide for the a
       | command
       | 
       | So far that has been a great move, my terminal tab feel snappy
       | again. One thing I miss (but I'm sure I could find a way to
       | replace it) is `cd ....'
        
       | napkinartist wrote:
       | What workflow involves opening hundreds of shells every day?
       | Like, I've got a half dozen shells open at any given time, and
       | sometimes I gotta refresh or reboot, but even on my worst day in
       | looking at two dozen.
       | 
       | How do you get to hundreds?
        
         | f311a wrote:
         | Temporary splits to run code close to the editor, tmux popups
         | (they open lazygit or file manager on top of the current tab).
         | Debug runs, where I want to preserve their output for some
         | time, so I keep them in separate tabs.
        
         | WhyNotHugo wrote:
         | I use a lot of short-lived terminals. I have zsh+foot
         | configured so that ctrl+shift+n opens a new terminal with the
         | same current directory, so when using Vim, that's as fast as
         | putting Vim in background, but I can tile both windows easily.
         | 
         | I never have more than a one or two dozen terminals at a time,
         | but I definitely open hundred of short-lived ones.
        
           | napkinartist wrote:
           | Why? You've said you do but not why you do? Why not leave a
           | terminal open?
        
             | nemetroid wrote:
             | Why would I leave it open once I'm done with the task for
             | which I opened the terminal?
        
       | napkinartist wrote:
       | The amount of time this author is complaining about is like, a
       | fraction of the time I spend getting through the first few sips
       | of coffee in my day. I'm sure there's so many bigger time
       | optimizations to tackle first.
       | 
       | This feels like a strange hang up to me.
        
         | stndef wrote:
         | I notice the delay, but I try to check myself with it. Not
         | everything has to be instant gratification. We're ruining our
         | brains.
        
           | xboxnolifes wrote:
           | This feels like the craziest excuse for slow software.
        
       | nunez wrote:
       | I never moved to omz (or even zsh; I still rock bash) because I
       | have 10+ years of dotfiles that cover all of my needs. I can see
       | all of the cloud accounts I'm logged into, the status of my Git
       | repositories when I'm cd'ed into them, the number of directories
       | deep my stack is when I use pushd, and have lots and lots of
       | custom functions that save me time. I had moving to zsh in my
       | personal backlog for many years but have yet to come across a
       | pressing reason why I should!
       | 
       | Anyway, yeah, all of this adds startup and command invocation
       | time, but the value far outweighs the latency.
        
         | bsimpson wrote:
         | I'm changing to GhosTTY as we speak (from Mac Terminal, because
         | I'm tired of gemini-cli not getting my shift-return for
         | newlines). Wasn't until that process that I learned that new
         | Mac accounts are on a different shell (zsh) than I have (bash).
         | Last time I switched shells was when Apple flipped from tcsh.
         | 
         | Now, I'm deep down the rabbit hole of standardizing all my
         | shells/terminals/configs with Nix. Either a really good or
         | really bad project to start on a Friday night.
        
         | bloppe wrote:
         | It's basically the same, except smarter about command history
         | and auto-completion by default. I'm sure you could get Bash to
         | act the same way with a bit of prodding.
        
       | thefilmore wrote:
       | My zsh config has three things:                   setopt
       | PROMPT_SUBST ; PS1='[%n@%m %c$(__git_ps1 " (%s)")]\$ '
       | bindkey "^R" history-incremental-search-backward         autoload
       | -Uz compinit && compinit
       | 
       | The first one is mentioned in `git-prompt.sh` that comes with
       | git, which needs to be sourced as well.
        
       | PunchyHamster wrote:
       | /usr/bin/time -f "%e seconds" zsh -i -c exit         0.04 seconds
       | 
       | I think they are just doing something wrong. Why people are
       | upvoting this nonsense
        
       | archargelod wrote:
       | I was annoyed by this enough that I ended up cloning the OMZ
       | repository locally, and stripping out all the modules I don't
       | use. And now I just have it as part of my dotfiles[1].
       | 
       | It's just a handful of files and I manually source them in my
       | zshrc[2]:                   source $ZSH/lib/async_prompt.zsh
       | source $ZSH/lib/key-bindings.zsh         source
       | $ZSH/lib/completion.zsh         source $ZSH/lib/history.zsh
       | source $ZSH/lib/git.zsh         source $ZSH/lib/theme-and-
       | appearance.zsh
       | 
       | It's essentially the same as omz setup I was using before, but
       | loads in just ~25ms (Note: it's on a hard drive, with ddr3 ram
       | and 18ms out of that is spent by compinit)
       | 
       | It also fixed another issue I had with Oh-My-Zsh: whenever they
       | (very rarely) tweak their default config - it breaks my muscle
       | memory.
       | 
       | [1]
       | https://codeberg.org/janAkali/dotfiles/src/branch/main/confi...
       | 
       | [2] https://codeberg.org/janAkali/dotfiles/src/branch/main/zshrc
        
       | shevy-java wrote:
       | > The main problem with Oh My Zsh is that it adds a lot of
       | unnecessary bloat that affects shell startup time.
       | 
       | Wowsers!
       | 
       | That +0.5 seconds delay will kill cats everywhere. We must
       | microoptimise the startup time of shells!!!
       | 
       | Or ... we could simply use bash and KDE konsole with, say, 10
       | tabs. That setup works for me since ages; admittedly I use bash
       | just as a wrapper for simple actions as well as calling a
       | gazillion of aliases and mostly ruby scripts that do the real
       | job. But damn I never knew there were guys who were concerned
       | with +0.5 seconds delays caused by oh-my-zsh. The bloat! Oh my
       | godsers!
        
         | mezyt wrote:
         | Plus, how many shell can one individual open in a day ? I'm
         | doing that once per day on a good day, maybe twenty if I have a
         | lot of unplanned work on subprojects that needs to be done
         | concurrently with my main task.
        
           | binaryturtle wrote:
           | Sometimes hundreds per day. Tabs come and go here. People
           | have different workflows.
           | 
           | Yesterday just shy over 50, according to entries from `login`
           | in the system log.
           | 
           | I do launch multiple interpreters just to get a fancy coloful
           | cowsay on each launch. Which involves the fortune program,
           | lolcat (via ruby) and cowsay itself (via Perl). I probably
           | should optimise that into a single C binary for better
           | startup times! :)
        
           | virgoerns wrote:
           | The problem with long startups is that they break the flow. I
           | live in CLI. I open and close terminal windows all day long,
           | sometimes just for quick 2-3 commands to check something. 100
           | new interactive shells a day is my guess. I already know
           | commands to run, my fingers are ready to type, they already
           | pressed the keys ti spawn a new shell and now they have to
           | stop for 500 ms. Repeat these 100 interruptions every day and
           | you get the death by 1000 spoons.
           | 
           | I don't use oh my zsh, but on one laptop zsh took 600ms to
           | start. I narrowed it down to a strange "bug": adding even a
           | single empty file to the custom fpath caused the slowdown. It
           | bugged me so bad that I decided to try fish again, but this
           | time for real. And this time it stuck with me. I like its
           | architecture (defining functions to change its look-and-feel
           | - great idea!) and of course its 32 ms startup time.
        
           | hiq wrote:
           | As another commenter, I'm probably at 100s per day.
           | 
           | A reason is that I use i3 workspaces, with each workspace
           | being for different tasks, so I don't want to reuse a
           | terminal that has another context.
           | 
           | One issue with keeping a single shell is that the history is
           | full of irrelevant stuff. If you run commands that take a
           | while and print a lot of output, you want it to be as clean
           | as possible. If I want the beginning of the command, I can
           | scroll to the top, and I don't end up with some unrelated
           | output.
           | 
           | I also take quite notes in vim everywhere, often next to
           | long-running commands, using tmux.
        
         | wrqvrwvq wrote:
         | For terminal-centric workflows, one ends up needing to open
         | dozens of shells throughout the day.
         | 
         | Starting one command, realizing you need info from a previous
         | command, often the fastest way to get that info is to open
         | another terminal and start typing and the copy-pasting the
         | relevant piece of cmd. Or needing the output from another
         | command that's scrolled up in a window. In general you end up
         | with a mosaic of tiles each of which is holding key
         | information. So you inevitably open a new tab to make use of
         | the information in the other 3 or 4 windows.
         | 
         | Shell startup is mainly not about waiting for a few terminals
         | in abstraction, but about the way each shell is just a small
         | piece of a longer live workflow and waiting a second for a
         | shell so that you can fill in a piece of a command feels
         | terrible. I think nushell will help cut down on this unpiped
         | inefficiency, but it's usually much simpler to manually glue
         | bash commands together than to parse text output and pipe.
        
         | janderland wrote:
         | I couldn't help but think this as well. I understand wanting
         | software that feels snappy, but this is hardly a problem.
         | Instead of trying to convince the reader that we should care
         | about this, it would be nice if the writer admitted this is an
         | inconsequential personal preference.
        
       | mifydev wrote:
       | The problem with zsh, as with a lot of open source tools is bad
       | defaults. If only zsh had a better out of the box experience then
       | OMZ wouldn't be needed. I used maintain a lot of configs, over 10
       | years I just keep forgetting what did I set up. I don't want to
       | be bothered with this anymore.
        
       | reacharavindh wrote:
       | I had my phase of having a fancy shell with all bells and
       | whistles. I've now settled with the default terminal so that 1.
       | It is fast, 2. Whereever I work, I have the same experience.
        
       | rukshn wrote:
       | I switched to fish shell with star ship. Fish has autocomplete
       | and syntax highlighting out of the box which is quite neat and
       | the main features I use in omgzh so fish was a safe choice for me
       | 
       | https://ruky.me/moving-from-zsh-to-fish-nixos-darwin/
        
         | 9dev wrote:
         | Also, you probably don't need to customize it at all, it's more
         | than good enough out of the box.
        
         | eddythompson80 wrote:
         | Fish is also not POSIX which has always been its, and my,
         | issue. I use zsh+starship and my own very minimal init
         | stuff+zsh autocomplete and syntaxhighlihg plugins. It's not a
         | perfect setup. I wish fish would "just work" but it doesn't.
         | Frequently I had to look up for "workarounds" for my setup. 25
         | years in, I think I got it and i just keep my zshrc and
         | `machine-init.sh` on point for my-own-style-experience. I think
         | a lot of that could be simplified with fish+starship, but it's
         | just not there.
        
           | TurboSkyline wrote:
           | > Fish is also not POSIX which has always been its, and my,
           | issue
           | 
           | Could you give some examples of issues you encountered
           | because of that? I've been using fish for about 8 years now I
           | can't remember an instance where that was a problem in
           | interactive use.
        
             | ku1ik wrote:
             | Same here. More than 5 years with fish and it's been like 5
             | times when not-POSIX was an "issue", which I've been
             | solving by temporarily entering bash and rerunning the
             | command there.
        
             | forgotpwd16 wrote:
             | Issue is the cognitive overhead to know 2 distinct shell
             | languages. One you use, and one (almost) everyone else
             | uses. If later isn't of your concern and Fish is all you
             | interact with then no issue whatsoever for interactive
             | or/and scripting use.
        
               | mikkupikku wrote:
               | Not to be funny, but is POSIX scripting even still
               | relevant? It's well understood that they should only be
               | used for quick and simple tasks, and anything more
               | serious or demanding should be done using something like
               | python instead. But these quick and dirty tasks are very
               | easy for LLM coding agents to do in python. I used to
               | have dozens of shell scripts, each no more than tens of
               | lines long, in my ~/bin/, but I had an LLM rewrite all of
               | them in python, adding proper argument handling, --help
               | messages and error handling too in the process. I
               | sincerely don't think I'll ever write another bash script
               | again.
        
               | sgarland wrote:
               | Do you know how many CI/CD pipelines run on shell
               | scripts?
               | 
               | Another example is small utilities. I wrote one to login
               | to MySQL DBs at work. We have to use Teleport, which I
               | dislike, and it has MFA. So I made a small SQLite DB that
               | has cluster names, endpoints, and secret ARNs (no actual
               | secrets, only metadata), and then wrote a shell function
               | that uses fzf to parse the SQLite DB contents, then ssh
               | tunnels through an EC2 with Teleport to the selected
               | MySQL DB, using expect with a call to 1Pass to answer the
               | password request, and then picks the first available port
               | >=6033 to connect the mysql client. It also tracks the
               | MySQL DB : port assignments in the SQLite DB and waits
               | for the client to exit so it can tear down the ssh
               | tunnel. The only input I have to do beyond selecting the
               | DB is answering a push notification on my phone for MFA.
               | 
               | > replacing 10-LOC shell scripts with Python
               | 
               | The startup time would drive me insane. I love Python,
               | but it's not great for stuff like that, IMO.
        
               | rovr138 wrote:
               | I write all my scripts in bash. I'm not learning a new
               | language.
               | 
               | That's not a problem since it's available and when
               | #/bin/bash or env bash is there, it just works.
               | 
               | My bash scripts are stored in a folder on my PATH, so it
               | all just works.
        
             | eddythompson80 wrote:
             | For me it's always been an inability to "copy this command
             | from stackoverflow" (or in the modern day, it'll be copy
             | this from ChatGPT) into your shell. Maybe it's better now,
             | but the last time I seriously gave fish a chance was 2014.
             | 
             | Also one of may main use case is documenting things other
             | developers can do to make their life easier. There are
             | handful of things where zsh behaves differently than bash.
             | And while those handful of thins are not even a POSIX or
             | shell things, they often come up.
             | 
             | The reality is, every day I'm fighting with "developers"
             | who don't know what the difference between AWS, Linux, and
             | bash is. Throwing "fish" into the mix seems like I'm just
             | being obtuse for no reason. I have sept hours trying to
             | explain to some dumbass that git-bash on windows is not the
             | same thing as Linux only for them to call me "oh he really
             | cares about 'bash'"-guy. While claiming they are "Linux
             | developers" as they use macOS.
        
               | kibwen wrote:
               | I confess I don't really get this. Fish and Bash are
               | different languages in the same way that Ruby and Perl
               | are different languages. And if I want to run a Perl
               | script, I don't try to run it in a Ruby interpreter, and
               | I don't get grumpy at Ruby for not being source-
               | compatible with Perl.
               | 
               | Which is to say, if you need to run a Bash script, run it
               | via `bash foo.sh` rather than `./foo.sh`. There's no need
               | to limit yourself to a worse shell just because there
               | exist some scripts out there written in that shell's
               | language.
        
               | E39M5S62 wrote:
               | There's nothing even preventing the second form from
               | working either. Just put the right shebang at the top of
               | the script and it'll run through that interpreter. I've
               | been on fish for a decade, but still write all my shell
               | scripts in Bash. It's never been an issue.
        
         | GCUMstlyHarmls wrote:
         | Yeah. I used zsh for decades, invested a reasonable amount of
         | emotion and time in my config but swapped to fish last year as
         | a sort of January trial and it stuck.
         | 
         | It's not perfect, the lack of HEREDOCs are annoying sometimes,
         | and no background-able blocks (eg `{x}&`) means you can't async
         | things as easily in scripts.
         | 
         | Zsh has a lot of advanced stuff (at least for a shell) that can
         | deliver pretty complex scripting such as throw/catching,
         | mountains of variable flags and switches which I do miss when I
         | write fish scripts but really -- I've abused them a lot over
         | the years and now days I would be more likely to just use a
         | "builds to a single binary" language.
         | 
         | I will probably swap to nushell when it gets a bit more stable
         | (in my experience it's runtime is stable, but it's feature set
         | / command names are still shaking out. I really like it's
         | general ideas though in terms operating on structured data.
        
       | arnvald wrote:
       | I used Oh My Zsh for years, but there were literally 3-4 features
       | I relied on: autocompletion, git plugin, history search, and one
       | theme.
       | 
       | For some reason it was slow to load which I found annoying, so I
       | used Claude Code to optimize it. In the end I ended up removing
       | Oh My ZSH entirely, now I have a single .zshrc file that contains
       | everything, and it became much faster.
       | 
       | Similarly I moved from Packer to Lazy.nvim and updated a number
       | of libraries, and from iTerm to Ghostty, Claude Code essentially
       | converted my configs in a matter of minutes
        
       | cranium wrote:
       | It's funny how there are operations so sensitive to latency that
       | even half a second feels too long.
       | 
       | However I agree with other comments that the author's baseline of
       | 380ms is suspicious. I get 150ms (full config, 6 plugins) vs 50ms
       | with no config and plugins.
        
       | miduil wrote:
       | In case the authors sees that, your default shell is configured
       | via [0]:                  users.users.yourUser.shell = pkgs.fish;
       | 
       | [0]:
       | https://search.nixos.org/options?channel=unstable&show=users...
        
       | ghusto wrote:
       | After holding out for literally years after Mac changed their
       | default shell to ZSH, I finally switched over. I didn't love it,
       | but it was okay and had some niceties that I wasn't used to. Then
       | I started to configure it and inevitably ran into Oh My Zsh, and
       | spent some time playing around with that to get it how I liked.
       | 
       | In the end, I realised nothing was as good (to me) as my original
       | Bash set up. I have all the features I need, it's universally
       | supported, and it's fast.
       | 
       | Tip: Install the post GNU2 version from brew
        
       | monokai_nl wrote:
       | Agree. If you want some colors, git status, a few convenience
       | functions and a clean prompt, this is my current setup:
       | https://monokai.pro/zsh
        
       | bstar77 wrote:
       | Am I the only one that uses ohmyposh with fish? I have a killer
       | custom posh theme that I've been using for years and the
       | performance is fantastic.
        
       | xlii wrote:
       | Dunno.
       | 
       | I have 90 lines zsh config with 3 plugins (compinit, vcs-info,
       | edit-command-line) and startup-exit sequence takes 0.32s.
       | 
       | You learn very quickly where the lags come though when you work
       | on a big old repository (I learned this on Emacs source code)
       | where getting current branch for jujutsu takes ~5 second. Git is
       | faster in this regard but it still is ~0.3s
       | 
       | I'm not fan of starship (I don't use fancy command line variables
       | in general) but many of those issues can be dealt with awesome
       | bkt caching utility [0]. Instead of live reading just let bkt
       | cache it with long TTL with eager async refreshes. My guess is
       | that Starship does exactly that.
       | 
       | [0]: https://github.com/dimo414/bkt
        
       | forrestthewoods wrote:
       | This thread feels so foreign to me. I use basic ass vanilla
       | Windows terminal. It's fine. I also use the vanilla built-in to
       | VSCode terminal. It is also fine.
       | 
       | Terminals are such a small, unimportant part of my job I barely
       | even think about them.
        
         | kstrauser wrote:
         | Conversely, I spend about 60% of my working day in the
         | terminal, with another 20% in Zed. Wild how much workflows
         | differ, isn't it?
        
         | soraminazuki wrote:
         | Yes, Windows users don't have time for such luxuries when
         | they're constantly fighting a losing fight with an increasingly
         | hostile OS. Playing whack-a-mole dismissing ads, dismissing
         | Edge and reopening links in your preferred browser, waiting for
         | React to render in the start menu, coping with the ever
         | increasing theft of personal data, and on and on and on the
         | list goes. The rest of the time is spent on working around
         | Windows oddities that other developers using sensible OSes
         | simply don't need to deal with. No wonder there's no time to
         | think about anything else.
        
           | forrestthewoods wrote:
           | I also use Linux and Mac. And sometimes a little bit of
           | Android.
           | 
           | Win11 Pro is also fine. I spend radically less time fighting
           | Windows than I spend fighting Linux userspace disfunction.
        
       | RMPR wrote:
       | > For Vim users, I also suggest enabling Vim mode in Zsh. It
       | makes editing commands much faster.
       | 
       | I am also an avid Vim user but I disagree. The default readline
       | is perfectly fine for single line commands (you do have to know
       | your way around some basic commands though C-a/u/k/l/w...). To
       | edit long commands in $EDITOR you can always do C-x C-e in
       | bash/zsh (M-v in Fish). As a matter of fact everytime I pair
       | program with my colleague I always think he is editing those
       | short commands slower than I would have because he has to change
       | modes all the time.
        
         | opan wrote:
         | I like to re-add the readline binds after enabling vim mode,
         | and then I only leave insert mode occasionally. C-x C-e really
         | is great, though, I think I do tend to reach for that if I need
         | to do a big edit of a one-liner.
        
         | Loeffelmann wrote:
         | > you can always do C-x C-e in bash/zsh (M-v in Fish).
         | 
         | Thanks I didn't know!
        
         | imiric wrote:
         | Changing modes is a single key stroke away. That's hardly a
         | reason to be slow.
         | 
         | Readline settings depend on what you're already used to. If
         | you're comfortable with vi key bindings, then being in normal
         | mode, navigating with `w`/`b`, deleting a word with `dw`,
         | deleting up to a quote with `dt"`, etc., are all done with
         | muscle memory, and should be much faster than learning the
         | equivalent Emacs bindings, pressing unintuitive key chords, or
         | opening the command in an editor. I don't like opening an
         | editor since it's an interruption, and it hides the output of
         | the previous command.
         | 
         | I wish I could have the full power of Vim in my shells. For
         | example, I miss the delete between characters binding. `di"` or
         | `di'` are great for modifying argument values.
        
       | Ciantic wrote:
       | I have these plugins: git, zsh-autosuggestions
       | /usr/bin/time -f "%e seconds" zsh -i -c exit         0.06 seconds
       | 
       | This is acceptable, maybe the zsh-autocomplete is the problem for
       | author or something else?
       | 
       | I originally switched to ZSH + Oh My Shell because it opens so
       | fast. Ideally plugins would initialize asynchronously but it's
       | not very easy with shell scripts I think.
        
         | eddyg wrote:
         | FWIW, that's not a great way to benchmark zsh.
         | 
         | Check out zsh-bench(1) for a more authoritative approach,
         | including first prompt lag, first command lag, input lag and
         | exit lag.
         | 
         | (1) https://github.com/romkatv/zsh-bench
        
       | kzrdude wrote:
       | I don't use it because I'm tired of having one package manager
       | per tool you want to use. I can handle a simpler shell
       | configuration.
        
       | noir_lord wrote:
       | I have a fast machine, never noticed a difference in shell start
       | up time between with and without and given how much more pleasant
       | it is with I'll take the hit.
        
       | exfalso wrote:
       | Highly recommend https://grml.org/zsh/
       | 
       | For nixos users: https://discourse.nixos.org/t/using-zsh-with-
       | grml-config-and...
       | 
       | Super easy to setup, and works very well
        
       | nubinetwork wrote:
       | > OMZ adds bloat
       | 
       | They all do... if you want the niceties of not having to write
       | your own shell config, what would you expect?
       | 
       | It's funny how many people pick up OMZ or doom emacs because some
       | YouTuber told them to do it, then drop them in 6 months because
       | they're all bloaty.
        
       | AugustoCAS wrote:
       | This is not an issue for me due to my workflow.
       | 
       | I have a script for each of my projects that I run when I open a
       | new terminal window (Alacritty). The scripts set up tmux with 3-8
       | terminals, each terminal launches a components, utility or just
       | sits in a folder from which I later run commands.
       | 
       | Having said that, I use only a few zsh plugins, and have a theme
       | configured to not run commands that add extra latency.
        
       | cheema33 wrote:
       | I concur. I tried oh my zsh and for a while I thought I was doing
       | something wrong. My experience was terrible. But it turns out
       | that many people did not mind the bloat and the prompt lag. It
       | was not for me. I uninstalled it and I have such a bad taste in
       | my mouth that I am very reluctant to try any of the alternatives.
        
       | geoffbp wrote:
       | For me the bloat is acceptable since it saves so much time and
       | JustWorks (Tm)
        
       | nickjj wrote:
       | When I switched to zsh 5 years ago, I went with a stock set up
       | too.
       | 
       | There's quite a few things the OP's post didn't mention about
       | shell history that I think are really important:
       | setopt HIST_IGNORE_ALL_DUPS # Never add duplicate entries.
       | setopt HIST_IGNORE_SPACE    # Ignore commands that start with a
       | space.         setopt HIST_REDUCE_BLANKS   # Remove unnecessary
       | blank lines.
       | 
       | It's possible to roll your own prompt that does helpful things
       | without using starship.
       | 
       | Also you can roll your own zsh plugin manager in a few lines of
       | shell scripts, `fast-syntax-highlighting` is a really useful
       | plugin to get real-time feedback when typing commands.
       | 
       | Most of those things are mentioned here
       | https://nickjanetakis.com/blog/i-recently-switched-to-zsh-an...,
       | the post is 5 years old but just about all of that is what I do
       | today still. Since then it has evolved to become better IMO,
       | including using a dedicated Vim zsh plugin which is much improved
       | over the default zsh key binds. Also another plugin to show zsh's
       | tab complete in fzf instead of zsh's window. The tab complete
       | demo video is here https://nickjanetakis.com/blog/hooking-up-fzf-
       | with-zsh-tab-c....
        
       | lifetimerubyist wrote:
       | I switched to Prezto because of how slow OMZ is, been really
       | happy with it. At one point it started causing issues with the
       | IntelliJ environment reader but it's been perfect once I sorted
       | that out.
        
       | mikkupikku wrote:
       | Exactly why I switched to fish. Fish doesn't come preconfigured
       | exactly how I would like, but it's close enough that I just grew
       | accustomed to fish defaults and have no trouble with it now, and
       | no longer give any thought to shell configuration.
        
         | nasretdinov wrote:
         | The additional upside of this approach is that you can also
         | quite easily install fish on any host and it won't need any
         | configuration to match what you're already used to
        
         | eddd-ddde wrote:
         | Really curious what is missing from the default configuration
         | in your setup.
         | 
         | If I'm feeling really fancy I may enable vim bindings and add
         | the fuzzy find plugin, but plain fish is so good on its own.
        
         | tfrancisl wrote:
         | Totally agree. Fish out of the box is super performant, lots of
         | tools ship completions for it, and the UX is just great. Only
         | recommendation for people new to fish is to read the keybinds
         | thoroughly. I convinced an eng on my team to switch but he was
         | using it like sh: not using tab complete, shift+arrows for
         | partial complete, etc. Slowed him down a ton.
        
       | bfrog wrote:
       | I use fish now instead, honestly a nicer shell and shell language
       | all around.
        
       | elias1233 wrote:
       | I am just glad that it is sub-second start time, where with
       | powershell, it was upwards of multiple seconds
        
       | anymouse123456 wrote:
       | I'm incredibly impatient with my tools and I've been running omz
       | for many years. I spend my days in tmux/vim and generally run
       | 6-12 shells at a time.
       | 
       | Some quick troubleshooting many years ago narrowed the vast
       | majority of the problem down to the git plugin, especially for
       | large, old repos.
       | 
       | I disabled the git plugin and everything has been fine ever
       | since.
       | 
       | Figured I'd dig deeper and bring back the current branch name
       | without the bloat at some point, but it hasn't bothered me enough
       | to do it.
        
         | joeyh wrote:
         | Current branch without bloat is to cat .git/HEAD, and if that
         | didn't exist, run git symbolic-ref HEAD. The first is faster
         | and works in the common case where you're in the top of a git
         | repo. In either case, run it through ${branch##*/} to strip
         | down to just the current branch.
         | 
         | I have used this for a long time, never understood how people
         | would put all of git in between them and the next prompt.
        
       | joshcsimmons wrote:
       | Shaving milliseconds off of terminal load time seems like a silly
       | thing to optimize for. I notice omz takes a brief moment but it's
       | never bothered me.
        
         | kstrauser wrote:
         | Switching from OMZ shaves a few ms on my very fast desktop
         | machine. It shaves seconds of SSHing into a heavily loaded
         | server.
        
       | agrippanux wrote:
       | The tips in the article on enabling vi mode and fzf keybind are
       | worth the read imho
        
       | starsep wrote:
       | Oh My Zsh adds bloat but sets sensible default settings compared
       | to vanilla zsh. I tried using zsh without OMZ and I realized how
       | many things are in OMZ which I took for granted, especially
       | keybindings.
       | 
       | ~150ms with minimal setup is good enough for me, although I would
       | prefer <50ms.
        
       | dizhn wrote:
       | I tries oh my zsh whil switching to it from fish ("the we don't
       | believe in configuration" shell). I thought it would be great
       | with all the popularity it has but 90 percent of the plug-ins are
       | alias definitions which I certainly won't memorize somebody
       | else's. Just found a few plugins I like for the fish
       | functionality I liked. Spent some time configuring it asking for
       | help on the irc channel for zsh when needed. Great people. Zsh is
       | awesome. No plugin manager for me though. Thanks.
        
       | trio8453 wrote:
       | > affects shell startup time
       | 
       | You'll never get back those milliseconds. Just like I can't get
       | back the time I wasted reading this article.
        
       | kachapopopow wrote:
       | huh, is this a problem people really have? I just have a plugin
       | that lets me type before zsh loads and I don't really have a
       | problem with this, even before that i didn't really notice a
       | problem since my 'default' configuration is .12s.
       | time zsh -i -c exit       zsh -i -c exit  0.12s user 0.09s system
       | 81% cpu 0.276 total       ~
        
       | Touche wrote:
       | I'll go a step further, you probably don't need zsh at all. Once
       | you install Starship there's not much difference if you just use
       | bash.
        
       | ricardolopes wrote:
       | I use OMZ because it lets me rely on popular defaults instead of
       | bike shedding and rolling my own. Its main advantage is
       | convention over configuration. For instance, I just have to learn
       | the git plugin aliases once, and then I can use them anywhere
       | with OMZ + git plugin. Is there any lighter alternative that is
       | compatible with OMZ plugins?
        
       | agrounds wrote:
       | I use a subset of omz by cloning it and manually sourcing the
       | plugins I want myself rather than initializing the entire omz
       | system. No themes, no checking for updates, etc. For me, it's the
       | best of both worlds.
       | 
       | I describe my setup and how to use it on a fresh MacBook here:
       | https://github.com/agrounds/dotfiles
        
       | asadjb wrote:
       | I've been an oh-my-zsh user for many years now, being very happy
       | with the very small set of features I use from it. Previously I
       | could never think of trying to figure out how to replicate the
       | features I need without the other features from oh-my-zsh, which
       | does make the shell noticeably slower.
       | 
       | Just now, after reading this article, I used Claude code and have
       | removed the OMZ config within 5 minutes. Here's my prompt - maybe
       | others could find it useful. I ran this from `~/.oh-my-zsh`.
       | 
       | ``` Here's my zsh config - I'd like to remove oh-my-zsh and
       | replace the provided functionality with just raw zsh. i use
       | starship for my prompt so i don't need any help there.
       | can you explore the oh-my-zsh codebae and see what it would take
       | to replicate the features it currently provides me in the shell?
       | my zsh config below:            export ZSH="$HOME/.oh-my-zsh"
       | ZSH_THEME=""       DISABLE_AUTO_TITLE="true"
       | plugins=(direnv fzf)       source $ZSH/oh-my-zsh.sh
       | 
       | --- CLAUDE RESPONSE --- Minimal Raw Zsh Replacement
       | Since you use starship and have DISABLE_AUTO_TITLE=true, you can
       | skip prompt and title-related code. Here's what you'd need:
       | # Completions       autoload -Uz compinit       compinit
       | zstyle ':completion:*' menu select       zstyle ':completion:*'
       | matcher-list 'm:{a-zA-Z}={A-Za-z}'  # case insensitive
       | # History       HISTFILE=~/.zsh_history       HISTSIZE=50000
       | SAVEHIST=10000       setopt extended_history
       | hist_expire_dups_first hist_ignore_dups       setopt
       | hist_ignore_space hist_verify share_history            #
       | Directory navigation       setopt auto_cd auto_pushd
       | pushd_ignore_dups pushdminus            # Key bindings (emacs
       | mode)       bindkey -e       bindkey '^[[H' beginning-of-line
       | # Home       bindkey '^[[F' end-of-line            # End
       | bindkey '^[[1;5C' forward-word        # Ctrl-Right       bindkey
       | '^[[1;5D' backward-word       # Ctrl-Left       bindkey '^[[3~'
       | delete-char           # Delete            # Colors       autoload
       | -Uz colors && colors       export CLICOLOR=1  # macOS ls colors
       | # Plugins replacement       eval "$(direnv hook zsh)"       eval
       | "$(fzf --zsh)"
       | 
       | ```
       | 
       | Granted I've only done this like 5 minutes ago and might be
       | missing functionality I'll realise later, but a quick few checks
       | give me hope I have all the functionality I want.
        
       ___________________________________________________________________
       (page generated 2026-01-10 23:01 UTC)