- :hook
- (text-mode . yas-minor-mode))
-
-(use-package debbugs
- :straight (debbugs
- :host github
- :repo "emacs-straight/debbugs"
- :files (:defaults "Debbugs.wsdl")))
-
-(use-package org-ref
- :init
- (a/setq-every '("~/usr/org/references.bib")
- reftex-default-bibliography
- org-ref-default-bibliography)
- (setq
- org-ref-bibliography-notes "~/usr/org/notes.org"
- org-ref-pdf-directory "~/usr/org/bibtex-pdfs/"))
-
-;; ugh, temporary (still better than using the proprietary web app)
-(use-package slack
- :commands (slack-start)
- :init
- (eval-when-compile ; silence the byte-compiler
- (defvar url-http-data nil)
- (defvar url-http-extra-headers nil)
- (defvar url-http-method nil)
- (defvar url-callback-function nil)
- (defvar url-callback-arguments nil)
- (defvar oauth--token-data nil))
- (setq slack-buffer-emojify t
- slack-prefer-current-team t)
- :config
- (slack-register-team
- :name "nday-students"
- :default t
- :token nday-students-token
- :subscribed-channels '(general)
- :full-and-display-names t)
- (add-to-list 'swiper-font-lock-exclude 'slack-message-buffer-mode t)
- (setq lui-time-stamp-format "[%Y-%m-%d %H:%M:%S]"
- lui-time-stamp-only-when-changed-p t
- lui-time-stamp-position 'right)
- :bind
- (("C-c s s" . slack-start)
- ("C-c s u" . slack-select-unread-rooms)
- ("C-c s b" . slack-select-rooms)
- ("C-c s t" . slack-change-current-team)
- ("C-c s c" . slack-ws-close)
- :map slack-mode-map
- ("M-p" . slack-buffer-goto-prev-message)
- ("M-n" . slack-buffer-goto-next-message)
- ("C-c e" . slack-message-edit)
- ("C-c k" . slack-message-delete)
- ("C-c C-k" . slack-channel-leave)
- ("C-c r a" . slack-message-add-reaction)
- ("C-c r r" . slack-message-remove-reaction)
- ("C-c r s" . slack-message-show-reaction-users)
- ("C-c p l" . slack-room-pins-list)
- ("C-c p a" . slack-message-pins-add)
- ("C-c p r" . slack-message-pins-remove)
- ("@" . slack-message-embed-mention)
- ("#" . slack-message-embed-channel)))
-
-(use-package alert
- :commands (alert)
- :init
- (setq alert-default-style 'notifier))
-
-\f
-;;; Email (with Gnus)
-
-(defvar a/maildir (expand-file-name "~/mail/"))
-(with-eval-after-load 'recentf
- (add-to-list 'recentf-exclude a/maildir))
-
-(setq
- a/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 "amin"
- (nnimap-stream plain)
- (nnimap-address "127.0.0.1")
- (nnimap-server-port 143)
- (nnimap-authenticator plain)
- (nnimap-user "amin@bndl.local"))
- (nnimap "uw"
- (nnimap-stream plain)
- (nnimap-address "127.0.0.1")
- (nnimap-server-port 143)
- (nnimap-authenticator plain)
- (nnimap-user "abandali@uw.local"))
- (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+amin:Sent"
- gnus-parameters
- '(("gnu\\.deepspec"
- (to-address . "deepspec@lists.cs.princeton.edu")
- (to-list . "deepspec@lists.cs.princeton.edu"))
- ("gnu\\.emacs-devel"
- (to-address . "emacs-devel@gnu.org")
- (to-list . "emacs-devel@gnu.org"))
- ("gnu\\.emacs-orgmode"
- (to-address . "emacs-orgmode@gnu.org")
- (to-list . "emacs-orgmode@gnu.org"))
- ("gnu\\.emacsconf-discuss"
- (to-address . "emacsconf-discuss@gnu.org")
- (to-list . "emacsconf-discuss@gnu.org"))
- ("gnu\\.fencepost-users"
- (to-address . "fencepost-users@gnu.org")
- (to-list . "fencepost-users@gnu.org"))
- ("gnu\\.gnunet-developers"
- (to-address . "gnunet-developers@gnu.org")
- (to-list . "gnunet-developers@gnu.org"))
- ("gnu\\.guile-devel"
- (to-address . "guile-devel@gnu.org")
- (to-list . "guile-devel@gnu.org"))
- ("gnu\\.guix-devel"
- (to-address . "guix-devel@gnu.org")
- (to-list . "guix-devel@gnu.org"))
- ("gnu\\.haskell-art"
- (to-address . "haskell-art@we.lurk.org")
- (to-list . "haskell-art@we.lurk.org"))
- ("gnu\\.haskell-cafe"
- (to-address . "haskell-cafe@haskell.org")
- (to-list . "haskell-cafe@haskell.org"))
- ("gnu\\.help-gnu-emacs"
- (to-address . "help-gnu-emacs@gnu.org")
- (to-list . "help-gnu-emacs@gnu.org"))
- ("gnu\\.info-gnu-emacs"
- (to-address . "info-gnu-emacs@gnu.org")
- (to-list . "info-gnu-emacs@gnu.org"))
- ("gnu\\.info-guix"
- (to-address . "info-guix@gnu.org")
- (to-list . "info-guix@gnu.org"))
- ("gnu\\.notmuch"
- (to-address . "notmuch@notmuchmail.org")
- (to-list . "notmuch@notmuchmail.org"))
- ("gnu\\.parabola-dev"
- (to-address . "dev@lists.parabola.nu")
- (to-list . "dev@lists.parabola.nu"))
- ("gnu\\.webmasters"
- (to-address . "webmasters@gnu.org")
- (to-list . "webmasters@gnu.org"))
- ("gnu\\.www-commits"
- (to-address . "www-commits@gnu.org")
- (to-list . "www-commits@gnu.org"))
- ("gnu\\.www-discuss"
- (to-address . "www-discuss@gnu.org")
- (to-list . "www-discuss@gnu.org"))
- ("gnu\\.~bandali\\.public-inbox"
- (to-address . "~bandali/public-inbox@lists.sr.ht")
- (to-list . "~bandali/public-inbox@lists.sr.ht"))
- ("gnu\\.~sircmpwn\\.srht-admins"
- (to-address . "~sircmpwn/sr.ht-admins@lists.sr.ht")
- (to-list . "~sircmpwn/sr.ht-admins@lists.sr.ht"))
- ("gnu\\.~sircmpwn\\.srht-announce"
- (to-address . "~sircmpwn/sr.ht-announce@lists.sr.ht")
- (to-list . "~sircmpwn/sr.ht-announce@lists.sr.ht"))
- ("gnu\\.~sircmpwn\\.srht-dev"
- (to-address . "~sircmpwn/sr.ht-dev@lists.sr.ht")
- (to-list . "~sircmpwn/sr.ht-dev@lists.sr.ht"))
- ("gnu\\.~sircmpwn\\.srht-discuss"
- (to-address . "~sircmpwn/sr.ht-discuss@lists.sr.ht")
- (to-list . "~sircmpwn/sr.ht-discuss@lists.sr.ht"))
- ("gnu.*"
- (gcc-self . t))
- ("gnu\\."
- (subscribed . 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)
-
- (with-eval-after-load 'recentf
- (add-to-list 'recentf-exclude gnus-home-directory)))
-
-(use-feature gnus-art
- :config
- (setq
- 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 a/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 . a/no-mouse-autoselect-window))
-
-(use-feature gnus-msg
- :config
- (setq gnus-posting-styles
- '((".*"
- (address "amin@bndl.org")
- (body "\nBest,\n")
- (eval (setq a/message-cite-say-hi t)))
- ("gnu.*"
- (address "bandali@gnu.org")
- (eval (set (make-local-variable 'message-user-fqdn) "fencepost.gnu.org")))
- ((header "subject" "ThankCRM")
- (to "webmasters-comment@gnu.org")
- (body "Added to 2019supporters.html.\n\nMoving to campaigns.\n\n-amin\n")
- (eval (setq a/message-cite-say-hi nil)))
- ("nnimap\\+uwaterloo:.*"
- (address "abandali@uwaterloo.ca")
- (gcc "\"nnimap+uwaterloo:Sent Items\""))
- ("nnimap\\+csclub:.*"
- (address "abandali@csclub.uwaterloo.ca")
- (gcc "nnimap+csclub: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$\\)"))
-
-(use-feature gnus-win
- :config
- (setq gnus-use-full-window nil))
-
-(use-feature mm-decode
- :config
- (setq mm-discouraged-alternatives '("text/html" "text/richtext")))
-
-(use-feature sendmail
- :config
- (setq sendmail-program "/usr/bin/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 a/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 a/message-cite-say-hi
- (concat "Hi %F,\n\n" a/message-cite-style-format)
- a/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@bndl\\.org\\)\\|\\(.*@\\(aminb\\|amin\\.bndl\\)\\.org\\)\\|\\(\\(bandali\\|aminb?\\|mab\\)@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))))
- )
-
-(with-eval-after-load 'mml-sec
- (setq 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 a/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)
- )