Change Log of the Modus themes

This document contains the release notes that are included in each tagged commit on the project's main git repository:

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:



Modus themes version 1.7.0

By Protesilaos Stavrou <> on 2021-11-18

The present entry records the changes made to the project since the
release of version 1.6.0 on 2021-09-29.  There have been more than 60
commits since then.

Every modification pertaining to colour combinations referenced herein
is implemented in accordance with the primary accessibility objective of
the themes for a minimum contrast ratio of 7:1 between background and
foreground values in their given combination (the WCAG AAA standard).
Edits also account for colour-coding that is optimised for the needs of
users with red-green colour deficiency (deuteranopia).

To access the URL of the manual visit this web page:
<>.  Or read it from Emacs by
evaluating this form:

    (info "(modus-themes) Top")

The themes are built into Emacs version 28 (next stable release), and
are available on GNU ELPA as well as other archives.  This release is
the first one that is included with Emacs 29, or else the 'master'
branch in emacs.git.

Customisation options

+ The 'modus-themes-no-mixed-fonts' has been deprecated and replaced by
  the 'modus-themes-mixed-fonts'.  This is a breaking change for users
  who want to use "mixed fonts": they must set the new variable to

  As the name implies, the new variable changes the meaning of the
  feature to make it opt-in by default.  This is consistent with the
  principle of least surprise, as users may not know why some fonts look
  different than others in certain cases.

  Thanks to Christian Tietze for clarifying the doc string of this new
  user option in merge request 51:

  For context, "mixed fonts" refers to a design where spacing-sensitive
  constructs, such as code blocks and Org tables, inherit from the
  'fixed-pitch' face to remain monospaced (and properly aligned) at all
  times.  Depending on the user's configurations, the 'fixed-pitch' face
  may not use the typeface that the user expects.

  The manual provides information on how to set the desired fonts by
  editing the 'default', 'fixed-pitch', and 'variable-pitch' faces.

+ The new 'modus-themes-mode-line-padding' can be used to control the
  apparent padding of the mode line when the user option
  'modus-themes-mode-line' includes the 'padded' property.  The padding
  must be a positive integer (otherwise the code would be needlessly
  complex to guard against values that make the mode line look awkward,
  like anything lower than -3 or maybe even -2).

  Thanks to Guilherme Semente and Manuel Uberti for the feedback in
  issue 245: <>.

  Note that the out-of-the-box style of the themes has a padding of 1
  (technically a ':line-width' of 1 for the ':box' attribute), whereas
  the default style of Emacs has it at -1.  This is a design choice to
  avoid an overlap between the outer boundaries of a font's glyphs and
  the borders of the mode line, when using certain common typefaces at
  various point sizes.  Such an overlap can hinder readability.

  The manual contains a new Do-It-Yourself (DIY) section with detailed
  code samples on how to apply a negative value.

+ The new 'modus-themes-intense-markup' option can be set to non-nil to
  make constructs such as inline code and verbatim text more colourful.
  This has a general utility, though its consideration was prompted by a
  phenomenon reported by Stefan Kangas in issue 238 where the overlay of
  the 'hl-line-face' overrides the subtle background these constructs
  use and can thus make them virtually indistinguishable from ordinary
  text: <>.

  Such is the standard behaviour of 'hl-line-mode' and there is nothing
  a theme can (or rather "should") do about it.  Thanks to Stefan Kangas
  for the feedback.

+ The 'modus-themes-headings' option can now accept and apply an exact
  font weight such as 'semibold' or 'light'.  (The list of available
  weights is the value of the 'modus-themes--heading-weights' internal
  variable.)  This supersedes the now-deprecated 'no-bold' property:
  'no-bold' is henceforth understood as the presence of a 'regular'

  Recall that this user option is an alist and can be used to target
  heading levels individually, which further reinforces the utility of
  this new property.

  Thanks to Christian Tietze for suggesting this idea in issue 248:
  <>.  And
  thanks to Daniel Mendler for refining its implementation in commit
  54bfd62, which was sent as a patch file (yes, we accept those and I
  actually prefer them over a web app's UI).

+ The 'modus-themes-org-agenda' has seen improvements to its 'event' key
  (this is an alist that has multiple keys).  It now accepts a 'varied'
  property which differentiates between (i) plain timestamp entries and
  (ii) entries that are generated from either the diary or a symbolic
  expression.  The 'varied' property combines with the other available
  properties to particularise their effects.  Consult the doc string or
  the manual for the technicalities.

  Thanks to Gustavo Barros for the detailed commentary in issue 241:

+ The 'modus-themes-lang-checkers' now accepts a 'faint' property.  This
  has the effect of toning down the colours in use.  By default, the
  only colour is that of the underline, though more can be added by
  combining the properties accepted by this user option.  Consult its
  doc string or the manual for further details.

  Thanks to Morgan Smith for suggesting the idea in issue 239:

Add support for new packages or face groups

+ 'company-tooltip-deprecated' face.  Thanks to Roman Rudakov for the
   feedback in issue 247: <>.

+ 'corfu-default' face.  Thanks to Daniel Mendler (Corfu's developer)
  for the feedback in issue 254:

+ 'image-dired' package (Emacs 29).  Thanks to Stefan Kangas for making it
  happen in emacs.git and for the feedback in issue 250:

+ 'nano-modeline' package.

+ 'vertico-quick' package.  Thanks to Nicolas De Jaeghere for the
  contribution in merge request 48:

Changes to existing faces or face groups

+ Added support for the new Org agenda faces that improve the
  contextuality of various views.  We implemented those upstream for Org
  version 9.5 in close cooperation with Gustavo Barros.  Thanks to
  Gustavo for the detailed feedback in issue 241:
  <>.  The
  thread about the patch upstream:

+ Refined Org agenda date faces in the interest of consistency and in
  accordance with the aforementioned change.  Thanks again to Gustavo
  Barros for the discussion in issue 241.

+ Applied the 'shadow' face more consistently across all contexts where
  only a subtle foreground value is expected.  This design choice makes
  it possible for users to manually edit the foreground colour of
  'shadow' to something even more subtle than the 'fg-alt' palette
  variable we use, which maps to a gray colour (e.g. they could use

+ Implemented a subtle background colour to the 'widget-inactive' face.
  This makes it easier to discern inactive buttons, checkboxes, and the
  like, in contexts such as the Customize User Interface.  Thanks to
  Stefan Kangas for the feedback in issue 242:

+ Tweaked 'file-name-shadow' to also use italics (inherit from the
  'italic' face) in order to be more easy to distinguish it from
  ordinary text in the minibuffer.

  Recall that the manual documents the meaning of inheriting from the
  'bold' and 'italic' faces instead of hardcoding a bold weight and an
  italic slant, respectively.  In short: users can change the weight to
  what they want (e.g. semibold) and/or use distinct font families.

+ Amplified the style of Version Control (VC) warnings and errors to let
  them draw more attention to themselves (because these indicators need
  to be acted upon).

+ Recoloured the 'custom-group-tag' face to make it fit better in its
  context and be consistent with the rest of the themes' established

+ Made marks for selection in Dired, Ibuffer, and related, conform with
  the 'modus-themes-success-deuteranopia' option.  This means that they
  use blue colours when the option is non-nil, instead of their default
  shades of green.

+ Adjusted the box width of key bindings for Emacs 28 or higher.  They
  should no longer cause any alignment issues.  This style is now used
  throughout the themes, including in transient views (e.g. Magit) which
  were the exception before.  Thanks to Manuel Uberti and Kevin Fleming
  for the feedback in issue 232:


+ Wrote a brief description of every user option in the manual.  Also
  covered its type, as in boolean, alist, et cetera.

+ Corrected the mode line border width for one combination of properties
  in the 'modus-themes-mode-line' option.  This should now have the same
  height as all others:

      (setq modus-themes-mode-line '(accented borderless))

+ Ensured that mode line attributes would not be set to nil, but kept at
  an 'unspecified' value instead, where relevant.  This avoids problems
  with [faulty] code that unconditionally depends on something that does
  not exist, as in the following while ':box' is nil:

      (face-attribute 'mode-line :box)

+ Expanded, reworded, or otherwise improved the manual, based on the

Thanks once again to everyone involved!


Modus themes version 1.6.0

By Protesilaos Stavrou <> on 2021-09-29

This entry records the changes made to the project since the release of
version 1.5.0 on 2021-07-15.  There have been around 70 commits since

Every colour-related modification referenced herein is always
implemented in accordance with the primary accessibility objective of
the themes for a minimum contrast ratio of 7:1 between background and
foreground values in their given combination (the WCAG AAA standard).
Such edits also account for colour-coding that is optimised for the
needs of users with red-green colour deficiency (deuteranopia or

Here is the URL of the manual: <>.
Or read it from Emacs by evaluating this form:

    (info "(modus-themes) Top")

The themes are built into Emacs version 28 (current development target),
and are available on GNU ELPA as well as other archives.  This release
is the final one for the emacs-28 branch, as that gets cut as the next
stable release of GNU Emacs.  Future releases will target Emacs 29 once
that becomes the new 'master' branch.

Customisation options

[ Themes need to be reloaded for changes to take effect. ]

+ Introduced the new 'modus-themes-tabs-accented' boolean option.  When
  set to non-nil, it renders the background of all tab interfaces in a
  shade of blue.  Those interfaces are tab-bar (built-in), tab-line
  (built-in), and Centaur tabs.

  - The background "accented" colour is the same as the one used for
    mode lines when 'modus-themes-mode-line' is configured accordingly.

+ Tweaked the 'modus-themes-mode-line' to accept a 'padded' symbol as
  part of the list of properties it can read.  This will increase the
  spacing around the mode lines' text, making the line taller overall
  but also more spacious.

  Thanks to Manuel Uberti for making the proposal and providing feedback
  in issue 228: <>.

+ Added the 'modus-themes-scale-small' which complements the existing
  scale values with one that is meant to be smaller than the base
  height.  This option is reserved for special cases and is currently
  only used as an opt-in feature in the Org agenda.

+ Expanded the 'modus-themes-org-agenda' with more parameters:

  - The current date can now also be underlined.
  - Date headings can be scaled/enlarged in size.
  - Events, like those of the Diary or sexp entries, can be customised.

  Consult the manual or the variable's doc string for the details.

+ Removed the obsoleted aliases 'modus-themes-slanted-constructs' and
  'modus-themes-scale-5'.  Those are superseded by the more
  appropriately named 'modus-themes-italic-constructs' and

  Thanks to Nicolas De Jaeghere for the patch in merge request 47:

Faces and face groups

+ Make the 'prodigy' faces for red/green/yellow inherit from the faces
  'error'/'success'/'warning', respectively.  This is done to (i) avoid
  duplication and (ii) ensure that the green/success colour coding is
  consistent with the goal of the themes to empower users with red-green
  colour deficiency.  The boolean option that changes all such greens to
  shades of blue is 'modus-themes-success-deuteranopia'.

+ Assigned the ':extend' attribute to the 'org-code' face.  This is
  necessary when the Org source contains lines that start with a colon
  sign.  Those are interpreted as code blocks.  For example:

      :  #+BEGIN_SRC emacs-lisp
      :    (defun in-interval (bounds el)
      :      (and (>= el (car bounds)) (<= el (cadr bounds))))
      :  #+END_SRC

  With the ':extend' in place, the background stretches to the edge of
  the window, thus giving those lines a uniform rectangular shape.  For
  inline uses of 'org-code', the background should remain limited to the
  span of the text.

+ Broadened support for 'marginalia' faces in two phases.

  - The first pertained to the file permissions that are shown when
    completing against file paths.  Their style is similar to what
    'dired+' or the 'direfl' packages provide, however we have taken
    care to optimise the interface for the purposes of completion
    UIs---where things can look like Dired, we make them alike, but
    where they must differ, we differentiate the designs accordingly.
    There can be no compromises or arbitrary constraints.

    Also read: <>.

  - The second batch covered all sorts of extra classes that provide
    granular control over the appearance of Marginalia instances.
    Refinements also had to be made to already-supported faces for the
    sake of achieving consistency across the various Marginalia

    Also read: <>.

+ Refined 'diredfl' and 'dired+' faces.  For the various "priv" faces,
  the intent is to increase the difference in hueness between adjacent
  file permissions (the changes are minor, but they do change the
  overall result).  Numbers are toned down so that they do not clash
  with dates.  The file suffix no longer uses cyan to stand out more in
  detailed views.

+ Made 'icomplete-selected-match' (Emacs28) more legible by aligning its
  presentation with metaphors that are estaslished across the
  modus-themes.  Thanks to Kévin Le Gouguec (peniblec) for noting the
  inconsistency with the new face upstream and for writing the patch for
  it in merge request 50:
  Also thanks to Manuel Uberti for confirming that things would look
  consistent in the comments' section of that merge request.

+ Fixed faulty inheritance for the 'web-mode-keyword-face'.  It should
  now properly copy the attributes of 'font-lock-keyword-face'.

+ Made inheritance of the new 'help-key-binding' (Emacs28 key) the
  default for all faces that need to style key bindings.

  In Emacs 28 all key bindings are automatically displayed with the face
  'help-key-binding' which uses some new face attributes to draw a
  cleaner box around it.  Given that the themes must work with earlier
  versions of Emacs, we cannot inherit it unconditionally so we added
  the relevant conditionality.  It is nice to offer this feature to
  those who use the themes on Emacs 28.  Older versions retain the
  previous style of a blue colour coupled with a bold weight.

  The exception to this rule is the transient.el faces (this is the
  pop-up window used by Magit, among others---transient.el is now built
  into Emacs).  The box effect creates unpredictable misalignments, so
  we default to the old key binding style for those.

  Thanks to Manuel Uberti and Kevin Fleming for their feedback in issue
  232: <>.

+ Added support for the new 'notmuch-jump-key' face.  I contributed this
  face in commits c37c9912, 5cc106b0 to the Notmuch git repo:

+ Updated the 'bookmark-face' (Emacs28) as it has been changed upstream
  to be a fringe indicator instead of an in-buffer, line-wide background

+ Aligned Ediff faces with other 'modus-themes-diffs' styles.  Before we
  would differentiate a "focus state", though that is now considered
  surplus to requirements.  The notion of a "focus state" only make
  sense in Magit which applies variegated colour-coding to diff hunks
  based on their state.  Whereas non-active Ediff changes are grayed
  out, so there is no need for further colour-coding nuances.  The most
  noticeable change is with:

      (setq modus-themes-diffs 'bg-only)

  As noted in the commit message of 64c74ae (from 2021-09-04):

      If users think this change is for the worse, we can always define a
      helper function like this:

          (defun modus-themes--ediff-style (bgonly default)
            "Diff style for Ediff.
          BGONLY and DEFAULT depend on the value of `modus-themes-diffs'.
          The former is more subtle."
            (if (eq modus-themes-diffs 'bg-only)
                (list bgonly)
              (list default)))

      And apply it thus:

          `(ediff-current-diff-A ((,class :inherit ,@(modus-themes--ediff-style

  No feedback was received towards that end in about a month, so we
  consider the change to be acceptable, without prejudice to the
  possibility of future updates.

+ Unified the styles of 'org-agenda-calendar-sexp', 'org-agenda-diary',
  and 'org-agenda-calendar-event'.  This is not a user-facing change but
  an internal refactoring to avoid repetition.  It also makes things
  easier for the implementation of the 'modus-themes-org-agenda' (as
  mentioned above).

+ Ensured that the 'bookmark-menu-bookmark' face inherits from the
  'bold' face.  By default it hardcodes the bold weight, whereas we
  instruct it to inherit the 'bold' face.  A user can thus change the
  ':weight' of that face to whatever they want, like semibold,
  extrabold, etc.  We do this throughout the themes for bold and
  italics---consider it a "hidden feature" of sorts.  Check the manual
  for more on the matter:

      (info "(modus-themes) Configure bold and italic faces (DIY)")

+ Provided support for tab-bar groups (Emacs28).  Specifically the faces
  'tab-bar-tab-group-current' and 'tab-bar-tab-group-inactive'.

  Thanks to Adam Porter (alphapapa) for the feedback in issue 8 over at
  the Github mirror: <>.

+ Decoupled the 'stripes' face from that of 'hl-line-face'.  This is
  because the stripes are not meant to change depending on the value of
  the user option 'modus-themes-hl-line'.

+ Revised the red shade of "flagged" entries in mu4e and notmuch.  Those
  are now consistent with Gnus.  The shade of red that was used before
  was closer to the orange side of the spectrum whereas the current has
  hints of blue (a cherry colour) and thus combines better with the cyan
  and blue that prevail in those interfaces.  These are fine margins,
  though the effect is noticeable regardless.

+ Configured the new 'ansi-color' faces (Emacs28) which are used by
  shells and terminals (among others).  Thanks to Manuel Uberti for
  reporting the changes to upstream Emacs in issue 236:

+ Expanded support for EMMS faces, pertaining to its browser views.
  Thanks to Feng Shu (tumashu) for bringing those to my attention in
  issue 11 over at the Github mirror:

+ Styled the new 'tab-line-tab-modified' face (Emacs28).  It should now
  use a faint red colour to denote changes to the underlying file.
  Thanks to Adam Porter (alphapapa) for bringing it to my attention in
  issue 12 over at the Github mirror:

+ Configured the single face that the 'cursor-flash' package has to
  offer.  Thanks to Manuel Uberti for the feedback in issue 231:

+ Included 'elpher' in the list of supported packages by means of
  covering the heading faces it implements.

+ Recalibrated certain dedicated colours for inactive tabs and tweaked
  tab faces to (i) marginally improve the default aesthetic and (ii)
  harmonise it with the style of 'modus-themes-tabs-accented'.

+ Removed the foreground attribute from all markup faces that are meant
  to denote emphasis in italics.  That is because such faces are
  typically composed with others, so we do not wish to inadvertently
  override any other colour that would otherwise have taken effect.

+ Wrote the faces for upstream Org that improve the contextuality of
  various agenda views (included in version 9.5).  This was done in
  close collaboration with Gustavo Barros who offered detailed feedback
  in issue 208 (which also led to the creation and eventual expansion of
  the 'modus-themes-org-agenda' user option):

  Four new faces improve certain styles and offer more flexibility for
  some Org agenda views: 'org-agenda-date-weekend-today',
  'org-imminent-deadline', 'org-agenda-structure-secondary',
  'org-agenda-structure-filter'.  They inherit from existing faces in
  order to remain backward-compatible.

  Quoting from <>:

      + The 'org-imminent-deadline' is useful to disambiguate generic
        warnings from deadlines.  For example, a warning could be
        rendered in a yellow colored text and have a bold weight,
        whereas a deadline might be red and styled with italics.

      + The 'org-agenda-structure-filter' applies to all tag/term
        filters in agenda views that search for keywords or patterns.
        It is designed to inherit from 'org-agenda-structure' in
        addition to the 'org-warning' face that was present before (and
        removes the generic 'warning' face from one place).  This offers
        the benefit of consistency, as, say, an increase in font height
        or a change in font family in 'org-agenda-structure' will
        propagate to the filter as well.  The whole header line thus
        looks part of a singular design.

      + The 'org-agenda-structure-secondary' complements the above for
        those same views where a description follows the header.  For
        instance, the tags view provides information to "Press N r" to
        filter by a numbered tag.  Themes/users may prefer to
        disambiguate this line from the header above it, such as by
        using a less intense color or by reducing its height relative to
        the 'org-agenda-structure'.

      + The 'org-agenda-date-weekend-today' provides the option to
        differentiate the current date on a weekend from the current
        date on weekdays.

Other patches I have made to, inter alia, emacs.git and org.git with
regard to faces are documented in previous change log entries.


+ Removed references to old versions of the themes from before their
  refactoring in version 1.0.0.  Those old packages no longer exist.
  Users must install the 'modus-themes' and then load either of
  'modus-operandi' or 'modus-vivendi'.

+ Included various extensions of the Vertico package in the list of
  indirectly supported packages.  Those define faces which either
  inherit from basic ones that we already support or use colours that
  are consistent with our accessibility target.

+ Referenced 'side-hustle', 'tide', 'bufler' as an indirectly supported
  packages for the same reasons.

+ Simplified time-stamp local variables that are used in modus-themes.el
  to show the time the file was edited.  We apply 'time-stamp-pattern'
  instead of setting multiple time-stamp variables.  Thanks to Stephen
  Gildea for the patch, which was sent to me via email (yes, you can
  always do that).

+ Updated the manual's "acknowledgements" section to name all new
  contributors to code/ideas/feedback.

+ Furnished information on how to configure the 'highlight-parentheses'
  package and extend its faces for use with the themes.  The entry
  provides a complete Elisp implementation.

+ Improved the code samples for the prism.el setup that users may wish
  to set up by themselves.  The new lists of colours work better when
  Prism's colouration is limited to a small set of hues.

+ Deleted trailing whitespace in the manual which had adverse effects
  when trying to compile the over at emacs.git.  Thanks
  to Philip Kaludercic for the patch in merge request 49:

Thanks again to everyone involved.  Looking forward to see the Modus
themes, version 1.6.0, as part of the next stable release of Emacs.


Modus themes version 1.5.0

By Protesilaos Stavrou <> on 2021-07-15

This entry outlines the set of changes made to the project since the
release of version 1.4.0 on 2021-05-25.  There have been over 130
commits since then.

Every colour-related modification referenced herein is always
implemented in accordance with the primary accessibility objective of
the themes for a minimum contrast ratio of 7:1 between background and
foreground values in their given combination (the WCAG AAA standard).
Such edits also account for colour-coding that is optimised for the
needs of users with red-green colour deficiency (deuteranopia or

Here is the URL of the manual: <>.
Or read it from Emacs by evaluating this form:

    (info "(modus-themes) Top")

The themes are built into Emacs version 28 (current development target),
and are available on GNU ELPA as well as other archives.

Customisation options

Overview of new style of sets of properties

Several variables now accept a list of symbols as a value.  Those
represent properties, which can be combined with each other to realise
the possible styles.  The idea was to simplify their specification in
order to make them easier to both maintain and extend.  Thanks to Philip
Kaludercic for introducing this concept in issue 210:

The variables are:

+ 'modus-themes-prompts' by Philip Kaludercic in merge request 43:

+ 'modus-themes-mode-line' by Philip Kaludercic in merge request 40:

+ 'modus-themes-lang-checkers' by Philip Kaludercic in merge request 46:

+ 'modus-themes-org-agenda'
+ 'modus-themes-links'
+ 'modus-themes-headings'
+ 'modus-themes-hl-line'
+ 'modus-themes-paren-match'
+ 'modus-themes-region'
+ 'modus-themes-syntax'

Take 'modus-themes-syntax' as an example.  Up until version 1.4.0, it
would only accept a symbol, signifying a predefined style.  So we had
the possible value 'faint' and another 'faint-yellow-comments'.  To make
a third variant of the "faint" aesthetic, such as by combining it with
the "alt syntax" and/or "green strings", we would need to write new
presets in the form of 'faint-green-strings', 'faint-alt-syntax',
'faint-alt-syntax-green-strings', 'faint-green-strings-yellow-comments',
'faint-alt-syntax-green-strings-yellow-comments'.  That would have been
inefficient, hence why it was not done.

With the new approach of defining a list of properties, those
combinations are all possible.  Such as:

    (setq modus-themes-syntax '(faint alt-syntax))

    (setq modus-themes-syntax '(yellow-comments alt-syntax green-strings))

The order in which the properties are set is not significant.

The doc string of each of the aforementioned variables, or the
corresponding entry in the manual, provides guidance on how to configure
things.  The old forms will continue to work for the time being, though
they are considered deprecated and will stop being supported at a future

Changes in stylistic variants for variables with sets of properties

+ The meaning of the "alt syntax" style in 'modus-themes-syntax' has
  been redefined.  In the past, it used to have green-coloured strings
  and doc strings.  Those are now red.  Some other changes have been
  implemented to make the overall looks more consistent.  Users who
  liked the old style can retain it by passing this list of properties:

      (alt-syntax green-strings)

  New styles for the "faint" aesthetic are possible, here shown as lists
  of properties:

      (faint green-strings)
      (faint alt-syntax)
      (faint alt-syntax green-strings)

  To each of those the 'yellow-comments' property can be added as well.

  Consult the doc string or the manual for the technicalities and code

+ The 'modus-themes-hl-line' no longer has styles that include only an
  underline.  Those proved to be problematic under certain circumstances
  and were thus removed.

  Minor changes have been implemented to make the following combination
  of properties more consistent, by colourising the underline:

      (accented intense underline)

+ The 'modus-themes-paren-match' now has styles that include an
  'underline' property.  Those extend the old options, such as:

      (bold intense underline)

+ The 'modus-themes-headings' have an improved set of styles for the "no
  text color" aesthetic.  Those involve the 'monochrome' property, which
  can now yield results that include a background (whereas before it was
  just colourless text for the headings, optionally without a bold
  weight).  As this is an alist, here is an example (always check the
  docs for fully fledged code samples):

      (setq modus-themes-headings
            '((1 . (background overline))
              (2 . (overline background rainbow))
              (t . (monochrome no-bold background))))

  To allow a heading level N to retain its original style, a 't' value
  can be passed.  In the previous version of the themes, it was possible
  to use 'nil' for the same purpose, though that is no longer valid.  In
  those cases, the fallback value of the alist will be used instead,
  such as what is noted above:

      (t . (monochrome no-bold background))

+ The 'modus-themes-links' provide several new possible styles, due to
  an expanded set of properties that includes, among others, 'bold',
  'italic', and 'background'.  The documentation covers the details.

+ The 'modus-themes-lang-checkers' can now attain a style that uses a
  prominently coloured background in addition to what was available
  before as a subtle background and the other variants.

New variables

+ The 'modus-themes-org-agenda' provides the means to refashion the
  entirety of the Org agenda buffer.  The value it accepts is an alist,
  with some keys expecting a symbol and others a list of properties.
  The minutia are covered in its doc string.  A possible configuration
  can look like this:

      (setq modus-themes-org-agenda
            '((header-block . (variable-pitch scale-title))
              (header-date . (grayscale workaholic bold-today))
              (scheduled . uniform)
              (habit . traffic-light)))

  'modus-themes-org-agenda' supersedes the old variable that was specific
  to the Org habit graph: 'modus-themes-org-habit'.  There now is a
  'habit' key which accepts the same values as before, plus a new style
  that is optimised for users with red-green colour deficiency:
  'traffic-light-deuteranopia'.  Please consult the doc string of
  'modus-themes-org-agenda' or the relevant entry to the manual.

  Thanks to Gustavo Barros for contributing to the creation of this
  variable as well as to all other changes in the relevant faces that
  were done in the interest of usability.  A full report about
  'modus-themes-org-agenda' with screen shots is available here:

  A patch has been sent to upstream Org, with its review pending, which
  improves upon some of the areas we had identified:

+ The 'modus-themes-inhibit-reload' controls a new behaviour of
  automatically reloading the active theme when an option is set via the
  Custom interfaces or with 'customize-set-variable'.  To opt-in to this
  feature, set the variable to a 'nil' value.

  Thanks to Philip Kaludercic for implementing this in merge request 40:

  In the development phase of this option, a bug was identified
  pertaining to recursion, as reported by Gustavo Barros in issue 213:
  <>.  Changes
  have been made to remove that possibility, as found in merge request
  45: <>.

  A thread was started on the emacs-devel mailing list to inquire upon
  the technicalities of this option, but it did not gain any traction:

  As such, we have decided to take our chances by pressing on with this
  feature.  Users who are interested in it are encouraged to give it a
  try and report any possible complications.  Issue 213 remains open.

+ The 'modus-themes-italic-constructs' is the new name of the variable
  'modus-themes-slanted-constructs'.  The term "slant" was considered
  too vague or technical and some users could have missed the meaning of
  this option.

+ The 'modus-themes-scale-5' is renamed to 'modus-themes-scale-title' to
  better convey its utility.

Changes to the manual

+ Rewrote or introduced the documentation for all the customisation
  options mentioned above.  Also updated relevant code samples, such as
  in the manual's introduction to the customisation options.  Evaluate
  this form for an annotated code overview:

      (info "(modus-themes) Customization Options")

+ Rephrased a reference to "gamma ray values" as "gamma values".  Thanks
  to Anders Johansson for the contribution in merge request 42:

+ Removed the Org macro that would insert the build date in the manual's
  introduction.  This was required to make the file reproducible,
  otherwise it would keep changing each time a new version of Emacs was
  built.  Refer to Emacs bug#48661 by Glenn Morris:

+ Included note on tweaking the key hints that the Avy package produces.
  This is in response to issue 215 by Rudolf Adamkovič:
  <>.  Thanks to
  Nicolas De Jaeghere for providing the text.

+ Wrote a note on how to control the underlines that are generated in
  compilation-mode buffers and related.  It is about configuring the
  variable 'compilation-message-face'.

+ Documented how to configure the colours that are applied to the names
  of the days in the 'M-x calendar' interface.  The relevant variable is

+ Elaborated on a "do it yourself" (DIY) guide on how to benefit from
  the hidden feature of the themes about how they handle the bold weight
  and the italic slant.  In short, we do not hardcode values and thus
  make it easy for users to specify the particularities of what it means
  for a face to have a 'bold' or 'italic' attribute.

Faces and face groups

New entries

Newly supported packages:

+ 'ledger-mode'.  Thanks to Pengji Zhang for the feedback in issue 202:

+ 'gotest'.  Thanks to Jerry Zhang for the feedback in issue 226:

+ 'css-mode'

New faces for already supported groups:

+ 'shr-h1', 'shr-h2', 'shr-h3', 'shr-h4', 'shr-h5', 'shr-h6' of the
  shr.el library (simple HTML renderer, as experienced in, for example,
  EWW).  Those are available for Emacs28, with a patch by me:

+ 'apropos-button' as a generic face that fontifies faces in apropos
  buffers.  Available for Emacs28, with a patch by me:

+ 'selectrum-mouse-highlight'.  This makes the mouse hover effect for
  selectrum look the same as in most other contexts.  Thanks to okamsn
  for the feedback in issue 203:

Review of existing entries

+ Added an ':extend' property to 'next-error' face.  This face is used
  for pulse effects.  It is good to have them extend to the edge of the
  window, so that they are easier to spot.  Thanks to Gustavo Barros for
  the feedback in issue 200, which is about pulse.el:

+ Tweaked the various Apropos faces.  The idea was to remove the colour
  from the pseudo headings so that we would not get an exaggerated
  result of too much variety in the buffer (e.g. that of 'M-x apropos').
  The individual buttons retain their style as links, meaning that they
  are governed by the variable 'modus-themes-links'.

+ Revised 'whitespace-line' face to make it look like a warning, as it
  ought to be.  Thanks to Pengji Zhang for the feedback in issue 204:

+ Reworked the colour-coding of the Hydra and Transient packages.  These
  are meant to tone down some excesses with the standard red and to
  adapt other colours to it.  Thanks to Gustavo Barros for providing
  suggestions and helping me tweak those in issue 206:

+ Recoloured 'transient-argument' to improve its uniqueness in its
  context and to better comply with the expectation of hydra-style
  colour coding, as noted right above.

+ Made the 'org-agenda-done' face conform with the customisation option
  'modus-themes-success-deuteranopia'.  This means that it will be
  coloured in blue instead of green when the option is set to a non-nil

+ Grayed out the foreground of the Org block delimiter lines on the
  premise that any extra colouration was not needed, given the presence
  of a gray background and the overall markup of the block.

+ Toned down the colouration of the 'org-code' face, so that it is
  consistent with 'org-verbatim' as well as the colours used in opening
  and closing lines of blocks.  Thanks to Gustavo Barros for suggesting
  this change in issue 206, though it went through a couple of reviews:

+ Simplified the inheritance of the 'fixed-pitch' face, which is used
  for internal purposes to ensure alignment of elements in buffers that
  must cope with mixed font configurations, such as an org-mode file
  with 'M-x variable-pitch-font' enabled.

  [ Recall that the option 'modus-themes-no-mixed-fonts' can disable
    this feature.  Also note that the 'mixed-fonts' package, or
    equivalent, is not needed while using the Modus themes (though there
    is nothing wrong with having them together). ]

+ Reduced the overall intensity of 'org-mode-line-clock-overrun'.
  Thanks to Gustavo Barros for the feedback in issue 208:

+ Simplified or otherwise tweaked several Org agenda faces to render
  possible the new 'modus-themes-org-agenda' variable, as documented
  above.  Thanks to Gustavo Barros for the feedback in issue 208:

+ Increased ever so slightly the foreground colour of the 'highlight'
  face.  This can help improve the perception of highlights, such as
  upon hovering over a link with the mouse.  Thanks to Rudolf Adamkovič
  for reporting the potential problem in issue 216:

+ Prevented the override of the 'diff-context' face when users assign a
  'bg-only' value to the 'modus-themes-diffs' variable.  This makes it
  consistent with the intent of this style, which is to work with a
  non-nil value for 'diff-font-lock-syntax' (basically to allow the
  usual colour highlights of the underlying code syntax in diff

+ Ensured consistency of all prompt-related faces by introducing a new
  face, 'modus-themes-prompt', that is inherited by all others (all
  prompt styles are controlled by the variable 'modus-themes-prompts').
  This was originally implemented with the 'comint-highlight-prompt'
  face, though that could potentially lead to undefined faces if the
  comint library was not loaded.  Whereas the 'modus-themes-prompt'
  guarantees that we pass a known face at all times.  Thanks to Philip
  Kaludercic for bringing this potential bug to my attention in a
  comment to merge request 43:

+ Removed the background colour from the 'widget-inactive' face.  It
  would create problems in some cases, such as in Custom buffers for
  multiple choice options.

+ Refined 'calendar-weekend-header' and 'calendar-weekday-header' to
  emulate the design of physical calendars and remain truthful to the
  expectations set by the default configuration of the calendar.el
  library.  Weekends now use a faint red, while weekdays are rendered in
  the same subtle gray they had before.  The underlying principle is to
  make weekends convey a subtle warning to the effect that "this is not
  a day for work" (notwithstanding precarious economic realities).  As
  noted above, there is an entry in the manual on how to make all days
  look the same, be it gray or faint red.  Evaluate this form:

      (info "(modus-themes) Note on calendarel weekday and weekend colors")

Request for feedback on a potential version 2.0.0 of the Modus themes

While we maintain a cautious stance towards preserving the default
styles, there are some cases where we might be forced to introduce
backward-incompatible changes.

Three such cases that can benefit from user feedback are:

+ Issue 196 on 'modus-themes-no-mixed-fonts'

+ Issue 198 on 'modus-themes-hl-line'

  [ Note that 'modus-themes-hl-line now accepts a list of properties as
    described in the opening sections of this entry. ]

+ Issue 218 on 'modus-themes-diffs'


+ Recalibrated the value of the colour 'bg-hl-line-intense' in the
  palette 'modus-themes-vivendi-colors'.  The change should be
  practically indecipherable, though it slightly improves things in
  certain contexts.

+ Refined the intensity of the three main yellow colours in

+ Introduced a new 'modus-themes-faces' group so that those are
  decoupled from the customisation options in the various Custom
  buffers.  Thanks to Philip Kaludercic for the patch in merge request
  39: <>.

+ Updated the manual's "Acknowledgements" section to include all new
  users who contributed to the project.

Thanks again to everyone involved!


Modus themes version 1.4.0

By Protesilaos Stavrou <> on 2021-05-25

This entry records the changes made to the project since the release of
version 1.3.0 on 2021-04-17.  There have been around 100 commits in the
meantime, as is the norm.

If you are coming from older versions, please consult the change log
entry for version 1.0.0 with regard to the breaking changes that were

Every colour-related modification is always done in accordance with the
overarching accessibility objective of the themes for a minimum contrast
ratio of 7:1 between background and foreground values in their given
combination (the WCAG AAA standard).

URL of the official manual: <>.  Or
read it with Emacs' Info reader by evaluating this form:

    (info "(modus-themes) Top")

Remember that the themes are built into Emacs version 28 (current
development target), and are available on GNU ELPA, as well as other

Customisations variables

+ Redefined the style of 'fg-only' that 'modus-themes-diffs' accepts, so
  that it no longer uses a red-green colour coding, but applies a
  red-blue distinction instead.  The symbol 'fg-only' is a deprecated
  alias for the more descriptive 'fg-only-deuteranopia'.

  This is done because green text on a light background is one of the
  worst combinations for the purposes of legibility, as it does not
  stand out in its context and thus forces undesirable compromises.
  Whereas red and blue work well in this case, while making the style
  accessible to users with red-green colour deficiency (deuteranopia).
  To avoid inconsistencies between Modus Operandi and Modus Vivendi, we
  replace green with blue in both themes.  A full report is available in
  issue 183 which was created on April 21, 2021:

+ Introduced the boolean 'modus-themes-success-deuteranopia' which
  replaces all instances of green with blue in contexts where a
  red-green colour coding is in effect (e.g. Org TODO vs DONE keywords,
  isearch current match...).

+ Implemented 'modus-themes-mail-citations' to control the colouration
  of cited text in email-related buffers, such as Gnus or message.el.
  It accepts values nil, 'faint', and 'monochrome'.  By default (the nil
  value) the text of citations cycles through blue, green, red, yellow
  depending on the level of depth.

+ Expanded the set of options for 'modus-themes-mode-line' to encompass
  the values 'borderless-accented', 'borderless-accented-3d', and
  'borderless-accented-moody'.  Those are variations of existing styles.
  The complete list:

  - nil (default)
  - 3d
  - moody
  - borderless
  - borderless-3d
  - borderless-moody
  - accented
  - accented-3d
  - accented-moody
  - borderless-accented
  - borderless-accented-3d
  - borderless-accented-moody

+ Renamed the non-nil values that 'modus-themes-org-blocks' accepts from
  'grayscale', 'rainbow' to 'gray-background' and 'tinted-background',
  respectively.  The new symbols better describe their effect on Org
  source blocks, namely, that they affect the background of the block
  rather than the foreground.  The old symbols will still work but are
  considered deprecated aliases of the newer ones.

+ Altered the intensity of the 'modus-themes-hl-line' option
  'accented-background' to a more noticeable shade of cyan/teal.  The
  old style was too subtle to have the desired effect.  The value
  'underline-accented' is not affected by this change, as it still uses
  the same subtle background it did before in combination with a more
  pronounced underline colour.

+ Deleted all deprecation warnings that concerned the transition from
  version 0.13.0 of the themes to 1.0.0.  Those had been in effect for
  several months, spanning four tagged releases.

Faces or face groups

+ Reconsidered the use of colour in all email-related citation faces to
  avoid exaggerations and reduce complexity.  Colour values have been
  tweaked to tone down their overall intensity, while the number of
  colours has been reduced to four.  Gnus and Mu4e have faces for more
  levels of citation depth, though those will simply repeat the
  four-colour cycle.

+ Made the 'message-mml' face look consistent with the rest of the
  buffer while composing an email by changing its foreground colour from
  a yellow to a cyan variant.

+ Refined several faces in the Notmuch group in the interest of harmony:

  - Individual message headers in 'notmuch-show-mode' use bold text in
    addition to their existing subtle background to better stand out in
    their context. The face is 'notmuch-message-summary-face'.

  - Tags are no longer set unconditionally to a bold typographic weight.
    They become such for unread threads in 'notmuch-search-mode'
    buffers, as well as for headers of 'notmuch-show-mode'.

  - Removal and addition of tags is now denoted by a strike-through and
    an underline effect, respectively, whereas before they both used
    underlines with the only difference being their colour.

  - The subject line in 'notmuch-search-mode' buffers uses the main
    foreground instead of a dimmed one.  The field of matching authors
    has a tweaked foreground to keep the tabular view easy to read.

  - All cryptography-related faces are simplified to not show a coloured
    background but only use a foreground colour instead.

+ Removed direct support for 'counsel-notmuch' as it already inherits
  from the relevant notmuch faces.  The package is thus considered
  indirectly supported.

+ Refrained from setting a background to the 'csv-separator-face' as it
  would inevitably colourise the negative space in the tabular view
  created by 'csv-align-mode'.  A red text colour is used instead, even
  though this is not common practice: it is easier to spot for small,
  single characters, such as a comma or a semicolon that is meant to
  have a special meaning.  Thanks to Kevin Fleming for reporting the
  problem and for offering feedback on the choice of colour in issue
  194: <>.

+ Distinguished between ordinary links and widget buttons by removing
  the underline from the latter (the 'widget-button' face) and altering
  the shade of its foreground colour.  Such widgets are used in Emacs'
  Custom interfaces and can also be found in the default Notmuch "hello"
  buffer that runs 'notmuch-hello-mode'.

+ Tweaked the Ediff current faces to be consistent with 'diff-mode' and
  related.  In practice, this only applies when 'modus-themes-diffs' is
  set to a value of 'fg-only-deuteranopia', as it adds a dim background
  to the current diff hunk.  All other styles of 'modus-themes-diffs'
  look the same as before while using Ediff.

+ Simplified the faces of 'corfu' to match the current state of the
  upstream project.  Thanks to Daniel Mendler (its developer) for
  reporting this in issue 184:

+ Refined all Eshell faces so that the output of 'ls' is consistent with
  the overall aesthetic of the themes.  Also made 'eshell-prompt'
  inherit from 'comint-highlight-prompt' to look the same as other such
  prompts (all are configurable by 'modus-themes-prompts').

+ Revised 'eshell-prompt-extras' and 'eshell-git-prompt' to use colours
  and typographic weight that better match the style of the various
  configurations they offer.

+ Simplified 'eshell-syntax-highlighting' to inherit from the standard
  Eshell faces, where appropriate.

+ Adjusted the colour of 'centaur-tabs-active-bar-face' and removed the
  bespoke 'fg-tab-accent' colour from 'modus-themes-operandi-colors' and
  'modus-themes-vivendi-colors' that was only used by it (and which
  should have never been introduced to begin with).

+ Updated the 'tab-bar-groups' faces to match changes upstream.  Thanks
  to Fritz Grabo (its developer) for the patch in merge request 35:

+ Changed the Ibuffer title and group faces to better differentiate
  between group titles and special or non-file-visiting buffers.  Thanks
  to Nicolas De Jaeghere for the patch in merge request 37:

+ Ensured that all faces that denote a "success" state, or which are
  expected to be coloured in green in a red-green binary, can use an
  appropriate blue colour (or colour combination that involves blue)
  instead when 'modus-themes-success-deuteranopia' is set to a non-nil

+ Added support for the new 'bookmark-face' in Emacs version 28.  This
  means that the built-in bookmark.el library is directly supported by
  the themes.  This face can be disabled by setting 'bookmark-fontify'
  to nil.  Thanks to Mark Barton for reporting the presence of this new
  face and for providing feedback on its style in issue 189:

+ Aligned 'hes-mode' ('highlight-escape-sequences') with the standard
  font-lock faces for regexp grouping.  This means that it conforms with
  changes to the 'modus-themes-syntax' variable.

+ Reconfigured the 'org-quote' face to adapt its style depending on the
  value of 'modus-themes-org-blocks'.  The default is a subtle blue/cold
  foreground colour against the main background.  When a value of
  'gray-background' is assigned to 'modus-themes-org-blocks', the text's
  colour becomes that of the main foreground in order to maintain a good
  level of legibility.  Thanks to Rudolf Adamkovič for the feedback in
  issue 190: <>.

+ Refashioned the 'show-paren-match-expression' face to make it apply a
  bespoke background colour and not override the expression's foreground
  colours.  This face is used by 'show-paren-mode' when the
  customisation variable 'show-paren-style' is set to the 'expression'
  value.  Thanks to Rudolf Adamkovič for the feedback in issue 191:

+ Made headings level 8 use a fine shade of magenta by default instead
  of gray (notwithstanding user changes to 'modus-themes-headings').
  This should have a negligible difference in Org or Outline buffers,
  but is more noticeable when editing Elisp in Emacs28 while also using
  'outline-minor-mode' and with 'outline-minor-mode-highlight' set to
  'override'.  That is because several top-level forms use that heading
  level with those configurations.

Documentation (the manual)

+ Incorporated a sample configuration block with all customisation
  variables and with comment annotations of their available options, in
  an attempt to make it easier for users to discover what the themes

+ Replaced all instances of "modeline" with "mode line" for consistency
  with the Emacs style.  Thanks to Rudolf Adamkovič for the patch that
  started this process in merge request 33:

+ Wrote note on setting mode line faces that indicate the state of
  'god-mode'.  Thanks to Rudolf Adamkovič for the feedback in issue 187:
  <>.  Also
  thanks to Rudolf for updating the applicable hook in merge request 34:

+ Listed 'org-mode' variables that affect fontification in blocks:
  'org-src-fontify-natively', 'org-fontify-whole-block-delimiter-line',
  and 'org-fontify-quote-and-verse-blocks'.  This complements the
  already documented variables 'org-fontify-whole-heading-line' and
  'org-fontify-done-headline' that pertain to headings.

+ Included note on fontifying inline Latex expressions in Org buffers.
  Thanks to Rudolf Adamkovič for the feedback in issue 190:

+ Elaborated on the use of 'face-remap-add-relative' by means of sample
  code that cycles through arbitrary colours for the 'region' face.
  This is filed under the "Do It Yourself" (DIY) section.

+ Provided a DIY method for adapting the fontification of Org source
  block delimiter lines to the value of 'modus-themes-org-blocks'.

+ Expanded the DIY entry on overriding the saturation of the active
  theme's colours with a method that combines the programmatic approach
  with manual overrides.  The user can thus specify the colour values
  they want to override and let the rest be handled by Elisp.

+ Introduced a section with answers to Frequently Asked Questions (FAQ)
  about the design of the themes as well as recommendations on how to
  ensure optimal reading conditions or start thinking about them.  The
  questions are:

  - Is the contrast ratio about adjacent colors?
  - What does it mean to avoid exaggerations?
  - Why are colors mostly variants of blue, magenta, cyan?
  - What is the best setup for legibility?


+ Removed superfluous code from internal functions and adapted their
  indentation to make them easier to read.

+ Recalibrated some values in 'modus-themes-vivendi-colors' to ensure
  consistency in luminance with other colours that are used in their
  context.  Those are subtle changes that can only be discerned in
  side-by-side comparisons of the before and after states.  Thanks to
  André Alexandre Gomes for the feedback in issue 193:

+ Changed the saturation and hueness of the bespoke 'fg-comment-yellow'
  in 'modus-themes-operandi-colors' and 'modus-themes-vivendi-colors' to
  better contrast with its context, while still keeping its luminance
  consistent with its role as a colour for comments in code.  This is
  used when 'modus-themes-syntax' is configured appropriately (read its
  doc string or consult the manual).

+ Attempted to add explicit support for the faces of the built-in
  pulse.el library, but ultimately opted against them as the doc string
  of 'pulse-highlight-face' advises against customising it, even though
  it is not clear from the source code in emacs.git what the problem
  could be.  We shall reconsider this case for the next release cycle.
  Thanks to Gustavo Barros for the feedback on several aspects of this
  topic in issues 185 and 200:

  - <>
  - <>

+ Took the feedback of John Haman in issue 199 as a reminder to complete
  the set of possible values for the 'modus-themes-mode-line' variable:


Modus themes version 1.3.0

By Protesilaos Stavrou <> on 2021-04-17

This entry records the changes introduced to the project since the
publication of version 1.2.0 (2021-03-04).  There have been around 100
commits in the meantime, as is the norm with all releases hitherto.

Every colour-related modification documented herein conforms with the
overarching accessibility objective of the themes for a minimum contrast
ratio of 7:1 between background and foreground values in their given
combination (the WCAG AAA standard).

As the official manual is referenced several times throughout this log,
make sure to store its URL: <>.  Or
read it from Emacs' Info reader by evaluating this form:

    (info "(modus-themes) Top")

If you are coming from older versions, please consult the change log
entry for version 1.0.0 with regard to the breaking changes that were

Remember that the themes are built into Emacs28, and are available on
GNU ELPA, as well as other archives.

Customisation options

+ The old 'modus-themes-intense-hl-line' boolean variable has been
  replaced by 'modus-themes-hl-line', which provides several options for
  how to style the current line of 'hl-line-mode'.  To retain the old
  effect, one must do this:

      ;; Replacement for (setq modus-themes-intense-hl-line t)
      (setq modus-themes-hl-line 'intense-background)

  The list of possible values:

    1. nil (default)
    2. intense-background
    3. accented-background
    4. underline-neutral
    5. underline-accented
    6. underline-only-neutral
    7. underline-only-accented

  The doc string of 'modus-themes-hl-line' as well as the manual
  describe the specifics.  Thanks to Manuel Uberti for the feedback in
  commit b020592:

+ The 'modus-themes-mode-line' variable now accepts three new "accented"
  styles that complement the existing set:

    1. nil (default)
    2. 3d
    3. moody
    4. borderless
    5. borderless-3d
    6. borderless-moody
    7. accented
    8. accented-3d
    9. accented-moody

+ The 'modus-themes-region' is extended with two new options of an
  "accent" background:

    1. nil (default)
    2. no-extend
    3. bg-only
    4. bg-only-no-extend
    5. accent
    6. accent-no-extend

+ The default value of 'modus-themes-headings' for per-level styles can
  now be set to nil.  This fixes an inconsistency between the fallback
  value, which accepted nil, and the per-level styles which did not.
  Thanks to Mauro Aranda for reporting this in issue 163:

  Please read the manual for the specifics of this variable, as it is an
  alist that accepts several possible combinations.

Updates to the manual

+ Rewrote the sections that cover the aforementioned customisation

  - For 'modus-themes-mode-line', we had to revise the recommendation
    for setting 'face-near-same-color-threshold' to 45000.  That value
    is appropriate for the 'moody' and 'borderless-moody' options.
    Whereas for 'accented-moody' the number should be raised to 70000.
    Thanks to Nicolas De Jaeghere for providing this piece of

+ Rephrased the GNU Free Documentation License quote to match the style
  of other manuals that are also built into Emacs.

+ Documented 'org-mode' variables that affect the looks of various
  fontification styles.

+ Simplified the 'kbd' macro that is declared in to
  allow GNU ELPA's build system to parse the file for Emacs 26.

+ Documented existing support for 'tab-bar-mode' and 'tab-line-mode'.

+ Wrote a note on how to configure the 'dimmer.el' library by Neil
  Okamoto, in order to guarantee consistent results with the themes.
  The key is to use the RGB colour space instead of CIELAB.

+ Included note on shr.el fonts and how those are used by EWW and

+ Added a "Do-It-Yourself" (DIY) section on how to remap buffer-local

+ Detailed a DIY method to make the buffer-local backdrop of a pdf-tools
  page use a distinct colour than the default white for Modus Operandi.
  Extended the same principle to Modus Vivendi and described how to
  adapt to theme changes (such as via 'modus-themes-toggle').  Thanks to
  Utkarsh Singh for providing feedback on this topic in issue 175:

+ Elaborated on DIY techniques to programmatically override the
  saturation of all colours specified by the active Modus theme.  Thanks
  to user pRot0ta1p for the feedback in issue 166:

Support for packages

These are added to the already comprehensive list of explicitly
supported packages:

+ corfu
+ embark

+ pandoc-mode.  Thanks to Farasha Euker for the feedback in issue 171:

+ tab-bar-groups
+ telega
+ vertico

Also added support for the 'help-key-binding' face which is part of
Emacs 28.

Changes to already supported faces or face groups

+ Renamed all internal faces that the themes defined from
  "modus-theme-*" to "modus-themes-*".

+ Refashioned all Ediff faces in the process of a major review of this
  tools' overall design.  The manifold changes are:

  - All inactive diffs respect the underlying fontification
    (e.g. programming syntax highlighting).  Before they would override
    it with a gray foreground.

  - All inactive diffs have been toned down, as their background is a
    finer shade of gray than the prominent one that was used before.

  - There no longer is a visual distinction between even and odd
    inactive diffs (by means of different shades of gray).  We are of
    the opinion that such subtleties, whose utility is marginal at best,
    have no place in themes that are designed for accessibility.

  - All bespoke gray colour combinations that were only intended for
    those inactive diffs have thus been removed from each theme's

  - Active diffs follow the same style as diff-mode, to ensure
    theme-wide consistency (all diff styles are controlled by the
    variable 'modus-themes-diffs').

  This topic was discussed at length (with screenshots) in issue 169:
  <>.  Thanks to
  peniblec and Nicolas De Jaeghere for their feedback.

+ Made 'smerge-markers' and 'vdiff-closed-fold-face' look like the
  headings in 'diff-mode' in the interest of consistency, especially
  while configuring the 'modus-themes-diffs' variable.

+ Ensured consistency between all faces that pertain to key bindings in
  contexts where the hint to the key is active, in that pressing the key
  performs the action (e.g. Magit's transient buffers, which-key,...).
  The 'help-key-binding' for Emacs 28 is not included in this group,
  because it applies in cases where the keys are not active, such as in
  Help buffers.

+ Refined 'epa-validity-disabled' and 'epa-validity-high' faces.  The
  former no longer uses a background, as that was considered an
  exaggeration.  While the latter is cast in a cyan hue instead of green
  for greater clarity (this relates to the general push to optimise for
  red-green colour deficiency, which means to only use green where it is
  absolutely necessary and, in such cases, to provide for a blue-ish
  alternative, as with the 'deuteranopia' value that can be assigned to

+ Reworked 'ace-window', 'avy', and 'magit-blame' faces to ensure that
  their overlays do not inherit the face properties of underlying text,
  such as a different font family or height.  Thanks to Nicolas De
  Jaeghere for the multiple merge requests and the concomitant feedback:

  - <>.
  - <>.
  - <>.
  - <>.
  - <>.

  Also thanks to Damien Cassou for reporting an intermediate problem
  with 'avy' in issue 177; a problem that was eventually addressed by
  Nicolas De Jaeghere in merge request 31 (cited above):

+ Optimised the colour combinations used by 'avy' to improve the
  distinction between consecutive characters.

+ Reduced the brightness of EWW certificate faces, as they would attract
  disproportionate attention to themselves.

+ Reworked all EWW text field and button faces to look more like what
  they are supposed to.

+ Removed the slant and distinct foreground from the 'org-quote' face,
  as they would interfere with emphasis within the quote block.  Thanks
  to Farasha Euker for the feedback in issue 171:

+ Reduced the intensity in colouration of 'org-code' and 'org-macro' in
  order to avoid exaggerations and prevent their compounding effect in
  technical documents that include a high concentration of those faces.
  They still retain their overall character and continue to look like
  variants of 'org-verbatim'.

+ Extended support for Selectrum's new 'selectrum-quick-keys-highlight'
  and 'selectrum-quick-keys-match'.

+ Adjusted a few bongo faces for improved consistency and a more
  pleasant result overall.  Quote from commit 07224cda08:

      Refine bongo faces for consistency

      The previous design was meant to keep the track fields distinct
      from each other.  However the use of yellow was not good
      aesthetically: it does not fit with the rest of the theme.

      Upon further experimentation, I realised that the album field
      (yellow) is only present when the artist and title fields are also
      available: first is the title, then the artist, and finally the
      album.  This is true even with 'bongo-join-inserted-tracks' set to
      a non-nil value.  So changing the face from yellow to a neutral
      value is safe.

      The other two faces are adapted to look better in the new context.

+ Made more command prompt faces respond to changes in the variable
  'modus-themes-prompts'.  This concerns faces from the groups cider,
  circe, erc, indium, rcirc.

+ Refashioned typescript faces, making them more prominent by default,
  while also exposing them to the value of 'modus-themes-syntax'.

+ Revised the style of 'info-colors-ref-item-command'.  This makes
  commands look the same as functions, which is technically correct.  It
  also predicates the exact style on the value of the variable

+ Made all enh-ruby-mode faces adapt to 'modus-themes-syntax'.  Same for

+ Reconfigured all ztree faces for stylistic consistency.  The
  'ztreep-diff-model-add-face' now responds to the 'deuteranopia' value
  that can be passed to 'modus-themes-diffs'.

+ Appended the ':extend t' attribute to 'gnus-summary-cancelled' and
  'gnus-summary-selected'.  These are only noticeable on Emacs 28
  following commit 88409b21c2 in emacs.git.

+ Tweaked all faces of 'highlight-changes-mode' to better deliver on the
  intent of that mode.

+ Opted to unconditionally render all 'dired-async' faces in a bold
  typographic weight, instead of basing them on a non-nil value for
  'modus-themes-bold-constructs'.  Also changed 'dired-async-message' to
  a blue foreground, which further improves the themes' performance for
  red-green colour deficiency.

+ Adjusted the colours of some 'notmuch-crypto-*' faces to better convey
  their meaning.

+ Removed remaining conditional logic for underline styles in some
  spell- and linter- related faces to ensure that all such cases are
  controlled by the variable 'modus-themes-lang-checkers' (building on
  work that had been done in the past).

+ Stopped changing 'keycast-key' to match the modeline style, as that
  diluted the meaning of the variable 'modus-themes-mode-line'.

+ Tweaked calendar and diary faces for stylistic effect, except for the
  'diary' face which has been converted from a green to a blue variant
  for the purposes of coping with cases of red-green colour deficiency.


+ Clarified the changes in the backward-incompatible transition from
  version 0.13.0 of the themes to >= 1.0.0.  Thanks to Damien Cassou for
  reporting the absence of easy-to-find information in issue 174:

+ There were three point releases after 1.2.0 which refined certain
  aspects of the themes' packaging so that they could work both as
  built-in themes for Emacs as well as in package format via the likes
  of GNU ELPA.  Those issues were eventually resolved by Basil
  L. Contovounesios:

  - Issue 162: <>.
  - Emacs bug#45068: <>.

+ Rewrote the 'modus-themes-headings' variable's declaration to improve
  its presentation in Custom interfaces.  Thanks to Mauro Aranda for
  submitting the patch for commit 1c60927ebd.

+ Applied the ':format' keyword to all 'defcustom' forms, based on the
  aforementioned patch.  This should make all options look better in the
  various Custom interfaces.  Thanks to Mauro Aranda for the feedback in
  issue 163: <>.

+ Refined the colour values 'bg-alt' and 'bg-dim' in 'modus-vivendi' to
  improve their instantiation on Textual User Interfaces.  In
  particular, recalibrated the blue channel of light so that when the
  TUI cannot render the colour directly, it defaults to a gray value
  instead of a dark blue.

+ Added a "Last-Modified" meta header to modus-themes.el, with gets
  updated automatically and uses a timestamp.  This helps users who
  track the themes' git repo directly.  Thanks to Togan Muftuoglu for
  the feedback in issue 168:

+ Expanded the palette of each theme with accent values that are
  reserved for use in the tab-bar.  Those are used by the newly
  supported 'tab-bar-groups' package.

+ Recalibrated a few colour combinations to improve their resulting
  legibility.  The changes should not be noticeable to the untrained
  eye.  Interested parties can consult commit 349ea4a943.

+ Tweaked the hueness of the 'yellow-active' colour of 'modus-operandi'.

Thanks once again to everyone involved!


Modus themes version 1.2.0

By Protesilaos Stavrou <> on 2021-03-04

This entry records the changes introduced to the project since the
publication of version 1.1.0 (2021-01-24).  There have been close to 100
commits in the meantime.

Every colour-related modification documented herein conforms with the
overarching accessibility objective of the themes for a minimum contrast
ratio of 7:1 between background and foreground values in their given
combination (the WCAG AAA standard).

As the official manual is referenced several times throughout this log,
make sure to store its URL: <>.  Or
read it from Emacs' Info reader by evaluating this form:

    (info "(modus-themes) Top")

If you are coming from older versions, please consult the change log
entry for version 1.0.0 with regard to the breaking changes that were

Prior notice: Upgrading the themes in Emacs28 and GNU ELPA

Emacs28, the current development target, now includes a 'require-theme'
function.  It is a prerequisite to upgrading the Modus themes to their
current version.  Prior to the definition of that function, the themes
could not transition from their 0.13.0 version to >=1.0.0.  Special
thanks to Basil L. Contovounesios for making it happen, as well Mauro
Aranda and Eli Zaretskii for their feedback and support.

Expect the Modus themes in upstream Emacs to be updated shortly after
the publication of this document.

GNU ELPA currently ships version 0.12.0 of the two standalone packages
'modus-operandi-theme' and 'modus-vivendi-theme'.  This will change in
the immediate future, as a new 'modus-themes' package will succeed them.
That new package will be built directly from emacs.git, as it must now
become a ':core' entity instead of being listed as an ':external' one.

Again, expect a patch to be applied to elpa.git shortly after this
document goes live.

Customisation options

[ All variables and their values are documented in the themes' manual.
  The default value is always nil. ]

+ The new boolean 'modus-themes-subtle-line-numbers' variable will make
  the effect of 'display-line-numbers-mode' more subtle when set to a
  non-nil value.  It removes the underlying background of the unfocused
  lines while toning down their foreground.

+ The 'modus-themes-diffs' variable now accepts a 'deuteranopia' value.
  This optimises for red-green colour deficiency in all modes that show
  diffs (diff-mode, ediff, Magit...).  In practice, all instances of
  green are replaced with appropriate blue hues.  For more on the
  matter, read the report which also includes pictures:

+ The 'modus-themes-syntax' variable now reads 'faint-yellow-comments'
  as a valid value.  This has the same scope as the existing 'faint'
  value with the added effect of assigning a yellow tint to comments: it
  tones down the saturation of colours that apply to code syntax
  (standard font-lock faces and others inheriting from them).

+ The 'modus-themes-links' variable is expanded to accept the new value
  of 'neutral-underline-only': it removes the foreground from the link
  and draws a neutral gray underline below it.

Refinements to existing packages or face groups

+ Refashioned all faces that pertain to emails, including Gnus, Mu4e,
  Notmuch, and the standard 'message.el' library.  This concerns the
  colours that apply to the message header keys and their values, as
  well as quote levels.

  - Introduced more contrasting hues for headings and made more
    considerate use of bold typography.  The new colour combinations are
    better suited for the task of delivering a sense of structure;
    structure that is at once effective and subtle.

  - Applied less intense colours throughout all quotation levels.

  - Revised the sequencing of hues in quotation levels to allow distinct
    levels to stand out more without relying on excessive saturation.

  - Aligned the styling of Notmuch header dates with their counterparts
    in other similar contexts, in pursuit of theme-wide consistency.

+ Rewrote the faces of EBDB to achieve a better sense of structure.

+ Refined the colour combinations of change-log and log-view buffers to
  make it easier to discern distinct elements.

+ Tweaked the colours of certain Elfeed constructs to improve the
  overall presentation of its search buffers.

+ Changed the colour combinations of 'M-x re-builder' to amplify the
  distinction between the matching regexp groups while still reducing
  their overall intensity.

+ Reconfigured the 'diff-changed' face to always extend its background
  to the edge of the window.  Such "changed" lines are visible in
  'diff-mode' buffers when the command 'diff-unified->context' is

+ Tweaked the colour combinations of ancillary faces in diff buffers
  when the variable 'modus-themes-diffs' is set to the value 'fg-only'.
  In particular:

  - Removed the subtle background from the diff hunk headings and changed
    their colour to ensure good visibility---guarantees a sense of

  - Made the context lines inherit the default foreground colour (pure
    black/white), so that it contrasts better with red, green, and
    yellow text.

  - Applied an accented foreground to the diff header.  This is to
    ensure that it is not mistaken for a diff hunk's context.

  All these guarantee that the foreground-only highlights in line-wise
  differences draw more attention to themselves.

+ Aligned all the standard hi-* faces with their default aesthetics.
  Those are used by commands such as 'highlight-symbol-at-point'.
  Thanks to Philip K. for the valuable feedback in issue 157:

+ Removed obsolete Consult faces and added new ones, so as to remain in
  sync with the latest developments in that project.  Thanks to Daniel
  Mendler (Consult's maintainer) for reporting the inconsistency in
  issue 155: <>.

  - 'consult-preview-line' now retains fontification on the current
    line, instead of applying its own foreground.

  - 'consult-narrow-indicator' is refashioned to be colour-coded in a
    consistent way with 'consult-async-split', as both denote the
    delineation of a given scope.

  - 'consult-imenu-prefix' contrasts better with text on its current
    line, while it adapts to possible customisations performed on the
    Consult front.

+ Expanded the coverage of 'marginalia' faces to two include
  'marginalia-char' and 'marginalia-type'.  This is done in the interest
  of internal consistency between the elements of this set, as their
  defaults were also accessible (they inherit from standard faces that
  we already support).

+ Opted to render the Notmuch logo in a neutral gray backdrop.  This was
  deemed necessary as the logo is an immutable image file that consists
  of black and white strokes.  Black and white are the main background
  values of 'modus-vivendi' and 'modus-operandi' respectively, which
  could lead to confusion.  The neutral gray ensures that the logo is
  visible at all times.  Thanks to Utkarsh Singh for the feedback in
  issue 122: <>.

+ Refined the dedicated colour values used for diff hunk headings, as
  seen in diff-mode buffers or Magit.  The new colours yield text that
  is easier to read by slightly toning down the combined intensity of

+ Removed the subtle background of 'diff-header' and 'diff-file-header'.
  The header's foreground and textual representation suffice to render
  it distinct in its context.

+ Tweaked 'org-agenda-structure' and 'org-scheduled' to enhance the
  usability of Org Agenda buffers.

  - Made 'org-agenda-structure' use the largest possible height that we
    expose to users: 'modus-themes-scale-5'.

  - Re-calibrated the hueness of 'org-scheduled' and amplified its
    saturation, in order to better convey the meaning of a scheduled

  Thanks to Morgan Smith for the valuable feedback in issue 153:

+ Tweaked the faces of the 'bongo' package to enhance the
  distinctiveness of the constructs they style.

+ Adjusted the overall aesthetic of calendar faces in the interest of
  theme-wide consistency.

+ Aligned the visual metaphors of 'org-code' with those of 'org-macro'
  and 'org-verbatim', by ensuring that a subtle background is present
  behind the affected text, while the foreground conforms with the norms
  of the 'modus-themes-no-mixed-fonts' customisation option.

+ Made quoted text in Info buffers look the same as 'org-verbatim' and
  Markdown's inline code.

+ Instructed the faces of 'info-colors' to inherit from appropriate
  font-lock faces.  This guarantees that everything works as intended
  with the various values of 'modus-themes-syntax'.

+ Refined the language tag of Markdown fenced blocks so that it does
  attract unwarranted attention while delivering on its intended

+ Rendered explicit the slant of ace-window hints, guaranteeing that it
  does not inherit from the underlying text.  Thanks to Nicolas De
  Jaeghere for the patch:

  [ Some more changes have been discussed, but those require tweaks to
    the upstream package. ]

+ Ensured that the 'org-tree-slide-header-overlay-face' never draws an
  overline when the variable 'modus-themes-headings' includes a relevant
  setting for heading level 1.  Such as with the following example (all
  customisation options are documented in the themes' manual):

    (setq modus-themes-headings
          '((1 . section)

+ Extended support for the new 'tab-line-tab-inactive-alternate' face as
  that occurs in Emacs28 (current development target).  It comes into
  effect when the variable 'tab-line-tab-face-functions' includes a
  value of 'tab-line-tab-face-inactive-alternating'.

Newly supported packages

+ bbdb :: Thanks to Nicolas De Jaeghere in issue 128:

+ mmm-mode :: Thanks to Davor Rotim for the feedback in issue 161:

+ quick-peek :: Thanks to Burgess Chang for the feedback in issue 151:

+ selectrum-prescient :: This new package was brought to my attention by
  Manuel Uberti.  The intent is to phase out the faces in Selectrum,
  namely 'selectrum-primary-highlight', 'selectrum-secondary-highlight',
  though those will still be supported by the Modus themes for the
  foreseeable future.

+ shortdoc

+ spray

+ terraform-mode :: Thanks to Kevin Fleming for the feedback in issue
  159: <>.

+ vc-dir (Emacs28)

Theme-related contributions to the wider community

+ Contributed the faces for 'vc-dir' in Emacs28 and applied them to all
  VC backends: <> and

+ Contributed a new face and some related tweaks to Emacs'
  'shortdoc.el': <>.

+ Added faces to the 'tab-bar-echo-area.el' package:

+ Reported issue that led to the review of the header face in
  'org-tree-slide': <>.

+ Helped refine the faces of the 'rlist.el' package:

Documentation updates

+ Wrote about the indirect support for the 'goggles' package.  I had
  helped write its faces, as was documented in the changelog for version
  1.1.0 of the themes.  Thanks to Manuel Uberti for bringing this to my
  attention in issue 158:

+ Explained that any changes to 'custom-theme-load-path' and/or
  'custom-theme-directory' should be performed before the themes are
  loaded.  Thanks to Adrian Manea for the feedback in issue 156:

+ Included the symbol 'bg-only' in the 'modus-themes-diffs' section of
  the manual.  Thanks to user "iSeeU" for reporting the omission:

+ Expanded the manual's entry on the semantics of the optional heading
  scale used by the themes (the variables 'modus-themes-scale-[1-5]').
  The values 1-4 apply to regular headings, with 4 being the largest on
  the scale.  While 'modus-themes-scale-5' is reserved for special
  headers, such as Org '#+title:' or the Org Agenda's structure.  Recall
  that those variables only come into effect if the boolean variable
  'modus-themes-scale-headings' is set to a non-nil value (it is nil by

+ Made several changes to the '' file in an effort to
  improve the accuracy of the generated Texinfo markup.  Thanks to Glenn
  Morris and Richard Stallman for their valuable feedback in

+ Recorded a note in the manual on the intended colouration of
  backgrounds applied by 'mmm-mode'.  It explains what the constraints
  are from an accessibility standpoint and how users can configure
  things locally for more colourful, yet inaccessible, backgrounds.
  Thanks to Davor Rotim for the valuable feedback in issue 161:

+ Refined the manual's note on prism.el, simplifying the code samples
  and clarifying the commentary.

+ Wrote indices for concepts, variables, functions, which are rendered
  in the Info manual.

+ Elaborated on the possibility---and relative merits---of implementing
  a theme-agnostic hook for advanced face configurations, as opposed to
  relying on 'modus-themes-after-load-theme-hook'.  Thanks to Daniel
  Mendler for the valuable feedback in issue 131:


+ Rewrote the documentation string of the 'deftheme' declaration of
  'modus-operandi' and 'modus-vivendi'.

+ Provided links to the Info nodes that discuss each of the 'defcustom'

+ Wrote doc strings for every custom face that the themes define.


Modus themes version 1.1.0

By Protesilaos Stavrou <> on 2021-01-24

This entry records the changes introduced to the project since the
publication of version 1.0.0 (2020-12-05).  There have been around 150
commits in the meantime, qualifying this as one of the largest releases
to date.

As always, every colour-related modification documented herein conforms
with the overarching accessibility objective of the themes for a minimum
contrast ratio of 7:1 between background and foreground values in their
given combination (conformance with the WCAG AAA standard).

As the official manual is referenced several times, make sure to store
its URL: <>.

If you are coming from older versions, please consult the change log
entry for version 1.0.0.


+ We have brought back the options that were present in version 0.13.0
  or earlier which allowed users to override colors for either---or
  both---of Modus Operandi and Modus Vivendi.  Compared to the old
  mechanism, the new one is more robust and should work regardless of
  whether users run byte compiled code or not.  This is considered and
  advanced, "do-it-yourself" pathway to theme customisation.  It is
  discussed at length in the manual.

+ The new 'modus-themes-with-colors' macro makes it possible to read
  palette variables from the active theme and, thus, pass them to
  arbitrary functions or variables.  Again, this is part of the advanced
  customisations that are covered in the manual.

+ Several of the existing customisation options provide new stylistic
  variants, further expanding their utility.  While there are some new
  customisations altogether.  Combined with the above, we provide the
  infrastructure that allows the themes to adapt gracefully to a variety
  of circumstances and cover a broad range of demands.

+ More packages are added to the already comprehensive list of supported
  face groups.

+ Some of the supported faces have benefited from further, albeit
  subtle, refinements, demonstrating our commitment to consistency as
  well as our attention to detail.

+ Two reports on such "further refinements" were published on the code
  log section of <>.

+ We have more people contributing to the project (and assigning
  copyright to the FSF---as the themes are part of Emacs) and newer
  users reporting issues.  Also, there is anecdotal evidence from
  several sources on an increased interest to make new or existing faces
  accessible by default (such as by copying colour combinations from the

New customisation options

+ The existing 'modus-themes-mode-line' variable now supports three new
  borderless styles: 'borderless', 'borderless-3d', 'borderless-moody'.

  - The 'borderless' value uses the same colors as the default (nil
    value), but removes the border effect.  This is done by making the
    box property use the same color as the background, effectively
    blending the two and creating some padding.

  - The 'borderless-3d' and 'borderless-moody' approximate the '3d' and
    'moody' options respectively, while removing the borders.  However,
    to ensure that the inactive modelines remain visible, they apply a
    slightly more prominent background to them than what their
    counterparts do (same inactive background as with the default).

  The complete list of options:

    1. nil (default)
    2. 3d
    3. moody
    4. borderless
    5. borderless-3d
    6. borderless-moody

+ 'modus-themes-lang-checkers' provides several styles for spell
  checkers and code linters with regard to how they underline text.  The
  default (nil) is to use a colour-coded wavy underline, without
  changing the foreground of the affected text.  Other options include
  the ability to set a straight underline and to control the saturation
  of the foreground, while one also provides for a change in the
  background of the text in question.  The valid symbols are as follows
  (read the manual for more on the matter):

    1. nil (default)
    2. straight-underline
    3. subtle-foreground
    4. subtle-foreground-straight-underline
    5. intense-foreground
    6. intense-foreground-straight-underline
    7. colored-background

+ The 'modus-themes-org-habit' lets users pick between three styles for
  the 'org-habit' table: (1) nil (the default), which uses a total of
  eight colours, (2) 'simplified' which reduces the effective colours to
  four, while applying less saturated hues, and (3) 'traffic-light'
  which bring the colour count to three, thus blending the "clear" and
  "ready" states for workflows where the distinction between is not

  Please read the manual for a more detailed description of those

  Thanks to Gustavo Barros for suggesting the idea, providing user
  feedback on stylistic choices, as well as sharing insights on the
  workflow that made the 'traffic-light' style possible:

+ 'modus-themes-variable-pitch-ui' when set to a non-nil value applies a
  proportionately spaced typeface (controlled by the 'variable-pitch'
  face) to the User Interface, specifically the mode line, header line,
  and tab-{bar,line}.

+ The existing 'modus-themes-links' variable now has a colourless
  stylistic alternative: 'underline-only'.  The available styles:

    1. nil (default)
    2. faint
    3. neutral-underline
    4. faint-neutral-underline
    5. no-underline
    6. underline-only

+ The existing 'modus-themes-prompts' variable has two new grayscale
  styles: 'subtle-gray', 'intense-gray'.  Furthermore, their old
  'subtle' and 'intense' values have more informative aliases in the
  form of 'subtle-accented' and 'intense-accented'.  All available

    1. nil (default)
    2. subtle-accented ('subtle' remains for backward-compatibility)
    3. intense-accented ('intense' remains for backward-compatibility)
    4. subtle-gray
    5. intense-gray

+ The existing 'modus-themes-headings' variable now accepts two new
  styles: 'no-color', 'no-color-no-bold'.  All stylistic variants:

    1.  nil (default fallback option---covers all heading levels)
    2.  t (default style for a single heading, when the fallback differs)
    3.  no-bold
    4.  line
    5.  line-no-bold
    6.  rainbow
    7.  rainbow-line
    8.  rainbow-line-no-bold
    9.  highlight
    10. highlight-no-bold
    11. rainbow-highlight
    12. rainbow-highlight-no-bold
    13. section
    14. section-no-bold
    15. rainbow-section
    16. rainbow-section-no-bold
    17. no-color
    18. no-color-no-bold

  Please read the manual for instructions on how to apply those
  universally or on a per-level basis.

Added support for packages

+ cfrs (used by treemacs)
+ cperl-mode
+ diredc

+ display-fill-column-indicator-mode.  Thanks to Gustavo Barros for the
  feedback: <>.

+ evil-snipe.  Thanks to Peter Wu for the feedback:

+ isl (isearch-light).  Thanks to Manuel Uberti for the feedback:

+ marginalia
+ org-tree-slide
+ recursion-indicator

+ solaire.  Thanks to CsBigDataHub1 for the feedback:

Refinements to already supported faces

+ Reviewed the 'rainbow-delimiters' faces.  Everything is documented in
  a separate report (with screenshots).  The short version is that we
  pay close attention to detail and are willing to go to great lengths
  in pursuit of improving the overall user experience:

+ Updated the dedicated colours for 'whitespace-mode'.  The background
  should now be easier to discern.  Also removed any remaining
  inconsistencies.  Thanks to Toon Claes for the feedback:

+ Refined the faces of regexp constructs for strings affected by certain
  values passed to the 'modus-themes-syntax' option.  This is done to
  disambiguate the backslashes and grouping delimiters from the rest of
  the string.  The relevant values for 'modus-themes-syntax' are:

  - green-strings
  - yellow-comments-green-strings
  - alt-syntax
  - alt-syntax-yellow-comments

  The default colour for strings is blue, while regexp faces are yellow
  and red, whereas in those variants the strings become green, hence the
  need to make regexp faces more distinct (blue and magenta contrast
  better with green and also between themselves, thus matching the
  alternative aesthetics).

+ Reviewed dictionary.el faces (which ships with Emacs 28):

  - Made 'dictionary-reference-face' look like all other links.

  - Removed all properties from 'dictionary-word-definition-face':
    the default sets a font family, which can create inconsistencies.

  - Converted 'dictionary-word-entry-face' into comment-like text.

+ Refined and expanded the faces of Consult.

  - Made its grep commands look the same as those of all other grep

  - Ensured that line number previews, such as for the 'consult-line'
    command use their own style of a subtle foreground instead of
    inheriting from the 'line-number' face.  This is to avoid cases
    where previewed numbers and actual line numbers could be conflated
    for one another.

  - Removed the foreground pertinent to 'consult-imenu-prefix', as its
    bold weight combined with the structure of Imenu indices was deemed
    sufficient to differentiate it from actual 'consult-imenu' targets.

+ Eliminated exaggerations in the use of colour for various 'which-key'

+ Removed the needless background from the 'log-view-commit-body' face.
  This is a new face that ships with Emacs 28 (its inclusion upstream
  was documented in the last changelog entry).

+ Applied a subtle background to the 'log-view-message' face, in the
  interest of improving the usability of its interface, in particular,
  to contribute to heightened situational awareness while invoking
  'log-view-toggle-entry-display' in buffers such as those produced by

+ Introduced a neutral background for all 'outline-minor-faces' instead
  of merely mirroring the style of 'outline-mode' headings.  This is
  because it can sometimes be hard to tell whether 'outline-minor-mode'
  is active, provided certain fairly common configurations in the
  'modus-themes-headings' user option (refer to the manual for all
  customisation options).

+ Tweaked 'diff-mode' headings.

  - Adjusted the values of the dedicated colours for diff headings in
    order to amplify their relative contrast.

  - Assigned a bold typographic weight to the 'diff-hunk-header' face so
    as to enforce a greater sense of structure.

  - Instructed 'diff-function' to inherit 'modus-theme-diff-heading' in
    order to eliminate exaggerations in colouration.

+ Removed unnecessary underline from 'selectrum-current-candidate'.
  Thanks to Daniel Mendler for the feedback:

+ Made 'counsel-outline' inherit from the underlying Org faces.  Also
  corrected the style of 'counsel-outline-default' to use the main
  foreground colour.  Thanks to Gustavo Barros for the feedback:

+ Prevented headings, ultimately governed by the 'modus-themes-headings'
  user option, from inheriting the 'default' face as that could lead to
  unintended consequences, such as by retaining a background colour when
  none was expected.

+ Refashioned all faces that specified a foreground value of 'fg-alt' to
  inherit the 'shadow' face instead ('fg-alt' is the colour that is
  used, for example, in code comments by default).  This makes it
  possible for users to enact change across the theme just by tweaking

+ Fixed 'ruler-mode' text scaling adjustment, to make it cope well with
  'text-scale-adjust' and relevant commands.  Also introduced minor
  stylistic changes to the remainder of the 'ruler-mode' faces.

+ Eliminated the potentially problematic form of ':foreground nil' from
  the 'org-ellipsis' face.  In such cases it is always better to either
  specify no foreground whatsoever, or declare an unspecified value.

Patches from the community

Remember that the themes are part of Emacs and, thus, contributions that
exceed a cumulative total of ~15 lines require the assignment of
copyright to the Free Software Foundation.  Please consult the themes'
manual on the matter.

+ Nicolas De Jaeghere added support for 'exwm-floating-border-color':

+ Anders Johansson added support for 'helm-fd-finish':

+ Carlo Zancanaro fixed misquoting of 'tuareg-font-lock-multistage-face':

+ Xinglu Chen expanded Notmuch support to all its remaining faces:

+ Kostadin Ninev added support for Dired+:

+ Nicolas De Jaeghere expanded the supported items of 'pdf-faces'.  Also
  added an entry to the manual pertaining to link hints and the
  requisite setup:

+ Nicolas De Jaeghere wrote the new 'modus-themes-with-colors' macro,
  which is documented at length in the manual:

+ Nicolas De Jaeghere set up the infrastructure that grants users the
  ability to override palette colors; an option that was removed in the
  transition from version 0.13.0 to 1.0.0.  The relevant variables are
  'modus-themes-colors-operandi', 'modus-themes-colors-vivendi' (again,
  consult the manual):

+ Nicolas De Jaeghere deleted the 'modus-themes-core.el' file and merged
  its contents into the main 'modus-themes.el' library:
  <> and

+ Nicolas De Jaeghere made the 'compilation-info' face consistent with
  other compilation faces in terms of their optional bold weight:

Any remaining faults that may exist, despite our best intentions to
remove them, are those of the maintainer and will be addressed as soon
as they are identified.

FSF copyright status:

| Full name           | Copyright    |
| Anders Johansson    | covered      |
| Carlo Zancanaro     | not required |
| Kostadin Ninev      | covered      |
| Nicolas De Jaeghere | covered      |
| Xinglu Chen         | not required |

Theme-related contributions to the wider community

+ Helped address an incomplete colour value in 'org-transclusion-block':

+ Contributed to the formation of the zebra striping of 'embark':

+ Reviewed the faces of 'goggles':

+ Helped raise awareness about refactoring 'org-tree-slide-header-overlay-face':

+ Reported an issue for Moody that would affect the subset of Emacs 28
  users who enable the new 'mode-line-compact' option:

+ Did the same for Keycast: <>.

+ Defined the new 'perl-non-scalar-variable' in upstream Emacs:


+ Created a new palette subset for "graph" colours, as none of the
  existing paradigms would suffice for cases where faithfulness to
  colour huenesss is important.  Those are currently used by

+ Ensured that theme functions which need to produce an error message do
  so by calling 'error' instead of 'user-error'.

+ Added a 'modus-themes-load-themes' function that users can add to
  their init files.

+ Expanded the project's git repo README file with a sample
  'use-package' configuration.

+ The previous two points followed from an inquiry into the subtleties
  between 'enable-theme' and 'load-theme'.  Those are now documented at
  length in the manual.

+ Added screenshots to the web page that holds the official manual.
  Thanks to Damien Cassou for the feedback:

+ Swapped the values of 'cyan-faint' and 'cyan-alt-faint' for Modus

+ Tweaked 'font-lock-doc-face' and 'font-lock-type-face' variations when
  "faint syntax" is in effect: (setq modus-themes-syntax 'faint).

+ Refined 'font-lock-doc-face' for when modus-themes-syntax is given a
  value of either 'yellow-comments-green-strings' or 'green-strings'.
  The changes are minor when treated in isolation, though they have
  helped improve the overall consistency of the end result: the gestalt.

+ Reviewed select "faint" colours for both Modus Operandi and Modus
  Vivendi.  The technicalities are discussed in a complete report:

+ Ensured that (setq modus-themes-syntax 'alt-syntax) and its "yellow
  comments" variant are more truthful to their intended style, by
  eliminating any exaggerations in the use of colour.

+ Adjusted the saturation of the green-alt value of Modus Vivendi.

+ Updated the manual to reflect all of the aforementioned.

Thanks once again to everyone who contributed patches or reported an
issue.  This has been yet another period of intense work; work which
helps solidify the Modus themes as (i) uncompromisingly accessible in
accordance with the highest legibility standard, (ii) highly
customisable in true Emacs fashion, (iii) thoroughly comprehensive in
terms of face coverage, and (iv) meticulously designed throughout.


Modus themes version 1.0.0

By Protesilaos Stavrou <> on 2020-12-05

This entry documents the changes since version 0.13.0 (2020-10-08).
They constitute a major release with backward-incompatible additions
which are described below.

As always, every colour-related modification documented herein conforms
with the overarching accessibility objective of the themes for a minimum
contrast ratio of 7:1 between background and foreground values in their
given combination (conformance with the WCAG AAA standard).

Expect to find examples of basic and advanced customisations in the
comprehensive Info manual bundled with the themes, which is also
available at: <>.

Overview of major changes

0. The option that was present in earlier releases to override the
   colour palette has been removed.  It cannot work with byte
   compilation.  We must not compromise on performance, especially in
   light of the fairly high line count of the themes (broad face
   coverage combined with a multitude of customisation options).

1. The code base has been refactored.  The two themes, Modus Operandi
   (light) and Modus Vivendi (dark), derive from the same source.

2. The refactoring makes it possible to distribute the two themes as
   part of a single package.  You can find 'modus-themes' on MELPA, with
   other archives and core Emacs following suit soon thereafter (the
   Modus themes are built into Emacs since their version 0.12.0).

3. The 'modus-operandi-theme' and 'modus-vivendi-theme' packages in
   MELPA and GNU ELPA are obsolete.  MELPA has already deleted them and
   now only provides 'modus-themes', while GNU ELPA shall do so soon

   + Package providers of GNU/Linux distros, or other archives, are
     encouraged to update their sources so that they only deliver a
     single package that covers both themes.

4. To avoid surprises, the refactored code is in the 'main' branch which
   becomes the default henceforth.  The 'master' branch, from where all
   prior releases were built, is thus deprecated.  Existing installs of
   'modus-operandi-theme' and/or 'modus-vivendi-theme' must manually
   switch to the new package sources, which offer a certain guarantee
   that they are informed of the breaking changes documented herein.

   + Users of 'straight.el' must make sure that they pull from the
     'main' branch.  This may also be the case for other such tools,
     though I have not had the time to test them all.

5. The refactoring introduces a unified customisation framework.  Now
   all user-facing variables are named 'modus-themes-*' instead of
   'modus-operandi-*' and 'modus-vivendi-*'.  Users of both items can
   thus cut down on duplicate code or inelegant workarounds on their
   end.  Example:

          |   |   |   |   |   |   |   ====> modus-themes-bold-constructs

6. The themes now provide common user-facing functions.

   + 'modus-themes-load-operandi' and 'modus-themes-load-vivendi' can be
     used in Lisp to load the theme they name, while disabling their
     counterpart and running 'modus-themes-after-load-theme-hook'.  The
     hook can be used to override or further customise faces (examples
     are furnished in the manual).

   + 'modus-themes-toggle' interactively switches between Modus Operandi
     and Modus Vivendi or opens a minibuffer prompt to select between
     the two if none of them is active.  It ultimately calls the
     aforementioned functions to load the themes, so it also triggers
     the hook.  Bind this command to a key of your convenience (the
     author uses F5).

   + 'modus-themes-color' returns the colour value of a symbol in the
     alists that hold the themes' palettes.  The alists are
     'modus-themes-colors-operandi' and 'modus-themes-colors-vivendi'.
     'modus-themes-color' always operates on the active theme, making it
     suitable for post-theme-load customisations (via the hook we
     covered earlier).  Its usage is documented in the manual and is
     meant to be employed by those who are prepared to assume
     responsibility for face-related changes they introduce on their

   + 'modus-themes-color-alts' occupies the same niche as the one right
     above, with the exception that it takes two arguments.  The first
     is the alist key to be used by 'modus-operandi' and the second is
     for 'modus-vivendi'.

   + 'modus-themes-wcag-formula' implements the WCAG formula to measure
     a colour value's relative luminance.  While 'modus-themes-contrast'
     applies the formula to derive the contrast ratio between two colour
     values in hexadecimal RGB notation.  This can be used to verify the
     accessibility of colour combinations provided by the themes or new
     ones defined at the user level (the Modus themes conform with the
     WCAG AAA standard which means that this kind of contrast is 7:1 or
     higher for all applicable background+foreground combinations).

Customisation options

This is the complete list with all the customisation options:

    modus-themes-slanted-constructs             (boolean)
    modus-themes-bold-constructs                (boolean)
    modus-themes-variable-pitch-headings        (boolean)
    modus-themes-no-mixed-fonts                 (boolean)
    modus-themes-headings                       (alist)
    modus-themes-scale-headings                 (boolean)
    modus-themes-fringes                        (choice)
    modus-themes-org-blocks                     (choice)
    modus-themes-prompts                        (choice)
    modus-themes-mode-line                      (choice)
    modus-themes-diffs                          (choice)
    modus-themes-syntax                         (choice)
    modus-themes-intense-hl-line                (boolean)
    modus-themes-paren-match                    (choice)
    modus-themes-region                         (choice)
    modus-themes-links                          (choice)
    modus-themes-completions                    (choice)

Plus those which are contingent on 'modus-themes-scale-headings':


Consult the manual for each of them and please verify that none of the
older options remains in your init file.

Customisation options that did not exist in earlier versions

New entries and their possible values:

1. modus-themes-syntax

   * nil (default)
   * faint
   * yellow-comments
   * green-strings
   * yellow-comments-green-strings
   * alt-syntax
   * alt-syntax-yellow-comments

   (supersedes options for "faint syntax" and "comments")

2. modus-themes-links

   * nil (default)
   * faint
   * neutral-underline
   * faint-neutral-underline
   * no-underline

   (supersedes options for "no underlines")

3. modus-themes-paren-match

   * nil (default)
   * intense
   * subtle-bold
   * intense-bold

   (supersedes options for "intense paren match")

4. modus-themes-region

   * nil (default)
   * no-extend
   * bg-only
   * bg-only-no-extend

Furthermore, the 'modus-themes-diff' has a new option to choose from:
the symbol 'bg-only'.  It applies colour-coded backgrounds but does not
override any syntax highlighting that may be present.  This makes it
suitable for use with a non-nil value for diff-font-lock-syntax (which
is the default for diff-mode buffers in Emacs 27 or higher).

Support for new faces or face groups

+ consult
+ macrostep
+ make-mode
+ pdf-tools
+ popup
+ shr
+ sieve-mode

(remember that the list of supported packages is already comprehensive)

Thanks to:

+ Adam Spiers for bringing 'macrostep' to my attention.

+ Madhavan Krishnan for submitting the code for pdf-tools:

+ Manuel Uberti for reporting the issue with popup.el:

+ Again thanks to Manuel for consult:
  <>.  And to
  Daniel Mendler, its developer, for communicating with us on the status
  of the project.

+ Togan Muftuoglu for reporting the issue with sieve-mode:

Refinements to existing faces

+ The diary and holiday marks in 'M-x calendar' are displayed using a
  slightly tinted background in order to improve their contrast.
  Holidays are also rendered in a bold font.  Thanks to Nicolas De
  Jaeghere for reporting the issue and following it up with valuable
  feedback: <>.

+ Code blocks in 'markdown-mode' now have a subtle background that
  extends to the edge of the window.  Thanks to Roman Rudakov for the
  suggestion and Hörmetjan Yiltiz for further testing:

+ Inline code in 'markdown-mode' has a subtle background that covers the
  length of the construct.  Refer to issue #115 as above.

+ Ivy's main pattern-matching faces are slightly adjusted to work more
  effectively when users opt for "modus-themes-completions 'moderate" or
  "modus-themes-completions 'opinionated".

+ Swiper's 'swiper-isearch' command defaults to a more colourful
  presentation that clearly disambiguates matching pattern groups
  between themselves as well as their own active and inactive states.
  Thanks to John Haman for reporting the problem:

+ Swiper's remaining faces are tweaked to better convey the intent of
  this tool.

+ The border of 'ivy-posframe' is more noticeable.  Thanks to Pete
  Kazmier: <>.

+ The 'fringe' face no longer returns a nil background, which allows
  'dap-ui-controls-mode' to display things properly.  Thanks to Simon
  Pugnet: <>.

+ Tags and priority cookies in Org mode no longer have a box property.
  This is because of changes in upstream Org that we helped solve and
  that are covered in the previous CHANGELOG entry (in short: Org
  heading constructs inherit the underlying heading's properties that
  are not part of their own specs, while they retain those that are
  explicitly defined for them---adaptive headings).  Properly solves the
  following issues:

  * <>.  Thanks
    to user "bepolymathe".

  * <>.  Thanks
    to Roman Rudakov.

+ The faces of 'M-x re-builder' are less intrusive.

+ All the following now inherit from basic font-lock faces and thus
  benefit from options such as 'modus-themes-syntax':

  * geiser
  * nxml-mode
  * tuareg
  * web-mode
  * xah-elisp-mode

+ Diff headers have a subtle grey background that extends to the edge of
  the window.

+ The faces of log-view and change-log use colour combinations that
  better differentiate the various objects on display.

+ 'font-lock-type-face' uses a cyan hue instead of magenta.

+ 'magit-header-line-key' uses a blue foreground colour instead of red.

+ Doc strings in code syntax are rendered in a new dedicated colour.
  The change is fairly subtle and should practically go unnoticed.

+ 'org-date' now respects the 'modus-themes-no-mixed-fonts' option.
  Thanks to user "fleimgruber" for reporting the issue:

+ 'org-property-value' uses a slightly different shade of cyan.

+ 'dim-autoload' will always look like a regular comment.

+ The 'italic' face is inhereted by all relevant faces instead of
  hard-wiring a slant property.  This offers the potential advantage of
  specifying a distinct family (or other properties) for constructs that
  are meant to be rendered in italics (the manual has an example in its
  DIY sections for this scenario though it uses the 'bold' face---just
  apply the same idea to the 'italic' face).

+ 'dictionary-reference-face' inherits from 'button' (as with all

+ Several comment-related faces beyond the basic ones work with
  'modus-themes-syntax' when that has an effect on the colour of
  comments.  The faces are:

  * git-commit-comment-file
  * git-commit-comment-heading
  * git-rebase-comment-hash
  * git-rebase-comment-heading

+ 'transient-value' is more noticeable and fits better in its context.

+ All remaining Org metadata-related faces are refined for consistency
  between them in an attempt to make them unobtrusive.  More subtle
  colouration is applied.  Affected faces:

  * org-drawer
  * org-property-value
  * org-special-keyword

Theme-related contributions to the wider community

+ Defined the 'log-view-commit-body' for Emacs 28.1:

+ Specified the version of the 'diff-error' face for Emacs 28.1:

+ Added the 'org-dispatcher-highlight' face to upstream Org:

  * Report with screenshots:

+ Helped fix face of Flymake's unknown backend in inactive modelines:

+ Solved bug#44198 about a user not knowning the themes are in Emacs:


+ The new default 'main' branch of the Modus themes' git repo is an idea
  that was presented by user "Emacs Contrib" in issue 112:
  <>.  Raising
  awareness about the negative impact of potentially, tacitly, or
  explicitly offensive language is a goal worth pursuing.  Plus "main"
  is a more appropriate name for the primary branch of a project and we
  do not lose anything by introducing this change as part of version
  1.0.0, which anyhow requires manual interventions in user

+ Thanks to Manuel Uberti, Jeremy Friesen, and Gitlab user "Eugene" for
  their feedback during the process that eventually led to the
  development of the 'modus-themes-syntax' customisation option:

+ Thanks to André Alexandre Gomes for the feedback in issue 111, which
  led to the simplification of the manual's references to Guix:

+ Thanks to Nicolas De Jaeghere for noting that BBDB is indirectly
  supported: <>.

Between the refactoring of the code base and all other changes, this has
been yet another period of hard work to deliver on the promise of themes
that are (i) highly accessible and (ii) comprehensive in both their face
coverage and customisation options, while always conforming with the
highest accessibility standard for legible text.

Special thanks to the MELPA maintainers for all their contributions.
MELPA is an integral part of the wider Emacs community.  Thanks, in
particular, to Chris Rayner who has reviewed all my pull requests
hitherto, and to Jonas Bernoulli for checking the latest one (and its
concomitant issue) that introduced the new 'modus-themes' package.

Thank you, the reader, for your attention and for understanding the
longer term benefits of the refactoring, despite the short term friction
it may have introduced.


Modus Operandi and Modus Vivendi version 0.13.0

By Protesilaos Stavrou <> on 2020-10-08

This entry documents the changes since version 0.12.0 (2020-08-26).
There have been around 150 commits in the meantime, making this the
largest release to date (though sheer volume should not be conflated
with quality, of which there is plenty).

As always, everything described herein conforms with the overarching
accessibility objective of the themes for a minimum contrast ratio of
7:1 between background and foreground values in their given combinations
(conformance with the WCAG AAA standard).


1. There is a new Info manual that documents the customisation options
   as well as every other piece of information pertinent to the themes.
   You will find it in the Info pages inside of Emacs.  Or browse it
   online: <>.

2. New customisation options grant users more power to further adapt the
   active theme to their preferences.

3. Extended coverage for even more faces and face groups, adding to the
   already comprehensive list of directly supported ones.

4. Lots of tweaks to improve the use of colour and avoid exaggerations
   (well, "exaggerations" is relative, since the prior state was already
   carefully designed).

5. A new page hosts all pictures that demo the themes across a wide
   range of scenaria: <>.

6. Similarly, the change log also has its own dedicated web page:

New customisation options

Note that all customisation options are documented at length in the new
Info manual.  What is offered here is not necessarily exhaustive.

Diff styles

Symbol names ("choice" type):

+ modus-operandi-theme-diffs
+ modus-vivendi-theme-diffs

Possible values:

1. nil (default)
2. desaturated
2. fg-only

DEPRECATED ("boolean" type):

+ modus-operandi-theme-subtle-diffs
+ modus-vivendi-theme-subtle-diffs

This option supersedes older ones while retaining their functionality.

The default remains unaltered, meaning that the diffs will use fairly
prominent colour-coded combinations for the various elements (e.g. green
text on an unambiguously green backdrop).

A 'desatured' value will tone down the default aesthetic, giving a less
vibrant feel.

While 'fg-only' removes almost all coloured backgrounds, opting to apply
colour only to the relevant text (this was the case with the
now-deprecated options).  There are some exceptions, like word-wise or
"refined" diffs, which still use coloured backgrounds to convey their

Modeline styles

Symbol names ("choice" type):

+ modus-operandi-theme-mode-line
+ modus-vivendi-theme-mode-line

Possible values:

1. nil (default)
2. 3d
3. moody

DEPRECATED ("boolean" type):

+ modus-operandi-theme-3d-modeline
+ modus-vivendi-theme-3d-modeline

The default modeline continues to be a two-dimensional rectangle with a
border around it.  Active and inactive modelines use different colour
combinations for their main background and foreground.

Option '3d' produces an effect similar to what you get in a generic
Emacs session, where the active modeline has a pseudo three-dimensional
effect applied to it.  This option offers the same functionality as that
of the deprecated variables.

Option 'moody' is designed specifically for use with the Moody library,
though it can also be used without it.  Instead of implementing a box
effect, it applies an overline and underline instead, while also toning
down the inactive modeline.

Thanks to Nicolas De Jaeghere for the feedback and code samples in issue
80: <>

Headline styles

Symbol names ("alist" type):

+ modus-operandi-theme-headings
+ modus-vivendi-theme-headings

DEPRECATED ("boolean" type):

+ modus-operandi-theme-rainbow-headings
+ modus-operandi-theme-section-headings
+ modus-vivendi-theme-rainbow-headings
+ modus-vivendi-theme-section-headings

Possible values, which can be specified for each heading level (examples
further below):

0.  nil (default fallback option---covers all heading levels)
1.  t (default style for a single heading, when the fallback differs)
2.  no-bold
3.  line
4.  line-no-bold
5.  rainbow
6.  rainbow-line
7.  rainbow-line-no-bold
8.  highlight
9.  highlight-no-bold
10. rainbow-highlight
11. rainbow-highlight-no-bold
12. section
13. section-no-bold
14. rainbow-section
15. rainbow-section-no-bold

This supersedes and greatly expands upon what the deprecated variables
once offered.  It is now possible to (i) benefit from more stylistic
choices, and (ii) apply them on a per-level basis.

As always, the defaults remain in tact: headings are just rendered in a
bold weight and their colours are not too saturated to offer a plain
text impression that relies on typography to convey its meaning.

The info manual explains the details.  A few examples:

    ;; Per-level styles (t means everything else)
    (setq modus-operandi-theme-headings
          '((1 . highlight)
            (2 . line)
            (t . rainbow-line-no-bold)))

    ;; Uniform style for all levels
    (setq modus-operandi-theme-headings
          '((t . rainbow-line-no-bold)))

    ;; Default style for level 1, while others differ
    (setq modus-operandi-theme-headings
          '((1 . t)
            (2 . line)
            (t . rainbow-line-no-bold)))

Thanks to Adam Spiers for the feedback in issue 81:
<>.  Also thanks
to Nicolas De Jaeghere for helping refine relevant stylistic choices:

No link underlines

Symbol names ("boolean" type):

+ modus-operandi-theme-no-link-underline
+ modus-vivendi-theme-no-link-underline

Possible values:

1. nil (default)
2. t

By default, the themes apply an underline effect to links, symbolic
links, and buttons.  Users can now disable this style by setting the new
option to 't'.

Thanks to Utkarsh Singh for the feedback in issue 94:

No mixed fonts

Symbol names ("boolean" type):

+ modus-operandi-theme-no-mixed-fonts
+ modus-vivendi-theme-no-mixed-fonts

Possible values:

1. nil (default)
2. t

By default, the themes configure some spacing-sensitive faces, such as
Org tables and code blocks, to always inherit from the 'fixed-pitch'
face (documented in the manual).  This is to ensure that those
constructs remain monospaced when users opt for something like the
built-in 'M-x variable-pitch-mode'.  Otherwise the layout would break.

The obvious downside with this theme design is that users need to
explicitly configure the font family of 'fixed-pitch' in order to apply
their desired typeface (how to do this is also covered in the manual).
That may be something they do not want to do.  Hence this option to
disable any kind of font mixing done by the active theme.  Set it to

Support for new faces or face groups

+ awesome-tray
+ binder
+ cperl-mode
+ eldoc-highlight-function-argument
+ erc escaped colour sequences
+ eshell-syntax-highlighting
+ flycheck-color-mode-line
+ isearch regexp groups (Emacs version >= 28)
+ mpdel
+ objed
+ org 9.4 new faces: 'org-headline-todo' and 'org-table-header'
+ racket-mode
+ typescript-mode

Thanks to:

+ Damien Cassou for reporting the issue with mpdel:

+ Dario Gjorgjevski for reporting the issue with erc:

+ Markus Beppler for contributing the patch for cperl-mode:

+ User "Moesasji" for reporting the issue with objed:

Refinements to existing faces

+ calfw applies colours and styles in a way that makes it consistent
  with the rest of the themes' metaphors.

+ diredfl makes more considerate use of colour.  We still apply colour
  everywhere (the whole point of this package) but make sure to avoid

+ doom-modeline-battery-error face fits better with the rest of the

+ elfeed search buffers use less intense colours, while still keeping
  all elements fairly distinct.  The intent is to avoid a "rainbow
  effect" in such a dense interface.

+ elfeed read and unread items are more distinct.

+ git commit and vc log edit messages benefit from refined colour
  combinations for their various constructs.  The commit's summary is
  now rendered in a bold weight, to better convey the idea that this is
  a quasi heading element.

+ gnus heading colours are more consistent.  All information remains
  clearly distinct, but we now avoid using colours that are on opposite
  sides of the colour spectrum.  Basically to keep things distinct
  without going over the top.

+ gnus read and unread items are easier to tell apart.  Thanks to user
  "Nick" for reporting the issue:

+ help-argument-name has a distinct foreground colour, so that it is
  easier to spot it in "*Help*" buffers.  Its slant is also controlled
  by the active theme's customisation option for slanted constructs (nil
  by default---check the manual).

+ helpful-heading now is consistent with other heading styles.  Thanks
  to Nicolas De Jaeghere for reporting the issue:

+ icomplete, ido, orderless are all tweaked to work better under various

+ info-menu-star uses a red colour to make it easier to select a menu
  entry by estimating its number.  This face applies to every third
  element and is a nice little extra to have.

+ info quoted strings are configured to always render in 'fixed-pitch',
  in line with the themes' design for mixed fonts (remember to check the
  relevant customisation option).

+ line numbers work properly with 'text-scale-adjust'.  Thanks to user
  "jixiuf" for reporting the issue:

+ line-number-current-line no longer applies a bold weight to its text.
  This is to avoid a certain "jump effect" while moving between lines,
  where the affected numbers grow and shrink in weight as the line
  changes (once you see it, you will know what I mean).

+ line-number-major-tick and line-number-minor-tick do use a bold weight
  because they are fixed on the scale.  Their colours are also improved
  to better complement their intended role (these faces are for Emacs 27
  or higher).

+ magit-diff-file-heading-selection, magit-diff-hunk-heading-selection
  use more appropriate colour combinations.

+ markdown blockquotes and org quote blocks use a different foreground,
  which is colder than the previous one.  Just to make sure that they
  are not mistaken for inline code.

+ message headers use less exaggerated colour combinations.  The
  differences are fairly minor.

+ message-mml no longer uses a green foreground, as that could
  potentially cause confusion with quoted text in some cases.  A unique,
  albeit less saturated, foreground is used instead.

+ message-separator uses a more neutral colour combination, while
  retaining its overall uniqueness within its context (i.e. mail

+ modeline colours are refined to improve the contrast between active
  and inactive states.

+ mu4e-replied-face has a new colour that accounts for colour distance
  relative to its context.  Thanks to Shreyas Ragavan for reporting the
  issue: <>.

+ org agenda date and structure no longer behave like headings in other
  Org buffers.  Instead, they have their own styles to better perform
  their intended function and to avoid exaggerations.

+ org agenda dimmed to-do items (which have blocked sub-items) are no
  longer assigned a subtle grey background colour.  They are instead
  rendered with a bold weight and a subtle grey foreground to minimise
  distractions.  Thanks to Roman Rudakov for reporting this in issue
  101: <>.

+ org agenda clocked items are configured to extend their background to
  the edge of the window.  Otherwise they are cut off at the last text
  character, which creates inconsistencies while using tags: a tag is
  placed to the right so the background extends further than without
  them.  Based again on the feedback of Roman Rudakov in issue 101:

+ org agenda current time no longer uses a background.  A bold weight
  and a blue foreground are applied instead.  The intent is to keep
  things clean.  This is also covered by Roman Rudakov's feedback in
  issue 101: <>.

+ org-checkbox-statistics-done, org-checkbox-statistics-todo inherit
  from org-done and org-todo respectively, instead of defining their own

+ org drawers and their data now use 'fixed-pitch' in the interest of
  consistency with other metadata-like faces.  Thanks (yet again!) to
  Nicolas De Jaeghere for reporting the issue:

+ org-footnote underlines will now always use the same colour, instead
  of applying the one of other coloured constructs (e.g. when the
  footnote is inline and part of the text is rendered as verbatim).

+ org-meta-line is less prominent and, thus, more consistent with other
  metadata-related constructs.

+ org-roam faces are updated to match the current state of the upstream
  project.  The main colour of org-roam links is now different than that
  of standard links in an attempt to differentiate between the two (due
  to their unique semantics).  If this is not desired, you can evaluate
  the following:

      (setq org-roam-link-use-custom-faces nil)

+ org-todo, org-done, as well as relevant faces such as priorities and
  statistics are reviewed to work better with all heading combinations.
  Though please read the next section about "adaptive headings", as such
  workarounds will no longer be necessary for future stable releases of

+ selectrum uses different styles than before to account for its unique
  property of overlaying matching characters on top of the current
  line's background.  We want to avoid scenaria where matches are
  difficult to discern and the current line is not clear.

+ vc modeline states benefit from improved colour choices.  Just minor
  adjustments to account for the review of the base modeline colours.

+ vterm base colours now are variants of gray to ensure that some tools,
  such as zsh suggestions work properly.  Thanks to user "jixiuf" for
  reporting this issue and suggesting a possible solution:

Contributions to the wider community

Sometimes the themes reveal bugs in other packages.  It is of paramount
importance that we report those to the upstream developers, try to help
them reproduce the issue, and, where possible, support them in tracing
the problem's root cause.

Four such cases during this release:

1. Adaptive Org headings.  Solved upstream and documented on my website:
   Reported and discussed on the themes' issue tracker:

2. Alignment of Org tags with proportional fonts.  Ongoing thread:
   Reported and discussed on the themes' issue tracker:

3. Org priority cookie has extra space.  Ongoing thread:
   Reported and discussed on the themes' issue tracker, with feedback
   from Roman Rudakov:

4. Company overlay pop-up misaligns items.  Reported upstream and
   acknowledged as a known issue that occurs in certain cases:
   Discussion on the themes' issue tracker, with feedback from Iris
   Garcia: <>.


+ Belatedly (by about 2 weeks) pushed tag for version 0.12.0.  Thanks to
  Alex Griffin for bringing this to my attention:

+ Fixed a bug with how some older customisation options were declared as
  obsolete.  Thanks to Tassilo Horn for noticing and reporting the
  problem: <>.

+ Fixed a misplaced optional prefix argument in the manual for how to
  switch themes using a custom function.  Thanks to Manuel Uberti for
  catching this omission of mine and reporting it:

+ Silenced the Elisp package linter for a spurious error on a single
  eldoc face.  Thanks to Steve Purcell for the guidance:

+ Defined two new dedicated background colours for exceptional cases.
  These are intended for internal use in very special circumstances.

+ Reword GuixSD to "Guix System" in the list of package formats
  currently available.

+ Reviewed the main blue colours for both themes.  While the changes are
  practically impossible to discern upon first sight, the process was
  far from straightforward.  A complete report documents the minutia:

+ Reviewed the "active" palette subset, typically used in the modelines.
  No report was necessary for those, as the changes were fairly simple.

+ Reviewed the "intense" background colour that comes into effect when
  users opt for the customisation option for intense paren-match styles
  (check the manual).  Both the hue and the saturation have been changed
  to better conform with the intended function of this particular entry.

+ Reviewed the fringe-specific accented backgrounds.  Commit 7316e3320
  contains tables that compare the relative luminance of old and new

+ Improved the advice for setting fonts using 'set-face-attribute'.  The
  information is in the manual and is also available as a blog entry:

+ Rewrote an expression as "(or x y)" instead of "(if x x y)" in one
  place.  Just goes to show that tweaking the code is also part of the

+ Abstracted and simplified heading level properties by using bespoke
  theme faces.  Makes it easier to keep things consistent across the
  various face groups.

+ Same principle as above for diff-related styles.

+ Users who prefer to do things their own way or who just wish to
  contribute code to the Modus themes may wish to read my "Notes for
  aspiring Emacs theme developers":

This has been yet another period of intense work: reviewing faces and
applying colours is never easy, adding new customisation options is
always tricky, and documenting everything takes a lot of time (unless
you do all of those on a whimsy, which hopefully is not the case here).

Thanks again to everyone who helped improve the themes!


Modus Operandi and Modus Vivendi version 0.12.0

By Protesilaos Stavrou <> on 2020-08-26

This entry documents the set of changes since version 0.11.0
(2020-07-31).  There have been around 70 commits in the meatime, though
the sheer number may obfuscate the fact that a lot of work has gone into
this release.

As always, every change described here conforms with the accessibility
objective of the themes for a minimum 7:1 contrast ratio between
background and foreground values in their given combinations
(conformance with the WCAG AAA standard).

New customisation options

1 Completion Frameworks

The star of the show has to be the new option that refashions the
aesthetics of completion UIs: Helm, Icomplete, Ido, Ivy, Sallet,
Selectrum.  The 'modus-operandi-theme-completions' and
'modus-vivendi-theme-completions' accept the following symbols:

+ nil (default)
+ moderate
+ opinionated

Nil means that the overall presentation of the UI follows the patterns
established by its own source code.  For example, Ivy uses four distinct
background and foreground combinations of accented colours to highlight
the matching groups.  A grey background is added to denote the implicit
match between those groups.  So we choose to respect this metaphor,
while applying colours that conform with the accessibility goal of our
project.  Whereas Icomplete or Ido use subtle styles to present their
results.  Again, we remain faithful to their presentation.

With 'moderate', we apply nuanced background and foreground combinations
of accented colour values.  This will slightly tone down Helm, Ivy,
Sallet, Selectrum, while it will slightly adjust the looks of Icomplete
and Ido.

Whereas 'opinionated' has a more pronounced effect on the overall
aesthetics of the UI.  For the likes of Icomplete and Ido which are
subtle by default, this option will use intense combinations of
background and foreground colours.  They are the diametric opposite of
the nil value.  Whereas Helm, Ivy, Sallet, Selectrum, will use even more
subtle colours.  Again, they are farther away than their default looks.

These new options supersede the now-deprecated and more limited in scope
variables of prior releases:

+ modus-operandi-theme-intense-standard-completions
+ modus-vivendi-theme-intense-standard-completions

Thanks to the following people for their valuable feedback in issue 75:

+ Anders Johansson
+ Manuel Uberti
+ Shreyas Ragavan

2 Prompts

The 'modus-operandi-theme-prompts' and modus-vivendi-theme-prompts' will
change the overall looks of minibuffer and shell prompts ('M-x shell' as
well as 'M-x eshell').  Their possible values are:

+ nil (default)
+ subtle
+ intense

Nil will only use a coloured foreground for the prompts' text.  Simple
and effective.

With 'subtle', the default foreground value is retained but is now
complemented by an appropriately tinted background.  The effect is more
noticeable than the default, though not by much.

While 'intense' applies a coloured background and foreground combination
that should clearly stand out from the rest of the context.

Thanks to Manuel Uberti for sharing feedback in issue 74:

3 Fringe visibility

A new pair of symbols supersedes older variables:

+ modus-operandi-theme-visible-fringes ==> modus-operandi-theme-fringes
+ modus-vivendi-theme-visible-fringes  ==> modus-vivendi-theme-fringes

While the deprecated options were booleans, the current ones offer a
choice between the following:

+ nil (default)
+ subtle
+ intense

Nil means that the fringes have no distinct background of their own.
They still exist per the settings of 'fringe-mode', but can only be
discerned by tracking the negative space between the frame's or window's
edge and the buffer's effective boundaries.

The 'subtle' value will apply a greyscale background that is fairly
close to the default main background (pure white/black).  The fringes
are now visible.

As its name implies, 'intense' has a more pronounced effect than the
other values.  It also uses a greyscale background.

Review of already supported faces and colours

1 Magit blame styles

The headers that Magit's blame interface produces were difficult to tell
apart from their context.  A set of carefully selected colours now makes
sure that they are always distinct.  Some subtle background values are
used, in addition to other typographic elements.

Thanks to Damien Cassou for reporting this problem and for providing
valuable feedback that informed the final design.  Refer to issue 71:

2 Paren match colours

The face that highlights the matching delimiter when 'show-paren-mode'
(or equivalent) is enabled uses two dedicated colours, whose names are:
'bg-paren-match' and 'bg-paren-match-intense'.  Those have been reviewed
to make them more obvious in various contexts and to improve their
overall consistency.

A report with relative contrast ratios is available on my website:

I benefited from valuable feedback from Shreyas Ragavan in issue 70:

3 Mu4e faces

Some faces were tweaked to make it easier to distinguish replied,
forwarded, and draft messages from other headers.  The changes are
fairly small in scope, but the effect should be that of an overall

Thanks to Shreyas Ragavan for noticing these inconsistencies and for
their continued participation in addressing them.  See issue 69:

4 Notmuch message headings

A couple of inconsistencies with how notmuch would style email addresses
and folded messages were addressed.  The generic 'italic' face was also
tweaked in the process, removing the foreground it would falsely define.

Thanks to Damien Cassou for bringing these to my attention in issue 72:

5 hl-todo

Let the special keywords of 'hl-todo-mode' use an optional slant, just
like code comments do.  This is to ensure that they feel part of their

6 Magit general interface

Several faces were reviewed in the interest of colour harmony and to
address potential inconsistencies or exaggerations.  The most noticeable
change pertains to the log views, as we now use fewer accent values,
reducing whatever unnecessary "rainbow effect" may have existed.

7 VC commit logs

The presentation of 'vc-print-log' and 'vc-print-root-log' has been
reviewed to reduce the stark contrast between the colours it once used.
While the elements remain distinct, the differences between them are
more subtle, which is preferable when viewing long lists of
similar-looking patterns.

8 Powerline

The active and inactive minibuffers now use appropriate accented
backgrounds or foregrounds for some of their elements.  This makes them
better for their intended function.

Thanks to Shreyas Ragavan and tycho garen for their feedback in issue
73, which was actually about adding support for Spaceline.  It uses
Powerline as its dependency, so we eventually had to accommodate both of

Shreyas also helped by adding a short note in the README which informs
users of those two packages on how to tweak things when conducting tests
or changing themes.  See merge requests 9 and 10:


9 Latex sectioning

The themes will no longer affect the height of the Latex sectioning
faces.  This is because there already exists a variable that scales them

Thanks to Anders Johansson for providing insights in issue 77:

10 Transient pop-up menu

Extended support for its new colour-coded faces that follow in the
footsteps of the 'hydra' package for visual semantics.

11 Miscellaneous

The following faces were refined:

+ 'org-formula' inherits from 'fixed-pitch' to ensure that it does not
  break table layouts when the user opts for a mixed-font setup (such as
  with 'M-x variable-pitch-mode').

+ 'bongo-elapsed-track-part' uses a more appropriate accented

+ 'symbol-overlay-default-face' is less intense than before.  This is in
  response to feedback I received from Manuel Uberti as an aside in
  issue 75:

+ 'rectangle-preview' uses a slightly accented background, which
  distinguishes it from the highlighted region.  This is to denote a
  different state where the user is typing in some text.

+ 'diff-hl-change' now uses the more appropriate yellow colour instead
  of blue.  Yellow denotes "mixed changes" and, therefore, stands
  between "removed" (red) and "added" (green).  As it so happens, yellow
  is a colour that derives by mixing red with green.

New packages

The following are now explicitly supported by the themes:

+ org-table-sticky-header
+ pkgbuild-mode
+ semantic
+ spaceline

More faces or face groups that are defined:

+ git-rebase (magit)
+ doom-modeline-debug-visual
+ file-name-shadow
+ the faces used by Emacs 27's 'display-line-numbers-major-tick' and
+ table-cell

Final notes

There now exists an HTML version of the README, which will hopefully
make things easier for users:

Other changes are not user-facing.  For example, using 'pcase' instead
of 'cond' to make relevant expressions more succinct.  Or defining a
coloured underline in a more straightforward way.  No need to document
them at length.

While this release introduces customisation options, it feels as though
the themes are approaching a stable state.  We know what works, we have
a comprehensive colour palette that can meet our evolving needs, and we
have already achieved broad package/face coverage.  All while conforming
with the overarching objective of this project for a minimum 7:1
contrast ratio between background and foreground values in any given
combination we specify.

I wish to thank everyone who has helped me by testing things and sharing
their thoughts.  The people already mentioned herein:

- Anders Johansson (
- Damien Cassou (
- Manuel Uberti (
- Shreyas Ragavan (
- tycho garen (


Modus Operandi and Modus Vivendi version 0.11.0

By Protesilaos Stavrou <> on 2020-07-31

This entry records the changes since version 0.10.0 (2020-06-24).  The
present release covers close to 100 commits, some of which introduce
far-reaching changes.  It is not just the quantity that matters.
Sometimes even a minor tweak requires lots of testing and forethought.
This release represents another month of intense work and attention to

Palette review of "nuanced" colours

The themes contain a subset of palette variables that have a two-fold

1. Provide a subtle coloured background that can be combined with all
   foreground colours that are intended for text/code highlighting.

2. Produce variegated text in cases where complementary information
   needs to be displayed alongside some more prominent construct
   (e.g. Org table formulas).

In early July 2020, these colours went through a comprehensive review to
improve their intended use.  The complete report is available on my

This formed the preparatory work that enabled several of the changes
documented herein, most noticeable among which is the "Org blocks"
customisation option.

Customisation options

Org blocks

1. The symbols 'modus-operandi-theme-distinct-org-blocks' and
   'modus-vivendi-theme-distinct-org-blocks' are DEPRECATED.  They are
   now REPLACED by the general-purpose 'modus-operandi-theme-org-blocks'
   and 'modus-vivendi-theme-org-blocks' respectively.

2. The aforementioned new symbols allow users to configure different
   styles for Org blocks.

   + Option 'greyscale' (which you must quote like this: 'greyscale)
     will apply a subtle grey background to the contents of the block,
     while it will extend its beginning and end lines to ensure that the
     area is distinct from the rest of the buffer.  This is the style
     you would normally get with the old customisation options.

   + Option 'rainbow' (again, must be quoted) will instead apply a
     colour-coded subtle background in the main area of the block.  The
     exact colour depends on the programming language being used.  You
     would need to check the source code for how these are currently
     mapped (search for "org-src-block-faces").  The basic idea is to
     have different colours that make it easier for mixing the
     input/output of multiple programming languages.  Users who engage
     in literate programming may find this particularly useful.  Because
     the block is already quite apparent, the beginning and end lines
     are not extended to the edge of the window, to avoid exaggerations
     that could create distractions.

Variable pitch headings (proportionately-spaced headings)

The symbols 'modus-operandi-theme-proportional-fonts' and
'modus-vivendi-theme-proportional-fonts' are DEPRECATED.  They are now
REPLACED by the more appropriately-named
'modus-operandi-theme-variable-pitch-headings' and
'modus-vivendi-theme-variable-pitch-headings' respectively.

The intended effect is exactly the same as before, namely, to let
headings in Org and relevant modes use a proportionately-spaced font
regardless of what the default is (typically a monospaced typeface).

Remember that to configure the exact font family for the generic
'variable-pitch' face, you can use something like this:

    (set-face-attribute 'variable-pitch nil :family "FiraGO")

Check the README for further details on setting and mixing fonts.

Faint syntax for programming

Users can now enable 'modus-operandi-theme-faint-syntax' or
'modus-vivendi-theme-faint-syntax'.  The intended effect is to tone down
all syntax highlighting in programming modes, while always respecting
the overarching objective of these themes for a minimum contrast ratio
of 7:1 (highest accessibility standard for colour contrast---WCAG AAA).

The default is to use more saturated colours.

Intense hl-line

Toggling on 'modus-operandi-theme-intense-hl-line' or
'modus-vivendi-theme-intense-hl-line' will apply a more pronounced grey
to the background of faces that highlight the current line.  This
affects tools such as the built-in 'hl-line-mode', which is in turn
enabled automatically by lots of other packages, like 'elfeed' and

The default is to use a subtle grey.

Intense paren-match

Same principle as above.  'modus-operandi-theme-intense-paren-match' and
'modus-vivendi-theme-intense-paren-match' will make the matching
parentheses more intense than the default subtle warm background.  This
concerns modes such as that of the 'smartparens' package as well as the
built-in 'show-paren-mode'.

Refactored the use of bold

A major review of the themes now makes it possible to specify the exact
weight of what a "bold" typeface is.  This is only meaningful for cases
where a font family has variants such as "semibold".

Evaluate this, replacing "semibold" with the one your typeface supports:

    (set-face-attribute 'bold nil :weight 'semibold)

The default is to use a standard bold weight.

Packages and face groups

Refine already-supported faces

+ The following packages now use more appropriate colour combinations:

  - diary
  - annotate
  - transient (magit pop-up menu, though also used elsewhere)
  - fountain
  - calendar
  - mu4e
  - markdown-mode
  - outline-minor-faces

+ Other changes:

  - org-agenda has undergone a thoroughgoing review to improve the
    semantics of colour for scheduled tasks, deadlines, modeline
    filters, current date etc.

  - org and outline-mode headings have been refined to look better with
    the "rainbow headings" option that was introduced in an earlier
    release (check the README).

  - org-quote now works properly with the "Org blocks" option mentioned

  - org-checkbox-statistics uses the same foreground colour as org-todo,
    for the sake of consistency.

  - org-date now always inherits from 'fixed-pitch', to ensure proper
    alignment of elements when a mixed fonts setup is used (tools for
    achieving this effect are documented at length in the README).  The
    relevant patch was contributed by Matthew Stevenson.

  - org-meta-line no longer looks like a comment, which helps denote its
    special utility (e.g. when evaluating a table's formula).

  - org-warning now uses a variant of red for its text, which works
    better in the contexts this face is used (e.g. the agenda or the
    export dispatcher).

  - We now apply a slightly more accented colour combination for
    'secondary-selection', which is chiefly used by Org and Calendar in
    various contexts.

  - Gnus group level faces make more considerate use of colour to better
    denote their significance.

  - Cited text in message buffers has a better sequence of colours.

  - Two new Helm faces are supported.

  - Let 'keycast' use a different border colour when the "3D modeline"
    option is enabled (refer to the README for that option).

  - Extend 'hl-todo-keyword-faces' with the "bug" keyword.

  - More intense colour for 'diff-hl-reverted-hunk-highlight'.

  - Tone down the focused modeline's border colour.

  - Define new bespoke faces that the themes use internally.

  - Use more appropriate colours for 'header-line-highlight'.

  - Apply greyscale line highlight for flycheck current line in the
    diagnostics buffer, instead of the warmer colour combination it had

  - Tweak text colour difference between MU4E read and unread messages.

Added support for new packages

+ bongo
+ boon
+ dictionary
+ eshell-fringe-status
+ eshell-git-prompt
+ eshell-prompt-extras
+ highlight-tail
+ hl-defined
+ notmuch
+ tty-menu


+ Expand the README with new documentation and clarify parts of the
  existing one.

+ Update the Wiki page with screenshots and their descriptions (this in
  itself is a day's worth of work):

+ Make the source code of each theme work better with the built-in
  'outline-minor-mode'.  Check my video if you need a demo on how I use
  this in tandem with 'imenu':

Thanks to, in no particular order:

+ Shreyas Ragavan ( for introducing me to the
  idea that derived the "rainbow" Org blocks and for providing valuable
  feedback in several issues.

+ Matthew Stevenson ( for contributing the
  aforementioned patch for the 'org-date' face.

+ Manuel Uberti ( for offering valuable
  feedback in a number of issues (and special thanks for doing this for
  several months now).

+ Dinko ( for noticing a not-so-obvious bug
  in the initial implementation of the "rainbow Org blocks" option.

+ okamsn ( for providing the necessary
  feedback that allowed me to refactor the use of "bold", mentioned

Refer to the issue tracker (or commit log) for further details:


Modus Operandi and Modus Vivendi version 0.10.0

By Protesilaos Stavrou <> on 2020-06-24

This entry records the changes since version 0.9.0 (2020-06-03).  The
present release is focused on stability and internal improvements.

Fixes and adjustments

Basil L. Contovounesios, aka @basil-conto, (and also a contributor to
core Emacs) sent several patches that do the following:

+ Fix top-level parentheses so that the results of
  'custom-theme-set-faces' and 'custom-theme-set-variables' are not
  passed as arguments to the first 'custom-theme-set-faces'.

+ Fix the docstrings of the custom 'modus-theme-*' faces.

+ Simplify the syntax of properties assigned to each face.

+ Improve the way styles are inherited by Dired and Ibuffer.

Basil also pointed out an inconsistency with regard to an unwanted
underline effect for the 'doom-modeline-urgent' face in Modus Vivendi.
It was promptly removed.

From my part, I fixed issues 46 and 51 that concerned the way the
compiler would evaluate each theme's palette.  The palette is now
defined as a constant.  Further information:


Improvements to existing faces

André Alexandre Gomes (@aadcg) provided valuable feedback and
suggestions in issue 50 on the redesign of several 'org-mode' faces.

The thread is long and contains lots of screenshots:

The changes in outline:

+ Org checkboxes have a subtle background which gives them a more
  pronounced appearance while retaining their overall simplicity.

+ Org dates use a more saturated variant of cyan than they did before.
  It helps distinguish them from their context.  Especially true for
  dates inside of tables.

+ Org agenda dates have also undergone a slight review to match the

+ Org time grid now uses a more appropriate foreground colour, which has
  been designed specifically for unfocused context.

+ Org todo keywords use a more semantically-correct variant of red,
  rather than the purple one they had before.

+ Org statistics' cookies for pending tasks use a red variant as well
  rather than the previous yellow one, in the interest of consistency
  and to avoid exaggerations.

Other internal refinements

+ Subtle review of the Modus Vivendi palette.  In short, it addresses:

  - Imbalanced levels of luminance and inconsistent differences in hue
    between them and their neighbouring colours (e.g. the greens between
    them, and the greens next to the yellows in the context of syntax
    highlighting).  The result was that they would create an undesirable
    emphatic 'pop out' effect when placed close to more moderate

  - Differences in luminance and hue could lead to scenaria where two
    colours could be conflated with each other or otherwise fail to
    perform their intended function.

  - The complete report is on my website:

+ Major review of the 'diredfl' faces, in the interest of improved
  readability and harmony between the various colours.  This benefits
  from the palette changes in Modus Vivendi, but also from a similar
  review to Modus Operandi that was documented in version 0.9.0.

+ Refactor the names of dedicates colours for "marking" purposes.  These
  are used in Dired, Ibuffer, Proced, etc.  Then apply them consistently
  throughout each theme.

+ Make sure that 'stripes' uses the same colours as 'hl-line-mode'.

+ Let symlinks use a more appropriate colour in Dired and Trashed.

+ Refine the use of colour in 'magit-tag', 'eshell-prompt',
  'message-header-name', 'log-edit-header', 'change-log-function',
  'message-mml', 'message-header-name', 'message-separator'.  These are
  subtle (i.e. difficult) tweaks that improve the overall presentation
  in context.

+ Make diff indicators not use an unnecessary background when the
  user-facing option for "subtle diffs" is enabled (check the README for
  the exact name of this option).  This ensures consistency between the
  indicators and the actual scope of the diffs.

+ Add support for the 'minibuffer-line' package and extend existing
  support of the faces used in the built-in Emacs info pages.

My thanks to Basil and André for their contributions!


Modus Operandi and Modus Vivendi version 0.9.0

By Protesilaos Stavrou <> on 2020-06-03

This entry records the changes since version 0.8.0 (2020-04-28).  The
present release contains about 50 commits, covering a month of active

All changes are aligned with the primary objective of this project,
which is conformance with the WCAG AAA accessibility standard for colour
contrast.  This translates to a minimum contrast ratio of 7:1 between a
given combination of foreground and background colours.  The highest
standard of its kind.

All customisation options that are booleans are off ('nil') by default.
The project's policy is to offer such features on an "opt-in" basis,
while always respecting the principle of least surprise.

Refer to the README for further information on the exact names of
symbols and the like.

New customisation options

+ It is now possible to make the faces of Icomplete, Ido, and a few
  other related tools such as 'orderless', use coloured backgrounds to
  style their feedback.  This is the aesthetic already in effect for
  Ivy, Helm, and Selectrum.  The default is more subtle, in that it uses
  just an accented foreground value without any added background.

+ Advanced users can now override both the exact values of colour
  variables, as well as the mapping of properties/variables to faces.
  In practice this means that it is possible to completely change parts
  of the theme (or the entirety of it for that matter).  It also means
  that users can simply access the theme's palette for the sake of
  correctly passing the appropriate value to some bespoke face of

+ An extra increment for scaled headings is now available.  This should
  hold the highest value on the scale.  Such variables only take effect
  when the user opts for the "scaled headings" option.

Overview of changes

+ A set of internal reforms were carried through in order to allow the
  colour palette to be accessed from user configuration files.  This
  required a lot of debugging work to make sure the themes compile
  properly and performance is not affected.

  - The original idea for this redesign was suggested by Len Trigg in
    issue 39:
    Len also provided a real-world implementation of this new option,
    which is included in the project's README.

  - André Alexandre Gomes helped figure out the problems caused by the
    initial design of this feature.  In particular, André identified a
    performance penalty as well as errors pertaining to byte
    compilation.  Everything was eventually resolved.  For more see
    issue 44:

+ Several org-mode faces were reviewed in order to cope well with mixed
  font settings.  This is about use-cases where the main typeface is
  proportionately-spaced, either by default or by some minor mode like
  the built-in 'variable-pitch-mode'.  The intent of configuring those
  faces is to make them always inherit a fixed-pitch (monospace) font
  family, in the interest of preserving the alignment of elements.  The
  idea, suggested code, as well as user feedback were offered by Ben in
  issue 40:

+ Mixed font settings may have some side-effects depending on user
  configurations.  This is unavoidable as we cannot control how users
  define their fonts.  Mark Barton reported one such case, while he was
  able to fix it by making use of the suggested typeface definitions.
  See issue 42:

+ The faces for the 'tab-bar-mode' and 'tab-line-mode' that ship with
  Emacs 27 were written anew.  Same for those of 'centaur-tabs'.  The
  ideas for the redesign as well as the overall aesthetic are Ben's, per
  issue 41:

+ An edge case with Helm's interpretation of colour values for its
  ripgrep interface was reported by Manuel Uberti in issue 49:  It
  essentially had to do with the syntax for the regexp engine as read by
  the underlying 'rg' executable.  Collaboration on that front
  eventually led to fixes in Helm itself, committed by its maintainer.
  Note that the README for the Modus themes already contains information
  on how Helm applies a face to the matches of grep or grep-like
  commands.  Issue 49 confirmed what was already known in that regard
  (i.e. that the "--color=never" command-line option is required to use
  the Helm face, else a colour value from the ANSI colour vector is
  used---both are supported by the themes).

+ The faces for Flycheck, Flymake, and Flyspell that would apply an
  underline effect were completely rewritten to account for relevant
  differences between GUI and TUI Emacs.

  - For GUI Emacs, all affected faces will now just use a colour-coded
    wavy underline.  Empowered by the introduction of dedicated
    linter-related colours in prior commits (for version 0.8.0), we no
    longer have to change the foreground value of the offending text in
    addition to applying the underline effect.  Whereas before the text
    would also get repainted, which was too intrusive in most

  - If support for wavy underlines is not available, we assume the
    presence of a TUI, which generally is relatively more limited in its
    ability to reproduce colours with precision (meaning that the
    dedicated linter colour could be distorted, potentially producing
    inaccessible combinations).  So for those cases we apply a straight
    underline combined with a colour-coded foreground for the affected
    text.  This makes it more intense compared to the GUI equivalent,
    but is the necessary course of action to overcome the constraints
    imposed by the underlying terminal.

+ The palette of Modus Operandi underwent lots of subtle changes to make
  the background value of hl-line-mode more visible while retaining the
  overall style and character of the theme.  In principle, you should
  not be able to tell the difference, unless presented with a careful
  side-by-side comparison.  This is the comprehensive report, including
  a reproducible org-mode document with all the relevant contrast ratios:

+ Fixed `org-hide' to actually "hide" by using the appropriate colour

+ Several other face groups received minor tweaks.

+ The README was improved to better present the available customisation
  options and to cover other topics of interest.

+ Updated the screen shots and their description in the relevant Wiki

Added support for

+ circe
+ el-search
+ eros
+ golden-ratio-scroll-screen
+ highlight-indentation
+ hyperlist
+ indium
+ journalctl-mode
+ minimap
+ nxml-mode
+ vdiff
+ yasnippet


Modus Operandi and Modus Vivendi version 0.8.0

By Protesilaos Stavrou <> on 2020-04-28

This entry records the changes since version 0.7.0 (2020-03-30).  The
present release contains a little more than a hundred commits, covering
one month of intense work.

All changes are aligned with the primary objective of this project,
which is conformance with the WCAG AAA accessibility standard for colour
contrast.  This translates to a minimum contrast ratio of 7:1 between a
given combination of foreground and background colours.

All customisation options mentioned herein are off ('nil') by default.
The project's policy is to offer such features on an "opt-in" basis,
while always respecting the principle of least surprise.

Refer to the README for further information.

Four new customisation options

The options in outline, with their detailed description below:

+ Rainbow headings
+ Section headings
+ 3D modeline
+ Subtle diffs

1. "Rainbow headings" will apply more vivid colours to headings in
   'org-mode' and 'outline-mode'.  The gradation is similar to that of a
   rainbow's colour spectrum.

   The default is to use colour values that are closer to the grey

2. "Section headings" also apply to 'org-mode' and 'outline-mode'.  They
   will draw an overline over each heading and use a nuanced background
   colour that is appropriate for each level.  For Org, this option has
   some additional effects, where it will render keywords and priority
   cookies in a box and add to them a subtle background.  This is to
   make sure that everything feels consistent (to the extent possible).

   The default is to not use overlines, backgrounds, boxes in any of the
   relevant faces.  This is consistent with the standard austere
   colouration of headings: to not deviate too much from a "plain text"

NOTE: "rainbow headings" and "section headings" can work on their own or
be combined together.

3. "3D modeline" will use a faux unpressed button style for the current
   window's modeline (like the standard looks of 'emacs -Q').  The
   colours used for the active and inactive modelines are tweaked
   accordingly to maximise the effect while retaining the visual
   distinction between them.

   The default is to draw the modelines in a two-dimensional style, with
   the active one having a more noticeable border around it.

4. "Subtle diffs" will use colour-coded text for line-wise differences
   without applying any appropriately-coded background value or, where
   necessary, by using only a subtle greyscale background.  This affects
   'diff-mode', 'magit', 'ediff', and 'smerge-mode'.  For Magit an extra
   set of tweaks is implemented to account for the differentiation
   between the focused and unfocused diff hunks.

   Due to their unique requirements, word-wise or refined changes are
   always drawn with a colour-coded background, though it is less
   intense when this option is enabled.

   The default is to use a colour-coded background and foreground
   combination (e.g. light green text on a dark green backdrop) and to
   make appropriate adjustments for refined diffs and modes of
   interaction such as Magit's focused/unfocused diff states.

Other major refinements

+ Thoroughly revise the colours of 'ediff' and 'smerge-mode', so that
  they are aligned with those of 'diff-mode' and 'magit'.  This is in
  addition to the "subtle diffs" options mentioned in the previous

+ Review the faces used by Flycheck and Flymake.  A wavy/curly underline
  is now used in all terminals that support it.  The underlined text is
  drawn with a more nuanced foreground than before.  The previous design
  was exaggerating an already clear effect and could make things more
  difficult under certain circumstances.

+ All language checkers, including the aforementioned linter front-ends,
  now benefit from a new set of colours that are designed specifically
  for this particular purpose.  Makes the affected faces feel more
  different than their context.

+ Use dedicated colours for escape sequences, regular expression
  constructs, and quoted characters.  The goal is to better
  differentiate them from their surroundings.

+ Tweak the colours of 'hydra' to improve the distinction between its
  various types of behaviour.

+ Reduce the overall luminance of the background colours used in the
  fringes by the likes of 'flycheck', 'flymake', 'diff-hl', etc.  They
  should now not stand out more than they should, while retaining their
  intended role.

+ Implement more saturated colours in Elfeed.  The previous choices
  could make it harder to differentiate the various parts of the

+ Make better use of the customisation options for bold and slanted
  constructs where that is allowed.  If a face is not tied to the
  semantics of these styles then it is drawn without them, unless the
  user specifically opts for the relevant customisation options.

Added support for packages (A-Z)

+ ag
+ color-rg
+ ctrlf
+ debbugs
+ eglot
+ forge
+ helpful
+ highlight-symbol
+ ibuffer
+ icomplete
+ iflipb
+ magit-imerge
+ man
+ orderless
+ page-break-lines
+ parrot
+ phi-grep
+ phi-search
+ pomidor
+ rcirc
+ spell-fu
+ switch-window
+ swoop
+ tab-bar-mode
+ tab-line-mode
+ trashed
+ tomatinho
+ tuareg
+ vimish-fold
+ visible-mark
+ vterm
+ wcheck-mode
+ winum
+ woman

Miscellaneous changes and concluding remarks

+ Rewrote large parts of the README to make the customisation options
  easier to discover and understand.

+ Updated the screen shots and their description in the relevant Wiki


Modus Operandi and Modus Vivendi version 0.7.0

By Protesilaos Stavrou <> on 2020-03-30

This entry documents the changes since version 0.6.0 (2020-03-01).  The
present release is the largest to date containing 110 commits.

All changes conform with the primary objective of this project, which is
conformance with the WCAG AAA accessibility standard for colour
contrast.  This represents a minimum contrast ratio of 7:1 between a
given combination of foreground and background colours.

All customisation options mentioned herein are off ('nil') by default.
The project's policy is to offer such features on an "opt-in" basis.
Refer to the README or each theme's source code for the names of these
user-facing symbols.

Major refinements to existing face groups

+ The headline feature of this release is a refined set of colours for
  visualising version-control-system differences ("diffs").  The new
  colours are less intense than before and are designed to better convey
  the meaning of the constructs they apply to.  Affected face groups are
  those of 'magit' and 'diff-mode'.  A future release will assess how
  similar packages, such as 'ediff', can benefit from this work.

+ The other major set of changes concerns the colours that apply to
  fringes (see 'fringe-mode').  A new customisation option allows for a
  distinct background for the fringes (courtesy of Anders Johansson in
  commit 80fb704).  The default uses the same colours as the main
  buffer's background.  Building on this effort, fringe indicators, such
  as those of 'flycheck' now benefit from an entirely new set of
  background+foreground colour combinations that are designed
  specifically for the fringes.

+ A new customisation option allows users to render 'org-mode' source
  blocks in a distinct background colour.  The default is to use the
  same background as the rest of the buffer.  When this option is
  enabled, the background colour for the beginning and end line of such
  blocks is extended to the end of the window (using the ':extend t'
  attribute for >= Emacs 27).  Older Emacs versions already extend to
  the end of the window.

+ The colour combination that shows the matching parentheses or
  delimiters has been reviewed.  The commit is fairly small and the
  changes are immediately noticeable only to the most discerning of
  eyes.  Still, the considerations informing the review imposed a
  rigorous method.  Rather than summarise the findings, interested
  readers are advised to refer to commit af3a327: it offers a
  comprehensive analysis on the matter.

Added support for packages (A-Z)

+ auctex/tex
+ bm
+ buffer-expose
+ centaur-tabs
+ cider (tentative, feedback is much appreciated)
+ csv-mode
+ dynamic-ruler
+ ebdb
+ elfeed-score
+ flyspell-correct
+ fold-this
+ freeze-it
+ frog-menu
+ git-walktree
+ helm-switch-shell
+ highlight-defined
+ highlight-escape-sequences (hes-mode)
+ highlight-numbers
+ highlight-thing
+ hl-todo
+ ioccur
+ julia
+ kaocha-runner
+ markup-faces (adoc-mode)
+ multiple-cursors
+ num3-mode
+ org-roam
+ org-superstar
+ org-treescope
+ outline-minor-mode
+ paradox
+ rainbow-identifiers
+ rg
+ ripgrep
+ sallet (tentative, feedback is much appreciated)
+ selectrum
+ sesman
+ side-notes
+ skewer-mode
+ stripes
+ symbol-overlay
+ syslog-mode
+ vc-annotate (C-x v g)
+ volatile-highlights
+ web-mode
+ yaml-mode

Note about VC-annotate

Quoting from the relevant note in the project's README:

    Due to the unique way `vc-annotate' (`C-x v g') applies colours,
    support for its background mode (`vc-annotate-background-mode') is
    disabled at the theme level.

    Normally, such a drastic measure should not belong in a theme:
    assuming the user's preferences is bad practice.  However, it has
    been deemed necessary in the interest of preserving colour contrast
    accessibility while still supporting a useful built-in tool.

    If there actually is a way to avoid such a course of action, without
    prejudice to the accessibility standard of this project, then please
    report as much (or contribute as per the information in the
    Contributing section).

Overview of refinements to already supported packages

In this section the notion of "dedicated colours" pertains to colour
values that are reserved for special faces.  They are never used for
syntax highlighting or other common scenaria.

+ Define new background colours for fringe indicators (as noted in the
  first section).  Apply them to 'bm', 'diff-hl', 'git-gutter',
  'flycheck' fringe indicators.  All such indicators are now made more
  visible and work better with the new customisation option for
  rendering the fringes in a distinct background.

+ Define dedicated colours for tab-like interfaces.  Currently these
  apply only to 'centaur-tabs'.  The intention is to eventually
  implement them to the tab modes that ship with Emacs 27, as well as
  any other package that offers such functionality.

+ Define dedicated colours for actions that "mark" items.  Use them in
  'dired', 'proced', 'gnus'. An accented background is combined with an
  accented foreground.  The intention is to make the underlying
  construct distinct even under circumstances where the mark's
  background changes, such as when it intersects with 'hl-line-mode' or
  'stripes': the accented foreground will still be recognisable as a
  colour that differs from the main foreground.  The use of a bold font
  weight further reinforces the intended action.

+ Refine 'dired' faces to account for the new "mark" styles.
  Directories are no longer rendered in a bold weight.

+ Tweak the colours used in the built-in 'diary' and 'calendar' for
  better usability.

+ Tweak 'deadgrep' colours for consistency with packages that offer
  similar functionality.

+ Tweak 'compilation-line-number' in the interest of consistency with
  similar interfaces.

+ Use a more appropriate colour for 'trailing-whitespace'.  It now is a
  colour value that was designed specifically as a background.

+ Expand 'fountain-mode' support by covering its new heading faces.  The
  headings will be presented in larger font sizes, or using proportional
  fonts, should the user enable the relevant theme customisation options
  (see README or source code).

+ Remove bold weight from matching parentheses in 'show-paren-mode' and
  'smartparens'.  The temporarily applied bold weight can cause
  misalignments while using certain fonts.  Also apply the new colours
  for matching delimiters, as documented in the first section.

+ Refine 'outline-mode' colours to be consistent with those of Org's

+ Several usability and colour refinements for 'helm' and related
  packages in that milieu.

+ Remove box property from emphasis markers in the mode line.  It
  created inconsistencies with other faces.

+ Refine the colours used in Magit logs, `change-log', `log-view'.  They
  are meant to be more distinct from their context, without drawing too
  much attention to themselves.

+ Minor internal fixes for indentation and the like.

Miscellaneous changes and concluding remarks

+ Add section in the README which documents a legal requirement for all
  potential non-trivial code contributions: the need to assign copyright
  to the Free Software Foundation.  The Modus Themes are now distributed
  via the official GNU ELPA repository and copyright over them is
  assigned to the FSF.

+ Add CHANGELOG file which consolidates all tagged release notes such as
  this one.

+ Add new screen shots to the relevant Wiki page, together with detailed
  descriptions on what is being demonstrated:

Special thanks to Manuel Uberti for reporting several issues and
offering feedback where appropriate.  I was able to add support for lots
of new packages.  While a few among the already supported face groups
underwent tweaks and refinements.  The 'helm' ecosystem benefited the

Thanks to Anders Johansson for the patch that introduced the
fringes-related customisation option.  It inspired me to reconsider the
use of this particular area of the interface, which eventually led to
the barrage of commits that refashioned the fringe indicators.  A major
win overall.

Thanks to Jonathan Otsuka for fixing an error of mine on the naming of
some symbols.  My apologies for missing it: I will be more careful from
now on.

Note: both patches were small, requiring no copyright assignment.
Larger contributions are always welcome, though make sure you read the
section in the README with regard to assigning copyright to the Free
Software Foundation.


This release contains lots of refinements and additions.

Let me start with an administrative point: I have completed the process
of assigning my copy rights to the Free Software Foundation.  This
covers every contribution I make to GNU Emacs.  In practice, it means
that the Modus themes can now be included in the official ELPA archive
and theoretically be shipped with Emacs itself.  The ELPA inclusion is
ongoing.  Once it is completed, I will update the docs accordingly.

The administrative change has no effect on the way this project is
handled.  I still am the developer/maintainer and will continue to
improve things further.  If you still have questions, feel free to
contact me:

Moving on to the changes since version 0.5.0 (2020-01-26).

Added support for:

+ alert
+ apropos (built-in)
+ dap-mode
+ deft
+ dim-autoload
+ dired-git
+ enhanced-ruby-mode
+ gbd-mi.el (built-in library)
+ helm-ls-git
+ helm-xref
+ imenu-list
+ jira (org-jira)
+ js2-mode
+ jupyter
+ org-pomodoro
+ origami
+ rmail (built-in)
+ vc-print-log (built-in)
+ window-divider-mode (built-in)
+ xref (built-in)

Refinements to existing faces:

+ A new subset of "nuanced" accent colours has been introduced.  These
are named {red,green,yellow,blue,magenta,cyan}-nuanced.  Their purpose
is to be used in contexts where lots of structured information is
presented to the user, but each component does not need to draw too much
attention to itself (e.g. Org's metadata).  As always, their contrast
ratio is designed to always be >= 7:1 relative to the backgrounds they
may be combined with.

+ Greatly improve the support for Gnus, even though most changes are
subtle and are made in the interest of consistency.  The group levels
now make use of the "nuanced" palette where appropriate (to denote
levels of lower importance).

+ Several refinements for Org, including the use of "nuanced" colours
for various metadata tags.  The agenda headers will now be scaled
appropriately and use a variable-pitch font if the user sets the
relevant customisation values of the theme they are using (check the
documentation in each theme file or the repo's README).

+ Lots of refinements for Helm.  Some of these were introduced to align
the overall aesthetic with equivalent metaphors in Ivy.  Others are
meant to improve the styles of the headers and make various constructs
consistent with their variants in the Helm ecosystem but also with their
non-Helm counterparts (such as xref file names with and without Helm,
but also with Helm's grep).

+ Improve the colours of buttons in contexts such as M-x customize.
This is especially noticeable in modus-vivendi-theme (the dark theme)
where the buttons are a darker shade of grey rather than the original
lighter one.

+ Keycast now uses styles that are more consistent with the overall
aesthetic of the Modus themes.  This means that the mode line indicators
are blue-ish (blue is generally used for highlights in the mode line,
but also when hovering over an item with the mouse pointer).  The pseudo
button effect (colours + 3d) has been removed in favour of a flat look,
in line with the flatness of the mode line itself.  Whereas before the
keycast faces where designed to be consistent with the package's

There were also a few minor refinements for:

+ calendar and diary
+ icomplete
+ mm-uu-extract
+ nobreak-hyphen and nobreak-space
+ org-habit
+ tooltip-mode

Finally, the Commentary section of each theme has been greatly expanded.
It now includes the user-facing customisation options and the complete
list of supported packages.


This release contains support for several new packages and lots of
refinements for existing ones.  A lot of work went into making the
themes more robust by reviewing the inheritance of styles from one
face group to another (in general, the ':inherit' property should not
be used frivolously).  Several subtle changes were made to the colour
palette of both themes to ensure consistency, enable more possible
combinations, and avoid potential ambiguity under certain potential

Overall, this release gives me confidence that the themes have reached
a fairly stable state.  What follows is an overview of the changes
since version 0.4.0 (2020-01-02).

Added support for:

+ equake
+ flymake
+ focus
+ fountain (fountain-mode)
+ git-lens
+ git-timemachine
+ hi-fill-column
+ highlight-blocks
+ info-colors
+ lsp-mode
+ lsp-ui
+ proced (built-in)
+ regexp-builder (built-in)
+ suggest


+ The header line uses its own dedicated colours.  Several changes
  were made in 'eww', 'info', 'elfeed', 'magit', 'flycheck' to make
  sure that any accent value that appears there conforms with the
  overarching accessibility objective of the Modus themes (contrast
  ratio of >= 7:1, else WCAG AAA).
+ 'ivy' no longer uses a box style for the current line, as that was
  not always reliable.  Appropriate colours are used instead.
+ 'org-mode' blocks use a foreground value that distinguishes their
  opening and closing tags from source code comments.
+ The 'org-ellipsis' face was configured to always inherit the looks
  of its respective heading or element, rather than have its own
  excessive styling.
+ 'paren-match' has colours that are designed specifically for it.
  This is done to retain their utility while making sure they are not
  mistaken for some other type of feedback.
+ 'magit' has explicit styles for the mode line process indicators,
  instead of inheriting from another face.  The intention is to use
  foreground values that are designed specifically for use on the mode
  line (the minimum contrast ratio requirement).
+ 'erc' faces have been thoroughly reviewed in the interest of better
  usability.  Its mode line indicators now use appropriate colours.
+ The faces of the 'messages' library have been thoroughly reviewed.
  This affects various email interfaces, but also 'elfeed' entry
  metadata headings.
+ 'whitespace-mode' no longer has a newline character that stands out.
  That kind of emphasis was not necessary, given that the symbol used
  is a dollar sign, which is already far more visible than a mid dot.
+ 'font-lock' (generic syntax highlighting) has better colour
  combinations for regexp grouping constructs.
+ 'rainbow-delimiters' was given its missing base error face.
+ 'git-commit' comment action uses a slightly different foreground
  value than before to better match its context.
+ 'isearch' and 'query-replace' use colours that properly denote each
  action's utility.
+ 'visual-regexp' has been reviewed to make the matching groups more
  distinct from each other.
+ 'occur' and any other buffer that relies on the 'match' face can now
  benefit from the new colour combinations, in that its results cannot
  be confused for the active 'isearch' or 'query-replace' or even
  their lazily highlighted results (or, indeed, of any other search
+ 'company' uses faces for its search feedback that are consistent
  with other search metaphors.
+ Emacs 27's new ':extend' property is only implemented where
  necessary (note that the latest release is version 26.3).


This is an overview of the changes since version 0.3.0 (2019-12-25).

Add support for:

	+ ert
	+ flycheck-indicator
	+ mentor
	+ mu4e-conversation
	+ powerline-evil
	+ telephone-line
	+ vc (built-in version control)

Refinements to already-supported packages:

	+ company-mode (several refinements)
	+ doom-modeline (major review)
	+ helm (several tweaks)
	+ hl-line-mode (use unique background)
	+ ivy (improve matching line)
	+ line-number-mode (minor tweaks)
	+ markdown-mode (comprehensive expansion)
	+ mode-line (more appropriate styles for the highlight)
	+ powerline (minor tweaks)
	+ region (use unique background)
	+ swiper (improve matching line in main window)
	+ whitespace-mode (several refinements)
    + mu4e (tweak mu4e-modeline-face for consistency)


	+ Fix actual and potential problems with cursor faces that would
      distort the use of appropriate background and foreground colours.
      The documentation stipulates that the `cursor' face cannot be
      inherited by other faces, due to its peculiar nature of only
      recognising the background colour.
	+ Add support for more bold constructs in code.  As with all such
      options, it is disabled by default, expecting the user to
      explicitly opt in.
	+ Declare additional custom faces.  Only meant for internal use.
	+ Subtle refinements to "active" colour values in both Modus
      Operandi and Modus Vivendi.  These mostly concern the mode line
      (with a few special exceptions), where emphasis has been placed on
      the need to provide greater contrast between accent values that
      can be used there.
	+ Minor documentation refinements.


Overview of changes since 0.2.0 (2019-12-18):

+ Add support for the following packages:

  + apt-sources-list
  + calfw
  + counsel-css
  + counsel-notmuch
  + counsel-org-capture-string
  + cov
  + disk-usage
  + evil-visual-mark-mode
  + geiser
  + keycast
  + org-journal
  + org-noter
  + paren-face
  + powerline
  + vc
  + xah-elisp-mode

+ Explicitly style the following packages (these were already covered,
  in terms of the colours they used, but are now targeted directly):

  + calendar
  + counsel
  + cursor
  + package (M-x list-packages)

+ Minor tweaks to face groups:

  + dired
  + compile

+ Fixes and refinements:

  + Documentation strings will now inherit the option for slanted
    constructs (off by default -- see the README about all the user
  + Comment delimiters have the same styles as the body of the comment
    to avoid inconsistencies when the option for slanted constructs is
  + The line number that is displayed in the compile log is now
    correctly styled.
  + Removed duplicate entries for ivy-remote and added ivy-separator.
  + Ensure that the minibuffer prompt is always above the minimum
    contrast ratio of 7:1, by using a more appropriate shade of cyan.
  + Properly reference a couple of variables in Modus Vivendi.

+ Internal adjustments:

  + Decouple the core dired faces from those of external packages.
  + Same for org and org-recur.

+ Minor documentation updates.


Overview of changes since 0.1.0 (2019-12-09):

+ Comprehensive review of `org-mode' faces.  The use of colour should
now be more consistent with the semantics of each element.  These should
also respond better to a variety of combinations, such as when the user
has `hl-line-mode' enabled.  The agenda view is the greatest beneficiary
of this review.

+ Make `mu4e' mode line faces consistent with other elements that may be
placed on the mode line.

+ Make `gnus' header name/subject more distinct.

+ Several minor refinements to `ivy' and its extensions.

+ General usability refinements to `ace-window'.

+ Minor review of `elfeed' styles, in the interest of improving the
contrast between the elements.

+ Add support for:
  + `persp-mode' (fork of the already supported `perspective')
  + `dashboard'
  + `evil-mode'
  + `evil-goggles'
  + `ruler-mode'


First stable release of Modus Operandi and Modus Vivendi.