sway: disable mouse warping and use the right ctrl for win
[~bandali/configs] / .emacs.d / init.el
index 847f282..1f31d3b 100644 (file)
@@ -394,6 +394,7 @@ For disabling the behaviour for certain buffers and/or modes."
 
 ;; time and battery in mode-line
 (use-feature time
+  :disabled
   :demand
   :config
   (display-time-mode)
@@ -402,6 +403,7 @@ For disabling the behaviour for certain buffers and/or modes."
   (display-time-format "%a %b %-e, %-l:%M%P"))
 
 (use-feature battery
+  :disabled
   :demand
   :config
   (display-battery-mode)
@@ -561,6 +563,7 @@ For disabling the behaviour for certain buffers and/or modes."
 ;;; Essential packages
 
 (use-package exwm
+  :disabled
   :demand
   :config
   ;; make class name the buffer name, truncating beyond 60 characters
@@ -602,14 +605,16 @@ around if needed."
   ;; shorten 'C-c C-q' to 'C-q'
   (define-key exwm-mode-map [?\C-q] #'exwm-input-send-next-key)
 
-  (setq exwm-input-global-keys
+  (setq exwm-workspace-number 4
+        exwm-input-global-keys
         `(([?\s-R] . exwm-reset)
           ([?\s-\\] . exwm-workspace-switch)
-          ([?\s-\s] . (lambda (command)
-                        (interactive
-                         (list (read-shell-command "➜ ")))
-                        (start-process-shell-command
-                         command nil command)))
+          ([?\s-\s] . dmenu)
+          ([?\S-\s-\s] . (lambda (command)
+                              (interactive
+                               (list (read-shell-command "➜ ")))
+                              (start-process-shell-command
+                               command nil command)))
           ([s-return] . (lambda ()
                           (interactive)
                           (start-process "" nil "urxvt")))
@@ -618,6 +623,18 @@ around if needed."
                            (interactive)
                            (start-process-shell-command
                             "rofi-pass" nil "rofi-pass")))
+          ([?\s-h] . windmove-left)
+          ([?\s-j] . windmove-down)
+          ([?\s-k] . windmove-up)
+          ([?\s-l] . windmove-right)
+          ([?\s-H] . windmove-swap-states-left)
+          ([?\s-J] . windmove-swap-states-down)
+          ([?\s-K] . windmove-swap-states-up)
+          ([?\s-L] . windmove-swap-states-right)
+          ([?\M-\s-h] . shrink-window-horizontally)
+          ([?\M-\s-l] . enlarge-window-horizontally)
+          ([?\M-\s-k] . shrink-window)
+          ([?\M-\s-j] . enlarge-window)
           ([?\s-\[] . (lambda ()
                         (interactive)
                         (exwm-workspace-switch-create
@@ -642,10 +659,10 @@ around if needed."
                     (number-sequence 0 (1- exwm-workspace-number)))
           ([?\s-t] . exwm-floating-toggle-floating)
           ([?\s-f] . exwm-layout-toggle-fullscreen)
-          ([?\s-w] . (lambda ()
+          ([?\s-W] . (lambda ()
                        (interactive)
                        (kill-buffer (current-buffer))))
-          ([?\s-q] . (lambda ()
+          ([?\s-Q] . (lambda ()
                        (interactive)
                        (exwm-manage--kill-client)))
           ([?\s-\'] . (lambda ()
@@ -681,7 +698,9 @@ around if needed."
           ([XF86ScreenSaver] .
            (lambda ()
                     (interactive)
-                    (start-process "" nil "dm-tool" "lock")))))
+                    (start-process "" nil "dm-tool" "lock")))
+          ([\s-XF86Back] . previous-buffer)
+          ([\s-XF86Forward] . next-buffer)))
 
   ;; Line-editing shortcuts
   (setq exwm-input-simulation-keys
@@ -706,16 +725,52 @@ around if needed."
       ([?\C-y] . [?\C-v])
       ([?\M-d] . [C-S-right ?\C-x])
       ([?\M-\d] . [C-S-left ?\C-x])
-      ;; search
+      ;; window
+      ([?\s-w] . [?\C-w])
+      ([?\s-q] . [?\C-q])
+      ;; misc
       ([?\C-s] . [?\C-f])
-      ;; escape
+      ([?\s-s] . [?\C-s])
       ([?\C-g] . [escape]))))
 
+(use-feature exwm-manage
+  :demand
+  :after exwm
+  :hook
+  (exwm-manage-finish . (lambda ()
+                          (when exwm-class-name
+                            (cond
+                             ((string= exwm-class-name "Abrowser")
+                              (exwm-input-set-local-simulation-keys
+                               `(,@exwm-input-simulation-keys
+                                 ([?\C-\S-d] . [?\C-d]))))
+                             ((string= exwm-class-name "URxvt")
+                              (exwm-input-set-local-simulation-keys
+                               '(([?\C-c ?\C-c] . [?\C-c])
+                                 ([?\C-c ?\C-u] . [?\C-u]))))
+                             ((string= exwm-class-name "Zathura")
+                              (exwm-input-set-local-simulation-keys
+                               '(([?\C-p] . [C-up])
+                                 ([?\C-n] . [C-down])))))))))
+
 (use-feature exwm-randr
   :demand
   :after exwm
   :config
-  (exwm-randr-enable))
+  (exwm-randr-enable)
+  :custom
+  (exwm-randr-workspace-monitor-plist '(1 "VGA-1"))
+  :hook
+  (exwm-randr-screen-change . (lambda ()
+                                (let ((xrandr
+                                       (string-join
+                                        '("xrandr"
+                                          "--output VGA-1"
+                                          "--same-as LVDS-1"
+                                          "--auto")
+                                        " ")))
+                                  (start-process-shell-command
+                                   "xrandr" nil xrandr)))))
 
 (use-feature exwm-systemtray
   :demand
@@ -723,11 +778,11 @@ around if needed."
   :config
   (exwm-systemtray-enable))
 
-(use-feature exwm-workspace
+(use-feature exwm-workspace)
+
+(use-package exwm-edit
   :demand
-  :after exwm
-  :custom
-  (exwm-workspace-number 4))
+  :after exwm)
 
 ;; use the org-plus-contrib package to get the whole deal
 (use-package org-plus-contrib)
@@ -1278,8 +1333,6 @@ This function is intended for use with `ivy-ignore-buffers'."
 
 (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))
@@ -1444,6 +1497,10 @@ This function is intended for use with `ivy-ignore-buffers'."
   :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
 
@@ -1453,6 +1510,7 @@ This function is intended for use with `ivy-ignore-buffers'."
 (load-theme 'tangomod t)
 
 (use-package smart-mode-line
+  :disabled
   :commands (sml/apply-theme)
   :demand
   :config
@@ -1468,18 +1526,38 @@ This function is intended for use with `ivy-ignore-buffers'."
 
 (use-package doom-themes)
 
+(use-package solarized-theme
+  :disabled
+  :config
+  (load-theme 'solarized-light t))
+
+(use-package moody
+  :demand
+  :config
+  (setq x-underline-at-descent-line t)
+  (let ((line (face-attribute 'mode-line :underline)))
+    (set-face-attribute 'mode-line          nil :overline   line)
+    (set-face-attribute 'mode-line-inactive nil :overline   line)
+    (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 "#e1e1e1")) ; d3d7cf
+  (moody-replace-mode-line-buffer-identification)
+  (moody-replace-vc-mode))
+
 (defvar b/org-mode-font-lock-keywords
   '(("[ \t]*\\(#\\+\\(BEGIN\\|END\\|begin\\|end\\)_\\(\\S-+\\)\\)[ \t]*\\([^\n:]*\\)"
       (1 '(:foreground "#5a5b5a" :background "#292b2b") t) ; directive
       (3 '(:foreground "#81a2be" :background "#292b2b") t) ; kind
-      (4 '(:foreground "#c5c8c6") t))))                    ; title
+      (4 '(:foreground "#c5c8c6") t)))                     ; title
+  "For use with the `doom-tomorrow-night' theme.")
 
 (defun b/lights-on ()
   "Enable my favourite light theme."
   (interactive)
   (mapc #'disable-theme custom-enabled-themes)
   (load-theme 'tangomod t)
-  (sml/apply-theme 'automatic)
+  ;; (sml/apply-theme 'automatic)
   (font-lock-remove-keywords
    'org-mode b/org-mode-font-lock-keywords))
 
@@ -1487,8 +1565,8 @@ This function is intended for use with `ivy-ignore-buffers'."
   "Go dark."
   (interactive)
   (mapc #'disable-theme custom-enabled-themes)
-  (load-theme 'doom-tomorrow-night t)
-  (sml/apply-theme 'automatic)
+  (load-theme 'doom-one t)
+  ;; (sml/apply-theme 'automatic)
   (font-lock-add-keywords
    'org-mode b/org-mode-font-lock-keywords t))
 
@@ -1659,8 +1737,8 @@ This function is intended for use with `ivy-ignore-buffers'."
   :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
@@ -1761,11 +1839,9 @@ This function is intended for use with `ivy-ignore-buffers'."
                ("p" . mc/mark-previous-like-this)
                ("a" . mc/mark-all-like-this))))
 
-(comment
-  ;; TODO
-  (use-package forge
-    :after magit
-    :demand))
+(use-package forge
+  :demand
+  :after magit)
 
 (use-package yasnippet
   :defer 0.6
@@ -1809,6 +1885,7 @@ This function is intended for use with `ivy-ignore-buffers'."
 ;; (use-package fill-column-indicator)
 
 (use-package emojify
+  :disabled
   :hook (erc-mode . emojify-mode))
 
 (use-feature window
@@ -1851,6 +1928,14 @@ This function is intended for use with `ivy-ignore-buffers'."
   :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
@@ -1874,6 +1959,21 @@ This function is intended for use with `ivy-ignore-buffers'."
   :demand
   :config (minions-mode))
 
+(use-package dmenu
+  :custom
+  (dmenu-prompt-string "run: ")
+  (dmenu-save-file (b/var "dmenu-items")))
+
+(use-package eosd
+  ;; TODO: fix build by properly building the eosd-pixbuf.c module
+  ;; e.g. see https://github.com/raxod502/straight.el/issues/386
+  :disabled
+  :straight (:host github :repo "clarete/eosd")
+  :demand
+  :after exwm
+  :config
+  (eosd-start))
+
 \f
 ;;; Email (with Gnus)
 
@@ -1914,9 +2014,9 @@ This function is intended for use with `ivy-ignore-buffers'."
                                  ;; (: 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")
+                                 ;; *.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
@@ -1952,7 +2052,7 @@ This function is intended for use with `ivy-ignore-buffers'."
              (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")
@@ -2173,25 +2273,26 @@ Computer Science Club, University of Waterloo
 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)
+           (gcc "nnimap+shemshak:Sent")
            (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:.*"
-           (address "abandali@uwaterloo.ca")
+           (address "bandali@uwaterloo.ca")
            (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")))))
 
@@ -2269,7 +2370,7 @@ https://csclub.uwaterloo.ca/~abandali")
         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)
@@ -2340,7 +2441,7 @@ https://csclub.uwaterloo.ca/~abandali")
 (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)
@@ -2410,80 +2511,7 @@ https://csclub.uwaterloo.ca/~abandali")
   (add-to-list 'erc-modules 'notifications)
   (add-to-list 'erc-modules 'spelling)
   (add-to-list 'erc-modules 'scrolltoplace)
-  (erc-update-modules)
-
-  (when (and (version<= "24.4" emacs-version)
-             (version<         emacs-version "27"))
-    ;; fix erc-lurker bug
-    ;; patch submitted: https://bugs.gnu.org/36843#10
-    ;; TODO: remove when patch is merged and emacs 27 is released
-    (defvar erc-message-parsed)
-    (defun erc-display-message (parsed type buffer msg &rest args)
-      "Display MSG in BUFFER.
-
-ARGS, PARSED, and TYPE are used to format MSG sensibly.
-
-See also `erc-format-message' and `erc-display-line'."
-      (let ((string (if (symbolp msg)
-                        (apply #'erc-format-message msg args)
-                      msg))
-            (erc-message-parsed parsed))
-        (setq string
-              (cond
-               ((null type)
-                string)
-               ((listp type)
-                (mapc (lambda (type)
-                        (setq string
-                              (erc-display-message-highlight type string)))
-                      type)
-                string)
-               ((symbolp type)
-                (erc-display-message-highlight type string))))
-
-        (if (not (erc-response-p parsed))
-            (erc-display-line string buffer)
-          (unless (erc-hide-current-message-p parsed)
-            (erc-put-text-property 0 (length string) 'erc-parsed parsed string)
-            (erc-put-text-property 0 (length string) 'rear-sticky t string)
-            (when (erc-response.tags parsed)
-              (erc-put-text-property 0 (length string) 'tags (erc-response.tags parsed)
-                                     string))
-            (erc-display-line string buffer)))))
-
-    (defun erc-lurker-update-status (_message)
-      "Update `erc-lurker-state' if necessary.
-
-This function is called from `erc-insert-pre-hook'.  If the
-current message is a PRIVMSG, update `erc-lurker-state' to
-reflect the fact that its sender has issued a PRIVMSG at the
-current time.  Otherwise, take no action.
-
-This function depends on the fact that `erc-display-message'
-lexically binds `erc-message-parsed', which is used to check if
-the current message is a PRIVMSG and to determine its sender.
-See also `erc-lurker-trim-nicks' and `erc-lurker-ignore-chars'.
-
-In order to limit memory consumption, this function also calls
-`erc-lurker-cleanup' once every `erc-lurker-cleanup-interval'
-updates of `erc-lurker-state'."
-      (when (and (boundp 'erc-message-parsed)
-                 (erc-response-p erc-message-parsed))
-        (let* ((command (erc-response.command erc-message-parsed))
-               (sender
-                (erc-lurker-maybe-trim
-                 (car (erc-parse-user (erc-response.sender erc-message-parsed)))))
-               (server
-                (erc-canonicalize-server-name erc-server-announced-name)))
-          (when (equal command "PRIVMSG")
-            (when (>= (cl-incf erc-lurker-cleanup-count)
-                      erc-lurker-cleanup-interval)
-              (setq erc-lurker-cleanup-count 0)
-              (erc-lurker-cleanup))
-            (unless (gethash server erc-lurker-state)
-              (puthash server (make-hash-table :test 'equal) erc-lurker-state))
-            (puthash sender (current-time)
-                     (gethash server erc-lurker-state))))))))
+  (erc-update-modules))
 
 (use-feature erc-fill
   :after erc
@@ -2505,6 +2533,7 @@ updates of `erc-lurker-state'."
   (erc-track-enable-keybindings nil)
   (erc-track-exclude-types '("JOIN" "MODE" "NICK" "PART" "QUIT"
                              "324" "329" "332" "333" "353" "477"))
+  (erc-track-position-in-mode-line t)
   (erc-track-priority-faces-only 'all)
   (erc-track-shorten-function nil))