fix: add :depth field to modules

This introduces a depth field for modules so that they may dictate their
load order explicitly, it also treats depths <= -100 or >= 100 as
special depths, which will be loaded early, before their respective
doom-{before,after}-module-{init,config}-hook. This permits psuedo
modules like :core and :user modules to be treated as normal modules
without too many special cases.

This also fixes a module load order issue on Emacs 29 (#6813), caused by
emacs-mirror/emacs@4311bd0bd7, which changed the return value order of
hash-table-{keys,values} causing modules to be loaded in reverse order;
resulting in the loss of evil keybinds, among other things.

Other notable changes:
- Changes the data structure for module data caches from a list to a
  vector. Uses less memory and permits faster lookups. Also adds two
  depth fields to the front of it.
- Changes the signature of doom-module-list and doom-package-list.
- Renames doom--read-packages -> doom-packages--read for consistency
  with naming convention.
- Add doom-module-depth function.
- Adds a temporary doom-core-dir/init.el file, which is responsible for
  loading doom-*.el.

Fix: #6813
Ref: emacs-mirror/emacs@4311bd0bd7
This commit is contained in:
Henrik Lissner 2022-09-23 18:55:20 +02:00
parent 772f9f26d9
commit 5a5195b84d
No known key found for this signature in database
GPG key ID: B60957CA074D39A3
9 changed files with 250 additions and 178 deletions

View file

@ -302,14 +302,12 @@ SEE ALSO:
;; (load! "test" dir)
)
(let ((cli-file "cli"))
(let ((cli-file "cli.el"))
(defcli-group! "Module commands"
(dolist (key (doom-module-list))
(when-let (path (doom-module-expand-path (car key) (cdr key) cli-file))
(defcli-group! :prefix (format "+%s" (cdr key))
(doom-load path t)))))
(load! cli-file doom-user-dir t))
(when-let (path (doom-module-locate-path (car key) (cdr key) cli-file))
(defcli-group! :prefix (if (cdr key) (format "+%s" (cdr key)))
(doom-load (file-name-sans-extension path)))))))
;; Allow per-project Doom settings in .doom files.
(let (doomrc)