Emacs: note for MELPA or Git users of the Modus themes ahead of version 4
I plan to release the
modus-themes version 4 this Sunday. It is the
largest changeset to date, touching on practically every line in the
code base. Before tagging a release, I want to merge the
main—will probably do so later today. This merge will
introduce lots of breaking changes for users who track the Git
repository, such as those who use the MELPA package or handle things
Overview of breaking changes
In lieu of the detailed change log that will accompany the tagged release:
- Many user options are obsolete.
- Remaining user options are simplified.
- Changes to colours are done through a comprehensive system of palette overrides. Watch this video demo I produced a few days ago or search the manual for “Option for palette overrides” after I merge the branch.
- The manual provides many ready-to-use code blocks that showcase the potential of the new overrides’ mechanism.
- Some big packages are no longer supported:
treemacs. They have too many features, making it impossible for an outsider like me to test them.
Note that virtually all custom theme code will not work with the
new version of the themes. For example, if you were using the macro
modus-themes-with-colors and were passing the
specification, this is now replaced by
,c in the source code. I did
it intentionally to force users to read the new palette, as the old
names will not work while many colours have been removed. For
blue-alt is now called
blue-warmer, while something like
bg-special-cold is gone.
You most likely have no need for custom code. The overrides are comprehensive and will cover most use-cases. Check the documentation and contact me if you have any questions.
The safest approach is to start with a simple configuration that just loads the theme of choice. Then you can gradually set things up the way you like.
The new semantic mappings
Unlike the old overrides, the new system relies on semantic colour
mappings so there is no need to tinker with colour values. All
overrides are defined as user options. There is a shared variable,
modus-themes-common-palette-overrides as well as theme-specific ones
For ready-made presets, try either of those:
;; Tone down almost all colors. (setq modus-themes-common-palette-overrides modus-themes-preset-overrides-faint) ;; Amplify coloration across all interfaces. (setq modus-themes-common-palette-overrides modus-themes-preset-overrides-intense)
Though there is no need to stick to the presets. The whole point is to particularise the aesthetics. A trivial example from the manual:
;; Increase intensity of Org TODO and DONE (setq modus-themes-common-palette-overrides '((prose-done green-intense) (prose-todo red-intense)))
You can read in the above snippet the
mappings. Want your
DONE to be grey and
TODO magenta? No need to
ask me to hardcode some alternative and complicate the code—just
change the relevant values and reload the theme for changes to take
effect. The documentation (or the aforementioned video) explains how
to find all the information.
Another example of semantic colours to make the Modus themes draw primarily from the green-blue side of the spectrum:
;; Mimic `ef-bio' theme (from my `ef-themes') for code syntax ;; highlighting, while still using the Modus colors (and other ;; mappings). (setq modus-themes-common-palette-overrides '((builtin green) (comment yellow-faint) (constant blue) (fnname green-warmer) (keyword green-cooler) (preprocessor green) (docstring green-faint) (string magenta-cooler) (type cyan-warmer) (variable blue-warmer)))
Don’t like yellow comments? How about changing the value to
red-faint? The 10x developer programs with yellow strings? Peak
productivity is now within your grasp! You are vociferous, thinking
that keywords should be blue? Make overrides, not war.
You get the idea. And remember that I am here to help.
More Modus themes
The Modus themes now consist of six themes, divided into three subgroups. Quote from the manual:
modus-operandiis the project’s main light theme, while
modus-vivendiis its dark counterpart. These two themes are part of the project since its inception. They are designed to cover a broad range of needs and are, in the opinion of the author, the reference for what a highly legible “default” theme should look like.
modus-vivendi-tintedare variants of the two main themes. They slightly tone down the intensity of the background and provide a bit more color variety.
modus-operandi-tintedhas a set of base tones that are shades of light ochre (earthly colors), while
modus-vivendi-tintedgives a night sky impression.
modus-operandi-deuteranopiaand its companion
modus-vivendi-deuteranopiaare optimized for users with red-green color deficiency. This means that they do not use red and green hues for color-coding purposes, such as for diff removed and added lines. Instead, they implement colors that are discernible by users with deueteranopia or deuteranomaly (mostly yellow and blue hues).
More power to the user
Please give this major rewrite a fair chance. I am not taking taking
anything away from the user. On the contrary, I am introducing a
system that is far more powerful (yet simpler) than anything we had
before. The rewrite simplifies the code base and makes it easier for
me to maintain the project long-term. Furthermore, version 4 makes it
easy to define new themes with
modus-themes-theme, hence the four
new members of the family (tinkerers can easily derive their own
themes by studying the source code and copy-pasting accordingly).