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.