4 ms·
Show HN: Fisherman – Fish Shell Manager
- bucaran 11y agoFisherman is a shell manager for fish that lets you share and reuse code, prompts and configurations easily. This tool is not a framework, it does not pollute your shell public scope with superfluous functions, it does not make your shell slow, it's just a handful of 4 ~ 5 commands that let you share and manage your configuration, plugins, prompts, snippets, etc., and does not care whether they come from Oh My Fish!, Wahoo, or other vendors. You get the most of your shell and Fisherman gets out of your way. Features include a flat tree structure, strong UNIX ties (everything is a stream), unified plugin architecture with automatic completions, documentation via man pages and support for utilities that use Make as a build tool, external self-managed database, cache system, plugin dependencies, quick shell start, extensive documentation and compatibility with Oh My Fish ecosystem of plugins / themes.
- mchahn 11y agoI apologize in advance for a stupid question, but what is a "flat tree structure"? It sounds like an oxymoron.
- chenglou 11y agoProbably like the new npm 3 dependency directories. If A and B require a common version of C then the hierarchy is totally flat (A B C at the root). If they require incompatible versions of C then there will be 2 C, one nested inside A and one inside B
- bucaran 11y agonpm 4 dep management is more complex. In fish there is no private function scope so things are much simpler (but not as powerful indeed).
- bucaran 11y agoThanks for the question. I needed a term that would fit the README without sounding too extravagant either. Here is the explanation from fisher(7) [https://github.com/fisherman/fisherman/blob/master/man/man7/fisher.md#flat-tree https://github.com/fisherman/fisherman/blob/master/man/man7/...] Basically, a flat tree takes advantage of fish's lack of private scope (it bundles everything into the same "public" scope). Fisherman then only needs to "load" the one single path where plugins/snippets/prompts/etc are transferred after being downloaded to the cache. This is faster than, loading a path hierarchy per plugin and also means that performance is not affected based in the number of plugins installed.
- chenglou 11y agoSomewhat related: can fish shell do something like this? https://github.com/hchbaw/auto-fu.zsh https://github.com/hchbaw/auto-fu.zsh On the fly display of all the options. If so, to what extend? Some commands don't give autocomplete upon tab. Is there a way to fix that?
- ridiculous_fish 11y agofish displays one "suggestion" as you type, which can be a file, option, or history item. You can use tab to get a menu, similar to the demo. Showing everything as you type sounds neat, but in practice it's jarring to have your screen fill up the second you press a key. fish operates on the UI principle of progressive disclosure: be helpful but not overwhelming. That's why it only shows one. fish knows how to parse man pages to extract options, so fish can tab-complete options even for commands that don't have explicit completions. It's surprising that nobody else seems to have tried this.
- bucaran 11y agoThe relevant link is here (https://github.com/fish-shell/fish-shell/blob/master/share/tools/create_manpage_completions.py https://github.com/fish-shell/fish-shell/blob/master/share/t...) ridiculous_fish, we still use `complete` all over the place for completions don't we. In Fisherman there is a nice little AWK script, still far from perfect that attempts to do a similar thing, parsing a utility's usage help. usage: utility [...] -s --short Short option ...
- breatheoften 11y agoI've been using fish as my default shell for awhile now and really like it. I've not looked for any other tools in the fish ecosystem tho -- hadn't even realized there were fish "package managers". Does anyone know a list of some compelling "packages" or have some favorites to share?
- bucaran 11y agoI hope to make that easier with Fisherman. You can install any "package" or snippet if you have an URL. There is also the Fisherman Index with packages you can get by their name. Sorry, but I like this one https://github.com/bucaran/shark https://github.com/bucaran/shark ^^
- derekstavis 11y agoThere's Oh My Fish too (https://github.com/oh-my-fish/oh-my-fish https://github.com/oh-my-fish/oh-my-fish), the very first and original fish package manager (or shell framework, as we like to call it). I use it because of the nice default theme and the node version manager (nvm) compatibility plugin.
- bucaran 11y agoThe problem with OMF is that it is entirely based in an earlier work of mine Wahoo, which I put together over a weekend and while it improved over the very original oh-my-zsh clone, it was not very good. See the merge commit here: * https://github.com/oh-my-fish/oh-my-fish/commit/2693a2fd18bd92a439f4d74b10513922d92120f7 https://github.com/oh-my-fish/oh-my-fish/commit/2693a2fd18bd... And compare to Wahoo here: * https://github.com/bucaran/wahoo https://github.com/bucaran/wahoo Fisherman is a project of a different caliber, forged over a longer period of time, truer to the UNIX philosophy in principle "everything is a stream", built for extensibility and to solve OMF slow shell start issue (that has been a problem ever since I joined the project almost 2 years ago) and of course, backward compatible with OMF/Wahoo plugin/theme ecosystem.