                                          group future)))
                (error! "Failed to create any threads")))
           (total (length futures))
-          (timeout 20))
+          (timeout (or timeout 45)))
      (condition-case-unless-debug e
          (let (specs)
            (while futures

         (cons 'error e))))))


(defun doom-packages-update (&optional auto-accept-p)
  "Updates packages.

Unless AUTO-ACCEPT-P is non-nil, this function will prompt for confirmation with
a list of packages that will be updated."
  (print! (start "Scanning for outdated packages (this may take a while)..."))
  (print-group!
   ;; REVIEW Does this fail gracefully enough? Is it error tolerant?
   ;; TODO Add version-lock checks; don't want to spend all this effort on
   ;;      packages that shouldn't be updated

                                              (cdar futures)
                                              ", ")))
                     (throw 'timeout (pop futures)))
                   (sleep-for 1)
                   (when (cl-evenp time)
                     (print! "."))
                   (cl-incf time))
                 (cl-destructuring-bind (status . result)
                     (or (async-get (car (pop futures)))
                         (cons nil nil))
