Introduction

Installation instructions

To install the package for fish using pacman (the package is in the community repo)
run:

# pacman -S fish

To verify that it has been installed you can run:

$ less /etc/shells

If you wanted to make fish your default shell run:

$ chsh -s /usr/bin/fish

Pacman and fish

Context-aware completions for pacman and makepkg are built into fish, since the policy of the fish development is to include all the existent
completions in the upstream tarball. The memory management is clever enough to avoid any negative impact on resources.

Troubleshooting

In arch, there are a lot of shell scripts written for bash, and these have not been translated to fish. It is advisable not to set fish as your default shell because of this. The best option is to open your terminal emulator (gnome-terminal, konsole, sakura, etc...) with a command line option that executes fish. For most terminals this is the -e switch, so for example, to open gnome-terminal using fish, change your shortcut to use:

gnome-terminal -e fish

Another option is to set fish as the default shell for the terminal in the terminal's configuration or for a terminal profile if your terminal emulator has a profiles feature. This is contrast to changing the default shell for the user which would cause the above mentioned problem.

To set fish as the shell started in tmux, put this into your .tmux.conf:

set-option -g default-shell "/usr/bin/fish"

Not setting fish as system wide default allows the arch scripts to run on startup, ensure the environment variables are set correctly, and generally reduces the issues associated with using a non-bash compatible terminal like fish.

If you decide to set fish as your default shell, you may find that you no longer have very much in your path.
You can add a section to your ~/.config/fish/config.fish file that will set your path correctly on login. This is much like .profile or .bash_profile as it is only executed for login shells.

if status --is-login
set PATH $PATH /usr/bin /sbin
end

Note that you will need to manually add various other environment variables, such as $MOZ_PLUGIN_PATH. It is a huge amount of work to get a seamless experience with fish as your default shell.

Configuration Suggestions

If you would like fish to display the branch and dirty status when you are in a git directory, you can add the following to your ~/.config/fish/config.fish: