Version 0.4.0 of package Fontaine has just been released in GNU ELPA. You can now find it in M-x package-list RET.
Fontaine describes itself as: Set font configurations using presets More at https://elpa.gnu.org/packages/fontaine.html Recent NEWS: ━━━━━━━━━━━━━━━━━━━━━━━━━━━ CHANGE LOG OF FONTAINE.EL ━━━━━━━━━━━━━━━━━━━━━━━━━━━ This document contains the release notes for each tagged commit on the project's main git repository: <https://git.sr.ht/~protesilaos/fontaine>. The newest release is at the top. For further details, please consult the manual: <https://protesilaos.com/emacs/fontaine>. Version 0.4.0 on 2022-09-07 ═══════════════════════════ ⁃ Made it possible for the user option `fontaine-presets' to cover the `fixed-pitch-serif' face. This face is used by the default Emacs faces in Info buffers to render inline code elements. A list of properties within `fontaine-presets' can thus look like this (the manual explains everything in detail—else check my current setup at the end of this entry): ┌──── │ (regular │ ;; I keep all properties for didactic purposes, but most can be │ ;; omitted. │ :default-family "Monospace" │ :default-weight regular │ :default-height 100 │ :fixed-pitch-family nil ; falls back to :default-family │ :fixed-pitch-weight nil ; falls back to :default-weight │ :fixed-pitch-height 1.0 │ :fixed-pitch-serif-family nil ; falls back to :default-family │ :fixed-pitch-serif-weight nil ; falls back to :default-weight │ :fixed-pitch-serif-height 1.0 │ :variable-pitch-family "Sans" │ :variable-pitch-weight nil │ :variable-pitch-height 1.0 │ :bold-family nil ; use whatever the underlying face has │ :bold-weight bold │ :italic-family nil │ :italic-slant italic │ :line-spacing nil) └──── When the relevant attributes of `fixed-pitch-serif' are not specified, they fall back to the values of the `default' face. Note that `fixed-pitch-serif' is not used by my `modus-themes' and `ef-themes' because I think it looks awful out-of-the-box (a bitmap font on the GNU/Linux distros I used). One can still modify any face to inherit from `fixed-pitch-serif', if they want to. ⁃ Introduced the command `fontaine-apply-current-preset' and wrote a relevant entry in the manual on how to "Persist font configurations on theme switch". Relevant quote from the manual: Themes re-apply face definitions when they are loaded. This is necessary to render the theme. For certain faces, such as `bold' and `italic', it means that their font family may be reset (depending on the particularities of the theme). To avoid such a problem, we can arrange to restore the current font preset which was applied by `fontaine-set-preset'. Fontaine provides the command `fontaine-apply-current-preset'. It can either be called interactively after loading a theme or be assigned to a hook that is ran at the post `load-theme' phase. Some themes that provide a hook are the `modus-themes' and `ef-themes' (both by Protesilaos), so we can use something like: […] ⁃ The once private variable `fontaine--current-preset' is now made public by means of a rename to `fontaine-current-preset'. In practical terms, this tells advanced users that they can rely on the presence of this variable and/or on the fact that changes to it will be documented accordingly. My current configuration as of 2022-09-07 17:56 +0300, which might give you some ideas: #+begin_src emacs-lisp (require 'fontaine) ;; Iosevka Comfy is my highly customised build of Iosevka with ;; monospaced and duospaced (quasi-proportional) variants as well as ;; support or no support for ligatures: ;; <https://git.sr.ht/~protesilaos/iosevka-comfy>. Iosevka Comfy `= ;; monospaced, supports ligatures Iosevka Comfy Fixed =' monospaced, ;; no ligatures Iosevka Comfy Duo `= quasi-proportional, supports ;; ligatures Iosevka Comfy Wide =' like Iosevka Comfy, but wider ;; Iosevka Comfy Wide Fixed `= like Iosevka Comfy Fixed, but wider ;; Iosevka Comfy Motion =' monospaced, supports ligatures, fancier ;; glyphs … …