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." ;;; `setup' (straight-use-package '(setup :host nil :repo "https://git.sr.ht/~pkal/setup")) (require 'setup) - -(setup setup - ;; Install a package using `straight-use-package' - (setup-define :straight - (lambda (recipe) - `(straight-use-package ',recipe)) - :documentation - "Install RECIPE with `straight-use-package'. -This macro can be used as HEAD, and will replace itself with the -first RECIPE's package." - :repeatable t - :shorthand (lambda (sexp) - (let ((recipe (cadr sexp))) - (if (consp recipe) - (car recipe) - recipe)))) - ;; Install a package with straight, but only under a condition - (setup-define :straight-if - (lambda (recipe condition) - `(if ,condition - (straight-use-package ',recipe) - ,(setup-quit))) - :documentation - "Install RECIPE with `straight-use-package' when CONDITION is met. -If CONDITION is false, stop evaluating the body. This macro can -be used as HEAD, and will replace itself with the RECIPE's -package. This macro is not repeatable." - :repeatable nil - :shorthand (lambda (sexp) - (let ((recipe (cadr sexp))) - (if (consp recipe) (car recipe) recipe)))) - ;; Hotfix - (setup-define :file-match - (lambda (pat) - `(add-to-list 'auto-mode-alist (cons ,pat ',(setup-get 'mode)))) - :documentation "Associate the current mode with files that match PAT." - :debug '(form) - :repeatable t)) +(require 'acdw-setup) ;;; `no-littering' (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 @@ +;;; acdw-setup.el -- my `setup' commands -*- lexical-binding: t -*- + +;; Author: Case Duckworth + +;; This file is NOT part of GNU Emacs. + +;;; License: +;; Everyone is permitted to do whatever with this software, without +;; limitation. This software comes without any warranty whatsoever, +;; but with two pieces of advice: +;; - Don't hurt yourself. +;; - Make good choices. + +;;; Code: + +(setup-define :autoload + (lambda (func) + (if (listp func) + (let ((plist (cdr func))) + `(autoload ',(car func) + ,(symbol-name (setup-get 'feature)) + ,(plist-get plist :docstring) + ,(plist-get plist :interactive) + ,(plist-get plist :type))) + `(autoload ',func ,(symbol-name (setup-get 'feature))))) + :documentation "Autoload FUNC from FEATURE. +`:autoload' can be passed a list with keywords: +:docstring - The DOCSTRING to give the autoloaded function. +:interactive - Whether the function is INTERACTIVE or not. +:type - Either `nil', `keymap', or `macro': see `autoload' for details." + :repeatable t) + +(setup-define :file-match + ;; Hotfix; patch here: https://github.com/phikal/setup.el/pull/1 + (lambda (pat) + `(add-to-list 'auto-mode-alist (cons ,pat ',(setup-get 'mode)))) + :documentation "Associate the current mode with files that match PAT." + :debug '(form) + :repeatable t) + +(setup-define :straight + (lambda (recipe) + `(straight-use-package ',recipe)) + :documentation + "Install RECIPE with `straight-use-package'. +This macro can be used as HEAD, and will replace itself with the +first RECIPE's package." + :repeatable t + :shorthand (lambda (sexp) + (let ((recipe (cadr sexp))) + (if (consp recipe) + (car recipe) + recipe)))) + +(setup-define :straight-if + (lambda (recipe condition) + `(if ,condition + (straight-use-package ',recipe) + ,(setup-quit))) + :documentation + "Install RECIPE with `straight-use-package' when CONDITION is met. +If CONDITION is false, stop evaluating the body. This macro can +be used as HEAD, and will replace itself with the RECIPE's +package. This macro is not repeatable." + :repeatable nil + :shorthand (lambda (sexp) + (let ((recipe (cadr sexp))) + (if (consp recipe) (car recipe) recipe)))) + +(provide 'acdw-setup) +;;; acdw-setup.el ends here