1.9 KiB
Fish
Fish is a "smart and user-friendly command line shell" with support for plugins.
Vendor Fish scripts
Any package may ship its own Fish completions, configuration snippets, and
functions. Those should be installed to
$out/share/fish/vendor_{completions,conf,functions}.d respectively.
When the programs.fish.enable and
programs.fish.vendor.{completions,config,functions}.enable options from the
NixOS Fish module are set to true, those paths are symlinked in the current
system environment and automatically loaded by Fish.
Packaging Fish plugins
While packages providing standalone executables belong to the top level,
packages which have the sole purpose of extending Fish belong to the
fishPlugins scope and should be registered in
pkgs/shells/fish/plugins/default.nix.
The buildFishPlugin utility function can be used to automatically copy Fish
scripts from $src/{completions,conf,conf.d,functions} to the standard vendor
installation paths. It also sets up the test environment so that the optional
checkPhase is executed in a Fish shell with other already packaged plugins
and package-local Fish functions specified in checkPlugins and
checkFunctionDirs respectively.
See pkgs/shells/fish/plugins/pure.nix for an example of Fish plugin package
using buildFishPlugin and running unit tests with the fishtape test runner.
Fish wrapper
The wrapFish package is a wrapper around Fish which can be used to create
Fish shells initialised with some plugins as well as completions, configuration
snippets and functions sourced from the given paths. This provides a convenient
way to test Fish plugins and scripts without having to alter the environment.
wrapFish {
pluginPkgs = with fishPlugins; [ pure foreign-env ];
completionDirs = [];
functionDirs = [];
confDirs = [ "/path/to/some/fish/init/dir/" ];
}