All plugins are installed/updated using git, so the only requirement is to have git installed and on the path (and well, fish, obviously).
You can use the installer:
curl -sfL https://git.io/fundle-install | fish
Or if you don't like to pipe to a shell, just drop fundle.fish
~/.config/fish/functions directory and you are done.
mkdir -p ~/.config/fish/functions wget https://git.io/fundle -O ~/.config/fish/functions/fundle.fish
If you want to automatically install fundle when it is not present, you can add
the following at the top of your
if not functions -q fundle; eval (curl -sfL https://git.io/fundle-install); end
fundle is available on the AUR, so you can install it system wide with
yaourt -S fundle-git
From fundle 0.2.0 and onwards, you can use
fundle self-update to update fundle.
Add this to your
fundle plugin 'edc/bass' fundle plugin 'oh-my-fish/plugin-php' fundle plugin 'danhper/fish-fastdir' fundle plugin 'danhper/fish-theme-afowler' fundle init
This will source the four plugins listed and load all the functions and completions found.
- Reload your shell (you can run
exec fishfor example)
- That's it! The plugins have been installed in
To add a plugin, you simply need to open
~/.config/fish/config.fish and add:
fundle plugin 'repo_owner/repo_name'
fundle plugin 'danhper/fish-fastdir'
will install the repository at https://github.com/danhper/fish-fastdir.
If you need to change the repository, you can pass it with
it will be passed directly to
fundle plugin 'danhper/fish-fastdir' --url 'email@example.com:danhper/fish-fastdir.git'
It also works with other repository hosts:
fundle plugin 'username/reponame' --url 'firstname.lastname@example.org:username/reponame.git'
And it works with https remote as well (in case you have "the authenticity of host github can't be established"):
fundle plugin 'username/reponame' --url 'https://gitlab.com/username/reponame.git'
You can also use a branch, tag or any commit-ish by appending
#commit-ish to the URL. For example:
fundle plugin 'danhper/fish-fastdir' --url 'email@example.com:danhper/fish-fastdir.git#my-branch'
my-branch. If no commit-ish is passed, it will default to
If the fish functions or completions are in a subdirectory of the repository, you can use
--path to choose the path to load.
fundle plugin 'tmuxnator/tmuxinator' --path 'completion'
After having made all the calls to
fundle plugin, you need to add
in your configuration file for the plugins to be loaded.
IMPORTANT: When you add new plugins, you must restart your shell before running
The simplest way to do this is probably to run
exec fish in the running shell.
You can then run
for fundle to download them.
You can also use
to update the plugins.
fundle init: Initialize fundle, loading all the available plugins
fundle install: Install all plugins
fundle update: Update all plugins (deprecates:
fundle install -u)
fundle plugin PLUGIN [--url PLUGIN_URL] [--path PATH]: Add a plugin to fundle.
--urlset the URL to clone the plugin.
--pathset the plugin path (relative to the repository root)
fundle list [-s]: List the currently installed plugins, including dependencies (-s gives a shorter version)
fundle clean: Cleans unused plugins
fundle self-update: Updates fundle to the latest version
fundle version: Displays the current version of fundle
fundle help: Displays available commands
A plugin basically has the following structure.
. ├── completions │ └── my_command.fish ├── functions │ ├── __plugin_namespace_my_function.fish │ └── my_public_function.fish ├── init.fish └── README.md
init.fishwill be sourced directly, so it should not do anything that takes too long to avoid slowing down the shell startup. It is a good place to put aliases, for example.
functionsis the directory containing the plugin functions. This directory will be added to
fish_function_path, and will therefore be auto loaded. I suggest you prefix your functions with
__plugin_nameif the user will not be using them explicitly.
completionsis the directory containing the plugin completions. This directory will be added to
NOTE: if no
init.fish file is found, all the files with a
.fish extensions in the
top directory of the plugin will be loaded. This is to make the plugins compatible with
fundle can manage dependencies for you very easily. You just have to add
fundle plugin 'my/dependency'
in your plugin
init.fish and fundle will automatically fetch and install the
missing dependencies when installing the plugin.
Obviously, adding plugins makes the shell startup slower. It should usually be short enough, but if you feel your shell is becoming to slow, fundle has a very basic profiling mode to help you.
All you need to do is to change
fundle init --profile
config.fish and fundle will print the time it took to load each plugin.
- You will need the
gdatecommand on OSX. You can install it with
brew install coreutils.
- This functionality simply uses the
datecommand, so it prints the real time, not the CPU time, but it should usually be enough to detect if something is wrong.
- When a plugin include dependencies, the load time for each dependency is added to the parent plugin load time.
Please feel free to edit the wiki and add your plugins, or plugins you know work with fundle.
Contributions are very appreciated. Please open an issue or create a PR if you want to contribute.
If you created a package compatible with fundle, feel free to add it to the Wiki.
I know that oh-my-fish has a utility to install packages, but I wanted the simplest tool possible, not a whole framework.
- 2016-04-06 (v0.5.1): Fix
fundle helpto show
- 2016-04-06 (v0.5.0): Add
fundle clean. Deprecate
fundle install -uand add
fundle updatethanks to @enricobacis.
- 2015-12-22 (v0.4.0): Add
--pathoption, thanks to @Perlence.
- 2015-12-16 (v0.3.2): Fix profiling in OSX.
- 2015-12-14 (v0.3.1): Fix incompatibility with oh-my-fish. Rename
- 2015-12-14 (v0.3.0): Fix dependency load order. Add profiling mode.
- 2015-12-14 (v0.2.2): Emit plugin initialization event
- 2015-12-07 (v0.2.1): Use
- 2015-12-07 (v0.2.0): Add
- 2015-12-07 (v0.1.0): Fix bug with dependency loading in
- 2015-11-24: Allow the use of
#commit-ishwhen using plugin repo. Checkout repository
commit-ishinstead of using master branch.