#+title: IRC and Bitlbee Interface #+author: Howard X. Abrams #+date: 2020-12-10 #+tags: emacs chat A literate programming configuration file for IRC communiction. #+begin_src emacs-lisp :exports none ;;; ha-irc.el --- configuration for IRC communication. -*- lexical-binding: t; -*- ;; ;; © 2020-2023 Howard X. Abrams ;; Licensed under a Creative Commons Attribution 4.0 International License. ;; See http://creativecommons.org/licenses/by/4.0/ ;; ;; Author: Howard X. Abrams ;; Maintainer: Howard X. Abrams ;; Created: December 10, 2020 ;; ;; This file is not part of GNU Emacs. ;; ;; *NB:* Do not edit this file. Instead, edit the original literate file at: ;; ~/src/hamacs/ha-irc.org ;; And tangle the file to recreate this one. ;; ;;; Code: #+end_src * Introduction My IRC /needs/ are basic, but I'm not sure which I want to use. ** ERC Initial variable configuration for ERC. #+begin_src emacs-lisp (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))) #+end_src I like to make sure the text formats to the size of the window: #+begin_src emacs-lisp (defun ha-erc-resize-text () "Resize the ERC text to fill the current window." (interactive) (setq erc-fill-column (1- (window-width)))) #+end_src Interesting plugins: #+begin_src emacs-lisp (use-package erc-hl-nicks :after erc) (use-package erc-image :after erc) #+end_src * ZNC Server I'm using my own ZNC server, and I need to log in with a password stored in my GPG auth storage: #+begin_src emacs-lisp (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)))) #+end_src * Key Bindings Quick way to start and jump to my IRC world. #+begin_src emacs-lisp :tangle no (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)) #+end_src And some global keys to display them: #+begin_src emacs-lisp (ha-leader "a i" `("irc" . ,(ha-app-perspective "irc" #'ha-erc))) #+end_src And a quick shortcuts to call it: #+begin_src emacs-lisp (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"))))) #+end_src * Display Configuration Using the [[https://github.com/seagle0128/doom-modeline][Doom Modeline]] to add notifications: #+begin_src emacs-lisp (setq doom-modeline-irc t doom-modeline-irc-stylize 'identity) #+end_src * Technical Artifacts :noexport: This will =provide= a code name, so that we can =require= this. #+begin_src emacs-lisp :exports none (provide 'ha-irc) ;;; ha-irc.el ends here #+end_src #+description: A literate programming configuration file for IRC. #+property: header-args:sh :tangle no #+property: header-args:emacs-lisp :tangle yes #+property: header-args :results none :eval no-export :comments no mkdirp yes #+options: num:nil toc:t todo:nil tasks:nil tags:nil date:nil #+options: skip:nil author:nil email:nil creator:nil timestamp:nil #+infojs_opt: view:nil toc:t ltoc:t mouse:underline buttons:0 path:http://orgmode.org/org-info.js