2 minutes
Written: 2025-11-12 19:28 +0000
Back to bash
This post is part of the $HOME... series.
Falling backwards into POSIX.
Background
I have been using zsh for over a decade now. For the most part, this has been
across machines I largely have administrative control over. HPC systems are
always a notable exception. Over the past half year, I’ve found myself working
on dozens of machines where even chezmoi and pixi~/~micromamba workflows
cannot comfortably bring $HOME ergonomics 1.
The road to bash is paved with $SHELL s
There are far too many today to bother enumerating, but in short order 2:
nushell- Pleasant for many use-cases, the process of converting my
dotfiles was fairly repetitive, and its incompatibility with
spackmade it a non-starter 3. fish- Adopted to resolve the
spackissue. However, I found I was the wrong audience for it; features like global, browser-based customization are not useful for my terminal-centric,chezmoifocused workflow 4. xonsh- Ergonomic, and better than
subprocessfor scripts, but a non-starter in terms of being a good$SHELL5
For the most part I had resigned myself to fish. It was fast, needed very few
plugins 6.
Eventually I came across this post by Cody Hiar on ble.sh, and decided to take
the plunge and shift back. A driving force for this is also that most of my
dotfiles focus on using rust equivalents of what used to purely SHELL
specific themes / tools; e.g. starship over powerline10k.
Caveats
ble.sh is great but it isn’t a catch-all solution. In particular, there are
still inherent issues with using bash as a customized shell, due to concerns
about clobbering settings from existing machines, e.g. lua module
settings.
Conclusions
POSIX compatibility is here to stay on most machines. It is unlikely that this
will change in the near future. To that end, it makes more sense to adaptively
stick to bash and save my “strangeness budget" 7 for new-fangled programming
languages instead of shells8.
Also my
zshstartup times hovered an intolerable 50ms, which I later found out was mostly due tospack↩︎Discounting many more ephermeral tests ↩︎
Fun for data pipelines and nicer multi-line commands ↩︎
Plus breaking POSIX for the features offered seemed like a bad trade-off ↩︎
i.e. barely any community support ↩︎
So fewer failure modes than my favorite
zsh↩︎At any rate, I do relish not having to transform one-liners from
nushelland friends back tobashto pass to co-workers. ↩︎
