modus-themes 
- Description
- Elegant, highly legible and customizable themes
- Latest
- modus-themes-5.2.0.tar (.sig), 2025-Dec-31, 1.78 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).
- Package name (GNU ELPA):
modus-themes - Official manual: https://protesilaos.com/emacs/modus-themes
- Change log: https://protesilaos.com/emacs/modus-themes-changelog
- Colour palette: https://protesilaos.com/emacs/modus-themes-colors
- Sample pictures: https://protesilaos.com/emacs/modus-themes-pictures
- Git repositories:
- Backronym: My Old Display Unexpectedly Sharpened ... themes.
(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.tar.lz | 2025-Nov-07 | 235 KiB |
| modus-themes-5.0.0.tar.lz | 2025-Nov-01 | 234 KiB |
| modus-themes-4.8.1.tar.lz | 2025-Jul-10 | 224 KiB |
| modus-themes-4.8.0.tar.lz | 2025-Jun-11 | 225 KiB |
| modus-themes-4.7.0.tar.lz | 2025-Apr-17 | 223 KiB |
| modus-themes-4.6.0.tar.lz | 2024-Oct-27 | 221 KiB |
| modus-themes-4.5.0.tar.lz | 2024-Aug-21 | 215 KiB |
| modus-themes-4.4.0.tar.lz | 2024-Mar-31 | 212 KiB |
| modus-themes-4.3.0.tar.lz | 2023-Sep-19 | 206 KiB |
| modus-themes-4.1.1.tar.lz | 2023-Feb-23 | 194 KiB |
| modus-themes-3.0.0.tar.lz | 2022-Oct-28 | 138 KiB |
| modus-themes-2.7.1.tar.lz | 2022-Oct-01 | 137 KiB |
| modus-themes-2.6.0.tar.lz | 2022-Aug-19 | 137 KiB |
| modus-themes-2.5.0.tar.lz | 2022-Aug-03 | 136 KiB |
| modus-themes-2.4.1.tar.lz | 2022-Jun-01 | 133 KiB |
| modus-themes-2.0.0.tar.lz | 2021-Dec-25 | 118 KiB |
| modus-themes-1.7.0.tar.lz | 2021-Nov-18 | 122 KiB |
| modus-themes-1.6.0.tar.lz | 2021-Sep-29 | 117 KiB |
| modus-themes-1.5.0.tar.lz | 2022-Feb-10 | 114 KiB |
| modus-themes-1.4.0.tar.lz | 2021-May-25 | 108 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.2.0 on 2025-12-31
This version fixes some bugs, adds a new feature for those who want to derive a theme from Modus, and makes other small quality-of-life refinements.
The modus-themes-with-colors should work at all times
In the transition to version 5.0.0, I inadvertently introduced
regressions to the behaviour of the modus-themes-with-colors macro.
This macro let binds the current theme's palette around arbitrary
Elisp expressions, which allows users to access the named colours
therein. In versions 5.0.0 and 5.1.0 the macro could not read
variables defined outside its scope. Users needed to write an eval
around it, which I did not like. Now the macro should not require such
workarounds: it basically is a let that should work as expected
everywhere.
This was fixed over a series of Git commits related to issue 170: https://github.com/protesilaos/modus-themes/issues/170. Thanks to Alexandr Semenov and realazy for reporting the problems and testing my revisions.
The modus-themes-generate-palette function to quickly get a palette
Users or package developers who want to create a theme on top of Modus
can now get a kickstart by defining their palette with the help of the
new modus-themes-generate-palette function. This function is meant
to return a complete palette, given a list of basic colours. Users can
thus experiment with their new theme while knowing that what they got
contains all the definitions; definitions that they may then modify
further (e.g. to define different semantic mappings than the defaults
such as, for example, to have (fg-heading-1 red-warmer) instead of
what originally is (fg-heading-1 fg-main)).
I have written extensive documentation in the manual, which includes a complete example of a Solarized theme that is built on top of Modus. If you have any questions, you are welcome to contact me.
Convenience commands to select only dark or light themes
The commands modus-themes-select-dark and modus-themes-select-light
use minibuffer completion to load a theme. The completion candidates
are filtered to only dark or light themes, respectively.
This is effectively the same as calling the command modus-themes-select
with a prefix argument (C-u by default).
Remember that we also have the commands modus-themes-load-random,
modus-themes-load-random-dark, and modus-themes-load-random-light.
Otherwise use the command modus-themes-rotate.
Improved prompt for theme selection
The minibuffer prompt used by the various Modus commands to select a
theme now has a grouping function in place: it shows the current theme
at the top and then all other themes grouped by their dark or light
background. This makes it easier to find a relevant theme, especially
if lots of them are present, such as when modus-themes-include-derivatives-mode
is enabled and relevant packages/themes are available (e.g. my
ef-themes and standard-themes).
Semantic colours for transient.el (e.g. in Magit)
The transient.el concept of "semantic colours" is now supported.
This is used by default in Magit to denote the different types of
keys, such as those that exit the transient, keep it active, move to
another transient, and the like. Users who prefer the old style where
all key bindings looked the same must customise the user option
transient-semantic-coloring.
…
…