Move setup-defines into acdw-setup.el

This commit is contained in:
Case Duckworth 2021-09-03 22:50:58 -05:00
parent 9b1789697d
commit 6a6d966432
2 changed files with 72 additions and 38 deletions

View File

@ -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)

71
lisp/acdw-setup.el Normal file
View File

@ -0,0 +1,71 @@
;;; acdw-setup.el -- my `setup' commands -*- lexical-binding: t -*-
;; Author: Case Duckworth <acdw@acdw.net>
;; 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