diff options
| -rw-r--r-- | docs/design/module-inventory.org | 59 | ||||
| -rw-r--r-- | modules/linear-config.el | 11 | ||||
| -rw-r--r-- | modules/local-repository.el | 11 | ||||
| -rw-r--r-- | modules/lorem-optimum.el | 10 | ||||
| -rw-r--r-- | modules/mail-config.el | 13 | ||||
| -rw-r--r-- | modules/markdown-config.el | 11 | ||||
| -rw-r--r-- | modules/music-config.el | 10 | ||||
| -rw-r--r-- | modules/pdf-config.el | 11 | ||||
| -rw-r--r-- | modules/quick-video-capture.el | 11 | ||||
| -rw-r--r-- | modules/reconcile-open-repos.el | 9 | ||||
| -rw-r--r-- | modules/restclient-config.el | 9 | ||||
| -rw-r--r-- | modules/slack-config.el | 11 | ||||
| -rw-r--r-- | modules/system-commands.el | 9 | ||||
| -rw-r--r-- | modules/telega-config.el | 10 | ||||
| -rw-r--r-- | modules/tramp-config.el | 8 | ||||
| -rw-r--r-- | modules/transcription-config.el | 9 | ||||
| -rw-r--r-- | modules/video-audio-recording.el | 12 | ||||
| -rw-r--r-- | modules/vterm-config.el | 13 | ||||
| -rw-r--r-- | modules/weather-config.el | 9 | ||||
| -rw-r--r-- | modules/wrap-up.el | 11 | ||||
| -rw-r--r-- | tests/test-init-module-headers.el | 22 |
21 files changed, 249 insertions, 30 deletions
diff --git a/docs/design/module-inventory.org b/docs/design/module-inventory.org index 519839f4..6b5d9d1b 100644 --- a/docs/design/module-inventory.org +++ b/docs/design/module-inventory.org @@ -31,7 +31,9 @@ This inventory is independent from the helper inventory owned by - Batch 6 (Programming modules, Layer 2-4): classified. 10 modules. - Batch 7 (Org modules, Layer 3-4): classified. 13 modules. - Batch 8 (Domain / integration / optional modules, Layer 2-4): classified. 17 modules. -- 82 of 102 modules classified. (elfeed-config deferred — see Pending classification.) +- Batch 9 (Remaining domain / integration / optional modules, Layer 2-4): classified. 19 modules. +- 101 of 102 modules classified. Only elfeed-config remains, deferred on a test + fix (see Deferred classification). - No load-order changes have been made; =init.el= keeps its current eager order. * Legend @@ -208,6 +210,35 @@ flyspell-and-abbrev is the one Core-UX member (text-mode hooks). | =jumper= | 4 | O/L | eager | command | cl-lib | jumper keymap | yes | | =latex-config= | 3 | D/P | eager | mode | none | package config | yes | +** Batch 9 — Remaining domain / integration / optional modules (Layer 2-4) + +The last 19 modules: mail, terminals, chat, media capture, package mirror, and +assorted optional tools. mail-config and the daily terminals stay practically +eager; the rest are command/mode/package-loaded deferral candidates. wrap-up +owns the intentional end-of-startup buffer-bury timer. + +| Module | Layer | Cat | Current | Target | Runtime requires | Top-level side effects | Direct load | +|--------+-------+-----+---------+--------+------------------+------------------------+-------------| +| =linear-config= | 3 | D/P | eager | command | system-lib | package config | yes | +| =local-repository= | 4 | O/D/P | eager | command | elpa-mirror | none | yes | +| =lorem-optimum= | 4 | O/L | eager | command | cl-lib | none | yes | +| =mail-config= | 3 | D/P | eager | command | user-constants, system-lib, mu4e-attachments | cj/email-map under cj/custom-keymap, add-hook, 2 advice, 1 global key | conditional | +| =markdown-config= | 3 | D/P | eager | mode | none | package config, org-src lang map | yes | +| =music-config= | 4 | O/D/P/S | eager | command | subr-x, user-constants, keybindings | music keymap under cj/custom-keymap, 1 global key | yes | +| =pdf-config= | 3 | D/P | eager | mode | none | package config | yes | +| =quick-video-capture= | 4 | O/D/S | eager | command | system-lib | org-protocol handler | yes | +| =reconcile-open-repos= | 3 | D/S | eager | command | cl-lib, subr-x | 1 global key | yes | +| =restclient-config= | 3 | D/P | eager | command | none | package config | yes | +| =slack-config= | 4 | O/D/P | eager | command | system-lib, cl-lib | package config | yes | +| =system-commands= | 3 | D/S | eager | command | keybindings, rx | system-command keymap under cj/custom-keymap | yes | +| =telega-config= | 4 | O/D/P | eager | command | keybindings | telega keymap under cj/custom-keymap | yes | +| =tramp-config= | 3 | D/P | eager | package | none | package config | yes | +| =transcription-config= | 4 | O/D/P | eager | command | dired, notifications, system-lib, user-constants | 1 add-to-list | yes | +| =video-audio-recording= | 4 | O/D/S | eager | command | system-lib | cj/record-map under C-; r (boundp-guarded) | conditional | +| =vterm-config= | 3 | D/P | eager | command | keybindings, seq, subr-x, cj-window-geometry-lib, cj-window-toggle-lib | 2 keymaps, 1 global key, 2 add-hook | yes | +| =weather-config= | 4 | O/D/P | eager | command | none | package config | yes | +| =wrap-up= | 2 | S | eager | eager | system-lib | one-shot startup buffer-bury timer | yes | + * Hidden dependencies found Discoveries that belong to Phase 2 (make dependencies explicit). Recorded here, @@ -236,6 +267,11 @@ not fixed here. - =calendar-sync= guards its =C-; g= registration with =(when (boundp 'cj/custom-keymap) ...)= and does not require keybindings, so the binding silently drops standalone. Same boundp-shim pattern. Phase 2/3 fix. +- =video-audio-recording= uses the same =(when (boundp 'cj/custom-keymap) ...)= + shim for its =C-; r= binding without requiring keybindings. Same Phase 2/3 fix. +- =mail-config= registers =cj/custom-keymap "e"= directly (no boundp guard) and + does not require keybindings, so it errors standalone rather than degrading. + Phase 2 fix: require keybindings (or use the registration API). * Deferred classification @@ -253,29 +289,10 @@ not fixed here. * Pending classification -The remaining 20 modules required by =init.el=, awaiting per-module inspection. +The remaining module (elfeed-config) is deferred on the test fix described above; everything else required by =init.el= is classified. 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. - [ ] elfeed-config -- [ ] linear-config -- [ ] local-repository -- [ ] lorem-optimum -- [ ] mail-config -- [ ] markdown-config -- [ ] music-config -- [ ] pdf-config -- [ ] quick-video-capture -- [ ] reconcile-open-repos -- [ ] restclient-config -- [ ] slack-config -- [ ] system-commands -- [ ] telega-config -- [ ] tramp-config -- [ ] transcription-config -- [ ] video-audio-recording -- [ ] vterm-config -- [ ] weather-config -- [ ] wrap-up diff --git a/modules/linear-config.el b/modules/linear-config.el index 0a62c870..85191828 100644 --- a/modules/linear-config.el +++ b/modules/linear-config.el @@ -2,7 +2,16 @@ ;; author: Craig Jennings <c@cjennings.net> ;;; Commentary: - +;; +;; Layer: 3 (Domain Workflow). +;; Category: D/P. +;; Load shape: eager. +;; Eager reason: none; Linear integration commands, a command-loaded deferral +;; candidate. +;; Top-level side effects: package configuration via use-package. +;; Runtime requires: system-lib. +;; Direct test load: yes. +;; ;; Wires the local pearl checkout (~/code/pearl) into the config, ;; pointed at DeepSat's Linear workspace. ;; diff --git a/modules/local-repository.el b/modules/local-repository.el index e95b88df..b97b74f4 100644 --- a/modules/local-repository.el +++ b/modules/local-repository.el @@ -2,7 +2,16 @@ ;; author Craig Jennings <c@cjennings.net> ;;; Commentary: - +;; +;; Layer: 4 (Optional). +;; Category: O/D/P. +;; Load shape: eager. +;; Eager reason: none; local package-mirror workflow, a command-loaded deferral +;; candidate. +;; Top-level side effects: none. +;; Runtime requires: elpa-mirror. +;; Direct test load: yes. +;; ;;; Code: (require 'elpa-mirror nil t) ;; optional; cj/update-localrepo-repository fails at call-time if absent diff --git a/modules/lorem-optimum.el b/modules/lorem-optimum.el index a6bec657..8aa96345 100644 --- a/modules/lorem-optimum.el +++ b/modules/lorem-optimum.el @@ -7,6 +7,16 @@ ;; URL: https://github.com/yourname/cj-lipsum ;;; Commentary: +;; +;; Layer: 4 (Optional). +;; Category: O/L. +;; Load shape: eager. +;; Eager reason: none; placeholder-text generator, a command-loaded deferral +;; candidate. +;; Top-level side effects: none. +;; Runtime requires: cl-lib. +;; Direct test load: yes. +;; ;; Generate pseudo-Latin placeholder text using a simple order-two ;; Markov chain. You can train the chain on region, buffer, or file. ;; By default, it learns from a bundled Latin wordlist, which you can diff --git a/modules/mail-config.el b/modules/mail-config.el index 7e8773e3..5050d761 100644 --- a/modules/mail-config.el +++ b/modules/mail-config.el @@ -2,6 +2,19 @@ ;; author Craig Jennings <c@cjennings.net> ;; ;;; Commentary: +;; +;; Layer: 3 (Domain Workflow). +;; Category: D/P. +;; Load shape: eager. +;; Eager reason: daily mail; registers cj/email-map. mu4e/org-msg are heavy, so a +;; command-loaded deferral candidate for Phase 5. +;; Top-level side effects: registers cj/email-map under cj/custom-keymap, one +;; add-hook, two advice-add, one global key, package config. +;; Runtime requires: user-constants, system-lib, mu4e-attachments. keybindings +;; is needed for the C-; e registration but is not required, so the module +;; errors standalone. Phase 2 fix. +;; Direct test load: conditional (needs cj/custom-keymap from keybindings). +;; ;; I found Aime Bertrand's blog post to be an excellent walkthrough of how to ;; setup a Mu4e config. ;; diff --git a/modules/markdown-config.el b/modules/markdown-config.el index 1fc4cb0e..4faa4474 100644 --- a/modules/markdown-config.el +++ b/modules/markdown-config.el @@ -2,7 +2,16 @@ ;; author Craig Jennings <c@cjennings.net> ;;; Commentary: - +;; +;; Layer: 3 (Domain Workflow). +;; Category: D/P. +;; Load shape: eager. +;; Eager reason: none; markdown editing, a mode-loaded deferral candidate. +;; Top-level side effects: package configuration via use-package; org-src lang +;; mapping registered after-load. +;; Runtime requires: none (configures packages via use-package). +;; Direct test load: yes. +;; ;;; Code: ;;;; ------------------------- Markdown-Mode ------------------------- diff --git a/modules/music-config.el b/modules/music-config.el index 10cad062..27a282e2 100644 --- a/modules/music-config.el +++ b/modules/music-config.el @@ -2,6 +2,16 @@ ;; ;;; Commentary: ;; +;; Layer: 4 (Optional). +;; Category: O/D/P/S. +;; Load shape: eager. +;; Eager reason: none; optional music workflow that registers a music keymap, a +;; command-loaded deferral candidate. EMMS hooks should run only after EMMS. +;; Top-level side effects: defines a music keymap under cj/custom-keymap, one +;; global key, package config. +;; Runtime requires: subr-x, user-constants, keybindings. +;; Direct test load: yes (requires keybindings explicitly). +;; ;; Music management in Emacs via EMMS with MPV backend. ;; Focus: simple, modular helpers; consistent error handling; streamlined UX. ;; diff --git a/modules/pdf-config.el b/modules/pdf-config.el index cc32f62b..ca231230 100644 --- a/modules/pdf-config.el +++ b/modules/pdf-config.el @@ -2,7 +2,16 @@ ;; author Craig Jennings <c@cjennings.net> ;;; Commentary: - +;; +;; Layer: 3 (Domain Workflow). +;; Category: D/P. +;; Load shape: eager. +;; Eager reason: none; heavy PDF packages should load on PDF open, a file/mode +;; deferral candidate. +;; Top-level side effects: package configuration via use-package. +;; Runtime requires: none (configures packages via use-package). +;; Direct test load: yes. +;; ;;; Code: ;; --------------------------------- PDF Tools --------------------------------- diff --git a/modules/quick-video-capture.el b/modules/quick-video-capture.el index a14fefab..05d569b1 100644 --- a/modules/quick-video-capture.el +++ b/modules/quick-video-capture.el @@ -1,7 +1,16 @@ ;;; quick-video-capture.el --- Video Capturing with Org Capture -*- coding: utf-8; lexical-binding: t; -*- ;;; Commentary: - +;; +;; Layer: 4 (Optional). +;; Category: O/D/S. +;; Load shape: eager. +;; Eager reason: none; runs via org-protocol/command, a protocol/command-loaded +;; deferral candidate. (Startup timers were already removed.) +;; Top-level side effects: org-protocol handler registration. +;; Runtime requires: system-lib. +;; Direct test load: yes. +;; ;; This package provides a seamless "fire-and-forget" workflow for downloading ;; videos from the browser to your local system using yt-dlp and task-spooler. ;; diff --git a/modules/reconcile-open-repos.el b/modules/reconcile-open-repos.el index 20a324b6..dd82ef0f 100644 --- a/modules/reconcile-open-repos.el +++ b/modules/reconcile-open-repos.el @@ -3,6 +3,15 @@ ;; ;;; Commentary: ;; +;; Layer: 3 (Domain Workflow). +;; Category: D/S. +;; Load shape: eager. +;; Eager reason: none; registers one key, but repo scanning should run on command +;; not at startup, a command-loaded deferral candidate. +;; Top-level side effects: one global key. +;; Runtime requires: cl-lib, subr-x. +;; Direct test load: yes. +;; ;; Git repository reconciliation workflow for multiple projects. The workflow ;; iterates through all git repositories in projects-dir and code-dir, skips ;; local-only repos and remotes matching `cj/reconcile-skipped-remote-regexp', diff --git a/modules/restclient-config.el b/modules/restclient-config.el index 6d38739d..0511eddb 100644 --- a/modules/restclient-config.el +++ b/modules/restclient-config.el @@ -2,6 +2,15 @@ ;; author: Craig Jennings <c@cjennings.net> ;;; Commentary: +;; +;; Layer: 3 (Domain Workflow). +;; Category: D/P. +;; Load shape: eager. +;; Eager reason: none; API exploration, a command-loaded deferral candidate. +;; Top-level side effects: package configuration via use-package. +;; Runtime requires: none (configures packages via use-package). +;; Direct test load: yes. +;; ;; Integrates restclient.el for interactive API exploration from within Emacs. ;; ;; Write HTTP requests in plain text buffers, execute with C-c C-c, see diff --git a/modules/slack-config.el b/modules/slack-config.el index e63b720a..48af9c93 100644 --- a/modules/slack-config.el +++ b/modules/slack-config.el @@ -2,7 +2,16 @@ ;; author Craig Jennings <c@cjennings.net> ;;; Commentary: - +;; +;; Layer: 4 (Optional). +;; Category: O/D/P. +;; Load shape: eager. +;; Eager reason: none; optional Slack client, a command-loaded deferral +;; candidate. Auth and which-key labels should be after-load. +;; Top-level side effects: package configuration via use-package. +;; Runtime requires: system-lib, cl-lib. +;; Direct test load: yes. +;; ;; Slack client using emacs-slack (https://github.com/emacs-slack/emacs-slack). ;; ;; Authentication: diff --git a/modules/system-commands.el b/modules/system-commands.el index afb59747..9aa8b3e1 100644 --- a/modules/system-commands.el +++ b/modules/system-commands.el @@ -3,6 +3,15 @@ ;; ;;; Commentary: ;; +;; Layer: 3 (Domain Workflow). +;; Category: D/S. +;; Load shape: eager. +;; Eager reason: registers the C-; ! system-command keymap; high-impact commands +;; that should run only by command (command-loaded target). +;; Top-level side effects: defines a system-command keymap under cj/custom-keymap. +;; Runtime requires: keybindings, rx. +;; Direct test load: yes (requires keybindings explicitly). +;; ;; System commands for logout, lock, suspend, shutdown, reboot, and Emacs ;; exit/restart. Provides both a keymap (C-; !) and a completing-read menu. ;; diff --git a/modules/telega-config.el b/modules/telega-config.el index 789fa533..55682447 100644 --- a/modules/telega-config.el +++ b/modules/telega-config.el @@ -3,6 +3,16 @@ ;;; Commentary: ;; +;; Layer: 4 (Optional). +;; Category: O/D/P. +;; Load shape: eager. +;; Eager reason: none; optional Telegram client that registers a keymap, a +;; command-loaded deferral candidate. +;; Top-level side effects: registers a telega keymap under cj/custom-keymap, +;; package config. +;; Runtime requires: keybindings. +;; Direct test load: yes (requires keybindings explicitly). +;; ;; Configures telega.el (https://github.com/zevlg/telega.el) as an ;; in-Emacs Telegram client. ;; diff --git a/modules/tramp-config.el b/modules/tramp-config.el index 5f58678a..23010b3e 100644 --- a/modules/tramp-config.el +++ b/modules/tramp-config.el @@ -3,6 +3,14 @@ ;;; Commentary: ;; +;; Layer: 3 (Domain Workflow). +;; Category: D/P. +;; Load shape: eager. +;; Eager reason: none; remote-access config, a package-loaded deferral candidate. +;; Top-level side effects: package configuration via use-package. +;; Runtime requires: none (configures packages via use-package). +;; Direct test load: yes. +;; ;; TRAMP (Transparent Remote Access, Multiple Protocol) ;; ;; To handle fancy prompts on remote servers, add this to your shell configuration: diff --git a/modules/transcription-config.el b/modules/transcription-config.el index 344ec473..0a4b4b39 100644 --- a/modules/transcription-config.el +++ b/modules/transcription-config.el @@ -5,6 +5,15 @@ ;;; Commentary: ;; +;; Layer: 4 (Optional). +;; Category: O/D/P. +;; Load shape: eager. +;; Eager reason: none; optional auth/process transcription workflow, a +;; command-loaded deferral candidate. +;; Top-level side effects: one add-to-list. +;; Runtime requires: dired, notifications, system-lib, user-constants. +;; Direct test load: yes. +;; ;; Audio transcription workflow with multiple backend options. ;; ;; USAGE: diff --git a/modules/video-audio-recording.el b/modules/video-audio-recording.el index 282fdf85..38c1931c 100644 --- a/modules/video-audio-recording.el +++ b/modules/video-audio-recording.el @@ -3,6 +3,18 @@ ;; ;;; Commentary: ;; +;; Layer: 4 (Optional). +;; Category: O/D/S. +;; Load shape: eager. +;; Eager reason: none; registers a recording keymap, but device probing should +;; run only on command (command-loaded target). +;; Top-level side effects: defines cj/record-map and conditionally registers it +;; under C-; r. +;; Runtime requires: system-lib. keybindings is needed for the C-; r binding but +;; only reached through a boundp guard, so the binding silently drops +;; standalone. Phase 2 fix. +;; Direct test load: conditional (C-; r registration skipped without keybindings). +;; ;; Desktop video and audio recording from within Emacs using ffmpeg. ;; Records from both microphone and system audio simultaneously, which ;; makes it suitable for capturing meetings, presentations, and desktop activity. diff --git a/modules/vterm-config.el b/modules/vterm-config.el index 20c85468..a87d354e 100644 --- a/modules/vterm-config.el +++ b/modules/vterm-config.el @@ -2,7 +2,18 @@ ;; author Craig Jennings <c@cjennings.net> ;;; Commentary: - +;; +;; Layer: 3 (Domain Workflow). +;; Category: D/P. +;; Load shape: eager. +;; Eager reason: registers terminal keymaps and the F12 toggle; a command/hook +;; deferral candidate. +;; Top-level side effects: defines two keymaps (one under cj/custom-keymap), one +;; global key, two add-hook, package config. +;; Runtime requires: keybindings, seq, subr-x, cj-window-geometry-lib, +;; cj-window-toggle-lib. +;; Direct test load: yes (requires keybindings explicitly). +;; ;; VTERM ;; At the moment, vterm behaves like a real terminal. For most keys, vterm will ;; just send them to the process that is currently running. So, C-a may be diff --git a/modules/weather-config.el b/modules/weather-config.el index efcc7393..93b0a614 100644 --- a/modules/weather-config.el +++ b/modules/weather-config.el @@ -2,6 +2,15 @@ ;; author: Craig Jennings <c@cjennings.net> ;;; Commentary: ;; +;; Layer: 4 (Optional). +;; Category: O/D/P. +;; Load shape: eager. +;; Eager reason: none; optional weather command, a command-loaded deferral +;; candidate. Degrades cleanly when wttrin is absent. +;; Top-level side effects: package configuration via use-package. +;; Runtime requires: none (configures packages via use-package). +;; Direct test load: yes. +;; ;; Call M-W to open wttrin with your preferred location list immediately. ;; Adjust the city list by editing `wttrin-default-locations` or answering wttrin prompts when asked. ;; Forecasts arrive in an Emacs buffer, so you can stay keyboard-only while checking weather. diff --git a/modules/wrap-up.el b/modules/wrap-up.el index 93b74776..503d4a6b 100644 --- a/modules/wrap-up.el +++ b/modules/wrap-up.el @@ -2,7 +2,16 @@ ;; author Craig Jennings <c@cjennings.net> ;;; Commentary: - +;; +;; Layer: 2 (Core UX). +;; Category: S. +;; Load shape: eager. +;; Eager reason: runs end-of-startup cleanup, burying the scratch/dashboard +;; buffers via a short startup timer. +;; Top-level side effects: a one-shot startup timer that buries buffers. +;; Runtime requires: system-lib. +;; Direct test load: yes. +;; ;;; Code: (require 'system-lib) diff --git a/tests/test-init-module-headers.el b/tests/test-init-module-headers.el index feaf93fd..42e26ed7 100644 --- a/tests/test-init-module-headers.el +++ b/tests/test-init-module-headers.el @@ -110,7 +110,27 @@ "gloss-config" "httpd-config" "jumper" - "latex-config") + "latex-config" + ;; Batch 9 — Remaining domain / integration / optional modules (Layer 2-4) + "linear-config" + "local-repository" + "lorem-optimum" + "mail-config" + "markdown-config" + "music-config" + "pdf-config" + "quick-video-capture" + "reconcile-open-repos" + "restclient-config" + "slack-config" + "system-commands" + "telega-config" + "tramp-config" + "transcription-config" + "video-audio-recording" + "vterm-config" + "weather-config" + "wrap-up") "Modules annotated with the load-graph header contract. Grows one batch at a time. Parity with the init.el require set is the Phase 1 exit criterion.") |
