emacs: update packages
[~bandali/configs] / .emacs.d / init.el
index 6e435fd..0d0b352 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)
@@ -93,7 +92,9 @@
 ;; Not necessary when using straight.el
 ;;   (C-h v straight-package-neutering-mode RET)
 
-(comment
+(when (and
+       (not (featurep 'straight))
+       (version< emacs-version "27"))
   (setq package-enable-at-startup nil)
   ;; (package-initialize)
   )
   (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)
+    (a/post-init)))
 
 ;; use-package
 (straight-use-package 'use-package)
@@ -442,6 +445,14 @@ For disabling the behaviour for certain buffers and/or modes."
 ;; allow scrolling in Isearch
 (setq isearch-allow-scroll t)
 
+(use-feature vc
+  :bind ("C-x v C-=" . vc-ediff))
+
+(use-feature ediff
+  :config (add-hook 'ediff-after-quit-hook-internal 'winner-undo)
+  :custom ((ediff-window-setup-function 'ediff-setup-windows-plain)
+           (ediff-split-window-function 'split-window-horizontally)))
+
 \f
 ;;; General bindings
 
@@ -456,7 +467,7 @@ For disabling the behaviour for certain buffers and/or modes."
 
  ("C-c F m" . make-frame-command)
  ("C-c F d" . delete-frame)
- ("C-c F D" . delete-other-frames)
+ ("C-c F D" . server-edit)
 
  ("C-c o"   . other-window)
 
@@ -537,6 +548,7 @@ For disabling the behaviour for certain buffers and/or modes."
   (("C-c a o a" . org-agenda)
    :map org-mode-map
    ("M-L" . org-insert-last-stored-link)
+   ("M-O" . org-toggle-link-display)
    ("s-T" . org-todo))
   :hook ((org-mode . org-indent-mode)
          (org-mode . auto-fill-mode)
@@ -625,6 +637,7 @@ For disabling the behaviour for certain buffers and/or modes."
   (nconc magit-section-initial-visibility-alist
          '(([unpulled status] . show)
            ([unpushed status] . show)))
+  :custom (magit-display-buffer-function #'magit-display-buffer-fullframe-status-v1)
   :custom-face (magit-diff-file-heading ((t (:weight normal)))))
 
 ;; recently opened files
@@ -780,6 +793,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
@@ -851,6 +865,17 @@ For disabling the behaviour for certain buffers and/or modes."
                         (setq ediff-after-quit-hook-internal nil)
                         (set-window-configuration wnd))))
         (error "no more than 2 files should be marked"))))
+
+  (require 'dired-x)
+  (setq dired-guess-shell-alist-user
+        '(("\\.pdf\\'"  "evince" "zathura" "okular")
+          ("\\.doc\\'"  "libreoffice")
+          ("\\.docx\\'" "libreoffice")
+          ("\\.ppt\\'"  "libreoffice")
+          ("\\.pptx\\'" "libreoffice")
+          ("\\.xls\\'"  "libreoffice")
+          ("\\.xlsx\\'" "libreoffice")
+          ("\\.flac\\'" "mpv")))
   :bind (:map dired-mode-map
               ("b"  . dired-up-directory)
               ("e"  . dired-ediff-files)
@@ -885,6 +910,7 @@ For disabling the behaviour for certain buffers and/or modes."
 
 ;; highlight uncommitted changes in the left fringe
 (use-package diff-hl
+  :defer 0.6
   :config
   (setq diff-hl-draw-borders nil)
   (global-diff-hl-mode)
@@ -922,6 +948,12 @@ For disabling the behaviour for certain buffers and/or modes."
   :hook ((text-mode . indicate-buffer-boundaries-left)
          (text-mode . abbrev-mode)))
 
+(use-feature conf-mode
+  :mode "\\.*rc$")
+
+(use-feature sh-mode
+  :mode "\\.bashrc$")
+
 (use-package company
   :defer 0.6
   :bind
@@ -1143,6 +1175,8 @@ For disabling the behaviour for certain buffers and/or modes."
     :custom
     (font-latex-fontify-sectioning 'color)))
 
+(use-package go-mode)
+
 \f
 ;;; Theme
 
@@ -1368,11 +1402,12 @@ For disabling the behaviour for certain buffers and/or modes."
 
 (use-package multi-term
   :defer 0.6
-  :bind (("C-c a s m" . multi-term-dedicated-toggle)
+  :bind (("C-c a s m m" . multi-term)
+         ("C-c a s m d" . multi-term-dedicated-toggle)
+         ("C-c a s m p" . multi-term-prev)
+         ("C-c a s m n" . multi-term-next)
          :map term-mode-map
-         ("C-c C-j" . term-char-mode)
-         :map term-raw-map
-         ("C-c C-j" . term-line-mode))
+         ("C-c C-j" . term-char-mode))
   :config
   (setq multi-term-program "screen"
         multi-term-program-switches (concat "-c"
@@ -1386,19 +1421,36 @@ For disabling the behaviour for certain buffers and/or modes."
         term-bind-key-alist
         '(("C-c C-c" . term-interrupt-subjob)
           ("C-c C-e" . term-send-esc)
+          ("C-c C-j" . term-line-mode)
           ("C-k" . kill-line)
-          ("C-y" . term-paste)
+          ;; ("C-y" . term-paste)
+          ("C-y" . term-send-raw)
           ("M-f" . term-send-forward-word)
           ("M-b" . term-send-backward-word)
           ("M-p" . term-send-up)
           ("M-n" . term-send-down)
+          ("M-j" . term-send-raw-meta)
+          ("M-y" . term-send-raw-meta)
+          ("M-/" . term-send-raw-meta)
+          ("M-0" . term-send-raw-meta)
+          ("M-1" . term-send-raw-meta)
+          ("M-2" . term-send-raw-meta)
+          ("M-3" . term-send-raw-meta)
+          ("M-4" . term-send-raw-meta)
+          ("M-5" . term-send-raw-meta)
+          ("M-6" . term-send-raw-meta)
+          ("M-7" . term-send-raw-meta)
+          ("M-8" . term-send-raw-meta)
+          ("M-9" . term-send-raw-meta)
           ("<C-backspace>" . term-send-backward-kill-word)
           ("<M-DEL>" . term-send-backward-kill-word)
           ("M-d" . term-send-delete-word)
           ("M-," . term-send-raw)
           ("M-." . comint-dynamic-complete))
         term-unbind-key-alist
-        '("C-z" "C-x" "C-c" "C-h" "C-y" "<ESC>")))
+        '("C-z" "C-x" "C-c" "C-h"
+          ;; "C-y"
+          "<ESC>")))
 
 (use-package page-break-lines
   :defer 0.5
@@ -1448,55 +1500,13 @@ 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 'notifications))
+
+(use-package ivy-xref
   :init
-  (setq alert-default-style 'notifier))
+  (setq xref-show-xrefs-function #'ivy-xref-show-xrefs))
 
 \f
 ;;; Email (with Gnus)
@@ -1523,6 +1533,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")
@@ -1537,79 +1590,100 @@ 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\\."
-      (subscribed . t)))
+      (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/")
@@ -1624,6 +1698,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)))
 
@@ -1669,23 +1745,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")
+           (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
@@ -1701,9 +1790,11 @@ For disabling the behaviour for certain buffers and/or modes."
   :config
   (setq gnus-permanently-visible-groups "\\(:INBOX$\\|:gnu$\\)"))
 
-(use-feature gnus-win
-  :config
-  (setq gnus-use-full-window nil))
+(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