Merge pull request #107834 from pacien/fishPlugins-init

fishPlugins: create scope and add some plugins
This commit is contained in:
Michele Guerini Rocco
2021-01-05 16:48:22 +01:00
committed by GitHub
10 changed files with 173 additions and 15 deletions

View File

@@ -0,0 +1,77 @@
{ stdenv, lib, writeShellScriptBin, writeScript, fish }:
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@{
pname,
version,
src,
name ? "fishplugin-${pname}-${version}",
unpackPhase ? "",
configurePhase ? ":",
buildPhase ? ":",
preInstall ? "",
postInstall ? "",
# name of the subdirectory in which to store the plugin
installPath ? lib.getName pname,
checkInputs ? [],
# plugins or paths to add to the function path of the test fish shell
checkFunctionPath ? [],
# test script to be executed in a fish shell
checkPhase ? "",
doCheck ? checkPhase != "",
...
}:
stdenv.mkDerivation (attrs // {
inherit name;
inherit unpackPhase configurePhase buildPhase;
inherit preInstall postInstall;
installPhase = ''
runHook preInstall
(
install_vendor_files() {
source="$1"
target="$out/${rtpPath}/vendor_$2.d"
[ -d $source ] || return 0
mkdir -p $target
cp -r $source/*.fish "$target/"
}
install_vendor_files completions completions
install_vendor_files functions functions
install_vendor_files conf conf
install_vendor_files conf.d conf
)
runHook postInstall
'';
inherit doCheck;
checkInputs = [ (fishWithFunctionPath checkFunctionPath) ] ++ checkInputs;
checkPhase = ''
export HOME=$(mktemp -d) # fish wants a writable home
fish "${writeScript "${name}-test" checkPhase}"
'';
})

View File

@@ -0,0 +1,13 @@
{ lib, newScope }:
lib.makeScope newScope (self: with self; {
buildFishPlugin = callPackage ./build-fish-plugin.nix { };
fishtape = callPackage ./fishtape.nix { };
foreign-env = callPackage ./foreign-env { };
pure = callPackage ./pure.nix { };
})

View File

@@ -0,0 +1,32 @@
{ lib, buildFishPlugin, fetchFromGitHub }:
buildFishPlugin rec {
pname = "fishtape";
version = "2.1.3";
src = fetchFromGitHub {
owner = "jorgebucaran";
repo = "fishtape";
rev = version;
sha256 = "0dxcyhs2shhgy5xnwcimqja8vqsyk841x486lgq13i3y1h0kp2kd";
};
checkFunctionPath = [ "./" ]; # fishtape is introspective
checkPhase = ''
rm test/tty.fish # test expects a tty
fishtape test/*.fish
'';
preInstall = ''
# move the function script in the proper sub-directory
mkdir functions
mv fishtape.fish functions/
'';
meta = {
description = "TAP-based test runner for Fish";
homepage = "https://github.com/jorgebucaran/fishtape";
license = lib.licenses.mit;
maintainers = with lib.maintainers; [ pacien ];
};
}

View File

@@ -1,7 +1,7 @@
{ stdenv, fetchFromGitHub, gnused, bash, coreutils }:
{ lib, buildFishPlugin, fetchFromGitHub, gnused, bash, coreutils }:
stdenv.mkDerivation {
pname = "fish-foreign-env";
buildFishPlugin {
pname = "foreign-env";
version = "git-20200209";
src = fetchFromGitHub {
@@ -11,18 +11,16 @@ stdenv.mkDerivation {
sha256 = "00xqlyl3lffc5l0viin1nyp819wf81fncqyz87jx8ljjdhilmgbs";
};
installPhase = ''
mkdir -p $out/share/fish-foreign-env/functions/
cp functions/* $out/share/fish-foreign-env/functions/
patches = [ ./suppress-harmless-warnings.patch ];
preInstall = ''
sed -e "s|sed|${gnused}/bin/sed|" \
-e "s|bash|${bash}/bin/bash|" \
-e "s|\| tr|\| ${coreutils}/bin/tr|" \
-i $out/share/fish-foreign-env/functions/*
-i functions/*
'';
patches = [ ./suppress-harmless-warnings.patch ];
meta = with stdenv.lib; {
meta = with lib; {
description = "A foreign environment interface for Fish shell";
license = licenses.mit;
maintainers = with maintainers; [ jgillich ];

View File

@@ -0,0 +1,29 @@
{ lib, buildFishPlugin, fetchFromGitHub, git, fishtape }:
buildFishPlugin rec {
pname = "pure";
version = "3.4.2";
src = fetchFromGitHub {
owner = "rafaelrinaldi";
repo = "pure";
rev = "v${version}";
sha256 = "134sz3f98gb6z2vgd5kkm6dd8pka5gijk843c32s616w35y07sga";
};
checkInputs = [ git ];
checkFunctionPath = [ fishtape ];
checkPhase = ''
# https://github.com/rafaelrinaldi/pure/issues/264
rm tests/_pure_string_width.test.fish
fishtape tests/*.test.fish
'';
meta = {
description = "Pretty, minimal and fast Fish prompt, ported from zsh";
homepage = "https://github.com/rafaelrinaldi/pure";
license = lib.licenses.mit;
maintainers = with lib.maintainers; [ pacien ];
};
}