nixpkgs/pkgs/development/tools/gauge/wrapper.nix
2024-04-24 09:22:38 +02:00

60 lines
1.7 KiB
Nix

{ gauge-unwrapped
, gauge
, makeWrapper
, stdenvNoCC
, lib
, xorg
, gaugePlugins
, plugins ? []
}:
stdenvNoCC.mkDerivation {
pname = "gauge-wrapped";
inherit (gauge-unwrapped) version;
dontUnpack = true;
installPhase = ''
mkdir -p $out{bin,/share/gauge/{plugins,config}}
export NIX_GAUGE_IN_SANDBOX=true
export GAUGE_HOME=$(mktemp -d)
# run gauge to create config files
cd $(mktemp -d)
gauge init js || true
mkdir -p "$out/share/gauge/config"
mv "$GAUGE_HOME"/config/{gauge,template}.properties "$out/share/gauge/config"
export GAUGE_HOME="$out/share/gauge"
${lib.concatMapStringsSep "\n" (plugin: ''
for plugin in "$(ls ${plugin}/share/gauge-plugins)"; do
echo Installing gauge plugin $plugin
mkdir -p "$GAUGE_HOME/plugins/$plugin"
# Use lndir here
# gauge checks for a directory, which fails if it's a symlink
# It's easier to link this with lndir, than patching an upstream dependency
lndir "${plugin}/share/gauge-plugins/$plugin" "$GAUGE_HOME/plugins/$plugin"
done
'') plugins}
makeWrapper ${gauge-unwrapped}/bin/gauge $out/bin/gauge \
--set GAUGE_HOME "$GAUGE_HOME"
'';
nativeBuildInputs = [ gauge-unwrapped makeWrapper xorg.lndir ];
passthru = {
withPlugins = f: gauge.override { plugins = f gaugePlugins; };
fromManifest = path:
let
manifest = lib.importJSON path;
requiredPlugins = with manifest; [ Language ] ++ Plugins;
manifestPlugins = plugins: map (name: plugins.${name} or (throw "Gauge plugin ${name} is not available!")) requiredPlugins;
in gauge.withPlugins manifestPlugins;
};
inherit (gauge-unwrapped) meta;
}