WeeChat als IRC-Client: Nicht-Standard ~/.config/weechat

Wie ich WeeChat mit ZNC und dem Lab-IRC-Stack betreibe — Bars, Buffer, Trigger, Secrets und Scripts
Table of contents

Ich nutze WeeChat als IRC-Frontend im Zusammenspiel mit dem ZNC + InspIRCd-Setup im Lab.

WeeChat im Lab — buflist links, grau/orange Transcript, Nicklist rechts, Tab **highmon**.

Setup#

Für die deklarative Konfiguration und den Rollout verwende ich Home-Manager — wie WeeChat dabei als reproduzierbares Nix-Artefakt entsteht und sich am Bouncer einklinkt, habe ich separat beschrieben . Hier geht es um die Konfiguration selbst. Mein Flake zur Verwaltung aller Systeme findest du hier ; einen ausführlicheren Blogpost dazu schreibe ich bei Gelegenheit.

Netzwerke und ZNC#

Vier IRC-Server stehen in irc.conf — drei laufen über den Bouncer, einer (Quakenet, mehr Gewohnheit als Vernunft) direkt:

  • libera, hackint und local — den cluster-internen IRCd — erreiche ich über den ZNC-Bouncer, der unter bnc.this-is-fine.social/+6697 via TLS hängt. Für ZNC aktiviere ich zusätzliche IRC-Capabilities (znc.in/server-time-iso, znc.in/self-message, …).
flowchart LR WC[WeeChat] ZNC[ZNC TLS SASL] LAB[bnc.this-is-fine.social] INSP[InspIRCd hydra] QN[irc.quakenet.org plain] WC --> ZNC WC --> LAB LAB --> INSP WC --> QN
Die Serverpasswörter liegen verschlüsselt in ${sec.data} und die Passphrase hierfür wird beim Startup von WeeChat über pass mit passphrase_command = "pass show apps/weechat/passphrase" entschlüsselt.

Layout: Bars und Buffer#

weechat.conf definiert ein eigenes Bar-Set — die Statuszeile unten ist absichtlich weg; Kontext steckt in der Title-Bar:

1+-- buflist (oben) ----------------------------------+
2| title: buffer_title | nicklist count | typing      |
3+-- chat (Mitte) ---------------------+-- nicklist --+
4|                                     |  (w>200)    |
5+-- input (unten) --------------------+-------------+
6status: hidden (Kontext aus title-Bar)

autosort.conf (v3-Regeln) hält highmon oben, Channels unten:

1[v3]
2rules = "["${if:${buffer.name}==highmon?100:0}", "${if:${buffer.full_name}==core.weechat?0:1}", "${if:${type}==server?0:1}", "${if:${type}==private?0:2}", "${if:${type}==channel?99}"]"

Look, Farben, Lesefluss#

Die [color]-Section ist eine volle Grau/Orange-Palette (z. B. chat_highlight_bg = 202, Nick-Grautöne 238–246) — nicht das eingebaute Theme.

Python Scripts#

Konfigurierte Script-Optionen (script.conf: autoload an):

  • buffer_autohide — Inaktive Buffer verstecken; Ausnahmen für core und BitlBee.
  • histman — Buffer-History beim Schließen; global speichern; Duplikate überspringen.
  • histsearch — Farbige In-Buffer-Suche (ctrl-r in weechat.conf).
  • grep — Log-Dateien durchsuchen mit Limits.
  • text_item — Eigenes chan_name-Bar-Item: ${color:243}${buffer.short_name}.