# ef-themes: colourful Emacs themes built on top of modus-themes

> The ef-themes are a collection of light and dark GNU Emacs themes whose goal is colourful yet legible output, and since version 2.0.0 they are derivatives of the modus-themes rather than standalone, which means every Modus customisation and command applies to them. The repository ships around forty theme files including accessibility variants for deuteranopia and tritanopia.

**protesilaos/ef-themes** — Colourful and legible themes for GNU Emacs

- Repository: https://github.com/protesilaos/ef-themes
- Stars: 589 · Forks: 33
- Language: Emacs Lisp
- License: GPL-3.0
- Published: 2026-10-22 · Updated: 2026-10-22 · Language: en
- Canonical page: https://hysenlabs.com/projects/protesilaos-ef-themes

## What the ef-themes are and where they sit next to modus-themes

The ef-themes are a collection of light and dark themes for GNU Emacs whose stated goal is to provide colourful, in the documentation's word pretty, yet legible options for users who want something with a bit more flair than the modus-themes.

The relationship to modus-themes is the defining fact. Starting with version 2.0.0, the ef-themes are built on top of the modus-themes, which means that all customisation options of the Modus themes apply to the Ef themes, and the same is true of all Modus commands that load a theme. Both projects are by the same author.

The mechanism for this is a minor mode. Enabling ef-themes-take-over-modus-themes-mode sets up the arrangement so that the Modus commands consider only the Ef themes. The alternative is modus-themes-include-derivatives-mode, which blends Ef and Modus into one collection instead of replacing one with the other.

The distinction matters in practice. Take-over mode means your theme rotation command cycles through Ef themes only, so a habit of pressing the rotate key never drops you back into a Modus theme unexpectedly. Include-derivatives mode keeps both in the pool, which is what you want if you like some Modus themes and some Ef ones and want them mixed in one rotation.

The audience is Emacs users who want more colour than they get from a deliberately conservative theme set, and who are willing to accept that the whole package now depends on another one.

The package is published on GNU ELPA under the name ef-themes, with an official manual, a change log and sample pictures, and the source lives on both GitHub and GitLab.

## The use-package block that shows the whole arrangement

The documentation gives one configuration block that demonstrates the integration, and it is worth reading closely because it shows that the setup is a use-package form with an init section, a bind section and a config section.

```elisp
(use-package ef-themes
  :ensure t
  :init
  ;; This makes the Modus commands listed below consider only the Ef
  ;; themes.  For an alternative that includes Modus and all
  ;; derivative themes (like Ef), enable the
  ;; `modus-themes-include-derivatives-mode' instead.  The manual of
  ;; the Ef themes has a section that explains all the possibilities:
  ;;
  ;; - Evaluate `(info "(ef-themes) Working with other Modus themes or taking over Modus")'
  ;; - Visit <https://protesilaos.com/emacs/ef-themes#h:6585235a-5219-4f78-9dd5-6a64d87d1b6e>
  (ef-themes-take-over-modus-themes-mode 1)
  :bind
  (("<f5>" . modus-themes-rotate)
   ("C-<f5>" . modus-themes-select)
   ("M-<f5>" . modus-themes-load-random))
  :config
  ;; All customisations here.
  (setq modus-themes-mixed-fonts t)
  (setq modus-themes-italic-constructs t)

  ;; Finally, load your theme of choice (or a random one with
  ;; `modus-themes-load-random', `modus-themes-load-random-dark',
  ;; `modus-themes-load-random-light').
  (modus-themes-load-theme 'ef-summer))
```

Three things are visible here. The theme itself is loaded with a Modus command, modus-themes-load-theme, with a symbol such as ef-summer, which confirms that the Ef themes are addressed through the Modus API rather than a separate loader. The rotation, selection and random loading keys are all bound to Modus commands, so the take-over mode is what makes those keys operate on Ef themes.

And the customisation variables are Modus variables, set to t here for mixed fonts and italic constructs. Since the Ef themes are derivatives, setting a Modus variable changes the Ef themes, and that is the whole point of the arrangement.

The documentation also points you at the manual section titled Working with other Modus themes or taking over Modus, reachable through the info system or through a specific manual anchor, and it says the manual explains all the possibilities.

## The theme roster, including colour vision variants

The repository layout is the theme roster, because every theme is one file at the top level of the tree.

There are around forty of them, and the names are seasonal and natural: arbutus, arcadia, atlantis, autumn, bio, cherie, cyprus, day, dark, dream, eagle, fig, frost, kassio, light, night, orange, owl, reverie, rosa, spring, summer and winter. Several come in a light and a dark pair, including duo, elea, maris, melissa, trio and symbiosis.

The pair naming follows the light and dark convention, so ef-duo-dark-theme.el sits next to ef-duo-light-theme.el, and loading one of a pair gives you a matched colour scheme for either preference. The standalone ef-dark-theme.el and ef-light-theme.el are the generic entries, and ef-themes.el is the package entry point that the others register into.

The part of the roster that stands out is the accessibility set. There are four files dedicated to colour vision deficiency: ef-deuteranopia-dark-theme.el, ef-deuteranopia-light-theme.el, ef-tritanopia-dark-theme.el and ef-tritanopia-light-theme.el. Deuteranopia and tritanopia are two of the three common forms of colour blindness, and shipping a specific theme for each is a deliberate design choice rather than an accident of naming.

The repository also holds contrast-ratios.org at the top level, which is the file to read if you want the numbers rather than the impression, and a doclicense.texi file alongside the COPYING file, which is the standard GNU Emacs convention for shipping the licence text in the manual.

## Why a theme package carries contrast ratios and a changelog

Two files in the tree tell you what the author thinks a theme package owes its users.

The first is contrast-ratios.org. A theme is a claim that a set of foreground and background colours can be read for long periods without eye strain, and that claim is checkable. A file of contrast ratios in the repository makes the claim auditable rather than aesthetic, and it is the reason the project can justify describing itself as legible rather than merely colourful. For a user choosing between forty themes, the file is more useful than the screenshots, because screenshots are taken on one display in one lighting condition and ratios are a property of the colours themselves.

The second is CHANGELOG.org, an Org mode changelog rather than a Markdown one, paired with a separate online change log at the author's site. Emacs users live in Org mode, so an Org changelog is a stylistic choice, but it is also a signal that the project takes the packaging conventions of the Emacs ecosystem seriously. There is also a README.org alongside README.md, which is the same idea applied to the readme.

The licence is GPL-3.0, with the COPYING file at the root and the doclicense.texi file that embeds the licence terms in the manual. That is the standard arrangement for a GNU ELPA package, and it is worth knowing that a theme package licensed under GPL-3.0 is a slightly awkward thing to embed in a proprietary product, even though most people use these themes inside Emacs itself and never redistribute them.

The repository is not archived, and the last push was on 2026-10-16, so the tree is current. It publishes no GitHub releases, so the version history lives in the changelog rather than in tags you can pin a package to.

## Where ef-themes is the wrong choice

The first limit is the dependency. Since version 2.0.0 the package is a derivative of modus-themes, and that is a design decision rather than an implementation detail. If you want a colourful theme and nothing else, you now install two packages and enable a mode that makes one of them take over the other's commands. The trade is that you get every Modus customisation option for free, and you give up a standalone package.

The second is that a theme is a low-stakes tool with a high-stakes reputation. Colours that look striking in a screenshot can be genuinely hard to read at 8pt in a terminal, and no amount of package quality fixes that for a particular screen and a particular pair of eyes. The contrast-ratios.org file helps, but it does not account for your monitor, your font, your terminal background or your own vision. If your priority is legibility over colour, the Modus themes this project is built on top of are the more conservative choice, and the project says as much by positioning Ef as the option with more flair.

The third is the scope of what a theme can fix. A theme changes colours and font weights. It does not change the fact that a mode line shows too much, that a completion popup covers half the buffer, or that a particular face is unreadable in a particular mode. Teams that need a coherent, readable editing environment usually end up customising faces on top of whichever theme they load, and the derivative arrangement helps here only for the options the parent package exposes.

Compare that with writing your own theme with the built-in customize interface and saving it to a file. The difference in approach is that a custom theme file captures your colours and nothing else, while a theme package gives you a maintained palette, an accessibility set and a parent package's tuning options. For a single user with strong preferences, the custom file is less machinery. For a user who wants colour but not a maintenance burden, a package is the cheaper answer.

## Installation through ELPA and the packaging story

The package is published on GNU ELPA under the name ef-themes, which means it is installable from the built-in package system in Emacs without a third party repository. The configuration block in the documentation relies on that with :ensure t in the use-package form, so the package is fetched and activated if it is missing.

The manual, the change log and the sample pictures are all published on the author's site, and the source is mirrored on both GitHub and GitLab, so there is a choice of remote and a second place to read the documentation.

The backronym in the project documentation is worth a mention because it says something about the tone: Eclectic Fashion in Themes Hides Exaggerated Markings, Embellishments, and Sparkles. That is the project's own framing of what it is doing, a deliberately decorative take on a package family built for restraint, and it is also a useful warning to a reader who assumes a colourful theme will behave like a conservative one.

For the AGENTS.md and CLAUDE.md files in the tree, the pattern is the same one seen elsewhere in the Emacs package world, where the project has been set up so that a coding agent can work on it with the conventions written down. The .dir-locals.el file at the root is the usual Emacs convention for per-directory settings, and the .gitignore is present as expected.

What to verify before adopting is narrow. Check that modus-themes is installed and loadable first, since the Ef themes will not do anything useful without it. Then decide between take-over mode and include-derivatives mode deliberately, because that decision determines what your rotation key does. And read the contrast ratios for the specific themes you plan to use, especially the deuteranopia and tritanopia variants if you have one of those conditions, because the whole argument for this package is legibility alongside colour.

## Conclusion

ef-themes fits an Emacs user who wants more colour than the Modus themes provide and who is already running Modus, since the take-over mode makes the Modus commands and every Modus customisation apply to the Ef themes without a second configuration. It does not fit a user who wants a standalone theme package with no dependency on modus-themes, because that dependency is the design since version 2.0.0. Before adopting it, enable modus-themes-include-derivatives-mode rather than the take-over mode if you want to keep the Modus themes in the same rotation, and read the contrast-ratios.org file, since a colourful theme is only worth having if the contrast numbers hold up.

## FAQ

### What are the ef-themes for GNU Emacs?

They are a collection of light and dark themes whose goal is to provide colourful yet legible options for users who want more flair than the modus-themes provide. There are around forty themes, including paired light and dark variants and specific deuteranopia and tritanopia files.

### How do I make the Modus commands work with the ef-themes?

Enable ef-themes-take-over-modus-themes-mode, which makes the Modus commands consider only the Ef themes. The alternative is modus-themes-include-derivatives-mode, which blends Ef and Modus into one collection so both appear in the rotation.

### What changed in ef-themes version 2.0.0?

Starting with version 2.0.0 the ef-themes are built on top of the modus-themes, so all customisation options of the Modus themes apply to the Ef themes, as do all Modus commands that load a theme. The manual section on working with other Modus themes or taking over Modus explains the possibilities.

### How do I install ef-themes?

The package is published on GNU ELPA under the name ef-themes, and the documented configuration uses use-package with :ensure t, so Emacs fetches it from the built-in package archive. The source is mirrored on both GitHub and GitLab, and the manual and changelog are published on the project website.

### What licence do the ef-themes use?

The project is released under the GPL-3.0 licence, with the COPYING file at the repository root and the terms embedded in the manual through doclicense.texi. The repository also carries a CHANGELOG.org change log and a contrast-ratios.org file with the contrast data for the palettes.

## Sources

- [Issues](https://github.com/protesilaos/ef-themes/issues)
- [License: GPL-3.0](https://github.com/protesilaos/ef-themes/blob/main/LICENSE)
- [protesilaos/ef-themes on GitHub](https://github.com/protesilaos/ef-themes)
- [README](https://github.com/protesilaos/ef-themes/blob/main/README.md)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/protesilaos-ef-themes
