[emacs] switch from bbdb to ebdb again
[~bandali/configs] / init.org
index d7af98c..eea005d 100644 (file)
--- a/init.org
+++ b/init.org
@@ -54,6 +54,13 @@ make build
 - [[#header][Header]]
 - [[#initial-setup][Initial setup]]
 - [[#core][Core]]
+- [[#borg-essentials][Borg's =layer/essentials=]]
+- [[#editing][Editing]]
+- [[#syntax-spell-checking][Syntax and spell checking]]
+- [[#programming-modes][Programming modes]]
+- [[#emacs-enhancements][Emacs enhancements]]
+- [[#email][Email]]
+- [[#blogging][Blogging]]
 - [[#post-initialization][Post initialization]]
 - [[#footer][Footer]]
 
@@ -345,14 +352,12 @@ in my shell.
   (exec-path-from-shell-copy-env "SSH_AUTH_SOCK"))
 #+end_src
 
-** Only one custom theme at a time
+** COMMENT Only one custom theme at a time
 
 #+begin_src emacs-lisp
-;; only one custom theme at a time
-;;
-;; (defadvice load-theme (before clear-previous-themes activate)
-;;   "Clear existing theme settings instead of layering them"
-;;   (mapc #'disable-theme custom-enabled-themes))
+(defadvice load-theme (before clear-previous-themes activate)
+  "Clear existing theme settings instead of layering them"
+  (mapc #'disable-theme custom-enabled-themes))
 #+end_src
 
 ** Server
@@ -371,44 +376,42 @@ See [[https://www.gnu.org/software/emacs/manual/html_node/emacs/Emacs-Server.htm
   :config (or (server-running-p) (server-mode)))
 #+end_src
 
-** Unicode support
+** COMMENT Unicode support
 
 Font stack with better unicode support, around =Ubuntu Mono= and
 =Hack=.
 
 #+begin_src emacs-lisp
-;; unicode support
-;;
-;; (dolist (ft (fontset-list))
-;;   (set-fontset-font
-;;    ft
-;;    'unicode
-;;    (font-spec :name "Source Code Pro" :size 14))
-;;   (set-fontset-font
-;;    ft
-;;    'unicode
-;;    (font-spec :name "DejaVu Sans Mono")
-;;    nil
-;;    'append)
-;;   ;; (set-fontset-font
-;;   ;;  ft
-;;   ;;  'unicode
-;;   ;;  (font-spec
-;;   ;;   :name "Symbola monospacified for DejaVu Sans Mono")
-;;   ;;  nil
-;;   ;;  'append)
-;;   ;; (set-fontset-font
-;;   ;;  ft
-;;   ;;  #x2115  ; ℕ
-;;   ;;  (font-spec :name "DejaVu Sans Mono")
-;;   ;;  nil
-;;   ;;  'append)
-;;   (set-fontset-font
-;;    ft
-;;    (cons ?Α ?ω)
-;;    (font-spec :name "DejaVu Sans Mono" :size 14)
-;;    nil
-;;    'prepend))
+(dolist (ft (fontset-list))
+  (set-fontset-font
+   ft
+   'unicode
+   (font-spec :name "Source Code Pro" :size 14))
+  (set-fontset-font
+   ft
+   'unicode
+   (font-spec :name "DejaVu Sans Mono")
+   nil
+   'append)
+  ;; (set-fontset-font
+  ;;  ft
+  ;;  'unicode
+  ;;  (font-spec
+  ;;   :name "Symbola monospacified for DejaVu Sans Mono")
+  ;;  nil
+  ;;  'append)
+  ;; (set-fontset-font
+  ;;  ft
+  ;;  #x2115  ; ℕ
+  ;;  (font-spec :name "DejaVu Sans Mono")
+  ;;  nil
+  ;;  'append)
+  (set-fontset-font
+   ft
+   (cons ?Α ?ω)
+   (font-spec :name "DejaVu Sans Mono" :size 14)
+   nil
+   'prepend))
 #+end_src
 
 ** Gentler font resizing
@@ -652,33 +655,29 @@ Enable =winner-mode=.
 
 *** Don’t display =*compilation*= on success
 
-From https://stackoverflow.com/a/17788551.
+Based on https://stackoverflow.com/a/17788551, with changes to use
+=cl-letf= instead of the now obsolete =flet=.
 
 #+begin_src emacs-lisp
-(defun amin--compilation-finish-function (buffer outstr)
-  (unless (string-match "finished" outstr)
-    (switch-to-buffer-other-window buffer))
-  t)
-
-(setq compilation-finish-functions #'amin--compilation-finish-function)
+(use-package compile
+  :config
+  (defun amin--compilation-finish-function (buffer outstr)
+    (unless (string-match "finished" outstr)
+      (switch-to-buffer-other-window buffer))
+    t)
 
-(require 'cl)
+  (setq compilation-finish-functions #'amin--compilation-finish-function)
 
-(defadvice compilation-start
-    (around inhibit-display
-            (command &optional mode name-function highlight-regexp))
-  (if (not (string-match "^\\(find\\|grep\\)" command))
-      (flet ((display-buffer)
-             (set-window-point)
-             (goto-char))
-        (fset 'display-buffer   'ignore)
-        (fset 'goto-char        'ignore)
-        (fset 'set-window-point 'ignore)
-        (save-window-excursion
-          ad-do-it))
-    ad-do-it))
+  (require 'cl-macs)
 
-(ad-activate 'compilation-start)
+  (defadvice compilation-start
+      (around inhibit-display
+              (command &optional mode name-function highlight-regexp))
+    (if (not (string-match "^\\(find\\|grep\\)" command))
+        (cl-letf (((symbol-function 'display-buffer) #'ignore))
+          (save-window-excursion ad-do-it))
+      ad-do-it))
+  (ad-activate 'compilation-start))
 #+end_src
 
 *** Search for non-ASCII characters
@@ -831,7 +830,8 @@ file.
     (let* ((file-tangle-start-time (current-time))
            (file (buffer-file-name))
            (file-nodir (file-name-nondirectory file))
-           (async-quiet-switch "-q"))
+           ;; (async-quiet-switch "-q")
+           )
       (async-start
        `(lambda ()
           (require 'org)
@@ -918,8 +918,9 @@ There's no way I could top that, so I won't attempt to.
 
 #+begin_src emacs-lisp
 (use-package swiper
-  :bind (("C-s" . swiper)
-         ("C-r" . swiper)))
+  :bind (("C-s"   . swiper)
+         ("C-r"   . swiper)
+         ("C-S-s" . isearch-forward)))
 #+end_src
 
 **** Counsel
@@ -961,7 +962,7 @@ There's no way I could top that, so I won't attempt to.
 
   (defun amin|eshell-setup ()
     (make-local-variable 'company-idle-delay)
-    (setq company-idle-delay nil)
+    (defvar company-idle-delay nil)
     (bind-keys :map eshell-mode-map
                ("C-d"   . amin/eshell-quit-or-delete-char)
                ("C-S-l" . amin/eshell-clear)
@@ -1000,6 +1001,13 @@ There's no way I could top that, so I won't attempt to.
    '(("default"
       ("dired" (mode . dired-mode))
       ("org"   (mode . org-mode))
+      ("gnus"
+       (or
+        (mode . gnus-group-mode)
+        (mode . gnus-summary-mode)
+        (mode . gnus-article-mode)
+        ;; not really, but...
+        (mode . message-mode)))
       ("web"
        (or
         (mode . web-mode)
@@ -1009,20 +1017,21 @@ There's no way I could top that, so I won't attempt to.
       ("shell"
        (or
         (mode . eshell-mode)
-        (mode . shell-mode)))
-      ("notmuch" (name . "\*notmuch\*"))
+        (mode . shell-mode)
+        (mode . term-mode)))
       ("programming"
        (or
         (mode . python-mode)
+        (mode . c-mode)
         (mode . c++-mode)
-        (mode . emacs-lisp-mode)))
+        (mode . emacs-lisp-mode)
+        (mode . scheme-mode)
+        (mode . haskell-mode)
+        (mode . lean-mode)))
       ("emacs"
        (or
         (name . "^\\*scratch\\*$")
-        (name . "^\\*Messages\\*$")))
-      ("slack"
-       (or
-        (name . "^\\*Slack*"))))))
+        (name . "^\\*Messages\\*$"))))))
   (ibuffer-formats
    '((mark modified read-only locked " "
            (name 18 18 :left :elide)
@@ -1060,6 +1069,9 @@ There's no way I could top that, so I won't attempt to.
 #+end_src
 
 * Borg's =layer/essentials=
+:PROPERTIES:
+:CUSTOM_ID: borg-essentials
+:END:
 
 TODO: break this giant source block down into individual org sections.
 
@@ -1142,6 +1154,9 @@ TODO: break this giant source block down into individual org sections.
 #+end_src
 
 * Editing
+:PROPERTIES:
+:CUSTOM_ID: editing
+:END:
 
 ** Company
 
@@ -1163,6 +1178,9 @@ TODO: break this giant source block down into individual org sections.
 #+end_src
 
 * Syntax and spell checking
+:PROPERTIES:
+:CUSTOM_ID: syntax-spell-checking
+:END:
 
 #+begin_src emacs-lisp
 (use-package flycheck
@@ -1206,6 +1224,9 @@ TODO: break this giant source block down into individual org sections.
               #'endless/replace-quote))
 #+end_src
 * Programming modes
+:PROPERTIES:
+:CUSTOM_ID: programming-modes
+:END:
 
 ** [[http://alloytools.org][Alloy]] (with [[https://github.com/dwwmmn/alloy-mode][alloy-mode]])
 
@@ -1476,19 +1497,11 @@ instead.
   :hook (web-mode css-mode html-mode sgml-mode))
 #+end_src
 
-** Nix
-
-#+begin_src emacs-lisp
-(use-package nix-mode
-  :defer t
-  :mode "\\.nix\\'")
-#+end_src
-
-** Java
+** COMMENT Java
 
 *** meghanada
 
-#+begin_src emacs-lisp :tangle no
+#+begin_src emacs-lisp
 (use-package meghanada
   :bind
   (:map meghanada-mode-map
@@ -1515,7 +1528,7 @@ tree-mode
 treemacs
 #+end_comment
 
-#+begin_src emacs-lisp :tangle no
+#+begin_src emacs-lisp
 (use-package treemacs
   :config (setq treemacs-never-persist t))
 
@@ -1565,7 +1578,27 @@ treemacs
   :after (treemacs))
 #+end_src
 
-* Emacs Enhancements
+** geiser
+
+#+begin_src emacs-lisp
+(use-package geiser)
+
+(use-package geiser-guile
+  :config
+  (setq geiser-guile-load-path "~/src/git/guix"))
+#+end_src
+
+** guix
+
+#+begin_src emacs-lisp
+(use-package guix
+  :load-path "lib/guix/elisp")
+#+end_src
+
+* Emacs enhancements
+:PROPERTIES:
+:CUSTOM_ID: emacs-enhancements
+:END:
 
 ** [[https://github.com/justbur/emacs-which-key][which-key]]
 
@@ -1586,13 +1619,12 @@ Emacs package that displays available keybindings in popup
 (load-theme 'tangomod t)
 #+end_src
 
-** doom-modeline
+** smart-mode-line
 
 #+begin_src emacs-lisp
-(use-package doom-modeline
-  :demand t
-  :config (setq doom-modeline-height 32)
-  :hook (after-init . doom-modeline-init))
+(use-package smart-mode-line
+  :config
+  (sml/setup))
 #+end_src
 
 ** doom-themes
@@ -1607,16 +1639,16 @@ Emacs package that displays available keybindings in popup
 (defun amin/lights-on ()
   "Enable my favourite light theme."
   (interactive)
-  (progn
-    (mapc #'disable-theme custom-enabled-themes)
-    (load-theme 'tangomod t)))
+  (mapc #'disable-theme custom-enabled-themes)
+  (load-theme 'tangomod t)
+  (sml/apply-theme 'automatic))
 
 (defun amin/lights-off ()
   "Go dark."
   (interactive)
-  (progn
-    (mapc #'disable-theme custom-enabled-themes)
-    (load-theme 'doom-tomorrow-night t)))
+  (mapc #'disable-theme custom-enabled-themes)
+  (load-theme 'doom-tomorrow-night t)
+  (sml/apply-theme 'automatic))
 
 (bind-keys
  ("s-t d" . amin/lights-off)
@@ -1781,11 +1813,10 @@ Make =*scratch*= and =*Messages*= unkillable.
 
 Also see [[https://www.emacswiki.org/emacs/rebox2][rebox2]].
 
-** [[https://github.com/DarthFennec/highlight-indent-guides][highlight-indent-guides]]
+** COMMENT [[https://github.com/DarthFennec/highlight-indent-guides][highlight-indent-guides]]
 
 #+begin_src emacs-lisp
 (use-package highlight-indent-guides
-  :disabled t
   :defer 3
   :hook ((prog-mode . highlight-indent-guides-mode)
          ;; (org-mode  . highlight-indent-guides-mode)
@@ -1818,12 +1849,6 @@ Also see [[https://www.emacswiki.org/emacs/rebox2][rebox2]].
         ("l"   . image-forward-hscroll)))
 #+end_src
 
-** anzu
-
-#+begin_src emacs-lisp
-(use-package anzu)
-#+end_src
-
 ** typo.el
 
 #+begin_src emacs-lisp
@@ -1874,13 +1899,12 @@ Also see [[https://www.emacswiki.org/emacs/rebox2][rebox2]].
         ""))))
 #+end_src
 
-** slack
+** COMMENT slack
 
 Hopefully temporary.
 
 #+begin_src emacs-lisp
 (use-package slack
-  :disabled t
   :commands (slack-start)
   :init
   (eval-when-compile                    ; silence the byte-compiler
@@ -1988,7 +2012,17 @@ Hopefully temporary.
   (global-page-break-lines-mode))
 #+end_src
 
+** expand-region
+
+#+begin_src emacs-lisp
+(use-package expand-region
+  :bind ("C-=" . er/expand-region))
+#+end_src
+
 * Email
+:PROPERTIES:
+:CUSTOM_ID: email
+:END:
 
 #+begin_src emacs-lisp
 (defvar amin-maildir (expand-file-name "~/mail/"))
@@ -2005,8 +2039,10 @@ Hopefully temporary.
  read-mail-command   'gnus)
 
 (use-package gnus
-  :bind (("s-m" . gnus)
-         ("s-M" . gnus-unplugged))
+  :bind (("C-c m" . gnus)
+         ("C-c M" . gnus-unplugged)
+         ("s-m"   . gnus)
+         ("s-M"   . gnus-unplugged))
   :init
   (setq
    gnus-select-method '(nnnil "")
@@ -2193,7 +2229,59 @@ Convenient footnotes in =message-mode=.
         footnote-style     'unicode))
 #+end_src
 
-** bbdb
+** ebdb
+
+#+begin_src emacs-lisp
+(use-package ebdb
+  :defer 1
+  :bind (:map gnus-group-mode-map ("e" . ebdb))
+  :config
+  (setq ebdb-sources (no-littering-expand-var-file-name "ebdb"))
+  (after! swiper
+    (add-to-list 'swiper-font-lock-exclude 'ebdb-mode t)))
+
+(use-package ebdb-com
+  :after ebdb)
+
+;; (use-package ebdb-complete
+;;   :after ebdb
+;;   :config
+;;   (ebdb-complete-enable))
+
+(use-package company-ebdb
+  :after (:all company message)
+  :config
+  (defun company-ebdb--post-complete (_) nil)
+  :hook
+  (message-mode . (lambda ()
+                    (add-to-list (make-local-variable 'company-backends)
+                                 'company-ebdb))))
+
+(use-package ebdb-gnus
+  :after ebdb
+  :custom
+  (ebdb-gnus-window-configuration
+   '(article
+     (vertical 1.0
+               (summary 0.25 point)
+               (horizontal 1.0
+                           (article 1.0)
+                           (ebdb-gnus 0.3))))))
+
+(use-package ebdb-mua
+  :after ebdb
+  ;; :custom (ebdb-mua-pop-up nil)
+  )
+
+;; (use-package ebdb-message
+;;   :after ebdb)
+
+
+;; (use-package ebdb-vcard
+;;   :after ebdb)
+#+end_src
+
+** COMMENT bbdb
 
 Manually install bbdb (=lisp/bbdb= copied from an ELPA-based setup),
 because installing it from source on Emacs 27 using the following
@@ -2226,11 +2314,10 @@ I tried using =borg-elpa= instead of doing it like this, but it added
   (bbdb-initialize 'gnus 'message))
 #+end_src
 
-** message-x
+** COMMENT message-x
 
 #+begin_src emacs-lisp
 (use-package message-x
-  :disabled t
   :custom
   (message-x-completion-alist
    (quote
@@ -2242,11 +2329,10 @@ I tried using =borg-elpa= instead of doing it like this, but it added
       . message-expand-group)))))
 #+end_src
 
-** gnus-harvest
+** COMMENT gnus-harvest
 
 #+begin_src emacs-lisp
 (use-package gnus-harvest
-  :disabled t
   :commands gnus-harvest-install
   :demand t
   :config
@@ -2256,6 +2342,9 @@ I tried using =borg-elpa= instead of doing it like this, but it added
 #+end_src
 
 * Blogging
+:PROPERTIES:
+:CUSTOM_ID: blogging
+:END:
 
 ** [[https://ox-hugo.scripter.co][ox-hugo]]
 
@@ -2292,4 +2381,5 @@ Display how long it took to load the init file.
 * COMMENT Local Variables                                           :ARCHIVE:
 # Local Variables:
 # eval: (add-hook 'after-save-hook #'amin/async-babel-tangle 'append 'local)
+# eval: (typo-mode -1)
 # End: