#+TITLE: IRC and Bitlbee Interface #+AUTHOR: Howard X. Abrams #+DATE: 2020-12-10 #+FILETAGS: :emacs: 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-2022 Howard X. Abrams ;; This work is 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. ** Circe The [[https://github.com/emacs-circe/circe][circe project]] (see the [[http://www.nongnu.org/circe/][old site]]) looks intriguing, and is still supported. See the [[https://github.com/emacs-circe/circe/wiki][wiki documentation]], but it has good defaults. #+BEGIN_SRC emacs-lisp (use-package circe :init (setq circe-reduce-lurker-spam t lui-flyspell-p t circe-network-options '(("howardabrams.com" :tls nil :nick "howard-abrams" :port 7777 :sasl-username "howard-abrams"))) :config ;; Trick to ignore the PART and QUIT messages: (circe-set-display-handler "PART" (lambda (&rest ignored) nil)) (circe-set-display-handler "QUIT" (lambda (&rest ignored) nil)) (require 'circe-color-nicks) (enable-circe-color-nicks)) #+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-circe-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)))) (circe-command-QUOTE (format "PASS %s:%s" username password)))) #+END_SRC But now we can call both the reconnect, as well as the password: #+BEGIN_SRC emacs-lisp (defun ha-circe-reconnect () "Overlay interface to reconnect to my IRC server." (interactive) (circe-reconnect) (sit-for 3) (ha-circe-reconnect-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") (circe "howardabrams.com")) (defun ha-irc-persp-switch () "Switch to the IRC workspace and load the next buffer." (interactive) (persp-switch "irc") (tracking-next-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 Let's create a leader for this mode: #+BEGIN_SRC emacs-lisp (general-create-definer ha-circe-leader :states '(normal visual motion) :keymaps '(circe-channel-mode-map circe-server-mode-map) :prefix "SPC m" :global-prefix "" :non-normal-prefix "S-SPC") #+END_SRC And a quick shortcut to call it: #+BEGIN_SRC emacs-lisp (ha-circe-leader "o" '("next channel" . tracking-next-buffer) "r" '("reconnect" . ha-circe-reconnect) "p" '("send password" . ha-circe-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) (setq 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:nil todo:nil tasks:nil tags:nil date:nil #+OPTIONS: skip:nil author:nil email:nil creator:nil timestamp:nil #+INFOJS_OPT: view:nil toc:nil ltoc:t mouse:underline buttons:0 path:http://orgmode.org/org-info.js