Files
Dark Steveneq 646b892680
Some checks failed
Periodic Merges (6h) / master → staging-nixos (push) Failing after 12m50s
Periodic Merges (6h) / master → staging-next (push) Failing after 12m54s
Periodic Merges (24h) / merge-base(master,staging) → haskell-updates (push) Failing after 11m54s
Periodic Merges (6h) / staging-next → staging (push) Failing after 12m13s
Periodic Merges (24h) / staging-next-25.05 → staging-25.05 (push) Failing after 13m24s
Periodic Merges (24h) / release-25.05 → staging-next-25.05 (push) Failing after 14m28s
push sheeet
2025-10-09 14:15:47 +02:00

130 lines
3.6 KiB
Nix

{
lib,
runCommand,
writeScriptBin,
buildEnv,
python3Packages,
perlPackages,
runtimeShell,
}:
weechat:
let
wrapper =
{
installManPages ? true,
configure ?
{ availablePlugins, ... }:
{
# Do not include PHP by default, because it bloats the closure, doesn't
# build on Darwin, and there are no official PHP scripts.
plugins = builtins.attrValues (removeAttrs availablePlugins [ "php" ]);
},
}:
let
perlInterpreter = perlPackages.perl;
availablePlugins =
let
simplePlugin = name: { pluginFile = "${weechat.${name}}/lib/weechat/plugins/${name}.so"; };
in
rec {
python = (simplePlugin "python") // {
extraEnv = ''
export PATH="${python3Packages.python}/bin:$PATH"
'';
withPackages =
pkgsFun:
(
python
// {
extraEnv = ''
${python.extraEnv}
export PYTHONHOME="${python3Packages.python.withPackages pkgsFun}"
'';
}
);
};
perl = (simplePlugin "perl") // {
extraEnv = ''
export PATH="${perlInterpreter}/bin:$PATH"
'';
withPackages =
pkgsFun:
(
perl
// {
extraEnv = ''
${perl.extraEnv}
export PERL5LIB=${perlPackages.makeFullPerlPath (pkgsFun perlPackages)}
'';
}
);
};
tcl = simplePlugin "tcl";
ruby = simplePlugin "ruby";
guile = simplePlugin "guile";
lua = simplePlugin "lua";
php = simplePlugin "php";
};
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.forEach 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 ''
#!${runtimeShell}
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 man;
unwrapped = weechat;
outputs = [
"out"
"man"
];
};
in
buildEnv {
name = "weechat-bin-env-${weechat.version}";
extraOutputsToInstall = lib.optionals installManPages [ "man" ];
paths = [
(mkWeechat "weechat")
(mkWeechat "weechat-headless")
(runCommand "weechat-out-except-bin" { } ''
mkdir $out
ln -sf ${weechat}/include $out/include
ln -sf ${weechat}/lib $out/lib
ln -sf ${weechat}/share $out/share
'')
];
meta = removeAttrs weechat.meta [ "outputsToInstall" ];
};
in
lib.makeOverridable wrapper