GNU-devel ELPA - modus-themes

modus-themes Atom Feed

Description
Elegant, highly legible and customizable themes
Latest
modus-themes-5.1.0.0.20251114.80500.tar (.sig), 2025-Nov-14, 1.69 MiB
Maintainer
Protesilaos Stavrou <info@protesilaos.com>
Website
https://github.com/protesilaos/modus-themes
Browse ELPA's repository
CGit or Gitweb
Badge
Manual
modus-themes

To install this package from Emacs, use package-install or list-packages.

Full description

Modus themes for GNU Emacs

IMAGES HERE: https://protesilaos.com/emacs/modus-themes-pictures.

Highly accessible themes, conforming with the highest standard for colour contrast between background and foreground values (WCAG AAA). They also are optimised for users with red-green colour deficiency.

The themes are very customisable and provide support for a very wide range of packages. Their manual is detailed so that new users can get started, while it also provides custom code for all sorts of more advanced customisations.

Since August 2020, the original Modus themes (modus-operandi, modus-vivendi) are built into Emacs version 28 or higher. Emacs 28 ships with modus-themes version 1.6.0. Emacs 29 includes version 3.0.0. Emacs 30 provides a newer, refactored version that thoroughly refashions how the themes are implemented and customized. Such major versions are not backward-compatible due to the limited resources at my disposal to support multiple versions of Emacs and of the themes across the years.

Starting with version 5.0.0 of the modus-themes, other packages can be built on top to provide their own "Modus" derivative themes. The manual has a section about building on top of Modus. My ef-themes and standard-themes are done in this way (versions 2.0.0 and 3.0.0, respectively).

(use-package modus-themes
  :ensure t
  :demand t
  :init
  ;; Starting with version 5.0.0 of the `modus-themes', other packages
  ;; can be built on top to provide their own "Modus" derivatives.
  ;; For example, this is what I do with my `ef-themes' and
  ;; `standard-themes' (starting with versions 2.0.0 and 3.0.0,
  ;; respectively).
  ;;
  ;; The `modus-themes-include-derivatives-mode' makes all Modus
  ;; commands that act on a theme consider all such derivatives, if
  ;; their respective packages are available and have been loaded.
  ;;
  ;; Note that those packages can even completely take over from the
  ;; Modus themes such that, for example, `modus-themes-rotate' only
  ;; goes through the Ef themes (to this end, the Ef themes provide
  ;; the `ef-themes-take-over-modus-themes-mode' and the Standard
  ;; themes have the `standard-themes-take-over-modus-themes-mode'
  ;; equivalent).
  ;;
  ;; If you only care about the Modus themes, then (i) you do not need
  ;; to enable the `modus-themes-include-derivatives-mode' and (ii) do
  ;; not install and activate those other theme packages.
  (modus-themes-include-derivatives-mode 1)
  :bind
  (("<f5>" . modus-themes-rotate)
   ("C-<f5>" . modus-themes-select)
   ("M-<f5>" . modus-themes-load-random))
  :config
  ;; Your customizations here:
  (setq modus-themes-to-toggle '(modus-operandi modus-vivendi)
        modus-themes-to-rotate modus-themes-items
        modus-themes-mixed-fonts t
        modus-themes-variable-pitch-ui t
        modus-themes-italic-constructs t
        modus-themes-bold-constructs t
        modus-themes-completions '((t . (bold)))
        modus-themes-prompts '(bold)
        modus-themes-headings
        '((agenda-structure . (variable-pitch light 2.2))
          (agenda-date . (variable-pitch regular 1.3))
          (t . (regular 1.15))))

  (setq modus-themes-common-palette-overrides nil)

  ;; 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 'modus-operandi))

Old versions

modus-themes-5.1.0.0.20251112.122931.tar.lz2025-Nov-12 238 KiB
modus-themes-5.1.0.0.20251112.61406.tar.lz2025-Nov-12 238 KiB
modus-themes-5.1.0.0.20251110.110249.tar.lz2025-Nov-10 238 KiB
modus-themes-5.1.0.0.20251109.95724.tar.lz2025-Nov-09 235 KiB
modus-themes-5.1.0.0.20251107.55336.tar.lz2025-Nov-07 235 KiB
modus-themes-5.0.0.0.20251104.84424.tar.lz2025-Nov-04 234 KiB
modus-themes-5.0.0.0.20251101.51253.tar.lz2025-Nov-01 234 KiB
modus-themes-4.8.1.0.20251031.152938.tar.lz2025-Oct-31 230 KiB
modus-themes-3.0.0.0.20221028.45155.tar.lz2022-Oct-28 138 KiB
modus-themes-1.7.0.0.20211220.213131.tar.lz2021-Dec-20 122 KiB

News

This document contains the release notes that are included in each tagged commit on the project's main git repository: https://github.com/protesilaos/modus-themes.

The newest release is at the top. Since the notes are meant to be in plain text format, I copy them verbatim.

For further details, please consult these additional resources:

Manual
https://protesilaos.com/emacs/modus-themes
Screenshots
https://protesilaos.com/emacs/modus-themes-pictures

5.1.0 on 2025-11-07

This version fixes a critical bug in the modus-themes-with-colors macro. In short, it was not working as before or was not working at all. Now it should do the right thing.

Thanks to Alexandr Semenov for reporting a relevant bug in issue 170 and for helping me test the results: https://github.com/protesilaos/modus-themes/issues/170.

Thanks to Stéphane Marks for testing some configurations with the latest stable Emacs version as well as with builds from emacs.git. This was done via a private channel and I am sharing this information with permission.

Also thanks to Stefan Monnier for monitoring my commits as I was trying to refactor the modus-themes-with-colors macro. Some comments were posted on the emacs-devel mailing list, as well as a patch that I ended up applying and then reverting (check the commit log for the technicalities): https://lists.gnu.org/archive/html/emacs-devel/2025-11/msg00114.html.

Apologies to everyone for the inconvenience! This was a tricky bug. The good thing is that it compelled me to improve several parts of the code.

This version also includes a clarification in the manual about building a theme on top of Modus:

Web page
Visit https://protesilaos.com/emacs/modus-themes#h:86eb375b-9be4-43ce-879a-0686a524a63b.
Info manual
Evaluate (info "(modus-themes) Build on top of the Modus themes").

In short, it mentions that a theme exists in an appropriately named file that is part of the custom-theme-load-path. Thanks to Ashton Wiersdorf for asking a related question in issue 171: https://github.com/protesilaos/modus-themes/issues/171.

5.0.0 on 2025-11-01

This is a major release. There are some small breaking changes. The big new feature is that Modus can be used as the basis for other theme projects. Two of my other theme packages, the ef-themes and the standard-themes are already done in this way: their next major versions will formalise what I have been developing for a while now (though the doric-themes will remain their own thing for the time being).

Build on top of Modus

This is of immediate interest to package developers or advanced users. It changes nothing for existing users of the Modus themes. Please refer to the manual on the matter and feel welcome to contact me if you have any questions—I am happy to help.

Evaluate:

(info "(modus-themes) Build on top of the Modus themes")

Or visit: https://protesilaos.com/emacs/modus-themes#h:86eb375b-9be4-43ce-879a-0686a524a63b.

Why build on top of Modus? To benefit from (i) the wide face coverage and extensive detail-oriented testing, (ii) the use of palette mappings, (iii) the palette preview done with modus-themes-list-colors or related, (iv) the inclusion of the derivative theme in the workings of all Modus commands that load a theme, like modus-themes-rotate and modus-themes-select (see the new minor mode modus-themes-include-derivatives-mode).

Derivative themes can be as simple as a few extra colours on top of, say, modus-operandi. They can also be more involved, with new palette mappings and custom faces that use them. Such themes can … …