about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorCase Duckworth2022-04-19 22:27:03 -0500
committerCase Duckworth2022-04-19 22:27:03 -0500
commit5782c55e52899513f4244ec9a6ba191b3679a5ee (patch)
tree621d6a05893731386862235bbccf10e97d7e2c62
parentCollapse redundancy (diff)
downloademacs-5782c55e52899513f4244ec9a6ba191b3679a5ee.tar.gz
emacs-5782c55e52899513f4244ec9a6ba191b3679a5ee.zip
Enhance :straight setup form
:straight now takes care of :straight-when, :also-straight, and possibly others,
later.
-rw-r--r--init.el99
-rw-r--r--lisp/+setup.el133
2 files changed, 136 insertions, 96 deletions
diff --git a/init.el b/init.el index ddef209..c1a1cd2 100644 --- a/init.el +++ b/init.el
@@ -255,7 +255,7 @@
255 255
256(setup dired 256(setup dired
257 (:also-load dired-x +dired) 257 (:also-load dired-x +dired)
258 (:also-straight dired+) 258 (:straight dired+)
259 (:option dired-recursive-copies 'always 259 (:option dired-recursive-copies 'always
260 dired-recursive-deletes 'always 260 dired-recursive-deletes 'always
261 dired-create-destination-dirs 'always 261 dired-create-destination-dirs 'always
@@ -543,8 +543,8 @@
543 :build (:not autoloads) 543 :build (:not autoloads)
544 :files (:defaults 544 :files (:defaults
545 "lisp/*.el" 545 "lisp/*.el"
546 ("etc/styles/" "etc/styles/*"))) 546 ("etc/styles/" "etc/styles/*"))))
547 (org-contrib 547 (:straight (org-contrib
548 :type git :host nil 548 :type git :host nil
549 :repo "https://git.sr.ht/~bzg/org-contrib")) 549 :repo "https://git.sr.ht/~bzg/org-contrib"))
550 ;; DO NOT load system-installed org !!! 550 ;; DO NOT load system-installed org !!!
@@ -860,7 +860,7 @@ They are completed by \"M-x TAB\" only in Tramp debug buffers."
860 (:with-mode adaptive-wrap-prefix-mode 860 (:with-mode adaptive-wrap-prefix-mode
861 (:hook-into visual-column-mode))) 861 (:hook-into visual-column-mode)))
862 862
863(setup (:straight-when affe 863(setup (:straight affe
864 (or (executable-find "rg") 864 (or (executable-find "rg")
865 (and (executable-find "find") 865 (and (executable-find "find")
866 (executable-find "grep")))) 866 (executable-find "grep"))))
@@ -905,9 +905,9 @@ They are completed by \"M-x TAB\" only in Tramp debug buffers."
905 (setf (alist-get ?. avy-dispatch-alist) #'avy-action-embark))) 905 (setf (alist-get ?. avy-dispatch-alist) #'avy-action-embark)))
906 906
907(setup (:straight bbdb) 907(setup (:straight bbdb)
908 (:straight bbdb-vcard)
908 (:require bbdb-autoloads 909 (:require bbdb-autoloads
909 bbdb) 910 bbdb)
910 (:also-straight bbdb-vcard)
911 (bbdb-initialize 'gnus 'message)) 911 (bbdb-initialize 'gnus 'message))
912 912
913(setup (:straight (bongo :type git 913(setup (:straight (bongo :type git
@@ -1289,7 +1289,8 @@ They are completed by \"M-x TAB\" only in Tramp debug buffers."
1289 (setf (alist-get 'consult-notmuch vertico-multiform-commands) '(buffer) 1289 (setf (alist-get 'consult-notmuch vertico-multiform-commands) '(buffer)
1290 (alist-get 'consult-notmuch-tree vertico-multiform-commands) '(buffer)))) 1290 (alist-get 'consult-notmuch-tree vertico-multiform-commands) '(buffer))))
1291 1291
1292(setup (:straight corfu) (:quit "Turns out, I actually like minibuffer completion better.") 1292(setup (:straight corfu
1293 :quit "Turns out, I actually like minibuffer completion better.")
1293 (+with-ensure-after-init 1294 (+with-ensure-after-init
1294 (corfu-global-mode +1))) 1295 (corfu-global-mode +1)))
1295 1296
@@ -1366,7 +1367,7 @@ See also `crux-reopen-as-root-mode'."
1366(setup (:straight dumb-jump) 1367(setup (:straight dumb-jump)
1367 (add-hook 'xref-backend-functions #'dumb-jump-xref-activate)) 1368 (add-hook 'xref-backend-functions #'dumb-jump-xref-activate))
1368 1369
1369(setup (:straight-when ebuku 1370(setup (:straight ebuku
1370 (executable-find "buku")) 1371 (executable-find "buku"))
1371 (:option ebuku-display-on-startup 'recent 1372 (:option ebuku-display-on-startup 'recent
1372 ebuku-recent-count 100)) 1373 ebuku-recent-count 100))
@@ -1490,12 +1491,13 @@ See also `crux-reopen-as-root-mode'."
1490(setup (:straight eshell-syntax-highlighting) 1491(setup (:straight eshell-syntax-highlighting)
1491 (:hook-into eshell-mode)) 1492 (:hook-into eshell-mode))
1492 1493
1493;; (setup (:straight eshell-vterm) 1494(setup (:straight eshell-vterm
1494;; (:load-after eshell) 1495 :quit)
1495;; (defalias 'eshell/v 'eshell-exec-visual) 1496 (:load-after eshell)
1496;; (eshell-vterm-mode +1)) 1497 (defalias 'eshell/v 'eshell-exec-visual)
1498 (eshell-vterm-mode +1))
1497 1499
1498(setup (:straight-when exec-path-from-shell 1500(setup (:straight exec-path-from-shell
1499 (eq system-type 'gnu/linux)) 1501 (eq system-type 'gnu/linux))
1500 (require 'exec-path-from-shell) 1502 (require 'exec-path-from-shell)
1501 (dolist (var '("SSH_AUTH_SOCK" 1503 (dolist (var '("SSH_AUTH_SOCK"
@@ -1544,8 +1546,8 @@ See also `crux-reopen-as-root-mode'."
1544 (with-eval-after-load 'vertico-multiform 1546 (with-eval-after-load 'vertico-multiform
1545 (setf (alist-get 'flyspell vertico-multiform-categories) nil))) 1547 (setf (alist-get 'flyspell vertico-multiform-categories) nil)))
1546 1548
1547(setup (:straight-when (forge 1549(setup (:straight (forge
1548 :host github :repo "magit/forge") 1550 :host github :repo "magit/forge")
1549 (eq system-type 'gnu/linux)) 1551 (eq system-type 'gnu/linux))
1550 (require 'forge) 1552 (require 'forge)
1551 (add-to-list 'forge-alist 1553 (add-to-list 'forge-alist
@@ -1570,10 +1572,10 @@ See also `crux-reopen-as-root-mode'."
1570 :files ("elisp/*.el" "doc/*" "geiser-pkg.el") 1572 :files ("elisp/*.el" "doc/*" "geiser-pkg.el")
1571 :pre-build ("make" "-Cdoc" "geiser.info") 1573 :pre-build ("make" "-Cdoc" "geiser.info")
1572 :host gitlab 1574 :host gitlab
1573 :repo "emacs-geiser/geiser") 1575 :repo "emacs-geiser/geiser"))
1574 geiser-chicken 1576 (:straight geiser-chicken)
1575 macrostep-geiser 1577 (:straight macrostep-geiser)
1576 scheme-complete) 1578 (:straight scheme-complete)
1577 (:require +chicken) 1579 (:require +chicken)
1578 (setf (alist-get "\\.scm\\'" auto-mode-alist nil nil #'string=) 1580 (setf (alist-get "\\.scm\\'" auto-mode-alist nil nil #'string=)
1579 'scheme-mode)) 1581 'scheme-mode))
@@ -1582,7 +1584,8 @@ See also `crux-reopen-as-root-mode'."
1582 :host github :repo "magit/git-modes")) 1584 :host github :repo "magit/git-modes"))
1583 (:require git-modes)) 1585 (:require git-modes))
1584 1586
1585(setup (:straight god-mode) (:quit "I could never get the hang of this.") 1587(setup (:straight god-mode
1588 :quit "I could never get the hang of this.")
1586 (setq god-mode-enable-function-key-translation nil) 1589 (setq god-mode-enable-function-key-translation nil)
1587 (:require god-mode 1590 (:require god-mode
1588 +god-mode) 1591 +god-mode)
@@ -1631,6 +1634,9 @@ See also `crux-reopen-as-root-mode'."
1631 (paredit-forward-delete arg)))) 1634 (paredit-forward-delete arg))))
1632 (global-hungry-delete-mode +1)) 1635 (global-hungry-delete-mode +1))
1633 1636
1637(setup (:straight i3wm-config-mode
1638 (executable-find "i3")))
1639
1634(setup (:straight info+) 1640(setup (:straight info+)
1635 (:load-after info) 1641 (:load-after info)
1636 (:option Info-fontify-isolated-quote-flag nil 1642 (:option Info-fontify-isolated-quote-flag nil
@@ -1693,7 +1699,7 @@ See also `crux-reopen-as-root-mode'."
1693 :host github :repo "duckwork/keepassxc-shim.el")) 1699 :host github :repo "duckwork/keepassxc-shim.el"))
1694 (keepassxc-shim-activate)) 1700 (keepassxc-shim-activate))
1695 1701
1696(setup (:straight-when keychain-environment 1702(setup (:straight keychain-environment
1697 (executable-find "keychain")) 1703 (executable-find "keychain"))
1698 (keychain-refresh-environment)) 1704 (keychain-refresh-environment))
1699 1705
@@ -1782,7 +1788,8 @@ See also `crux-reopen-as-root-mode'."
1782 #'hl-line-mode 1788 #'hl-line-mode
1783 #'lin-mode)) 1789 #'lin-mode))
1784 1790
1785(setup (:straight md4rd) (:quit "Janky a.f.") 1791(setup (:straight md4rd
1792 :quit)
1786 ;; `md4rd' is ... a bit janky, tbh. But I'm including this here so I have it. 1793 ;; `md4rd' is ... a bit janky, tbh. But I'm including this here so I have it.
1787 ;; TODO: enable opening Reddit links in md4rd 1794 ;; TODO: enable opening Reddit links in md4rd
1788 (:also-load _md4rd) 1795 (:also-load _md4rd)
@@ -1873,7 +1880,8 @@ See also `crux-reopen-as-root-mode'."
1873 (:when-loaded 1880 (:when-loaded
1874 (notmuch-bookmarks-mode +1))) 1881 (notmuch-bookmarks-mode +1)))
1875 1882
1876(setup (:straight notmuch-labeler) (:quit "This is buggy") 1883(setup (:straight notmuch-labeler
1884 :quit "Buggy")
1877 (:load-after notmuch)) 1885 (:load-after notmuch))
1878 1886
1879(setup (:straight ol-notmuch)) 1887(setup (:straight ol-notmuch))
@@ -1969,17 +1977,13 @@ See also `crux-reopen-as-root-mode'."
1969 lisp-interaction-mode 1977 lisp-interaction-mode
1970 scheme-mode)) 1978 scheme-mode))
1971 1979
1972(setup (:straight pdf-tools) 1980(setup (:straight pdf-tools
1981 (or (executable-find "gcc")
1982 (executable-find "g++")))
1983 (setf (alist-get "\\.pdf\\'" auto-mode-alist nil nil #'equal)
1984 #'pdf-view-mode)
1973 (pdf-tools-install)) 1985 (pdf-tools-install))
1974 1986
1975;; (setup (:straight-when pdf-tools
1976;; ;; Ensure we can build `pdf-tools'
1977;; (or (executable-find "gcc")
1978;; (executable-find "g++")))
1979;; (setf (alist-get "\\.pdf\\'" auto-mode-alist nil nil #'equal)
1980;; #'pdf-view-mode)
1981;; (pdf-tools-install t))
1982
1983(setup (:straight (plancat 1987(setup (:straight (plancat
1984 :host github 1988 :host github
1985 :repo "duckwork/plancat.el" 1989 :repo "duckwork/plancat.el"
@@ -2078,7 +2082,7 @@ See also `crux-reopen-as-root-mode'."
2078 (alert-add-rule :category "slack" 2082 (alert-add-rule :category "slack"
2079 :style 'ignore))) 2083 :style 'ignore)))
2080 2084
2081(setup (:straight-when sly 2085(setup (:straight sly
2082 (defvar +lisp-bin (executable-find "sbcl"))) 2086 (defvar +lisp-bin (executable-find "sbcl")))
2083 (:also-load sly-autoloads 2087 (:also-load sly-autoloads
2084 +sly) 2088 +sly)
@@ -2120,7 +2124,7 @@ See also `crux-reopen-as-root-mode'."
2120 (auto-save-visited-mode -1) 2124 (auto-save-visited-mode -1)
2121 (super-save-mode +1)) 2125 (super-save-mode +1))
2122 2126
2123(setup (:straight-when systemd 2127(setup (:straight systemd
2124 (executable-find "systemd")) 2128 (executable-find "systemd"))
2125 (:option systemd-man-function 'woman)) 2129 (:option systemd-man-function 'woman))
2126 2130
@@ -2189,10 +2193,8 @@ See also `crux-reopen-as-root-mode'."
2189 2193
2190(setup (:straight unfill)) 2194(setup (:straight unfill))
2191 2195
2192(setup (:straight valign) 2196(setup (:straight valign
2193 (:hook-into org-mode)) 2197 :quit "Doesn't work with narrowed tables.")
2194
2195(setup (:straight valign) (:quit "Doesn't work with narrowed tables.")
2196 (:option valign-fancy-bar t) 2198 (:option valign-fancy-bar t)
2197 (:hook-into org-mode 2199 (:hook-into org-mode
2198 markdown-mode)) 2200 markdown-mode))
@@ -2246,21 +2248,22 @@ See also `crux-reopen-as-root-mode'."
2246(setup (:straight vlf) 2248(setup (:straight vlf)
2247 (:require vlf-setup)) 2249 (:require vlf-setup))
2248 2250
2251(setup (:straight vterm
2252 (and module-file-suffix
2253 (executable-find "cmake"))
2254 :quit)
2255 (:also-load +vterm)
2256 (:option vterm-always-compile-module t
2257 vterm-buffer-name-string "vterm: %s"
2258 vterm-max-scrollback 100000 ; max allowed by vterm-module.h
2259 )
2260 (advice-add 'counsel-yank-pop-action :around
2261 #'+vterm-counsel-yank-pop-action))
2262
2249(setup (:straight (vundo 2263(setup (:straight (vundo
2250 :host github 2264 :host github
2251 :repo "casouri/vundo"))) 2265 :repo "casouri/vundo")))
2252 2266
2253;; (setup (:straight-when vterm
2254;; (and module-file-suffix
2255;; (executable-find "cmake")))
2256;; (:also-load +vterm)
2257;; (:option vterm-always-compile-module t
2258;; vterm-buffer-name-string "vterm: %s"
2259;; vterm-max-scrollback 100000 ; max allowed by vterm-module.h
2260;; )
2261;; (advice-add 'counsel-yank-pop-action :around
2262;; #'+vterm-counsel-yank-pop-action))
2263
2264(setup (:straight web-mode) 2267(setup (:straight web-mode)
2265 (setf (alist-get (rx "." (or "htm" "html" "phtml" "tpl.php" 2268 (setf (alist-get (rx "." (or "htm" "html" "phtml" "tpl.php"
2266 "asp" "gsp" "jsp" "ascx" "aspx" 2269 "asp" "gsp" "jsp" "ascx" "aspx"
diff --git a/lisp/+setup.el b/lisp/+setup.el index 7c658b6..975bcde 100644 --- a/lisp/+setup.el +++ b/lisp/+setup.el
@@ -23,6 +23,7 @@
23(require 'el-patch) 23(require 'el-patch)
24(require 'setup) 24(require 'setup)
25(require 'straight) 25(require 'straight)
26(require 'cl-lib)
26 27
27(defun +setup-warn (message &rest args) 28(defun +setup-warn (message &rest args)
28 "Warn the user that something bad happened in `setup'." 29 "Warn the user that something bad happened in `setup'."
@@ -66,57 +67,93 @@ If PATH does not exist, abort the evaluation."
66;;; Straight.el 67;;; Straight.el
67 68
68(with-eval-after-load 'straight 69(with-eval-after-load 'straight
69 (setup-define :also-straight 70 (defun setup--straight-handle-arg (arg var)
70 (lambda (recipe) `(setup (:straight ,recipe))) 71 (cond
71 :documentation 72 ((and (boundp var) (symbol-value var)) t)
72 "Install RECIPE with `straight-use-package', after loading FEATURE." 73 ((keywordp arg) (set var t))
73 :repeatable t 74 ((functionp arg) (set var nil) (funcall arg))
74 :after-loaded t) 75 ((listp arg) (set var nil) (eval arg :lexical))))
75
76 (defun +setup-straight-shorthand (sexp)
77 "Shorthand for `:straight' and other local macros."
78 (let ((recipe (cadr sexp)))
79 (or (car-safe recipe) recipe)))
80 76
81 (setup-define :straight 77 (setup-define :straight
82 (lambda (recipe) 78 (lambda (recipe &rest predicates)
83 `(unless (ignore-errors (straight-use-package ',recipe) t) 79 (let* ((skp (make-symbol "straight-keyword-p"))
84 (+setup-warn ":straight error: %S" ',recipe) 80 (straight-use-p
85 ,(setup-quit))) 81 (cl-every (lambda (f) (setup--straight-handle-arg f skp))
86 :documentation 82 predicates))
87 "Install RECIPE with `straight-use-package'. 83 (form `(unless (and ,straight-use-p
88This macro can be used as HEAD, and will replace itself with the 84 (condition-case e
89first RECIPE's package." 85 (straight-use-package ',recipe)
90 :repeatable t 86 (error
91 :shorthand #'+setup-straight-shorthand) 87 (+setup-warn ":straight error: %S"
92 88 ',recipe)
93 (setup-define :straight-after 89 ,(setup-quit))
94 (lambda (recipe feature) 90 (:success t)))
95 `(with-eval-after-load ,feature 91(defun setup--straight-handle-arg (arg var)
96 (setup (:straight ,recipe)))) 92 (cond
97 :indent 1 93 ((and (boundp var) (symbol-value var)) t)
98 :documentation 94 ((keywordp arg) (set var t))
99 "Install RECIPE with `straight-use-package', after FEATURE. 95 ((functionp arg) (set var nil) (funcall arg))
100This macro can be used as HEAD, and will replace itself with the 96 ((listp arg) (set var nil) (eval arg :lexical))))
101first RECIPE's package." 97
102 :shorthand #'+setup-straight-shorthand) 98(setup-define :straight
103 99 (lambda (recipe &rest predicates)
104 (setup-define :straight-when 100 (let* ((skp (make-symbol "straight-keyword-p"))
105 (lambda (recipe condition) 101 (straight-use-p
106 `(if ,condition 102 (cl-every (lambda (f) (setup--straight-handle-arg f skp))
107 (unless (ignore-errors (straight-use-package ',recipe) t) 103 predicates))
108 (+setup-warn ":straight error: %S" ',recipe) 104 (form `(unless (and ,straight-use-p
109 ,(setup-quit)) 105 (condition-case e
110 (message "Setup: :straight-when returned nil %S" ',recipe) 106 (straight-use-package ',recipe)
111 ,(setup-quit))) 107 (error
112 :documentation 108 (+setup-warn ":straight error: %S"
113 "Install RECIPE with `straight-use-package' when CONDITION is met. 109 ',recipe)
114If CONDITION is false, or if `straight-use-package' fails, stop 110 ,(setup-quit))
115evaluating the body. This macro can be used as HEAD, and will 111 (:success t)))
116replace itself with the RECIPE's package." 112 ,(setup-quit))))
117 :repeatable 2 113 ;; Keyword arguments --- :quit is special and should short-circuit
114 (if (memq :quit predicates)
115 (setq form `,(setup-quit))
116 ;; Otherwise, handle the rest of them ...
117 (when-let ((after (cadr (memq :after predicates))))
118 (setq form `(with-eval-after-load ,(if (eq after t)
119 (setup-get 'feature)
120 after)
121 ,form))))
122 ;; Finally ...
123 form))
124 :documentation "Install RECIPE with `straight-use-package'.
125If PREDICATES are given, only install RECIPE if all of them return non-nil.
126The following keyword arguments are also recognized:
127- :quit --- immediately stop evaluating. Good for commenting.
128- :after FEATURE --- only install RECIPE after FEATURE is loaded.
129 If FEATURE is t, install RECIPE after the current feature."
130 :repeatable nil
131 :indent 1
132 :shorthand (lambda (sexp)
133 (let ((recipe (cadr sexp)))
134 (or (car-safe recipe) recipe)))) ,(setup-quit))))
135 ;; Keyword arguments --- :quit is special and should short-circuit
136 (if (memq :quit predicates)
137 (setq form `,(setup-quit))
138 ;; Otherwise, handle the rest of them ...
139 (when-let ((after (cadr (memq :after predicates))))
140 (setq form `(with-eval-after-load ,(if (eq after t)
141 (setup-get 'feature)
142 after)
143 ,form))))
144 ;; Finally ...
145 form))
146 :documentation "Install RECIPE with `straight-use-package'.
147If PREDICATES are given, only install RECIPE if all of them return non-nil.
148The following keyword arguments are also recognized:
149- :quit --- immediately stop evaluating. Good for commenting.
150- :after FEATURE --- only install RECIPE after FEATURE is loaded.
151 If FEATURE is t, install RECIPE after the current feature."
152 :repeatable nil
118 :indent 1 153 :indent 1
119 :shorthand #'+setup-straight-shorthand)) 154 :shorthand (lambda (sexp)
155 (let ((recipe (cadr sexp)))
156 (or (car-safe recipe) recipe)))))
120 157
121 158
122;;; Redefines of `setup' forms 159;;; Redefines of `setup' forms