hamacs/ha-irc.org
Howard Abrams ccb49d5a58 Tangle all configuration files to my elisp directory
Haven't really needed this, as I have a function to load the org file
as Emacs Lisp code directly, but this can be a little helpful for debugging.
2023-07-05 10:22:18 -07:00

5.1 KiB

IRC and Bitlbee Interface

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

  (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 "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 :server "howardabrams.com" :port 7777)
      (sit-for 2)
      (erc-cmd-QUOTE (format "PASS %s:%s" username password))))

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))))

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-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))

And some global keys to display them:

(ha-leader
  "a i" '("irc switch" . ha-irc-persp-switch)
  "a I" '("irc start"  . ha-irc-persp-start))

And a quick shortcuts to call it:

  (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))

Display Configuration

Using the Doom Modeline to add notifications:

  (setq doom-modeline-irc t
        doom-modeline-irc-stylize 'identity)