[emacs] add evil{,-escape} and general and some keybindings
[~bandali/configs] / init.org
index 06fa7e7..04719f0 100644 (file)
--- a/init.org
+++ b/init.org
@@ -319,6 +319,14 @@ in my shell.
   (exec-path-from-shell-copy-env "SSH_AUTH_SOCK"))
 #+end_src
 
   (exec-path-from-shell-copy-env "SSH_AUTH_SOCK"))
 #+end_src
 
+** Only one custom theme at a time
+
+#+begin_src emacs-lisp
+(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
 
 Start server if not already running. Alternatively, can be done by
 ** Server
 
 Start server if not already running. Alternatively, can be done by
@@ -574,12 +582,61 @@ customizing it.
             'auto-compile-inhibit-compile-detached-git-head))
 #+end_src
 
             'auto-compile-inhibit-compile-detached-git-head))
 #+end_src
 
-*** TODO [[https://github.com/Kungsgeten/ryo-modal][ryo-modal]]
+*** [[https://github.com/noctuid/general.el][general]]
 
 #+begin_quote
 Roll your own modal mode
 #+end_quote
 
 
 #+begin_quote
 Roll your own modal mode
 #+end_quote
 
+#+begin_src emacs-lisp
+(use-package general
+  :demand t
+  :config
+  (general-evil-setup t)
+
+  (general-override-mode)
+
+  (general-create-definer
+    ab--mode-leader-keys
+    :keymaps 'override
+    :states '(emacs normal visual motion insert)
+    :non-normal-prefix "C-,"
+    :prefix ",")
+
+  (general-create-definer
+    ab--leader-keys
+    :keymaps 'override
+    :states '(emacs normal visual motion insert)
+    :non-normal-prefix "M-m"
+    :prefix "SPC"))
+#+end_src
+
+*** evil
+
+#+begin_src emacs-lisp
+(use-package evil
+  :demand t
+  :hook (view-mode . evil-motion-state)
+  :config (evil-mode 1))
+#+end_src
+
+#+begin_src emacs-lisp
+(use-package evil-escape
+  :demand t
+  :init
+  (setq evil-escape-excluded-states '(normal visual multiedit emacs motion)
+        evil-escape-excluded-major-modes '(neotree-mode)
+        evil-escape-key-sequence "jk"
+        evil-escape-delay 0.25)
+  :general
+  (:states '(insert replace visual operator)
+    "C-g" #'evil-escape)
+  :config
+  (evil-escape-mode 1)
+  ;; no `evil-escape' in minibuffer
+  (push #'minibufferp evil-escape-inhibit-functions))
+#+end_src
+
 *** [[https://github.com/ch11ng/exwm][EXWM]] (window manager)
 
 #+begin_src emacs-lisp :tangle no
 *** [[https://github.com/ch11ng/exwm][EXWM]] (window manager)
 
 #+begin_src emacs-lisp :tangle no
@@ -820,6 +877,7 @@ In short, my favourite way of life.
 (setq org-src-tab-acts-natively t
       org-src-preserve-indentation nil
       org-edit-src-content-indentation 0)
 (setq org-src-tab-acts-natively t
       org-src-preserve-indentation nil
       org-edit-src-content-indentation 0)
+(add-hook 'org-mode-hook 'org-indent-mode)
 #+end_src
 
 *** [[https://magit.vc/][Magit]]
 #+end_src
 
 *** [[https://magit.vc/][Magit]]
@@ -832,6 +890,7 @@ Not just how I do git, but /the/ way to do git.
 
 #+begin_src emacs-lisp
 (use-package magit
 
 #+begin_src emacs-lisp
 (use-package magit
+  :general (ab--leader-keys "g s" 'magit-status)
   :defer t
   :bind (("s-g"     . magit-status)
         ("C-x g"   . magit-status)
   :defer t
   :bind (("s-g"     . magit-status)
         ("C-x g"   . magit-status)
@@ -856,6 +915,7 @@ There's no way I could top that, so I won't attempt to.
 
 #+begin_src emacs-lisp
 (use-package ivy
 
 #+begin_src emacs-lisp
 (use-package ivy
+  :defer 1
   :bind
   (:map ivy-minibuffer-map
         ([escape] . keyboard-escape-quit)
   :bind
   (:map ivy-minibuffer-map
         ([escape] . keyboard-escape-quit)
@@ -873,6 +933,7 @@ There's no way I could top that, so I won't attempt to.
 
 #+begin_src emacs-lisp
 (use-package swiper
 
 #+begin_src emacs-lisp
 (use-package swiper
+  :general (:states 'normal "/" 'swiper)
   :bind (([remap isearch-forward]  . swiper)
         ([remap isearch-backward] . swiper)))
 #+end_src
   :bind (([remap isearch-forward]  . swiper)
         ([remap isearch-backward] . swiper)))
 #+end_src
@@ -882,6 +943,10 @@ There's no way I could top that, so I won't attempt to.
 #+begin_src emacs-lisp
 (use-package counsel
   :defer 1
 #+begin_src emacs-lisp
 (use-package counsel
   :defer 1
+  :general (ab--leader-keys
+    "f r" 'counsel-recentf
+    "SPC" 'counsel-M-x
+    "."   'counsel-find-file)
   :bind (([remap execute-extended-command] . counsel-M-x)
          ([remap find-file] . counsel-find-file)
          ("s-r"     . counsel-recentf)
   :bind (([remap execute-extended-command] . counsel-M-x)
          ([remap find-file] . counsel-find-file)
          ("s-r"     . counsel-recentf)
@@ -992,6 +1057,16 @@ TODO: break this giant source block down into individual org sections.
   (global-company-mode t))
 #+end_src
 
   (global-company-mode t))
 #+end_src
 
+** Customizations
+
+#+begin_src emacs-lisp
+(ab--leader-keys
+  "b s" 'save-buffer
+  "b b" 'ivy-switch-buffer
+  "b k" 'kill-buffer
+  "q q" 'evil-save-and-quit)
+#+end_src
+
 * Syntax and spell checking
 #+begin_src emacs-lisp
 (use-package flycheck
 * Syntax and spell checking
 #+begin_src emacs-lisp
 (use-package flycheck
@@ -1222,6 +1297,11 @@ Emacs package that displays available keybindings in popup
   (delete-other-windows)
   (notmuch))
 
   (delete-other-windows)
   (notmuch))
 
+;; (ab--leader-keys
+;;   "m"   'ab/notmuch
+;;   "s"   'save-buffer
+;;   "SPC" 'counsel-M-x)
+
 ;; (map!
 ;;  :leader
 ;;  :desc "notmuch" :n "m" #'ab/notmuch
 ;; (map!
 ;;  :leader
 ;;  :desc "notmuch" :n "m" #'ab/notmuch
@@ -1246,7 +1326,7 @@ Emacs package that displays available keybindings in popup
         message-send-mail-function 'message-send-mail-with-sendmail
         message-sendmail-envelope-from 'header
         message-directory "drafts"
         message-send-mail-function 'message-send-mail-with-sendmail
         message-sendmail-envelope-from 'header
         message-directory "drafts"
-        message-user-fqdn "aminb.org")
+        message-user-fqdn "fencepost.gnu.org")
   (add-hook 'message-mode-hook
             (lambda () (setq fill-column 65
                         message-fill-column 65)))
   (add-hook 'message-mode-hook
             (lambda () (setq fill-column 65
                         message-fill-column 65)))
@@ -1269,6 +1349,7 @@ Emacs package that displays available keybindings in popup
         mml-secure-openpgp-sign-with-sender t))
 
 (use-package notmuch
         mml-secure-openpgp-sign-with-sender t))
 
 (use-package notmuch
+  :general (ab--leader-keys "m" 'ab/notmuch)
   :config
   (setq notmuch-hello-sections
         '(notmuch-hello-insert-header
   :config
   (setq notmuch-hello-sections
         '(notmuch-hello-insert-header
@@ -1328,13 +1409,13 @@ Emacs package that displays available keybindings in popup
        ("S" . (lambda ()
                 "Mark message as spam"
                 (interactive)
        ("S" . (lambda ()
                 "Mark message as spam"
                 (interactive)
-                (notmuch-search-tag '("-unread" "-inbox" "+spam"))
+                (notmuch-search-tag '("-unread" "-inbox" "-webmasters" "+spam"))
                 (notmuch-search-archive-thread))))
   (:map notmuch-tree-mode-map  ; TODO: additional bindings
        ("S" . (lambda ()
                 "Mark message as spam"
                 (interactive)
                 (notmuch-search-archive-thread))))
   (:map notmuch-tree-mode-map  ; TODO: additional bindings
        ("S" . (lambda ()
                 "Mark message as spam"
                 (interactive)
-                (notmuch-tree-tag '("-unread" "-inbox" "+spam"))
+                (notmuch-tree-tag '("-unread" "-inbox" "-webmasters" "+spam"))
                 (notmuch-tree-archive-thread))))
 )
 
                 (notmuch-tree-archive-thread))))
 )