I used to customise the hell out of tcsh, zsh... until I started using fish, which just has sane defaults.

What makes me reluctant to use fish is the fact that it's syntax is totally incompatible with bash and zsh.

https://github.com/edc/bass

Lets you use bash utilities from fish. So you can do things like `source` files and have it work.

Also I prefer to use Fish only as an interactive shell, actual scripts can stay bash.