Terminal GuideTerminal Guide

Fisher

Shell Enhancements
macOSLinux
Fish

Plugin manager for the Fish shell.

Official Website

Features

FastMinimalFish NativeConcurrent

Why use Fisher?

Lightweight

Fisher is minimal and fast, with no dependencies. Written in Fish itself for native performance.

Easy Installation

Simple curl-based installation. Download and install plugins from GitHub with one command.

Concurrent Operations

Install, update, and remove plugins concurrently for faster operations.

Event-Driven

Emit and listen to events for advanced plugin customization and lifecycle management.

Installation

Fisher is installed via a simple curl command. Make sure Fish shell is already installed on your system.

Installation command
# Install Fisher
curl -sL https://raw.githubusercontent.com/jorgebucaran/fisher/main/functions/fisher.fish | source && fisher install jorgebucaran/fisher

For Fish shell installation, use:

Install Fish shell
# macOS (Homebrew)
brew install fish

# Ubuntu/Debian
apt install fish

# Fedora/RHEL
dnf install fish

# Arch Linux
pacman -S fish

Basic Usage

After installing Fisher, you can easily install and manage plugins:

Installing Plugins

~/.config/fish/config.fish
# Install a plugin from GitHub
fisher install oh-my-fish/plugin-git

# Install multiple plugins at once
fisher install jethrokuan/z edc/bass omf/plugin-sudoedit

# Install from a URL
fisher install https://github.com/user/plugin

# Install from a local file
fisher install ~/my-plugin

Common Plugins

Popular plugins
# Popular plugins for Fish
fisher install jethrokuan/z             # Jump to recent directories
fisher install pure-fish/pure           # Minimal prompt
fisher install oh-my-fish/plugin-git    # Git shortcuts
fisher install PatrickF1/fzf.fish       # Fuzzy finder integration
fisher install IlanCosman/tide          # Modern prompt
fisher install franciscolourenco/done   # Notifications when commands finish

Configuration

Fisher uses Fish configuration files. Plugins are typically configured in ~/.config/fish/config.fish or ~/.config/fish/conf.d/.

Basic Setup

Fisher commands
# Switch to Fish shell
fish

# List installed plugins
fisher list

# Update a specific plugin
fisher update plugin-name

# Update all plugins
fisher update

# Remove a plugin
fisher remove plugin-name

# Show help
fisher --help

Example Configuration

~/.config/fish/config.fish
# Install plugins
fisher install jethrokuan/z
fisher install IlanCosman/tide
fisher install oh-my-fish/plugin-git
fisher install PatrickF1/fzf.fish
fisher install franciscolourenco/done

# Configure environment
set -x EDITOR vim
set -x LANG en_US.UTF-8

# Set up tide prompt
# tide configure will open an interactive prompt

# Configure fzf.fish
set fzf_preview_dir_cmd exa --all --color=always

# Create aliases
alias ll='ls -lah'
alias gs='git status'
alias ga='git add'
alias gc='git commit'
alias gp='git push'

# Add custom key bindings
bind -e cT  # Remove existing binding
bind cT 'fzf'

Using config.fish vs conf.d

Configuration structure
# ~/.config/fish/config.fish - Main config file
# Use for general settings

# ~/.config/fish/conf.d/ - Config directory
# Break down configuration into separate files for plugins
# Each file in conf.d is sourced automatically

# Example structure:
# ~/.config/fish/conf.d/
# ├── 10-env.fish      # Environment variables
# ├── 20-abbr.fish     # Abbreviations
# ├── 30-aliases.fish  # Aliases
# └── 40-plugins.fish  # Plugin configuration

Tips & Tricks

Web Search for Plugins

Find plugins at Fisherman (defunct) or search GitHub for "fish plugin". Check stars and recent activity.

Finding plugins
# Search for plugins on GitHub
# Look for 'awesome-fish' to find plugin collections
# Popular sources:
# - oh-my-fish/oh-my-fish (plugin repository)
# - awesome-fish-shell
# - Individual repositories on GitHub

Creating Custom Plugins

Creating a simple plugin is easy. Just create Fish functions:

Custom plugin example
# Create a simple plugin
mkdir -p ~/.config/fish/plugins/my-plugin/functions

# Create a function file
cat > ~/.config/fish/plugins/my-plugin/functions/my-command.fish << 'EOF'
function my-command --description "My custom command"
    echo "Hello from my plugin!"
end
EOF

# Install the local plugin
fisher install ~/.config/fish/plugins/my-plugin

Event System

Fisher emits events when installing/removing plugins. Listen to them for custom actions:

Event handling
# Listen to events
function fisher_post_install -a pkg --on-event fisher_postinstall
    echo "Plugin $pkg was installed!"
end

function fisher_post_remove -a pkg --on-event fisher_postremove
    echo "Plugin $pkg was removed!"
end

# Emit custom events
emit my_custom_event "some data"

Performance Tips

Keep your Fish shell startup fast:

Performance tips
# Measure startup time
time fish -c exit

# Lazy-load expensive functions
# Only load when needed

# Use functions instead of aliases for better performance
# functions are evaluated at startup, aliases at runtime

# Break config into multiple files in conf.d/
# This makes organization cleaner

# Avoid running heavy commands in config files
# Defer to lazy-loading or use background commands

Working with Abbreviations

Fish abbreviations are better than aliases for interactive use:

Using abbreviations
# Create abbreviations (better than aliases in Fish)
abbr --erase ll  # Remove if exists
abbr -a ll 'ls -lah'
abbr -a gs 'git status'
abbr -a ga 'git add'
abbr -a gc 'git commit -m'
abbr -a gp 'git push'
abbr -a gd 'git diff'
abbr -a gl 'git log --oneline -n 10'

# Save abbreviations
set -U fish_user_abbreviations  # -U saves permanently
Written by Dai AokiPublished: 2026-01-20

Related Articles

Explore More