nixpkgs-suyu/pkgs/applications/terminal-emulators/rxvt-unicode/wrapper.nix

64 lines
2 KiB
Nix

{ callPackage
, symlinkJoin
, makeWrapper
, lib
, rxvt-unicode-unwrapped
, rxvt-unicode-plugins
, perlPackages
, nixosTests
, configure ? { availablePlugins, ... }:
{ plugins = builtins.attrValues availablePlugins;
extraDeps = [ ];
perlDeps = [ ];
}
}:
let
availablePlugins = rxvt-unicode-plugins;
# Transform the string "self" to the plugin itself.
# It's needed for plugins like bidi who depends on the perl
# package they provide themself.
mkPerlDeps = p:
let deps = p.perlPackages or [ ];
in map (x: if x == "self" then p else x) deps;
# The wrapper is called with a `configure` function
# that takes the urxvt plugins as input and produce
# the configuration of the wrapper: list of plugins,
# extra dependencies and perl dependencies.
# This provides simple way to customize urxvt using
# the `.override` mechanism.
wrapper = { configure, ... }:
let
config = configure { inherit availablePlugins; };
plugins = config.plugins or (builtins.attrValues availablePlugins);
extraDeps = config.extraDeps or [ ];
perlDeps = (config.perlDeps or [ ]) ++ lib.concatMap mkPerlDeps plugins;
in
symlinkJoin {
name = "rxvt-unicode-${rxvt-unicode-unwrapped.version}";
paths = [ rxvt-unicode-unwrapped ] ++ plugins ++ extraDeps;
nativeBuildInputs = [ makeWrapper ];
postBuild = ''
wrapProgram $out/bin/urxvt \
--prefix PERL5LIB : "${perlPackages.makePerlPath perlDeps}" \
--suffix-each URXVT_PERL_LIB ':' "$out/lib/urxvt/perl"
wrapProgram $out/bin/urxvtd \
--prefix PERL5LIB : "${perlPackages.makePerlPath perlDeps}" \
--suffix-each URXVT_PERL_LIB ':' "$out/lib/urxvt/perl"
'';
inherit (rxvt-unicode-unwrapped) meta;
passthru = {
plugins = plugins;
tests.test = nixosTests.terminal-emulators.urxvt;
};
};
in
lib.makeOverridable wrapper { inherit configure; }