{"id":13528749,"url":"https://github.com/danhper/fundle","last_synced_at":"2025-04-05T22:09:16.529Z","repository":{"id":2018802,"uuid":"45519340","full_name":"danhper/fundle","owner":"danhper","description":"A minimalist package manager for fish shell","archived":false,"fork":false,"pushed_at":"2023-01-05T16:21:45.000Z","size":133,"stargazers_count":373,"open_issues_count":13,"forks_count":22,"subscribers_count":7,"default_branch":"master","last_synced_at":"2024-05-23T02:38:12.549Z","etag":null,"topics":["fish","fish-plugins"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/danhper.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-11-04T06:18:23.000Z","updated_at":"2024-05-08T00:53:06.000Z","dependencies_parsed_at":"2023-01-13T11:34:56.077Z","dependency_job_id":null,"html_url":"https://github.com/danhper/fundle","commit_stats":null,"previous_names":[],"tags_count":17,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danhper%2Ffundle","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danhper%2Ffundle/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danhper%2Ffundle/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danhper%2Ffundle/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/danhper","download_url":"https://codeload.github.com/danhper/fundle/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247406091,"owners_count":20933803,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["fish","fish-plugins"],"created_at":"2024-08-01T07:00:23.799Z","updated_at":"2025-04-05T22:09:16.495Z","avatar_url":"https://github.com/danhper.png","language":"Shell","funding_links":[],"categories":["Shell","others","Plugins"],"sub_categories":["other plugin"],"readme":"# fundle [![Build Status](https://travis-ci.org/danhper/fundle.svg?branch=master)](https://travis-ci.org/danhper/fundle)\n\nA minimalist package manager for [fish](http://fishshell.com/) inspired by [Vundle](https://github.com/VundleVim/Vundle.vim).\n\n\nAll plugins are installed/updated using git, so the only requirement is to have\ngit installed and on the path (and well, fish, obviously).\n\nThis package manager is compatible with [oh-my-fish plugins](https://github.com/oh-my-fish).\nIf you need the core functions of [oh-my-fish](https://github.com/oh-my-fish),\nyou can use the [danhper/oh-my-fish-core](https://github.com/danhper/oh-my-fish-core) plugin.\n\n## Installation\n\nYou can use the installer:\n\n```sh\ncurl -sfL https://git.io/fundle-install | fish\n```\n\nOr if you don't like to pipe to a shell, just drop [fundle.fish](functions/fundle.fish)\nin your `~/.config/fish/functions` directory and you are done.\n\n```sh\nmkdir -p ~/.config/fish/functions\nwget https://git.io/fundle -O ~/.config/fish/functions/fundle.fish\n```\n\n### Automatic install\n\nIf you want to automatically install fundle when it is not present, you can add\nthe following at the top of your `~/.config/fish/config.fish`.\n\n```fish\nif not functions -q fundle; eval (curl -sfL https://git.io/fundle-install); end\n```\n\n### ArchLinux\n\nfundle is available on the AUR, so you can install it system wide with\n\n```\nyaourt -S fundle-git\n```\n\n### Updating\n\nFrom fundle 0.2.0 and onwards, you can use `fundle self-update` to update fundle.\n\n## Usage\n\n### Sample `config.fish`\n\n\nAdd this to your `~/.config/fish/config.fish` or any file that you use to load fundle's plugins (in `/etc/fish` for example):\n\n```\nfundle plugin 'edc/bass'\nfundle plugin 'oh-my-fish/plugin-php'\nfundle plugin 'danhper/fish-fastdir'\nfundle plugin 'danhper/fish-theme-afowler'\n\nfundle init\n```\n\nThis will source the four plugins listed and load all the functions and completions found.\n\n*Note that the `fundle init` is required on each file loading a plugin, so if you load plugins in multiple .fish files, you have to add `fundle init` to each one of them.*\n\nAfter editing `config.fish`:\n\n1. Reload your shell (you can run `exec fish` for example)\n2. Run `fundle install`\n3. That's it! The plugins have been installed in `~/.config/fish/fundle`\n\n### In depth\n\nTo add a plugin, you simply need to open `~/.config/fish/config.fish` and add:\n\n```\nfundle plugin 'repo_owner/repo_name'\n```\n\nFor example:\n\n```\nfundle plugin 'danhper/fish-fastdir'\n```\n\nwill install the repository at https://github.com/danhper/fish-fastdir.\n\nTo pick a specific version of the plugins, you can append @ followed by a tag from the repo:\n```\nfundle plugin 'joseluisq/gitnow@2.7.0'\n```\nwill install Gitnow release 2.7.0 at https://github.com/joseluisq/gitnow/releases/tag/2.7.0.\n\nIf you need to change the repository, you can pass it with `--url` and\nit will be passed directly to `git clone`:\n\n```\nfundle plugin 'danhper/fish-fastdir' --url 'git@github.com:danhper/fish-fastdir.git'\n```\nKeep in mind that this option overrides any tag set with '@'.\n\nIt also works with other repository hosts:\n\n```\nfundle plugin 'username/reponame' --url 'git@gitlab.com:username/reponame.git'\n```\n\nAnd it works with https remote as well (in case you have \"the authenticity of host github can't be established\"):\n\n```\nfundle plugin 'username/reponame' --url 'https://gitlab.com/username/reponame.git'\n```\n\nYou can also use a branch, tag or any [commit-ish](https://www.kernel.org/pub/software/scm/git/docs/gitrevisions.html#_specifying_revisions) by appending `#commit-ish` to the URL. For example:\n\n```\nfundle plugin 'danhper/fish-fastdir' --url 'git@github.com:danhper/fish-fastdir.git#my-branch'\n```\n\nwill use `my-branch`. If no commit-ish is passed, it will default to `master`.\n\nIf the fish functions or completions are in a subdirectory of the repository, you can use\n`--path` to choose the path to load.\n\n```\nfundle plugin 'tmuxnator/tmuxinator' --path 'completion'\n```\n\nAfter having made all the calls to `fundle plugin`, you need to add\n\n```\nfundle init\n```\n\nin your configuration file for the plugins to be loaded.\n\nIMPORTANT: When you add new plugins, you must restart your shell *before* running `fundle install`.\nThe simplest way to do this is probably to run `exec fish` in the running shell.\n\nYou can then run\n\n```\nfundle install\n```\n\nfor fundle to download them.\n\nYou can also use\n\n```\nfundle update\n```\n\nto update the plugins.\n\n## Commands\n\n* `fundle init`: Initialize fundle, loading all the available plugins\n* `fundle install`: Install all plugins\n* `fundle update`: Update all plugins (deprecates: `fundle install -u`)\n* `fundle plugin PLUGIN [--url PLUGIN_URL] [--path PATH]`: Add a plugin to fundle.\n  * `--url` set the URL to clone the plugin.\n  * `--path` set the plugin path (relative to the repository root)\n* `fundle list [-s]`: List the currently installed plugins, including dependencies (-s gives a shorter version)\n* `fundle clean`: Cleans unused plugins\n* `fundle self-update`: Updates fundle to the latest version\n* `fundle version`: Displays the current version of fundle\n* `fundle help`: Displays available commands\n\nCompletions are available in the [completions/fundle.fish](./completions/fundle.fish).\nNote that you will need to install [fish-completion-helpers](https://github.com/danhper/fish-completion-helpers)\nto use them.\n\n## Plugin structure\n\nA plugin basically has the following structure.\n\n```\n.\n├── completions\n│   └── my_command.fish\n├── functions\n│   ├── __plugin_namespace_my_function.fish\n│   └── my_public_function.fish\n├── init.fish\n└── README.md\n```\n\n* `init.fish` will be sourced directly, so it should not do anything that takes too long\n  to avoid slowing down the shell startup. It is a good place to put aliases, for example.\n* `functions` is the directory containing the plugin functions. This directory will\n  be added to `fish_function_path`, and will therefore be auto loaded. I suggest you\n  prefix your functions with `__plugin_name` if the user will not be using them explicitly.\n* `completions` is the directory containing the plugin completions. This directory will\n  be added to `fish_complete_path`.\n\nNOTE: if no `init.fish` file is found, the root folder of the plugin is treated\nas a functions directory. This is to make the plugins compatible with\n[oh-my-fish plugins](https://github.com/oh-my-fish) themes.\n\n## Managing dependencies\n\nfundle can manage dependencies for you very easily.\nYou just have to add\n\n```\nfundle plugin 'my/dependency'\n```\n\nin your plugin `init.fish` and fundle will automatically fetch and install the\nmissing dependencies when installing the plugin.\n\nI created a minimal example in [fish-nvm](https://github.com/danhper/fish-nvm),\nwhich depends on [edc/bass](https://github.com/edc/bass).\n\n## Profiling\n\nObviously, adding plugins makes the shell startup slower. It should usually be short enough,\nbut if you feel your shell is becoming to slow, fundle has a very basic profiling\nmode to help you.\n\nAll you need to do is to change\n\n```\nfundle init\n```\n\nto\n\n```\nfundle init --profile\n```\n\nin your `config.fish` and fundle will print the time it took to load each plugin.\n\nNOTE:\n* You will need the `gdate` command on OSX. You can install it with `brew install coreutils`.\n* This functionality simply uses the `date` command, so it prints the real time,\nnot the CPU time, but it should usually be enough to detect if something is wrong.\n* When a plugin include dependencies, the load time for each dependency is added to the\nparent plugin load time.\n\n## Compatible plugins\n\nMost [oh-my-fish plugins](https://github.com/oh-my-fish) should work out of the box\nor with [danhper/oh-my-fish-core](https://github.com/danhper/oh-my-fish-core) installed.\n\nPlease feel free to edit the [wiki](https://github.com/danhper/fundle/wiki) and add\nyour plugins, or plugins you know work with fundle.\n\n## Contributing\n\nContributions are very appreciated. Please open an issue or create a PR if you\nwant to contribute.\n\nIf you created a package compatible with fundle, feel free to [add it to the Wiki](https://github.com/danhper/fundle/wiki/Home/_edit).\n\n## Motivations\n\nI know that [oh-my-fish](https://github.com/oh-my-fish/oh-my-fish) has a utility to\ninstall packages, but I wanted the simplest tool possible, not a whole framework.\n\n## Changelog\n\n* 2016-04-06 (v0.5.1): Fix `fundle help` to show `clean` command.\n* 2016-04-06 (v0.5.0): Add `fundle clean`. Deprecate `fundle install -u` and add `fundle update` thanks to @enricobacis.\n* 2015-12-22 (v0.4.0): Add `--path` option, thanks to @Perlence.\n* 2015-12-16 (v0.3.2): Fix profiling in OSX.\n* 2015-12-14 (v0.3.1): Fix incompatibility with oh-my-fish. Rename `plugins` to `list`.\n* 2015-12-14 (v0.3.0): Fix dependency load order. Add profiling mode.\n* 2015-12-14 (v0.2.2): Emit plugin initialization event\n* 2015-12-07 (v0.2.1): Use `curl` instead of `wget` for `self-update`\n* 2015-12-07 (v0.2.0): Add `self-update` command\n* 2015-12-07 (v0.1.0): Fix bug with dependency loading in `fundle init`\n* 2015-11-24: Allow the use of `#commit-ish` when using plugin repo. Checkout repository `commit-ish` instead of using master branch.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdanhper%2Ffundle","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdanhper%2Ffundle","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdanhper%2Ffundle/lists"}