I adore fish and can't imagine ever switching back to zsh or bash. First, it's nice and usable out of the box with a huge set of pre-configured completions. Second, it's incredibly easy to customize when I do want to tweak it.
For instance, writing my own prompt was what forever won me over from zsh. Basically, you edit a file named `~/.config/fish/functions/fish_prompt.fish`. That's where autoload functions live. If you type `foo` at the command line and it doesn't already exist, fish will look for a file named `foo.fish` in that directory, load it, and run the `foo` function defined there.
So in your editor, follow that pattern to write a function named `fish_prompt`. Put the commands in there that write your prompt to stdout. Make it as simple or complex as you want.
There. Done. That's all you have to do. Compare these:
Anyway, that was emblematic of my whole experience with fish. It took a lot of un-learning special magic to settle in. It just feels so much more cohesive and consistent than any other shell I've tried. And because of that, I'm way quicker to add little scripts or completions to it that make it even more pleasant for me. I'd say the activation energy for that is far lower than with other shells I've used.
For context, I maintained the FreeBSD "bash-completion" port from 2003 to 2008 or so. It's not that I love fish because I don't know the alternatives. I love it because I do.
For instance, writing my own prompt was what forever won me over from zsh. Basically, you edit a file named `~/.config/fish/functions/fish_prompt.fish`. That's where autoload functions live. If you type `foo` at the command line and it doesn't already exist, fish will look for a file named `foo.fish` in that directory, load it, and run the `foo` function defined there.
So in your editor, follow that pattern to write a function named `fish_prompt`. Put the commands in there that write your prompt to stdout. Make it as simple or complex as you want.
There. Done. That's all you have to do. Compare these:
Official fish docs: https://fishshell.com/docs/current/prompt.html
Official zsh docs: https://zsh.sourceforge.io/Doc/Release/Prompt-Expansion.htm
Anyway, that was emblematic of my whole experience with fish. It took a lot of un-learning special magic to settle in. It just feels so much more cohesive and consistent than any other shell I've tried. And because of that, I'm way quicker to add little scripts or completions to it that make it even more pleasant for me. I'd say the activation energy for that is far lower than with other shells I've used.
For context, I maintained the FreeBSD "bash-completion" port from 2003 to 2008 or so. It's not that I love fish because I don't know the alternatives. I love it because I do.