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.