IRC and Bitlbee Interface
Table of Contents
A literate programming configuration file for IRC communiction.
Introduction
My IRC needs are basic, but I’m not sure which I want to use.
ERC
Initial variable configuration for ERC.
(use-package erc :config (setq erc-nick "howard-abrams" erc-user-full-name "Howard Abrams" erc-server "irc.libera.chat") (seq-let (username password) (auth-source-user-and-password "irc.libera.chat") (setq erc-session-username username erc-session-password password erc-password password)) (setq erc-prompt ">>" erc-prompt-for-nickserv-password nil erc-auto-query 'bury erc-join-buffer 'bury erc-interpret-mirc-color t erc-rename-buffers t erc-hide-list '("JOIN" "PART" "QUIT") erc-track-enable-keybindings nil erc-track-visibility nil ; Only use the selected frame for visibility erc-fill-column 120 erc-fill-function 'erc-fill-static erc-fill-static-center 20 erc-timestamp-only-if-changed-flag nil ;; erc-timestamp-format "%H:%M" erc-autojoin-channels-alist '((".*" "#emacs" "#org-mode")) erc-quit-reason (lambda (s) (or s "Fading out...")) erc-modules '(autoaway autojoin button completion fill irccontrols keep-place list match menu move-to-prompt netsplit networks noncommands readonly ring stamp track hl-nicks)))
I like to make sure the text formats to the size of the window:
(defun ha-erc-resize-text () "Resize the ERC text to fill the current window." (interactive) (setq erc-fill-column (1- (window-width))))
Interesting plugins:
(use-package erc-hl-nicks :after erc) (use-package erc-image :after erc)
ZNC Server
I’m using my own ZNC server, and I need to log in with a password stored in my GPG auth storage:
(defun ha-erc-reconnect-password () "Send the reconnection password string." (interactive) (let* ((auth-results (auth-source-search :host "howardabrams.com" :port 7777 :max 1)) (auth-first (first auth-results)) (username (plist-get auth-first :user)) (password (funcall (plist-get auth-first :secret)))) (erc-cmd-QUOTE (format "PASS %s:%s" username password))))
Key Bindings
Quick way to start and jump to my IRC world.
(defun ha-irc () (interactive) (erc :server "irc.libera.chat" :port 6667 :full-name erc-user-full-name :nick erc-nick :user erc-session-username :password erc-session-password))
And some global keys to display them:
(ha-leader "a i" `("irc" . ,(ha-app-perspective "irc" #'ha-erc)))
And a quick shortcuts to call it:
(use-package major-mode-hydra :after erc :config (major-mode-hydra-define erc-mode nil ("Server" (("r" erc-server-reconnect "reconnect") ("p" ha-erc-reconnect-password "send password")) "Channel" (("o" erc-track-switch-buffer "next channel") ("j" erc-join-channel "join channel") ("w" ha-erc-resize-text "resize text")))))
Display Configuration
Using the Doom Modeline to add notifications:
(setq doom-modeline-irc t doom-modeline-irc-stylize 'identity)