diff options
-rw-r--r-- | early-init.el | 39 | ||||
-rw-r--r-- | lisp/acdw-setup.el | 71 |
2 files changed, 72 insertions, 38 deletions
diff --git a/early-init.el b/early-init.el index 2fcee66..c7d4985 100644 --- a/early-init.el +++ b/early-init.el | |||
@@ -194,44 +194,7 @@ say, `tool-bar-mode' once to toggle the tool bar back on." | |||
194 | ;;; `setup' | 194 | ;;; `setup' |
195 | (straight-use-package '(setup :host nil :repo "https://git.sr.ht/~pkal/setup")) | 195 | (straight-use-package '(setup :host nil :repo "https://git.sr.ht/~pkal/setup")) |
196 | (require 'setup) | 196 | (require 'setup) |
197 | 197 | (require 'acdw-setup) | |
198 | (setup setup | ||
199 | ;; Install a package using `straight-use-package' | ||
200 | (setup-define :straight | ||
201 | (lambda (recipe) | ||
202 | `(straight-use-package ',recipe)) | ||
203 | :documentation | ||
204 | "Install RECIPE with `straight-use-package'. | ||
205 | This macro can be used as HEAD, and will replace itself with the | ||
206 | first RECIPE's package." | ||
207 | :repeatable t | ||
208 | :shorthand (lambda (sexp) | ||
209 | (let ((recipe (cadr sexp))) | ||
210 | (if (consp recipe) | ||
211 | (car recipe) | ||
212 | recipe)))) | ||
213 | ;; Install a package with straight, but only under a condition | ||
214 | (setup-define :straight-if | ||
215 | (lambda (recipe condition) | ||
216 | `(if ,condition | ||
217 | (straight-use-package ',recipe) | ||
218 | ,(setup-quit))) | ||
219 | :documentation | ||
220 | "Install RECIPE with `straight-use-package' when CONDITION is met. | ||
221 | If CONDITION is false, stop evaluating the body. This macro can | ||
222 | be used as HEAD, and will replace itself with the RECIPE's | ||
223 | package. This macro is not repeatable." | ||
224 | :repeatable nil | ||
225 | :shorthand (lambda (sexp) | ||
226 | (let ((recipe (cadr sexp))) | ||
227 | (if (consp recipe) (car recipe) recipe)))) | ||
228 | ;; Hotfix | ||
229 | (setup-define :file-match | ||
230 | (lambda (pat) | ||
231 | `(add-to-list 'auto-mode-alist (cons ,pat ',(setup-get 'mode)))) | ||
232 | :documentation "Associate the current mode with files that match PAT." | ||
233 | :debug '(form) | ||
234 | :repeatable t)) | ||
235 | 198 | ||
236 | ;;; `no-littering' | 199 | ;;; `no-littering' |
237 | (setup (:straight no-littering) | 200 | (setup (:straight no-littering) |
diff --git a/lisp/acdw-setup.el b/lisp/acdw-setup.el new file mode 100644 index 0000000..ca30249 --- /dev/null +++ b/lisp/acdw-setup.el | |||
@@ -0,0 +1,71 @@ | |||
1 | ;;; acdw-setup.el -- my `setup' commands -*- lexical-binding: t -*- | ||
2 | |||
3 | ;; Author: Case Duckworth <acdw@acdw.net> | ||
4 | |||
5 | ;; This file is NOT part of GNU Emacs. | ||
6 | |||
7 | ;;; License: | ||
8 | ;; Everyone is permitted to do whatever with this software, without | ||
9 | ;; limitation. This software comes without any warranty whatsoever, | ||
10 | ;; but with two pieces of advice: | ||
11 | ;; - Don't hurt yourself. | ||
12 | ;; - Make good choices. | ||
13 | |||
14 | ;;; Code: | ||
15 | |||
16 | (setup-define :autoload | ||
17 | (lambda (func) | ||
18 | (if (listp func) | ||
19 | (let ((plist (cdr func))) | ||
20 | `(autoload ',(car func) | ||
21 | ,(symbol-name (setup-get 'feature)) | ||
22 | ,(plist-get plist :docstring) | ||
23 | ,(plist-get plist :interactive) | ||
24 | ,(plist-get plist :type))) | ||
25 | `(autoload ',func ,(symbol-name (setup-get 'feature))))) | ||
26 | :documentation "Autoload FUNC from FEATURE. | ||
27 | `:autoload' can be passed a list with keywords: | ||
28 | :docstring - The DOCSTRING to give the autoloaded function. | ||
29 | :interactive - Whether the function is INTERACTIVE or not. | ||
30 | :type - Either `nil', `keymap', or `macro': see `autoload' for details." | ||
31 | :repeatable t) | ||
32 | |||
33 | (setup-define :file-match | ||
34 | ;; Hotfix; patch here: https://github.com/phikal/setup.el/pull/1 | ||
35 | (lambda (pat) | ||
36 | `(add-to-list 'auto-mode-alist (cons ,pat ',(setup-get 'mode)))) | ||
37 | :documentation "Associate the current mode with files that match PAT." | ||
38 | :debug '(form) | ||
39 | :repeatable t) | ||
40 | |||
41 | (setup-define :straight | ||
42 | (lambda (recipe) | ||
43 | `(straight-use-package ',recipe)) | ||
44 | :documentation | ||
45 | "Install RECIPE with `straight-use-package'. | ||
46 | This macro can be used as HEAD, and will replace itself with the | ||
47 | first RECIPE's package." | ||
48 | :repeatable t | ||
49 | :shorthand (lambda (sexp) | ||
50 | (let ((recipe (cadr sexp))) | ||
51 | (if (consp recipe) | ||
52 | (car recipe) | ||
53 | recipe)))) | ||
54 | |||
55 | (setup-define :straight-if | ||
56 | (lambda (recipe condition) | ||
57 | `(if ,condition | ||
58 | (straight-use-package ',recipe) | ||
59 | ,(setup-quit))) | ||
60 | :documentation | ||
61 | "Install RECIPE with `straight-use-package' when CONDITION is met. | ||
62 | If CONDITION is false, stop evaluating the body. This macro can | ||
63 | be used as HEAD, and will replace itself with the RECIPE's | ||
64 | package. This macro is not repeatable." | ||
65 | :repeatable nil | ||
66 | :shorthand (lambda (sexp) | ||
67 | (let ((recipe (cadr sexp))) | ||
68 | (if (consp recipe) (car recipe) recipe)))) | ||
69 | |||
70 | (provide 'acdw-setup) | ||
71 | ;;; acdw-setup.el ends here | ||