Conectandose al IRC con GNU Emacs y ERC.
Freenode dejó de existir en 2021 tras un hostile takeover de la red (anuncio del staff original). La comunidad de software libre migró masivamente a Libera.Chat, una nueva red fundada por el staff original de Freenode. Este artículo ha sido actualizado para reflejar la configuración moderna.
Redes IRC actuales para FLOSS:
- Libera.Chat – Reemplazo oficial de Freenode para proyectos de software libre (anuncio oficial)
- OFTC – Red oficial de Debian y otros proyectos
Referencias sobre la migración:
GNU Emacs viene de base con el paquete ERC para poder conectarnos al IRC.
En este artículo publicamos como automatizar el proceso de conectarnos a las redes de Freenode Libera.Chat y OFTC, autenticación de nuestro nick con NickServ, y entrar en los canales que definamos.
A su vez, para más seguridad, las claves van a ser encriptadas con GPG.
Se asume que previamente:
- Se ha configurado GPG en el sistema
- Los usuarios han sido registrados en los respectivos NickServ de cada servidor de IRC
1. Crear el fichero .authinfo
machine irc.freenode.net login **** password ****
machine irc.libera.chat login **** password ****
machine irc.oftc.net login **** password ****
Nota: omitimos los valores reales del nick y el password.
2. Encriptar el fichero .authinfo
Desde Emacs:
M-x epa-encrypt-file
Seleccionamos .authinfo
Esto creará el fichero .authinfo.gpg
Nota 1: El módulo que hace posible esto se llama EasyPG.
Nota 2: A partir de ahora, podemos borrar .authinfo. Cada vez que Emacs abra el fichero .authinfo.gpg lo desencriptará automáticamente para poder editarlo y lo encriptará al guardar.
3. Automatizar la conexión a los servidores de ERC
Doom Emacs:
Añade el código en ~/.doom.d/config.el
Después ejecuta: doom sync y reinicia Emacs
Spacemacs:
Añade el código en ~/.spacemacs dentro de la función dotspacemacs/user-config
Emacs Vanilla (sin distribución):
Añade el código en ~/.emacs o ~/.emacs.d/init.el
use-package (recomendado para configuración modular):
Crea un archivo separado como ~/.emacs.d/lisp/setup-erc.el y cárgalo desde tu init.el con:
(load "~/.emacs.d/lisp/setup-erc.el")
Configuración Básica
;; Lectura de las claves encriptadas en .authinfo.gpg
(setq auth-sources
'((:source "~/.authinfo.gpg")))
(setq erc-autojoin-timing 'ident)
(setq erc-prompt-for-nickserv-password nil)
Entrada automática a los canales de cada servidor IRC
(setq erc-autojoin-channels-alist
'(("freenode.net" "#emacs-es" "#debian" "#nethack"
"libera.chat" "#emacs-es" "#debian" "#nethack" "#emacs" "#guix" "#lisp")
("oftc.net" "#debian-next" "#oftc"
"#debian-mentors" ; Para aspirantes Debian Maintainer
"#debian-devel" ; Desarrollo general Debian
"#debian-multimedia" ; Paquetes multimedia
"#debian-qa" ; Quality Assurance
"#debian-es"))) ; Comunidad Debian española
Identificación con cada servidor
Cambiar el valor del nick apropiadamente en cada caso.
(erc-tls :server "irc.freenode.net" :port 6697 :nick "****")
(erc-tls :server "irc.libera.chat" :port 6697 :nick "****")
(erc-tls :server "irc.oftc.net" :port 6697 :nick "****")
4. Usar certificado personal con OFTC (alternativa a NickServ)
Los archivos
keyfile y certfile generalmente se guardan en:~/.ssl/oftc/ o ~/.config/ssl/oftc/
Reemplaza /path/to/your/keyfile y /path/to/your/certfile con las rutas reales, por ejemplo:
("/home/tuusuario/.ssl/oftc/nick.key" "/home/tuusuario/.ssl/oftc/nick.crt")
Como alternativa a la validación por clave o password, existe la posibilidad de usar certificados para conectarse al servidor.
Para usar un certificado con OFTC: https://www.oftc.net/NickServ/CertFP/
Las instrucciones para versiones Emacs 27 o 28 están aquí: https://www.emacswiki.org/emacs/ErcSSL
Creamos el certificado tal como se indica en la página de oftc.net y añadimos esto a nuestros ficheros init de emacs:
(with-eval-after-load 'erc
;; erc hack for gnutls for client cert.
(defvar *uconf/erc-certs* nil
"erc client certs used by gnutls package for :keylist.")
;; copied from the gnutls lib but set :keylist to client certs.
;; this function is called from `open-network-stream' with :type tls.
(defun uconf/open-gnutls-stream (name buffer host service &optional nowait)
(let ((process (open-network-stream
name buffer host service
:nowait nowait
:tls-parameters
(and nowait
(cons 'gnutls-x509pki
(gnutls-boot-parameters
:type 'gnutls-x509pki
:keylist *uconf/erc-certs* ;;added parameter to pass the cert.
:hostname (puny-encode-domain host)))))))
(if nowait
process
(gnutls-negotiate :process process
:type 'gnutls-x509pki
:keylist *uconf/erc-certs* ;;added parameter to pass the cert.
:hostname (puny-encode-domain host)))))
;; only set the global variable when used from `erc-tls'.
(defun uconf/erc-open-tls-stream (name buffer host port)
(unwind-protect
(progn
(setq *uconf/erc-certs*
'(("/path/to/your/keyfile" "/path/to/your/certfile")))
(open-network-stream name buffer host port
:nowait t
:type 'tls))
(setq *uconf/erc-certs* nil)))
(advice-add 'open-gnutls-stream :override #'uconf/open-gnutls-stream)
(advice-add 'erc-open-tls-stream :override #'uconf/erc-open-tls-stream)
)
Configuración Avanzada (Opcional)
Para Doom Emacs:
Toda esta configuración avanzada va en ~/.doom.d/config.el
Para organización limpia (cualquier Emacs):
Puedes crear un archivo separado ~/.emacs.d/erc-config.el con toda la configuración de ERC y cargarlo desde tu init principal:
;; En tu ~/.emacs o ~/.doom.d/config.el
(when (file-exists-p "~/.emacs.d/erc-config.el")
(load "~/.emacs.d/erc-config.el"))
Esto mantiene tu configuración modular y fácil de mantener.
Logging y Tracking Mejorado
;; Guardar logs de conversaciones
(setq erc-log-channels-directory "~/.erc/logs/"
erc-save-buffer-on-part t
erc-save-queries-on-quit t
erc-log-write-after-send t
erc-log-write-after-insert t)
;; Tracking mejorado - ignora mensajes de sistema
(setq erc-track-exclude-types '("JOIN" "NICK" "PART" "QUIT" "MODE"
"324" "329" "332" "333" "353" "477")
erc-track-enable-keybindings t
erc-track-visibility nil)
;; Timestamps visibles
(setq erc-timestamp-format "[%H:%M]"
erc-insert-timestamp-function 'erc-insert-timestamp-left)
Función de Conexión Rápida
(defun my/erc-connect ()
"Connect to IRC servers."
(interactive)
;; Libera.Chat (reemplaza Freenode)
(erc-tls :server "irc.libera.chat" :port 6697 :nick "tu-nick")
;; OFTC (para Debian)
(erc-tls :server "irc.oftc.net" :port 6697 :nick "tu-nick"))
;; Keybinding para conexión rápida
(global-set-key (kbd "C-c e c") 'my/erc-connect)
Canales Recomendados para Debian Maintainers
En OFTC (irc.oftc.net):
- #debian-mentors – Aspirantes a Debian Developer/Maintainer
- #debian-devel – Desarrollo general de Debian
- #debian-multimedia – Paquetes multimedia (relevante para Stremio, VLC, etc)
- #debian-qa – Quality Assurance y testing
- #debian-es – Comunidad Debian hispanohablante
- #debian-next – Testing y Sid
En Libera.Chat (irc.libera.chat):
- #emacs – Comunidad Emacs general
- #emacs-es – Comunidad Emacs hispanohablante
- #lisp – Common Lisp
- #guix – GNU Guix
Referencias y Recursos
Related posts:
Filed under: emacs - @ May 12, 2020 12:45 pm