diff options
author | Amin Bandali <bandali@kelar.org> | 2025-02-09 02:09:16 -0500 |
---|---|---|
committer | Amin Bandali <bandali@kelar.org> | 2025-02-09 02:09:16 -0500 |
commit | 99332da43b8324814ca6c1af7f0076f83c8ce233 (patch) | |
tree | aa4e84443aa9be8e1fedf6e61867da43d109c5b7 /.emacs.d | |
parent | ec565f9daf3d2af52d83dae9dfbbde4652fd6601 (diff) | |
download | configs-99332da43b8324814ca6c1af7f0076f83c8ce233.tar.gz configs-99332da43b8324814ca6c1af7f0076f83c8ce233.tar.xz configs-99332da43b8324814ca6c1af7f0076f83c8ce233.zip |
Port the rest of my GNU Emacs configuration to use-package
Diffstat (limited to '')
-rw-r--r-- | .emacs.d/init.el | 16 | ||||
-rw-r--r-- | .emacs.d/lisp/bandali-dired.el | 46 | ||||
-rw-r--r-- | .emacs.d/lisp/bandali-erc.el | 170 | ||||
-rw-r--r-- | .emacs.d/lisp/bandali-eshell.el | 42 | ||||
-rw-r--r-- | .emacs.d/lisp/bandali-essentials.el | 4 | ||||
-rw-r--r-- | .emacs.d/lisp/bandali-gnus.el | 508 | ||||
-rw-r--r-- | .emacs.d/lisp/bandali-ibuffer.el | 38 | ||||
-rw-r--r-- | .emacs.d/lisp/bandali-message.el | 83 |
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 |