init.el
init.el is deliberately tiny. Its only jobs are:
- Register MELPA and NonGNU ELPA as fallback archives for anything Nix does not ship.
- Put
lisp/on the load-path. - Point
custom-fileatvar/custom.elsoM-x customizehas somewhere to scribble. requireeach module in the right order. Archive refresh is not on the startup path — there is no background warm-up at all; archives are fetched only on demand.
early-init.el or one of the lisp/init-*.el modules.
Package archives
load-path, so use-package finds them without touching the network. The archives above only come into play for packages that Nix does not ship.
Registering an archive performs no I/O, and nothing in the config refreshes the archive index at launch. A download happens only when it is actually needed:
package-install— including the:ensure tpath — callspackage--archives-initialize, which reads the on-disk cache underelpa/archives/and downloads only when that cache is empty.M-x package-refresh-contentsandM-x list-packagesrefresh when you ask them to.
:ensured package is already on load-path, starts up without contacting MELPA at all.
Load path
Custom file
custom.el is write-only: Jotain never loads it back. The declarative config in git remains the single source of truth; the file exists only so M-x customize has somewhere to scribble without touching init.el.
Module loading
init.el then requires each module in order. See Modules for what each file owns and the full load order.