diff options
-rw-r--r-- | init.el | 202 |
1 files changed, 100 insertions, 102 deletions
diff --git a/init.el b/init.el index 5c0c13a..8d17de2 100644 --- a/init.el +++ b/init.el | |||
@@ -93,19 +93,6 @@ | |||
93 | (:with-mode Custom-mode | 93 | (:with-mode Custom-mode |
94 | (:local-set imenu-generic-expression +cus-edit-imenu-generic-expression))) | 94 | (:local-set imenu-generic-expression +cus-edit-imenu-generic-expression))) |
95 | 95 | ||
96 | (setup (:require ecomplete) | ||
97 | (:also-load +ecomplete) | ||
98 | (:option message-mail-alias-type 'ecomplete | ||
99 | message-self-insert-commands nil | ||
100 | message-expand-name-standard-ui t) | ||
101 | (with-eval-after-load 'ecomplete | ||
102 | (:option completion-category-defaults nil) | ||
103 | (with-eval-after-load 'embark | ||
104 | (:bind-into embark-email-map | ||
105 | "+" #'+ecomplete-add-email | ||
106 | "\\" #'+ecomplete-remove-email))) | ||
107 | (add-hook 'message-sent-hook #'message-put-addresses-in-ecomplete)) | ||
108 | |||
109 | (setup (:require goto-addr) | 96 | (setup (:require goto-addr) |
110 | (if (fboundp #'global-goto-address-mode) | 97 | (if (fboundp #'global-goto-address-mode) |
111 | (global-goto-address-mode) | 98 | (global-goto-address-mode) |
@@ -189,41 +176,42 @@ | |||
189 | (add-to-list '+browse-url-secondary-browser-regexps | 176 | (add-to-list '+browse-url-secondary-browser-regexps |
190 | (replace-regexp-in-string "\\." "\\\\." domain))) | 177 | (replace-regexp-in-string "\\." "\\\\." domain))) |
191 | ;; Set up URL handlers. | 178 | ;; Set up URL handlers. |
192 | (require 'chd) | 179 | (with-eval-after-load 'org-contacts |
193 | (+browse-url-set-handlers | 180 | (require 'chd) |
194 | (list | 181 | (+browse-url-set-handlers |
195 | (cons (rx ; images | 182 | (list |
196 | "." (or "jpeg" "jpg" "png" "bmp") eos) | 183 | (cons (rx ; images |
197 | (lambda (&rest args) | 184 | "." (or "jpeg" "jpg" "png" "bmp") eos) |
198 | (apply | 185 | (lambda (&rest args) |
199 | (cond ((executable-find "mpv") #'+browse-image-with-mpv) | 186 | (apply |
200 | (t #'eww-browse-url)) | 187 | (cond ((executable-find "mpv") #'+browse-image-with-mpv) |
201 | args))) | 188 | (t #'eww-browse-url)) |
202 | (cons (rx (or ;; videos | 189 | args))) |
203 | "youtube.com" "youtu.be" "invidious" "yewtu.be" | 190 | (cons (rx (or ;; videos |
204 | (seq "." (or "mp4" "gif" "mov" "MOV" "webm") eos) | 191 | "youtube.com" "youtu.be" "invidious" "yewtu.be" |
205 | ;; music | 192 | (seq "." (or "mp4" "gif" "mov" "MOV" "webm") eos) |
206 | "soundcloud.com" "bandcamp.com" | 193 | ;; music |
207 | (seq "." (or "ogg" "mp3" "opus" "m4a") eos))) | 194 | "soundcloud.com" "bandcamp.com" |
208 | (lambda (&rest args) | 195 | (seq "." (or "ogg" "mp3" "opus" "m4a") eos))) |
209 | (apply (if (executable-find "mpv") | 196 | (lambda (&rest args) |
210 | #'+browse-url-with-mpv | 197 | (apply (if (executable-find "mpv") |
211 | browse-url-secondary-browser-function) | 198 | #'+browse-url-with-mpv |
212 | args))) | 199 | browse-url-secondary-browser-function) |
213 | (cons chd/url-regexps #'browse-url-chrome) | 200 | args))) |
214 | (cons (+browse-url-secondary-browser-regexps-combine) ; non-text websites | 201 | (cons chd/url-regexps #'browse-url-chrome) |
215 | (lambda (&rest args) | 202 | (cons (+browse-url-secondary-browser-regexps-combine) ; non-text websites |
216 | (apply browse-url-secondary-browser-function args))) | 203 | (lambda (&rest args) |
217 | (cons "xkcd\\.com" | 204 | (apply browse-url-secondary-browser-function args))) |
218 | (lambda (&rest args) | 205 | (cons "xkcd\\.com" |
219 | (apply (if (fboundp #'xkcd-get) | 206 | (lambda (&rest args) |
220 | (progn (require '+xkcd) | 207 | (apply (if (fboundp #'xkcd-get) |
221 | #'+xkcd-get-from-url) | 208 | (progn (require '+xkcd) |
222 | +browse-url-browser-function) | 209 | #'+xkcd-get-from-url) |
223 | args))) | 210 | +browse-url-browser-function) |
224 | (cons "." ; everything else | 211 | args))) |
225 | (lambda (&rest args) | 212 | (cons "." ; everything else |
226 | (apply +browse-url-browser-function args))))) | 213 | (lambda (&rest args) |
214 | (apply +browse-url-browser-function args)))))) | ||
227 | ;; Transform URLs before passing to `browse-url' | 215 | ;; Transform URLs before passing to `browse-url' |
228 | (:option +browse-url-transformations `((,(rx (or "youtube.com" | 216 | (:option +browse-url-transformations `((,(rx (or "youtube.com" |
229 | "youtu.be")) | 217 | "youtu.be")) |
@@ -236,15 +224,14 @@ | |||
236 | "old.reddit.com")) | 224 | "old.reddit.com")) |
237 | . "teddit.net") | 225 | . "teddit.net") |
238 | ("medium\\.com" | 226 | ("medium\\.com" |
239 | . "scribe.rip"))) | 227 | . "scribe.rip") |
228 | ("www\\.npr\\.org" | ||
229 | . "text.npr.org"))) | ||
240 | (+browse-url-transform-url-global-mode +1)) | 230 | (+browse-url-transform-url-global-mode +1)) |
241 | 231 | ||
242 | (setup calendar | 232 | (setup calendar |
243 | (require '_location) | 233 | (require '_location) |
244 | (:option calendar-location-name _location-name | 234 | (:option diary-file (private/ "diary"))) |
245 | calendar-latitude _location-latitude | ||
246 | calendar-longitude _location-longitude | ||
247 | diary-file (private/ "diary"))) | ||
248 | 235 | ||
249 | (setup compile | 236 | (setup compile |
250 | (:option compilation-always-kill t | 237 | (:option compilation-always-kill t |
@@ -282,6 +269,20 @@ | |||
282 | (with-eval-after-load 'frowny | 269 | (with-eval-after-load 'frowny |
283 | (add-to-list 'frowny-inhibit-modes #'dired-mode))) | 270 | (add-to-list 'frowny-inhibit-modes #'dired-mode))) |
284 | 271 | ||
272 | (setup ecomplete (:quit) | ||
273 | (:load-after org-contacts) | ||
274 | (:also-load +ecomplete) | ||
275 | (:option message-mail-alias-type 'ecomplete | ||
276 | message-self-insert-commands nil | ||
277 | message-expand-name-standard-ui t) | ||
278 | (with-eval-after-load 'ecomplete | ||
279 | (:option completion-category-defaults nil) | ||
280 | (with-eval-after-load 'embark | ||
281 | (:bind-into embark-email-map | ||
282 | "+" #'+ecomplete-add-email | ||
283 | "\\" #'+ecomplete-remove-email))) | ||
284 | (add-hook 'message-sent-hook #'message-put-addresses-in-ecomplete)) | ||
285 | |||
285 | (setup ehelp | 286 | (setup ehelp |
286 | ;; Trying this instead of `helpful' | 287 | ;; Trying this instead of `helpful' |
287 | (:global [help] 'ehelp-command | 288 | (:global [help] 'ehelp-command |
@@ -462,39 +463,15 @@ | |||
462 | )) | 463 | )) |
463 | 464 | ||
464 | (setup notmuch | 465 | (setup notmuch |
465 | (add-to-list 'load-path | 466 | (:load-from "~/usr/share/emacs/site-lisp/") |
466 | (car (file-expand-wildcards "/usr/share/emacs/site-lisp/elpa-src/notmuch*"))) | 467 | ;;(:load-after org-contacts) |
467 | (require 'notmuch) | 468 | (:also-load +notmuch) |
468 | (require '+notmuch) | 469 | (+define-dir notmuch/ (sync/ "emacs/notmuch") |
469 | (+define-dir notmuch/ (private/ "notmuch") | ||
470 | "Notmuch configuration and data.") | 470 | "Notmuch configuration and data.") |
471 | (:option notmuch-init-file (notmuch/ "init.el" t) | 471 | (:option notmuch-init-file (notmuch/ "notmuch-init.el" t) |
472 | notmuch-address-save-filename (notmuch/ "addresses" t) | 472 | notmuch-address-save-filename (notmuch/ "addresses" t) |
473 | notmuch-address-use-company (featurep 'company) | 473 | notmuch-address-use-company (featurep 'company) |
474 | notmuch-search-oldest-first nil | 474 | notmuch-search-oldest-first nil) |
475 | notmuch-saved-searches (list | ||
476 | (list :name "next" | ||
477 | :query (+notmuch-query-concat "tag:inbox" | ||
478 | "NOT tag:/List/") | ||
479 | :key "n") | ||
480 | (list :name "lists" | ||
481 | :query (+notmuch-query-concat "tag:/List/") | ||
482 | :key "l") | ||
483 | ;; original | ||
484 | (list :name "inbox" | ||
485 | :query (+notmuch-query-concat "tag:inbox" | ||
486 | "NOT tag:Spam") | ||
487 | :key "i") | ||
488 | (list :name "unread" | ||
489 | :query (+notmuch-query-concat "tag:unread" | ||
490 | "NOT tag:Spam") | ||
491 | :key "u") | ||
492 | (list :name "flagged" :query "tag:flagged" :key "f") | ||
493 | (list :name "sent" :query "tag:sent" :key "t") | ||
494 | (list :name "drafts" :query "tag:draft" :key "d") | ||
495 | (list :name "all mail" :query "*" :key "a"))) | ||
496 | ;; I don't know why or how this isn't properly loaded, but here we are. | ||
497 | (with-eval-after-load 'notmuch (load notmuch-init-file :noerror)) | ||
498 | ;; Composing mail | 475 | ;; Composing mail |
499 | (:option message-kill-buffer-on-exit t) | 476 | (:option message-kill-buffer-on-exit t) |
500 | ;; Sending mail | 477 | ;; Sending mail |
@@ -503,12 +480,31 @@ | |||
503 | message-sendmail-envelope-from 'header | 480 | message-sendmail-envelope-from 'header |
504 | mail-envelope-from 'header) | 481 | mail-envelope-from 'header) |
505 | ;; Extras and fixes | 482 | ;; Extras and fixes |
506 | ;; +send-mail-dispatch is defined in notmuch/init.el | 483 | (with-eval-after-load 'notmuch |
507 | (add-hook 'notmuch-show-mode-hook #'visual-fill-column-mode) | 484 | (load notmuch-init-file :noerror) |
508 | (add-hook 'message-send-hook #'+send-mail-dispatch) | 485 | ;;(add-hook 'notmuch-show-mode-hook #'visual-fill-column-mode) |
509 | (advice-add 'notmuch-tag :filter-args #'+notmuch-correct-tags) | 486 | (add-hook 'message-send-hook #'+send-mail-dispatch) |
510 | (:+leader "m" #'+notmuch-goto | 487 | (advice-add 'notmuch-tag :filter-args #'+notmuch-correct-tags) |
511 | "C-m" #'+notmuch-goto)) | 488 | (:option notmuch-saved-searches (list |
489 | (list :name "lists" | ||
490 | :query (+notmuch-query-concat "tag:/List/" | ||
491 | "tag:unread") | ||
492 | :key "l") | ||
493 | ;; original | ||
494 | (list :name "inbox" | ||
495 | :query (+notmuch-query-concat "tag:inbox" | ||
496 | "NOT tag:Spam") | ||
497 | :key "i") | ||
498 | (list :name "unread" | ||
499 | :query (+notmuch-query-concat "tag:unread" | ||
500 | "NOT tag:Spam") | ||
501 | :key "u") | ||
502 | (list :name "flagged" :query "tag:flagged" :key "f") | ||
503 | (list :name "sent" :query "tag:sent" :key "t") | ||
504 | (list :name "drafts" :query "tag:draft" :key "d") | ||
505 | (list :name "all mail" :query "*" :key "a")))) | ||
506 | (:+leader "m" #'+notmuch-goto "C-m" #'+notmuch-goto | ||
507 | "n" #'notmuch "C-n" #'notmuch)) | ||
512 | 508 | ||
513 | (setup org | 509 | (setup org |
514 | ;; Plain org with the `setup' form for sorting, but I install with straight. | 510 | ;; Plain org with the `setup' form for sorting, but I install with straight. |
@@ -649,7 +645,8 @@ | |||
649 | (setup org-attach | 645 | (setup org-attach |
650 | (:also-load +org-attach) | 646 | (:also-load +org-attach) |
651 | (:option org-attach-method 'lns) | 647 | (:option org-attach-method 'lns) |
652 | (+org-attach-fix-args-mode +1)) | 648 | (with-eval-after-load '+org-attach |
649 | (+org-attach-fix-args-mode +1))) | ||
653 | 650 | ||
654 | (setup org-capture | 651 | (setup org-capture |
655 | (:require +org-capture) | 652 | (:require +org-capture) |
@@ -698,6 +695,7 @@ | |||
698 | (+org-capture-sort)) | 695 | (+org-capture-sort)) |
699 | 696 | ||
700 | (setup org-contacts | 697 | (setup org-contacts |
698 | (:load-after org) | ||
701 | (:also-straight org-vcard) ; for importing Vcard files | 699 | (:also-straight org-vcard) ; for importing Vcard files |
702 | (:option org-contacts-matcher "contact") ; Contacts are tagged "contact" | 700 | (:option org-contacts-matcher "contact") ; Contacts are tagged "contact" |
703 | ) | 701 | ) |
@@ -1130,7 +1128,7 @@ They are completed by \"M-x TAB\" only in Tramp debug buffers." | |||
1130 | ("C-M-#" . consult-register) | 1128 | ("C-M-#" . consult-register) |
1131 | ;; Other custom bindings | 1129 | ;; Other custom bindings |
1132 | ("M-y" . consult-yank-pop) | 1130 | ("M-y" . consult-yank-pop) |
1133 | ("<f1> a" . consult-apropos) | 1131 | ;;("<f1> a" . consult-apropos) |
1134 | ;; M-g bindings (goto-map) | 1132 | ;; M-g bindings (goto-map) |
1135 | ("M-g e" . consult-compile-error) | 1133 | ("M-g e" . consult-compile-error) |
1136 | ("M-g f" . consult-flymake) ; or consult-flycheck | 1134 | ("M-g f" . consult-flymake) ; or consult-flycheck |
@@ -1163,9 +1161,9 @@ They are completed by \"M-x TAB\" only in Tramp debug buffers." | |||
1163 | (define-key isearch-mode-map (car binding) (cdr binding)))) | 1161 | (define-key isearch-mode-map (car binding) (cdr binding)))) |
1164 | (:+menu "b" #'consult-buffer | 1162 | (:+menu "b" #'consult-buffer |
1165 | "f" #'find-file) | 1163 | "f" #'find-file) |
1166 | (with-eval-after-load 'org-mode | 1164 | (:bind-into org |
1167 | (define-key org-mode-map "M-g o" 'consult-org-heading)) | 1165 | "M-g o" #'consult-org-heading) |
1168 | (advice-add 'consult-yank-pop :after '+yank@indent) | 1166 | (advice-add 'consult-yank-pop :after #'+yank@indent) |
1169 | (:when-loaded | 1167 | (:when-loaded |
1170 | (:option consult-narrow-key "<" | 1168 | (:option consult-narrow-key "<" |
1171 | consult-project-root-function '+consult-project-root) | 1169 | consult-project-root-function '+consult-project-root) |
@@ -1211,8 +1209,6 @@ They are completed by \"M-x TAB\" only in Tramp debug buffers." | |||
1211 | 1209 | ||
1212 | (setup (:straight consult-notmuch) | 1210 | (setup (:straight consult-notmuch) |
1213 | (:load-after consult notmuch) | 1211 | (:load-after consult notmuch) |
1214 | (with-eval-after-load 'consult | ||
1215 | (add-to-list 'consult-buffer-sources 'consult-notmuch-buffer-source)) | ||
1216 | (with-eval-after-load 'vertico-multiform | 1212 | (with-eval-after-load 'vertico-multiform |
1217 | (setf (alist-get 'consult-notmuch vertico-multiform-commands) '(buffer) | 1213 | (setf (alist-get 'consult-notmuch vertico-multiform-commands) '(buffer) |
1218 | (alist-get 'consult-notmuch-tree vertico-multiform-commands) '(buffer)))) | 1214 | (alist-get 'consult-notmuch-tree vertico-multiform-commands) '(buffer)))) |
@@ -1679,10 +1675,11 @@ See also `crux-reopen-as-root-mode'." | |||
1679 | (file-exists-p i)) | 1675 | (file-exists-p i)) |
1680 | i)) | 1676 | i)) |
1681 | auth-sources) | 1677 | auth-sources) |
1682 | mastodon-tl--enable-proportional-fonts t | 1678 | mastodon-tl--show-avatars t |
1683 | mastodon-tl--show-avatars t) | 1679 | mastodon-tl--enable-proportional-fonts nil) |
1684 | (:hook #'mastodon-async-mode | 1680 | (:hook #'mastodon-async-mode |
1685 | #'reading-mode | 1681 | #'visual-fill-column-mode |
1682 | #'variable-pitch-mode | ||
1686 | #'hl-line-mode | 1683 | #'hl-line-mode |
1687 | #'lin-mode)) | 1684 | #'lin-mode)) |
1688 | 1685 | ||
@@ -1732,8 +1729,8 @@ See also `crux-reopen-as-root-mode'." | |||
1732 | eshell-mode | 1729 | eshell-mode |
1733 | vterm-mode | 1730 | vterm-mode |
1734 | crossword-mode)) | 1731 | crossword-mode)) |
1735 | (:+key "C-a" #'+mwim-beginning-maybe | 1732 | (:global "C-a" #'+mwim-beginning-maybe |
1736 | "C-e" #'+mwim-end-maybe)) | 1733 | "C-e" #'+mwim-end-maybe)) |
1737 | 1734 | ||
1738 | (setup (:straight notmuch-bookmarks) | 1735 | (setup (:straight notmuch-bookmarks) |
1739 | (:load-after notmuch) | 1736 | (:load-after notmuch) |
@@ -2056,7 +2053,8 @@ See also `crux-reopen-as-root-mode'." | |||
2056 | (append reading-modes) '(visual-fill-column-mode . +1)) | 2053 | (append reading-modes) '(visual-fill-column-mode . +1)) |
2057 | (:hook #'visual-line-mode) | 2054 | (:hook #'visual-line-mode) |
2058 | (:hook-into org-mode) | 2055 | (:hook-into org-mode) |
2059 | (advice-add #'text-scale-adjust :after #'visual-fill-column-adjust)) | 2056 | (advice-add #'text-scale-adjust :after #'visual-fill-column-adjust) |
2057 | (:global [f12] #'visual-fill-column-mode)) | ||
2060 | 2058 | ||
2061 | (setup (:straight vlf) | 2059 | (setup (:straight vlf) |
2062 | (:require vlf-setup)) | 2060 | (:require vlf-setup)) |