meta_package_manager.managers.fisher module¶
- class meta_package_manager.managers.fisher.Fisher[source]¶
Bases:
PackageManagerFisher is a plugin manager for the Fish shell.
Fisher clones each plugin from GitHub or any other forge into
$fisher_path, and records the set in the user’sfish_pluginsfile. Plugins are identified by the lower-casedowner/reposlug Fisher both reports and accepts, which is the id mpm keys them on. A plugin may carry an@refsuffix pinning it to a Git tag or branch, and that suffix is what mpm surfaces as the installed version.Caution
fisheris a Fish function, not a standalone binary: it ships as afunctions/fisher.fishfile that Fish autoloads, so it cannot serve as the manager’s CLI. Every invocation is therefore wrapped infish -c. Fish is the binary mpm executes, and Fisher’s own presence is established by the version probe: a host with Fish but no Fisher autoloads nothing, reports no version, and leaves the manager unavailable.Note
No
outdated: Fisher exposes no dry run and no upstream comparison. It tracks a branch rather than a release, so “behind” is not a question it answers.upgrade --allstill works, and mpm auto-skips the operation.Note
No
search: Fisher resolves plugins straight from forge URLs and indexes no registry to search.Documentation: fisher.
Initialize
cli_errorslist.- name: str = 'Fish fisher'¶
Return package manager’s common name.
Default value is based on class name.
- homepage_url: str | None = 'https://github.com/jorgebucaran/fisher'¶
Home page of the project, only used in documentation for reference.
- platforms: frozenset[Platform] | Group | Platform | Iterable[Platform | Group] = frozenset({Platform(id='almalinux', name='AlmaLinux'), Platform(id='alpine', name='Alpine Linux'), Platform(id='altlinux', name='ALT Linux'), Platform(id='amzn', name='Amazon Linux'), Platform(id='android', name='Android'), Platform(id='arch', name='Arch Linux'), Platform(id='buildroot', name='Buildroot'), Platform(id='cachyos', name='CachyOS'), Platform(id='centos', name='CentOS'), Platform(id='chromeos', name='ChromeOS'), Platform(id='clearlinux', name='Clear Linux OS'), Platform(id='cloudlinux', name='CloudLinux OS'), Platform(id='debian', name='Debian'), Platform(id='endeavouros', name='EndeavourOS'), Platform(id='exherbo', name='Exherbo Linux'), Platform(id='fedora', name='Fedora'), Platform(id='generic_linux', name='Generic Linux'), Platform(id='gentoo', name='Gentoo Linux'), Platform(id='guix', name='Guix System'), Platform(id='ibm_powerkvm', name='IBM PowerKVM'), Platform(id='kali', name='Kali Linux'), Platform(id='kvmibm', name='KVM for IBM z Systems'), Platform(id='linuxmint', name='Linux Mint'), Platform(id='macos', name='macOS'), Platform(id='mageia', name='Mageia'), Platform(id='mandriva', name='Mandriva Linux'), Platform(id='manjaro', name='Manjaro Linux'), Platform(id='nixos', name='NixOS'), Platform(id='nobara', name='Nobara'), Platform(id='opensuse', name='openSUSE'), Platform(id='openwrt', name='OpenWrt'), Platform(id='oracle', name='Oracle Linux'), Platform(id='parallels', name='Parallels'), Platform(id='pidora', name='Pidora'), Platform(id='pikaos', name='PikaOS'), Platform(id='raspbian', name='Raspbian'), Platform(id='rhel', name='RedHat Enterprise Linux'), Platform(id='rocky', name='Rocky Linux'), Platform(id='scientific', name='Scientific Linux'), Platform(id='slackware', name='Slackware'), Platform(id='sles', name='SUSE Linux Enterprise Server'), Platform(id='slitaz', name='SliTaz GNU/Linux'), Platform(id='sourcemage', name='Source Mage GNU/Linux'), Platform(id='tuxedo', name='Tuxedo OS'), Platform(id='ubuntu', name='Ubuntu'), Platform(id='ultramarine', name='Ultramarine'), Platform(id='void', name='Void Linux'), Platform(id='wsl1', name='Windows Subsystem for Linux v1'), Platform(id='wsl2', name='Windows Subsystem for Linux v2'), Platform(id='xenserver', name='XenServer')})¶
List of platforms supported by the manager.
Allows for a mishmash of platforms and groups of platforms. Will be normalized into a
frozensetofPlatforminstances at instantiation.
- requirement: str | None = '>=4.0.0'¶
The
4.xrewrite is where this CLI settled.4.0.0is the release that introduced the$_fisher_pluginsinventorylistprints, thefish_pluginsfileinstallandremovemaintain, and the plugin-scopedupdatethis class builds. Fisher3.xhad a different command set entirely, keyed on afishfile.
- cli_names: tuple[str, ...] = ('fish',)¶
Fish is the binary mpm actually executes.
Fisher is a shell function that Fish autoloads from its functions path, and is never executed as a program, so it cannot be the manager’s CLI: mpm requires an executable. Keying the manager on Fish instead makes the version probe the presence check.
- extra_env: ClassVar = {'NO_COLOR': '1'}¶
Fisher prints its progress through Fish’s own coloring, which
NO_COLORdisables so the listing parses as clean text.
- version_regexes: tuple[str, ...] = ('fisher, version (?P<version>\\S+)',)¶
$ fish -c 'functions --query fisher; or exit 0; fisher --version' fisher, version 4.4.8
- build_cli(*args, **kwargs)[source]¶
Wrap all CLI invocations in the Fish shell Fisher needs.
The version probe is guarded by
functions --query, which exits successfully when Fisher is not on the functions path. Fish is a general-purpose shell, so an unguarded probe would turn every host that merely has Fish into a manager reporting errors. A Fisher that is present but broken still fails loudly.Note
The
**kwargsaccepted by the base class (auto_pre_args,sudo, etc.) are accepted but ignored because every invocation goes through thefish -cwrapper and Fisher never requires elevated privileges.
- property installed: Iterator[Package]¶
Fetch installed packages.
Fisher prints one plugin per line, exactly as recorded: the lower-cased
owner/reposlug, optionally suffixed with the@refit was pinned to. A plugin installed from a local directory is listed by its absolute path instead, and is yielded under that path as its id.The
@refis a Git tag or branch, which is the only revision Fisher records: an unpinned plugin tracks its default branch and so reports no version at all.$ fish -c 'fisher list' jorgebucaran/fisher ilancosman/tide@v5 jorgebucaran/nvm.fish
- id: str = 'fisher'¶
Package manager’s ID.
Derived by defaults from the lower-cased class name in which underscores
_are replaced by dashes-.This ID must be unique among all package manager definitions and lower-case, as they’re used as feature flags for the mpm CLI.
- install(package_id, version=None)[source]¶
Install one package.
installboth clones the plugin and appends it to the user’sfish_pluginsfile, so a package installed through mpm is loaded by the next shell instead of sitting on disk unreferenced.A
versionis passed straight through as Fisher’s@refsuffix. That round-trips exactly: the refinstalled()reports is the one Fisher accepts back here.$ fish -c 'fisher install ilancosman/tide@v5' fisher installing ilancosman/tide@v5 Fetching https://codeload.github.com/ilancosman/tide/tar.gz/v5 Installing ilancosman/tide@v5 12 functions, 2 completions, 3 conf.d scripts
- Return type:
- virtual: bool = False¶
Should we expose the package manager to the user?
Virtual package manager are just skeleton classes used to factorize code among managers of the same family.
- upgrade_all_cli()[source]¶
Generates the CLI to upgrade all packages.
A bare
fisher updatere-reads the user’sfish_pluginsfile and updates every plugin listed in it.$ fish -c 'fisher update'
- upgrade_one_cli(package_id, version=None)[source]¶
Generates the CLI to upgrade one package.
$ fish -c 'fisher update jorgebucaran/nvm.fish'
- remove(package_id)[source]¶
Remove one package.
removeis the exact counterpart ofFisher.install(): it drops the plugin’s files and its line from the user’sfish_pluginsfile, so the next shell no longer loads it.$ fish -c 'fisher remove jorgebucaran/nvm.fish' fisher removing jorgebucaran/nvm.fish 5 functions, 1 completion, 1 conf.d script
- Return type: