diff options
Diffstat (limited to 'init.el')
-rw-r--r-- | init.el | 119 |
1 files changed, 84 insertions, 35 deletions
diff --git a/init.el b/init.el index b4fade6..d67f8e7 100644 --- a/init.el +++ b/init.el | |||
@@ -14,6 +14,14 @@ | |||
14 | ;; - Be kind to yourself. | 14 | ;; - Be kind to yourself. |
15 | ;; - Make good choices. | 15 | ;; - Make good choices. |
16 | 16 | ||
17 | ;;; Commentary | ||
18 | |||
19 | ;; My init.el. There are many like it, but this one is mine. | ||
20 | |||
21 | ;; Ideas: | ||
22 | ;; [[https://emacs.stackexchange.com/questions/17278/truncate-only-certain-lines-and-use-continuation-lines-elsewhere][Truncate org-mode headings]] | ||
23 | ;; [[https://emacs.stackexchange.com/questions/7432/make-visual-line-mode-more-compatible-with-org-mode][another link that might be useful for truncating]] | ||
24 | |||
17 | ;;; Code: | 25 | ;;; Code: |
18 | 26 | ||
19 | (let ((early-features `((early-init . ,(locate-user-emacs-file "early-init")) | 27 | (let ((early-features `((early-init . ,(locate-user-emacs-file "early-init")) |
@@ -104,6 +112,8 @@ | |||
104 | (:with-mode Custom-mode | 112 | (:with-mode Custom-mode |
105 | (:local-set imenu-generic-expression +cus-edit-imenu-generic-expression))) | 113 | (:local-set imenu-generic-expression +cus-edit-imenu-generic-expression))) |
106 | 114 | ||
115 | (setup (:require find-script)) | ||
116 | |||
107 | (setup (:require goto-addr) | 117 | (setup (:require goto-addr) |
108 | (if (fboundp #'global-goto-address-mode) | 118 | (if (fboundp #'global-goto-address-mode) |
109 | (global-goto-address-mode) | 119 | (global-goto-address-mode) |
@@ -242,17 +252,15 @@ | |||
242 | (:option +browse-url-transformations `((,(rx (or "youtube.com" | 252 | (:option +browse-url-transformations `((,(rx (or "youtube.com" |
243 | "youtu.be")) | 253 | "youtu.be")) |
244 | . ,+invidious-host) | 254 | . ,+invidious-host) |
245 | ("twitter\\.com" | 255 | ("twitter\\.com" . "nitter.net") |
246 | . "nitter.net") | 256 | ("instagram\\.com" . "bibilogram.art") |
247 | ("instagram\\.com" | ||
248 | . "bibilogram.art") | ||
249 | (,(rx (or "reddit.com" | 257 | (,(rx (or "reddit.com" |
250 | "old.reddit.com")) | 258 | "old.reddit.com")) |
251 | . "teddit.net") | 259 | . "teddit.net") |
252 | ("medium\\.com" | 260 | ("medium\\.com" . "scribe.rip") |
253 | . "scribe.rip") | 261 | ("www\\.npr\\.org" . "text.npr.org") |
254 | ("www\\.npr\\.org" | 262 | ;;TODO: Various paste sites |
255 | . "text.npr.org"))) | 263 | )) |
256 | (+browse-url-transform-url-global-mode +1)) | 264 | (+browse-url-transform-url-global-mode +1)) |
257 | 265 | ||
258 | (setup calendar | 266 | (setup calendar |
@@ -461,7 +469,8 @@ | |||
461 | '(context-menu-ffap | 469 | '(context-menu-ffap |
462 | context-menu-region | 470 | context-menu-region |
463 | context-menu-undo | 471 | context-menu-undo |
464 | context-menu-dictionary)) | 472 | ;; context-menu-dictionary |
473 | )) | ||
465 | (context-menu-mode +1)) | 474 | (context-menu-mode +1)) |
466 | (dolist (click '(;; Fix scrolling in the margin | 475 | (dolist (click '(;; Fix scrolling in the margin |
467 | wheel-down double-wheel-down triple-wheel-down | 476 | wheel-down double-wheel-down triple-wheel-down |
@@ -470,9 +479,25 @@ | |||
470 | (global-set-key (vector 'left-margin click) 'mwheel-scroll))) | 479 | (global-set-key (vector 'left-margin click) 'mwheel-scroll))) |
471 | 480 | ||
472 | (setup net-utils | 481 | (setup net-utils |
482 | (:needs "traceroute") | ||
473 | (:require +finger) ; fixes `finger' to use var below | 483 | (:require +finger) ; fixes `finger' to use var below |
474 | (:option finger-X.500-host-regexps '(".") ; only send username | 484 | (:option finger-X.500-host-regexps '(".") ; only send username |
475 | )) | 485 | ) |
486 | (require 'transient) | ||
487 | (transient-define-prefix net-utils () | ||
488 | "Networking utilities" | ||
489 | ["Actions" | ||
490 | ("p" "Ping" ping) | ||
491 | ("i" "Ifconfig" ifconfig) | ||
492 | ("w" "Iwconfig" iwconfig) | ||
493 | ("n" "Netstat" netstat) | ||
494 | ("a" "Arp" arp) | ||
495 | ("r" "Route" route) | ||
496 | ("h" "Nslookup host" nslookup-host) | ||
497 | ("d" "Dig" dig) | ||
498 | ("s" "Smb Client" smbclient) | ||
499 | ("t" "Traceroute" traceroute)]) | ||
500 | (:+key "C-z M-n" #'net-utils)) | ||
476 | 501 | ||
477 | (setup notmuch | 502 | (setup notmuch |
478 | (:load-from "~/usr/share/emacs/site-lisp/") | 503 | (:load-from "~/usr/share/emacs/site-lisp/") |
@@ -561,7 +586,7 @@ | |||
561 | org-fontify-done-headline t | 586 | org-fontify-done-headline t |
562 | org-fontify-quote-and-verse-blocks t | 587 | org-fontify-quote-and-verse-blocks t |
563 | org-fontify-whole-heading-line t | 588 | org-fontify-whole-heading-line t |
564 | org-hide-emphasis-markers t | 589 | org-hide-emphasis-markers nil |
565 | org-html-coding-system 'utf-8-unix | 590 | org-html-coding-system 'utf-8-unix |
566 | org-image-actual-width (list (* (window-font-width) | 591 | org-image-actual-width (list (* (window-font-width) |
567 | (- fill-column 8))) | 592 | (- fill-column 8))) |
@@ -620,7 +645,15 @@ | |||
620 | "C-c C-p" #'+org-previous-heading-widen | 645 | "C-c C-p" #'+org-previous-heading-widen |
621 | "C-c C-o" #'+org-open-at-point-dwim | 646 | "C-c C-o" #'+org-open-at-point-dwim |
622 | "`" #'+org-insert-tilde | 647 | "`" #'+org-insert-tilde |
623 | "~" #'+org-insert-backtick) | 648 | "~" #'+org-insert-backtick |
649 | "C-c C-x l" #'org-toggle-link-display | ||
650 | "C-c C-x m" (lambda () (interactive) | ||
651 | (setq-local org-hide-emphasis-markers | ||
652 | (not org-hide-emphasis-markers)) | ||
653 | (font-lock-update)) | ||
654 | "C-c C-x r" #'+org-drawer-list-add-resource | ||
655 | "C-M-k" #'kill-paragraph | ||
656 | "C-M-t" #'transpose-paragraphs) | ||
624 | (:global [f8] #'org-clock-in | 657 | (:global [f8] #'org-clock-in |
625 | [f9] #'org-clock-out | 658 | [f9] #'org-clock-out |
626 | "C-c l" #'org-store-link) | 659 | "C-c l" #'org-store-link) |
@@ -632,6 +665,12 @@ | |||
632 | (:local-set prettify-symbols-alist '(("DEADLINE:" . ?→) | 665 | (:local-set prettify-symbols-alist '(("DEADLINE:" . ?→) |
633 | ("SCHEDULED:" . ?↷) | 666 | ("SCHEDULED:" . ?↷) |
634 | ("CLOSED:" . ?✓)) | 667 | ("CLOSED:" . ?✓)) |
668 | ;; electric-pair-pairs | ||
669 | ;; (append electric-pair-pairs | ||
670 | ;; (mapcar (lambda (emph) | ||
671 | ;; (let ((ch (string-to-char (car emph)))) | ||
672 | ;; (cons ch ch))) | ||
673 | ;; org-emphasis-alist)) | ||
635 | ;;+modeline-position-function #'+org-count-words-stupidly | 674 | ;;+modeline-position-function #'+org-count-words-stupidly |
636 | ) | 675 | ) |
637 | (:local-hook user-save-hook #'+org-before-save@prettify-buffer) | 676 | (:local-hook user-save-hook #'+org-before-save@prettify-buffer) |
@@ -649,6 +688,9 @@ | |||
649 | (org-link-set-parameters "sms" :follow #'+org-sms-open) | 688 | (org-link-set-parameters "sms" :follow #'+org-sms-open) |
650 | (setf (alist-get "\\.x?html?\\'" org-file-apps nil nil #'equal) | 689 | (setf (alist-get "\\.x?html?\\'" org-file-apps nil nil #'equal) |
651 | #'+org-open-html)) | 690 | #'+org-open-html)) |
691 | (:face 'org-done '((t (:inherit (modus-themes-subtle-green)))) | ||
692 | 'org-tag '((t (:inherit (secondary-selection)))) | ||
693 | 'org-todo '((t (:inherit (modus-themes-subtle-red))))) | ||
652 | ;; Extra keywords | 694 | ;; Extra keywords |
653 | (font-lock-add-keywords | 695 | (font-lock-add-keywords |
654 | 'org-mode | 696 | 'org-mode |
@@ -1161,10 +1203,6 @@ | |||
1161 | (:hook #'visual-line-mode | 1203 | (:hook #'visual-line-mode |
1162 | #'enable-lui-track | 1204 | #'enable-lui-track |
1163 | #'visual-fill-column-mode | 1205 | #'visual-fill-column-mode |
1164 | (defun +disable-electric-pair-mode () | ||
1165 | "Disable `electric-pair-mode' in the current buffer." | ||
1166 | (interactive) | ||
1167 | (electric-pair-local-mode -1)) | ||
1168 | #'enable-lui-autopaste) | 1206 | #'enable-lui-autopaste) |
1169 | (:local-set fringes-outside-margins t | 1207 | (:local-set fringes-outside-margins t |
1170 | right-margin-width (length lui-time-stamp-format) | 1208 | right-margin-width (length lui-time-stamp-format) |
@@ -1181,6 +1219,7 @@ | |||
1181 | (setf (alist-get 'lui-next-button-or-complete vertico-multiform-commands) | 1219 | (setf (alist-get 'lui-next-button-or-complete vertico-multiform-commands) |
1182 | '(flat)))) | 1220 | '(flat)))) |
1183 | 1221 | ||
1222 | (tracking-mode +1) | ||
1184 | (:with-mode tracking-mode | 1223 | (:with-mode tracking-mode |
1185 | (:option tracking-position 'before-modes) | 1224 | (:option tracking-position 'before-modes) |
1186 | (:bind "C-c C-SPC" (lambda () (interactive) | 1225 | (:bind "C-c C-SPC" (lambda () (interactive) |
@@ -1298,19 +1337,20 @@ | |||
1298 | (with-eval-after-load 'vertico-multiform | 1337 | (with-eval-after-load 'vertico-multiform |
1299 | (setf (alist-get 'consult-buffer vertico-multiform-commands) '(flat)) | 1338 | (setf (alist-get 'consult-buffer vertico-multiform-commands) '(flat)) |
1300 | (dolist (buf-cmd '(consult-find | 1339 | (dolist (buf-cmd '(consult-find |
1301 | consult-yank-pop | 1340 | consult-flymake |
1302 | consult-locate | 1341 | consult-focus-lines |
1303 | consult-grep | ||
1304 | consult-git-grep | 1342 | consult-git-grep |
1305 | consult-ripgrep | 1343 | consult-grep |
1344 | consult-imenu | ||
1345 | consult-imenu-multi | ||
1346 | consult-keep-lines | ||
1306 | consult-line | 1347 | consult-line |
1307 | consult-line-multi | 1348 | consult-line-multi |
1349 | consult-locate | ||
1308 | consult-multi-occur | 1350 | consult-multi-occur |
1309 | consult-keep-lines | 1351 | consult-outline |
1310 | consult-focus-lines | 1352 | consult-ripgrep |
1311 | consult-imenu | 1353 | consult-yank-pop)) |
1312 | consult-imenu-multi | ||
1313 | consult-outline)) | ||
1314 | (setf (alist-get buf-cmd vertico-multiform-commands) nil))))) | 1354 | (setf (alist-get buf-cmd vertico-multiform-commands) nil))))) |
1315 | 1355 | ||
1316 | (setup (:straight consult-dir) | 1356 | (setup (:straight consult-dir) |
@@ -1508,6 +1548,11 @@ | |||
1508 | (add-hook 'embark-collect-mode-hook #'consult-preview-at-point-mode)) | 1548 | (add-hook 'embark-collect-mode-hook #'consult-preview-at-point-mode)) |
1509 | 1549 | ||
1510 | (setup (:straight embrace) | 1550 | (setup (:straight embrace) |
1551 | (dolist (mode '(LaTeX-mode org-mode ruby-mode)) | ||
1552 | (add-hook (intern (format "%s-hook" mode)) | ||
1553 | (intern (format "embrace-%s-hook" mode)))) | ||
1554 | (:face 'embrace-help-pair-face '((t ( :inverse-video nil | ||
1555 | :inherit font-lock-keyword-face)))) | ||
1511 | (:+key "C-," #'embrace-commander)) | 1556 | (:+key "C-," #'embrace-commander)) |
1512 | 1557 | ||
1513 | (setup (:straight (ement | 1558 | (setup (:straight (ement |
@@ -1613,7 +1658,7 @@ | |||
1613 | (setup (:straight (forge | 1658 | (setup (:straight (forge |
1614 | :host github :repo "magit/forge") | 1659 | :host github :repo "magit/forge") |
1615 | (eq system-type 'gnu/linux)) | 1660 | (eq system-type 'gnu/linux)) |
1616 | (require 'forge) | 1661 | (:quit) ; XXX: Somehow missing compat-26 |
1617 | (add-to-list 'forge-alist | 1662 | (add-to-list 'forge-alist |
1618 | '("tildegit.org" "tildegit.org/api/v1" "tildegit.org" | 1663 | '("tildegit.org" "tildegit.org/api/v1" "tildegit.org" |
1619 | forge-gitea-repository))) | 1664 | forge-gitea-repository))) |
@@ -1626,6 +1671,7 @@ | |||
1626 | (setup (:straight (frowny | 1671 | (setup (:straight (frowny |
1627 | :host github | 1672 | :host github |
1628 | :repo "duckwork/frowny.el")) | 1673 | :repo "duckwork/frowny.el")) |
1674 | (:option frowny-eyes (rx (any ":=") (opt "'") (? "-"))) | ||
1629 | (global-frowny-mode +1)) | 1675 | (global-frowny-mode +1)) |
1630 | 1676 | ||
1631 | (setup (:straight gcmh) | 1677 | (setup (:straight gcmh) |
@@ -1753,9 +1799,6 @@ | |||
1753 | :fork ( :host nil | 1799 | :fork ( :host nil |
1754 | :repo "https://codeberg.org/acdw/emacs-jabber"))) | 1800 | :repo "https://codeberg.org/acdw/emacs-jabber"))) |
1755 | (:also-load +jabber) | 1801 | (:also-load +jabber) |
1756 | (defvar +jabber-ws-prefix 0 "Width to pad left side of chats.") | ||
1757 | (defvar +jabber-pre-prompt "\n" | ||
1758 | "String to show before a prompt.") | ||
1759 | (:option jabber-account-list '(("acdw@hmm.st")) | 1802 | (:option jabber-account-list '(("acdw@hmm.st")) |
1760 | jabber-groupchat-buffer-format "%n" | 1803 | jabber-groupchat-buffer-format "%n" |
1761 | jabber-chat-buffer-format "%n" | 1804 | jabber-chat-buffer-format "%n" |
@@ -1764,7 +1807,7 @@ | |||
1764 | jabber-muc-decorate-presence-patterns | 1807 | jabber-muc-decorate-presence-patterns |
1765 | '(("\\( enters the room ([^)]+)\\| has left the chatroom\\)$") | 1808 | '(("\\( enters the room ([^)]+)\\| has left the chatroom\\)$") |
1766 | ("." . jabber-muc-presence-dim)) | 1809 | ("." . jabber-muc-presence-dim)) |
1767 | jabber-muc-colorize-foreign t | 1810 | jabber-muc-colorize-foreign nil ; colorizing doesn't match my color theme |
1768 | jabber-chat-foreign-prompt-format (concat +jabber-pre-prompt | 1811 | jabber-chat-foreign-prompt-format (concat +jabber-pre-prompt |
1769 | "[%t] %n\n" | 1812 | "[%t] %n\n" |
1770 | (make-string +jabber-ws-prefix | 1813 | (make-string +jabber-ws-prefix |
@@ -1798,7 +1841,6 @@ | |||
1798 | jabber-console-mode)) | 1841 | jabber-console-mode)) |
1799 | (let ((hook (intern (format "%s-hook" mode)))) | 1842 | (let ((hook (intern (format "%s-hook" mode)))) |
1800 | (add-hook hook #'visual-fill-column-mode))) | 1843 | (add-hook hook #'visual-fill-column-mode))) |
1801 | (add-hook 'jabber-activity-mode-hook #'tracking-mode) | ||
1802 | (with-eval-after-load 'tracking | 1844 | (with-eval-after-load 'tracking |
1803 | (add-to-list 'tracking-ignored-buffers "discuss@conference.soprani.ca")) | 1845 | (add-to-list 'tracking-ignored-buffers "discuss@conference.soprani.ca")) |
1804 | (:with-mode jabber-chat-mode | 1846 | (:with-mode jabber-chat-mode |
@@ -1893,6 +1935,7 @@ | |||
1893 | 1935 | ||
1894 | (setup (:straight mastodon) | 1936 | (setup (:straight mastodon) |
1895 | (:option mastodon-instance-url "https://tiny.tilde.website" | 1937 | (:option mastodon-instance-url "https://tiny.tilde.website" |
1938 | mastodon-active-user "acdw" | ||
1896 | mastodon-client--token-file (.etc "mastodon.plstore") | 1939 | mastodon-client--token-file (.etc "mastodon.plstore") |
1897 | mastodon-auth-source-file (seq-some (lambda (i) | 1940 | mastodon-auth-source-file (seq-some (lambda (i) |
1898 | (when (and (stringp i) | 1941 | (when (and (stringp i) |
@@ -2021,7 +2064,7 @@ | |||
2021 | (:option completion-styles '(substring orderless basic) | 2064 | (:option completion-styles '(substring orderless basic) |
2022 | completion-category-defaults nil | 2065 | completion-category-defaults nil |
2023 | completion-category-overrides | 2066 | completion-category-overrides |
2024 | '((file (styles partial-completion)) | 2067 | '((file (styles basic partial-completion)) |
2025 | (command (styles +orderless-with-initialism)) | 2068 | (command (styles +orderless-with-initialism)) |
2026 | (variable (styles +orderless-with-initialism)) | 2069 | (variable (styles +orderless-with-initialism)) |
2027 | (symbol (styles +orderless-with-initialism))) | 2070 | (symbol (styles +orderless-with-initialism))) |
@@ -2061,6 +2104,7 @@ | |||
2061 | (local-set-key (kbd "C-c M-o") 'org-mime-org-buffer-htmlize)))) | 2104 | (local-set-key (kbd "C-c M-o") 'org-mime-org-buffer-htmlize)))) |
2062 | 2105 | ||
2063 | (setup (:straight org-modern) | 2106 | (setup (:straight org-modern) |
2107 | (:quit "I think I can do most of this myself.") | ||
2064 | (:option org-modern-hide-stars nil | 2108 | (:option org-modern-hide-stars nil |
2065 | org-modern-star nil | 2109 | org-modern-star nil |
2066 | org-modern-list nil | 2110 | org-modern-list nil |
@@ -2086,7 +2130,9 @@ | |||
2086 | (org-visibility-enable-hooks)) | 2130 | (org-visibility-enable-hooks)) |
2087 | 2131 | ||
2088 | (setup (:straight orglink) | 2132 | (setup (:straight orglink) |
2089 | (global-orglink-mode +1)) | 2133 | (:option orglink-activate-in-modes '(text-mode prog-mode)) |
2134 | (global-orglink-mode +1) | ||
2135 | (global-goto-address-mode -1)) | ||
2090 | 2136 | ||
2091 | (setup (:straight package-lint)) | 2137 | (setup (:straight package-lint)) |
2092 | 2138 | ||
@@ -2216,6 +2262,8 @@ | |||
2216 | (:also-load +slack) | 2262 | (:also-load +slack) |
2217 | (:option slack-prefer-current-team t | 2263 | (:option slack-prefer-current-team t |
2218 | slack-buffer-emojify t | 2264 | slack-buffer-emojify t |
2265 | slack-thread-also-send-to-room nil | ||
2266 | slack-typing-visibility 'buffer | ||
2219 | slack-buffer-create-on-notify t | 2267 | slack-buffer-create-on-notify t |
2220 | slack-enable-wysiwyg t | 2268 | slack-enable-wysiwyg t |
2221 | slack-file-dir (xdg-user-dir "DOWNLOAD") | 2269 | slack-file-dir (xdg-user-dir "DOWNLOAD") |
@@ -2249,7 +2297,8 @@ | |||
2249 | (sophomore-enable #'narrow-to-region) | 2297 | (sophomore-enable #'narrow-to-region) |
2250 | (sophomore-disable ; These are mostly annoying commands | 2298 | (sophomore-disable ; These are mostly annoying commands |
2251 | #'view-hello-file | 2299 | #'view-hello-file |
2252 | #'describe-gnu-project) | 2300 | #'describe-gnu-project |
2301 | #'suspend-frame) | ||
2253 | (sophomore-mode +1)) | 2302 | (sophomore-mode +1)) |
2254 | 2303 | ||
2255 | (setup (:straight ssh-config-mode) | 2304 | (setup (:straight ssh-config-mode) |
@@ -2263,7 +2312,7 @@ | |||
2263 | (setup (:straight super-save) | 2312 | (setup (:straight super-save) |
2264 | (:option auto-save-default nil | 2313 | (:option auto-save-default nil |
2265 | super-save-auto-save-when-idle t | 2314 | super-save-auto-save-when-idle t |
2266 | super-save-idle-duration 60 | 2315 | super-save-idle-duration 30 |
2267 | super-save-exclude '(".gpg") | 2316 | super-save-exclude '(".gpg") |
2268 | super-save-remote-files nil) | 2317 | super-save-remote-files nil) |
2269 | (auto-save-visited-mode -1) | 2318 | (auto-save-visited-mode -1) |