 (dolist (mode evil-collection-mode-list)
   (dolist (req (or (cdr-safe mode) (list mode)))
     (with-eval-after-load req
-      (+evil-collection-init mode))))
+      (+evil-collection-init mode +evil-collection-disabled-list))))

    youtube-dl
    (ztree ztree-diff)))

(defun +evil-collection-init (module)
  "Initialize evil-collection-MODULE.

Unlike `evil-collection-init', this respects `+evil-collection-disabled-list',
and complains if a module is loaded too early (during startup)."
  (unless (memq (or (car-safe module) module) +evil-collection-disabled-list)
    (let ((module-sym (or (car-safe module) module)))
      (doom-log "Initialized evil-collection-%s %s"
                module-sym (if doom-init-time "" "(too early!)")))
    (with-demoted-errors "evil-collection error: %s"
      (evil-collection-init (list module)))))


;; 2. This ensures a predictable load order, versus lazy loading using :defer or
;;    :after-call. This means users can use (after! org ...) and be sure that
;;    their changes will override evil-collection's.
;; 3. Ideally, we'd do away with evil-collection entirely. It changes too often,
;;    introduces breaking bugs too frequently, and I don't agree with all their
;;    design choices. Regardless, it does mork than it causes trouble, so it may
;;    be here to stay.
;; 4. Adds `+evil-collection-disabled-list', to make it easier for users to
;;    disable modules, and to reduce the effort required to maintain our copy of
;;    `evil-collection-list' (now I can just copy it from time to time).
