25 march 2023
catdeer haven - Weechat, but with a sane config


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.