summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAmin Bandali <bandali@kelar.org>2025-02-09 02:09:16 -0500
committerAmin Bandali <bandali@kelar.org>2025-02-09 02:09:16 -0500
commit99332da43b8324814ca6c1af7f0076f83c8ce233 (patch)
treeaa4e84443aa9be8e1fedf6e61867da43d109c5b7
parentec565f9daf3d2af52d83dae9dfbbde4652fd6601 (diff)
downloadconfigs-99332da43b8324814ca6c1af7f0076f83c8ce233.tar.gz
configs-99332da43b8324814ca6c1af7f0076f83c8ce233.tar.xz
configs-99332da43b8324814ca6c1af7f0076f83c8ce233.zip
Port the rest of my GNU Emacs configuration to use-package
-rw-r--r--.emacs.d/init.el16
-rw-r--r--.emacs.d/lisp/bandali-dired.el46
-rw-r--r--.emacs.d/lisp/bandali-erc.el170
-rw-r--r--.emacs.d/lisp/bandali-eshell.el42
-rw-r--r--.emacs.d/lisp/bandali-essentials.el4
-rw-r--r--.emacs.d/lisp/bandali-gnus.el508
-rw-r--r--.emacs.d/lisp/bandali-ibuffer.el38
-rw-r--r--.emacs.d/lisp/bandali-message.el83
8 files changed, 470 insertions, 437 deletions
diff --git a/.emacs.d/init.el b/.emacs.d/init.el
index 5500760..59b1744 100644
--- a/.emacs.d/init.el
+++ b/.emacs.d/init.el
@@ -118,10 +118,11 @@ plain variables. This means that `setopt' will execute any
;; Start Emacs server
;; https://www.gnu.org/software/emacs/manual/html_node/emacs/Emacs-Server.html
-(run-with-idle-timer 0.5 nil #'require 'server)
-(with-eval-after-load 'server
- (declare-function server-edit "server")
- (b/keymap-global-set "C-c F D" #'server-edit)
+(use-package server
+ :defer 0.5
+ :bind
+ ("C-c F D" . server-edit)
+ :config
(declare-function server-running-p "server")
(or (server-running-p) (server-mode)))
@@ -149,11 +150,4 @@ plain variables. This means that `setopt' will execute any
(require 'bandali-misc)
(require 'bandali-po)
-
-;;; Emacs enhancements & auxiliary packages
-
-(use-package mml
- :defer t
- :delight " mml")
-
;;; init.el ends here
diff --git a/.emacs.d/lisp/bandali-dired.el b/.emacs.d/lisp/bandali-dired.el
index 18392c0..982af2c 100644
--- a/.emacs.d/lisp/bandali-dired.el
+++ b/.emacs.d/lisp/bandali-dired.el
@@ -24,15 +24,25 @@
;;; Code:
-(with-eval-after-load 'dired
- ;; (require 'ls-lisp)
- (setopt
- dired-dwim-target t
- ;; dired-listing-switches "-alh --group-directories-first"
- dired-listing-switches "-alh"
- ;; ls-lisp-dirs-first t
- ls-lisp-use-insert-directory-program nil)
-
+(use-package dired
+ :defer t
+ :init (require 'ls-lisp)
+ :bind
+ (:map
+ dired-mode-map
+ ("b" . dired-up-directory)
+ ("E" . dired-ediff-files)
+ ("e" . dired-toggle-read-only)
+ ("\\" . dired-hide-details-mode))
+ :hook
+ (dired-mode . dired-hide-details-mode)
+ :custom
+ (dired-dwim-target-next t)
+ ;; (dired-listing-switches "-alh --group-directories-first")
+ (dired-listing-switches "-alh")
+ ;; (ls-lisp-dirs-first t)
+ (ls-lisp-use-insert-directory-program nil)
+ :config
(declare-function dired-dwim-target-directory "dired-aux")
;; easily diff 2 marked files
;; https://oremacs.com/2017/03/18/dired-ediff/
@@ -56,18 +66,12 @@
(lambda ()
(setq ediff-after-quit-hook-internal nil)
(set-window-configuration wnd))))
- (error "no more than 2 files should be marked"))))
-
- ;; local key bindings
- (let ((m dired-mode-map))
- (b/keymap-set m "b" #'dired-up-directory)
- (b/keymap-set m "E" #'dired-ediff-files)
- (b/keymap-set m "e" #'dired-toggle-read-only)
- (b/keymap-set m "\\" #'dired-hide-details-mode))
+ (error "no more than 2 files should be marked")))))
- (require 'dired-x)
- (setopt
- dired-guess-shell-alist-user
+(use-package dired-x
+ :after dired
+ :custom
+ (dired-guess-shell-alist-user
'(("\\.pdf\\'" "atril" "evince" "zathura" "okular")
("\\.doc\\'" "libreoffice")
("\\.docx\\'" "libreoffice")
@@ -76,7 +80,7 @@
("\\.xls\\'" "libreoffice")
("\\.xlsx\\'" "libreoffice")
("\\.flac\\'" "mpv"))))
-(add-hook 'dired-mode-hook #'dired-hide-details-mode)
+
(provide 'bandali-dired)
;;; bandali-dired.el ends here
diff --git a/.emacs.d/lisp/bandali-erc.el b/.emacs.d/lisp/bandali-erc.el
index 7e79329..9a53969 100644
--- a/.emacs.d/lisp/bandali-erc.el
+++ b/.emacs.d/lisp/bandali-erc.el
@@ -24,28 +24,42 @@
;;; 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)
-
+(use-package erc
+ :bind
+ (("C-c w e" . erc-switch-to-buffer-other-window)
+ ("C-c e l" . (lambda ()
+ (interactive)
+ (erc :id "soju-libera"
+ :server "localhost"
+ :port 6667
+ :user "bandali/irc.libera.chat")))
+ ("C-c e o" . (lambda ()
+ (interactive)
+ (erc :id "soju-oftc"
+ :server "localhost"
+ :port 6667
+ :user "bandali/irc.oftc.net")))
+ :map erc-mode-map
+ ("M-a" . erc-track-switch-buffer))
+ :custom
+ (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)
+ :config
(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))
@@ -62,90 +76,58 @@
(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")))
+ (erc-update-modules))
+
+(use-package erc-match
+ :after erc
+ :custom
+ (erc-pal-highlight-type 'nick)
+ (erc-pals
+ '("corwin" "^gopar" "^iank" "^rwp" "technomancy" "thomzane"))
+ :config
+ (set-face-attribute
+ 'erc-pal-face nil
+ :foreground 'unspecified
+ :weight 'unspecified
+ :inherit 'erc-nick-default-face
+ :background "#ffffdf"))
+
+(use-package erc-pcomplete
+ :after erc
+ :custom
+ (erc-pcomplete-nick-postfix ","))
+
+(use-package erc-stamp
+ :after erc
+ :custom
+ (erc-timestamp-only-if-changed-flag nil)
+ (erc-timestamp-format "%T ")
+ (erc-insert-timestamp-function #'erc-insert-timestamp-left)
+ :config
+ (set-face-attribute
+ 'erc-timestamp-face nil
+ :foreground "#aaaaaa"
+ :weight 'unspecified
+ :background 'unspecified))
+
+(use-package erc-track
+ :after erc
+ :custom
+ (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))
(provide 'bandali-erc)
;;; bandali-erc.el ends here
diff --git a/.emacs.d/lisp/bandali-eshell.el b/.emacs.d/lisp/bandali-eshell.el
index 444c796..e9476cd 100644
--- a/.emacs.d/lisp/bandali-eshell.el
+++ b/.emacs.d/lisp/bandali-eshell.el
@@ -24,12 +24,15 @@
;;; Code:
-(with-eval-after-load 'eshell
- (setopt
- eshell-hist-ignoredups t
- eshell-input-filter #'eshell-input-filter-initial-space
- eshell-prompt-regexp "^[^#$\n]* [#$] ; "
- eshell-prompt-function
+(use-package eshell
+ :defer t
+ :bind
+ ("C-c s e" . eshell)
+ :custom
+ (eshell-hist-ignoredups t)
+ (eshell-input-filter #'eshell-input-filter-initial-space)
+ (eshell-prompt-regexp "^[^#$\n]* [#$] ; ")
+ (eshell-prompt-function
(lambda ()
(let ((uid (if (functionp #'file-user-uid)
#'file-user-uid ; (version<= "30" emacs-version)
@@ -41,7 +44,11 @@
(unless (eshell-exit-success-p)
(format " [%d]" eshell-last-command-status))
(if (= (funcall uid) 0) " # " " $ ")
- "; "))))
+ "; ")))))
+
+(use-package esh-mode
+ :after eshell
+ :init
(eval-when-compile
(defvar eshell-prompt-regexp)
(declare-function eshell-life-is-too-much "esh-mode")
@@ -57,18 +64,23 @@
(let ((inhibit-read-only t))
(erase-buffer))
(eshell-send-input))
+ :bind
+ (:map
+ eshell-mode-map
+ ("C-d" . b/eshell-quit-or-delete-char)
+ ("C-S-l" . b/eshell-clear)))
+
+(use-package esh-hist
+ :after eshell
+ :init
(defun b/eshell-history ()
(interactive)
(completing-read "Eshell history: "
(ring-elements eshell-history-ring)))
- (with-eval-after-load 'esh-mode
- (let ((m eshell-mode-map))
- (b/keymap-set m "C-d" #'b/eshell-quit-or-delete-char)
- (b/keymap-set m "C-S-l" #'b/eshell-clear)))
- (with-eval-after-load 'esh-hist
- (let ((m eshell-hist-mode-map))
- (b/keymap-set m "M-r" #'b/eshell-history))))
-(b/keymap-global-set "C-c s e" #'eshell)
+ :bind
+ (:map
+ eshell-hist-mode-map
+ ("M-r" . b/eshell-history)))
(provide 'bandali-eshell)
;;; bandali-eshell.el ends here
diff --git a/.emacs.d/lisp/bandali-essentials.el b/.emacs.d/lisp/bandali-essentials.el
index e233481..ad1e141 100644
--- a/.emacs.d/lisp/bandali-essentials.el
+++ b/.emacs.d/lisp/bandali-essentials.el
@@ -376,6 +376,9 @@
:hook
((text-mode tex-mode) . auto-fill-mode)
:custom
+ ;; See `bandali-gnus' for my Gnus configuration.
+ (mail-user-agent 'gnus-user-agent)
+ (read-mail-command #'gnus)
;; Save what I copy into clipboard from other applications into
;; Emacs' kill-ring, which would allow me to still be able to
;; easily access it in case I kill (cut or copy) something else
@@ -426,6 +429,7 @@
(use-package completion-preview
;; :if (package-installed-p 'completion-preview)
:if (version<= "30" emacs-version)
+ :delight " cprev"
:bind
(:map
completion-preview-active-mode-map
diff --git a/.emacs.d/lisp/bandali-gnus.el b/.emacs.d/lisp/bandali-gnus.el
index 76a689b..eeeb50f 100644
--- a/.emacs.d/lisp/bandali-gnus.el
+++ b/.emacs.d/lisp/bandali-gnus.el
@@ -26,12 +26,6 @@
(defvar b/maildir
(expand-file-name (convert-standard-filename "~/mail/")))
-(with-eval-after-load 'recentf
- (add-to-list 'recentf-exclude b/maildir))
-
-(setopt
- mail-user-agent 'gnus-user-agent
- read-mail-command #'gnus)
(eval-when-compile
(progn
@@ -43,13 +37,13 @@
(declare-function article-make-date-line "gnus-art" (date type))
-(with-eval-after-load 'gnus
- (with-eval-after-load 'nnimap
- (setq nnimap-record-commands init-file-debug))
-
- (setopt
- gnus-select-method '(nnnil "")
- gnus-secondary-select-methods
+(use-package gnus
+ :bind
+ ("C-c g" . gnus-plugged)
+ ("C-c G" . gnus-unplugged)
+ :custom
+ (gnus-select-method '(nnnil ""))
+ (gnus-secondary-select-methods
`((nnimap
"kelar"
(nnimap-stream plain)
@@ -151,9 +145,9 @@
;; spam
("X-Spam-Flag" "YES" "Junk")
;; catch-all
- "INBOX"))))
- gnus-message-archive-group "nnimap+kelar:INBOX"
- gnus-parameters
+ "INBOX")))))
+ (gnus-message-archive-group "nnimap+kelar:INBOX")
+ (gnus-parameters
'(("l\\.fencepost-users"
(to-address . "fencepost-users@gnu.org")
(to-list . "fencepost-users@gnu.org")
@@ -161,232 +155,268 @@
("l\\.haskell-cafe"
(to-address . "haskell-cafe@haskell.org")
(to-list . "haskell-cafe@haskell.org")
- (list-identifier . "\\[Haskell-cafe\\]")))
- ;; gnus-large-newsgroup 50
- gnus-process-mark-toggle t
- gnus-home-directory (b/emacs.d "gnus/")
- gnus-directory
+ (list-identifier . "\\[Haskell-cafe\\]"))))
+ ;; (gnus-large-newsgroup 50)
+ (gnus-process-mark-toggle t)
+ (gnus-home-directory (b/emacs.d "gnus/"))
+ (gnus-directory
+ (expand-file-name
+ (convert-standard-filename "news/") gnus-home-directory))
+ (gnus-interactive-exit nil)
+ (gnus-user-agent '(emacs gnus type)))
+
+(use-package message
+ :after (gnus gnus-sum)
+ :custom
+ (message-directory
(expand-file-name
- (convert-standard-filename "news/") gnus-home-directory)
- gnus-interactive-exit nil
- gnus-user-agent '(emacs gnus type))
-
- (with-eval-after-load 'message
- (setopt
- message-directory
- (expand-file-name
- (convert-standard-filename "mail/") gnus-home-directory)))
-
- (with-eval-after-load 'nndraft
- (setopt
- nndraft-directory
- (expand-file-name
- (convert-standard-filename "drafts/") gnus-home-directory)))
+ (convert-standard-filename "mail/") gnus-home-directory))
+ (gnus-ignored-from-addresses message-dont-reply-to-names))
+(use-package nndraft
+ :after gnus
+ :custom
+ (nndraft-directory
+ (expand-file-name
+ (convert-standard-filename "drafts/") gnus-home-directory)))
+
+(use-package nnimap
+ :after gnus
+ :config
+ (setq nnimap-record-commands init-file-debug))
+
+(use-package nnmail
+ :if (version< emacs-version "27")
+ :after gnus
+ :config
+ (add-to-list
+ 'nnmail-split-abbrev-alist
+ '(list . "list-id\\|list-post\\|x-mailing-list\\|x-beenthere\\|x-loop")
+ 'append))
+
+(use-package gnus-agent
+ :after gnus
+ :custom
+ (gnus-agent-synchronize-flags 'ask))
+
+(use-package gnus-art ; article
+ :after gnus
+ :custom
+ (gnus-buttonized-mime-types
+ '("multipart/\\(signed\\|encrypted\\)"))
+ (gnus-sorted-header-list
+ '("^From:"
+ "^X-RT-Originator"
+ "^Newsgroups:"
+ "^Subject:"
+ "^Date:"
+ "^Envelope-To:"
+ "^Followup-To:"
+ "^Reply-To:"
+ "^Organization:"
+ "^Summary:"
+ "^Abstract:"
+ "^Keywords:"
+ "^To:"
+ "^[BGF]?Cc:"
+ "^Posted-To:"
+ "^Mail-Copies-To:"
+ "^Mail-Followup-To:"
+ "^Apparently-To:"
+ "^Resent-From:"
+ "^User-Agent:"
+ "^X-detected-operating-system:"
+ "^X-Spam_action:"
+ "^X-Spam_bar:"
+ "^Message-ID:"
+ ;; "^References:"
+ "^List-Id:"
+ "^Gnus-Warning:"))
+ (gnus-visible-headers
+ (mapconcat #'identity gnus-sorted-header-list "\\|")))
+
+(use-package gnus-dired
+ :after (gnus dired)
+ :hook
+ (dired-mode . gnus-dired-mode))
+
+(use-package gnus-group
+ :after gnus
+ :custom
+ (gnus-permanently-visible-groups "\\(:INBOX$\\|:gnu$\\)")
+ :hook
+ (gnus-group-mode . gnus-topic-mode)
+ (gnus-group-mode . gnus-agent-mode))
+
+(use-package gnus-msg
+ :after gnus
+ :init
+ (let ((bandali "Amin Bandali%s - https://kelar.org/~bandali"))
+ (defvar b/csc-signature
+ (mapconcat
+ #'identity
+ `(,(format bandali ", MMath")
+ "Systems Committee <syscom@csclub.uwaterloo.ca>"
+ "Computer Science Club of the University of Waterloo")
+ "\n")))
+ :custom
+ (gnus-gcc-mark-as-read t)
+ (gnus-message-replysign t)
+ (gnus-posting-styles
+ '(("nnimap\\+kelar:.*"
+ (address "bandali@kelar.org")
+ ("X-Message-SMTP-Method" "smtp mail.kelar.org 587")
+ (gcc "nnimap+kelar:INBOX"))
+ ("nnimap\\+shemshak:.*"
+ (address "amin@shemshak.org")
+ ("X-Message-SMTP-Method" "smtp mail.shemshak.org 587")
+ (gcc "nnimap+shemshak:Sent"))
+ ("nnimap\\+debian:.*"
+ (address "bandali@debian.org")
+ ("X-Message-SMTP-Method" "smtp mail-submit.debian.org 587")
+ (gcc "nnimap+debian:INBOX"))
+ ("nnimap\\+gnu:.*"
+ (address "bandali@gnu.org")
+ ("X-Message-SMTP-Method" "smtp fencepost.gnu.org 587")
+ (gcc "nnimap+gnu:INBOX"))
+ ("nnimap\\+.*:l\\.ubuntu-.*"
+ (address "bandali@ubuntu.com")
+ ("X-Message-SMTP-Method" "smtp mail.kelar.org 587"))
+ ((header "list-id" ".*\\.lists.ubuntu.com")
+ (address "bandali@ubuntu.com")
+ ("X-Message-SMTP-Method" "smtp mail.kelar.org 587"))
+ ("nnimap\\+csc:.*"
+ (address "bandali@csclub.uwaterloo.ca")
+ ("X-Message-SMTP-Method" "smtp mail.csclub.uwaterloo.ca 587")
+ (signature b/csc-signature)
+ (gcc "nnimap+csc:Sent")))))
+
+(use-package gnus-registry
+ :disabled
+ :after gnus
+ :custom
+ (gnus-registry-max-entries 2500)
+ (gnus-registry-ignored-groups
+ (append gnus-registry-ignored-groups
+ '(("^nnimap:gnu\\.l" t) ("webmasters$" t))))
+ :config
+ (gnus-registry-initialize))
+
+(use-package gnus-search
+ :after gnus
+ :custom
+ (gnus-search-use-parsed-queries t))
+
+(use-package gnus-start
+ :after gnus
+ :custom
+ (gnus-save-newsrc-file nil)
+ (gnus-read-newsrc-file nil)
+ :hook
+ (gnus-after-getting-new-news . gnus-notifications))
+
+(use-package gnus-sum ; summary
+ :after gnus
+ :init
+ (defun b/gnus-junk-article (&optional n)
+ (interactive "P" gnus-summary-mode)
+ (gnus-summary-move-article
+ n
+ (gnus-group-prefixed-name
+ "Junk"
+ (gnus-find-method-for-group gnus-newsgroup-name))))
+ :custom
+ (gnus-thread-sort-functions
+ '(gnus-thread-sort-by-number
+ gnus-thread-sort-by-subject
+ gnus-thread-sort-by-date))
+ :bind
+ (:map
+ gnus-summary-mode-map
+ :prefix-map
+ b/gnus-summary-prefix-map
+ :prefix "v"
+ ("r r" . gnus-summary-very-wide-reply)
+ ("r q" . gnus-summary-very-wide-reply-with-original)
+ ("R r" . gnus-summary-reply)
+ ("R q" . gnus-summary-reply-with-original)
+ ("r a w" . gnus-summary-show-raw-article)
+ ("s" . b/gnus-junk-article)))
+
+(use-package gnus-topic
+ :after gnus
+ :custom
+ ;; (gnus-topic-line-format "%i[ %A: %(%{%n%}%) ]%v\n")
+ (gnus-topic-line-format "%i[ %(%{%n%}%) (%A) ]%v\n")
+ :config
+ (setq gnus-topic-topology
+ `(("Gnus" visible nil nil)
+ (("misc" visible nil nil))
+ (("csc" visible nil nil))
+ (("kelar" visible nil nil))
+ (("shemshak" visible nil nil))
+ (("debian" visible nil nil))
+ (("gnu" visible nil nil))
+ ;; (("old-gnu" visible nil nil))
+ )))
+
+(use-package gnus-win
+ :after gnus
+ :custom
+ (gnus-use-full-window nil))
+
+(use-package mm-archive
+ :after gnus
+ :config
+ (add-to-list
+ 'mm-archive-decoders
+ '("application/gzip" nil "gunzip" "-S" ".zip" "-kd" "%f" "-r")))
+
+(use-package mm-decode
+ :after gnus
+ :custom
+ ;; (mm-attachment-override-types `("text/x-diff" "text/x-patch"
+ ;; ,@mm-attachment-override-types))
+ (mm-discouraged-alternatives '("text/html" "text/richtext"))
+ (mm-decrypt-option 'known)
+ (mm-verify-option 'known)
+ :config
+ (add-to-list
+ 'mm-inline-media-tests
+ `("application/gzip" mm-archive-dissect-and-inline identity))
+ (add-to-list 'mm-inlined-types "application/gzip" 'append))
+
+(use-package mm-uu
+ :after gnus
+ :config
+ (when (version< "27" emacs-version)
+ (set-face-attribute 'mm-uu-extract nil :extend t))
(when (version< emacs-version "27")
- (with-eval-after-load 'nnmail
- (add-to-list
- 'nnmail-split-abbrev-alist
- '(list . "list-id\\|list-post\\|x-mailing-list\\|x-beenthere\\|x-loop")
- 'append)))
-
- (with-eval-after-load 'gnus-agent
- (setopt gnus-agent-synchronize-flags 'ask))
-
- (with-eval-after-load 'gnus-art ; article
- (setopt
- gnus-buttonized-mime-types
- '("multipart/\\(signed\\|encrypted\\)")
- gnus-sorted-header-list
- '("^From:"
- "^X-RT-Originator"
- "^Newsgroups:"
- "^Subject:"
- "^Date:"
- "^Envelope-To:"
- "^Followup-To:"
- "^Reply-To:"
- "^Organization:"
- "^Summary:"
- "^Abstract:"
- "^Keywords:"
- "^To:"
- "^[BGF]?Cc:"
- "^Posted-To:"
- "^Mail-Copies-To:"
- "^Mail-Followup-To:"
- "^Apparently-To:"
- "^Resent-From:"
- "^User-Agent:"
- "^X-detected-operating-system:"
- "^X-Spam_action:"
- "^X-Spam_bar:"
- "^Message-ID:"
- ;; "^References:"
- "^List-Id:"
- "^Gnus-Warning:")
- gnus-visible-headers
- (mapconcat #'identity gnus-sorted-header-list "\\|")))
-
- (with-eval-after-load 'gnus-dired
- (with-eval-after-load 'dired
- (add-hook 'dired-mode-hook #'gnus-dired-mode)))
-
- (with-eval-after-load 'gnus-group
- (setopt
- gnus-permanently-visible-groups "\\(:INBOX$\\|:gnu$\\)")
- (add-hook 'gnus-group-mode-hook #'gnus-topic-mode)
- (add-hook 'gnus-group-mode-hook #'gnus-agent-mode))
-
- (with-eval-after-load 'gnus-msg
- (let ((bandali "Amin Bandali%s - https://kelar.org/~bandali"))
- (defvar b/csc-signature
- (mapconcat
- #'identity
- `(,(format bandali ", MMath")
- "Systems Committee <syscom@csclub.uwaterloo.ca>"
- "Computer Science Club of the University of Waterloo")
- "\n")))
- (setopt
- gnus-gcc-mark-as-read t
- gnus-message-replysign t
- gnus-posting-styles
- '(("nnimap\\+kelar:.*"
- (address "bandali@kelar.org")
- ("X-Message-SMTP-Method" "smtp mail.kelar.org 587")
- (gcc "nnimap+kelar:INBOX"))
- ("nnimap\\+shemshak:.*"
- (address "amin@shemshak.org")
- ("X-Message-SMTP-Method" "smtp mail.shemshak.org 587")
- (gcc "nnimap+shemshak:Sent"))
- ("nnimap\\+debian:.*"
- (address "bandali@debian.org")
- ("X-Message-SMTP-Method" "smtp mail-submit.debian.org 587")
- (gcc "nnimap+debian:INBOX"))
- ("nnimap\\+gnu:.*"
- (address "bandali@gnu.org")
- ("X-Message-SMTP-Method" "smtp fencepost.gnu.org 587")
- (gcc "nnimap+gnu:INBOX"))
- ("nnimap\\+.*:l\\.ubuntu-.*"
- (address "bandali@ubuntu.com")
- ("X-Message-SMTP-Method" "smtp mail.kelar.org 587"))
- ((header "list-id" ".*\\.lists.ubuntu.com")
- (address "bandali@ubuntu.com")
- ("X-Message-SMTP-Method" "smtp mail.kelar.org 587"))
- ("nnimap\\+csc:.*"
- (address "bandali@csclub.uwaterloo.ca")
- ("X-Message-SMTP-Method" "smtp mail.csclub.uwaterloo.ca 587")
- (signature b/csc-signature)
- (gcc "nnimap+csc:Sent")))))
-
- ;; (require 'gnus-registry)
- ;; (with-eval-after-load 'gnus-registry
- ;; (setopt
- ;; gnus-registry-max-entries 2500
- ;; gnus-registry-ignored-groups
- ;; (append gnus-registry-ignored-groups
- ;; '(("^nnimap:gnu\\.l" t) ("webmasters$" t))))
- ;; (gnus-registry-initialize))
-
- (with-eval-after-load 'gnus-search
- (setopt
- gnus-search-use-parsed-queries t))
-
- (with-eval-after-load 'gnus-start
- (setopt
- gnus-save-newsrc-file nil
- gnus-read-newsrc-file nil)
- (add-hook 'gnus-after-getting-new-news-hook #'gnus-notifications))
-
- (with-eval-after-load 'gnus-sum ; summary
- (setopt
- gnus-thread-sort-functions
- '(gnus-thread-sort-by-number
- gnus-thread-sort-by-subject
- gnus-thread-sort-by-date))
- (with-eval-after-load 'message
- (setopt
- gnus-ignored-from-addresses message-dont-reply-to-names))
-
- (defun b/gnus-junk-article (&optional n)
- (interactive "P" gnus-summary-mode)
- (gnus-summary-move-article
- n
- (gnus-group-prefixed-name
- "Junk"
- (gnus-find-method-for-group gnus-newsgroup-name))))
-
- (defvar b/gnus-summary-prefix-map)
- (define-prefix-command 'b/gnus-summary-prefix-map)
- (b/keymap-set
- gnus-summary-mode-map "v" 'b/gnus-summary-prefix-map)
- (let ((m b/gnus-summary-prefix-map))
- (b/keymap-set m "r r" #'gnus-summary-very-wide-reply)
- (b/keymap-set m "r q" #'gnus-summary-very-wide-reply-with-original)
- (b/keymap-set m "R r" #'gnus-summary-reply)
- (b/keymap-set m "R q" #'gnus-summary-reply-with-original)
- (b/keymap-set m "r a w" #'gnus-summary-show-raw-article)
- (b/keymap-set m "s" #'b/gnus-junk-article)))
-
- (with-eval-after-load 'gnus-topic
- ;; (setopt gnus-topic-line-format "%i[ %A: %(%{%n%}%) ]%v\n")
- (setopt gnus-topic-line-format "%i[ %(%{%n%}%) (%A) ]%v\n")
- (setq gnus-topic-topology
- `(("Gnus" visible nil nil)
- (("misc" visible nil nil))
- (("csc" visible nil nil))
- (("kelar" visible nil nil))
- (("shemshak" visible nil nil))
- (("debian" visible nil nil))
- (("gnu" visible nil nil))
- ;; (("old-gnu" visible nil nil))
- )))
-
- (with-eval-after-load 'gnus-win
- (setopt gnus-use-full-window nil))
-
- (with-eval-after-load 'mm-archive
- (add-to-list
- 'mm-archive-decoders
- '("application/gzip" nil "gunzip" "-S" ".zip" "-kd" "%f" "-r")))
-
- (with-eval-after-load 'mm-decode
- (setopt
- ;; mm-attachment-override-types `("text/x-diff" "text/x-patch"
- ;; ,@mm-attachment-override-types)
- mm-discouraged-alternatives '("text/html" "text/richtext")
- mm-decrypt-option 'known
- mm-verify-option 'known)
- (add-to-list
- 'mm-inline-media-tests
- `("application/gzip" mm-archive-dissect-and-inline identity))
- (add-to-list 'mm-inlined-types "application/gzip" 'append))
-
- (with-eval-after-load 'mm-uu
- (when (version< "27" emacs-version)
- (set-face-attribute 'mm-uu-extract nil :extend t))
- (when (version< emacs-version "27")
- (setopt mm-uu-diff-groups-regexp ".")))
-
- (with-eval-after-load 'mml
- (setopt
- mml-attach-file-at-the-end t
- mml-content-disposition-alist
- '((text
- (markdown . "attachment")
- (rtf . "attachment")
- (t . "inline"))
- (t . "attachment"))))
-
- (with-eval-after-load 'mml-sec
- (setopt
- mml-secure-openpgp-encrypt-to-self t
- mml-secure-openpgp-sign-with-sender t))
-
- (with-eval-after-load 'recentf
- (add-to-list 'recentf-exclude gnus-home-directory)))
-(b/keymap-global-set "C-c g" #'gnus-plugged)
-(b/keymap-global-set "C-c G" #'gnus-unplugged)
+ (setopt mm-uu-diff-groups-regexp ".")))
+
+(use-package mml
+ :after gnus
+ :delight " mml"
+ :custom
+ (mml-attach-file-at-the-end t)
+ (mml-content-disposition-alist
+ '((text
+ (markdown . "attachment")
+ (rtf . "attachment")
+ (t . "inline"))
+ (t . "attachment"))))
+
+(use-package mml-sec
+ :after mml
+ :custom
+ (mml-secure-openpgp-encrypt-to-self t)
+ (mml-secure-openpgp-sign-with-sender t))
+
+(use-package recentf
+ :after gnus
+ :config
+ (add-to-list 'recentf-exclude b/maildir)
+ (add-to-list 'recentf-exclude gnus-home-directory))
(provide 'bandali-gnus)
;;; bandali-gnus.el ends here
diff --git a/.emacs.d/lisp/bandali-ibuffer.el b/.emacs.d/lisp/bandali-ibuffer.el
index f818695..2c4f660 100644
--- a/.emacs.d/lisp/bandali-ibuffer.el
+++ b/.emacs.d/lisp/bandali-ibuffer.el
@@ -24,9 +24,23 @@
;;; Code:
-(with-eval-after-load 'ibuffer
- (setopt
- ibuffer-saved-filter-groups
+(use-package ibuffer
+ :defer t
+ :bind
+ (("C-x C-b" . ibuffer)
+ :map ibuffer-mode-map
+ ("P" . ibuffer-backward-filter-group)
+ ("N" . ibuffer-forward-filter-group)
+ ("M-p" . ibuffer-do-print)
+ ("M-n" . ibuffer-do-shell-command-pipe-replace))
+ :init
+ (declare-function
+ ibuffer-switch-to-saved-filter-groups "ibuf-ext" (name))
+ :hook
+ (ibuffer . (lambda ()
+ (ibuffer-switch-to-saved-filter-groups "default")))
+ :custom
+ (ibuffer-saved-filter-groups
'(("default"
("dired" (mode . dired-mode))
("erc" (mode . erc-mode))
@@ -46,7 +60,9 @@
(or
(mode . tex-mode)
(mode . bibtex-mode)
- (mode . latex-mode)))))
+ (mode . latex-mode))))))
+ :config
+ (setopt
ibuffer-formats
`((mark modified read-only locked
" " (name 18 18 :left :elide)
@@ -63,19 +79,7 @@
(format "%7.0fK" (/ (buffer-size) 1024.0)))
((> (buffer-size) 1024)
(format "%7.1fK" (/ (buffer-size) 1024.0)))
- (t (format "%8d" (buffer-size)))))
-
- (let ((m ibuffer-mode-map))
- (b/keymap-set m "P" #'ibuffer-backward-filter-group)
- (b/keymap-set m "N" #'ibuffer-forward-filter-group)
- (b/keymap-set m "M-p" #'ibuffer-do-print)
- (b/keymap-set m "M-n" #'ibuffer-do-shell-command-pipe-replace)))
-(b/keymap-global-set "C-x C-b" #'ibuffer)
-(declare-function
- ibuffer-switch-to-saved-filter-groups "ibuf-ext" (name))
-(add-hook
- 'ibuffer-hook
- (lambda () (ibuffer-switch-to-saved-filter-groups "default")))
+ (t (format "%8d" (buffer-size))))))
(provide 'bandali-ibuffer)
;;; bandali-ibuffer.el ends here
diff --git a/.emacs.d/lisp/bandali-message.el b/.emacs.d/lisp/bandali-message.el
index dd048bb..da14f82 100644
--- a/.emacs.d/lisp/bandali-message.el
+++ b/.emacs.d/lisp/bandali-message.el
@@ -24,41 +24,9 @@
;;; Code:
-(with-eval-after-load 'message
- ;; Redefine for a simplified In-Reply-To header
- ;; (https://todo.sr.ht/~sircmpwn/lists.sr.ht/67)
- (defun message-make-in-reply-to ()
- "Return the In-Reply-To header for this message."
- (when message-reply-headers
- (let ((from (mail-header-from message-reply-headers))
- (msg-id (mail-header-id message-reply-headers)))
- (when from
- msg-id))))
-
- (setopt
- message-elide-ellipsis "[...]\n"
- message-citation-line-format "%N wrote:\n"
- message-citation-line-function
- #'message-insert-formatted-citation-line
- message-confirm-send t
- message-fill-column 70
- message-forward-as-mime t
- ;; message-kill-buffer-on-exit t
- message-send-mail-function #'smtpmail-send-it
- message-subscribed-address-functions
- '(gnus-find-subscribed-addresses)
- message-dont-reply-to-names
- (mapconcat
- #'identity
- '("bandali@kelar\\.org"
- "amin@shemshak\\.org"
- "\\(bandali\\|mab\\|aminb?\\)@gnu\\.org"
- "a?bandali@\\(csclub\\.\\)?uwaterloo\\.ca"
- "bandali@gnu\\.ca"
- "bandali@ubuntu\\.com"
- "bandali@debian\\.org")
- "\\|"))
-
+(use-package message
+ :defer t
+ :init
(defun b/newlines-or-asterism (arg)
"Create newlines per my liking, or insert asterism if ARG is
non-nil."
@@ -70,11 +38,46 @@ non-nil."
(delete-region (point) (line-end-position))
(newline)
(open-line 1))))
- (b/keymap-set message-mode-map "M-RET" #'b/newlines-or-asterism)
-
- (add-hook 'message-mode-hook #'flyspell-mode)
- (add-hook
- 'message-mode-hook (lambda () (b/keymap-local-unset "C-c C-s"))))
+ :bind
+ (:map
+ message-mode-map
+ ("C-c C-s" . nil)
+ ("M-RET" . b/newlines-or-asterism))
+ :hook
+ (message-mode . flyspell-mode)
+ :custom
+ (message-elide-ellipsis "[...]\n")
+ (message-citation-line-format "%N wrote:\n")
+ (message-citation-line-function
+ #'message-insert-formatted-citation-line)
+ (message-confirm-send t)
+ (message-fill-column 70)
+ (message-forward-as-mime t)
+ ;; (message-kill-buffer-on-exit t)
+ (message-send-mail-function #'smtpmail-send-it)
+ (message-subscribed-address-functions
+ '(gnus-find-subscribed-addresses))
+ (message-dont-reply-to-names
+ (mapconcat
+ #'identity
+ '("bandali@kelar\\.org"
+ "amin@shemshak\\.org"
+ "\\(bandali\\|mab\\|aminb?\\)@gnu\\.org"
+ "a?bandali@\\(csclub\\.\\)?uwaterloo\\.ca"
+ "bandali@gnu\\.ca"
+ "bandali@ubuntu\\.com"
+ "bandali@debian\\.org")
+ "\\|"))
+ :config
+ ;; Redefine for a simplified In-Reply-To header
+ ;; (https://todo.sr.ht/~sircmpwn/lists.sr.ht/67)
+ (defun message-make-in-reply-to ()
+ "Return the In-Reply-To header for this message."
+ (when message-reply-headers
+ (let ((from (mail-header-from message-reply-headers))
+ (msg-id (mail-header-id message-reply-headers)))
+ (when from
+ msg-id)))))
(provide 'bandali-message)
;;; bandali-message.el ends here