emacs: delete many unused and/or disabled packages
[~bandali/configs] / .emacs.d / init.el
index e36e204..994b536 100644 (file)
@@ -1,6 +1,6 @@
-;;; init.el --- mab's emacs configuration -*- lexical-binding: t -*-
+;;; init.el --- bandali's emacs configuration -*- lexical-binding: t -*-
 
 
-;; Copyright (C) 2018-2019  Amin Bandali <mab@gnu.org>
+;; Copyright (C) 2018-2019  Amin Bandali <bandali@gnu.org>
 
 ;; This program is free software: you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
 
 ;; This program is free software: you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
 
 ;;; Commentary:
 
 
 ;;; Commentary:
 
-;; Emacs configuration of Amin Bandali, computer scientist, free
-;; software activist, GNU maintainer & webmaster.  Packages are
-;; installed from GNU Guix, for purely functional and fully
-;; reproducible package management.  Before switching to GNU Guix,
-;; I used straight.el for package management, and before that, Borg.
+;; GNU Emacs configuration of Amin Bandali, computer scientist,
+;; Free Software activist, and GNU maintainer & webmaster.  Packages
+;; are installed through GNU Guix for a fully reproducible setup.
+;; Before switching to Guix, I used straight.el, and before that Borg.
 
 ;; Over the years, I've taken inspiration from configurations of many
 ;; great people.  Some that I can remember off the top of my head are:
 
 ;; Over the years, I've taken inspiration from configurations of many
 ;; great people.  Some that I can remember off the top of my head are:
@@ -55,7 +54,7 @@
 (defvar b/gc-cons-threshold gc-cons-threshold)
 (defvar b/gc-cons-percentage gc-cons-percentage)
 (defvar b/file-name-handler-alist file-name-handler-alist)
 (defvar b/gc-cons-threshold gc-cons-threshold)
 (defvar b/gc-cons-percentage gc-cons-percentage)
 (defvar b/file-name-handler-alist file-name-handler-alist)
-(setq gc-cons-threshold (* 400 1024 1024)  ; 400 MiB
+(setq gc-cons-threshold (* 30 1024 1024)  ; 30 MiB
       gc-cons-percentage 0.6
       file-name-handler-alist nil
       ;; sidesteps a bug when profiling with esup
       gc-cons-percentage 0.6
       file-name-handler-alist nil
       ;; sidesteps a bug when profiling with esup
   (setq b/emacs-initialized     t
         gc-cons-threshold       b/gc-cons-threshold
         gc-cons-percentage      b/gc-cons-percentage
   (setq b/emacs-initialized     t
         gc-cons-threshold       b/gc-cons-threshold
         gc-cons-percentage      b/gc-cons-percentage
-        file-name-handler-alist b/file-name-handler-alist))
+        file-name-handler-alist b/file-name-handler-alist)
+  (with-eval-after-load 'exwm-workspace
+    (setq-default
+     mode-line-format
+     (append
+      mode-line-format
+      '((:eval
+         (format
+          "[%s]" (number-to-string
+                  exwm-workspace-current-index))))))))
 (add-hook 'after-init-hook #'b/post-init)
 
 ;; increase number of lines kept in *Messages* log
 (add-hook 'after-init-hook #'b/post-init)
 
 ;; increase number of lines kept in *Messages* log
@@ -82,7 +90,7 @@
 ;;; whoami
 
 (setq user-full-name "Amin Bandali"
 ;;; whoami
 
 (setq user-full-name "Amin Bandali"
-      user-mail-address "mab@gnu.org")
+      user-mail-address "bandali@gnu.org")
 
 \f
 ;;; comment macro
 
 \f
 ;;; comment macro
 \f
 ;;; Initial setup
 
 \f
 ;;; Initial setup
 
-(defvar b/exwm-p (string= (system-name) "jirud")
+(defvar b/exwm-p (string= (system-name) "chaman")
   "Whether or not we will be using `exwm'.")
 
 ;; keep ~/.emacs.d clean
   "Whether or not we will be using `exwm'.")
 
 ;; keep ~/.emacs.d clean
   (with-demoted-errors
       (load (b/etc "secrets"))))
 
   (with-demoted-errors
       (load (b/etc "secrets"))))
 
-;; better $PATH (and other environment variable) handling
-(use-package exec-path-from-shell
-  :defer 0.4
-  :init
-  (setq exec-path-from-shell-arguments           nil
-        exec-path-from-shell-check-startup-files nil)
-  :config
-  (exec-path-from-shell-initialize)
-  ;; while we're at it, let's fix access to our running ssh-agent
-  (exec-path-from-shell-copy-env "SSH_AGENT_PID")
-  (exec-path-from-shell-copy-env "SSH_AUTH_SOCK"))
-
 ;; start up emacs server.  see
 ;; https://www.gnu.org/software/emacs/manual/html_node/emacs/Emacs-Server.html#Emacs-Server
 (use-package server
 ;; start up emacs server.  see
 ;; https://www.gnu.org/software/emacs/manual/html_node/emacs/Emacs-Server.html#Emacs-Server
 (use-package server
@@ -357,18 +353,16 @@ For disabling the behaviour for certain buffers and/or modes."
 
 ;; time and battery in mode-line
 (use-package time
 
 ;; time and battery in mode-line
 (use-package time
-  :if b/exwm-p
   :demand
   :config
   (display-time-mode)
   :custom
   (display-time-default-load-average nil)
   :demand
   :config
   (display-time-mode)
   :custom
   (display-time-default-load-average nil)
-  (display-time-format "%a %b %-e, %-l:%M%P")
+  (display-time-format "%a %b %-e %-l:%M%P")
   (display-time-mail-icon '(image :type xpm :file "gnus/gnus-pointer.xpm" :ascent center))
   (display-time-use-mail-icon t))
 
 (use-package battery
   (display-time-mail-icon '(image :type xpm :file "gnus/gnus-pointer.xpm" :ascent center))
   (display-time-use-mail-icon t))
 
 (use-package battery
-  :if b/exwm-p
   :demand
   :config
   (display-battery-mode)
   :demand
   :config
   (display-battery-mode)
@@ -639,17 +633,17 @@ around if needed."
           ([XF86AudioMute] .
            (lambda ()
              (interactive)
           ([XF86AudioMute] .
            (lambda ()
              (interactive)
-             (start-process "" nil "pamixer" "--toggle-mute")))
+             (start-process "" nil "amixer" "set" "'Master',0" "toggle")))
           ([XF86AudioLowerVolume] .
            (lambda ()
              (interactive)
              (start-process
           ([XF86AudioLowerVolume] .
            (lambda ()
              (interactive)
              (start-process
-              "" nil "pamixer" "--allow-boost" "--decrease" "5")))
+              "" nil "amixer" "set" "'Master',0" "5%-")))
           ([XF86AudioRaiseVolume] .
            (lambda ()
              (interactive)
              (start-process
           ([XF86AudioRaiseVolume] .
            (lambda ()
              (interactive)
              (start-process
-              "" nil "pamixer" "--allow-boost" "--increase" "5")))
+              "" nil "amixer" "set" "'Master',0" "5%+")))
           ([XF86AudioPlay] .
            (lambda ()
              (interactive)
           ([XF86AudioPlay] .
            (lambda ()
              (interactive)
@@ -707,7 +701,7 @@ around if needed."
   (exwm-manage-finish . (lambda ()
                           (when exwm-class-name
                             (cond
   (exwm-manage-finish . (lambda ()
                           (when exwm-class-name
                             (cond
-                             ((string= exwm-class-name "Abrowser")
+                             ((string= exwm-class-name "IceCat")
                               (exwm-input-set-local-simulation-keys
                                `(,@exwm-input-simulation-keys
                                  ([?\C-\S-d] . [?\C-d]))))
                               (exwm-input-set-local-simulation-keys
                                `(,@exwm-input-simulation-keys
                                  ([?\C-\S-d] . [?\C-d]))))
@@ -857,7 +851,7 @@ around if needed."
   ;;                         'magit-insert-untracked-files
   ;;                         'append)
   (setq magit-repository-directories '(("~/" . 0)
   ;;                         'magit-insert-untracked-files
   ;;                         'append)
   (setq magit-repository-directories '(("~/" . 0)
-                                       ("~/src/git/" . 1)))
+                                       ("~/src/git/" . 2)))
   (nconc magit-section-initial-visibility-alist
          '(([unpulled status] . show)
            ([unpushed status] . show)))
   (nconc magit-section-initial-visibility-alist
          '(([unpulled status] . show)
            ([unpushed status] . show)))
@@ -882,8 +876,9 @@ around if needed."
 
 (bind-keys
  ("C-c f ." . find-file)
 
 (bind-keys
  ("C-c f ." . find-file)
+ ("C-c f d" . find-name-dired)
  ("C-c f l" . find-library)
  ("C-c f l" . find-library)
- ("C-c f r" . recentf-open-files)
;; ("C-c f r" . recentf-open-files)
  ("C-c x"   . execute-extended-command))
 
 (comment
  ("C-c x"   . execute-extended-command))
 
 (comment
@@ -993,22 +988,6 @@ This function is intended for use with `ivy-ignore-buffers'."
   (counsel-mode 1)
   (defalias 'locate #'counsel-locate))
 
   (counsel-mode 1)
   (defalias 'locate #'counsel-locate))
 
-(comment
-  (use-package helm
-    :commands (helm-M-x helm-mini helm-resume)
-    :bind (("M-x"     . helm-M-x)
-           ("M-y"     . helm-show-kill-ring)
-           ("C-x b"   . helm-mini)
-           ("C-x C-b" . helm-buffers-list)
-           ("C-x C-f" . helm-find-files)
-           ("C-h r"   . helm-info-emacs)
-           ("C-s-r"   . helm-resume)
-           :map helm-map
-           ("<tab>" . helm-execute-persistent-action)
-           ("C-i"   . helm-execute-persistent-action) ; Make TAB work in terminals
-           ("C-z"   . helm-select-action))            ; List actions
-    :config (helm-mode 1)))
-
 (use-package eshell
   :defer 0.5
   :commands eshell
 (use-package eshell
   :defer 0.5
   :commands eshell
@@ -1036,8 +1015,12 @@ This function is intended for use with `ivy-ignore-buffers'."
                ("C-S-l" . b/eshell-clear)
                ("M-r"   . counsel-esh-history)
                ;; ([tab]   . company-complete)
                ("C-S-l" . b/eshell-clear)
                ("M-r"   . counsel-esh-history)
                ;; ([tab]   . company-complete)
-               :map eshell-hist-mode-map
-               ("M-r" . counsel-esh-history)))
+               )
+    (if (version< "27" emacs-version)
+        (bind-keys :map eshell-hist-mode-map
+                   ("M-r" . counsel-esh-history))
+      (bind-keys :map eshell-mode-map
+                 ("M-r" . counsel-esh-history))))
 
   :hook (eshell-mode . b/eshell-setup)
   :custom
 
   :hook (eshell-mode . b/eshell-setup)
   :custom
@@ -1075,7 +1058,8 @@ This function is intended for use with `ivy-ignore-buffers'."
         (mode . message-mode)))
       ("web"
        (or
         (mode . message-mode)))
       ("web"
        (or
-        (mode . web-mode)
+        ;; (mode . web-mode)
+        (mode . mhtml-mode)
         (mode . css-mode)
         (mode . scss-mode)
         (mode . js2-mode)))
         (mode . css-mode)
         (mode . scss-mode)
         (mode . js2-mode)))
@@ -1182,8 +1166,8 @@ This function is intended for use with `ivy-ignore-buffers'."
           ("\\.flac\\'" "mpv")))
   :bind (:map dired-mode-map
               ("b"  . dired-up-directory)
           ("\\.flac\\'" "mpv")))
   :bind (:map dired-mode-map
               ("b"  . dired-up-directory)
-              ("e"  . dired-ediff-files)
-              ("E"  . dired-toggle-read-only)
+              ("E"  . dired-ediff-files)
+              ("e"  . dired-toggle-read-only)
               ("\\" . dired-hide-details-mode)
               ("z"  . (lambda ()
                         (interactive)
               ("\\" . dired-hide-details-mode)
               ("z"  . (lambda ()
                         (interactive)
@@ -1202,9 +1186,6 @@ This function is intended for use with `ivy-ignore-buffers'."
   (add-to-list 'tramp-default-proxies-alist
                (list (regexp-quote (system-name)) nil nil)))
 
   (add-to-list 'tramp-default-proxies-alist
                (list (regexp-quote (system-name)) nil nil)))
 
-(use-package dash
-  :config (dash-enable-font-lock))
-
 (use-package doc-view
   :bind (:map doc-view-mode-map
               ("M-RET" . image-previous-line)))
 (use-package doc-view
   :bind (:map doc-view-mode-map
               ("M-RET" . image-previous-line)))
@@ -1273,6 +1254,7 @@ This function is intended for use with `ivy-ignore-buffers'."
   :mode "\\.bashrc$")
 
 (use-package company
   :mode "\\.bashrc$")
 
 (use-package company
+  :disabled
   :bind
   (:map company-active-map
         ([tab]    . company-complete-common-or-cycle)
   :bind
   (:map company-active-map
         ([tab]    . company-complete-common-or-cycle)
@@ -1384,132 +1366,24 @@ This function is intended for use with `ivy-ignore-buffers'."
         lean-input-user-translations '(("/" "/")))
   (lean-input-setup))
 
         lean-input-user-translations '(("/" "/")))
   (lean-input-setup))
 
-(comment
-  (use-package proof-site                 ; for Coq
-    :straight proof-general)
-
-  (use-package haskell-mode
-    :config
-    (setq haskell-indentation-layout-offset 4
-          haskell-indentation-left-offset 4
-          flycheck-checker 'haskell-hlint
-          flycheck-disabled-checkers '(haskell-stack-ghc haskell-ghc)))
-
-  (use-package dante
-    :after haskell-mode
-    :commands dante-mode
-    :hook (haskell-mode . dante-mode))
-
-  (use-package hlint-refactor
-    :after haskell-mode
-    :bind (:map hlint-refactor-mode-map
-                ("C-c l b" . hlint-refactor-refactor-buffer)
-                ("C-c l r" . hlint-refactor-refactor-at-point))
-    :hook (haskell-mode . hlint-refactor-mode))
-
-  (use-package flycheck-haskell
-    :after haskell-mode)
-  ;; alternative: hs-lint https://github.com/ndmitchell/hlint/blob/20e116a043f2073c57b17b24ae6364b5e433ba7e/data/hs-lint.el
-  )
+(use-package mhtml-mode)
 
 (use-package sgml-mode
   :config
 
 (use-package sgml-mode
   :config
-  (setq sgml-basic-offset 2))
+  (setq sgml-basic-offset 0))
 
 (use-package css-mode
   :config
   (setq css-indent-offset 2))
 
 
 (use-package css-mode
   :config
   (setq css-indent-offset 2))
 
-(use-package web-mode
-  :mode "\\.html\\'"
-  :config
-  (b/setq-every 2
-    web-mode-code-indent-offset
-    web-mode-css-indent-offset
-    web-mode-markup-indent-offset)
-  :custom
-  (web-mode-enable-auto-indentation nil))
-
 (use-package emmet-mode
 (use-package emmet-mode
-  :after (:any web-mode css-mode sgml-mode)
+  :after (:any mhtml-mode css-mode sgml-mode)
   :bind* (("C-)" . emmet-next-edit-point)
           ("C-(" . emmet-prev-edit-point))
   :config
   (unbind-key "C-j" emmet-mode-keymap)
   (setq emmet-move-cursor-between-quotes t)
   :bind* (("C-)" . emmet-next-edit-point)
           ("C-(" . emmet-prev-edit-point))
   :config
   (unbind-key "C-j" emmet-mode-keymap)
   (setq emmet-move-cursor-between-quotes t)
-  :hook (web-mode css-mode html-mode sgml-mode))
-
-(comment
-  (use-package meghanada
-    :bind
-    (:map meghanada-mode-map
-          (("C-M-o" . meghanada-optimize-import)
-           ("C-M-t" . meghanada-import-all)))
-    :hook (java-mode . meghanada-mode)))
-
-(comment
-  (use-package treemacs
-    :config (setq treemacs-never-persist t))
-
-  (use-package yasnippet
-    :config
-    ;; (yas-global-mode)
-    )
-
-  (use-package lsp-mode
-    :init (setq lsp-eldoc-render-all nil
-                lsp-highlight-symbol-at-point nil)
-    )
-
-  (use-package hydra)
-
-  (use-package company-lsp
-    :after company
-    :config
-    (setq company-lsp-cache-candidates t
-          company-lsp-async t))
-
-  (use-package lsp-ui
-    :config
-    (setq lsp-ui-sideline-update-mode 'point))
-
-  (use-package lsp-java
-    :config
-    (add-hook 'java-mode-hook
-              (lambda ()
-                (setq-local company-backends (list 'company-lsp))))
-
-    (add-hook 'java-mode-hook 'lsp-java-enable)
-    (add-hook 'java-mode-hook 'flycheck-mode)
-    (add-hook 'java-mode-hook 'company-mode)
-    (add-hook 'java-mode-hook 'lsp-ui-mode))
-
-  (use-package dap-mode
-    :after lsp-mode
-    :config
-    (dap-mode t)
-    (dap-ui-mode t))
-
-  (use-package dap-java
-    :after (lsp-java))
-
-  (use-package lsp-java-treemacs
-    :after (treemacs)))
-
-(comment
-  (use-package eclim
-    :bind (:map eclim-mode-map ("S-SPC" . company-complete))
-    :hook ((java-mode . eclim-mode)
-           (eclim-mode . (lambda ()
-                           (make-local-variable 'company-idle-delay)
-                           (defvar company-idle-delay)
-                           ;; (setq company-idle-delay 0.7)
-                           (setq company-idle-delay nil))))
-    :custom
-    (eclim-auto-save nil)
-    ;; (eclimd-default-workspace "~/src/eclipse-workspace-exp")
-    (eclim-executable "~/.p2/pool/plugins/org.eclim_2.8.0/bin/eclim")
-    (eclim-eclipse-dirs '("~/usr/eclipse/dsl-2018-09/eclipse"))))
+  :hook (css-mode html-mode sgml-mode))
 
 (use-package geiser)
 
 
 (use-package geiser)
 
@@ -1555,6 +1429,8 @@ This function is intended for use with `ivy-ignore-buffers'."
   :commands (sml/apply-theme)
   :demand
   :config
   :commands (sml/apply-theme)
   :demand
   :config
+  ;; thanks, but no thnaks; don't make fixed-width fills.
+  (defun sml/fill-for-buffer-identification () "")
   (setq sml/theme 'tangomod)
   (sml/setup)
   (smart-mode-line-enable))
   (setq sml/theme 'tangomod)
   (sml/setup)
   (smart-mode-line-enable))
@@ -1568,11 +1444,6 @@ This function is intended for use with `ivy-ignore-buffers'."
 
 (use-package doom-themes)
 
 
 (use-package doom-themes)
 
-(use-package solarized-theme
-  :disabled
-  :config
-  (load-theme 'solarized-light t))
-
 (use-package moody
   :disabled
   :demand
 (use-package moody
   :disabled
   :demand
@@ -1605,7 +1476,8 @@ This function is intended for use with `ivy-ignore-buffers'."
   (interactive)
   (mapc #'disable-theme custom-enabled-themes)
   (load-theme 'tangomod t)
   (interactive)
   (mapc #'disable-theme custom-enabled-themes)
   (load-theme 'tangomod t)
-  (sml/apply-theme 'tangomod)
+  (when (featurep 'smart-mode-line)
+    (sml/apply-theme 'tangomod))
   (font-lock-remove-keywords
    'org-mode b/org-mode-font-lock-keywords)
   (when (featurep 'erc-hl-nicks)
   (font-lock-remove-keywords
    'org-mode b/org-mode-font-lock-keywords)
   (when (featurep 'erc-hl-nicks)
@@ -1618,7 +1490,8 @@ This function is intended for use with `ivy-ignore-buffers'."
   (interactive)
   (mapc #'disable-theme custom-enabled-themes)
   (load-theme 'doom-one t)
   (interactive)
   (mapc #'disable-theme custom-enabled-themes)
   (load-theme 'doom-one t)
-  (sml/apply-theme 'automatic)
+  (when (featurep 'smart-mode-line)
+    (sml/apply-theme 'automatic))
   (font-lock-add-keywords
    'org-mode b/org-mode-font-lock-keywords t)
   (when (featurep 'erc-hl-nicks)
   (font-lock-add-keywords
    'org-mode b/org-mode-font-lock-keywords t)
   (when (featurep 'erc-hl-nicks)
@@ -1681,12 +1554,6 @@ This function is intended for use with `ivy-ignore-buffers'."
     "C-c f n" "footnote")
   (which-key-add-major-mode-key-based-replacements 'org-mode
     "C-c C-v" "org-babel")
     "C-c f n" "footnote")
   (which-key-add-major-mode-key-based-replacements 'org-mode
     "C-c C-v" "org-babel")
-  (which-key-add-major-mode-key-based-replacements 'web-mode
-    "C-c C-a" "web/attributes"
-    "C-c C-b" "web/blocks"
-    "C-c C-d" "web/dom"
-    "C-c C-e" "web/element"
-    "C-c C-t" "web/tags")
 
   (which-key-mode)
   :custom
 
   (which-key-mode)
   :custom
@@ -1710,6 +1577,7 @@ This function is intended for use with `ivy-ignore-buffers'."
          ("<end>"  . mwim-end-of-line-or-code)))
 
 (use-package projectile
          ("<end>"  . mwim-end-of-line-or-code)))
 
 (use-package projectile
+  :disabled
   :defer 0.5
   :bind-keymap ("C-c p" . projectile-command-map)
   :config
   :defer 0.5
   :bind-keymap ("C-c p" . projectile-command-map)
   :config
@@ -1792,46 +1660,12 @@ This function is intended for use with `ivy-ignore-buffers'."
   :after message
   :hook (message-mode . orgalist-mode))
 
   :after message
   :hook (message-mode . orgalist-mode))
 
-;; easily type pretty quotes & other typography, like ‘’“”-–—«»‹›
-(use-package typo
-  :defer 0.5
-  :config
-  :hook (((text-mode erc-mode web-mode) . typo-mode)
-         ((tex-mode git-commit-mode)    . (lambda ()(typo-mode -1)))))
-
-(use-package electric
-  :disabled
-  :demand
-  :config
-  (electric-quote-mode))
-
 ;; highlight TODOs in buffers
 (use-package hl-todo
   :defer 0.5
   :config
   (global-hl-todo-mode))
 
 ;; highlight TODOs in buffers
 (use-package hl-todo
   :defer 0.5
   :config
   (global-hl-todo-mode))
 
-(use-package shrink-path
-  :defer 0.5
-  :after eshell
-  :config
-  (defvar user-@-host (concat (user-login-name) "@" (system-name) ":"))
-  (defun +eshell/prompt ()
-    (concat (propertize user-@-host 'face 'default)
-            (propertize (abbreviate-file-name default-directory)
-                        'face 'font-lock-comment-face)
-            (propertize "\n" 'face 'default)
-            (if (= (user-uid) 0)
-                (propertize "#" 'face 'red)
-              (propertize "$" 'face 'default))
-            (propertize " " 'face 'default)))
-  (setq eshell-prompt-regexp "\\(.*\n\\)*[$#] "
-        eshell-prompt-function #'+eshell/prompt))
-
-(use-package eshell-up
-  :after eshell
-  :commands eshell-up)
-
 (use-package multi-term
   :disabled
   :defer 0.6
 (use-package multi-term
   :disabled
   :defer 0.6
@@ -1905,11 +1739,6 @@ This function is intended for use with `ivy-ignore-buffers'."
                ("p" . mc/mark-previous-like-this)
                ("a" . mc/mark-all-like-this))))
 
                ("p" . mc/mark-previous-like-this)
                ("a" . mc/mark-all-like-this))))
 
-(use-package forge
-  :disabled
-  :demand
-  :after magit)
-
 (use-package yasnippet
   :defer 0.6
   :config
 (use-package yasnippet
   :defer 0.6
   :config
@@ -1936,19 +1765,24 @@ This function is intended for use with `ivy-ignore-buffers'."
    ("C-c D b" . debbugs-gnu-bugs)
    ("C-c D e" .
     (lambda ()
    ("C-c D b" . debbugs-gnu-bugs)
    ("C-c D e" .
     (lambda ()
-      (interactive)
+      (interactive)                     ; bug-gnu-emacs
       (setq debbugs-gnu-current-suppress t)
       (debbugs-gnu debbugs-gnu-default-severities '("emacs"))))
       (setq debbugs-gnu-current-suppress t)
       (debbugs-gnu debbugs-gnu-default-severities '("emacs"))))
-   ("C-c D g" .
+   ("C-c D g" .                         ; bug-gnuzilla
     (lambda ()
       (interactive)
       (setq debbugs-gnu-current-suppress t)
       (debbugs-gnu debbugs-gnu-default-severities '("gnuzilla"))))
     (lambda ()
       (interactive)
       (setq debbugs-gnu-current-suppress t)
       (debbugs-gnu debbugs-gnu-default-severities '("gnuzilla"))))
-   ("C-c D G" .
+   ("C-c D G b" .                       ; bug-guix
     (lambda ()
       (interactive)
       (setq debbugs-gnu-current-suppress t)
     (lambda ()
       (interactive)
       (setq debbugs-gnu-current-suppress t)
-      (debbugs-gnu debbugs-gnu-default-severities '("guix"))))))
+      (debbugs-gnu debbugs-gnu-default-severities '("guix"))))
+   ("C-c D G p" .                       ; guix-patches
+    (lambda ()
+      (interactive)
+      (setq debbugs-gnu-current-suppress t)
+      (debbugs-gnu debbugs-gnu-default-severities '("guix-patches"))))))
 
 (use-package org-ref
   :init
 
 (use-package org-ref
   :init
@@ -1959,16 +1793,8 @@ This function is intended for use with `ivy-ignore-buffers'."
    org-ref-bibliography-notes "~/usr/org/notes.org"
    org-ref-pdf-directory "~/usr/org/bibtex-pdfs/"))
 
    org-ref-bibliography-notes "~/usr/org/notes.org"
    org-ref-pdf-directory "~/usr/org/bibtex-pdfs/"))
 
-(use-package alert
-  :commands (alert)
-  :init (setq alert-default-style 'notifications))
-
 ;; (use-package fill-column-indicator)
 
 ;; (use-package fill-column-indicator)
 
-(use-package emojify
-  :disabled
-  :hook (erc-mode . emojify-mode))
-
 (use-package window
   :bind
   (("C-c w e"   . (lambda ()
 (use-package window
   :bind
   (("C-c w e"   . (lambda ()
@@ -2067,42 +1893,18 @@ This function is intended for use with `ivy-ignore-buffers'."
   :config
   (eosd-start))
 
   :config
   (eosd-start))
 
-(use-package nnreddit
-  :disabled
-  :demand
-  :after gnus
-  :custom
-  (nnreddit-python-command "python3"))
-
-(use-package hyperbole
-  :disabled
-  :straight (hyperbole
-             :host github :repo "rswgnu/hyperbole"
-             :files ("*.el" ("kotl" "kotl/*.el")
-                     "DEMO" "man/*.info" "man/*.texi")))
-
-;; (use-package oddmuse-curl
-;;   :straight (:host github :repo "kensanata/oddmuse-curl")
-;;   :config
-;;   (setq
-;;    oddmuse-wikis
-;;    (append
-;;     '(("EmacsConf" "https://emacsconf.org" utf-8 "question" nil)
-;;       ("EmacsConf 2019" "https://emacsconf.org/2019" utf-8 "question" nil))
-;;     oddmuse-wikis))
-;;   :custom
-;;   (oddmuse-username "bandali"))
-
-(use-package debpaste
-  :custom
-  (debpaste-paste-is-hidden t))
-
 (use-package scpaste
   :disabled
   :config
   (setq scpaste-http-destination "https://p.bndl.org"
         scpaste-scp-destination "nix:/var/www/p.bndl.org"))
 
 (use-package scpaste
   :disabled
   :config
   (setq scpaste-http-destination "https://p.bndl.org"
         scpaste-scp-destination "nix:/var/www/p.bndl.org"))
 
+(use-package eww
+  :bind ("C-c a e w" . eww)
+  :custom
+  (eww-download-directory (file-name-as-directory
+                           (getenv "XDG_DOWNLOAD_DIR"))))
+
 \f
 ;;; Email (with Gnus)
 
 \f
 ;;; Email (with Gnus)
 
@@ -2116,9 +1918,9 @@ This function is intended for use with `ivy-ignore-buffers'."
  read-mail-command 'gnus)
 
 (use-package gnus
  read-mail-command 'gnus)
 
 (use-package gnus
-  :bind (("s-m"     . gnus)
+  :bind (("s-m"     . gnus-plugged)
          ("s-M"     . gnus-unplugged)
          ("s-M"     . gnus-unplugged)
-         ("C-c a m" . gnus)
+         ("C-c a m" . gnus-plugged)
          ("C-c a M" . gnus-unplugged))
   :init
   (setq
          ("C-c a M" . gnus-unplugged))
   :init
   (setq
@@ -2135,7 +1937,7 @@ This function is intended for use with `ivy-ignore-buffers'."
              (nnimap-address "127.0.0.1")
              (nnimap-server-port 143)
              (nnimap-authenticator plain)
              (nnimap-address "127.0.0.1")
              (nnimap-server-port 143)
              (nnimap-authenticator plain)
-             (nnimap-user "mab@gnu.local")
+             (nnimap-user "bandali@gnu.local")
              (nnimap-inbox "INBOX")
              (nnimap-split-methods 'nnimap-split-fancy)
              (nnimap-split-fancy (|
              (nnimap-inbox "INBOX")
              (nnimap-split-methods 'nnimap-split-fancy)
              (nnimap-split-fancy (|
@@ -2420,13 +2222,13 @@ Cheriton School of Computer Science
 University of Waterloo
 https://bandali.eu.org")
   (defvar b/csc-signature "Amin Bandali
 University of Waterloo
 https://bandali.eu.org")
   (defvar b/csc-signature "Amin Bandali
-Systems Committee
+System Administrator, Systems Committee
 Computer Science Club, University of Waterloo
 https://csclub.uwaterloo.ca/~abandali")
   (setq gnus-message-replysign t
         gnus-posting-styles
         '((".*"
 Computer Science Club, University of Waterloo
 https://csclub.uwaterloo.ca/~abandali")
   (setq gnus-message-replysign t
         gnus-posting-styles
         '((".*"
-           (address "mab@gnu.org"))
+           (address "bandali@gnu.org"))
           ("nnimap\\+gnu:l\\..*"
            (signature nil))
           ("nnimap\\+gnu:.*"
           ("nnimap\\+gnu:l\\..*"
            (signature nil))
           ("nnimap\\+gnu:.*"
@@ -2492,7 +2294,8 @@ https://csclub.uwaterloo.ca/~abandali")
 
 (use-package mm-uu
   :config
 
 (use-package mm-uu
   :config
-  (set-face-attribute 'mm-uu-extract nil :extend t)
+  (when (version< "27" emacs-version)
+    (set-face-attribute 'mm-uu-extract nil :extend t))
   :custom
   (mm-uu-diff-groups-regexp
    "\\(gmane\\|gnu\\|l\\)\\..*\\(diff\\|commit\\|cvs\\|bug\\|dev\\)"))
   :custom
   (mm-uu-diff-groups-regexp
    "\\(gmane\\|gnu\\|l\\)\\..*\\(diff\\|commit\\|cvs\\|bug\\|dev\\)"))
@@ -2537,7 +2340,7 @@ https://csclub.uwaterloo.ca/~abandali")
         message-subscribed-address-functions
         '(gnus-find-subscribed-addresses)
         message-dont-reply-to-names
         message-subscribed-address-functions
         '(gnus-find-subscribed-addresses)
         message-dont-reply-to-names
-        "\\(\\(\\(amin\\|mab\\)@shemshak\\.org\\)\\|\\(.*@aminb\\.org\\)\\|\\(\\(mab\\|bandali\\|aminb?\\)@gnu\\.org\\)\\|\\(a?bandali@\\(csclub\\.\\)?uwaterloo\\.ca\\)\\)")
+        "\\(\\(amin@shemshak\\.org\\)\\|\\(.*@aminb\\.org\\)\\|\\(\\(bandali\\|mab\\|aminb?\\)@gnu\\.org\\)\\|\\(a?bandali@\\(csclub\\.\\)?uwaterloo\\.ca\\)\\)")
   ;; (require 'company-ebdb)
   :hook (;; (message-setup . mml-secure-message-sign-pgpmime)
          (message-mode . flyspell-mode)
   ;; (require 'company-ebdb)
   :hook (;; (message-setup . mml-secure-message-sign-pgpmime)
          (message-mode . flyspell-mode)
@@ -2578,17 +2381,6 @@ https://csclub.uwaterloo.ca/~abandali")
         ("r" . footnote-renumber-footnotes)
         ("s" . footnote-set-style)))
 
         ("r" . footnote-renumber-footnotes)
         ("s" . footnote-set-style)))
 
-(use-package bbdb
-  :disabled
-  :demand
-  :after gnus
-  :bind (:map gnus-group-mode-map ("e" . bbdb))
-  :config
-  (bbdb-initialize 'gnus 'message)
-  :custom
-  (bbdb-complete-mail-allow-cycling t)
-  (bbdb-user-mail-address-re message-dont-reply-to-names))
-
 (use-package ebdb
   :demand
   :after gnus
 (use-package ebdb
   :demand
   :after gnus
@@ -2726,22 +2518,19 @@ https://csclub.uwaterloo.ca/~abandali")
 (use-package erc-scrolltoplace
   :after erc)
 
 (use-package erc-scrolltoplace
   :after erc)
 
-;; (use-package znc
-;;   :straight (:host nil :repo "https://git.shemshak.org/amin/znc.el")
-;;   :bind (("C-c a e e" . znc-erc)
-;;          ("C-c a e a" . znc-all))
-;;   :config
-;;   (let ((pwd (let ((auth (auth-source-search :host "znca")))
-;;                (cond
-;;                 ((null auth) (error "Couldn't find znca's authinfo"))
-;;                 (t (funcall (plist-get (car auth) :secret)))))))
-;;     (setq znc-servers
-;;           `(("znc.shemshak.org" 1337 t
-;;              ((freenode "amin/freenode" ,pwd)))
-;;             ("znc.shemshak.org" 1337 t
-;;              ((moznet "amin/moznet" ,pwd)))
-;;             ("znc.shemshak.org" 1337 t
-;;              ((oftc "amin/oftc" ,pwd)))))))
+(use-package znc
+  :bind (("C-c a e e" . znc-erc)
+         ("C-c a e a" . znc-all))
+  :config
+  (let ((pwd (let ((auth (auth-source-search :host "znca")))
+               (cond
+                ((null auth) (error "Couldn't find znca's authinfo"))
+                (t (funcall (plist-get (car auth) :secret)))))))
+    (setq znc-servers
+          `(("znc.shemshak.org" 1337 t
+             ((freenode "amin/freenode" ,pwd)))
+            ("znc.shemshak.org" 1337 t
+             ((oftc "amin/oftc" ,pwd)))))))
 
 \f
 ;;; Post initialization
 
 \f
 ;;; Post initialization