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

                 face bold))
  '("" +modeline-modes))

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

(defun 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."
  (setf (alist-get name +modeline-format-alist)
        (cons lhs rhs))
  (fset (intern (format "+modeline-set-%s-format-h" name))
        (lambda (&rest _) (set-modeline! name))))

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