Weechat, but with a sane config

25 march 2023

I really like weechat. Out of all the common terminal IRC clients, it’s the most intuitive and easy to use if you’ve set it up right. I’d argue it even holds its own against common GUI clients, like Hexchat.

However, when only considering default configuration, weechat feels clunky at best, especially when you join multiple servers. The buflist turns into a disorganized mess, the, by default, server buffers are a pain to scroll through, and even though it has such a modern-looking UI, mouse support is disabled by default.

What’s worse is that weechat’s config is questionable at best. When launching weechat, its entire default config is written to the user’s config dir. All of it, spread out over multiple files. There are so many options that finding the right option for what you want to do becomes so difficult, asking chatgpt and/or weechat veterans often times the much more preferable option, over digging through weechat’s pages upon pages of documentation.

I’ve used weechat many times over the years, and I know how useable it can be, but with its cryptic configs, I’m never able to remember the most essential lines in need of change. This has lead me to again and again use irssi over weechat, if only because I can’t remember that weechat’s shortcut to enter the “bare” mode to comfortably click/copy links or is Alt + l (lowercase L).

Options in need of change

To not only make it easier for myself, but for others too, to setup weechat once again without having to lug around a tar of config files just for your irc client, I’ll summarize the options that I find most important here.

/set weechat.look.mouse on

In my opinion, one of the most baffling default options. Mouse support, even when enabled, only adds features. Being able to just click on a channel you want to switch to, like you’re used to from discord or slack, is a feature I can’t live without.

/set irc.look.server_buffer independent

The default of having server buffers merged looks to me like some sort of legacy feature, since irssi has the same behaviour. However, not only does my brain work better with having a seperate buffer for each server, it’s also very much necessary for the next two options:

/set irc.look.new_channel_position near_server
/set irc.look.new_pv_position near_server

These two options are very important to me: If you join a new channel, or a new PM buffer is opened, it’ll be put under the server buffer it belongs to. Suddenly, by changing only 3 options, 2 of them being basically the same, the weechat buflist mirrors the tree-like list in, for example, hexchat, without installing any sort of plugin. Weechat is even smart enough to keep channel buffers above PM buffers!

Options in less of a need of change

These options are far less necessary, in part even just purely aesthetic, but I still like them very much.

/set buflist.format.buffer " ${indent}${format_nick_prefix}${color_hotlist}${format_name} "

This option determines how the entries in the buflist are formated. I’ve made 2 changes from the default here:

  1. Remove the buffer number. I only use Alt + Arrows and the mouse to switch channels, so having the numbers displayed is distracting for me at best.
  2. Add a space at the front and back. I have big screens, so I can use some screen real-estate to make the buflist feel a little less cramped.

/set buflist.format.indent " ╰"

Oooo, fancy unicode~ This option is used to indent channels and PMs in the buflist. It’s just two spaces by default. I’ve decided to add this little rounded corner from unicode’s box-drawing characters to further solidify the “tree like list” feel of my buflist.

/set irc.server_default.ipv6 off

This one is a little weird. I mostly use weechat in a screen session on tilde.club, and while doing some first testing, connecting to libera.chat produced some… weird results with this set to on. Ident-check wouldn’t work, libera would complain about too many connections… This one magically fixed it, but I imagine I’ll have to remove that once ipv6 entirely replaces ipv4, which is totally going to happen.

/set irc.server_default.ssl on

Once again one of these questionable defaults. Nowadays, coming across an irc server without ssl/tls is the uncommon option, so changing this default option just makes setting up a new server a little bit easier.

/set irc.server_default.msg_part ""
/set irc.server_default.msg_quit ""

By default, these tell everyone that you’re using weechat when leaving. I like weechat, but not enough to rub it into everyone’s face, so I like to clear those.

Listing all options that differ from default

/fset d

That’s it. This little command was instrumental in writing this blog post, and I have FlashCode from libera’s #weechat channel to thank for pointing it out to me.

Copy / Raw / Bare Mode

I’ve mentioned it earlier, but I feel like writing a section just for this. Weechat calls it bare-mode, and I keep remembering it as raw-mode, making successful searches rather difficult. The keyboard shortcut is Alt + l (lowercase L), and you use the same shortcut to leave that mode.

Adding Servers

I’m rather forgetful, and read-lazy, so instead of reading through the help/remember a bunch of options, I add servers by first proving as little information as possible, then open fset to scroll through options I need to change:

/server add libera libera.chat/6697
/fset server.libera

For libera specifically, all I needed to do was slap my username and password into the sasl config to get authenticated while connecting, SSL was already enabled thanks to one of the options from before.