The Emacs configuration directory.
Clone the root of this version-controlled repository to a place where Emacs can find the init.el file, e.g. ~/.config/emacs.
emacs.d/ ├── bin/ - Shell scripts; add to PATH ├── etc/ - Startup & config files for packages │ └── tempel/ - Used by tempel, storing templates ├── init.d/ - Symlinks to package sources in lisp/ │ └── symlinks.sh - Symlink manager script ├── lisp/ - Emacs Lisp package source files │ ├── archive/ - Unused code archive for reference │ ├── themes/ - Theme package config files │ │ └── themes-*.el - Configure a theme │ ├── init-*.el - Initialize a package manager │ ├── linux-gui.el - Configure GUI sub-component in Linux │ ├── maj-*.el - Configure a major mode & its utilities │ ├── optimizations.el - Perf optimization │ └── subsys-*.el - Configure a subsystem not packaged as major mode ├── straight/ - Used by straight │ ├── repos/ - Package source repositories │ └── versions/ │ └── default.el - Version freeze info ├── tree-sitter/ - Tree-sitter library files ├── var/ - Package data files ├── early-init.el └── init.el
The Emacs starts by loading early-init.el and then init.el. This section describes the architecture of the init.el file.
This repository makes heavy use of use-package with straight, configured in lisp/init-straight.el.
In order to avoid excessive dependence on the :straight property, modified recipes are defined in lisp/init-straight.el. This also helps avoid recipe inconsistency when use-package is run multiple times for a package.
Emacs Lisp source files are in lisp/. Those .el files actually loaded by init-loader are symlinked in init.d/, in (mostly) ASCII order. To set up symlinks, use symlinks.sh:
./init.d/symlinks.sh -r # refresh all symlinksSee the Key Binding Conventions section of the GNU Emacs Lisp Reference Manual.
In a typical Linux system that I use, the startup time is about 1.5 - 2.0 seconds on the first launch and 1.0 - 1.5 seconds thereafter. The Emacs Lisp sources are written for readability and maintainability. Some strategies are maintained to minimize package loading time, however. The following resources may offer useful tips: