About doom-literate-config
A skill for maintaining Doom Emacs configurations written in literate Org mode. It helps developers trace generated files back to config.org, preserve existing settings, and make focused changes using Doom conventions.
Key features
- 01Identify tangled files and destinations
- 02Inventory settings and package declarations
- 03Preserve comments in the source
- 04Use Doom-native configuration macros
- 05Organize tools into Org sections
Use cases
- 01Modify a Doom configuration safely
- 02Add a package declaration to packages.el
- 03Change key bindings or package settings
Install
Copy the command and run it in a terminal.
npx skills add https:/ / github.com/ tejas-kale/ skills --skill doom-literate-configAfter installing, type/doom-literate-configin Claude Code to confirm it loaded.
Details
From the project READMEDoom Literate Config
In a literate setup config.org is the source and everything else is tangled — generated on export and overwritten. Every edit belongs in the source; an edit to a tangled file is lost at the next tangle.
1. Establish what tangles where
Read init.el, config.org, config.el, and packages.el.
:config literateininit.elmakesconfig.orgthe source.- Ordinary
emacs-lispblocks tangle toconfig.el. - Blocks marked
:tangle packages.eltangle there;package!declarations need that marker.
Done when you can name the source file and the tangle destination of every block you intend to touch.
2. Account for the current configuration
Before the first edit, inventory every active setting in config.el and every package! declaration in packages.el, and confirm each one has a home in config.org.
Carry package-file comments into a config.org block tangled to packages.el, so they survive regeneration.
Done when every active setting, declaration, and comment in the tangled files is accounted for in the source — each one either preserved there or deliberately dropped.
3. Make the smallest Doom-native change
Reach for the Doom macro over raw Emacs Lisp:
| Task | Use |
|---|---|
| Declare an external package | package! (in the packages.el block) |
| Configure a package | use-package! |
| Bind keys | map! |
| Set the default font | doom-font |
| Set new-frame geometry | default-frame-alist |
Give each tool its own config.org section and code block, with its prerequisites in a block above its configuration.
Done when every changed line traces to a preference the user stated.