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:

Install and Configure Fish shell on Linux

Fish Shell Usage

To begin using fish, just type the command fish and your terminal will switch to fish shell.

$ fish

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.

Requirements

  • 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/

Using 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

Dotfiles

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

Init.fish

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:

LEAVE A REPLY

Please enter your comment!
Please enter your name here