-\f
-;;; Email (with Gnus)
-
-(defvar mab/maildir (expand-file-name "~/mail/"))
-(with-eval-after-load 'recentf
- (add-to-list 'recentf-exclude mab/maildir))
-
-(setq
- mab/gnus-init-file (no-littering-expand-etc-file-name "gnus")
- mail-user-agent 'gnus-user-agent
- read-mail-command 'gnus)
-
-(use-feature gnus
- :bind (("s-m" . gnus)
- ("s-M" . gnus-unplugged))
- :init
- (setq
- gnus-select-method '(nnnil "")
- gnus-secondary-select-methods
- '((nnimap "shemshak"
- (nnimap-stream plain)
- (nnimap-address "127.0.0.1")
- (nnimap-server-port 143)
- (nnimap-authenticator plain)
- (nnimap-user "amin@shemshak.local"))
- (nnimap "gnu"
- (nnimap-stream plain)
- (nnimap-address "127.0.0.1")
- (nnimap-server-port 143)
- (nnimap-authenticator plain)
- (nnimap-user "bandali@gnu.local")
- (nnimap-inbox "INBOX")
- (nnimap-split-methods 'nnimap-split-fancy)
- (nnimap-split-fancy (|
- ;; (: gnus-registry-split-fancy-with-parent)
- ;; (: gnus-group-split-fancy "INBOX" t "INBOX")
- ;; gnu
- (list ".*emacs-devel.gnu.org" "l.gnu.emacs.devel")
- (list ".*help-gnu-emacs.gnu.org" "l.gnu.emacs.help")
- (list ".*info-gnu-emacs.gnu.org" "l.gnu.emacs.info")
- (list ".*emacs-orgmode.gnu.org" "l.gnu.emacs.orgmode")
- (list ".*emacs-tangents.gnu.org" "l.gnu.emacs.tangents")
- (list ".*emacsconf-discuss.gnu.org" "l.gnu.emacsconf.discuss")
- (list ".*fencepost-users.gnu.org" "l.gnu.fencepost.users")
- (list ".*gnunet-developers.gnu.org" "l.gnu.gnunet.developers")
- (list ".*help-gnunet.gnu.org" "l.gnu.gnunet.help")
- (list ".*bug-gnuzilla.gnu.org" "l.gnu.gnuzilla.bug")
- (list ".*gnuzilla-dev.gnu.org" "l.gnu.gnuzilla.dev")
- (list ".*guile-devel.gnu.org" "l.gnu.guile.devel")
- (list ".*guile-user.gnu.org" "l.gnu.guile.user")
- (list ".*guix-devel.gnu.org" "l.gnu.guix.devel")
- (list ".*help-guix.gnu.org" "l.gnu.guix.help")
- (list ".*info-guix.gnu.org" "l.gnu.guix.info")
- (list ".*savannah-hackers-public.gnu.org" "l.gnu.savannah.hackers.public")
- (list ".*savannah-users.gnu.org" "l.gnu.savannah.users")
- (list ".*www-commits.gnu.org" "l.gnu.www.commits")
- (list ".*www-discuss.gnu.org" "l.gnu.www.discuss")
- ;; webmasters
- (from "webmasters\\(-comment\\)?@gnu\\.org" "webmasters")
- ;; haskell
- (list ".*haskell-art.we.lurk.org" "l.haskell.art")
- (list ".*haskell-cafe.haskell.org" "l.haskell.cafe")
- ;; other
- (list ".*atreus.freelists.org" "l.atreus")
- (list ".*deepspec.lists.cs.princeton.edu" "l.deepspec")
- (list ".*notmuch.notmuchmail.org" "l.notmuch")
- (list ".*dev.lists.parabola.nu" "l.parabola.dev")
- ;; *@lists.sr.ht
- (list ".*~bandali/public-inbox@lists.sr.ht" "l.~bandali.public-inbox")
- (list ".*~sircmpwn/free-writers-club@lists.sr.ht" "l.~sircmpwn.free-writers-club")
- (list ".*~sircmpwn/sr.ht-admins@lists.sr.ht" "l.~sircmpwn.srht.admins")
- (list ".*~sircmpwn/sr.ht-announce@lists.sr.ht" "l.~sircmpwn.srht.announce")
- (list ".*~sircmpwn/sr.ht-dev@lists.sr.ht" "l.~sircmpwn.srht.dev")
- (list ".*~sircmpwn/sr.ht-discuss@lists.sr.ht" "l.~sircmpwn.srht.discuss")
- "INBOX")))
- (nnimap "uw"
- (nnimap-stream plain)
- (nnimap-address "127.0.0.1")
- (nnimap-server-port 143)
- (nnimap-authenticator plain)
- (nnimap-user "abandali@uw.local")
- (nnimap-inbox "INBOX")
- (nnimap-split-methods 'nnimap-split-fancy)
- (nnimap-split-fancy (|
- ;; (: gnus-registry-split-fancy-with-parent)
- ;; se463-s19
- ("subject" "\\(SE\\s-?463\\|Deliverable\\)" "course.se463-s19")
- (from "\\(SE\\s-?463\\|Gema\\|Hemant\\|Davood\\|Camilo\\|Reza\\|Michael\\|Sandy\\)" "course.se463-s19")
- ;; catch-all
- "INBOX")))
- (nnimap "csc"
- (nnimap-stream plain)
- (nnimap-address "127.0.0.1")
- (nnimap-server-port 143)
- (nnimap-authenticator plain)
- (nnimap-user "abandali@csc.uw.local")))
- gnus-message-archive-group "nnimap+shemshak:Sent"
- gnus-parameters
- '(("l\\.atreus"
- (to-address . "atreus@freelists.org")
- (to-list . "atreus@freelists.org"))
- ("l\\.deepspec"
- (to-address . "deepspec@lists.cs.princeton.edu")
- (to-list . "deepspec@lists.cs.princeton.edu")
- (list-identifier . "\\[deepspec\\]"))
- ("l\\.gnu\\.emacs\\.devel"
- (to-address . "emacs-devel@gnu.org")
- (to-list . "emacs-devel@gnu.org"))
- ("l\\.gnu\\.emacs\\.help"
- (to-address . "help-gnu-emacs@gnu.org")
- (to-list . "help-gnu-emacs@gnu.org"))
- ("l\\.gnu\\.emacs\\.info"
- (to-address . "info-gnu-emacs@gnu.org")
- (to-list . "info-gnu-emacs@gnu.org"))
- ("l\\.gnu\\.emacs\\.orgmode"
- (to-address . "emacs-orgmode@gnu.org")
- (to-list . "emacs-orgmode@gnu.org")
- (list-identifier . "\\[O\\]"))
- ("l\\.gnu\\.emacs\\.tangents"
- (to-address . "emacs-tangents@gnu.org")
- (to-list . "emacs-tangents@gnu.org"))
- ("l\\.gnu\\.emacsconf\\.discuss"
- (to-address . "emacsconf-discuss@gnu.org")
- (to-list . "emacsconf-discuss@gnu.org"))
- ("l\\.gnu\\.fencepost\\.users"
- (to-address . "fencepost-users@gnu.org")
- (to-list . "fencepost-users@gnu.org")
- (list-identifier . "\\[Fencepost-users\\]"))
- ("l\\.gnu\\.gnunet\\.developers"
- (to-address . "gnunet-developers@gnu.org")
- (to-list . "gnunet-developers@gnu.org")
- (list-identifier . "\\[GNUnet-developers\\]"))
- ("l\\.gnu\\.gnunet\\.help"
- (to-address . "help-gnunet@gnu.org")
- (to-list . "help-gnunet@gnu.org")
- (list-identifier . "\\[Help-gnunet\\]"))
- ("l\\.gnu\\.gnuzilla\\.bug"
- (to-address . "bug-gnuzilla@gnu.org")
- (to-list . "bug-gnuzilla@gnu.org")
- (list-identifier . "\\[Bug-gnuzilla\\]"))
- ("l\\.gnu\\.gnuzilla\\.dev"
- (to-address . "gnuzilla-dev@gnu.org")
- (to-list . "gnuzilla-dev@gnu.org")
- (list-identifier . "\\[Gnuzilla-dev\\]"))
- ("l\\.gnu\\.guile\\.devel"
- (to-address . "guile-devel@gnu.org")
- (to-list . "guile-devel@gnu.org"))
- ("l\\.gnu\\.guile\\.user"
- (to-address . "guile-user@gnu.org")
- (to-list . "guile-user@gnu.org"))
- ("l\\.gnu\\.guix\\.devel"
- (to-address . "guix-devel@gnu.org")
- (to-list . "guix-devel@gnu.org"))
- ("l\\.gnu\\.guix\\.help"
- (to-address . "help-guix@gnu.org")
- (to-list . "help-guix@gnu.org"))
- ("l\\.gnu\\.guix\\.info"
- (to-address . "info-guix@gnu.org")
- (to-list . "info-guix@gnu.org"))
- ("l\\.gnu\\.savannah\\.hackers\\.public"
- (to-address . "savannah-hackers-public@gnu.org")
- (to-list . "savannah-hackers-public@gnu.org"))
- ("l\\.gnu\\.savannah\\.users"
- (to-address . "savannah-users@gnu.org")
- (to-list . "savannah-users@gnu.org"))
- ("l\\.gnu\\.www\\.commits"
- (to-address . "www-commits@gnu.org")
- (to-list . "www-commits@gnu.org"))
- ("l\\.gnu\\.www\\.discuss"
- (to-address . "www-discuss@gnu.org")
- (to-list . "www-discuss@gnu.org"))
- ("l\\.haskell\\.art"
- (to-address . "haskell-art@we.lurk.org")
- (to-list . "haskell-art@we.lurk.org")
- (list-identifier . "\\[haskell-art\\]"))
- ("l\\.haskell\\.cafe"
- (to-address . "haskell-cafe@haskell.org")
- (to-list . "haskell-cafe@haskell.org")
- (list-identifier . "\\[Haskell-cafe\\]"))
- ("l\\.notmuch"
- (to-address . "notmuch@notmuchmail.org")
- (to-list . "notmuch@notmuchmail.org"))
- ("l\\.parabola\\.dev"
- (to-address . "dev@lists.parabola.nu")
- (to-list . "dev@lists.parabola.nu")
- (list-identifier . "\\[Dev\\]"))
- ("l\\.~bandali\\.public-inbox"
- (to-address . "~bandali/public-inbox@lists.sr.ht")
- (to-list . "~bandali/public-inbox@lists.sr.ht"))
- ("l\\.~sircmpwn\\.free-writers-club"
- (to-address . "~sircmpwn/free-writers-club@lists.sr.ht")
- (to-list . "~sircmpwn/free-writers-club@lists.sr.ht"))
- ("l\\.~sircmpwn\\.srht\\.admins"
- (to-address . "~sircmpwn/sr.ht-admins@lists.sr.ht")
- (to-list . "~sircmpwn/sr.ht-admins@lists.sr.ht"))
- ("l\\.~sircmpwn\\.srht\\.announce"
- (to-address . "~sircmpwn/sr.ht-announce@lists.sr.ht")
- (to-list . "~sircmpwn/sr.ht-announce@lists.sr.ht"))
- ("l\\.~sircmpwn\\.srht\\.dev"
- (to-address . "~sircmpwn/sr.ht-dev@lists.sr.ht")
- (to-list . "~sircmpwn/sr.ht-dev@lists.sr.ht"))
- ("l\\.~sircmpwn\\.srht\\.discuss"
- (to-address . "~sircmpwn/sr.ht-discuss@lists.sr.ht")
- (to-list . "~sircmpwn/sr.ht-discuss@lists.sr.ht"))
- ("webmasters"
- (to-address . "webmasters@gnu.org")
- (to-list . "webmasters@gnu.org"))
- ("gnu.*"
- (gcc-self . t))
- ("gnu\\."
- (subscribed . t))
- ("nnimap\\+uw:.*"
- (gcc-self . t)))
- gnus-large-newsgroup 50
- gnus-home-directory (no-littering-expand-var-file-name "gnus/")
- gnus-directory (concat gnus-home-directory "news/")
- message-directory (concat gnus-home-directory "mail/")
- nndraft-directory (concat gnus-home-directory "drafts/")
- gnus-save-newsrc-file nil
- gnus-read-newsrc-file nil
- gnus-interactive-exit nil
- gnus-gcc-mark-as-read t)
- :config
- (require 'ebdb)
- (require 'ebdb-mua)
- (require 'ebdb-gnus)
-
- ;; (gnus-registry-initialize)
-
- (with-eval-after-load 'recentf
- (add-to-list 'recentf-exclude gnus-home-directory)))
-
-(use-feature gnus-art
- :config
- (setq
- gnus-buttonized-mime-types '("multipart/\\(signed\\|encrypted\\)")
- gnus-visible-headers
- (concat gnus-visible-headers "\\|^List-Id:\\|^X-RT-Originator:\\|^User-Agent:")
- gnus-sorted-header-list
- '("^From:" "^Subject:" "^Summary:" "^Keywords:"
- "^Followup-To:" "^To:" "^Cc:" "X-RT-Originator"
- "^Newsgroups:" "List-Id:" "^Organization:"
- "^User-Agent:" "^Date:")
- ;; local-lapsed article dates
- ;; from https://www.emacswiki.org/emacs/GnusFormatting#toc11
- gnus-article-date-headers '(user-defined)
- gnus-article-time-format
- (lambda (time)
- (let* ((date (format-time-string "%a, %d %b %Y %T %z" time))
- (local (article-make-date-line date 'local))
- (combined-lapsed (article-make-date-line date
- 'combined-lapsed))
- (lapsed (progn
- (string-match " (.+" combined-lapsed)
- (match-string 0 combined-lapsed))))
- (concat local lapsed))))
- (bind-keys
- :map gnus-article-mode-map
- ("M-L" . org-store-link)))
-
-(use-feature gnus-sum
- :bind (:map gnus-summary-mode-map
- :prefix-map mab/gnus-summary-prefix-map
- :prefix "v"
- ("r" . gnus-summary-reply)
- ("w" . gnus-summary-wide-reply)
- ("v" . gnus-summary-show-raw-article))
- :config
- (bind-keys
- :map gnus-summary-mode-map
- ("M-L" . org-store-link))
- :hook (gnus-summary-mode . mab/no-mouse-autoselect-window))
-
-(use-feature gnus-msg
- :config
- (defvar mab/signature "Amin Bandali
-Free Software Activist | GNU Webmaster & Volunteer
-GPG: BE62 7373 8E61 6D6D 1B3A 08E8 A21A 0202 4881 6103
-https://shemshak.org/~amin")
- (defvar mab/gnu-signature "Amin Bandali
-Free Software Activist | GNU Webmaster & Volunteer
-GPG: BE62 7373 8E61 6D6D 1B3A 08E8 A21A 0202 4881 6103
-https://bandalis.org")
- (defvar mab/uw-signature "Amin Bandali, MMath Student
-Cheriton School of Computer Science
-University of Waterloo
-https://bandalis.org")
- (defvar mab/csc-signature "Amin Bandali
-Termcom, Computer Science Club
-University of Waterloo
-https://bandalis.org")
- (setq gnus-posting-styles
- '((".*"
- (address "amin@shemshak.org")
- (body "\nBest,\n")
- (signature mab/signature)
- (eval (setq mab/message-cite-say-hi t)))
- ("nnimap\\+gnu:.*"
- (address "bandali@gnu.org")
- (signature mab/gnu-signature)
- (eval (set (make-local-variable 'message-user-fqdn) "fencepost.gnu.org")))
- ((header "subject" "ThankCRM")
- (to "webmasters-comment@gnu.org")
- (body "")
- (eval (setq mab/message-cite-say-hi nil)))
- ("nnimap\\+uw:.*"
- (address "abandali@uwaterloo.ca")
- (signature mab/uw-signature))
- ("nnimap\\+uw:INBOX"
- (gcc "\"nnimap+uw:Sent Items\""))
- ("nnimap\\+csc:.*"
- (address "abandali@csclub.uwaterloo.ca")
- (signature mab/csc-signature)
- (gcc "nnimap+csc:Sent")))))
-
-(use-feature gnus-topic
- :hook (gnus-group-mode . gnus-topic-mode)
- :config (setq gnus-topic-line-format "%i[ %A: %(%{%n%}%) ]%v\n"))
-
-(use-feature gnus-agent
- :config
- (setq gnus-agent-synchronize-flags 'ask)
- :hook (gnus-group-mode . gnus-agent-mode))
-
-(use-feature gnus-group
- :config
- (setq gnus-permanently-visible-groups "\\(:INBOX$\\|:gnu$\\)"))
-
-(comment
- ;; problematic with ebdb's popup, *EBDB-Gnus*
- (use-feature gnus-win
- :config
- (setq gnus-use-full-window nil)))
-
-(use-feature gnus-dired
- :commands gnus-dired-mode
- :init
- (add-hook 'dired-mode-hook 'gnus-dired-mode))
-
-(use-feature mm-decode
- :config
- (setq mm-discouraged-alternatives '("text/html" "text/richtext")
- mm-decrypt-option 'known
- mm-verify-option 'known))
-
-(use-feature sendmail
- :config
- (setq sendmail-program (executable-find "msmtp")
- ;; message-sendmail-extra-arguments '("-v" "-d")
- mail-specify-envelope-from t
- mail-envelope-from 'header))
-
-(use-feature message
- :config
- ;; redefine for a simplified In-Reply-To header
- ;; (see 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))))
-
- (defconst mab/message-cite-style-format "On %Y-%m-%d %l:%M %p, %N wrote:")
- (defconst message-cite-style-bandali
- '((message-cite-function 'message-cite-original)
- (message-citation-line-function 'message-insert-formatted-citation-line)
- (message-cite-reply-position 'traditional)
- (message-yank-prefix "> ")
- (message-yank-cited-prefix ">")
- (message-yank-empty-prefix ">")
- (message-citation-line-format
- (if mab/message-cite-say-hi
- (concat "Hi %F,\n\n" mab/message-cite-style-format)
- mab/message-cite-style-format)))
- "Citation style based on Mozilla Thunderbird's. Use with message-cite-style.")
- (setq ;; message-cite-style 'message-cite-style-bandali
- message-kill-buffer-on-exit t
- message-send-mail-function 'message-send-mail-with-sendmail
- message-sendmail-envelope-from 'header
- message-subscribed-address-functions
- '(gnus-find-subscribed-addresses)
- message-dont-reply-to-names
- "\\(\\(\\(amin\\|mab\\)@shemshak\\.org\\)\\|\\(amin@bndl\\.org\\)\\|\\(.*@aminb\\.org\\)\\|\\(\\(bandali\\|mab\\|aminb?\\)@gnu\\.org\\)\\|\\(a\\(min\\.\\)?bandali@uwaterloo\\.ca\\)\\|\\(abandali@csclub\\.uwaterloo\\.ca\\)\\)")
- (require 'company-ebdb)
- :hook (;; (message-setup . mml-secure-message-sign-pgpmime)
- (message-mode . flyspell-mode)
- (message-mode . (lambda ()
- ;; (setq fill-column 65
- ;; message-fill-column 65)
- (make-local-variable 'company-idle-delay)
- (setq company-idle-delay 0.2))))
- ;; :custom-face
- ;; (message-header-subject ((t (:foreground "#111" :weight semi-bold))))
- ;; (message-header-to ((t (:foreground "#111" :weight normal))))
- ;; (message-header-cc ((t (:foreground "#333" :weight normal))))
- )
-
-(use-feature mml
- :delight " mml")
-
-(use-feature mml-sec
- :custom
- (mml-secure-openpgp-encrypt-to-self t)
- (mml-secure-openpgp-sign-with-sender t))
-
-(use-feature footnote
- :after message
- ;; :config
- ;; (setq footnote-start-tag ""
- ;; footnote-end-tag ""
- ;; footnote-style 'unicode)
- :bind
- (:map message-mode-map
- :prefix-map mab/footnote-prefix-map
- :prefix "C-c f"
- ("a" . footnote-add-footnote)
- ("b" . footnote-back-to-message)
- ("c" . footnote-cycle-style)
- ("d" . footnote-delete-footnote)
- ("g" . footnote-goto-footnote)
- ("r" . footnote-renumber-footnotes)
- ("s" . footnote-set-style)))
-
-(use-package ebdb
- :straight (:host github :repo "girzel/ebdb")
- :after gnus
- :bind (:map gnus-group-mode-map ("e" . ebdb))
- :config
- (setq ebdb-sources (no-littering-expand-var-file-name "ebdb"))
- (with-eval-after-load 'swiper
- (add-to-list 'swiper-font-lock-exclude 'ebdb-mode t)))
-
-(use-feature ebdb-com
- :after ebdb)
-
-;; (use-package ebdb-complete
-;; :after ebdb
-;; :config
-;; (ebdb-complete-enable))
-
-(use-package company-ebdb
- :config
- (defun company-ebdb--post-complete (_) nil))
-
-(use-feature ebdb-gnus
- :after ebdb
- :custom
- (ebdb-gnus-window-configuration
- '(article
- (vertical 1.0
- (summary 0.25 point)
- (horizontal 1.0
- (article 1.0)
- (ebdb-gnus 0.3))))))
-
-(use-feature ebdb-mua
- :after ebdb
- ;; :custom (ebdb-mua-pop-up nil)
- )
-
-;; (use-package ebdb-message
-;; :after ebdb)
-
-
-;; (use-package ebdb-vcard
-;; :after ebdb)
-
-(use-package message-x)
-
-(comment
- (use-package message-x
- :custom
- (message-x-completion-alist
- (quote
- (("\\([rR]esent-\\|[rR]eply-\\)?[tT]o:\\|[bB]?[cC][cC]:" . gnus-harvest-find-address)
- ((if
- (boundp
- (quote message-newgroups-header-regexp))
- message-newgroups-header-regexp message-newsgroups-header-regexp)
- . message-expand-group))))))
-
-(comment
- (use-package gnus-harvest
- :commands gnus-harvest-install
- :demand t
- :config
- (if (featurep 'message-x)
- (gnus-harvest-install 'message-x)
- (gnus-harvest-install))))