guix: remove ~/.config/guix/channels.scm for now
[~bandali/configs] / .emacs.d / init.el
index 6cec829..4449544 100644 (file)
 \f
 ;;; Initial setup
 
 \f
 ;;; Initial setup
 
+(defvar b/exwm-p (string= (system-name) "jirud")
+  "Whether or not we will be using `exwm'.")
+
 ;; keep ~/.emacs.d clean
 (use-package no-littering
   :demand
 ;; keep ~/.emacs.d clean
 (use-package no-littering
   :demand
@@ -394,6 +397,7 @@ For disabling the behaviour for certain buffers and/or modes."
 
 ;; time and battery in mode-line
 (use-feature time
 
 ;; time and battery in mode-line
 (use-feature time
+  :if b/exwm-p
   :demand
   :config
   (display-time-mode)
   :demand
   :config
   (display-time-mode)
@@ -402,6 +406,7 @@ For disabling the behaviour for certain buffers and/or modes."
   (display-time-format "%a %b %-e, %-l:%M%P"))
 
 (use-feature battery
   (display-time-format "%a %b %-e, %-l:%M%P"))
 
 (use-feature battery
+  :if b/exwm-p
   :demand
   :config
   (display-battery-mode)
   :demand
   :config
   (display-battery-mode)
@@ -488,6 +493,11 @@ For disabling the behaviour for certain buffers and/or modes."
   :custom
   ((epg-gpg-program (executable-find "gpg"))))
 
   :custom
   ((epg-gpg-program (executable-find "gpg"))))
 
+(use-feature auth-source
+  :custom
+  (auth-sources '("~/.authinfo.gpg"))
+  (authinfo-hidden (regexp-opt '("password" "client-secret" "token"))))
+
 \f
 ;;; General bindings
 
 \f
 ;;; General bindings
 
@@ -561,6 +571,7 @@ For disabling the behaviour for certain buffers and/or modes."
 ;;; Essential packages
 
 (use-package exwm
 ;;; Essential packages
 
 (use-package exwm
+  :if b/exwm-p
   :demand
   :config
   ;; make class name the buffer name, truncating beyond 60 characters
   :demand
   :config
   ;; make class name the buffer name, truncating beyond 60 characters
@@ -754,7 +765,9 @@ around if needed."
   :demand
   :after exwm
   :config
   :demand
   :after exwm
   :config
-  (exwm-randr-enable))
+  (exwm-randr-enable)
+  :custom
+  (exwm-randr-workspace-monitor-plist '(1 "VGA-1")))
 
 (use-feature exwm-systemtray
   :demand
 
 (use-feature exwm-systemtray
   :demand
@@ -1107,7 +1120,8 @@ This function is intended for use with `ivy-ignore-buffers'."
 
 (use-feature dired
   :config
 
 (use-feature dired
   :config
-  (setq dired-listing-switches "-alh"
+  (setq dired-dwim-target t
+        dired-listing-switches "-alh"
         ls-lisp-use-insert-directory-program nil)
 
   ;; easily diff 2 marked files
         ls-lisp-use-insert-directory-program nil)
 
   ;; easily diff 2 marked files
@@ -1313,12 +1327,11 @@ This function is intended for use with `ivy-ignore-buffers'."
 (use-package alloy-mode
   :straight (:host github :repo "dwwmmn/alloy-mode")
   :mode "\\.als\\'"
 (use-package alloy-mode
   :straight (:host github :repo "dwwmmn/alloy-mode")
   :mode "\\.als\\'"
-  :config (setq alloy-basic-offset 2))
+  :config (setq alloy-basic-offset 2)
+  :hook (alloy-mode . (lambda () (setq-local indent-tabs-mode nil))))
 
 (eval-when-compile (defvar lean-mode-map))
 (use-package lean-mode
 
 (eval-when-compile (defvar lean-mode-map))
 (use-package lean-mode
-  :straight (:host github :repo "leanprover/lean-mode"
-                   :fork (:repo "notbandali/lean-mode" :branch "remove-cl"))
   :defer 0.4
   :bind (:map lean-mode-map
               ("S-SPC" . company-complete))
   :defer 0.4
   :bind (:map lean-mode-map
               ("S-SPC" . company-complete))
@@ -1483,6 +1496,10 @@ This function is intended for use with `ivy-ignore-buffers'."
   :hook ((tex-mode . auto-fill-mode)
          (tex-mode . flyspell-mode)))
 
   :hook ((tex-mode . auto-fill-mode)
          (tex-mode . flyspell-mode)))
 
+(use-package george-mode
+  :straight (:host nil :repo "https://git.shemshak.org/amin/george-mode")
+  :mode "\\.grg\\'")
+
 \f
 ;;; Theme
 
 \f
 ;;; Theme
 
@@ -1492,10 +1509,10 @@ This function is intended for use with `ivy-ignore-buffers'."
 (load-theme 'tangomod t)
 
 (use-package smart-mode-line
 (load-theme 'tangomod t)
 
 (use-package smart-mode-line
-  :disabled
   :commands (sml/apply-theme)
   :demand
   :config
   :commands (sml/apply-theme)
   :demand
   :config
+  (setq sml/theme 'tangomod)
   (sml/setup)
   (smart-mode-line-enable))
 
   (sml/setup)
   (smart-mode-line-enable))
 
@@ -1514,6 +1531,7 @@ This function is intended for use with `ivy-ignore-buffers'."
   (load-theme 'solarized-light t))
 
 (use-package moody
   (load-theme 'solarized-light t))
 
 (use-package moody
+  :disabled
   :demand
   :config
   (setq x-underline-at-descent-line t)
   :demand
   :config
   (setq x-underline-at-descent-line t)
@@ -1523,10 +1541,15 @@ This function is intended for use with `ivy-ignore-buffers'."
     (set-face-attribute 'mode-line-inactive nil :underline  line)
     (set-face-attribute 'mode-line          nil :box        nil)
     (set-face-attribute 'mode-line-inactive nil :box        nil)
     (set-face-attribute 'mode-line-inactive nil :underline  line)
     (set-face-attribute 'mode-line          nil :box        nil)
     (set-face-attribute 'mode-line-inactive nil :box        nil)
-    (set-face-attribute 'mode-line-inactive nil :background "#eeeeee")) ; d3d7cf
+    (set-face-attribute 'mode-line-inactive nil :background "#e1e1e1")) ; d3d7cf
   (moody-replace-mode-line-buffer-identification)
   (moody-replace-vc-mode))
 
   (moody-replace-mode-line-buffer-identification)
   (moody-replace-vc-mode))
 
+(use-package mini-modeline
+  :disabled
+  :demand
+  :config (mini-modeline-mode))
+
 (defvar b/org-mode-font-lock-keywords
   '(("[ \t]*\\(#\\+\\(BEGIN\\|END\\|begin\\|end\\)_\\(\\S-+\\)\\)[ \t]*\\([^\n:]*\\)"
       (1 '(:foreground "#5a5b5a" :background "#292b2b") t) ; directive
 (defvar b/org-mode-font-lock-keywords
   '(("[ \t]*\\(#\\+\\(BEGIN\\|END\\|begin\\|end\\)_\\(\\S-+\\)\\)[ \t]*\\([^\n:]*\\)"
       (1 '(:foreground "#5a5b5a" :background "#292b2b") t) ; directive
@@ -1539,20 +1562,22 @@ 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 'automatic)
+  (sml/apply-theme 'tangomod)
   (font-lock-remove-keywords
    'org-mode b/org-mode-font-lock-keywords)
   (font-lock-remove-keywords
    'org-mode b/org-mode-font-lock-keywords)
-  (exwm-systemtray--refresh))
+  (when (featurep 'exwm-systemtray)
+    (exwm-systemtray--refresh)))
 
 (defun b/lights-off ()
   "Go dark."
   (interactive)
   (mapc #'disable-theme custom-enabled-themes)
   (load-theme 'doom-one t)
 
 (defun b/lights-off ()
   "Go dark."
   (interactive)
   (mapc #'disable-theme custom-enabled-themes)
   (load-theme 'doom-one t)
-  ;; (sml/apply-theme 'automatic)
+  (sml/apply-theme 'automatic)
   (font-lock-add-keywords
    'org-mode b/org-mode-font-lock-keywords t)
   (font-lock-add-keywords
    'org-mode b/org-mode-font-lock-keywords t)
-  (exwm-systemtray--refresh))
+  (when (featurep 'exwm-systemtray)
+    (exwm-systemtray--refresh)))
 
 (bind-keys
  ("C-c t d" . b/lights-off)
 
 (bind-keys
  ("C-c t d" . b/lights-off)
@@ -1721,8 +1746,8 @@ This function is intended for use with `ivy-ignore-buffers'."
   :defer 0.5
   :config
   (typo-global-mode 1)
   :defer 0.5
   :config
   (typo-global-mode 1)
-  :hook (((text-mode erc-mode) . typo-mode)
-         (tex-mode             . (lambda ()(typo-mode -1)))))
+  :hook (((text-mode erc-mode web-mode) . typo-mode)
+         (tex-mode                      . (lambda ()(typo-mode -1)))))
 
 ;; highlight TODOs in buffers
 (use-package hl-todo
 
 ;; highlight TODOs in buffers
 (use-package hl-todo
@@ -1734,16 +1759,17 @@ This function is intended for use with `ivy-ignore-buffers'."
   :defer 0.5
   :after eshell
   :config
   :defer 0.5
   :after eshell
   :config
-  (defvar user-@-host (concat (user-login-name) "@" (system-name) " "))
+  (defvar user-@-host (concat (user-login-name) "@" (system-name) ":"))
   (defun +eshell/prompt ()
   (defun +eshell/prompt ()
-    (let ((base/dir (shrink-path-prompt default-directory)))
-      (concat (propertize user-@-host 'face 'default)
-              (propertize (car base/dir)
-                          'face 'font-lock-comment-face)
-              (propertize (cdr base/dir)
-                          'face 'font-lock-constant-face)
-              (propertize "> " 'face 'default))))
-  (setq eshell-prompt-regexp (concat user-@-host ".*> ")
+    (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
         eshell-prompt-function #'+eshell/prompt))
 
 (use-package eshell-up
@@ -1869,15 +1895,23 @@ This function is intended for use with `ivy-ignore-buffers'."
 ;; (use-package fill-column-indicator)
 
 (use-package emojify
 ;; (use-package fill-column-indicator)
 
 (use-package emojify
+  :disabled
   :hook (erc-mode . emojify-mode))
 
 (use-feature window
   :bind
   :hook (erc-mode . emojify-mode))
 
 (use-feature window
   :bind
-  (("C-c w <right>" . split-window-right)
-   ("C-c w <down>"  . split-window-below)
-   ("C-c w s l"     . split-window-right)
-   ("C-c w s j"     . split-window-below)
-   ("C-c w q"       . quit-window))
+  (("C-c w s l" . b/split-window-right)
+   ("C-c w s j" . b/split-window-below)
+   ("C-c w q"   . quit-window))
+  :init
+  (defun b/split-window-right ()
+    (interactive)
+    (split-window-right)
+    (other-window 1))
+  (defun b/split-window-below ()
+    (interactive)
+    (split-window-below)
+    (other-window 1))
   :custom
   (split-width-threshold 150))
 
   :custom
   (split-width-threshold 150))
 
@@ -1907,10 +1941,20 @@ This function is intended for use with `ivy-ignore-buffers'."
               ("<C-XF86Forward>" . pdf-history-forward)
               ("<mouse-9>"       . pdf-history-forward)
               ("<drag-mouse-9>"  . pdf-history-forward)
               ("<C-XF86Forward>" . pdf-history-forward)
               ("<mouse-9>"       . pdf-history-forward)
               ("<drag-mouse-9>"  . pdf-history-forward)
-              ("M-RET"           . image-previous-line))
+              ("M-RET"           . image-previous-line)
+              ("C-s"             . isearch-forward)
+              ("s s"             . isearch-forward))
   :config (pdf-tools-install nil t)
   :custom (pdf-view-resize-factor 1.05))
 
   :config (pdf-tools-install nil t)
   :custom (pdf-view-resize-factor 1.05))
 
+(use-package org-pdftools
+  :straight (:host github :repo "fuxialexander/org-pdftools")
+  :demand
+  :after org
+  :config
+  (with-eval-after-load 'org
+    (require 'org-pdftools)))
+
 (use-package biblio)
 
 (use-feature reftex
 (use-package biblio)
 
 (use-feature reftex
@@ -1949,6 +1993,13 @@ 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"))
+
 \f
 ;;; Email (with Gnus)
 
 \f
 ;;; Email (with Gnus)
 
@@ -1971,41 +2022,41 @@ This function is intended for use with `ivy-ignore-buffers'."
    gnus-select-method '(nnnil "")
    gnus-secondary-select-methods
    '((nnimap "shemshak"
    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-stream plain)
+             (nnimap-address "127.0.0.1")
+             (nnimap-server-port 143)
+             (nnimap-authenticator plain)
+             (nnimap-user "amin@shemshak.local"))
      (nnimap "gnu"
      (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 ".*<\\(.*\\)\\.\\(non\\)?gnu\\.org>.*" "l.\\1")
-                                 ;; *@lists.sr.ht, omitting one dot if present
-                                 ;;    add more \\.?\\([^.@]*\\) if needed
-                                 (list ".*<~\\(.*\\)/\\([^.@]*\\)\\.?\\([^.@]*\\)@lists.sr.ht>.*" "l.~\\1.\\2\\3")
-                                 ;; webmasters
-                                 (from "webmasters\\(-comment\\)?@gnu\\.org" "webmasters")
-                                 ;; other
-                                 (list ".*atreus.freelists.org" "l.atreus")
-                                 (list ".*deepspec.lists.cs.princeton.edu" "l.deepspec")
-                                 ;; (list ".*haskell-art.we.lurk.org" "l.haskell.art") ;d
-                                 (list ".*haskell-cafe.haskell.org" "l.haskell-cafe")
-                                 ;; (list ".*notmuch.notmuchmail.org" "l.notmuch") ;u
-                                 ;; (list ".*dev.lists.parabola.nu" "l.parabola-dev") ;u
-                                 ;; ----------------------------------
-                                 ;; legend: (u)nsubscribed | (d)ead
-                                 ;; ----------------------------------
-                                 ;; otherwise, leave mail in INBOX
-                                 "INBOX")))
+             (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 ".*<\\(.*\\)\\.\\(non\\)?gnu\\.org>.*" "l.\\1")
+                                  ;; *.lists.sr.ht, omitting one dot if present
+                                  ;;    add more \\.?\\([^.]*\\) if needed
+                                  (list ".*<~\\(.*\\)/\\([^.]*\\)\\.?\\([^.]*\\)\\.lists.sr.ht>.*" "l.~\\1.\\2\\3")
+                                  ;; webmasters
+                                  (from "webmasters\\(-comment\\)?@gnu\\.org" "webmasters")
+                                  ;; other
+                                  (list ".*atreus.freelists.org" "l.atreus")
+                                  (list ".*deepspec.lists.cs.princeton.edu" "l.deepspec")
+                                  ;; (list ".*haskell-art.we.lurk.org" "l.haskell.art") ;d
+                                  (list ".*haskell-cafe.haskell.org" "l.haskell-cafe")
+                                  ;; (list ".*notmuch.notmuchmail.org" "l.notmuch") ;u
+                                  ;; (list ".*dev.lists.parabola.nu" "l.parabola-dev") ;u
+                                  ;; ----------------------------------
+                                  ;; legend: (u)nsubscribed | (d)ead
+                                  ;; ----------------------------------
+                                  ;; otherwise, leave mail in INBOX
+                                  "INBOX")))
      (nnimap "uw"
              (nnimap-stream plain)
              (nnimap-address "127.0.0.1")
      (nnimap "uw"
              (nnimap-stream plain)
              (nnimap-address "127.0.0.1")
@@ -2027,7 +2078,7 @@ This function is intended for use with `ivy-ignore-buffers'."
              (nnimap-server-port 143)
              (nnimap-authenticator plain)
              (nnimap-user "abandali@csc.uw.local")))
              (nnimap-server-port 143)
              (nnimap-authenticator plain)
              (nnimap-user "abandali@csc.uw.local")))
-   gnus-message-archive-group "nnimap+shemshak:Sent"
+   gnus-message-archive-group "nnimap+gnu:INBOX"
    gnus-parameters
    '(("l\\.atreus"
       (to-address . "atreus@freelists.org")
    gnus-parameters
    '(("l\\.atreus"
       (to-address . "atreus@freelists.org")
@@ -2052,6 +2103,9 @@ This function is intended for use with `ivy-ignore-buffers'."
      ("l\\.emacs-tangents"
       (to-address . "emacs-tangents@gnu.org")
       (to-list    . "emacs-tangents@gnu.org"))
      ("l\\.emacs-tangents"
       (to-address . "emacs-tangents@gnu.org")
       (to-list    . "emacs-tangents@gnu.org"))
+     ("l\\.emacsconf-committee"
+      (to-address . "emacsconf-committee@gnu.org")
+      (to-list    . "emacsconf-committee@gnu.org"))
      ("l\\.emacsconf-discuss"
       (to-address . "emacsconf-discuss@gnu.org")
       (to-list    . "emacsconf-discuss@gnu.org"))
      ("l\\.emacsconf-discuss"
       (to-address . "emacsconf-discuss@gnu.org")
       (to-list    . "emacsconf-discuss@gnu.org"))
@@ -2248,25 +2302,26 @@ Computer Science Club, University of Waterloo
 https://csclub.uwaterloo.ca/~abandali")
   (setq gnus-posting-styles
         '((".*"
 https://csclub.uwaterloo.ca/~abandali")
   (setq gnus-posting-styles
         '((".*"
+           (address "bandali@gnu.org")
+           (signature b/gnu-signature)
+           (eval (set (make-local-variable 'message-user-fqdn) "fencepost.gnu.org")))
+          ("nnimap\\+shemshak:.*"
            (address "amin@shemshak.org")
            (body "\nBest,\n")
            (signature b/signature)
            (address "amin@shemshak.org")
            (body "\nBest,\n")
            (signature b/signature)
+           (gcc "nnimap+shemshak:Sent")
            (eval (setq b/message-cite-say-hi t)))
            (eval (setq b/message-cite-say-hi t)))
-          ("nnimap\\+gnu:.*"
-           (address "bandali@gnu.org")
-           (signature b/gnu-signature)
-           (eval (set (make-local-variable 'message-user-fqdn) "fencepost.gnu.org")))
           ((header "subject" "ThankCRM")
            (to "webmasters-comment@gnu.org")
            (body "")
            (eval (setq b/message-cite-say-hi nil)))
           ("nnimap\\+uw:.*"
           ((header "subject" "ThankCRM")
            (to "webmasters-comment@gnu.org")
            (body "")
            (eval (setq b/message-cite-say-hi nil)))
           ("nnimap\\+uw:.*"
-           (address "abandali@uwaterloo.ca")
+           (address "bandali@uwaterloo.ca")
            (signature b/uw-signature))
           ("nnimap\\+uw:INBOX"
            (gcc "\"nnimap+uw:Sent Items\""))
           ("nnimap\\+csc:.*"
            (signature b/uw-signature))
           ("nnimap\\+uw:INBOX"
            (gcc "\"nnimap+uw:Sent Items\""))
           ("nnimap\\+csc:.*"
-           (address "abandali@csclub.uwaterloo.ca")
+           (address "bandali@csclub.uwaterloo.ca")
            (signature b/csc-signature)
            (gcc "nnimap+csc:Sent")))))
 
            (signature b/csc-signature)
            (gcc "nnimap+csc:Sent")))))
 
@@ -2344,7 +2399,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\\)\\|\\(amin@bndl\\.org\\)\\|\\(.*@aminb\\.org\\)\\|\\(\\(bandali\\|mab\\|aminb?\\)@gnu\\.org\\)\\|\\(a\\(min\\.\\)?bandali@uwaterloo\\.ca\\)\\|\\(abandali@csclub\\.uwaterloo\\.ca\\)\\)")
+        "\\(\\(\\(amin\\|mab\\)@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)
@@ -2407,7 +2462,6 @@ https://csclub.uwaterloo.ca/~abandali")
   (defun company-ebdb--post-complete (_) nil))
 
 (use-feature ebdb-gnus
   (defun company-ebdb--post-complete (_) nil))
 
 (use-feature ebdb-gnus
-  :demand
   :after ebdb
   :custom
   (ebdb-gnus-window-size 0.3))
   :after ebdb
   :custom
   (ebdb-gnus-window-size 0.3))
@@ -2415,7 +2469,7 @@ https://csclub.uwaterloo.ca/~abandali")
 (use-feature ebdb-mua
   :demand
   :after ebdb
 (use-feature ebdb-mua
   :demand
   :after ebdb
-  :custom (ebdb-mua-pop-up nil))
+  :custom (ebdb-mua-pop-up t))
 
 ;; (use-package ebdb-message
 ;;   :after ebdb)
 
 ;; (use-package ebdb-message
 ;;   :after ebdb)