Skip to content

How does Fisher compare to Oh My Fish and Fundle? #481

Closed
@jorgebucaran

Description

@jorgebucaran

⚠️ Disclaimer: As the author of Fisher, I am definitely biased, and I may omit important information. This information may also become outdated, although I will make an effort to keep it up-to-date. It is recommended to try all the options mentioned to determine which one works best for you.

Summary

Fisher is a plugin manager similar to npm, gem, and brew. It allows you to install, update, and remove Fish scripts (referred to as plugins). Fisher can install these plugins by fetching repositories from GitHub (also supports GitLab #657) that meet a specific directory structure and place their files in the appropriate location for easy access by your shell.

Fundle is also a plugin manager that enables you to add, update, and remove plugins synchronously. Like Fisher, it promotes a clean plugin structure. Fundle's design is inspired by Vundle.vim but also includes an interactive interface.

Oh My Fish! is a Fish "framework" that includes a plugin manager, a default prompt, a plugin database, and additional functions to extend Fish capabilities (though they may not add significant substance to your shell). It draws inspiration from Oh My Zsh, making it appealing to newcomers and those new to shells.

Both Oh My Fish! and Fundle execute code on shell startup to install or enable plugins. This may slightly slow down the startup process. Your mileage may vary, and it may or may not be a concern (see: danhper/fundle#38).

Oh My Fish! follows non-standard conventions that bypass the shell's canonical autorun mechanism and create framework lock-in. Examples of these conventions include files like *.load, init.fish, before.init.fish, key_bindings.fish, vendor-specific environment variables, hooks, and numerous global functions that may clutter your shell function scope.

Technical Comparison

  • Fisher is a plugin manager that:

    • Requires Fish version 2.1 or higher.
    • Installs plugins concurrently to maximize resource utilization.
    • Utilizes GitHub, GitLab, and repo download APIs to avoid relying solely on git and to speed up installations.
    • Does not modify your configuration, environment, or execute code on shell startup.
    • Does not include additional tools for scaffolding or publishing plugins by default.
    • Uses a flat directory structure, eliminating the need to modify the path on shell startup.
      • The installation prefix can be configured if necessary.
    • Supports Oh My Fish! plugins (though 100% compatibility is not a goal).
      • Supports plugins using non-standard Oh My Fish extensions like init.fish, uninstall.fish, key_bindings.fish, or recursive directories (although it is discouraged since Fish has native ways to accomplish the same goals).
      • Plugins using other Oh My Fish extensions, such as init_ events, hooks, Oh My Fish core library functions, and environment variables like $OMF_PATH, $plugin, $path, and $dependencies, may not work correctly.
    • Uses a lock file (fish_plugins) to ensure consistent installations across different systems.
    • Determines plugin dependencies deterministically by comparing your fish_plugins file to identify what needs to be added, updated, or removed.
      • Plugin dependencies will be installed consistently on any system, regardless of installation order.
    • Utilizes Fish's canonical autorun mechanism (configuration snippets) to support plugins with custom key bindings.
  • Oh My Fish is a framework that:

    • Requires Fish version 2.2 or higher.
    • Typically installed through a curlpipe, but manual installation is also available.
    • Installs plugins sequentially, one at a time.
    • Includes a plugin manager, startup configuration, core functions, and a plugin scaffolding tool.
    • Modifies your Fish function path on startup to autoload installed plugins and add key bindings.
      • Having more plugins usually leads to slower shell startup times.
    • Can search and install plugins from the Oh My Fish plugin database or a specified URL.
    • Uses non-standard file conventions such as init.fish, uninstall.fish, and key_bindings.fish.
  • Fundle is a plugin manager that:

    • Requires Fish version 2.3 or higher.
    • Typically installed through a curlpipe, but manual installation is also available.
    • Installs plugins sequentially, one at a time.
    • Requires modification of your Fish configuration file (XDG_CONFIG_HOME/fish/config.fish) to add or remove plugins.
      • Having more plugins usually leads to slower shell startup times.

Please note that these comparisons are technical in nature and may not cover all aspects of each tool. It's recommended to explore and try out different options to find the one that best suits your needs.

Metadata

Metadata

Assignees

No one assigned

    Labels

    docsDocs and not so docs

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions