Fish, short for Friendly Interactive Shell, is an easy to install and use shell for Unix systems. The shell comes with interesting features such as auto-completion suggestions. It has a lot of themes that you can switch among to make your shell look beautiful, with different colors and highlights. Other features include searchable history, smart search and web-based configurations.
Oh My Fish
OMF is a Fish shell utility that allows one to install themes, change shell look, install, remove, list and update packages. You need to have first installed fish shell on your system in order to configure Oh My Fish.
Install Fish Shell on Linux
Use the guide in the link below to install Fish Shell on Linux:
Fish Shell Usage
To begin using fish, just type the command fish and your terminal will switch to fish shell.
Or if you want to permanently use fish shell, run the below command:
chsh -s /usr/bin/fish
Installing Oh My Fish on Linux
On fish shell, run the below command to install Oh My Fish.
- fish shell, version 2.2 or later
- git, version 1.9.5 or later
The command will download the installer script and begins installation.
curl -L https://get.oh-my.fish | fish
You can also opt to first download the installer script and customize the install.
curl -L https://get.oh-my.fish > install fish install --path=~/.local/share/omf –config=~/.config/omf
Another option is to install Oh My Fish from Git with the following commands:
git clone https://github.com/oh-my-fish/oh-my-fish cd oh-my-fish bin/install --offline
Or get from releases page and install offline
curl -L https://get.oh-my.fish > install fish install –offline=omf.tar.gz
Fish Configuration Files
Once you install Fish shell and Oh My Fish, you should find the configuration files in /.config in home directory
π ls -l /home/lorna/.config/ ~ 0ms total 8 drwx------ 4 lorna adm 4096 Dec 5 10:40 fish/ drwxr-xr-x 2 lorna adm 4096 Dec 5 10:09 omf/
Oh My Fish comes with a utility,
omf, that is used in installing, listing, updating and removing packages and themes. Examples:
# Update all packages and repositories $ omf upate Oh My Fish is up to date. You are now using Oh My Fish version 7. Updating https://github.com/oh-my-fish/packages-main master... Done! default is already up-to-date. $ omf update omf # To update omf only Oh My Fish is up to date. You are now using Oh My Fish version 7. Updating https://github.com/oh-my-fish/packages-main master...Done! # List installed packages $ omf list Plugins fish-spec omf Themes default # List available themes $ omf theme 10:37:34 Installed: default Available: agnoster boxfish dangerous fishbone gnuykeaj krisleech nai plain sashimi spacefish uggedal aight budspencer default fishface godfather l nelsonjchen pure scorphish sushi will ays cbjohnson dmorrell fishy-drupal graystatus lambda neolambda pygmalion separation syl20bnr wolf-theme barracuda chain doughsay fisk harleen lavender numist random shellder taktoa yimmy batman clearance eclm flash idan lolfish ocean randomrussel simple-ass-prompt technopagan zeit beloglazov cmorrell edan fox integral mars one redfish simplevi toaster zephyr bira coffeeandcode eden gentoo jacaetevha mish pastfish red-snapper slacker tomita zish bobthefish cor emoji-powerline gianu johanson mokou perryh rider slavic-cat trout bongnoster cyan es gitstatus kawasaki mtahmed pie robbyrussell solarfish tweetjay # Install theme, e.g ocean $ omf install ocean 10:39:56 Updating https://github.com/oh-my-fish/packages-main master... Done! Installing package ocean ✔ ocean successfully installed. # Apply theme, e.g Ocean $ omf theme ocean # Install Plugins, e.g weather $ omf install weather ~ 10ms Updating https://github.com/oh-my-fish/packages-main master... Done! Installing package weather Installing package config ✔ config successfully installed. Installing package spark Submodule 'spark' (https://github.com/holman/spark) registered for path 'spark' Cloning into '/home/lorna/.local/share/omf/pkg/spark/spark'... Submodule path 'spark': checked out 'ab88ac6f8f33698f39ece2f109b1117ef39a68eb' ✔ spark successfully installed. ✔ weather successfully installed. # plugin-git $ omf install https://github.com/jhillyerd/plugin-git ~ 0ms Updating https://github.com/oh-my-fish/packages-main master... Done! Installing package git ✔ git successfully installed. # fzf (fuzzy finder) plugin. $ omf install https://github.com/jethrokuan/fzf ~ 1.018s Updating https://github.com/oh-my-fish/packages-main master... Done! Installing package fzf ✔ fzf successfully installed. # manage omf repositories; obtained from omf install $ omf repositories list ~ 2.58s https://github.com/oh-my-fish/packages-main master # Remove a package or theme $ omf remove <package|theme name> # Unistall Oh My Fish $ omf destroy
Fish and OMF configuration files contain the current state of Fish shell set up.
π ls -l /home/lorna/.config/ ~ 1ms total 8 drwx------ 4 lorna adm 4096 Dec 5 12:16 fish/ drwxr-xr-x 3 lorna adm 4096 Dec 5 11:42 omf/
For fish, you should get the following files:
π ls -l /home/lorna/.config/fish/ ~ 3ms total 20 drwxr-xr-x 2 lorna adm 4096 Dec 5 12:26 conf.d/ -rw-r--r-- 1 lorna adm 10737 Dec 5 12:16 fish_variables drwxr-xr-x 2 lorna adm 4096 Dec 5 10:54 functions/
- Conf.d – individual configurations
- functions – custom functions
- fish_variables – custom variables
For omf you will find three files; themes, bundle and channel.
π ls -l /home/lorna/.config/omf/ ~ 0ms total 16 -rw-r--r-- 1 lorna adm 171 Dec 5 11:55 bundle -rw-r--r-- 1 lorna adm 7 Dec 5 10:09 channel -rw-r--r-- 1 lorna adm 4 Dec 5 10:54 theme
- Theme – theme currently active
- Bundle – all installed packages and themes
- Channel – where OMF gets updates e.g stable
You can choose to create and customize the files to be used by Fish when it boots up. Fish reads from the configuration files for the currently applied settings.
- init.fish – Custom script sourced after shell start
- before.init.fish – Custom script sourced before shell start
- key_bindings.fish – Custom key bindings where you can use the bind command freely
The file contains startup commands for fish shell and the most used setting is variables. You can globally define your preferred variables as shown in the examples below:
# For Golang developers set -xg GOPATH $HOME/gocode # Python developers set -xg PYTHONDONTWRITEBYTECODE 1
This has been a guide on how to install and configure Fish with Oh My Fish. Fish shell is quite interesting due to the various themes and plugins it supports. It provides you with a beautiful terminal and it is easy to use. It also has a web-based configuration that can enable you to easily customize it. Enjoy!
You might also want to look at: