2022-03-10 19:43:29 +00:00
# WeeChat {#sec-weechat}
2020-11-29 05:33:08 +00:00
2022-03-10 19:43:29 +00:00
WeeChat can be configured to include your choice of plugins, reducing its closure size from the default configuration which includes all available plugins. To make use of this functionality, install an expression that overrides its configuration, such as:
2020-11-29 05:33:08 +00:00
```nix
2024-03-27 18:10:27 +00:00
weechat.override {configure = ({availablePlugins, ...}: {
2020-11-29 05:33:08 +00:00
plugins = with availablePlugins; [ python perl ];
2024-03-27 18:10:27 +00:00
});
2020-11-29 05:33:08 +00:00
}
```
If the `configure` function returns an attrset without the `plugins` attribute, `availablePlugins` will be used automatically.
The plugins currently available are `python` , `perl` , `ruby` , `guile` , `tcl` and `lua` .
2022-03-10 19:43:29 +00:00
The Python and Perl plugins allows the addition of extra libraries. For instance, the `inotify.py` script in `weechat-scripts` requires D-Bus or libnotify, and the `fish.py` script requires `pycrypto` . To use these scripts, use the plugin's `withPackages` attribute:
2020-11-29 05:33:08 +00:00
```nix
weechat.override { configure = {availablePlugins, ...}: {
plugins = with availablePlugins; [
(python.withPackages (ps: with ps; [ pycrypto python-dbus ]))
];
};
}
```
In order to also keep all default plugins installed, it is possible to use the following method:
```nix
weechat.override { configure = { availablePlugins, ... }: {
plugins = builtins.attrValues (availablePlugins // {
python = availablePlugins.python.withPackages (ps: with ps; [ pycrypto python-dbus ]);
});
}; }
```
WeeChat allows to set defaults on startup using the `--run-command` . The `configure` method can be used to pass commands to the program:
```nix
weechat.override {
configure = { availablePlugins, ... }: {
init = ''
/set foo bar
2021-06-19 16:23:15 +00:00
/server add libera irc.libera.chat
2020-11-29 05:33:08 +00:00
'';
};
}
```
Further values can be added to the list of commands when running `weechat --run-command "your-commands"` .
2022-03-10 19:43:29 +00:00
Additionally, it's possible to specify scripts to be loaded when starting `weechat` . These will be loaded before the commands from `init` :
2020-11-29 05:33:08 +00:00
```nix
weechat.override {
configure = { availablePlugins, ... }: {
scripts = with pkgs.weechatScripts; [
weechat-xmpp weechat-matrix-bridge wee-slack
];
init = ''
/set plugins.var.python.jabber.key "val"
2024-03-27 18:10:27 +00:00
'';
2020-11-29 05:33:08 +00:00
};
}
```
2022-03-10 19:43:29 +00:00
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:
2020-11-29 05:33:08 +00:00
```nix
{ stdenv, fetchurl }:
stdenv.mkDerivation {
name = "exemplary-weechat-script";
src = fetchurl {
url = "https://scripts.tld/your-scripts.tar.gz";
doc: use sri hash syntax
The nixpkgs manual contains references to both sri hash and explicit
sha256 attributes. This is at best confusing to new users. Since the
final destination is exclusive use of sri hashes, see nixos/rfcs#131,
might as well push new users in that direction gently.
Notable exceptions to sri hash support are builtins.fetchTarball,
cataclysm-dda, coq, dockerTools.pullimage, elixir.override, and
fetchCrate. None, other than builtins.fetchTarball, are fundamentally
incompatible, but all currently accept explicit sha256 attributes as
input. Because adding backwards compatibility is out of scope for this
change, they have been left intact, but migration to sri format has been
made for any using old hash formats.
All hashes have been manually tested to be accurate, and updates were
only made for missing upstream artefacts or bugs.
2022-12-03 19:49:00 +00:00
hash = "...";
2020-11-29 05:33:08 +00:00
};
passthru.scripts = [ "foo.py" "bar.lua" ];
installPhase = ''
mkdir $out/share
cp foo.py $out/share
cp bar.lua $out/share
'';
}
```