There is a TL;DR at the bottom.
For gnome-shell to be able to start Snaps it needs two things (values in brackets are on my Fedora 29 desktop which has the same problem):
- PATH to include Snap (
/var/lib/snapd/snap/bin)
- XDG_DATA_DIRS to the Snap Desktop files (
/var/lib/snapd/desktop)
These variables are configured in /etc/profile.d/snapd.sh via /etc/profile conventional bash start-up.
When you switch to fish to whole /etc/profile start-up is skipped.
Since most distros assume the usage of bash and install configuration scripts into /etc/profile.d, simply chsh -s /bin/fish will not use them. Snaps not being found by gnome-shell is one such symptom.
The best solution I have so far is to use fish only an interactive shell and leave bash in place to do the other housekeeping.
TL;DR
Leave the user default shell as bash:
chsh -s /bin/bash
Within ~/.bashrc have the following:
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
if [ -z "$BASH_EXECUTION_STRING" ]; then
exec /bin/fish
fi
For the bash --login case (as invoked via X11/Wayland) remove ~/.profile and add .bash_profile (make it bash specific):
# we want to run fish most of the time, but this is invoked by bash --login
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi