Moving to the Fish Shell: a Few Months Later
· 3 min read
I previously shared my experience in moving to the Fish shell during the last quarter of 2025.
I thought I would share a quick update after a few months going all-in on Fish, and expose the small adjustments that were made.
Overall experience #
Fish is a truly productive shell. Everything feels smooth and fast.
The completions are always spot-on.
A good example is when I need to make a git push but I never remember if origin is the upstream or my fork.
I just start typing git push <TAB> and I instantly get a very clear hint on what are the Git origins, and what repository they point to.
Neat!
Tide prompt #
Tide is still my prompt tool.
It is quite easy to configure to get a productive yet not overwhelming appearance.
It also supports Fish asynchronous operations, so a slow git information query will not prevent you from typing in the shell.
The information is updated when it gets available.
Dropping SDKMAN and switching to Mise #
I initially stayed on SDKMAN to configure my Java runtimes and tools (Maven, Gradle, JBang, and some others).
Now SDKMAN doesn’t work with Fish as it is essentially a set of Bash-compatible scripts, so I had to use a plugin that bridged SDKMAN using side effects. It somehow did the job but I encountered too many bugs and ergonomic issues.
I went with the increasingly popular Mise tool. It works like a charm, it is well maintained, and it works across other ecosystems (Go, Python, JavaScript, etc).
Bonus point: when you install mise from brew, there is no special configuration to do.
Fish picks it up automatically.
Fish as a system-wide default shell? #
I had advised to set Fish as the default shell.
Some people complain that this is a bad idea since Fish is not a “Posix” shell.
I never ran into any issue by doing so, especially as any sane Unix script always has a shebang to specify what interpreter to use (sh, bash, zsh, fish or even python / ruby, etc).
Now I have a work laptop where some system-wide environment variables are set by non-Fish shells, so I thought I’d switch back to the default zsh login shell on macOS, and set fish as the default shell in my daily terminals (Ghostty, VSCode and IntelliJ).
This brings a little more safety, but again if you fully control your operating system then I don’t think you will ever get any problem by using Fish as a default, system-wide shell.
Misc #
I found the z plugin to be very useful to quickly jump between directories.
This is however clearly a “nice to have” plugin.