WeeChat IRC Client¶
WeeChat is a modern, terminal-based IRC client.
Installation¶
apt install weechat weechat-plugins
Configuration¶
Commands to join a chat channel:
/server add somename irc.example.com/6697
/connect somename
/join #somechannel
/nick somenick
Below you find some lines that can be useful to customize your ~/.weechat/irc.conf
.
buffer_switch_autojoin = on
buffer_switch_join = on
highlight_channel = "$nick"
highlight_pv = "$nick"
nick_mode = prefix
server_buffer = merge_with_core
smart_filter_mode = "+"
nick_prefixes = "y:lightred;q:lightred;a:lightcyan;o:lightgreen;h:lightmagenta;v:yellow;*:lightblue"
autoreconnect_delay_max = 600
ban_mask_default = "*!$ident@$host"
whois_double_nick = off
nicks = "<nick>,<nick>_,<nick>__,<your_username>"
ssl_priorities = "NORMAL:-VERS-SSL3.0"
username = "<your_username>"
somename.addresses = "irc.example.com/6697"
somename.ssl = on
somename.autoconnect = on
somename.autojoin = "#somechannel"
Plugins¶
There are plenty of useful plugins to customize weechat, for instance
- buffer.pl: show sidebar with list of buffers
- notify.py: notifications for highlights and private messages
that can be loaded as follows
/script load <scriptname>
If you encounter any errors, you may need to install some dependencies first:
apt install weechat-scripts
apt install python-notify python-notify2
Usage¶
It's best to start weechat in a dedicated GNU screen session:
screen -S weechat
weechat
which you can then detach with Ctrl+A -> Ctrl+D, and re-attach later screen -d -r weechat
.
Relay / Proxy¶
Weechat can act as small irc server to which other clients can connect. This allows to connect GUI and mobile clients to the same weechat back-end to access all irc channels under the same username. When using this you should ensure that the relay is encrypted with an SSL certificate to avoid plain-text traffic over the internet. As this is an advanced topic we only sketch the important steps for the power users.
The following weechat commands activate the IRC proxy
/relay add ssl.irc.example 8001 # activate ssl-encrypted irc relay for the server on port 8001
/set relay.network.passwort <randompassword> # define a password for relay connections
/relay sslcertkey # (re-)load the
/save # save configuration changes
Example snippet to execute when renewing Let's Encrypt certificates to update and reload the file in weechat:
cat /etc/letsencrypt/live/example.com/privkey.pem \
/etc/letsencrypt/live/example.com/fullchain.pem > \
/home/johndoe/.weechat/ssl/relay.pem
chown johndoe:johndoe /home/johndoe/.weechat/ssl/relay.pem
printf '%b' '*/relay sslcertkey\n' > /home/johndoe/.weechat/weechat_fifo_*
Notifications¶
This example shows how to configure separate notification rules per channel. It will set the following notification settings:
- notify about messages in all channels (global server setting)
- always notify in
#important-channel
- never notify in
#crowded-channel
/set weechat.notify.irc.example message
/set weechat.notify.irc.example.#important-channel all
/set weechat.notify.irc.example.#crowded-channel none
Possible options:
Notify level | Level of messages added to hot-list |
---|---|
none |
(none) |
highlight |
highlight + private |
message |
highlight + private + message |
all |
highlight + private + message + low |
Highlights¶
To enable highlights, when a user sends a message important for all users like *: important msg for all...
set the following parameter:
/set weechat.look.highlight_regex ".*\*:.*"
Set extra highlights on buffer¶
You can force highlight using a regular expression with the buffer property highlight_regex
. For example to force the highlight on all messages in the current buffer:
/buffer set highlight_regex .*
The buffer property highlight_regex
is not saved in configuration.
You can easily save it with the script buffer_autoset.py
:
/script install buffer_autoset.py
/help buffer_autoset
# highlight all messages in channel
/buffer_autoset add irc.example.#somechannel highlight_regex .*
# no hilights in channel `monitoring` by nick `xymon`
/buffer_autoset add irc.example.#monitoring hotlist_max_level_nicks_add xymon:0
Save all options:
/save
Filter¶
Enable smart filter for join/part/quit
messages on a specific channel (example: #openldap
):
/filter add irc_smart_openldap irc.freenode.#openldap irc_smart_filter *
You can hide only join or part/quit with following options:
/set irc.look.smart_filter_join on
/set irc.look.smart_filter_quit on
You can setup delay (in minutes), only filter if a nick did not speak during last 5 minutes:
/set irc.look.smart_filter_delay 5
You can use regex to filter any message. For example to filter all server messages for connecting/exiting clients:
/filter add irc_filter_connect_disconnect * * \*\*\* Client (connect|exit)ing:
Get help:
/help filter