WeeChat
ist mein IRC-Frontend: ein Prozess, viele Netzwerke, Logs auf Platte, und ein Config-Baum unter ~/.config/weechat, der seit Jahren mitwächst. Dieser Beitrag dokumentiert die Abweichungen von den Defaults — nicht die Installation, sondern das, was den Client im Alltag erträglich macht, besonders im Zusammenspiel mit dem ZNC + InspIRCd-Setup im Lab (bnc.this-is-fine.social:6697).
Was bewusst nicht Standard ist
| Bereich | Default-Tendenz | Mein Setup |
|---|---|---|
| Startup | Logo-Splash | look.display_logo = off, highmon-Buffer beim Start |
| Layout | Status-Bar sichtbar | status hidden; Channel-Name in title-Bar per Script-Item |
| Buffer | Server-Buffer pro Netzwerk | irc.look.server_buffer = merge_with_core + autosort |
| Rauschen | Alle Joins/Parts sichtbar | irc.look.smart_filter (+ account/chghost/join/quit) |
| Secrets | Klartext in irc.conf | sec-Plugin + pass(1) für Passphrase und Server-Daten |
| Highlights | Nur im Channel | Extra-highmon-Buffer via Trigger |
| History | Nur WeeChat-Defaults | histman mit Patterns für sensible Commands |
Alles Folgende liegt in Dateien unter ~/.config/weechat/.
Netzwerke und ZNC
Vier IRC-Server in irc.conf — drei über Bouncer, einer legacy direkt:
- libera und hackint — gleicher ZNC-Endpunkt (
${sec.data.bnc_addr_port}), verschiedene ZNC-Passwörter, TLS verify mit gepinntem Fingerprint, SASL external, ZNC-Capabilities (znc.in/server-time-iso,znc.in/self-message, …). - local — Lab-Bouncer unter
bnc.this-is-fine.social/+6697(siehe IRC-Lab-Post); TLS verify im LAN aus; Passwort in sec. - quakenet — direkt
irc.quakenet.org/6667ohne TLS; command für QuakeNet-Auth via${sec.data.server_quakenet_q}; autojoin = #clan-rush.
Gemeinsame Defaults in [server_default]: tls_cert auf User-PEM, nicks = ff0x,ff0x_,…, msg_part = “..” / msg_quit = “X_x”, part_closes_buffer = on, pv_buffer = independent.
# irc.conf (Auszug — Secrets redacted)
[server_default]
tls = on
tls_cert = "~/.local/secrets/weechat/ff0x.pem"
nicks = "ff0x,ff0x_,ffOx,ff0xy"
msg_part = ".."
msg_quit = "X_x"
part_closes_buffer = on
pv_buffer = independent
[server]
libera.addresses = "${sec.data.bnc_addr_port}"
libera.password = "ff0x/libera:"
libera.sasl_mechanism = external
libera.capabilities = "account-notify,away-notify,...,znc.in/self-message"
local.addresses = "bnc.this-is-fine.social/+6697"
local.password = "ff0x/local:…" # verschlüsselt in sec.conf
quakenet.addresses = "irc.quakenet.org/6667"
quakenet.tls = off
quakenet.command = "/quote auth ff0x ${sec.data.server_quakenet_q}; /mode ff0x +xw"
passphrase_command = "pass show apps/weechat/passphrase". Nach Rotation: pass oder sec.conf aktualisieren, dann /secure decrypt und Server reconnect.Layout: Bars und Buffer
weechat.conf definiert ein eigenes Bar-Set — die Statuszeile unten ist absichtlich weg; Kontext steckt in der Title-Bar:
+-- buflist (oben) ----------------------------------+
| title: buffer_title | nicklist count | typing |
+-- chat (Mitte) ---------------------+-- nicklist --+
| | (w>200) |
+-- input (unten) --------------------+-------------+
status: hidden (Kontext aus title-Bar)
- buflist oben.
- title über dem Chat — u. a.
buffer_title, Nicklist-Count,matrix_typing_notice(wenn das Script läuft). - nicklist rechts, nur wenn
${window.win_width} > 200. - input unten mit Search/Paste-Indikatoren.
- status existiert, aber
status.hidden = on.
Beim Start kein Logo, dafür gleich der Highlight-Monitor:
[startup]
display_logo = off
command_after_plugins = ";/buffer add highmon"
autosort.conf (v3-Regeln) hält highmon oben, Channels unten:
[v3]
rules = "["${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}"]"
Gespeichertes Layout pinnt Server und highmon in weechat.conf [layout].
Look, Farben, Lesefluss
Wichtige look-Abweichungen:
read_marker = linemit ─ als „zuletzt gelesen“-Trenner.hotlist_*für merged Buffer und Relay-Clients (${info:relay_client_count,...}in Add-Conditions).prefix_*rechtsbündig mit eigenen Join/Quit/Network-Glyphen (>>,<<,--).nick_color_hash = djb2, leere Nick-Prefix/Suffix im Chat (Modes in der Nicklist).- filter blendet numerische 329 (Channel-Creation-Date) aus:
irc_channel_creation_date = on;*;irc_329;*.
Die [color]-Section ist eine volle Grau/Orange-Palette (z. B. chat_highlight_bg = 202, Nick-Grautöne 238–246) — nicht das eingebaute Theme.
Highlight-Monitor (highmon)
Zwei Teile:
- Leerer Buffer highmon (Start + Titel via
buffer_autoset.conf). - Trigger highmon_like kopiert gehighlightete Channel-Privmsgs dorthin mit Server/Channel-Farben:
# trigger.conf (Konzept)
highmon_like.hook = print
highmon_like.conditions = "${tg_highlight} == 1 && ... channel ... irc_privmsg"
Pings an einem Ort — auch wenn der Ziel-Channel-Buffer in der autosort-Reihenfolge vergraben ist.
Trigger: Desktop-Notify und Passwort-Hygiene
Weitere aktive Trigger in trigger.conf:
| Trigger | Rolle |
|---|---|
| beep | Desktop-Notification via notify-send bei Highlight oder PV, nicht notify_none |
| cmd_pass / cmd_pass_register | NickServ/oper-/secure-Passwörter in Input und History verbergen |
| msg_auth | Auth-Substrings in ausgehenden IRC-Messages verbergen |
| server_pass | PASS und Ähnliches verbergen |
| oops | Versehentliches ls im Channel auf /names mappen |
cmd_pass und histman-Patterns landen NickServ- und ZNC-Passwörter in Buffer-History und Log-Dateien — auch nach /secure. Beide Mechanismen aktiv halten.Python / Perl Scripts (aus plugins.conf)
Konfigurierte Script-Optionen (script.conf: autoload an):
- buffer_autohide — inaktive Buffer verstecken; Ausnahmen für
coreund BitlBee. - histman — Buffer-History beim Schließen; global speichern; Duplikate überspringen.
- histsearch — farbige In-Buffer-Suche (
ctrl-rinweechat.conf). - grep — Log-Dateien durchsuchen mit Limits.
- text_item — eigenes chan_name-Bar-Item:
${color:243}${buffer.short_name}. - sysinfo (perl) — optionale Host-Stats in einer Bar (meist Legacy-Toggles).
Zusätzlich ein kleines lokales pv_info-Perl-Script unter ~/projects/weechat/weechat-pv_info/ für PV-Buffer (nicht mit WeeChat ausgeliefert).
Aliases und Keys
alias.conf kürzt Tippen — z. B. wc → ZNC clearbuffer + close, cb → clean all + Buffer schließen, qauth → QuakeNet challenge auth, msgbuf → Command an anderen Buffer.
Keybindings (siehe [key] in weechat.conf):
- meta-j-Grid springt zu Buffern
*1–*99(vim-artig). - meta– / meta-= Filter togglen.
- ctrl-s,ctrl-u alle Buffer unread markieren.
- Maus auf Nicklist → query / kick / ban.
Relay und Logs
relay.conf für TLS vorbereitet (tls_cert_key unter ~/.local/secrets/weechat/relay.pem) mit IRC-Backlog-Optionen — mobile Clients an derselben Session.
logger.conf: auto_log = on, Logs unter ${weechat_data_dir}/logs, flush_delay = 120, Dateinamen lowercase.
Wartung
/setund/fsetstatt Hand-Edit an laufendem WeeChat.- Nach Plugin-Upgrades
plugins.conf/script.confdiffen — WeeChat merged neue Defaults. - ZNC- oder NickServ-Rotation:
sec.conf(oderpass) aktualisieren,/secure decrypt, Server reconnect.
Wenn der Platzhalter-Screenshot ersetzt wird: echtes Bar-Layout — buflist, grau/orange Transcript, Nicklist rechts, Tab highmon.
