summary refs log tree commit diff stats
path: root/init.el
diff options
context:
space:
mode:
authorCase Duckworth2022-04-20 10:44:51 -0500
committerCase Duckworth2022-04-20 10:44:51 -0500
commit28d11fd0e8db7fb7456ebd285174822b2056e645 (patch)
tree796fd191a1d084918ac7053ef7a8d909b00985e9 /init.el
parentDon't indicate buffer boundaries (diff)
downloademacs-28d11fd0e8db7fb7456ebd285174822b2056e645.tar.gz
emacs-28d11fd0e8db7fb7456ebd285174822b2056e645.zip
bleh
Diffstat (limited to 'init.el')
-rw-r--r--init.el182
1 files changed, 123 insertions, 59 deletions
diff --git a/init.el b/init.el index f6ed814..0653796 100644 --- a/init.el +++ b/init.el
@@ -45,9 +45,15 @@
45 ;; "C-x t" #'beginning-of-buffer 45 ;; "C-x t" #'beginning-of-buffer
46 ;; "C-x e" #'end-of-buffer 46 ;; "C-x e" #'end-of-buffer
47 ) 47 )
48 ;; C-h deletes backward - see https://idiomdrottning.org/bad-emacs-defaults 48 ;; ;; C-h deletes backward - see https://idiomdrottning.org/bad-emacs-defaults
49 (global-set-key (kbd "C-h") 'delete-backward-char) 49 (global-set-key (kbd "C-h") 'delete-backward-char)
50 (keyboard-translate ?\C-h ?\C-?) 50 (keyboard-translate ?\C-h ?\C-?)
51 ;; Faces
52 (dolist (face '(line-number
53 line-number-major-tick
54 line-number-minor-tick
55 line-number-current-line))
56 (:face face '((t (:inherit fixed-pitch)))))
51 ;; Hooks 57 ;; Hooks
52 (add-hook 'prog-mode-hook #'turn-on-auto-fill) 58 (add-hook 'prog-mode-hook #'turn-on-auto-fill)
53 (add-hook 'prog-mode-hook #'font-lock-todo-insinuate) 59 (add-hook 'prog-mode-hook #'font-lock-todo-insinuate)
@@ -72,6 +78,9 @@
72 (:local-set truncate-lines t))) 78 (:local-set truncate-lines t)))
73 79
74(setup (:require autoinsert) 80(setup (:require autoinsert)
81 (auto-insert-mode +1))
82
83(setup (:require autoinsert)
75 (setf (alist-get "\\.scm" auto-insert-alist nil nil #'equal) 84 (setf (alist-get "\\.scm" auto-insert-alist nil nil #'equal)
76 '(insert "#!/bin/sh\n#| -*- scheme -*-\nexec csi -s $0 \"$@\"\n|#\n")) 85 '(insert "#!/bin/sh\n#| -*- scheme -*-\nexec csi -s $0 \"$@\"\n|#\n"))
77;; (auto-insert-mode +1) 86;; (auto-insert-mode +1)
@@ -91,7 +100,8 @@
91 (dolist (var '(safe-local-variable-values 100 (dolist (var '(safe-local-variable-values
92 warning-suppress-types)) 101 warning-suppress-types))
93 (add-to-list '+custom-variable-allowlist var)) 102 (add-to-list '+custom-variable-allowlist var))
94 (+custom-load-ignoring-most-customizations) 103 (+ensure-after-init
104 (+custom-load-ignoring-most-customizations))
95 (advice-add #'custom-buffer-create-internal :after #'+cus-edit-expand-widgets) 105 (advice-add #'custom-buffer-create-internal :after #'+cus-edit-expand-widgets)
96 (:with-mode Custom-mode 106 (:with-mode Custom-mode
97 (:local-set imenu-generic-expression +cus-edit-imenu-generic-expression))) 107 (:local-set imenu-generic-expression +cus-edit-imenu-generic-expression)))
@@ -107,7 +117,7 @@
107 pulse-delay 0.5 117 pulse-delay 0.5
108 pulse-iterations 1) 118 pulse-iterations 1)
109 (dolist (command '(+ace-window-or-switch-buffer 119 (dolist (command '(+ace-window-or-switch-buffer
110 pop-mark pop-globl-mark)) 120 pop-mark pop-global-mark))
111 (add-to-list '+pulse-location-commands command)) 121 (add-to-list '+pulse-location-commands command))
112 (+ensure-after-init #'+pulse-location-mode)) 122 (+ensure-after-init #'+pulse-location-mode))
113 123
@@ -125,9 +135,9 @@
125(setup +key 135(setup +key
126 (+ensure-after-init #'+key-global-mode)) 136 (+ensure-after-init #'+key-global-mode))
127 137
128;;(setup _work 138(setup _work
129;; (+with-ensure-after-init 139 (+with-ensure-after-init
130;; (require '_work))) 140 (require '_work)))
131 141
132(setup abbrev 142(setup abbrev
133 (:option abbrev-file-name (sync/ "abbrev.el") 143 (:option abbrev-file-name (sync/ "abbrev.el")
@@ -485,7 +495,7 @@
485 495
486(setup notmuch 496(setup notmuch
487 (:load-from "~/usr/share/emacs/site-lisp/") 497 (:load-from "~/usr/share/emacs/site-lisp/")
488 (:load-after org-contacts) 498 (:load-after bbdb)
489 (:also-load +notmuch +message) 499 (:also-load +notmuch +message)
490 (+define-dir notmuch/ (sync/ "emacs/notmuch") 500 (+define-dir notmuch/ (sync/ "emacs/notmuch")
491 "Notmuch configuration and data.") 501 "Notmuch configuration and data.")
@@ -529,7 +539,9 @@
529 (list :name "drafts" :query "tag:draft" :key "d") 539 (list :name "drafts" :query "tag:draft" :key "d")
530 (list :name "all mail" :query "*" :key "a")))) 540 (list :name "all mail" :query "*" :key "a"))))
531 (:+leader "m" #'+notmuch-goto "C-m" #'+notmuch-goto 541 (:+leader "m" #'+notmuch-goto "C-m" #'+notmuch-goto
532 "n" #'notmuch "C-n" #'notmuch)) 542 "n" #'notmuch "C-n" #'notmuch)
543 ;; For `focus'
544 (put 'notmuch-message 'bounds-of-thing-at-point 'notmuch-show-message-extent))
533 545
534(setup org 546(setup org
535 ;; Plain org with the `setup' form for sorting, but I install with straight. 547 ;; Plain org with the `setup' form for sorting, but I install with straight.
@@ -552,6 +564,7 @@
552 load-path)) 564 load-path))
553 (:also-load +org) 565 (:also-load +org)
554 (:option org-adapt-indentation nil 566 (:option org-adapt-indentation nil
567 org-auto-align-tags t
555 org-archive-mark-done t 568 org-archive-mark-done t
556 org-catch-invisible-edits 'show-and-error 569 org-catch-invisible-edits 'show-and-error
557 org-clock-clocked-in-display 'mode-line 570 org-clock-clocked-in-display 'mode-line
@@ -575,6 +588,7 @@
575 org-imenu-depth 3 588 org-imenu-depth 3
576 org-indent-indentation-per-level 0 589 org-indent-indentation-per-level 0
577 org-indent-mode-turns-on-hiding-stars nil 590 org-indent-mode-turns-on-hiding-stars nil
591 org-insert-heading-respect-content t
578 org-list-demote-modify-bullet '(("-" . "+") 592 org-list-demote-modify-bullet '(("-" . "+")
579 ("+" . "-")) 593 ("+" . "-"))
580 org-log-done 'time 594 org-log-done 'time
@@ -595,7 +609,7 @@
595 org-src-window-setup 'current-window 609 org-src-window-setup 'current-window
596 org-startup-truncated nil 610 org-startup-truncated nil
597 org-startup-with-inline-images t 611 org-startup-with-inline-images t
598 org-tags-column (- (- fill-column (length org-ellipsis))) 612 org-tags-column 1 ;; (- (- fill-column (length org-ellipsis)))
599 org-todo-keywords '((sequence "TODO(t)" "WAIT(w@/!)" "ONGOING(o@)" 613 org-todo-keywords '((sequence "TODO(t)" "WAIT(w@/!)" "ONGOING(o@)"
600 "|" "DONE(d!)") 614 "|" "DONE(d!)")
601 (sequence "|" "CANCELED(k@)") 615 (sequence "|" "CANCELED(k@)")
@@ -621,13 +635,25 @@
621 "C-c l" #'org-store-link) 635 "C-c l" #'org-store-link)
622 (:hook #'variable-pitch-mode 636 (:hook #'variable-pitch-mode
623 #'turn-off-auto-fill 637 #'turn-off-auto-fill
624 #'org-indent-mode) 638 #'org-indent-mode
639 #'prettify-symbols-mode
640 ;; TODO: This is only the beginning of a larger idea: I really want the
641 ;; "buffer stats" section of the mode-line to change depending on the
642 ;; mode. So like, org-mode would be a word count (maybe other text
643 ;; modes?), lui-modes could be .... something? etc.
644 (defun turn-off-column-number-mode () (setq-local column-number-mode nil)))
645 (:local-set prettify-symbols-alist '(("DEADLINE:" . ?⏰)
646 ("SCHEDULED:" . ?📅)
647 ("CLOSED:" ?✅))
648 ;;+modeline-position-function #'+org-count-words-stupidly
649 )
625 (:local-hook user-save-hook #'+org-before-save@prettify-buffer) 650 (:local-hook user-save-hook #'+org-before-save@prettify-buffer)
626 (advice-add #'org-delete-backward-char :override #'+org-delete-backward-char) 651 (advice-add #'org-delete-backward-char :override #'+org-delete-backward-char)
627 ;; (define-advice org-open-at-point (:around (fn &rest r) open-external) 652 ;; (define-advice org-open-at-point (:around (fn &rest r) open-external)
628 ;; "Open links from org externally." 653 ;; "Open links from org externally."
629 ;; (let ((browse-url-browser-function browse-url-secondary-browser-function)) 654 ;; (let ((browse-url-browser-function browse-url-secondary-browser-function))
630 ;; (apply fn r))) 655 ;; (apply fn r)))
656 ;; (add-to-list '+custom-variable-allowlist 'org-agenda-files)
631 (with-eval-after-load 'org 657 (with-eval-after-load 'org
632 (setf (alist-get "\\.x?html?\\'" org-file-apps nil nil #'equal) 658 (setf (alist-get "\\.x?html?\\'" org-file-apps nil nil #'equal)
633 #'+org-open-html) 659 #'+org-open-html)
@@ -653,11 +679,10 @@
653 (0 ;; (progn (compose-region (match-beginning 1) (match-end 1) "→") 'fixed-pitch) 679 (0 ;; (progn (compose-region (match-beginning 1) (match-end 1) "→") 'fixed-pitch)
654 'fixed-pitch t)) 680 'fixed-pitch t))
655 ;; Fancy numbered lists (well, monospaced) 681 ;; Fancy numbered lists (well, monospaced)
656 ("^[ \t]*\\(\\(?:[0-9]+\\|[A-Za-z]\\)[.)]\\) " 0 'fixed-pitch t))) 682 ("^[ \t]*\\(\\(?:[0-9]+\\|[A-Za-z]\\)[.)]\\) " 0 'fixed-pitch t)
657 ;; Make nobreak-space fixed-pitch as well, for better alignment (is this the 683 ;; Make leading org-heading stars fixed-pitch
658 ;; best way to do this? probably not!) 684 ("^\*+ " 0 'fixed-pitch t)
659 (:face org-indent ((t (:inherit (fixed-pitch)))) 685 ))
660 nobreak-space ((t (:inherit (fixed-pitch)))))
661 (with-eval-after-load 'form-feed 686 (with-eval-after-load 'form-feed
662 ;; Horizontal lines 687 ;; Horizontal lines
663 (font-lock-add-keywords 688 (font-lock-add-keywords
@@ -672,6 +697,13 @@
672 (:option org-agenda-skip-deadline-if-done t 697 (:option org-agenda-skip-deadline-if-done t
673 org-agenda-skip-scheduled-if-done t 698 org-agenda-skip-scheduled-if-done t
674 org-agenda-span 10 699 org-agenda-span 10
700 org-agenda-block-separator ?─
701 org-agenda-time-grid
702 '((daily today require-timed)
703 (800 1000 1200 1400 1600 1800 2000)
704 " ┄┄┄┄┄ " "┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄")
705 org-agenda-current-time-string
706 "← now ─────────────────────────────────────────────────"
675 org-agenda-include-diary nil ; I use the org-diary features 707 org-agenda-include-diary nil ; I use the org-diary features
676 org-agenda-todo-ignore-deadlines 'near 708 org-agenda-todo-ignore-deadlines 'near
677 org-agenda-todo-ignore-scheduled 'future 709 org-agenda-todo-ignore-scheduled 'future
@@ -679,12 +711,12 @@
679 org-deadline-warning-days 0 711 org-deadline-warning-days 0
680 org-agenda-show-future-repeats 'next 712 org-agenda-show-future-repeats 'next
681 org-agenda-window-setup 'current-window) 713 org-agenda-window-setup 'current-window)
714 (unless after-init-time
715 (:option org-agenda-files (list (sync/ "org/"))))
682 (dolist (var '(org-agenda-files 716 (dolist (var '(org-agenda-files
683 org-agenda-file-regexp 717 org-agenda-file-regexp
684 org-agenda-templates)) 718 org-agenda-templates))
685 (add-to-list '+custom-variable-allowlist var)) 719 (add-to-list '+custom-variable-allowlist var))
686 (with-eval-after-load 'org
687 (add-to-list 'org-agenda-files (sync/ "org/" t)))
688 (:+leader "a" #'org-agenda "C-a" #'org-agenda) 720 (:+leader "a" #'org-agenda "C-a" #'org-agenda)
689 (:hook #'hl-line-mode) 721 (:hook #'hl-line-mode)
690 (add-hook 'org-agenda-after-show-hook 'org-narrow-to-subtree)) 722 (add-hook 'org-agenda-after-show-hook 'org-narrow-to-subtree))
@@ -770,6 +802,9 @@
770 (:option password-cache t 802 (:option password-cache t
771 password-cache-expiry (* 60 60))) 803 password-cache-expiry (* 60 60)))
772 804
805(setup prettify-symbols-mode
806 (:option prettify-symbols-unprettify-at-point t))
807
773(setup prog 808(setup prog
774 (:local-set comment-auto-fill-only-comments t) 809 (:local-set comment-auto-fill-only-comments t)
775 (:hook #'prettify-symbols-mode)) 810 (:hook #'prettify-symbols-mode))
@@ -815,7 +850,7 @@
815 tab-bar-format-tabs 850 tab-bar-format-tabs
816 tab-bar-separator 851 tab-bar-separator
817 tab-bar-format-add-tab 852 tab-bar-format-add-tab
818 tab-bar-format-align-right 853 +tab-bar-format-align-right
819 ;;+tab-bar-misc-info 854 ;;+tab-bar-misc-info
820 +tab-bar-org-clock 855 +tab-bar-org-clock
821 +tab-bar-bongo 856 +tab-bar-bongo
@@ -852,9 +887,10 @@ They are completed by \"M-x TAB\" only in Tramp debug buffers."
852 (:require +ace-window) 887 (:require +ace-window)
853 (:option aw-keys '(?a ?s ?d ?f ?g ?h ?j ?k ?l) 888 (:option aw-keys '(?a ?s ?d ?f ?g ?h ?j ?k ?l)
854 aw-display-mode-overlay nil 889 aw-display-mode-overlay nil
855 aw-scope 'frame) 890 aw-scope 'frame
891 aw-minibuffer-flag t)
856 (:+key "M-o" #'+ace-window-or-switch-buffer) 892 (:+key "M-o" #'+ace-window-or-switch-buffer)
857 (:face aw-mode-line-face ((t (:foreground "red")))) 893 (:face 'aw-mode-line-face '((t (:foreground "red"))))
858 (+ace-window-display-mode +1)) 894 (+ace-window-display-mode +1))
859 895
860(setup (:straight (actually-selected-window 896(setup (:straight (actually-selected-window
@@ -902,8 +938,8 @@ They are completed by \"M-x TAB\" only in Tramp debug buffers."
902 '(avy-lead-face 938 '(avy-lead-face
903 avy-lead-face-1 avy-lead-face-1 avy-lead-face-1 939 avy-lead-face-1 avy-lead-face-1 avy-lead-face-1
904 avy-lead-face-1 avy-lead-face-1 avy-lead-face-1)) 940 avy-lead-face-1 avy-lead-face-1 avy-lead-face-1))
905 (:face avy-background-face 941 (:face 'avy-background-face
906 ((t (:foreground "#888888")))) 942 '((t (:foreground "#888888"))))
907 (:+key "M-j" #'avy-goto-char-timer) 943 (:+key "M-j" #'avy-goto-char-timer)
908 (:bind-into isearch 944 (:bind-into isearch
909 "M-j" #'avy-isearch) 945 "M-j" #'avy-isearch)
@@ -1126,11 +1162,11 @@ They are completed by \"M-x TAB\" only in Tramp debug buffers."
1126 (0x0-upload-text (0x0--choose-server))) 1162 (0x0-upload-text (0x0--choose-server)))
1127 (current-kill 0))) 1163 (current-kill 0)))
1128 (add-to-list '+pulse-location-commands #'lui-track-jump-to-indicator) 1164 (add-to-list '+pulse-location-commands #'lui-track-jump-to-indicator)
1129 (:face lui-track-bar ((t (:height 10 1165 (:face 'lui-track-bar '((t ( :height 10
1130 :underline (:color foreground-color 1166 :underline ( :color foreground-color
1131 :style line 1167 :style line
1132 :position line) 1168 :position line)
1133 :extend t :inhert (default))))) 1169 :extend t :inhert (default)))))
1134 (:hook #'visual-line-mode 1170 (:hook #'visual-line-mode
1135 #'enable-lui-track 1171 #'enable-lui-track
1136 #'visual-fill-column-mode 1172 #'visual-fill-column-mode
@@ -1305,9 +1341,9 @@ They are completed by \"M-x TAB\" only in Tramp debug buffers."
1305 (:hook #'turn-off-+key-mode) 1341 (:hook #'turn-off-+key-mode)
1306 (:option crossword-save-path (sync/ "emacs/crosswords/" t) 1342 (:option crossword-save-path (sync/ "emacs/crosswords/" t)
1307 crossword-empty-position-char "=") 1343 crossword-empty-position-char "=")
1308 (:face crossword-grid-face ((t :inherit 'font-lock-string-face)) 1344 (:face 'crossword-grid-face '((t :inherit 'font-lock-string-face))
1309 crossword-current-face ((t :inherit 'highlight)) 1345 'crossword-current-face '((t :inherit 'highlight))
1310 crossword-other-dir-face ((t :inherit 'font-lock-keyword-face)))) 1346 'crossword-other-dir-face '((t :inherit 'font-lock-keyword-face))))
1311 1347
1312(setup (:straight crux) 1348(setup (:straight crux)
1313 ;; yes it's silly I have an addon to this addon. 1349 ;; yes it's silly I have an addon to this addon.
@@ -1531,7 +1567,7 @@ See also `crux-reopen-as-root-mode'."
1531(setup (:straight (filldent 1567(setup (:straight (filldent
1532 :host github 1568 :host github
1533 :repo "duckwork/filldent.el")) 1569 :repo "duckwork/filldent.el"))
1534 (:+key "M-q" #'filldent-dwim)) 1570 (:+key "M-q" #'filldent-unfill-toggle))
1535 1571
1536(setup (:straight (flymake-collection 1572(setup (:straight (flymake-collection
1537 :host github 1573 :host github
@@ -1550,6 +1586,21 @@ See also `crux-reopen-as-root-mode'."
1550 (with-eval-after-load 'vertico-multiform 1586 (with-eval-after-load 'vertico-multiform
1551 (setf (alist-get 'flyspell vertico-multiform-categories) nil))) 1587 (setf (alist-get 'flyspell vertico-multiform-categories) nil)))
1552 1588
1589(setup (:straight focus)
1590 (:require)
1591 (add-hook 'modus-themes-after-load-theme-hook
1592 (defun focus-update@after-modus-load ()
1593 (modus-themes-with-colors
1594 (:face 'focus-unfocused `((t ( :foreground ,fg-inactive
1595 :background ,bg-inactive
1596 :weight normal
1597 :slant normal
1598 :extend t)))))))
1599 ;; XXX: This doesn't work, because notmuch overlays shit on the buffer
1600 (setf (alist-get 'notmuch-show-mode focus-mode-to-thing)
1601 'notmuch-message)
1602 (:hook-into notmuch-show-mode))
1603
1553(setup (:straight-when (forge 1604(setup (:straight-when (forge
1554 :host github :repo "magit/forge") 1605 :host github :repo "magit/forge")
1555 (eq system-type 'gnu/linux)) 1606 (eq system-type 'gnu/linux))
@@ -1582,7 +1633,9 @@ See also `crux-reopen-as-root-mode'."
1582 scheme-complete) 1633 scheme-complete)
1583 (:require +chicken) 1634 (:require +chicken)
1584 (setf (alist-get "\\.scm\\'" auto-mode-alist nil nil #'string=) 1635 (setf (alist-get "\\.scm\\'" auto-mode-alist nil nil #'string=)
1585 'scheme-mode)) 1636 'scheme-mode)
1637 (setf (alist-get "\\.scm\\'" auto-mode-alist nil nil #'string=)
1638 '(insert "#!/bin/sh\n#| -*- scheme -*-\nexec csi -s $0 \"$@\"\n|#\n")))
1586 1639
1587(setup (:straight (git-modes 1640(setup (:straight (git-modes
1588 :host github :repo "magit/git-modes")) 1641 :host github :repo "magit/git-modes"))
@@ -1674,9 +1727,9 @@ See also `crux-reopen-as-root-mode'."
1674 :host nil))) 1727 :host nil)))
1675 (:also-load +jabber) 1728 (:also-load +jabber)
1676 (:option jabber-account-list '(("acdw@hmm.st")) 1729 (:option jabber-account-list '(("acdw@hmm.st"))
1677 jabber-groupchat-buffer-format "xmpp:%n" 1730 jabber-groupchat-buffer-format "X:%n"
1678 jabber-chat-buffer-format "xmpp:%n" 1731 jabber-chat-buffer-format "X:%n"
1679 jabber-muc-private-buffer-format "xmpp:%n(%g)" 1732 jabber-muc-private-buffer-format "X:%n(%g)"
1680 jabber-activity-show-p #'ignore 1733 jabber-activity-show-p #'ignore
1681 jabber-muc-decorate-presence-patterns 1734 jabber-muc-decorate-presence-patterns
1682 '(("\\( enters the room ([^)]+)\\| has left the chatroom\\)$") 1735 '(("\\( enters the room ([^)]+)\\| has left the chatroom\\)$")
@@ -1804,7 +1857,7 @@ See also `crux-reopen-as-root-mode'."
1804 :fork (:host github :repo "duckwork/mode-line-bell" 1857 :fork (:host github :repo "duckwork/mode-line-bell"
1805 :branch "remap-face"))) 1858 :branch "remap-face")))
1806 ;; This is still, annoyingly, not quite working right. 1859 ;; This is still, annoyingly, not quite working right.
1807 (:face mode-line-bell ((t (:inherit mode-line-highlight)))) 1860 (:face 'mode-line-bell '((t (:inherit mode-line-highlight))))
1808 (:option mode-line-bell-flash-time 0.1) 1861 (:option mode-line-bell-flash-time 0.1)
1809 (mode-line-bell-mode +1)) 1862 (mode-line-bell-mode +1))
1810 1863
@@ -1812,11 +1865,10 @@ See also `crux-reopen-as-root-mode'."
1812 :host gitlab 1865 :host gitlab
1813 :repo "protesilaos/modus-themes")) 1866 :repo "protesilaos/modus-themes"))
1814 (require 'modus-themes (.etc "straight/build/modus-themes/modus-themes")) 1867 (require 'modus-themes (.etc "straight/build/modus-themes/modus-themes"))
1815 (:also-load dawn)
1816 (:option modus-themes-mixed-fonts t 1868 (:option modus-themes-mixed-fonts t
1817 modus-themes-bold-constructs t 1869 modus-themes-bold-constructs t
1818 modus-themes-italic-constructs t 1870 modus-themes-italic-constructs t
1819 modus-themes-headings '((t . (background regular rainbow)))) 1871 modus-themes-headings '((t t)))
1820 (dotimes (facen-1 8) 1872 (dotimes (facen-1 8)
1821 (let ((facen (1+ facen-1))) 1873 (let ((facen (1+ facen-1)))
1822 (custom-set-faces 1874 (custom-set-faces
@@ -1825,9 +1877,16 @@ See also `crux-reopen-as-root-mode'."
1825 (,(intern (format "modus-themes-heading-%s" facen)) 1877 (,(intern (format "modus-themes-heading-%s" facen))
1826 fixed-pitch)) 1878 fixed-pitch))
1827 :now))))) 1879 :now)))))
1828 (:face modus-themes-tab-active ((t :bold nil)) 1880 (:face 'modus-themes-tab-active '((t :bold nil))
1829 modus-themes-tab-inactive ((t :italic t))) 1881 'modus-themes-tab-inactive '((t :italic t)))
1830 1882
1883 ;; Fix a "nil is not a Modus theme" error
1884 ;; XXX: Need to register a bug report
1885 (define-advice modus-themes--current-theme (:around (fn &rest r))
1886 (or (apply fn r)
1887 'modus-operandi))
1888
1889 ;; This needs to be after the themes are loaded, I think.
1831 (add-hook 'modus-themes-after-load-theme-hook 1890 (add-hook 'modus-themes-after-load-theme-hook
1832 (defun +modus-themes-mostly-monochrome () 1891 (defun +modus-themes-mostly-monochrome ()
1833 "Set up mdous-themes to be mostly monochrome." 1892 "Set up mdous-themes to be mostly monochrome."
@@ -1861,6 +1920,7 @@ See also `crux-reopen-as-root-mode'."
1861 :foreground ,fg-header 1920 :foreground ,fg-header
1862 :background ,yellow-intense-bg))))))) 1921 :background ,yellow-intense-bg)))))))
1863 1922
1923 (require 'dawn)
1864 (dawn-schedule #'modus-themes-load-operandi 1924 (dawn-schedule #'modus-themes-load-operandi
1865 #'modus-themes-load-vivendi)) 1925 #'modus-themes-load-vivendi))
1866 1926
@@ -1930,9 +1990,19 @@ See also `crux-reopen-as-root-mode'."
1930 (defun org-mime-setup@org-mode () 1990 (defun org-mime-setup@org-mode ()
1931 (local-set-key (kbd "C-c M-o") 'org-mime-org-buffer-htmlize)))) 1991 (local-set-key (kbd "C-c M-o") 'org-mime-org-buffer-htmlize))))
1932 1992
1933(setup (:straight org-sticky-header) 1993(setup (:straight org-modern)
1934 ;; (:hook-into org-mode) 1994 (:option org-modern-hide-stars nil
1935 ) 1995 org-modern-star nil
1996 org-modern-list nil)
1997 (:face 'org-modern-label '((t ( :height 1.0
1998 :weight regular
1999 :underline nil
2000 :inherit fixed-pitch))))
2001 (advice-add 'org-modern--update-label-face :override #'ignore)
2002 (:hook-into org-mode))
2003
2004(setup (:straight org-sticky-header) (:quit)
2005 (:hook-into org-mode))
1936 2006
1937(setup (:straight (org-taskwise 2007(setup (:straight (org-taskwise
1938 :host github 2008 :host github
@@ -2018,6 +2088,8 @@ See also `crux-reopen-as-root-mode'."
2018(setup (:straight rainbow-mode) 2088(setup (:straight rainbow-mode)
2019 (:hook-into prog-mode)) 2089 (:hook-into prog-mode))
2020 2090
2091(setup (:straight restart-emacs))
2092
2021(setup (:straight (shell-command+ 2093(setup (:straight (shell-command+
2022 :host nil 2094 :host nil
2023 :repo "https://git.sr.ht/~pkal/shell-command-plus")) 2095 :repo "https://git.sr.ht/~pkal/shell-command-plus"))
@@ -2037,14 +2109,10 @@ See also `crux-reopen-as-root-mode'."
2037 (readonly . "=") 2109 (readonly . "=")
2038 (modified . "+") 2110 (modified . "+")
2039 (t . "-")) 2111 (t . "-"))
2040 ;; '((ephemeral . "🥞")
2041 ;; (special . "🥐")
2042 ;; (readonly . "🦞")
2043 ;; (modified . "🥪")
2044 ;; (t . "🍞"))
2045
2046 +modeline-minions-icon ";" 2112 +modeline-minions-icon ";"
2047 simple-modeline-segments 2113 +modeline-buffer-name-max-length 0.35)
2114 ;; Segments
2115 (:option simple-modeline-segments
2048 `(( ; left 2116 `(( ; left
2049 +modeline-ace-window-display 2117 +modeline-ace-window-display
2050 +modeline-modified 2118 +modeline-modified
@@ -2070,10 +2138,7 @@ See also `crux-reopen-as-root-mode'."
2070 +modeline-narrowed) 2138 +modeline-narrowed)
2071 ",") 2139 ",")
2072 +modeline-input-method 2140 +modeline-input-method
2073 ,(+modeline-concat 2141 +modeline-position
2074 '(+modeline-region
2075 +modeline-line-column
2076 +modeline-file-percentage))
2077 ))) 2142 )))
2078 (simple-modeline-mode +1)) 2143 (simple-modeline-mode +1))
2079 2144
@@ -2201,10 +2266,7 @@ See also `crux-reopen-as-root-mode'."
2201 (:require) 2266 (:require)
2202 (:hook-into text-mode prog-mode)) 2267 (:hook-into text-mode prog-mode))
2203 2268
2204(setup (:straight unfill)) 2269(setup (:straight unfill)) ;; XXX: Is this necessary with changes to filldent?
2205
2206(setup (:straight valign)
2207 (:hook-into org-mode))
2208 2270
2209(setup (:straight valign) (:quit "Doesn't work with narrowed tables.") 2271(setup (:straight valign) (:quit "Doesn't work with narrowed tables.")
2210 (:option valign-fancy-bar t) 2272 (:option valign-fancy-bar t)
@@ -2325,7 +2387,9 @@ See also `crux-reopen-as-root-mode'."
2325 "https://invidious.snopyta.org")) 2387 "https://invidious.snopyta.org"))
2326 (:bind "y" #'+ytdious-watch)) 2388 (:bind "y" #'+ytdious-watch))
2327 2389
2328(setup (:straight zoom-frm)) 2390(setup (:straight zoom-frm)
2391 (:+key "M-+" #'zoom-frm-in
2392 "M-_" #'zoom-frm-out))
2329 2393
2330(setup (:straight zzz-to-char) 2394(setup (:straight zzz-to-char)
2331 (:require +zzz-to-char) 2395 (:require +zzz-to-char)