From ae5c6621825f73fb32a734b4bf2127655369f97a Mon Sep 17 00:00:00 2001 From: pacien Date: Tue, 5 Jan 2021 17:20:39 +0100 Subject: wrapFish: add fish shell wrapper package This adds a wrapper for fish which allows creating shells pre-initialised with some completions, functions, and configuration scripts from given paths or from fish plugin packages (`pkgs.fishPlugins.*`). This is especially handy when one wants to try a plugin in an ephemeral shell. GitHub: see https://github.com/NixOS/nixpkgs/pull/107834#discussion_r550612519 --- pkgs/shells/fish/wrapper.nix | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 pkgs/shells/fish/wrapper.nix (limited to 'pkgs/shells/fish') diff --git a/pkgs/shells/fish/wrapper.nix b/pkgs/shells/fish/wrapper.nix new file mode 100644 index 000000000000..053568bc6b9b --- /dev/null +++ b/pkgs/shells/fish/wrapper.nix @@ -0,0 +1,25 @@ +{ lib, writeShellScriptBin, fish }: + +with lib; + +makeOverridable ({ + completionDirs ? [], + functionDirs ? [], + confDirs ? [], + pluginPkgs ? [] +}: + +let + vendorDir = kind: plugin: "${plugin}/share/fish/vendor_${kind}.d"; + complPath = completionDirs ++ map (vendorDir "completions") pluginPkgs; + funcPath = functionDirs ++ map (vendorDir "functions") pluginPkgs; + confPath = confDirs ++ map (vendorDir "conf") pluginPkgs; + safeConfPath = map escapeShellArg confPath; + +in writeShellScriptBin "fish" '' + ${fish}/bin/fish --init-command " + set --prepend fish_complete_path ${escapeShellArgs complPath} + set --prepend fish_function_path ${escapeShellArgs funcPath} + for c in {${concatStringsSep "," safeConfPath}}/*; source $c; end + " "$@" +'') -- cgit 1.4.1