emacs: update packages, add delight, and :delight some modes
[~bandali/configs] / .emacs.d / init.el
index b7a433d..d6811e7 100644 (file)
       esup-child-profile-require-level 0)
 
 ;; set them back to their defaults once we're done initializing
-(add-hook
- 'after-init-hook
- (lambda ()
-   (setq gc-cons-threshold a/gc-cons-threshold
-         gc-cons-percentage a/gc-cons-percentage
-         file-name-handler-alist a/file-name-handler-alist)))
+(defun a/post-init ()
+  (setq gc-cons-threshold a/gc-cons-threshold
+        gc-cons-percentage a/gc-cons-percentage
+        file-name-handler-alist a/file-name-handler-alist))
+(add-hook 'after-init-hook #'a/post-init)
 
 ;; increase number of lines kept in *Messages* log
 (setq message-log-max 20000)
 (defun a/reload-init ()
   "Reload init.el."
   (interactive)
-  (straight-transaction
-    (straight-mark-transaction-as-init)
-    (load user-init-file)))
+  (setq a/file-name-handler-alist file-name-handler-alist)
+  (load user-init-file nil 'nomessage)
+  (a/post-init))
 
 ;; use-package
 (straight-use-package 'use-package)
 (setq use-package-always-defer t)
 (require 'bind-key)
 
+(use-package delight)
+
 ;; for browsing the Emacsmirror package database
 (comment
   (use-package epkg
@@ -651,6 +652,7 @@ For disabling the behaviour for certain buffers and/or modes."
 
 (use-package ivy
   :defer 0.3
+  :delight ;; " ๐Ÿ™’"
   :bind
   (:map ivy-minibuffer-map
    ([escape] . keyboard-escape-quit)
@@ -678,6 +680,7 @@ For disabling the behaviour for certain buffers and/or modes."
 
 (use-package counsel
   :after ivy
+  :delight
   :bind (([remap execute-extended-command] . counsel-M-x)
          ([remap find-file]                . counsel-find-file)
          ("C-c x"                          . counsel-M-x)
@@ -792,6 +795,7 @@ For disabling the behaviour for certain buffers and/or modes."
         (mode . scheme-mode)
         (mode . haskell-mode)
         (mode . lean-mode)
+        (mode . go-mode)
         (mode . alloy-mode)))
       ("tex"
        (or
@@ -817,6 +821,7 @@ For disabling the behaviour for certain buffers and/or modes."
 
 (use-feature outline
   :hook (prog-mode . outline-minor-mode)
+  :delight (outline-minor-mode " outl")
   :bind
   (:map
    outline-minor-mode-map
@@ -917,6 +922,7 @@ For disabling the behaviour for certain buffers and/or modes."
 ;; display Lisp objects at point in the echo area
 (use-feature eldoc
   :when (version< "25" emacs-version)
+  :delight " eldoc"
   :config (global-eldoc-mode))
 
 ;; highlight matching parens
@@ -925,6 +931,7 @@ For disabling the behaviour for certain buffers and/or modes."
   :config (show-paren-mode))
 
 (use-feature simple
+  :delight (auto-fill-function " fill")
   :config (column-number-mode))
 
 ;; save minibuffer history
@@ -943,11 +950,17 @@ For disabling the behaviour for certain buffers and/or modes."
   (add-hook 'prog-mode-hook #'indicate-buffer-boundaries-left))
 
 (use-feature text-mode
-  :hook ((text-mode . indicate-buffer-boundaries-left)
-         (text-mode . abbrev-mode)))
+  :hook (text-mode . indicate-buffer-boundaries-left))
+
+(use-feature conf-mode
+  :mode "\\.*rc$")
+
+(use-feature sh-mode
+  :mode "\\.bashrc$")
 
 (use-package company
   :defer 0.6
+  :delight " company"
   :bind
   (:map company-active-map
         ([tab]    . company-complete-common-or-cycle)
@@ -973,7 +986,11 @@ For disabling the behaviour for certain buffers and/or modes."
   (setq flycheck-emacs-lisp-load-path 'inherit)
 
   ;; Only flycheck when I actually save the buffer
-  (setq flycheck-check-syntax-automatically '(mode-enabled save)))
+  (setq flycheck-check-syntax-automatically '(mode-enabled save))
+  :custom (flycheck-mode-line-prefix "flyc"))
+
+(use-feature flyspell
+  :delight " flysp")
 
 ;; http://endlessparentheses.com/ispell-and-apostrophes.html
 (use-package ispell
@@ -1001,17 +1018,26 @@ For disabling the behaviour for certain buffers and/or modes."
   (advice-add #'ispell-parse-output :filter-args
               #'endless/replace-quote))
 
+(use-feature abbrev
+  :delight " abbr"
+  :hook (text-mode . abbrev-mode))
+
 \f
 ;;; Programming modes
 
 (use-feature lisp-mode
   :config
-  (add-hook 'emacs-lisp-mode-hook 'outline-minor-mode)
-  (add-hook 'emacs-lisp-mode-hook 'reveal-mode)
   (defun indent-spaces-mode ()
     (setq indent-tabs-mode nil))
   (add-hook 'lisp-interaction-mode-hook #'indent-spaces-mode))
 
+(use-feature reveal
+  :delight (reveal-mode " reveal")
+  :hook (emacs-lisp-mode . reveal-mode))
+
+(use-feature elisp-mode
+  :delight (emacs-lisp-mode "Elisp" :major))
+
 (use-package alloy-mode
   :straight (:host github :repo "dwwmmn/alloy-mode")
   :mode "\\.als\\'"
@@ -1167,6 +1193,8 @@ For disabling the behaviour for certain buffers and/or modes."
     :custom
     (font-latex-fontify-sectioning 'color)))
 
+(use-package go-mode)
+
 \f
 ;;; Theme
 
@@ -1217,6 +1245,7 @@ For disabling the behaviour for certain buffers and/or modes."
 
 (use-package which-key
   :defer 0.4
+  :delight
   :config
   (which-key-add-key-based-replacements
     ;; prefixes for global prefixes and minor modes
@@ -1304,7 +1333,9 @@ For disabling the behaviour for certain buffers and/or modes."
                    :after #'my-projectile-invalidate-cache)
        (advice-add 'magit-branch-and-checkout
                    :after #'my-projectile-invalidate-cache)))
-  :custom (projectile-completion-system 'ivy))
+  :custom
+  (projectile-completion-system 'ivy)
+  (projectile-mode-line-prefix " proj"))
 
 (use-package helpful
   :defer 0.6
@@ -1360,9 +1391,10 @@ For disabling the behaviour for certain buffers and/or modes."
 ;; easily type pretty quotes & other typography, like โ€˜โ€™โ€œโ€-โ€“โ€”ยซยปโ€นโ€บ
 (use-package typo
   :defer 0.5
+  :delight " typo"
   :config
   (typo-global-mode 1)
-  :hook (text-mode . typo-mode))
+  :hook ((text-mode erc-mode) . typo-mode))
 
 ;; highlight TODOs in buffers
 (use-package hl-todo
@@ -1444,6 +1476,7 @@ For disabling the behaviour for certain buffers and/or modes."
 
 (use-package page-break-lines
   :defer 0.5
+  :delight " pgln"
   :config
   (global-page-break-lines-mode))
 
@@ -1490,55 +1523,9 @@ For disabling the behaviour for certain buffers and/or modes."
    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))
+  :init (setq alert-default-style 'notifications))
 
 (use-package ivy-xref
   :init
@@ -1569,6 +1556,49 @@ For disabling the behaviour for certain buffers and/or modes."
             (nnimap-server-port 143)
             (nnimap-authenticator plain)
             (nnimap-user "amin@bndl.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 ".*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 ".*guix-devel.gnu.org" "l.gnu.guix.devel")
+                                 (list ".*info-guix.gnu.org" "l.gnu.guix.info")
+                                 (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 ".*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/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")
@@ -1583,75 +1613,94 @@ For disabling the behaviour for certain buffers and/or modes."
              (nnimap-user "abandali@csc.uw.local")))
    gnus-message-archive-group "nnimap+amin:Sent"
    gnus-parameters
-   '(("gnu\\.deepspec"
+   '(("l\\.deepspec"
       (to-address . "deepspec@lists.cs.princeton.edu")
-      (to-list    . "deepspec@lists.cs.princeton.edu"))
-     ("gnu\\.emacs-devel"
+      (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"))
-     ("gnu\\.emacs-orgmode"
+     ("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"))
-     ("gnu\\.emacsconf-discuss"
+      (to-list    . "emacs-orgmode@gnu.org")
+      (list-identifier . "\\[O\\]"))
+     ("l\\.gnu\\.emacsconf\\.discuss"
       (to-address . "emacsconf-discuss@gnu.org")
       (to-list    . "emacsconf-discuss@gnu.org"))
-     ("gnu\\.fencepost-users"
+     ("l\\.gnu\\.fencepost\\.users"
       (to-address . "fencepost-users@gnu.org")
-      (to-list    . "fencepost-users@gnu.org"))
-     ("gnu\\.gnunet-developers"
+      (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"))
-     ("gnu\\.guile-devel"
+      (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"))
-     ("gnu\\.guix-devel"
+     ("l\\.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"
+     ("l\\.gnu\\.guix\\.info"
       (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"
+     ("l\\.gnu\\.www\\.commits"
       (to-address . "www-commits@gnu.org")
       (to-list    . "www-commits@gnu.org"))
-     ("gnu\\.www-discuss"
+     ("l\\.gnu\\.www\\.discuss"
       (to-address . "www-discuss@gnu.org")
       (to-list    . "www-discuss@gnu.org"))
-     ("gnu\\.~bandali\\.public-inbox"
+     ("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"))
-     ("gnu\\.~sircmpwn\\.srht-admins"
+     ("l\\.~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"
+     ("l\\.~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"
+     ("l\\.~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"
+     ("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\\."
@@ -1672,6 +1721,8 @@ For disabling the behaviour for certain buffers and/or modes."
   (require 'ebdb-mua)
   (require 'ebdb-gnus)
 
+  (gnus-registry-initialize)
+
   (with-eval-after-load 'recentf
     (add-to-list 'recentf-exclude gnus-home-directory)))
 
@@ -1717,24 +1768,36 @@ For disabling the behaviour for certain buffers and/or modes."
 
 (use-feature gnus-msg
   :config
+  (defvar a/gnu-signature "Amin Bandali | GNU Webmaster
+https://bandali.eu.org | https://gnu.org
+GPG Key: BE62 7373 8E61 6D6D 1B3A  08E8 A21A 0202 4881 6103")
+  (defvar a/uw-signature "Amin Bandali, MMath Student
+Cheriton School of Computer Science
+University of Waterloo
+https://bandali.eu.org")
+  (defvar a/csc-signature "Amin Bandali | Termcom, CSC
+https://csclub.uwaterloo.ca/~abandali/")
   (setq gnus-posting-styles
         '((".*"
            (address "amin@bndl.org")
            (body "\nBest,\n")
            (eval (setq a/message-cite-say-hi t)))
-          ("gnu.*"
+          ("nnimap\\+gnu:.*"
            (address "bandali@gnu.org")
+           (signature a/gnu-signature)
            (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")
+           (body "Added  to 2019supporters.html.\n\nMoving to campaigns.\n")
            (eval (setq a/message-cite-say-hi nil)))
           ("nnimap\\+uw:.*"
-           (address "abandali@uwaterloo.ca"))
+           (address "abandali@uwaterloo.ca")
+           (signature a/uw-signature))
           ("nnimap\\+uw:INBOX"
            (gcc "\"nnimap+uw:Sent Items\""))
           ("nnimap\\+csc:.*"
            (address "abandali@csclub.uwaterloo.ca")
+           (signature a/csc-signature)
            (gcc "nnimap+csc:Sent")))))
 
 (use-feature gnus-topic
@@ -1819,9 +1882,13 @@ For disabling the behaviour for certain buffers and/or modes."
   ;; (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 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