aboutsummaryrefslogtreecommitdiff
path: root/infra/libkookie/nixpkgs/pkgs/applications/terminal-emulators/rxvt-unicode/wrapper.nix
diff options
context:
space:
mode:
Diffstat (limited to 'infra/libkookie/nixpkgs/pkgs/applications/terminal-emulators/rxvt-unicode/wrapper.nix')
-rw-r--r--infra/libkookie/nixpkgs/pkgs/applications/terminal-emulators/rxvt-unicode/wrapper.nix58
1 files changed, 58 insertions, 0 deletions
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/terminal-emulators/rxvt-unicode/wrapper.nix b/infra/libkookie/nixpkgs/pkgs/applications/terminal-emulators/rxvt-unicode/wrapper.nix
new file mode 100644
index 000000000000..b03acb99530a
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/applications/terminal-emulators/rxvt-unicode/wrapper.nix
@@ -0,0 +1,58 @@
+{ callPackage
+, symlinkJoin
+, makeWrapper
+, lib
+, rxvt-unicode-unwrapped
+, rxvt-unicode-plugins
+, perlPackages
+, 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;
+
+ buildInputs = [ 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"
+ '';
+
+ passthru.plugins = plugins;
+ };
+
+in
+ lib.makeOverridable wrapper { inherit configure; }