fisher/README.md

156 lines
4.8 KiB
Markdown
Raw Normal View History

2020-07-27 13:28:37 +02:00
# Fisher
Ahoy my mateys! fisherman 2.0.0 (beta) is here. A lot has changed, in fact, fisherman as you knew it, is no longer with us. Let me explain. The new fisherman, is in fact a rewired clone of ``fin´´, a short-lived 2 week experiment that started because it was easier to rewrite everything than moving fisherman forward. Let me explain. I was longing for a lightweight, simpler fisherman with minimal maintanance cost. This fin lad is one of the most pragmatic pieces of code I've ever written, but attempting to maintain two drastically different plugin managers was not a sane decision. fin's goal was to get out of my way and let me be productive with fish and it did. Now fin is fisherman and fisherman is fin. The most notable change is that fisherman no longer depends on an index, so like fin, it's neutral and agnostic to what plugins you use. No index means fisherman completions are no longer as clever as to show you description of plugins, but you will still get enough information to know whether the plugin is a theme or not. I hope you always check the plugin's README / online docs before installing anything anyway. With the index gone, we had no use for ``search``, so this command is also gone. If you were using search often or depended on the removed features above, I am afraid they are gone *gone*, but trust me it's all for the very best. Now, with this out of the way, it's all unicorns and dartfish. Almost. To upgrade to fisherman 2.0.0 you need to REMOVE your current version of fisherman: 1. ```rm -rf "$fisher_home" "$fisher_config"``` 2. Open your config.fish and remove the fisherman initialization code. 3. ```exec fish < /dev/tty``` to reload the session. 4. Run `curl -Lo ~/.config/fish/functions/fisher.fish --create-dirs git.io/fisherman` That's it. Probably. The new fisherman brings a lot more stability and maturity to the project and we need this change in order to move forward. I will be actively fixing any bugs that may have sneaked in during the ```fin->fisherman``` rewiring, but please do ping me: @bucaran on GitHub or directly to my email j@bucaran.me if you find anything out of place. Feel free and invited to go wild with issues in order to get this into shape ASAP. Cheers!
2016-04-21 17:34:06 +02:00
2020-08-07 18:38:34 +02:00
> A plugin manager for [fish](https://fishshell.com)—the friendly interactive shell.
2020-11-09 13:56:23 +01:00
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.
2016-04-29 10:29:30 +02:00
2020-11-09 13:56:23 +01:00
- [Oh My Fish](https://github.com/oh-my-fish/packages-main) 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](#using-your-fish_plugins-file).
2016-03-09 05:24:47 +01:00
2020-11-09 13:56:23 +01:00
Looking for plugins? Browse [git.io/awesome.fish](https://git.io/awesome.fish) or [search](https://github.com/topics/fish-plugins) [on](https://github.com/topics/fish-package) [GitHub](https://github.com/topics/fish-plugin).
2016-03-02 11:55:03 +01:00
breaking: implement fisher V3 (#445) SUMMARY This PR rewrites fisher from the ground up and adds new documentation. It introduces some breaking changes as described in the next section. For a historical background of this work see the original V3 proposal #307 and the more recent discussion about the future of the project #443. After much debate and careful consideration I decided it is in the best interest of the project to keep the CLI-based approach to dependency management as a facade to the fishfile-based approach originally proposed. The new `add` commands (previously `install`) and good ol' `rm` interactively update your fishfile and commit all your changes in one sweep. To the end user, it's as if you were adding or removing packages like you already do now. Internally, these commands affect how the fishfile is parsed and result in adding new or replacing/removing existing entries followed by a regular `fisher` run. INSTALLING - `install` has been renamed to `add` - Installing from a gist is no longer supported (but it will be back in a future release—removed only to simplify the rewrite) - To install a package from a tag or branch use an at symbol `@`—the colon `:` is deprecated LISTING - `ls` and `rm` are still available with a few minor differences - `ls` followed by a package name does not list specific package information (may be added back in a future release) - `ls` output format no longer displays a legend to indicate whether a package is a theme or a local package; now it's a flat dump of every installed package specifier - For local packages the full path is shown instead - I want to add a `--tree` option in to display packages in a tree-like format in the future - `ls-remote` has been removed as there is no longer a preferred organization to look for packages— there is no plan to add it back UPDATING - A new `self-update` command has been introduced to update fisher itself - fisher will be only updated when a new version is actually available - `update` has been removed - Everything is installed from scratch everytime you add or remove something, so there is no need to update specific packages—you're always up-to-date - To lock on a specific package version install from a tag/branch, e.g., `mypkg/foobar@1.3.2` UNINSTALLING - `self-uninstall` works as usual HELP & VERSION - `help` only displays fisher usage help - help is dumped to stdout instead of creating a man page on the fly and piping it to your pager `version` works as usual ENVIRONMENT - `$fish_path` been renamed to `$fisher_path` to make it clear that this is a fisher specific extension, not your shell's ECOSYSTEM - Oh My Fish! packages are still supported, albeit less attention is paid to them - Some packages that use Oh My Fish! specific environment variables or events might not work - Most of Oh My Fish! extensions are no longer necessary since fish 2.3, therefore it should be a simple matter to upgrade them to modern fish DEPENDENCIES - fisher can now run on fish 2.0 - It's a good idea to upgrade to at least fish 2.3 to use the string builtin and configuration snippets, but there's no reason for fisher to force you to use any fish version - `curl` is required for fetching packages - I am considering adding a fallback to `wget` if `curl` is not available on your system - `git` is optional - V3 fetches packages directly from github, gitlab and bitbucket, if you are using them - git is only used (implementation still wip) if you want to install a package from an unknown git host like your own git server
2018-10-05 13:20:31 +02:00
## Installation
2016-03-09 05:24:47 +01:00
2019-07-09 14:31:41 +02:00
```console
curl -sL git.io/fisher | source && fisher install jorgebucaran/fisher
2016-03-13 20:20:40 +01:00
```
2020-08-07 18:38:34 +02:00
## Quickstart
2018-10-21 16:33:59 +02:00
You can install, update, and remove plugins interactively with Fisher, taking advantage of fish [tab completion](https://fishshell.com/docs/current/index.html#completion) and rich syntax highlighting.
### Installing plugins
Install plugins using the `install` command followed by the path to the repository on GitHub.
breaking: implement fisher V3 (#445) SUMMARY This PR rewrites fisher from the ground up and adds new documentation. It introduces some breaking changes as described in the next section. For a historical background of this work see the original V3 proposal #307 and the more recent discussion about the future of the project #443. After much debate and careful consideration I decided it is in the best interest of the project to keep the CLI-based approach to dependency management as a facade to the fishfile-based approach originally proposed. The new `add` commands (previously `install`) and good ol' `rm` interactively update your fishfile and commit all your changes in one sweep. To the end user, it's as if you were adding or removing packages like you already do now. Internally, these commands affect how the fishfile is parsed and result in adding new or replacing/removing existing entries followed by a regular `fisher` run. INSTALLING - `install` has been renamed to `add` - Installing from a gist is no longer supported (but it will be back in a future release—removed only to simplify the rewrite) - To install a package from a tag or branch use an at symbol `@`—the colon `:` is deprecated LISTING - `ls` and `rm` are still available with a few minor differences - `ls` followed by a package name does not list specific package information (may be added back in a future release) - `ls` output format no longer displays a legend to indicate whether a package is a theme or a local package; now it's a flat dump of every installed package specifier - For local packages the full path is shown instead - I want to add a `--tree` option in to display packages in a tree-like format in the future - `ls-remote` has been removed as there is no longer a preferred organization to look for packages— there is no plan to add it back UPDATING - A new `self-update` command has been introduced to update fisher itself - fisher will be only updated when a new version is actually available - `update` has been removed - Everything is installed from scratch everytime you add or remove something, so there is no need to update specific packages—you're always up-to-date - To lock on a specific package version install from a tag/branch, e.g., `mypkg/foobar@1.3.2` UNINSTALLING - `self-uninstall` works as usual HELP & VERSION - `help` only displays fisher usage help - help is dumped to stdout instead of creating a man page on the fly and piping it to your pager `version` works as usual ENVIRONMENT - `$fish_path` been renamed to `$fisher_path` to make it clear that this is a fisher specific extension, not your shell's ECOSYSTEM - Oh My Fish! packages are still supported, albeit less attention is paid to them - Some packages that use Oh My Fish! specific environment variables or events might not work - Most of Oh My Fish! extensions are no longer necessary since fish 2.3, therefore it should be a simple matter to upgrade them to modern fish DEPENDENCIES - fisher can now run on fish 2.0 - It's a good idea to upgrade to at least fish 2.3 to use the string builtin and configuration snippets, but there's no reason for fisher to force you to use any fish version - `curl` is required for fetching packages - I am considering adding a fallback to `wget` if `curl` is not available on your system - `git` is optional - V3 fetches packages directly from github, gitlab and bitbucket, if you are using them - git is only used (implementation still wip) if you want to install a package from an unknown git host like your own git server
2018-10-05 13:20:31 +02:00
2019-07-09 14:31:41 +02:00
```console
fisher install ilancosman/tide
2016-03-09 10:40:59 +01:00
```
To get a specific version of a plugin add an `@` symbol after the plugin name followed by a tag, branch, or [commit](https://git-scm.com/docs/gitglossary#Documentation/gitglossary.txt-aiddefcommit-ishacommit-ishalsocommittish).
2016-03-09 05:24:47 +01:00
2019-07-09 14:31:41 +02:00
```console
fisher install jorgebucaran/nvm.fish@1.1.0
```
You can install plugins from a local directory too.
2019-07-09 14:31:41 +02:00
```console
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.
breaking: implement fisher V3 (#445) SUMMARY This PR rewrites fisher from the ground up and adds new documentation. It introduces some breaking changes as described in the next section. For a historical background of this work see the original V3 proposal #307 and the more recent discussion about the future of the project #443. After much debate and careful consideration I decided it is in the best interest of the project to keep the CLI-based approach to dependency management as a facade to the fishfile-based approach originally proposed. The new `add` commands (previously `install`) and good ol' `rm` interactively update your fishfile and commit all your changes in one sweep. To the end user, it's as if you were adding or removing packages like you already do now. Internally, these commands affect how the fishfile is parsed and result in adding new or replacing/removing existing entries followed by a regular `fisher` run. INSTALLING - `install` has been renamed to `add` - Installing from a gist is no longer supported (but it will be back in a future release—removed only to simplify the rewrite) - To install a package from a tag or branch use an at symbol `@`—the colon `:` is deprecated LISTING - `ls` and `rm` are still available with a few minor differences - `ls` followed by a package name does not list specific package information (may be added back in a future release) - `ls` output format no longer displays a legend to indicate whether a package is a theme or a local package; now it's a flat dump of every installed package specifier - For local packages the full path is shown instead - I want to add a `--tree` option in to display packages in a tree-like format in the future - `ls-remote` has been removed as there is no longer a preferred organization to look for packages— there is no plan to add it back UPDATING - A new `self-update` command has been introduced to update fisher itself - fisher will be only updated when a new version is actually available - `update` has been removed - Everything is installed from scratch everytime you add or remove something, so there is no need to update specific packages—you're always up-to-date - To lock on a specific package version install from a tag/branch, e.g., `mypkg/foobar@1.3.2` UNINSTALLING - `self-uninstall` works as usual HELP & VERSION - `help` only displays fisher usage help - help is dumped to stdout instead of creating a man page on the fly and piping it to your pager `version` works as usual ENVIRONMENT - `$fish_path` been renamed to `$fisher_path` to make it clear that this is a fisher specific extension, not your shell's ECOSYSTEM - Oh My Fish! packages are still supported, albeit less attention is paid to them - Some packages that use Oh My Fish! specific environment variables or events might not work - Most of Oh My Fish! extensions are no longer necessary since fish 2.3, therefore it should be a simple matter to upgrade them to modern fish DEPENDENCIES - fisher can now run on fish 2.0 - It's a good idea to upgrade to at least fish 2.3 to use the string builtin and configuration snippets, but there's no reason for fisher to force you to use any fish version - `curl` is required for fetching packages - I am considering adding a fallback to `wget` if `curl` is not available on your system - `git` is optional - V3 fetches packages directly from github, gitlab and bitbucket, if you are using them - git is only used (implementation still wip) if you want to install a package from an unknown git host like your own git server
2018-10-05 13:20:31 +02:00
2020-08-07 18:38:34 +02:00
### Listing plugins
breaking: implement fisher V3 (#445) SUMMARY This PR rewrites fisher from the ground up and adds new documentation. It introduces some breaking changes as described in the next section. For a historical background of this work see the original V3 proposal #307 and the more recent discussion about the future of the project #443. After much debate and careful consideration I decided it is in the best interest of the project to keep the CLI-based approach to dependency management as a facade to the fishfile-based approach originally proposed. The new `add` commands (previously `install`) and good ol' `rm` interactively update your fishfile and commit all your changes in one sweep. To the end user, it's as if you were adding or removing packages like you already do now. Internally, these commands affect how the fishfile is parsed and result in adding new or replacing/removing existing entries followed by a regular `fisher` run. INSTALLING - `install` has been renamed to `add` - Installing from a gist is no longer supported (but it will be back in a future release—removed only to simplify the rewrite) - To install a package from a tag or branch use an at symbol `@`—the colon `:` is deprecated LISTING - `ls` and `rm` are still available with a few minor differences - `ls` followed by a package name does not list specific package information (may be added back in a future release) - `ls` output format no longer displays a legend to indicate whether a package is a theme or a local package; now it's a flat dump of every installed package specifier - For local packages the full path is shown instead - I want to add a `--tree` option in to display packages in a tree-like format in the future - `ls-remote` has been removed as there is no longer a preferred organization to look for packages— there is no plan to add it back UPDATING - A new `self-update` command has been introduced to update fisher itself - fisher will be only updated when a new version is actually available - `update` has been removed - Everything is installed from scratch everytime you add or remove something, so there is no need to update specific packages—you're always up-to-date - To lock on a specific package version install from a tag/branch, e.g., `mypkg/foobar@1.3.2` UNINSTALLING - `self-uninstall` works as usual HELP & VERSION - `help` only displays fisher usage help - help is dumped to stdout instead of creating a man page on the fly and piping it to your pager `version` works as usual ENVIRONMENT - `$fish_path` been renamed to `$fisher_path` to make it clear that this is a fisher specific extension, not your shell's ECOSYSTEM - Oh My Fish! packages are still supported, albeit less attention is paid to them - Some packages that use Oh My Fish! specific environment variables or events might not work - Most of Oh My Fish! extensions are no longer necessary since fish 2.3, therefore it should be a simple matter to upgrade them to modern fish DEPENDENCIES - fisher can now run on fish 2.0 - It's a good idea to upgrade to at least fish 2.3 to use the string builtin and configuration snippets, but there's no reason for fisher to force you to use any fish version - `curl` is required for fetching packages - I am considering adding a fallback to `wget` if `curl` is not available on your system - `git` is optional - V3 fetches packages directly from github, gitlab and bitbucket, if you are using them - git is only used (implementation still wip) if you want to install a package from an unknown git host like your own git server
2018-10-05 13:20:31 +02:00
List all the plugins that are currently installed using the `list` command.
2016-03-09 05:24:47 +01:00
2019-07-09 14:31:41 +02:00
```console
$ fisher list
jorgebucaran/fisher
ilancosman/tide
jorgebucaran/nvm.fish@1.1.0
/home/jb/path/to/plugin
2016-03-09 05:24:47 +01:00
```
> `jorgebucaran/fisher` is listed because we installed it to start with!
The `list` command also accepts a regular expression to filter the output.
2016-03-09 05:24:47 +01:00
2019-07-09 14:31:41 +02:00
```console
$ fisher list \^/
/home/jb/path/to/plugin
2016-03-09 05:24:47 +01:00
```
breaking: implement fisher V3 (#445) SUMMARY This PR rewrites fisher from the ground up and adds new documentation. It introduces some breaking changes as described in the next section. For a historical background of this work see the original V3 proposal #307 and the more recent discussion about the future of the project #443. After much debate and careful consideration I decided it is in the best interest of the project to keep the CLI-based approach to dependency management as a facade to the fishfile-based approach originally proposed. The new `add` commands (previously `install`) and good ol' `rm` interactively update your fishfile and commit all your changes in one sweep. To the end user, it's as if you were adding or removing packages like you already do now. Internally, these commands affect how the fishfile is parsed and result in adding new or replacing/removing existing entries followed by a regular `fisher` run. INSTALLING - `install` has been renamed to `add` - Installing from a gist is no longer supported (but it will be back in a future release—removed only to simplify the rewrite) - To install a package from a tag or branch use an at symbol `@`—the colon `:` is deprecated LISTING - `ls` and `rm` are still available with a few minor differences - `ls` followed by a package name does not list specific package information (may be added back in a future release) - `ls` output format no longer displays a legend to indicate whether a package is a theme or a local package; now it's a flat dump of every installed package specifier - For local packages the full path is shown instead - I want to add a `--tree` option in to display packages in a tree-like format in the future - `ls-remote` has been removed as there is no longer a preferred organization to look for packages— there is no plan to add it back UPDATING - A new `self-update` command has been introduced to update fisher itself - fisher will be only updated when a new version is actually available - `update` has been removed - Everything is installed from scratch everytime you add or remove something, so there is no need to update specific packages—you're always up-to-date - To lock on a specific package version install from a tag/branch, e.g., `mypkg/foobar@1.3.2` UNINSTALLING - `self-uninstall` works as usual HELP & VERSION - `help` only displays fisher usage help - help is dumped to stdout instead of creating a man page on the fly and piping it to your pager `version` works as usual ENVIRONMENT - `$fish_path` been renamed to `$fisher_path` to make it clear that this is a fisher specific extension, not your shell's ECOSYSTEM - Oh My Fish! packages are still supported, albeit less attention is paid to them - Some packages that use Oh My Fish! specific environment variables or events might not work - Most of Oh My Fish! extensions are no longer necessary since fish 2.3, therefore it should be a simple matter to upgrade them to modern fish DEPENDENCIES - fisher can now run on fish 2.0 - It's a good idea to upgrade to at least fish 2.3 to use the string builtin and configuration snippets, but there's no reason for fisher to force you to use any fish version - `curl` is required for fetching packages - I am considering adding a fallback to `wget` if `curl` is not available on your system - `git` is optional - V3 fetches packages directly from github, gitlab and bitbucket, if you are using them - git is only used (implementation still wip) if you want to install a package from an unknown git host like your own git server
2018-10-05 13:20:31 +02:00
2020-08-07 18:38:34 +02:00
### Updating plugins
breaking: implement fisher V3 (#445) SUMMARY This PR rewrites fisher from the ground up and adds new documentation. It introduces some breaking changes as described in the next section. For a historical background of this work see the original V3 proposal #307 and the more recent discussion about the future of the project #443. After much debate and careful consideration I decided it is in the best interest of the project to keep the CLI-based approach to dependency management as a facade to the fishfile-based approach originally proposed. The new `add` commands (previously `install`) and good ol' `rm` interactively update your fishfile and commit all your changes in one sweep. To the end user, it's as if you were adding or removing packages like you already do now. Internally, these commands affect how the fishfile is parsed and result in adding new or replacing/removing existing entries followed by a regular `fisher` run. INSTALLING - `install` has been renamed to `add` - Installing from a gist is no longer supported (but it will be back in a future release—removed only to simplify the rewrite) - To install a package from a tag or branch use an at symbol `@`—the colon `:` is deprecated LISTING - `ls` and `rm` are still available with a few minor differences - `ls` followed by a package name does not list specific package information (may be added back in a future release) - `ls` output format no longer displays a legend to indicate whether a package is a theme or a local package; now it's a flat dump of every installed package specifier - For local packages the full path is shown instead - I want to add a `--tree` option in to display packages in a tree-like format in the future - `ls-remote` has been removed as there is no longer a preferred organization to look for packages— there is no plan to add it back UPDATING - A new `self-update` command has been introduced to update fisher itself - fisher will be only updated when a new version is actually available - `update` has been removed - Everything is installed from scratch everytime you add or remove something, so there is no need to update specific packages—you're always up-to-date - To lock on a specific package version install from a tag/branch, e.g., `mypkg/foobar@1.3.2` UNINSTALLING - `self-uninstall` works as usual HELP & VERSION - `help` only displays fisher usage help - help is dumped to stdout instead of creating a man page on the fly and piping it to your pager `version` works as usual ENVIRONMENT - `$fish_path` been renamed to `$fisher_path` to make it clear that this is a fisher specific extension, not your shell's ECOSYSTEM - Oh My Fish! packages are still supported, albeit less attention is paid to them - Some packages that use Oh My Fish! specific environment variables or events might not work - Most of Oh My Fish! extensions are no longer necessary since fish 2.3, therefore it should be a simple matter to upgrade them to modern fish DEPENDENCIES - fisher can now run on fish 2.0 - It's a good idea to upgrade to at least fish 2.3 to use the string builtin and configuration snippets, but there's no reason for fisher to force you to use any fish version - `curl` is required for fetching packages - I am considering adding a fallback to `wget` if `curl` is not available on your system - `git` is optional - V3 fetches packages directly from github, gitlab and bitbucket, if you are using them - git is only used (implementation still wip) if you want to install a package from an unknown git host like your own git server
2018-10-05 13:20:31 +02:00
The `update` command updates one or more plugins to their latest version.
breaking: implement fisher V3 (#445) SUMMARY This PR rewrites fisher from the ground up and adds new documentation. It introduces some breaking changes as described in the next section. For a historical background of this work see the original V3 proposal #307 and the more recent discussion about the future of the project #443. After much debate and careful consideration I decided it is in the best interest of the project to keep the CLI-based approach to dependency management as a facade to the fishfile-based approach originally proposed. The new `add` commands (previously `install`) and good ol' `rm` interactively update your fishfile and commit all your changes in one sweep. To the end user, it's as if you were adding or removing packages like you already do now. Internally, these commands affect how the fishfile is parsed and result in adding new or replacing/removing existing entries followed by a regular `fisher` run. INSTALLING - `install` has been renamed to `add` - Installing from a gist is no longer supported (but it will be back in a future release—removed only to simplify the rewrite) - To install a package from a tag or branch use an at symbol `@`—the colon `:` is deprecated LISTING - `ls` and `rm` are still available with a few minor differences - `ls` followed by a package name does not list specific package information (may be added back in a future release) - `ls` output format no longer displays a legend to indicate whether a package is a theme or a local package; now it's a flat dump of every installed package specifier - For local packages the full path is shown instead - I want to add a `--tree` option in to display packages in a tree-like format in the future - `ls-remote` has been removed as there is no longer a preferred organization to look for packages— there is no plan to add it back UPDATING - A new `self-update` command has been introduced to update fisher itself - fisher will be only updated when a new version is actually available - `update` has been removed - Everything is installed from scratch everytime you add or remove something, so there is no need to update specific packages—you're always up-to-date - To lock on a specific package version install from a tag/branch, e.g., `mypkg/foobar@1.3.2` UNINSTALLING - `self-uninstall` works as usual HELP & VERSION - `help` only displays fisher usage help - help is dumped to stdout instead of creating a man page on the fly and piping it to your pager `version` works as usual ENVIRONMENT - `$fish_path` been renamed to `$fisher_path` to make it clear that this is a fisher specific extension, not your shell's ECOSYSTEM - Oh My Fish! packages are still supported, albeit less attention is paid to them - Some packages that use Oh My Fish! specific environment variables or events might not work - Most of Oh My Fish! extensions are no longer necessary since fish 2.3, therefore it should be a simple matter to upgrade them to modern fish DEPENDENCIES - fisher can now run on fish 2.0 - It's a good idea to upgrade to at least fish 2.3 to use the string builtin and configuration snippets, but there's no reason for fisher to force you to use any fish version - `curl` is required for fetching packages - I am considering adding a fallback to `wget` if `curl` is not available on your system - `git` is optional - V3 fetches packages directly from github, gitlab and bitbucket, if you are using them - git is only used (implementation still wip) if you want to install a package from an unknown git host like your own git server
2018-10-05 13:20:31 +02:00
2019-07-09 14:31:41 +02:00
```console
fisher update ilancosman/tide
2020-08-07 18:38:34 +02:00
```
> `fisher update` by itself will update everything, including Fisher.
2018-09-07 13:17:02 +02:00
### Removing plugins
2018-09-07 13:17:02 +02:00
Remove installed plugins using the `remove` command.
2019-07-09 14:31:41 +02:00
```console
fisher remove jorgebucaran/nvm.fish@1.1.0
breaking: implement fisher V3 (#445) SUMMARY This PR rewrites fisher from the ground up and adds new documentation. It introduces some breaking changes as described in the next section. For a historical background of this work see the original V3 proposal #307 and the more recent discussion about the future of the project #443. After much debate and careful consideration I decided it is in the best interest of the project to keep the CLI-based approach to dependency management as a facade to the fishfile-based approach originally proposed. The new `add` commands (previously `install`) and good ol' `rm` interactively update your fishfile and commit all your changes in one sweep. To the end user, it's as if you were adding or removing packages like you already do now. Internally, these commands affect how the fishfile is parsed and result in adding new or replacing/removing existing entries followed by a regular `fisher` run. INSTALLING - `install` has been renamed to `add` - Installing from a gist is no longer supported (but it will be back in a future release—removed only to simplify the rewrite) - To install a package from a tag or branch use an at symbol `@`—the colon `:` is deprecated LISTING - `ls` and `rm` are still available with a few minor differences - `ls` followed by a package name does not list specific package information (may be added back in a future release) - `ls` output format no longer displays a legend to indicate whether a package is a theme or a local package; now it's a flat dump of every installed package specifier - For local packages the full path is shown instead - I want to add a `--tree` option in to display packages in a tree-like format in the future - `ls-remote` has been removed as there is no longer a preferred organization to look for packages— there is no plan to add it back UPDATING - A new `self-update` command has been introduced to update fisher itself - fisher will be only updated when a new version is actually available - `update` has been removed - Everything is installed from scratch everytime you add or remove something, so there is no need to update specific packages—you're always up-to-date - To lock on a specific package version install from a tag/branch, e.g., `mypkg/foobar@1.3.2` UNINSTALLING - `self-uninstall` works as usual HELP & VERSION - `help` only displays fisher usage help - help is dumped to stdout instead of creating a man page on the fly and piping it to your pager `version` works as usual ENVIRONMENT - `$fish_path` been renamed to `$fisher_path` to make it clear that this is a fisher specific extension, not your shell's ECOSYSTEM - Oh My Fish! packages are still supported, albeit less attention is paid to them - Some packages that use Oh My Fish! specific environment variables or events might not work - Most of Oh My Fish! extensions are no longer necessary since fish 2.3, therefore it should be a simple matter to upgrade them to modern fish DEPENDENCIES - fisher can now run on fish 2.0 - It's a good idea to upgrade to at least fish 2.3 to use the string builtin and configuration snippets, but there's no reason for fisher to force you to use any fish version - `curl` is required for fetching packages - I am considering adding a fallback to `wget` if `curl` is not available on your system - `git` is optional - V3 fetches packages directly from github, gitlab and bitbucket, if you are using them - git is only used (implementation still wip) if you want to install a package from an unknown git host like your own git server
2018-10-05 13:20:31 +02:00
```
2020-11-09 13:56:23 +01:00
Someday you may want to remove everything, including Fisher.
2016-05-28 11:09:53 +02:00
2019-07-09 14:31:41 +02:00
```console
fisher list | fisher remove
breaking: implement fisher V3 (#445) SUMMARY This PR rewrites fisher from the ground up and adds new documentation. It introduces some breaking changes as described in the next section. For a historical background of this work see the original V3 proposal #307 and the more recent discussion about the future of the project #443. After much debate and careful consideration I decided it is in the best interest of the project to keep the CLI-based approach to dependency management as a facade to the fishfile-based approach originally proposed. The new `add` commands (previously `install`) and good ol' `rm` interactively update your fishfile and commit all your changes in one sweep. To the end user, it's as if you were adding or removing packages like you already do now. Internally, these commands affect how the fishfile is parsed and result in adding new or replacing/removing existing entries followed by a regular `fisher` run. INSTALLING - `install` has been renamed to `add` - Installing from a gist is no longer supported (but it will be back in a future release—removed only to simplify the rewrite) - To install a package from a tag or branch use an at symbol `@`—the colon `:` is deprecated LISTING - `ls` and `rm` are still available with a few minor differences - `ls` followed by a package name does not list specific package information (may be added back in a future release) - `ls` output format no longer displays a legend to indicate whether a package is a theme or a local package; now it's a flat dump of every installed package specifier - For local packages the full path is shown instead - I want to add a `--tree` option in to display packages in a tree-like format in the future - `ls-remote` has been removed as there is no longer a preferred organization to look for packages— there is no plan to add it back UPDATING - A new `self-update` command has been introduced to update fisher itself - fisher will be only updated when a new version is actually available - `update` has been removed - Everything is installed from scratch everytime you add or remove something, so there is no need to update specific packages—you're always up-to-date - To lock on a specific package version install from a tag/branch, e.g., `mypkg/foobar@1.3.2` UNINSTALLING - `self-uninstall` works as usual HELP & VERSION - `help` only displays fisher usage help - help is dumped to stdout instead of creating a man page on the fly and piping it to your pager `version` works as usual ENVIRONMENT - `$fish_path` been renamed to `$fisher_path` to make it clear that this is a fisher specific extension, not your shell's ECOSYSTEM - Oh My Fish! packages are still supported, albeit less attention is paid to them - Some packages that use Oh My Fish! specific environment variables or events might not work - Most of Oh My Fish! extensions are no longer necessary since fish 2.3, therefore it should be a simple matter to upgrade them to modern fish DEPENDENCIES - fisher can now run on fish 2.0 - It's a good idea to upgrade to at least fish 2.3 to use the string builtin and configuration snippets, but there's no reason for fisher to force you to use any fish version - `curl` is required for fetching packages - I am considering adding a fallback to `wget` if `curl` is not available on your system - `git` is optional - V3 fetches packages directly from github, gitlab and bitbucket, if you are using them - git is only used (implementation still wip) if you want to install a package from an unknown git host like your own git server
2018-10-05 13:20:31 +02:00
```
2016-03-09 05:24:47 +01:00
## Using your `fish_plugins` file
2016-05-28 11:09:53 +02:00
2020-11-09 13:56:23 +01:00
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.
2020-11-09 13:56:23 +01:00
You can also edit this file and run `fisher update` to commit changes. Here's an example:
Ahoy my mateys! fisherman 2.0.0 (beta) is here. A lot has changed, in fact, fisherman as you knew it, is no longer with us. Let me explain. The new fisherman, is in fact a rewired clone of ``fin´´, a short-lived 2 week experiment that started because it was easier to rewrite everything than moving fisherman forward. Let me explain. I was longing for a lightweight, simpler fisherman with minimal maintanance cost. This fin lad is one of the most pragmatic pieces of code I've ever written, but attempting to maintain two drastically different plugin managers was not a sane decision. fin's goal was to get out of my way and let me be productive with fish and it did. Now fin is fisherman and fisherman is fin. The most notable change is that fisherman no longer depends on an index, so like fin, it's neutral and agnostic to what plugins you use. No index means fisherman completions are no longer as clever as to show you description of plugins, but you will still get enough information to know whether the plugin is a theme or not. I hope you always check the plugin's README / online docs before installing anything anyway. With the index gone, we had no use for ``search``, so this command is also gone. If you were using search often or depended on the removed features above, I am afraid they are gone *gone*, but trust me it's all for the very best. Now, with this out of the way, it's all unicorns and dartfish. Almost. To upgrade to fisherman 2.0.0 you need to REMOVE your current version of fisherman: 1. ```rm -rf "$fisher_home" "$fisher_config"``` 2. Open your config.fish and remove the fisherman initialization code. 3. ```exec fish < /dev/tty``` to reload the session. 4. Run `curl -Lo ~/.config/fish/functions/fisher.fish --create-dirs git.io/fisherman` That's it. Probably. The new fisherman brings a lot more stability and maturity to the project and we need this change in order to move forward. I will be actively fixing any bugs that may have sneaked in during the ```fin->fisherman``` rewiring, but please do ping me: @bucaran on GitHub or directly to my email j@bucaran.me if you find anything out of place. Feel free and invited to go wild with issues in order to get this into shape ASAP. Cheers!
2016-04-21 17:34:06 +02:00
2019-07-09 14:31:41 +02:00
```console
2020-11-09 13:56:23 +01:00
nano $__fish_config_dir/fish_plugins
breaking: implement fisher V3 (#445) SUMMARY This PR rewrites fisher from the ground up and adds new documentation. It introduces some breaking changes as described in the next section. For a historical background of this work see the original V3 proposal #307 and the more recent discussion about the future of the project #443. After much debate and careful consideration I decided it is in the best interest of the project to keep the CLI-based approach to dependency management as a facade to the fishfile-based approach originally proposed. The new `add` commands (previously `install`) and good ol' `rm` interactively update your fishfile and commit all your changes in one sweep. To the end user, it's as if you were adding or removing packages like you already do now. Internally, these commands affect how the fishfile is parsed and result in adding new or replacing/removing existing entries followed by a regular `fisher` run. INSTALLING - `install` has been renamed to `add` - Installing from a gist is no longer supported (but it will be back in a future release—removed only to simplify the rewrite) - To install a package from a tag or branch use an at symbol `@`—the colon `:` is deprecated LISTING - `ls` and `rm` are still available with a few minor differences - `ls` followed by a package name does not list specific package information (may be added back in a future release) - `ls` output format no longer displays a legend to indicate whether a package is a theme or a local package; now it's a flat dump of every installed package specifier - For local packages the full path is shown instead - I want to add a `--tree` option in to display packages in a tree-like format in the future - `ls-remote` has been removed as there is no longer a preferred organization to look for packages— there is no plan to add it back UPDATING - A new `self-update` command has been introduced to update fisher itself - fisher will be only updated when a new version is actually available - `update` has been removed - Everything is installed from scratch everytime you add or remove something, so there is no need to update specific packages—you're always up-to-date - To lock on a specific package version install from a tag/branch, e.g., `mypkg/foobar@1.3.2` UNINSTALLING - `self-uninstall` works as usual HELP & VERSION - `help` only displays fisher usage help - help is dumped to stdout instead of creating a man page on the fly and piping it to your pager `version` works as usual ENVIRONMENT - `$fish_path` been renamed to `$fisher_path` to make it clear that this is a fisher specific extension, not your shell's ECOSYSTEM - Oh My Fish! packages are still supported, albeit less attention is paid to them - Some packages that use Oh My Fish! specific environment variables or events might not work - Most of Oh My Fish! extensions are no longer necessary since fish 2.3, therefore it should be a simple matter to upgrade them to modern fish DEPENDENCIES - fisher can now run on fish 2.0 - It's a good idea to upgrade to at least fish 2.3 to use the string builtin and configuration snippets, but there's no reason for fisher to force you to use any fish version - `curl` is required for fetching packages - I am considering adding a fallback to `wget` if `curl` is not available on your system - `git` is optional - V3 fetches packages directly from github, gitlab and bitbucket, if you are using them - git is only used (implementation still wip) if you want to install a package from an unknown git host like your own git server
2018-10-05 13:20:31 +02:00
```
2016-03-09 05:24:47 +01:00
2018-10-17 03:43:51 +02:00
```diff
jorgebucaran/fisher
ilancosman/tide
+ jethrokuan/z
- jorgebucaran/nvm.fish@1.1.0
/home/jb/path/to/plugin
2018-10-17 03:43:51 +02:00
```
2019-07-09 14:31:41 +02:00
```console
fisher update
2018-10-17 03:43:51 +02:00
```
That will install **jethrokuan/z**, remove **jorgebucaran/nvm.fish**, and update everything else.
## Creating a plugin
A plugin consists of one or more files in a `functions`, `conf.d`, and/or `completions` directory. `*.fish` files under `conf.d` are also known as snippets and automatically run on shell startup. These are the files that Fisher looks for when installing a plugin.
```
my-plugin
├── functions
│ └── foobar.fish
├── completions
│ └── foobar.fish
└── conf.d
└── foobar.fish
```
While some packages contain every kind of file, some packages contain only functions or configuration snippets. You are not limited to a single file per directory either. There can be as many files as you need or only one as in the next example.
### Event system
Fisher leverages [fish events](https://fishshell.com/docs/current/cmds/emit.html) to notify plugins when they are being installed, updated, or removed.
Ahoy my mateys! fisherman 2.0.0 (beta) is here. A lot has changed, in fact, fisherman as you knew it, is no longer with us. Let me explain. The new fisherman, is in fact a rewired clone of ``fin´´, a short-lived 2 week experiment that started because it was easier to rewrite everything than moving fisherman forward. Let me explain. I was longing for a lightweight, simpler fisherman with minimal maintanance cost. This fin lad is one of the most pragmatic pieces of code I've ever written, but attempting to maintain two drastically different plugin managers was not a sane decision. fin's goal was to get out of my way and let me be productive with fish and it did. Now fin is fisherman and fisherman is fin. The most notable change is that fisherman no longer depends on an index, so like fin, it's neutral and agnostic to what plugins you use. No index means fisherman completions are no longer as clever as to show you description of plugins, but you will still get enough information to know whether the plugin is a theme or not. I hope you always check the plugin's README / online docs before installing anything anyway. With the index gone, we had no use for ``search``, so this command is also gone. If you were using search often or depended on the removed features above, I am afraid they are gone *gone*, but trust me it's all for the very best. Now, with this out of the way, it's all unicorns and dartfish. Almost. To upgrade to fisherman 2.0.0 you need to REMOVE your current version of fisherman: 1. ```rm -rf "$fisher_home" "$fisher_config"``` 2. Open your config.fish and remove the fisherman initialization code. 3. ```exec fish < /dev/tty``` to reload the session. 4. Run `curl -Lo ~/.config/fish/functions/fisher.fish --create-dirs git.io/fisherman` That's it. Probably. The new fisherman brings a lot more stability and maturity to the project and we need this change in order to move forward. I will be actively fixing any bugs that may have sneaked in during the ```fin->fisherman``` rewiring, but please do ping me: @bucaran on GitHub or directly to my email j@bucaran.me if you find anything out of place. Feel free and invited to go wild with issues in order to get this into shape ASAP. Cheers!
2016-04-21 17:34:06 +02:00
2020-11-09 13:56:23 +01:00
> `--on-event` functions must be already loaded when their event is emitted. So put event handlers in your `conf.d` directory.
breaking: implement fisher V3 (#445) SUMMARY This PR rewrites fisher from the ground up and adds new documentation. It introduces some breaking changes as described in the next section. For a historical background of this work see the original V3 proposal #307 and the more recent discussion about the future of the project #443. After much debate and careful consideration I decided it is in the best interest of the project to keep the CLI-based approach to dependency management as a facade to the fishfile-based approach originally proposed. The new `add` commands (previously `install`) and good ol' `rm` interactively update your fishfile and commit all your changes in one sweep. To the end user, it's as if you were adding or removing packages like you already do now. Internally, these commands affect how the fishfile is parsed and result in adding new or replacing/removing existing entries followed by a regular `fisher` run. INSTALLING - `install` has been renamed to `add` - Installing from a gist is no longer supported (but it will be back in a future release—removed only to simplify the rewrite) - To install a package from a tag or branch use an at symbol `@`—the colon `:` is deprecated LISTING - `ls` and `rm` are still available with a few minor differences - `ls` followed by a package name does not list specific package information (may be added back in a future release) - `ls` output format no longer displays a legend to indicate whether a package is a theme or a local package; now it's a flat dump of every installed package specifier - For local packages the full path is shown instead - I want to add a `--tree` option in to display packages in a tree-like format in the future - `ls-remote` has been removed as there is no longer a preferred organization to look for packages— there is no plan to add it back UPDATING - A new `self-update` command has been introduced to update fisher itself - fisher will be only updated when a new version is actually available - `update` has been removed - Everything is installed from scratch everytime you add or remove something, so there is no need to update specific packages—you're always up-to-date - To lock on a specific package version install from a tag/branch, e.g., `mypkg/foobar@1.3.2` UNINSTALLING - `self-uninstall` works as usual HELP & VERSION - `help` only displays fisher usage help - help is dumped to stdout instead of creating a man page on the fly and piping it to your pager `version` works as usual ENVIRONMENT - `$fish_path` been renamed to `$fisher_path` to make it clear that this is a fisher specific extension, not your shell's ECOSYSTEM - Oh My Fish! packages are still supported, albeit less attention is paid to them - Some packages that use Oh My Fish! specific environment variables or events might not work - Most of Oh My Fish! extensions are no longer necessary since fish 2.3, therefore it should be a simple matter to upgrade them to modern fish DEPENDENCIES - fisher can now run on fish 2.0 - It's a good idea to upgrade to at least fish 2.3 to use the string builtin and configuration snippets, but there's no reason for fisher to force you to use any fish version - `curl` is required for fetching packages - I am considering adding a fallback to `wget` if `curl` is not available on your system - `git` is optional - V3 fetches packages directly from github, gitlab and bitbucket, if you are using them - git is only used (implementation still wip) if you want to install a package from an unknown git host like your own git server
2018-10-05 13:20:31 +02:00
```fish
# Defined in conf.d/foobar.fish
function foobar_install --on-event foobar_install
# Set global variables, create bindings, and other install logic.
end
breaking: implement fisher V3 (#445) SUMMARY This PR rewrites fisher from the ground up and adds new documentation. It introduces some breaking changes as described in the next section. For a historical background of this work see the original V3 proposal #307 and the more recent discussion about the future of the project #443. After much debate and careful consideration I decided it is in the best interest of the project to keep the CLI-based approach to dependency management as a facade to the fishfile-based approach originally proposed. The new `add` commands (previously `install`) and good ol' `rm` interactively update your fishfile and commit all your changes in one sweep. To the end user, it's as if you were adding or removing packages like you already do now. Internally, these commands affect how the fishfile is parsed and result in adding new or replacing/removing existing entries followed by a regular `fisher` run. INSTALLING - `install` has been renamed to `add` - Installing from a gist is no longer supported (but it will be back in a future release—removed only to simplify the rewrite) - To install a package from a tag or branch use an at symbol `@`—the colon `:` is deprecated LISTING - `ls` and `rm` are still available with a few minor differences - `ls` followed by a package name does not list specific package information (may be added back in a future release) - `ls` output format no longer displays a legend to indicate whether a package is a theme or a local package; now it's a flat dump of every installed package specifier - For local packages the full path is shown instead - I want to add a `--tree` option in to display packages in a tree-like format in the future - `ls-remote` has been removed as there is no longer a preferred organization to look for packages— there is no plan to add it back UPDATING - A new `self-update` command has been introduced to update fisher itself - fisher will be only updated when a new version is actually available - `update` has been removed - Everything is installed from scratch everytime you add or remove something, so there is no need to update specific packages—you're always up-to-date - To lock on a specific package version install from a tag/branch, e.g., `mypkg/foobar@1.3.2` UNINSTALLING - `self-uninstall` works as usual HELP & VERSION - `help` only displays fisher usage help - help is dumped to stdout instead of creating a man page on the fly and piping it to your pager `version` works as usual ENVIRONMENT - `$fish_path` been renamed to `$fisher_path` to make it clear that this is a fisher specific extension, not your shell's ECOSYSTEM - Oh My Fish! packages are still supported, albeit less attention is paid to them - Some packages that use Oh My Fish! specific environment variables or events might not work - Most of Oh My Fish! extensions are no longer necessary since fish 2.3, therefore it should be a simple matter to upgrade them to modern fish DEPENDENCIES - fisher can now run on fish 2.0 - It's a good idea to upgrade to at least fish 2.3 to use the string builtin and configuration snippets, but there's no reason for fisher to force you to use any fish version - `curl` is required for fetching packages - I am considering adding a fallback to `wget` if `curl` is not available on your system - `git` is optional - V3 fetches packages directly from github, gitlab and bitbucket, if you are using them - git is only used (implementation still wip) if you want to install a package from an unknown git host like your own git server
2018-10-05 13:20:31 +02:00
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.
2018-10-17 03:43:51 +02:00
end
```
breaking: implement fisher V3 (#445) SUMMARY This PR rewrites fisher from the ground up and adds new documentation. It introduces some breaking changes as described in the next section. For a historical background of this work see the original V3 proposal #307 and the more recent discussion about the future of the project #443. After much debate and careful consideration I decided it is in the best interest of the project to keep the CLI-based approach to dependency management as a facade to the fishfile-based approach originally proposed. The new `add` commands (previously `install`) and good ol' `rm` interactively update your fishfile and commit all your changes in one sweep. To the end user, it's as if you were adding or removing packages like you already do now. Internally, these commands affect how the fishfile is parsed and result in adding new or replacing/removing existing entries followed by a regular `fisher` run. INSTALLING - `install` has been renamed to `add` - Installing from a gist is no longer supported (but it will be back in a future release—removed only to simplify the rewrite) - To install a package from a tag or branch use an at symbol `@`—the colon `:` is deprecated LISTING - `ls` and `rm` are still available with a few minor differences - `ls` followed by a package name does not list specific package information (may be added back in a future release) - `ls` output format no longer displays a legend to indicate whether a package is a theme or a local package; now it's a flat dump of every installed package specifier - For local packages the full path is shown instead - I want to add a `--tree` option in to display packages in a tree-like format in the future - `ls-remote` has been removed as there is no longer a preferred organization to look for packages— there is no plan to add it back UPDATING - A new `self-update` command has been introduced to update fisher itself - fisher will be only updated when a new version is actually available - `update` has been removed - Everything is installed from scratch everytime you add or remove something, so there is no need to update specific packages—you're always up-to-date - To lock on a specific package version install from a tag/branch, e.g., `mypkg/foobar@1.3.2` UNINSTALLING - `self-uninstall` works as usual HELP & VERSION - `help` only displays fisher usage help - help is dumped to stdout instead of creating a man page on the fly and piping it to your pager `version` works as usual ENVIRONMENT - `$fish_path` been renamed to `$fisher_path` to make it clear that this is a fisher specific extension, not your shell's ECOSYSTEM - Oh My Fish! packages are still supported, albeit less attention is paid to them - Some packages that use Oh My Fish! specific environment variables or events might not work - Most of Oh My Fish! extensions are no longer necessary since fish 2.3, therefore it should be a simple matter to upgrade them to modern fish DEPENDENCIES - fisher can now run on fish 2.0 - It's a good idea to upgrade to at least fish 2.3 to use the string builtin and configuration snippets, but there's no reason for fisher to force you to use any fish version - `curl` is required for fetching packages - I am considering adding a fallback to `wget` if `curl` is not available on your system - `git` is optional - V3 fetches packages directly from github, gitlab and bitbucket, if you are using them - git is only used (implementation still wip) if you want to install a package from an unknown git host like your own git server
2018-10-05 13:20:31 +02:00
## License
2017-01-20 11:29:30 +01:00
[MIT](LICENSE.md)