A plugin manager for Fish
Go to file
Jorge Bucaran cc06470da1 Create functions, conf.d, and completions in $fisher_path
Create fish config directories if they don't exist
before installing plugins. We'd already fixed this,
but f4b32b34 brought back #598, as it modifies how
we copy files into $fisher_path.
2020-11-13 17:05:23 +09:00
.github/workflows Install fish first 2020-11-05 03:29:33 +09:00
completions Load completions at completion rather than load time 2020-11-06 17:19:10 +09:00
fisher.fish Create functions, conf.d, and completions in $fisher_path 2020-11-13 17:05:23 +09:00
LICENSE.md chore: add license back to placate Github checker 2019-01-30 03:34:59 +09:00
README.md Small docs tweaks 2020-11-09 21:56:23 +09:00

Fisher

A plugin manager for fish—the friendly interactive shell.

Manage functions, completions, bindings, and snippets from the command line. Extend your shell capabilities, change the look of your prompt and create repeatable configurations across different systems effortlessly.

  • Oh My Fish plugin support.
  • Blazingly fast concurrent plugin downloads.
  • 100% pure fish—easy to contribute to or modify.
  • Zero configuration out of the box. Need to tweak a thing? You can do that too.

Looking for plugins? Browse git.io/awesome.fish or search on GitHub.

Installation

curl -sL git.io/fisher | source && fisher install jorgebucaran/fisher

Quickstart

You can install, update, and remove plugins interactively with Fisher, taking advantage of fish tab completion and rich syntax highlighting.

Installing plugins

Install plugins using the install command followed by the path to the repository on GitHub.

fisher install ilancosman/tide

To get a specific version of a plugin add an @ symbol after the plugin name followed by a tag, branch, or commit.

fisher install jorgebucaran/nvm.fish@1.1.0

You can install plugins from a local directory too.

fisher install ~/path/to/plugin

Fisher expands plugins into your fish configuration directory by default, overwriting existing files. If you wish to change this behavior, set $fisher_path to your preferred location and put it in your function path.

Listing plugins

List all the plugins that are currently installed using the list command.

$ fisher list
jorgebucaran/fisher
ilancosman/tide
jorgebucaran/nvm.fish@1.1.0
/home/jb/path/to/plugin

jorgebucaran/fisher is listed because we installed it to start with!

The list command also accepts a regular expression to filter the output.

$ fisher list \^/
/home/jb/path/to/plugin

Updating plugins

The update command updates one or more plugins to their latest version.

fisher update ilancosman/tide

fisher update by itself will update everything, including Fisher.

Removing plugins

Remove installed plugins using the remove command.

fisher remove jorgebucaran/nvm.fish@1.1.0

Someday you may want to remove everything, including Fisher.

fisher list | fisher remove

Using your fish_plugins file

Whenever you install or remove a plugin from the command line, Fisher will write down all your installed plugins plugins to $__fish_config_dir/fish_plugins. Adding this file to your dotfiles or version control is the easiest way to share your configuration across different systems.

You can also edit this file and run fisher update to commit changes. Here's an example:

nano $__fish_config_dir/fish_plugins
jorgebucaran/fisher
ilancosman/tide
+ jethrokuan/z
- jorgebucaran/nvm.fish@1.1.0
/home/jb/path/to/plugin
fisher update

That will install jethrokuan/z, remove jorgebucaran/nvm.fish, and update everything else.

Event system

Fisher leverages the fish event system to notify plugins when they are being installed, updated, or removed.

--on-event functions must be already loaded when their event is emitted. So put event handlers in your conf.d directory.

# Defined in conf.d/foobar.fish

function foobar_install --on-event foobar_install
  # Set global variables, create bindings, and other install logic.
end

function foobar_update --on-event foobar_update
  # Migrate resources, print warnings, and other update logic.
end

function foobar_uninstall --on-event foobar_uninstall
    # Erase "private" functions, variables, bindings, and other uninstall logic.
end

License

MIT