Fish: A Friendly Shell with Built-in Beautification


While Bash and Zsh dominate the Linux shell landscape, Fish (Friendly Interactive Shell) offers a refreshing alternative with its focus on user-friendliness and out-of-the-box features. This article will guide you through installing Fish, configuring it, and enhancing its functionality with plugins to create a visually appealing and efficient terminal experience.

1. Installing Fish:

Fish is readily available in most distribution repositories. Install it using your package manager:

  • Debian/Ubuntu: sudo apt-get update && sudo apt-get install fish
  • Fedora/CentOS: sudo dnf install fish
  • Arch Linux: sudo pacman -S fish

Once installed, make Fish your default shell:

Bash

chsh -s /usr/bin/fish

Log out and back in, or restart your terminal.

2. Fish’s Built-in Beautification:

Fish comes with many features that enhance the shell’s look and feel without needing external plugins. These include:

  • Syntax Highlighting: Fish highlights commands as you type, indicating valid and invalid syntax.  
  • Autosuggestions: Fish suggests commands based on your history, similar to zsh-autosuggestions.
  • Tab Completions: Fish offers intelligent tab completions that are context-aware.
  • Web-Based Configuration: Fish provides a web interface for configuring settings and themes. Access it by typing fish_config in your terminal.

3. Configuring Fish:

  • Themes:
    • Use fish_config to browse and select themes.
    • The web interface allows you to preview themes and customize colors.  
  • Configuration Files:
    • Fish configuration is stored in ~/.config/fish/.
    • ~/.config/fish/config.fish is the primary configuration file, where you can add functions, aliases, and environment variables.
    • ~/.config/fish/functions/ is where you can store custom functions.

4. Installing Plugins with Fisher:

While Fish has many built-in features, plugins can extend its functionality. Fisher is a popular plugin manager for Fish.  

  • Installing Fisher:

Bash

curl -sL https://git.io/fisher | source && fisher install jorgebucaran/fisher
  • Installing Plugins:

Use fisher install <plugin_name> to install plugins. Here are a few recommended plugins:

  • fzf:
    • A general-purpose fuzzy finder that can be integrated with Fish for enhanced file and command search.  
    • fisher install jethrokuan/fzf
  • z:
    • Jumps to frequently used directories.
    • fisher install jethrokuan/z
  • Done:
    • Displays a notification when long-running commands complete.  
    • fisher install edc/done

5. Customizing the Prompt:

Fish’s prompt can be customized by creating or modifying functions in ~/.config/fish/functions/.

  • Example Custom Prompt:

Create a file named fish_prompt.fish in ~/.config/fish/functions/ with the following content:

Code snippet:

function fish_prompt
    set -l cwd (pwd | sed "s|^$HOME|~|")
    set -l git_branch (git branch --show-current 2>/dev/null)

    set_color brblue
    echo -n "$cwd"

    if test -n "$git_branch"
        set_color bryellow
        echo -n " ($git_branch)"
    end

    set_color normal
    echo -n "\n❯ "
end

This example displays the current working directory, the Git branch (if in a Git repository), and a prompt symbol.

6. Nerd Fonts:

Like Zsh, Fish can benefit from Nerd Fonts to display icons and symbols correctly. Download and install a Nerd Font from a source like Nerd Fonts’ GitHub repository.

7. Advantages of Fish:

  • User-Friendly Syntax: Fish’s syntax is more intuitive than Bash’s.
  • Out-of-the-Box Features: Fish provides many essential features without requiring plugins.
  • Web-Based Configuration: fish_config makes configuration easy.
  • Intelligent Autosuggestions and Completions: Fish’s suggestions and completions are highly accurate and helpful.

Fish offers a modern and enjoyable terminal experience with its built-in features and easy plugin management. By following these steps, you can create a visually appealing and highly functional Fish shell that enhances your productivity.

Author

  • Dr. Anil Warbhe is a freelance technical consultant and a passionate advocate for simplifying complex technologies. His expertise lies in developing custom mobile applications, websites, and web applications, providing technical consultancy on server administration, and offering insightful perspectives on current tech trends through his writing.

    View all posts

Leave a Reply

Your email address will not be published. Required fields are marked *