Speeding up my ZSH shell
Oh-My-Zsh (OMZ) Bloat & Impact on Zsh
- Many commenters say “zsh is fine; OMZ is the problem.” OMZ is seen as huge, slow, alias-heavy, and cluttering the namespace for little gain.
- Several note that new zsh users are funneled into OMZ by online guides, then blame zsh for OMZ’s slowness.
- Some consider OMZ borderline unsafe or “supply-chain risk” due to its size, auto-update behavior, and dependence outside the system package manager.
- Others say OMZ works fine for them and prefer its convenience over hand-tuning zsh.
Lean Configs & Alternative Zsh Frameworks
- Multiple people report large speedups by:
- Removing OMZ entirely and re-implementing just the 3–4 features they actually use.
- Using minimal plugin managers (Antidote, Antigen, ZimFW, Prezto, zgen, zimfw, zsh4humans) instead of OMZ.
- Building small “lean” OMZ forks, or manually copying only needed OMZ plugins.
- Advice: start with no plugins and add only what’s necessary; profile first to find real bottlenecks.
Prompts, Plugins, and Performance
- Powerlevel10k is widely praised (instant prompt, transient prompt); concern that it’s “discontinued,” but others say it’s feature-complete and mostly in maintenance mode.
- Starship is frequently recommended: fast, cross-shell, compiled; some warn it can be slow if language integrations call heavy tools (git, pyenv, etc.), so they disable many modules.
- Spaceship users are encouraged to switch to Starship; fish users are pointed toward Tide or async prompt plugins.
- Tools like fzf, Atuin, zoxide, and syntax-highlighting/autosuggestion plugins are cited as powerful but can add latency if overused or poorly configured.
Version Managers as Major Culprits
- nvm is repeatedly identified as a top source of zsh startup lag.
- Remedies:
- Lazy-loading nvm via OMZ options or zsh-nvm.
- Switching to faster alternatives: fnm, mise, or custom znvm; mise praised for supporting many languages.
- For Python in Starship, replacing pyenv with uv is suggested for speed.
Zsh vs Fish vs Bash (and Others)
- Several switched to fish (often with Starship) and report great UX and speed out of the box.
- Strong pushback from users who need POSIX/bash syntax compatibility, copy-pasting from bash-based playbooks, or frequent SSH into bash-only servers; they find fish’s different syntax (variables, heredocs) too annoying.
- A few revert to bash (or mksh/ksh) for minimal latency and maximal predictability, delegating “fancy” behavior to external tools.
Completion & compinit Handling
- Some skepticism about only regenerating the completion cache once per day; key point is to run
compinitexactly once after allfpathchanges. - Others note quirks like
zcompdumpmtime not updating unless you explicitlytouchit. - Several argue that if zsh shipped with its advanced completion fully enabled by default, frameworks like OMZ would be largely unnecessary.