1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
|
#+TITLE: Module Inventory — init.el Load Graph
#+AUTHOR: Craig Jennings
#+DATE: 2026-05-24
* Purpose
Living per-module inventory for the [[file:init-load-graph.org][init.el load-graph refactor]]. The
spec's module-category table is the seed; this file is the per-module truth as
each module is inspected and classified. A module moves from [[*Pending
classification][Pending classification]] into [[*Classified modules][Classified
modules]] once its source has been read and its load-graph header written.
Phase 1 exit criterion: every module required by =init.el= (102 total) is
represented here with a category and target load shape, every eager survivor
has a documented reason, and top-level timer/process/network side effects are
identified. Classification proceeds in batches; the header-validation test
=tests/test-init-module-headers.el= enforces the contract on each classified
module.
This inventory is independent from the helper inventory owned by
=utility-consolidation.org=.
* Status
- Phase 1 (Inventory and Contracts), in progress.
- Batch 1 (Foundation, Layer 1): classified. 7 of 102 modules.
- No load-order changes have been made; =init.el= keeps its current eager order.
* Legend
Category key (a module may carry two, e.g. =F/S=):
- =F= foundation or shared library/config
- =C= core eager UX
- =P= package configuration (usually hook/command/package loaded)
- =D= domain workflow with a possible eager reason
- =S= startup side-effect / timer / process owner
- =O= optional, entertainment, experimental, rarely used
- =L= pure-ish library / command helpers, easy to load directly
Load shape: =eager= | =hook= | =mode= | =command= | =after-load=.
Direct test load: =yes= | =conditional= | =no= — can the module be loaded
directly in batch without first loading the rest of init?
* Classified modules
** Batch 1 — Foundation (Layer 1)
| Module | Layer | Cat | Current | Target | Runtime requires | Top-level side effects | Direct load |
|--------+-------+-----+---------+--------+------------------+------------------------+-------------|
| =system-lib= | 1 | F/L | eager | eager | none (auth-source on demand) | none | yes |
| =user-constants= | 1 | F | eager | eager | none | file writes: creates configured dirs/files at load | conditional |
| =host-environment= | 1 | F/L | eager | eager | none (battery on demand) | none | yes |
| =system-defaults= | 1 | F/S | eager | eager | autorevert, server, bookmark, host-environment, user-constants | global setq, display-warning advice, display-buffer-alist entry, one key remap | conditional |
| =keyboard-compat= | 1 | F/S | eager | eager | host-environment | adds emacs-startup-hook | yes |
| =keybindings= | 1 | F/C | eager | eager | user-constants, which-key, free-keys | defines cj/custom-keymap + cj/jump-map, binds global keys, which-key labels | conditional |
| =config-utilities= | 1 | C/O | eager | eager | cl-lib, cl-generic, eieio, find-lisp, profiler | defines cj/debug-config-keymap, binds C-c d | yes |
Every Batch 1 module stays eager: each satisfies a spec eager-reason condition
(shared helpers, path constants, core Emacs behavior, or the global keymap
owner). Reasons are recorded in each module's load-graph header.
* Hidden dependencies found
Discoveries that belong to Phase 2 (make dependencies explicit). Recorded here,
not fixed here.
- =system-defaults= reads =env-bsd-p= (host-environment) and =user-home-dir=
(user-constants) at *load* time, but declares both only via
=eval-when-compile=. The compiled module therefore cannot load standalone —
it works at startup only because =init.el= requires host-environment and
user-constants earlier. Phase 2 fix: promote the two =eval-when-compile=
requires to plain runtime =require=. (Test
=test-system-defaults-functions.el= was updated to require host-environment
so the unit loads in isolation; the production fix is still pending.)
* Pending classification
The remaining 95 modules required by =init.el=, awaiting per-module inspection.
Each batch reads these against their source and moves them into [[*Classified
modules][Classified modules]] with a load-graph header. Suggested batch order
follows the spec: text/editing command modules, then UI, then programming, then
Org, then optional integrations.
- [ ] ai-config
- [ ] ai-vterm
- [ ] auth-config
- [ ] browser-config
- [ ] calendar-sync
- [ ] calibredb-epub-config
- [ ] chrono-tools
- [ ] coverage-core
- [ ] coverage-elisp
- [ ] custom-buffer-file
- [ ] custom-case
- [ ] custom-comments
- [ ] custom-datetime
- [ ] custom-line-paragraph
- [ ] custom-misc
- [ ] custom-ordering
- [ ] custom-text-enclose
- [ ] custom-whitespace
- [ ] dashboard-config
- [ ] dev-fkeys
- [ ] diff-config
- [ ] dirvish-config
- [ ] dwim-shell-config
- [ ] elfeed-config
- [ ] erc-config
- [ ] eshell-config
- [ ] eww-config
- [ ] external-open
- [ ] flycheck-config
- [ ] flyspell-and-abbrev
- [ ] font-config
- [ ] games-config
- [ ] gloss-config
- [ ] help-config
- [ ] help-utils
- [ ] httpd-config
- [ ] hugo-config
- [ ] jumper
- [ ] keyboard-macros
- [ ] latex-config
- [ ] linear-config
- [ ] local-repository
- [ ] lorem-optimum
- [ ] mail-config
- [ ] markdown-config
- [ ] media-utils
- [ ] modeline-config
- [ ] mousetrap-mode
- [ ] music-config
- [ ] nerd-icons-config
- [ ] org-agenda-config
- [ ] org-babel-config
- [ ] org-capture-config
- [ ] org-config
- [ ] org-contacts-config
- [ ] org-drill-config
- [ ] org-export-config
- [ ] org-noter-config
- [ ] org-refile-config
- [ ] org-reveal-config
- [ ] org-roam-config
- [ ] org-webclipper
- [ ] pdf-config
- [ ] popper-config
- [ ] prog-c
- [ ] prog-general
- [ ] prog-go
- [ ] prog-json
- [ ] prog-lisp
- [ ] prog-python
- [ ] prog-shell
- [ ] prog-training
- [ ] prog-webdev
- [ ] prog-yaml
- [ ] quick-video-capture
- [ ] reconcile-open-repos
- [ ] restclient-config
- [ ] selection-framework
- [ ] slack-config
- [ ] system-commands
- [ ] system-utils
- [ ] telega-config
- [ ] test-runner
- [ ] text-config
- [ ] tramp-config
- [ ] transcription-config
- [ ] ui-config
- [ ] ui-navigation
- [ ] ui-theme
- [ ] undead-buffers
- [ ] vc-config
- [ ] video-audio-recording
- [ ] vterm-config
- [ ] weather-config
- [ ] wrap-up
|