summaryrefslogtreecommitdiffstats
path: root/.emacs.d/lisp/bandali-erc.el
diff options
context:
space:
mode:
authorAmin Bandali <bandali@kelar.org>2025-01-30 22:55:32 -0500
committerAmin Bandali <bandali@kelar.org>2025-01-30 22:55:32 -0500
commitc7b47e03e0ac16d6db84d59d8cff58291b22fbaa (patch)
tree64997f5e10d25897966d496d905aa6ff835f5f94 /.emacs.d/lisp/bandali-erc.el
parent563fb78037f21c6503c6489758e8f0d86173bb7e (diff)
downloadconfigs-c7b47e03e0ac16d6db84d59d8cff58291b22fbaa.tar.gz
configs-c7b47e03e0ac16d6db84d59d8cff58291b22fbaa.tar.xz
configs-c7b47e03e0ac16d6db84d59d8cff58291b22fbaa.zip
Break out .emacs.d/init.el into .emacs.d/lisp/bandali-*.el again
Having used the monolithic init.el approach, I found it somewhat unwieldy, especially as the file grows larger and larger.
Diffstat (limited to '')
-rw-r--r--.emacs.d/lisp/bandali-erc.el151
1 files changed, 151 insertions, 0 deletions
diff --git a/.emacs.d/lisp/bandali-erc.el b/.emacs.d/lisp/bandali-erc.el
new file mode 100644
index 0000000..7e79329
--- /dev/null
+++ b/.emacs.d/lisp/bandali-erc.el
@@ -0,0 +1,151 @@
+;;; bandali-erc.el --- bandali's ERC setup -*- lexical-binding: t; -*-
+
+;; Copyright (c) 2018-2025 Amin Bandali <bandali@gnu.org>
+
+;; Author: Amin Bandali <bandali@gnu.org>
+;; Keywords: IRC, chat, client, Internet
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; My ERC setup for IRC in GNU Emacs.
+
+;;; Code:
+
+(with-eval-after-load 'erc
+ (setopt
+ erc-auto-query 'bury
+ erc-autojoin-domain-only nil
+ erc-dcc-get-default-directory (b/emacs.d "erc-dcc")
+ erc-email-userid "bandali"
+ ;; erc-join-buffer 'bury
+ ;; erc-lurker-hide-list '("JOIN" "PART" "QUIT")
+ erc-nick "bandali"
+ erc-prompt "erc>"
+ erc-prompt-for-password nil
+ erc-query-display 'buffer
+ ;; erc-server-reconnect-attempts 5
+ erc-server-reconnect-timeout 3)
+
+ (if (version< erc-version "5.6-git")
+ (setopt erc-format-nick-function #'erc-format-@nick)
+ (setopt erc-show-speaker-membership-status t))
+
+ (unless (version< erc-version "5.5")
+ (setopt erc-rename-buffers t))
+
+ (unless (version< erc-version "5.4")
+ (declare-function
+ erc-message "erc-backend" (message-command line &optional force))
+ (declare-function erc-default-target "erc")
+ (declare-function erc-current-nick "erc")
+ (defun erc-cmd-OPME ()
+ "Ask chanserv to op me in the current channel."
+ (erc-message "PRIVMSG"
+ (format "chanserv op %s %s"
+ (erc-default-target)
+ (erc-current-nick))
+ nil))
+ (declare-function erc-cmd-DEOP "erc" (&rest people))
+ (defun erc-cmd-DEOPME ()
+ "Deop myself in the current channel."
+ (erc-cmd-DEOP (format "%s" (erc-current-nick)))))
+
+ (add-to-list 'erc-modules 'keep-place)
+ (add-to-list 'erc-modules 'log)
+ (when (display-graphic-p)
+ (add-to-list 'erc-modules 'notifications)
+ (add-to-list 'erc-modules 'smiley))
+ (add-to-list 'erc-modules 'spelling)
+
+ (setopt
+ ;; erc-enable-logging 'erc-log-all-but-server-buffers
+ erc-log-file-coding-system 'utf-8
+ erc-log-write-after-insert t
+ erc-log-write-after-send t
+ erc-save-buffer-on-part nil
+ erc-save-queries-on-quit nil)
+
+ (with-eval-after-load 'erc-match
+ (setopt
+ erc-pal-highlight-type 'nick
+ erc-pals
+ '("corwin" "^gopar" "^iank" "^rwp" "technomancy" "thomzane"))
+ (set-face-attribute
+ 'erc-pal-face nil
+ :foreground 'unspecified
+ :weight 'unspecified
+ :inherit 'erc-nick-default-face
+ :background "#ffffdf"))
+
+ (with-eval-after-load 'erc-pcomplete
+ (setopt erc-pcomplete-nick-postfix ",")
+ ;; for matterircd nick (username) completions
+ ;; (advice-add
+ ;; #'pcomplete-erc-nicks
+ ;; :around
+ ;; (lambda (orig-fun &rest args)
+ ;; (let ((nicks (apply orig-fun args)))
+ ;; (if (string-match-p "matterircd" (symbol-name (erc-network)))
+ ;; (mapcar (lambda (nick) (concat "@" nick)) nicks)
+ ;; nicks))))
+ )
+
+ (with-eval-after-load 'erc-stamp
+ (setopt
+ erc-timestamp-only-if-changed-flag nil
+ erc-timestamp-format "%T "
+ erc-insert-timestamp-function #'erc-insert-timestamp-left)
+ (set-face-attribute
+ 'erc-timestamp-face nil
+ :foreground "#aaaaaa"
+ :weight 'unspecified
+ :background 'unspecified))
+
+ (with-eval-after-load 'erc-track
+ (setopt
+ erc-track-enable-keybindings nil
+ erc-track-exclude-types
+ '("JOIN" "MODE" "NICK" "PART" "QUIT"
+ "324" "329" "332" "333" "353" "477")
+ erc-track-position-in-mode-line t
+ erc-track-priority-faces-only 'all
+ erc-track-shorten-function nil
+ erc-track-showcount t))
+
+ (declare-function erc-update-modules "erc")
+ (erc-update-modules)
+
+ (b/keymap-global-set "C-c w e" #'erc-switch-to-buffer-other-window)
+ (b/keymap-set erc-mode-map "M-a" #'erc-track-switch-buffer))
+(b/keymap-global-set
+ "C-c e l"
+ (lambda ()
+ (interactive)
+ (erc :id "soju-libera"
+ :server "localhost"
+ :port 6667
+ :user "bandali/irc.libera.chat")))
+(b/keymap-global-set
+ "C-c e o"
+ (lambda ()
+ (interactive)
+ (erc :id "soju-oftc"
+ :server "localhost"
+ :port 6667
+ :user "bandali/irc.oftc.net")))
+
+(provide 'bandali-erc)
+;;; bandali-erc.el ends here