 ;;; ../work/conf/doom-emacs/core/autoload/themes.el -*- lexical-binding: t; -*-
 
+(defun doom--custom-theme-set-face (spec)
+  (cond ((listp (car spec))
+         (cl-loop for face in (car spec)
+                  collect `(,face ,(cdr spec))))
+        ((keywordp (car spec))
+         `((,(car spec) ((t ,(cdr spec))))))
+        (`((,(car spec) ,(cdr spec))))))
+
 ;;;###autoload
-(defmacro custom-theme-set-faces! (theme &rest specs)
-  "Apply a list of face specs as user customizations for THEME.
+(defun custom-theme-set-faces! (theme &rest specs)
+  "Apply a list of face SPECS as user customizations for THEME.
 
 THEME can be a single symbol or list thereof. If nil, apply these settings to
 all themes. It will apply to all themes once they are loaded.

   '(org-tag :background \"#4499FF\")
   '(org-ellipsis :inherit org-tag)
   '(which-key-docstring-face :inherit font-lock-comment-face))"
  `(let* ((themes (doom-enlist (or ,theme 'user)))
          (fn (gensym (format "doom--customize-%s-h-" (mapconcat #'symbol-name themes "-")))))
     (fset fn
           (lambda ()

               (when (or (eq theme 'user)
                         (custom-theme-enabled-p theme))
                 (apply #'custom-theme-set-faces 'user
                        (mapcan #'doom--custom-theme-set-face
                                specs))))))
     (funcall fn)
     (add-hook 'doom-load-theme-hook fn)))

;;;###autoload
(defun custom-set-faces! (&rest specs)
  "Apply a list of face SPECS as user customizations.

SPECS is a list of face specs.

