about summary refs log tree commit diff
path: root/pkgs/shells/fish
diff options
context:
space:
mode:
authorJan Tojnar <jtojnar@gmail.com>2021-01-07 13:04:31 +0100
committerJan Tojnar <jtojnar@gmail.com>2021-01-07 13:04:31 +0100
commitf19eb635b4585f6ba4f9f4c3e9e07f56623446f5 (patch)
tree4d64a15e34e8a2b54466ba165297a6bb08bfb280 /pkgs/shells/fish
parent0e4e47512d709e93c35fa575dd82e3e6ce4f884d (diff)
parent2be707eca80b573c931007de78c936d49ab45395 (diff)
downloadnixlib-f19eb635b4585f6ba4f9f4c3e9e07f56623446f5.tar
nixlib-f19eb635b4585f6ba4f9f4c3e9e07f56623446f5.tar.gz
nixlib-f19eb635b4585f6ba4f9f4c3e9e07f56623446f5.tar.bz2
nixlib-f19eb635b4585f6ba4f9f4c3e9e07f56623446f5.tar.lz
nixlib-f19eb635b4585f6ba4f9f4c3e9e07f56623446f5.tar.xz
nixlib-f19eb635b4585f6ba4f9f4c3e9e07f56623446f5.tar.zst
nixlib-f19eb635b4585f6ba4f9f4c3e9e07f56623446f5.zip
Merge branch 'master' into staging-next
https://github.com/NixOS/nixpkgs/commit/b04fc593e7b55fe1f74421b11589f12a339c92e2 seems to have accidentally changed mkDerivation function for dfilemanager and solarus-quest-editor so I have reverted that here.
Diffstat (limited to 'pkgs/shells/fish')
-rw-r--r--pkgs/shells/fish/plugins/build-fish-plugin.nix77
-rw-r--r--pkgs/shells/fish/plugins/default.nix13
-rw-r--r--pkgs/shells/fish/plugins/fishtape.nix32
-rw-r--r--pkgs/shells/fish/plugins/foreign-env/default.nix (renamed from pkgs/shells/fish/fish-foreign-env/default.nix)18
-rw-r--r--pkgs/shells/fish/plugins/foreign-env/suppress-harmless-warnings.patch (renamed from pkgs/shells/fish/fish-foreign-env/suppress-harmless-warnings.patch)0
-rw-r--r--pkgs/shells/fish/plugins/pure.nix29
6 files changed, 159 insertions, 10 deletions
diff --git a/pkgs/shells/fish/plugins/build-fish-plugin.nix b/pkgs/shells/fish/plugins/build-fish-plugin.nix
new file mode 100644
index 000000000000..e2ec342e5440
--- /dev/null
+++ b/pkgs/shells/fish/plugins/build-fish-plugin.nix
@@ -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}"
+  '';
+})
diff --git a/pkgs/shells/fish/plugins/default.nix b/pkgs/shells/fish/plugins/default.nix
new file mode 100644
index 000000000000..e543d49516a8
--- /dev/null
+++ b/pkgs/shells/fish/plugins/default.nix
@@ -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 { };
+
+})
diff --git a/pkgs/shells/fish/plugins/fishtape.nix b/pkgs/shells/fish/plugins/fishtape.nix
new file mode 100644
index 000000000000..326ff61c4174
--- /dev/null
+++ b/pkgs/shells/fish/plugins/fishtape.nix
@@ -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 ];
+  };
+}
diff --git a/pkgs/shells/fish/fish-foreign-env/default.nix b/pkgs/shells/fish/plugins/foreign-env/default.nix
index ef157f323923..03435340d179 100644
--- a/pkgs/shells/fish/fish-foreign-env/default.nix
+++ b/pkgs/shells/fish/plugins/foreign-env/default.nix
@@ -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 ];
diff --git a/pkgs/shells/fish/fish-foreign-env/suppress-harmless-warnings.patch b/pkgs/shells/fish/plugins/foreign-env/suppress-harmless-warnings.patch
index 6eed35152120..6eed35152120 100644
--- a/pkgs/shells/fish/fish-foreign-env/suppress-harmless-warnings.patch
+++ b/pkgs/shells/fish/plugins/foreign-env/suppress-harmless-warnings.patch
diff --git a/pkgs/shells/fish/plugins/pure.nix b/pkgs/shells/fish/plugins/pure.nix
new file mode 100644
index 000000000000..54af2e0663e8
--- /dev/null
+++ b/pkgs/shells/fish/plugins/pure.nix
@@ -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 ];
+  };
+}