When you say: We’re in a good Stimmung, you mean a good psychological tuning, being well tuned together.
— Karlheinz Stockhausen, 1973
Stimmung-themes is a pair of monoesuqe Emacs themes with minimal syntax highlighting. They are inspired by Tonsky’s Alabaster theme, following the maxim that a theme that highlights everything paradoxically highlights nothing. Text backgrounds (comments, strings and constants) and font variations (definitions/callsites) are used as alternatives to text colors, ensuring a harmonious reading experience. The hues of the stimmung-dark are selected to match the default macOS dark mode. The themes feature a (default golden beige) highlight color that you can set color and application of, see Customization.
Emacs packages often define their own faces, making theming a relatively sisyphean task. Stimmung-themes defines all default faces and some of the most common, and uncommon, packages. This includes programming modes like lsp-ui and magit, but also things like solaire and productivity/communication modes like notmuch or elfeed. Open an issue or make pull request if you lack a definition, they are always appreciated!
The screenshots are set in PragmataPro (with line-height patched to 1.4) and feature modeline/whitespace settings inspired by rougier that you can find in my emacs.d.
Stimmung-themes is distributed via MELPA. Install it with your package manager of preference (package.el
, straight
, use-package
) and make sure the following lines are in your init-file:
(require 'stimmung-themes) ; if you use package.el
(stimmung-themes-load-light)
A typical use-package installation might look something like:
(use-package stimmung-themes
;; :straight (stimmung-themes :host github :repo "motform/stimmung-themes") ; if you are a straight shooter
:demand t
:ensure t
:config (stimmung-themes-load-light)) ; or (stimmung-themes-load-dark)
Note that some faces, like org-block
, inherit from the fixed-pitch
font, in order to allow them to properly work with variable-pitch-mode
. This means that, in order to have a consistent experience, you may have to set the relevant face-attribute
. For example:
(set-face-attribute 'default nil :family "Iosevka" :height fixed-size :weight 'medium)
(set-face-attribute 'fixed-pitch nil :family "Iosevka" :height fixed-size :weight 'medium)
(set-face-attribute 'variable-pitch nil :family "Overpass Nerd Font" :height variable-size :weight 'normal)
Stimmung offers extensive control what and how to highlight font-lock
faces, i.e. the colors used for syntax highlighting. It exposes a number of customizable variables (see table) that take a value of either ~’background~ (highlight behind the text), ~’foreground~ (highlight of the text) or ~’none~ (no highlight). In addition to these, one can control the color of the background and foreground highlight in both modes. See this thread for the fruitful discussion that introduced these.
variable | values |
---|---|
stimmung-themes-dark-highlight-color | any Emacs color |
stimmung-themes-dark-highlight-color-foreground | any Emacs color |
stimmung-themes-light-highlight-color | any Emacs color |
stimmung-themes-light-highlight-color-foreground | any Emacs color |
stimmung-themes-builtin | ‘background (default), ‘foreground or ‘none |
stimmung-themes-comment | ‘background (default), ‘foreground or ‘none |
stimmung-themes-constant | ‘background (default), ‘foreground or ‘none |
stimmung-themes-string | ‘background (default), ‘foreground or ‘none |
stimmung-themes-markup | ‘background (default), ‘foreground or ‘none |
stimmung-themes-type | ‘background (default), ‘foreground or ‘none |
stimmung-themes-function-name | ‘background, ‘foreground or ‘none (default) |
stimmung-themes-keyword | ‘background, ‘foreground or ‘none (default) |
stimmung-themes-variable-name | ‘background, ‘foreground or ‘none (default) |
stimmung-themes-preprocessor | ‘background, ‘foreground or ‘none (default) |
stimmung-themes-regex | ‘background, ‘foreground or ‘none (default) |
There is a convenience function to toggle between the dark and light theme, stimmung-themes-toggle
, along with variants to interactively load the dark and light versions stimmung-themes-load-{light|dark}
.