Merge pull request #108491 from pacien/fishPlugins-wrapFish

wrapFish: add fish shell wrapper package
This commit is contained in:
Michele Guerini Rocco
2021-01-11 09:10:52 +01:00
committed by GitHub
7 changed files with 93 additions and 25 deletions
+13 -23
View File
@@ -1,23 +1,6 @@
{ stdenv, lib, writeShellScriptBin, writeScript, fish }:
{ stdenv, lib, writeScript, wrapFish }:
let
rtpPath = "share/fish";
mapToFuncPath = v:
if lib.isString v
then v
else "${v}/${rtpPath}/vendor_functions.d";
fishWithFunctionPath = plugins: let
funcPaths = map mapToFuncPath plugins;
in writeShellScriptBin "fish" ''
${fish}/bin/fish \
--init-command \
"set --prepend fish_function_path ${lib.escapeShellArgs funcPaths}" \
"$@"
'';
in attrs@{
attrs@{
pname,
version,
src,
@@ -32,8 +15,10 @@ in attrs@{
installPath ? lib.getName pname,
checkInputs ? [],
# plugins or paths to add to the function path of the test fish shell
checkFunctionPath ? [],
# plugin packages to add to the vendor paths of the test fish shell
checkPlugins ? [],
# vendor directories to add to the function path of the test fish shell
checkFunctionDirs ? [],
# test script to be executed in a fish shell
checkPhase ? "",
doCheck ? checkPhase != "",
@@ -52,7 +37,7 @@ stdenv.mkDerivation (attrs // {
(
install_vendor_files() {
source="$1"
target="$out/${rtpPath}/vendor_$2.d"
target="$out/share/fish/vendor_$2.d"
[ -d $source ] || return 0
mkdir -p $target
@@ -69,7 +54,12 @@ stdenv.mkDerivation (attrs // {
'';
inherit doCheck;
checkInputs = [ (fishWithFunctionPath checkFunctionPath) ] ++ checkInputs;
checkInputs = [ (wrapFish {
pluginPkgs = checkPlugins;
functionDirs = checkFunctionDirs;
}) ] ++ checkInputs;
checkPhase = ''
export HOME=$(mktemp -d) # fish wants a writable home
fish "${writeScript "${name}-test" checkPhase}"
+1 -1
View File
@@ -11,7 +11,7 @@ buildFishPlugin rec {
sha256 = "0dxcyhs2shhgy5xnwcimqja8vqsyk841x486lgq13i3y1h0kp2kd";
};
checkFunctionPath = [ "./" ]; # fishtape is introspective
checkFunctionDirs = [ "./" ]; # fishtape is introspective
checkPhase = ''
rm test/tty.fish # test expects a tty
fishtape test/*.fish
+1 -1
View File
@@ -12,7 +12,7 @@ buildFishPlugin rec {
};
checkInputs = [ git ];
checkFunctionPath = [ fishtape ];
checkPlugins = [ fishtape ];
checkPhase = ''
# https://github.com/rafaelrinaldi/pure/issues/264
rm tests/_pure_string_width.test.fish
+25
View File
@@ -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
" "$@"
'')