Merge pull request #107834 from pacien/fishPlugins-init
fishPlugins: create scope and add some plugins
This commit is contained in:
commit
99bfa4bb60
@ -309,6 +309,14 @@
|
|||||||
Based on <xref linkend="opt-system.stateVersion" />, existing installations will continue to work.
|
Based on <xref linkend="opt-system.stateVersion" />, existing installations will continue to work.
|
||||||
</para>
|
</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
<package>fish-foreign-env</package> is now an alias for the
|
||||||
|
<package>fishPlugins.foreign-env</package> package, in which the fish
|
||||||
|
functions have been relocated to the
|
||||||
|
<literal>vendor_functions.d</literal> directory to be loaded automatically.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>
|
<para>
|
||||||
The prometheus json exporter is now managed by the prometheus community. Together with additional features
|
The prometheus json exporter is now managed by the prometheus community. Together with additional features
|
||||||
|
@ -112,7 +112,7 @@ in
|
|||||||
environment.etc."fish/nixos-env-preinit.fish".text = ''
|
environment.etc."fish/nixos-env-preinit.fish".text = ''
|
||||||
# This happens before $__fish_datadir/config.fish sets fish_function_path, so it is currently
|
# This happens before $__fish_datadir/config.fish sets fish_function_path, so it is currently
|
||||||
# unset. We set it and then completely erase it, leaving its configuration to $__fish_datadir/config.fish
|
# unset. We set it and then completely erase it, leaving its configuration to $__fish_datadir/config.fish
|
||||||
set fish_function_path ${pkgs.fish-foreign-env}/share/fish-foreign-env/functions $__fish_datadir/functions
|
set fish_function_path ${pkgs.fishPlugins.foreign-env}/share/fish/vendor_functions.d $__fish_datadir/functions
|
||||||
|
|
||||||
# source the NixOS environment config
|
# source the NixOS environment config
|
||||||
if [ -z "$__NIXOS_SET_ENVIRONMENT_DONE" ]
|
if [ -z "$__NIXOS_SET_ENVIRONMENT_DONE" ]
|
||||||
@ -128,7 +128,7 @@ in
|
|||||||
|
|
||||||
# if we haven't sourced the general config, do it
|
# if we haven't sourced the general config, do it
|
||||||
if not set -q __fish_nixos_general_config_sourced
|
if not set -q __fish_nixos_general_config_sourced
|
||||||
set fish_function_path ${pkgs.fish-foreign-env}/share/fish-foreign-env/functions $fish_function_path
|
set --prepend fish_function_path ${pkgs.fishPlugins.foreign-env}/share/fish/vendor_functions.d
|
||||||
fenv source /etc/fish/foreign-env/shellInit > /dev/null
|
fenv source /etc/fish/foreign-env/shellInit > /dev/null
|
||||||
set -e fish_function_path[1]
|
set -e fish_function_path[1]
|
||||||
|
|
||||||
@ -142,7 +142,7 @@ in
|
|||||||
# if we haven't sourced the login config, do it
|
# if we haven't sourced the login config, do it
|
||||||
status --is-login; and not set -q __fish_nixos_login_config_sourced
|
status --is-login; and not set -q __fish_nixos_login_config_sourced
|
||||||
and begin
|
and begin
|
||||||
set fish_function_path ${pkgs.fish-foreign-env}/share/fish-foreign-env/functions $fish_function_path
|
set --prepend fish_function_path ${pkgs.fishPlugins.foreign-env}/share/fish/vendor_functions.d
|
||||||
fenv source /etc/fish/foreign-env/loginShellInit > /dev/null
|
fenv source /etc/fish/foreign-env/loginShellInit > /dev/null
|
||||||
set -e fish_function_path[1]
|
set -e fish_function_path[1]
|
||||||
|
|
||||||
@ -158,7 +158,7 @@ in
|
|||||||
and begin
|
and begin
|
||||||
${fishAliases}
|
${fishAliases}
|
||||||
|
|
||||||
set fish_function_path ${pkgs.fish-foreign-env}/share/fish-foreign-env/functions $fish_function_path
|
set --prepend fish_function_path ${pkgs.fishPlugins.foreign-env}/share/fish/vendor_functions.d
|
||||||
fenv source /etc/fish/foreign-env/interactiveShellInit > /dev/null
|
fenv source /etc/fish/foreign-env/interactiveShellInit > /dev/null
|
||||||
set -e fish_function_path[1]
|
set -e fish_function_path[1]
|
||||||
|
|
||||||
|
77
pkgs/shells/fish/plugins/build-fish-plugin.nix
Normal file
77
pkgs/shells/fish/plugins/build-fish-plugin.nix
Normal 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}"
|
||||||
|
'';
|
||||||
|
})
|
13
pkgs/shells/fish/plugins/default.nix
Normal file
13
pkgs/shells/fish/plugins/default.nix
Normal 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 { };
|
||||||
|
|
||||||
|
})
|
32
pkgs/shells/fish/plugins/fishtape.nix
Normal file
32
pkgs/shells/fish/plugins/fishtape.nix
Normal 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 ];
|
||||||
|
};
|
||||||
|
}
|
@ -1,7 +1,7 @@
|
|||||||
{ stdenv, fetchFromGitHub, gnused, bash, coreutils }:
|
{ lib, buildFishPlugin, fetchFromGitHub, gnused, bash, coreutils }:
|
||||||
|
|
||||||
stdenv.mkDerivation {
|
buildFishPlugin {
|
||||||
pname = "fish-foreign-env";
|
pname = "foreign-env";
|
||||||
version = "git-20200209";
|
version = "git-20200209";
|
||||||
|
|
||||||
src = fetchFromGitHub {
|
src = fetchFromGitHub {
|
||||||
@ -11,18 +11,16 @@ stdenv.mkDerivation {
|
|||||||
sha256 = "00xqlyl3lffc5l0viin1nyp819wf81fncqyz87jx8ljjdhilmgbs";
|
sha256 = "00xqlyl3lffc5l0viin1nyp819wf81fncqyz87jx8ljjdhilmgbs";
|
||||||
};
|
};
|
||||||
|
|
||||||
installPhase = ''
|
patches = [ ./suppress-harmless-warnings.patch ];
|
||||||
mkdir -p $out/share/fish-foreign-env/functions/
|
|
||||||
cp functions/* $out/share/fish-foreign-env/functions/
|
preInstall = ''
|
||||||
sed -e "s|sed|${gnused}/bin/sed|" \
|
sed -e "s|sed|${gnused}/bin/sed|" \
|
||||||
-e "s|bash|${bash}/bin/bash|" \
|
-e "s|bash|${bash}/bin/bash|" \
|
||||||
-e "s|\| tr|\| ${coreutils}/bin/tr|" \
|
-e "s|\| tr|\| ${coreutils}/bin/tr|" \
|
||||||
-i $out/share/fish-foreign-env/functions/*
|
-i functions/*
|
||||||
'';
|
'';
|
||||||
|
|
||||||
patches = [ ./suppress-harmless-warnings.patch ];
|
meta = with lib; {
|
||||||
|
|
||||||
meta = with stdenv.lib; {
|
|
||||||
description = "A foreign environment interface for Fish shell";
|
description = "A foreign environment interface for Fish shell";
|
||||||
license = licenses.mit;
|
license = licenses.mit;
|
||||||
maintainers = with maintainers; [ jgillich ];
|
maintainers = with maintainers; [ jgillich ];
|
29
pkgs/shells/fish/plugins/pure.nix
Normal file
29
pkgs/shells/fish/plugins/pure.nix
Normal 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 ];
|
||||||
|
};
|
||||||
|
}
|
@ -158,6 +158,7 @@ mapAliases ({
|
|||||||
firefoxWrapper = firefox; # 2015-09
|
firefoxWrapper = firefox; # 2015-09
|
||||||
|
|
||||||
firestr = throw "firestr has been removed."; # added 2019-12-08
|
firestr = throw "firestr has been removed."; # added 2019-12-08
|
||||||
|
fish-foreign-env = fishPlugins.foreign-env; # added 2020-12-29
|
||||||
flameGraph = flamegraph; # added 2018-04-25
|
flameGraph = flamegraph; # added 2018-04-25
|
||||||
flvtool2 = throw "flvtool2 has been removed."; # added 2020-11-03
|
flvtool2 = throw "flvtool2 has been removed."; # added 2020-11-03
|
||||||
foldingathome = fahclient; # added 2020-09-03
|
foldingathome = fahclient; # added 2020-09-03
|
||||||
|
@ -8843,7 +8843,7 @@ in
|
|||||||
|
|
||||||
fish = callPackage ../shells/fish { };
|
fish = callPackage ../shells/fish { };
|
||||||
|
|
||||||
fish-foreign-env = callPackage ../shells/fish/fish-foreign-env { };
|
fishPlugins = recurseIntoAttrs (callPackage ../shells/fish/plugins { });
|
||||||
|
|
||||||
ion = callPackage ../shells/ion {
|
ion = callPackage ../shells/ion {
|
||||||
inherit (darwin) Security;
|
inherit (darwin) Security;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user