Starting with version 23, vanilla GnuEmacs introduced custom themes. See the Emacs manual (‘C-h r’), node Custom Themes.

Comparison with Color Themes

Custom themes are similar to color themes. Though they are newer, they do not replace color themes –- each approach has its advantages. Differences between them include:


Custom themes were first implemented in XEmacs sometime before 2002 - the idea was to extend the Customization library to handle themes. They were ported to GnuEmacs and made part of the distribution sometime before 2005. They were quite rudimentary then.

The color themes library was developed separately. It addresses things, such as color schemes (faces), that were not covered by custom themes. Color themes also do not use Customize.

Some relevant old message threads - and


In order to use custom themes, their .el files have to reside in a directory contained in the ‘custom-theme-load-path’ variable, which defaults to `~/.emacs.d’. If you want to put your themes in custom subdirectories in order not to pollute the `~/.emacs.d’ folder, you can add them to the list with:

    (add-to-list 'custom-theme-load-path "<themefolder>")

If you have lots of themes which you want to group inside a themes folder such as `~/.emacs.d/themes’, the following snippet allows you to conveniently add all its subfolders to the theme load path:

    (let ((basedir "~/.emacs.d/themes/"))
      (dolist (f (directory-files basedir))
        (if (and (not (or (equal f ".") (equal f "..")))
                 (file-directory-p (concat basedir f)))
            (add-to-list 'custom-theme-load-path (concat basedir f)))))

CategoryFaces CategoryCustomize