   (declare (doc-string 3)
            (indent defun))
   `(el-patch--definition ',(cons #'defsubst args)))
+
+;;;###autoload
+(defmacro el-patch-defvar (&rest args)
+  "Patch a variable. The ARGS are the same as for `defvar'."
+  (declare (indent defun))
+  `(el-patch--definition ',(cons #'defvar args)))
+
+;;;###autoload
+(defmacro el-patch-defgroup (&rest args)
+  "Patch a customization group. The ARGS are the same as for `defgroup'."
+  (declare (indent defun))
+  `(el-patch--definition ',(cons #'defgroup args)))
+
+(defmacro el-patch-defcustom (&rest args)
+  "Patch a customizable variable. The ARGS are the same as for `defcustom'."
+  (declare (indent defun))
+  `(el-patch--definition ',(cons #'defcustom args)))
 
 ;;;###autoload
 (defmacro el-patch-define-minor-mode (&rest args)

and TYPE is a symbol `defun', `defmacro', etc. If the patch could
not be found, return nil."
  (condition-case nil
      (gethash type (gethash name name el-patch--patches))
    (error nil)))

(defun el-patch--select-patch ()

patch's original definition. NAME and TYPE are as returned by
`el-patch-get'."
  (interactive (el-patch--select-patch))
  (if-let ((patch-definition (el-patch-get name type)))
      (let* ((expected-definition (el-patch--resolve-definition
                                   patch-definition nil))
             (name (cadr expected-definition))
             (actual-definition (el-patch--find-function name)))
        (el-patch--ediff-forms
         "*el-patch actual*" actual-definition
         "*el-patch expected*" expected-definition)
        (when (equal actual-definition expected-definition)
          (message "No conflict")))
    (error "There is no patch for %S %S" type name)))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;; Removing patches
