[rant] Axe-grinding with `fish`

I really really begin to dislike the fish shell, one step at a time

  • incompatible to sh and bash and other standard shells. I have to learn two shell languages for no perceived gain
  • tab-completion is terrible: it’s slow, recommends stuff which is totally unacceptable, e.g. instead of commands for systemd it recommends whatever it thinks
  • globbing does not work as expected:
    $ touch a b c d
    
    $ sh -c "ls [ac]"
    a  c
    
    $ bash -c "ls [ac]"
    a  c
    
    $ fish -c "ls [ac]"
    "[ac]": No such file or directory (os error 2)
    
  • # prompt for user shells, where it is established $ indicates a user shell, # a root shell
  • documentation is usually for sh/bash
  • people new to shells learn the fish shell paradigm, not the standard, which will just hurt them in the future.

I have the feeling the more I use it, the more it just gets in my way.

So, as I begin to avoid it more and more and use it as a (ba)sh-launcher when forced to use it, I wonder what are the reasons of all you fish-users to use it in everyday life?

fish is annoying :wink:
but the solution for fish isn’t a big deal :slight_smile:

Yep @brikler , I mostly always change it to ZSH (prefered to me) on my installs.

One of the very first steps in my “Customize CachyOS to my liking” script (it’s now replaced by a setup framework but that step is still in if called after installation) is:

_logTask "Changing default shell"

# See: https://unix.stackexchange.com/questions/352316/finding-out-the-default-shell-of-a-user-within-a-shell-script/352320#352320
defaultShell="$(awk -F: -v user="${USER}" '$1 == user {print $NF}' "/etc/passwd")"
desiredShell="$(command -v "bash")"

if [ "${defaultShell}" != "${desiredShell}" ]; then
  _logSubtask "Changing default shell from '${defaultShell}' to '${desiredShell}'"
  chsh --shell "${desiredShell}" "${USER}"
  _logSuccess "Done"
else
  _logSuccess "Default shell is already desired shell '${desiredShell}'"
fi

currentShell="${SHELL}"

if [ "${currentShell}" != "${desiredShell}" ]; then
  _logWarning "The current shell '${currentShell}' is not the desired shell '${desiredShell}', please log out and log in again"
  _waitToContinueOrCancel
fi

followed by:

sudo pacman -R --noconfirm \
  cachyos-fish-config \
  fish \
  fish-autopair \
  fish-pure-prompt \
  fisher

dayum.

Guess that we all have our favs, nice tips/tricks @deex

Indeed and it’s totally fair - that’s why I want to understand the upsides :+1:

Sounds good to me @deex