X-Git-Url: https://git.shemshak.org/gitweb.cgi/~bandali/configs/blobdiff_plain/96611976e652d23d88916be38c112d081d1f88aa..0b085e06dcb4dcea33c7d11cb6787164b277547e:/.emacs.d/init.el?ds=sidebyside diff --git a/.emacs.d/init.el b/.emacs.d/init.el index 9f5d07f..746ca44 100644 --- a/.emacs.d/init.el +++ b/.emacs.d/init.el @@ -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) @@ -488,6 +490,11 @@ For disabling the behaviour for certain buffers and/or modes." :custom ((epg-gpg-program (executable-find "gpg")))) +(use-feature auth-source + :custom + (auth-sources '("~/.authinfo.gpg")) + (authinfo-hidden (regexp-opt '("password" "client-secret" "token")))) + ;;; General bindings @@ -561,6 +568,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 @@ -582,7 +590,7 @@ For disabling the behaviour for certain buffers and/or modes." (use-feature exwm-input :demand - :after exwm-workspace + :after exwm :config (defun b/exwm-ws-prev-index () "Return the index for the previous EXWM workspace, wrapping @@ -602,14 +610,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"))) @@ -654,10 +664,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 () @@ -720,9 +730,12 @@ 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 @@ -735,9 +748,7 @@ around if needed." ((string= exwm-class-name "Abrowser") (exwm-input-set-local-simulation-keys `(,@exwm-input-simulation-keys - ([?\C-\S-d] . [?\C-d]) - ([?\C-q] . [?\C-w]) - ([?\s-q] . [?\C-q])))) + ([?\C-\S-d] . [?\C-d])))) ((string= exwm-class-name "URxvt") (exwm-input-set-local-simulation-keys '(([?\C-c ?\C-c] . [?\C-c]) @@ -751,7 +762,20 @@ around if needed." :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 @@ -759,11 +783,7 @@ around if needed." :config (exwm-systemtray-enable)) -(use-feature exwm-workspace - :demand - :after exwm - :custom - (exwm-workspace-number 4)) +(use-feature exwm-workspace) (use-package exwm-edit :demand @@ -1108,7 +1128,8 @@ This function is intended for use with `ivy-ignore-buffers'." (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 @@ -1314,12 +1335,11 @@ This function is intended for use with `ivy-ignore-buffers'." (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 - :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)) @@ -1484,6 +1504,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\\'") + ;;; Theme @@ -1524,10 +1548,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 :background "#eeeeee")) ; d3d7cf + (set-face-attribute 'mode-line-inactive nil :background "#e1e1e1")) ; d3d7cf (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 @@ -1542,8 +1571,7 @@ This function is intended for use with `ivy-ignore-buffers'." (load-theme 'tangomod t) ;; (sml/apply-theme 'automatic) (font-lock-remove-keywords - 'org-mode b/org-mode-font-lock-keywords) - (exwm-systemtray--refresh)) + 'org-mode b/org-mode-font-lock-keywords)) (defun b/lights-off () "Go dark." @@ -1552,8 +1580,7 @@ This function is intended for use with `ivy-ignore-buffers'." (load-theme 'doom-one t) ;; (sml/apply-theme 'automatic) (font-lock-add-keywords - 'org-mode b/org-mode-font-lock-keywords t) - (exwm-systemtray--refresh)) + 'org-mode b/org-mode-font-lock-keywords t)) (bind-keys ("C-c t d" . b/lights-off) @@ -1722,8 +1749,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 @@ -1735,16 +1762,17 @@ This function is intended for use with `ivy-ignore-buffers'." :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 () - (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 @@ -1870,6 +1898,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 @@ -1912,6 +1941,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 @@ -1936,9 +1973,7 @@ This function is intended for use with `ivy-ignore-buffers'." :config (minions-mode)) (use-package dmenu - :disabled :custom - (dmenu-history-size 0) (dmenu-prompt-string "run: ") (dmenu-save-file (b/var "dmenu-items"))) @@ -1952,6 +1987,13 @@ This function is intended for use with `ivy-ignore-buffers'." :config (eosd-start)) +(use-package nnreddit + :disabled + :demand + :after gnus + :custom + (nnreddit-python-command "python3")) + ;;; Email (with Gnus) @@ -1974,41 +2016,41 @@ This function is intended for use with `ivy-ignore-buffers'." 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-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") @@ -2030,7 +2072,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") @@ -2251,25 +2293,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"))))) @@ -2347,7 +2390,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) @@ -2418,7 +2461,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)