Most customizations for Emacs should be put in the normal init file.
See Init File. However, it is sometimes desirable
to have customizations that take effect during Emacs startup earlier than the
normal init file is processed. Such customizations can be put in the early
~/.emacs.d/early-init.el. This file is loaded before the
package system and GUI is initialized, so in it you can customize variables
that affect frame appearance as well as the package initialization process,
package-user-dir. Note that variables like
which only affect the installation of new packages, and not the process of
making already-installed packages available, may be customized in the regular
init file. See Package Installation.
We do not recommend that you move into
customizations that can be left in the normal init files. That is
because the early init file is read before the GUI is initialized, so
customizations related to GUI features will not work reliably in
early-init.el. By contrast, the normal init files are read
after the GUI is initialized. If you must have customizations in the
early init file that rely on GUI features, make them run off hooks
provided by the Emacs startup, such as
tty-setup-hook. See Hooks.
For more information on the early init file, see Init File in The Emacs Lisp Reference Manual.