diff --git a/doc/package-notes.xml b/doc/package-notes.xml
index c2aef8937b0..1f088e8aaa0 100644
--- a/doc/package-notes.xml
+++ b/doc/package-notes.xml
@@ -671,6 +671,8 @@ overrides = super: self: rec {
plugins = with availablePlugins; [ python perl ];
}
}
+ If the configure function returns an attrset without the plugins
+ attribute, availablePlugins will be used automatically.
@@ -704,6 +706,55 @@ overrides = super: self: rec {
}; }
+
+ WeeChat allows to set defaults on startup using the --run-command.
+ The configure method can be used to pass commands to the program:
+weechat.override {
+ configure = { availablePlugins, ... }: {
+ init = ''
+ /set foo bar
+ /server add freenode chat.freenode.org
+ '';
+ };
+}
+ Further values can be added to the list of commands when running
+ weechat --run-command "your-commands".
+
+
+ Additionally it's possible to specify scripts to be loaded when starting weechat.
+ These will be loaded before the commands from init:
+weechat.override {
+ configure = { availablePlugins, ... }: {
+ scripts = with pkgs.weechatScripts; [
+ weechat-xmpp weechat-matrix-bridge wee-slack
+ ];
+ init = ''
+ /set plugins.var.python.jabber.key "val"
+ '':
+ };
+}
+
+
+ In nixpkgs there's a subpackage which contains derivations for
+ WeeChat scripts. Such derivations expect a passthru.scripts attribute
+ which contains a list of all scripts inside the store path. Furthermore all scripts
+ have to live in $out/share. An exemplary derivation looks like this:
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation {
+ name = "exemplary-weechat-script";
+ src = fetchurl {
+ url = "https://scripts.tld/your-scripts.tar.gz";
+ sha256 = "...";
+ };
+ passthru.scripts = [ "foo.py" "bar.lua" ];
+ installPhase = ''
+ mkdir $out/share
+ cp foo.py $out/share
+ cp bar.lua $out/share
+ '';
+}
+
Citrix Receiver
diff --git a/pkgs/applications/networking/irc/weechat/aggregate-commands.patch b/pkgs/applications/networking/irc/weechat/aggregate-commands.patch
new file mode 100644
index 00000000000..41e3c54a2d5
--- /dev/null
+++ b/pkgs/applications/networking/irc/weechat/aggregate-commands.patch
@@ -0,0 +1,110 @@
+diff --git a/src/core/wee-command.c b/src/core/wee-command.c
+index 91c3c068d..8105e4171 100644
+--- a/src/core/wee-command.c
++++ b/src/core/wee-command.c
+@@ -8345,10 +8345,20 @@ command_exec_list (const char *command_list)
+ void
+ command_startup (int plugins_loaded)
+ {
++ int i;
++
+ if (plugins_loaded)
+ {
+ command_exec_list (CONFIG_STRING(config_startup_command_after_plugins));
+- command_exec_list (weechat_startup_commands);
++ if (weechat_startup_commands)
++ {
++ for (i = 0; i < weelist_size (weechat_startup_commands); i++)
++ {
++ command_exec_list (
++ weelist_string (
++ weelist_get (weechat_startup_commands, i)));
++ }
++ }
+ }
+ else
+ command_exec_list (CONFIG_STRING(config_startup_command_before_plugins));
+diff --git a/src/core/weechat.c b/src/core/weechat.c
+index f74598ad5..ff2e539d1 100644
+--- a/src/core/weechat.c
++++ b/src/core/weechat.c
+@@ -60,6 +60,7 @@
+ #include "wee-eval.h"
+ #include "wee-hdata.h"
+ #include "wee-hook.h"
++#include "wee-list.h"
+ #include "wee-log.h"
+ #include "wee-network.h"
+ #include "wee-proxy.h"
+@@ -102,7 +103,8 @@ int weechat_no_gnutls = 0; /* remove init/deinit of gnutls */
+ /* (useful with valgrind/electric-f.)*/
+ int weechat_no_gcrypt = 0; /* remove init/deinit of gcrypt */
+ /* (useful with valgrind) */
+-char *weechat_startup_commands = NULL; /* startup commands (-r flag) */
++struct t_weelist *weechat_startup_commands = NULL; /* startup commands */
++ /* (option -r) */
+
+
+ /*
+@@ -152,9 +154,13 @@ weechat_display_usage ()
+ " -h, --help display this help\n"
+ " -l, --license display WeeChat license\n"
+ " -p, --no-plugin don't load any plugin at startup\n"
+- " -r, --run-command run command(s) after startup\n"
+- " (many commands can be separated by "
+- "semicolons)\n"
++ " -P, --plugins load only these plugins at startup\n"
++ " (see /help weechat.plugin.autoload)\n"
++ " -r, --run-command run command(s) after startup;\n"
++ " many commands can be separated by "
++ "semicolons,\n"
++ " this option can be given multiple "
++ "times\n"
+ " -s, --no-script don't load any script at startup\n"
+ " --upgrade upgrade WeeChat using session files "
+ "(see /help upgrade in WeeChat)\n"
+@@ -276,9 +282,10 @@ weechat_parse_args (int argc, char *argv[])
+ {
+ if (i + 1 < argc)
+ {
+- if (weechat_startup_commands)
+- free (weechat_startup_commands);
+- weechat_startup_commands = strdup (argv[++i]);
++ if (!weechat_startup_commands)
++ weechat_startup_commands = weelist_new ();
++ weelist_add (weechat_startup_commands, argv[++i],
++ WEECHAT_LIST_POS_END, NULL);
+ }
+ else
+ {
+@@ -616,6 +623,8 @@ weechat_shutdown (int return_code, int crash)
+ free (weechat_home);
+ if (weechat_local_charset)
+ free (weechat_local_charset);
++ if (weechat_startup_commands)
++ weelist_free (weechat_startup_commands);
+
+ if (crash)
+ abort ();
+diff --git a/src/core/weechat.h b/src/core/weechat.h
+index 9420ff415..cbb565a03 100644
+--- a/src/core/weechat.h
++++ b/src/core/weechat.h
+@@ -96,6 +96,8 @@
+ /* name of environment variable with an extra lib dir */
+ #define WEECHAT_EXTRA_LIBDIR "WEECHAT_EXTRA_LIBDIR"
+
++struct t_weelist;
++
+ /* global variables and functions */
+ extern int weechat_headless;
+ extern int weechat_debug_core;
+@@ -112,7 +114,7 @@ extern char *weechat_local_charset;
+ extern int weechat_plugin_no_dlclose;
+ extern int weechat_no_gnutls;
+ extern int weechat_no_gcrypt;
+-extern char *weechat_startup_commands;
++extern struct t_weelist *weechat_startup_commands;
+
+ extern void weechat_term_check ();
+ extern void weechat_shutdown (int return_code, int crash);
diff --git a/pkgs/applications/networking/irc/weechat/default.nix b/pkgs/applications/networking/irc/weechat/default.nix
index 16162435e09..eaf7410a317 100644
--- a/pkgs/applications/networking/irc/weechat/default.nix
+++ b/pkgs/applications/networking/irc/weechat/default.nix
@@ -12,7 +12,8 @@
, tclSupport ? true, tcl
, extraBuildInputs ? []
, configure ? { availablePlugins, ... }: { plugins = builtins.attrValues availablePlugins; }
-, runCommand }:
+, runCommand, buildEnv
+}:
let
inherit (pythonPackages) python;
@@ -29,12 +30,12 @@ let
weechat =
assert lib.all (p: p.enabled -> ! (builtins.elem null p.buildInputs)) plugins;
stdenv.mkDerivation rec {
- version = "2.1";
+ version = "2.2";
name = "weechat-${version}";
src = fetchurl {
url = "http://weechat.org/files/src/weechat-${version}.tar.bz2";
- sha256 = "0fq68wgynv2c3319gmzi0lz4ln4yrrk755y5mbrlr7fc1sx7ffd8";
+ sha256 = "0p4nhh7f7w4q77g7jm9i6fynndqlgjkc9dk5g1xb4gf9imiisqlg";
};
outputs = [ "out" "man" ] ++ map (p: p.name) enabledPlugins;
@@ -69,6 +70,13 @@ let
done
'';
+ # remove when bumping to the latest version.
+ # This patch basically rebases `fcf7469d7664f37e94d5f6d0b3fe6fce6413f88c`
+ # from weechat upstream to weechat-2.2.
+ patches = [
+ ./aggregate-commands.patch
+ ];
+
meta = {
homepage = http://www.weechat.org/;
description = "A fast, light and extensible chat client";
@@ -78,38 +86,38 @@ let
on https://nixos.org/nixpkgs/manual/#sec-weechat .
'';
license = stdenv.lib.licenses.gpl3;
- maintainers = with stdenv.lib.maintainers; [ lovek323 garbas the-kenny lheckemann ];
+ maintainers = with stdenv.lib.maintainers; [ lovek323 garbas the-kenny lheckemann ma27 ];
platforms = stdenv.lib.platforms.unix;
};
};
in if configure == null then weechat else
let
perlInterpreter = perl;
- config = configure {
- 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") // {
+ 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 PATH="${perlInterpreter}/bin:$PATH"
+ export PYTHONHOME="${pythonPackages.python.withPackages pkgsFun}"
'';
- };
- tcl = simplePlugin "tcl";
- ruby = simplePlugin "ruby";
- guile = simplePlugin "guile";
- lua = simplePlugin "lua";
+ });
};
+ perl = (simplePlugin "perl") // {
+ extraEnv = ''
+ export PATH="${perlInterpreter}/bin:$PATH"
+ '';
+ };
+ tcl = simplePlugin "tcl";
+ ruby = simplePlugin "ruby";
+ guile = simplePlugin "guile";
+ lua = simplePlugin "lua";
};
- inherit (config) plugins;
+ config = configure { inherit availablePlugins; };
+
+ plugins = config.plugins or (builtins.attrValues availablePlugins);
pluginsDir = runCommand "weechat-plugins" {} ''
mkdir -p $out/plugins
@@ -117,13 +125,29 @@ in if configure == null then weechat else
ln -s $plugin $out/plugins
done
'';
- in (writeScriptBin "weechat" ''
- #!${stdenv.shell}
- export WEECHAT_EXTRA_LIBDIR=${pluginsDir}
- ${lib.concatMapStringsSep "\n" (p: lib.optionalString (p ? extraEnv) p.extraEnv) plugins}
- exec ${weechat}/bin/weechat "$@"
- '') // {
- name = weechat.name;
- unwrapped = weechat;
- meta = weechat.meta;
+
+ 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}\n${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 "${init}"
+ '') // {
+ inherit (weechat) name meta;
+ unwrapped = weechat;
+ };
+ in buildEnv {
+ name = "weechat-bin-env";
+ paths = [
+ (mkWeechat "weechat")
+ (mkWeechat "weechat-headless")
+ ];
}
diff --git a/pkgs/applications/networking/irc/weechat/scripts/default.nix b/pkgs/applications/networking/irc/weechat/scripts/default.nix
new file mode 100644
index 00000000000..2a524bc4efa
--- /dev/null
+++ b/pkgs/applications/networking/irc/weechat/scripts/default.nix
@@ -0,0 +1,11 @@
+{ callPackage, luaPackages, pythonPackages }:
+
+{
+ weechat-xmpp = callPackage ./weechat-xmpp {
+ inherit (pythonPackages) pydns;
+ };
+
+ weechat-matrix-bridge = callPackage ./weechat-matrix-bridge {
+ inherit (luaPackages) cjson;
+ };
+}
diff --git a/pkgs/applications/networking/instant-messengers/weechat-matrix-bridge/default.nix b/pkgs/applications/networking/irc/weechat/scripts/weechat-matrix-bridge/default.nix
similarity index 96%
rename from pkgs/applications/networking/instant-messengers/weechat-matrix-bridge/default.nix
rename to pkgs/applications/networking/irc/weechat/scripts/weechat-matrix-bridge/default.nix
index 4a8ffaaa261..1018e46ec62 100644
--- a/pkgs/applications/networking/instant-messengers/weechat-matrix-bridge/default.nix
+++ b/pkgs/applications/networking/irc/weechat/scripts/weechat-matrix-bridge/default.nix
@@ -25,6 +25,8 @@ stdenv.mkDerivation {
--replace "__NIX_LIB_PATH__" "$out/lib/?.so"
'';
+ passthru.scripts = [ "olm.lua" "matrix.lua" ];
+
installPhase = ''
mkdir -p $out/{share,lib}
diff --git a/pkgs/applications/networking/instant-messengers/weechat-matrix-bridge/library-path.patch b/pkgs/applications/networking/irc/weechat/scripts/weechat-matrix-bridge/library-path.patch
similarity index 100%
rename from pkgs/applications/networking/instant-messengers/weechat-matrix-bridge/library-path.patch
rename to pkgs/applications/networking/irc/weechat/scripts/weechat-matrix-bridge/library-path.patch
diff --git a/pkgs/applications/networking/instant-messengers/weechat-xmpp/default.nix b/pkgs/applications/networking/irc/weechat/scripts/weechat-xmpp/default.nix
similarity index 95%
rename from pkgs/applications/networking/instant-messengers/weechat-xmpp/default.nix
rename to pkgs/applications/networking/irc/weechat/scripts/weechat-xmpp/default.nix
index 4b92d1212c5..dad5b9c5e02 100644
--- a/pkgs/applications/networking/instant-messengers/weechat-xmpp/default.nix
+++ b/pkgs/applications/networking/irc/weechat/scripts/weechat-xmpp/default.nix
@@ -25,6 +25,8 @@ stdenv.mkDerivation {
})
];
+ passthru.scripts = [ "jabber.py" ];
+
meta = with stdenv.lib; {
description = "A fork of the jabber plugin for weechat";
homepage = "https://github.com/sleduc/weechat-xmpp";
diff --git a/pkgs/applications/networking/instant-messengers/weechat-xmpp/libpath.patch b/pkgs/applications/networking/irc/weechat/scripts/weechat-xmpp/libpath.patch
similarity index 100%
rename from pkgs/applications/networking/instant-messengers/weechat-xmpp/libpath.patch
rename to pkgs/applications/networking/irc/weechat/scripts/weechat-xmpp/libpath.patch
diff --git a/pkgs/top-level/aliases.nix b/pkgs/top-level/aliases.nix
index c05f01ec839..fed02f40134 100644
--- a/pkgs/top-level/aliases.nix
+++ b/pkgs/top-level/aliases.nix
@@ -292,6 +292,8 @@ mapAliases ({
vimprobable2Wrapper = vimprobable2; # added 2015-01
virtviewer = virt-viewer; # added 2015-12-24
vorbisTools = vorbis-tools; # added 2016-01-26
+ weechat-xmpp = weechatScripts.weechat-xmpp; # added 2018-09-06
+ weechat-matrix-bridge = weechatScripts.weechat-matrix-bridge; # added 2018-09-06
wineStaging = wine-staging; # added 2018-01-08
winusb = woeusb; # added 2017-12-22
wireguard = wireguard-tools; # added 2018-05-19
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index 38755b611e5..c630965604c 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -19175,13 +19175,7 @@ with pkgs;
guile = guile_2_0;
};
- weechat-matrix-bridge = callPackage ../applications/networking/instant-messengers/weechat-matrix-bridge {
- inherit (luaPackages) cjson;
- };
-
- weechat-xmpp = callPackage ../applications/networking/instant-messengers/weechat-xmpp {
- inherit (pythonPackages) pydns;
- };
+ weechatScripts = callPackage ../applications/networking/irc/weechat/scripts { };
westonLite = weston.override {
pango = null;