 (load! "cli/help")
 (load! "cli/install")
 
-(defcli! (refresh re sync)
+(defcligroup! "Maintenance"
+  "For managing your config and packages"
+  (defcli! (refresh re sync)
     ((if-necessary-p ["-n" "--if-necessary"] "Only regenerate autoloads files if necessary")
      (purge-p ["-p" "--purge"] "Also purge orphaned repos and ELPA packages"))
-  "Ensure Doom is properly set up.
+    "Ensure Doom is properly set up.
 
 This is the equivalent of running autoremove, install, autoloads, then
 recompile. Run this whenever you:

It will ensure that unneeded packages are removed, all needed packages are
installed, autoloads files are up-to-date and no byte-compiled files have gone
stale."
  :bare t
  (print! (green "Initiating a refresh of Doom Emacs...\n"))
  (let (success)
    (when (file-exists-p doom-env-file)
      (doom-cli-reload-env-file 'force))

    (mapc #'doom--cli-delete-autoloads-file
          (list doom-autoload-file
                doom-package-autoload-file))

    (doom-initialize 'force 'noerror)
    (doom-initialize-modules)
    (doom-cli-reload-core-autoloads (not if-necessary-p))
    (unwind-protect
        (progn
          (and (doom-cli-packages-install)
               (setq success t))
          (and (doom-cli-packages-build)
               (setq success t))
          (and (doom-cli-packages-purge purge-p 'builds-p purge-p)
               (setq success t)))
      (doom-cli-reload-package-autoloads (or success (not if-necessary-p)))
      (doom-cli-byte-compile nil 'recompile))
    t))

(defcligroup! "Diagnostics"
  "For troubleshooting and diagnostics"

  (load! "cli/debug")
  (load! "cli/test"))

(defcligroup! "Compilation"
  "For compiling Doom and your config"
  (load! "cli/byte-compile"))
