diff options
Diffstat (limited to 'pkgs/applications/networking/irc/weechat/wrapper.nix')
-rw-r--r-- | pkgs/applications/networking/irc/weechat/wrapper.nix | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/pkgs/applications/networking/irc/weechat/wrapper.nix b/pkgs/applications/networking/irc/weechat/wrapper.nix new file mode 100644 index 000000000000..1e371bb8e223 --- /dev/null +++ b/pkgs/applications/networking/irc/weechat/wrapper.nix @@ -0,0 +1,80 @@ +{ stdenv, lib, runCommand, writeScriptBin, buildEnv +, pythonPackages, perl, perlPackages +}: + +weechat: + +let + wrapper = { + configure ? { availablePlugins, ... }: { plugins = builtins.attrValues availablePlugins; } + }: + + let + perlInterpreter = perl; + availablePlugins = let + simplePlugin = name: {pluginFile = "${weechat.${name}}/lib/weechat/plugins/${name}.so";}; + in rec { + python = { + pluginFile = "${weechat.python}/lib/weechat/plugins/python.so"; + withPackages = pkgsFun: (python // { + extraEnv = '' + export PYTHONHOME="${pythonPackages.python.withPackages pkgsFun}" + ''; + }); + }; + perl = (simplePlugin "perl") // { + extraEnv = '' + export PATH="${perlInterpreter}/bin:$PATH" + ''; + withPackages = pkgsFun: (perl // { + extraEnv = '' + ${perl.extraEnv} + export PERL5LIB=${lib.makeFullPerlPath (pkgsFun perlPackages)} + ''; + }); + }; + tcl = simplePlugin "tcl"; + ruby = simplePlugin "ruby"; + guile = simplePlugin "guile"; + lua = simplePlugin "lua"; + }; + + config = configure { inherit availablePlugins; }; + + plugins = config.plugins or (builtins.attrValues availablePlugins); + + pluginsDir = runCommand "weechat-plugins" {} '' + mkdir -p $out/plugins + for plugin in ${lib.concatMapStringsSep " " (p: p.pluginFile) plugins} ; do + ln -s $plugin $out/plugins + done + ''; + + init = let + init = builtins.replaceStrings [ "\n" ] [ ";" ] (config.init or ""); + + mkScript = drv: lib.flip map drv.scripts (script: "/script load ${drv}/share/${script}"); + + scripts = builtins.concatStringsSep ";" (lib.foldl (scripts: drv: scripts ++ mkScript drv) + [ ] (config.scripts or [])); + in "${scripts};${init}"; + + mkWeechat = bin: (writeScriptBin bin '' + #!${stdenv.shell} + export WEECHAT_EXTRA_LIBDIR=${pluginsDir} + ${lib.concatMapStringsSep "\n" (p: lib.optionalString (p ? extraEnv) p.extraEnv) plugins} + exec ${weechat}/bin/${bin} "$@" --run-command ${lib.escapeShellArg init} + '') // { + inherit (weechat) name meta; + unwrapped = weechat; + }; + in buildEnv { + name = "weechat-bin-env-${weechat.version}"; + paths = [ + (mkWeechat "weechat") + (mkWeechat "weechat-headless") + ]; + meta = weechat.meta; + }; + +in lib.makeOverridable wrapper |