Coder Social home page Coder Social logo

fisher's Introduction

Fisher

A plugin manager for Fish—the friendly interactive shell. Looking for plugins?

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.

  • 100% pure-Fish—easy to contribute to or modify.
  • Blazing fast concurrent plugin downloads.
  • Zero configuration out of the box.
  • Oh My Fish! plugin support.

Installation

curl -sL https://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 jorgebucaran/nvm.fish

To install from GitLab prepend gitlab.com/ to the plugin path.

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

fisher install IlanCosman/tide@v5

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 (#640).

Listing plugins

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

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

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 jorgebucaran/fisher

Use just fisher update to update everything.

Removing plugins

Remove installed plugins using the remove command.

fisher remove jorgebucaran/nvm.fish

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 the installed 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:

nano $__fish_config_dir/fish_plugins
jorgebucaran/fisher
ilancosman/tide@v5
jorgebucaran/nvm.fish
+ PatrickF1/fzf.fish
- /home/jb/path/to/plugin
fisher update

That will install PatrickF1/fzf.fish, remove /home/jb/path/to/plugin, and update everything else.

Creating a plugin

A plugin can be any number of files in a functions, conf.d, and completions directory. Most plugins consist of a single function, or configuration snippet. This is what a typical plugin looks like.

ponyo
├── completions
│   └── ponyo.fish
├── conf.d
│   └── ponyo.fish
└── functions
    └── ponyo.fish

Non .fish files as well as directories inside those locations will be copied to $fisher_path under functions, conf.d, or completions respectively.

Event system

Plugins are notified as they are being installed, updated, or removed via Fish events.

--on-event functions must already be loaded when their event is emitted. Thus, you should put your event handlers in the conf.d directory.

# Defined in ponyo/conf.d/ponyo.fish

function _ponyo_install --on-event ponyo_install
    # Set universal variables, create bindings, and other initialization logic.
end

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

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

Creating a theme

A theme is just like a regular Fish plugin, except it has a .theme file in the themes directory. Themes were introduced in Fish 3.4 and work with the fish_config builtin. A theme can also have files in functions, conf.d, or completions if necessary. This is what a typical theme plugin might look like.

sosuke
├── conf.d
│   └── sosuke.fish
└── themes
    └── sosuke.theme

Using $fisher_path with themes

If you customize $fisher_path to use a directory other than $__fish_config_dir, your themes won't be available via fish_config. That's because Fish expects your themes to be in $__fish_config_dir/themes, not $fisher_path/themes. This is not yet configurable in Fish, but there is a request to add that feature.

This problem can easily be solved by symlinking Fisher's themes directory into your Fish config. First, backup any existing themes directory.

mv $__fish_config_dir/themes $__fish_config_dir/themes.bak

Then, symlink Fisher's themes directory.

ln -s $fisher_path/themes $__fish_config_dir/themes

If you want to use theme plugins and also maintain your own local themes, you can read more about how to do that here: #708.

Discoverability

Fisher doesn't make use of a central repository of plugins. However, that doesn't mean discovering new plugins should be hard. A great way to help people quickly find your project on GitHub is by adding a topic to your repository. We recommend using fish-plugin for this purpose.

Acknowledgments

Fisher started out in 2016 by @jorgebucaran as a shell configuration manager for Fish. We had a lot of help along the way. Oh My Fish laid the groundwork as the first popular Fish framework. @jethrokuan was particularly helpful during the first years. @PatrickF1's candid feedback has been invaluable time and again. Bootstrapping Fisher was originally @IlanCosman's idea. Thank you to all our contributors! <3

License

MIT

fisher's People

Contributors

ainmosni avatar aquatix avatar bonds avatar carlfriedrich avatar detailyang avatar externl avatar franciscolourenco avatar gastove avatar ikngtty avatar jameschensmith avatar jethrokuan avatar jorgebucaran avatar laughedelic avatar markcial avatar mattmc3 avatar mert574 avatar neersighted avatar patrickf1 avatar peey avatar pickfire avatar rholak avatar rodrigobdz avatar sanyer avatar scrumplex avatar sijad avatar sotayamashita avatar stefanmaric avatar sullimander avatar thernstig avatar will-stone avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.