                  face bold))
   '("" +modeline-modes))
 
-(def-modeline! special
+(def-modeline! 'special
   '("" +modeline-matches
     " " +modeline-buffer-identification)
   '("" +modeline-modes))

          (remove-hook hook (intern (format "+modeline-set-%s-format-h" name)))))
      (add-hook hook fn))))

(defmacro def-modeline! (name lhs rhs)
  "Define a modeline format by NAME.
LHS and RHS are the formats representing the left and right hand side of the
mode-line, respectively. See the variable `format-mode-line' for details on what
LHS and RHS will accept."
  `(progn
     (setf (alist-get ',name +modeline-format-alist)
           (cons ,lhs ,rhs))
     (defun ,(intern (format "+modeline-set-%s-format-h" name)) (&rest _)
       "TODO"
       (set-modeline! ',name))))

(defmacro def-modeline-var! (name body &optional docstring &rest plist)
  "TODO"

    "  "
    (+modeline-checker ("" +modeline-checker "   "))))

(def-modeline! 'project
  `(" "
    ,(all-the-icons-octicon
      "file-directory"
