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 initialized 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/" ];
}