meta_package_manager.managers.oh_my_fish module¶
- meta_package_manager.managers.oh_my_fish.omf_source_path()[source]¶
Locate the
init.fishfile every invocation sources.Oh My Fish installs itself into
$OMF_PATH, falling back to~/.local/share/omfwhen the variable is unset, as its own installer does. The path is returned whether or not it exists, so the built command stays well-formed and simply fails to source, which is what makes the version probe double as Oh My Fish’s presence check.- Return type:
- class meta_package_manager.managers.oh_my_fish.OhMyFish[source]¶
Bases:
PackageManagerOh My Fish is a framework and plugin manager for the Fish shell.
Packages are cloned under
$OMF_PATHand recorded in the user’s bundle file. Oh My Fish manages two kinds of package, plugins and themes, and reports both from one listing: mpm yields them together, since a name is unique across the two and every mutating command takes either.Caution
omfis a Fish function, not a standalone binary: it is defined by sourcing$OMF_PATH/init.fish, so it cannot serve as the manager’s CLI. Every invocation is therefore wrapped infish -c. Fish is the binary mpm executes, and Oh My Fish’s own presence is established by the version probe: a host with Fish but no Oh My Fish fails to source and reports no version, which leaves the manager unavailable.Note
No
outdated: Oh My Fish compares nothing against its remotes short of performing the update.upgrade --allstill works, and mpm auto-skips the operation.Note
No
search:omf searchexists and would map cleanly, but its results are printed by a private__omf.cli.search.outputhelper whose format no upstream sample pins down, so declaring it would mean guessing at a parser.Documentation: Oh My Fish.
Initialize
cli_errorslist.- id: str = 'oh-my-fish'¶
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.
- name: str = 'Fish Oh My Fish'¶
Return package manager’s common name.
Default value is based on class name.
- homepage_url: str | None = 'https://github.com/oh-my-fish/oh-my-fish'¶
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 = '>=6.0.0'¶
The
6.xseries is where this command set settled.omf list,omf install,omf removeand the package-scopedomf updateall predate it, but6.0.0is the release that moved the framework to$OMF_PATHwith theinit.fishentry point this manager sources.
- cli_names: tuple[str, ...] = ('fish',)¶
Fish is the binary mpm actually executes.
Oh My Fish is a shell function defined by an
init.fishfile that is sourced, never executed, so it cannot serve as 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'}¶
Oh My Fish underlines its section headers through Fish’s
set_color, whichNO_COLORdisables so the listing parses as clean text.
- version_regexes: tuple[str, ...] = ('Oh My Fish version (?P<version>\\S+)',)¶
Oh My Fish derives what it reports from git describe –tags –match ‘v*’ –always`, with the leading``v` cut off, so a checkout sitting on a release tag reports that release and one ahead of it reports a describe string.
$ fish -c 'source ~/.local/share/omf/init.fish; and omf --version' Oh My Fish version 7
- build_cli(*args, **kwargs)[source]¶
Wrap all CLI invocations in the Fish shell Oh My Fish needs.
The version probe is guarded by a readability test that exits successfully when
init.fishis absent, so a host that merely has Fish installed does not turn into a manager reporting errors. Aninit.fishthat 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 Oh My Fish never requires elevated privileges.
- property installed: Iterator[Package]¶
Fetch installed packages.
Oh My Fish pipes both of its listings through
column, so packages arrive several per line in a layout that depends on the terminal width, under an underlinedPluginsandThemesheader. Every token that is not one of those two headers is a package name: names carry no whitespace, which is what makes splitting on it sound.No version is reported for any of them: a package is a Git clone tracking a branch, and Oh My Fish records no revision per package.
$ fish -c 'source ~/.local/share/omf/init.fish; and omf list' Plugins bang-bang brew fish-spec osx percol pyenv tab z Themes agnoster bobthefish default scorphish
The block above is an illustration rather than a harvested fixture: the column layout is computed from the terminal width, so no sample can be byte-accurate across hosts.
- 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.
- install(package_id, version=None)[source]¶
Install one package.
A theme is additionally set as the active one by Oh My Fish itself, which is its own behavior and not something mpm asks for.
$ omf install z
- Return type:
- upgrade_all_cli()[source]¶
Generates the CLI to upgrade all packages.
Note
A bare
omf updatealso updates the Oh My Fish core, which is the manager rather than a package. The core is left in, deliberately: unlike Antidote’s--bundles, Oh My Fish offers no flag to scope an update to packages only, and naming every package instead would race the listing.$ omf update