#+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: ;; ~/other/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 #+begin_src emacs-lisp (use-package erc-hl-nicks :after erc) (use-package erc-image :after erc) (use-package erc :commands erc :config (setq erc-nick "howard-abrams" erc-user-full-name "Howard Abrams" 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 '(("howardabrams.com" "#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))) (defun ha-erc-connect-irc () "Connect to my favorite IRC server with ERC." (interactive) (let* ((auth-results (auth-source-search :host "irc.libera.chat" :port 6667 :max 1)) (auth-first (first auth-results)) (username (plist-get auth-first :user)) (password (funcall (plist-get auth-first :secret)))) (erc :server "irc.libera.chat" :port 6667) (sit-for 2) (erc-cmd-QUOTE (format "PASS %s:%s" username password)))) #+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 * 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 (defun ha-irc-persp-start () "Create an IRC workspace and start my IRC client." (interactive) (persp-switch "irc") (ha-erc-connect-irc)) (defun ha-irc-persp-switch () "Switch to the IRC workspace and load the next buffer." (interactive) (persp-switch "irc") (call-interactively 'erc-track-switch-buffer)) #+end_src And some global keys to display them: #+begin_src emacs-lisp (ha-leader "a i" '("irc switch" . ha-irc-persp-switch) "a I" '("irc start" . ha-irc-persp-start)) #+end_src And a quick shortcuts to call it: #+begin_src emacs-lisp (ha-local-leader :keymaps '(erc-mode-map) "o" '("next channel" . erc-track-switch-buffer) "w" '("resize text" . ha-erc-resize-text) "r" '("reconnect" . ha-erc-connect-irc) "p" '("send password" . ha-erc-reconnect-password)) #+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