Etiqueta: irc

  • Conectandose al IRC con GNU Emacs y ERC.

    ⚠️ Actualización Octubre 2025:
    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

    📁 ¿Dónde poner esta configuración?

    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)

    📁 Ubicación del certificado:
    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)

    💡 Nota sobre configuración modular:

    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

Creative Commons License
Except where otherwise noted, the content on this site is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.