emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

feature/native-comp c3514a6 1/6: Merge remote-tracking branch 'savannah/


From: Andrea Corallo
Subject: feature/native-comp c3514a6 1/6: Merge remote-tracking branch 'savannah/master' into HEAD
Date: Sat, 29 Aug 2020 10:20:48 -0400 (EDT)

branch: feature/native-comp
commit c3514a6274cd6c6ddf2c133ccc708b7875aab90e
Merge: aa526c9 7d58072
Author: Andrea Corallo <akrl@sdf.org>
Commit: Andrea Corallo <akrl@sdf.org>

    Merge remote-tracking branch 'savannah/master' into HEAD
---
 .gitlab-ci.yml                                     |   26 +
 admin/CPP-DEFINES                                  |    2 -
 admin/admin.el                                     |   47 +-
 admin/merge-gnulib                                 |    2 +-
 configure.ac                                       |   27 +-
 doc/emacs/emacs.texi                               |   11 +-
 doc/emacs/fixit.texi                               |   11 +-
 doc/emacs/maintaining.texi                         |   14 +
 doc/lispref/backups.texi                           |   78 +-
 doc/lispref/files.texi                             |   16 +-
 doc/lispref/help.texi                              |    3 +-
 doc/lispref/minibuf.texi                           |   28 +
 doc/lispref/variables.texi                         |    7 +-
 doc/misc/cc-mode.texi                              |    2 -
 doc/misc/gnus.texi                                 |   22 +
 doc/misc/tramp.texi                                |   16 +-
 etc/NEWS                                           |  127 +-
 etc/NEWS.27                                        |    2 -
 etc/PROBLEMS                                       |    6 +
 etc/compilation.txt                                |    1 +
 etc/themes/manoj-dark-theme.el                     |    8 +-
 etc/themes/modus-operandi-theme.el                 | 4266 ++++++++++++++++++++
 etc/themes/modus-vivendi-theme.el                  | 4266 ++++++++++++++++++++
 etc/w32-feature.el                                 |   87 +
 leim/SKK-DIC/SKK-JISYO.L                           |    4 +
 lib/cdefs.h                                        |    6 +-
 lib/diffseq.h                                      |  128 +-
 lib/gnulib.mk.in                                   |   16 +
 lib/intprops.h                                     |   15 +-
 lib/sig2str.c                                      |   17 +-
 lib/sigdescr_np.c                                  |  376 ++
 lib/string.in.h                                    |   15 +
 lib/verify.h                                       |   45 +-
 lisp/allout.el                                     |   15 +-
 lisp/auth-source.el                                |    4 +-
 lisp/calendar/todo-mode.el                         |    6 +-
 lisp/cedet/data-debug.el                           |    2 +-
 lisp/comint.el                                     |    2 +-
 lisp/custom.el                                     |    3 +
 lisp/dired-aux.el                                  |   15 +-
 lisp/dired.el                                      |   33 +-
 lisp/doc-view.el                                   |   45 +-
 lisp/emacs-lisp/bytecomp.el                        |   52 +-
 lisp/emacs-lisp/cl-lib.el                          |    7 +-
 lisp/emacs-lisp/edebug.el                          |    2 +-
 lisp/emacs-lisp/eieio-base.el                      |  259 +-
 lisp/emacs-lisp/gv.el                              |   18 +-
 lisp/emacs-lisp/lisp-mode.el                       |    4 +-
 lisp/emacs-lisp/nadvice.el                         |    8 +-
 lisp/emacs-lisp/seq.el                             |    2 +-
 lisp/emacs-lisp/shadow.el                          |    3 -
 lisp/emacs-lisp/warnings.el                        |   12 +-
 lisp/epa-file.el                                   |    6 +-
 lisp/epa.el                                        |  137 +-
 lisp/eshell/em-hist.el                             |    2 +-
 lisp/ffap.el                                       |    2 -
 lisp/filecache.el                                  |    3 -
 lisp/fileloop.el                                   |    8 +-
 lisp/files.el                                      |   79 +-
 lisp/gnus/gnus-dbus.el                             |   70 +
 lisp/gnus/gnus-group.el                            |    3 +-
 lisp/gnus/gnus-icalendar.el                        |   10 +-
 lisp/gnus/gnus-int.el                              |    9 +-
 lisp/gnus/gnus-msg.el                              |    2 +-
 lisp/gnus/gnus-start.el                            |    3 +
 lisp/gnus/gnus.el                                  |    4 +
 lisp/gnus/mml.el                                   |    2 +-
 lisp/help-at-pt.el                                 |    5 +-
 lisp/help-fns.el                                   |    2 +-
 lisp/help.el                                       |    1 -
 lisp/image-mode.el                                 |    4 +-
 lisp/imenu.el                                      |   22 -
 lisp/info.el                                       |    8 +-
 lisp/international/mule-cmds.el                    |    6 -
 lisp/jsonrpc.el                                    |    7 +-
 lisp/mail/rmail.el                                 |   22 +-
 lisp/mail/smtpmail.el                              |    6 +-
 lisp/minibuf-eldef.el                              |   22 +-
 lisp/minibuffer.el                                 |   31 +-
 lisp/mouse.el                                      |    3 -
 lisp/mwheel.el                                     |    4 +-
 lisp/net/shr.el                                    |   21 +-
 lisp/net/tramp-sh.el                               |    4 +
 lisp/net/tramp.el                                  |  198 +-
 lisp/progmodes/antlr-mode.el                       |    4 +-
 lisp/progmodes/cc-cmds.el                          |   13 -
 lisp/progmodes/compile.el                          |    4 +-
 lisp/progmodes/cperl-mode.el                       |    8 +-
 lisp/progmodes/flymake-cc.el                       |    8 +-
 lisp/progmodes/hideshow.el                         |    6 +-
 lisp/progmodes/idlwave.el                          |   10 +-
 lisp/progmodes/make-mode.el                        |    2 +-
 lisp/progmodes/octave.el                           |    2 +-
 lisp/progmodes/project.el                          |   16 +
 lisp/progmodes/vhdl-mode.el                        |    4 -
 lisp/progmodes/xref.el                             |   19 +-
 lisp/progmodes/xscheme.el                          |    2 -
 lisp/ps-print.el                                   |    2 +-
 lisp/simple.el                                     |   40 +-
 lisp/startup.el                                    |   12 +-
 lisp/subr.el                                       |   22 +-
 lisp/term.el                                       |   55 +-
 lisp/textmodes/flyspell.el                         |   47 +-
 lisp/textmodes/ispell.el                           |   85 +-
 m4/gnulib-comp.m4                                  |    9 +
 m4/inttypes.m4                                     |    4 +-
 m4/sigdescr_np.m4                                  |   17 +
 m4/string_h.m4                                     |    6 +-
 src/character.c                                    |    6 +-
 src/coding.c                                       |   10 +-
 src/dispextern.h                                   |    6 +-
 src/editfns.c                                      |  121 +-
 src/fileio.c                                       |   70 +-
 src/font.c                                         |    4 +-
 src/ftfont.c                                       |    4 +-
 src/gnutls.c                                       |    9 +-
 src/gtkutil.c                                      |    2 +-
 src/image.c                                        |  220 +-
 src/keymap.c                                       |    2 +-
 src/nsmenu.m                                       |    2 +-
 src/regex-emacs.c                                  |   61 +-
 src/syntax.c                                       |   10 +-
 src/sysdep.c                                       |  161 +-
 src/window.c                                       |    6 +-
 src/xdisp.c                                        |   48 +-
 test/data/themes/faces-test-dark-theme.el          |    8 +-
 test/data/themes/faces-test-light-theme.el         |    8 +-
 .../calendar/todo-mode-resources/todo-test-1.todo  |    4 +-
 test/lisp/calendar/todo-mode-tests.el              |   59 +-
 test/lisp/char-fold-tests.el                       |    8 +-
 test/lisp/electric-tests.el                        |    8 +-
 test/lisp/emacs-lisp/bytecomp-tests.el             |   16 +-
 test/lisp/emacs-lisp/rmc-tests.el                  |    8 +-
 test/lisp/emacs-lisp/subr-x-tests.el               |    8 +-
 test/lisp/emacs-lisp/text-property-search-tests.el |    8 +-
 test/lisp/emacs-lisp/warnings-tests.el             |   60 +
 test/lisp/faces-tests.el                           |    8 +-
 test/lisp/gnus/gnus-icalendar-tests.el             |   20 +-
 test/lisp/gnus/mml-sec-tests.el                    |    8 +-
 test/lisp/hi-lock-tests.el                         |    8 +-
 test/lisp/isearch-tests.el                         |    8 +-
 test/lisp/json-tests.el                            |    8 +-
 test/lisp/jsonrpc-tests.el                         |    8 +-
 test/lisp/mail/footnote-tests.el                   |    8 +-
 test/lisp/minibuffer-tests.el                      |    8 +-
 test/lisp/net/tramp-tests.el                       |  227 +-
 test/lisp/progmodes/compile-tests.el               |    4 +-
 test/lisp/progmodes/subword-tests.el               |    8 +-
 test/lisp/simple-tests.el                          |    8 +-
 test/lisp/sort-tests.el                            |    8 +-
 test/lisp/textmodes/conf-mode-tests.el             |    6 +-
 test/lisp/textmodes/css-mode-tests.el              |    8 +-
 test/lisp/url/url-handlers-test.el                 |    8 +-
 test/lisp/wdired-tests.el                          |    6 +-
 test/manual/cedet/cedet-utests.el                  |   12 +-
 test/manual/cedet/semantic-tests.el                |    4 +-
 test/manual/image-size-tests.el                    |    6 +-
 test/manual/image-transforms-tests.el              |   50 +-
 test/manual/scroll-tests.el                        |    6 +-
 test/src/charset-tests.el                          |    8 +-
 test/src/chartab-tests.el                          |    8 +-
 test/src/cmds-tests.el                             |    8 +-
 test/src/doc-tests.el                              |    8 +-
 test/src/editfns-tests.el                          |    6 +-
 test/src/fileio-tests.el                           |   39 +-
 test/src/lread-tests.el                            |    6 +-
 test/src/print-tests.el                            |    6 +-
 test/src/process-tests.el                          |    8 +-
 test/src/timefns-tests.el                          |    8 +-
 169 files changed, 11152 insertions(+), 1627 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 4522bb6..099b947 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -100,3 +100,29 @@ test-native-bootstrap-speed2:
     - ./configure --without-makeinfo --with-nativecomp
     - make bootstrap NATIVE_FAST_BOOT=1
   timeout: 8 hours
+
+test-gnustep:
+  stage: test
+  # This tests the GNUstep build process
+  only:
+    changes:
+      - .gitlab-ci.yml
+      - configure.ac
+      - src/nsfns.m
+      - src/nsfont.m
+      - src/nsgui.h
+      - src/nsimage.m
+      - src/nsmenu.m
+      - src/nsselect.m
+      - src/nsterm.h
+      - src/nsterm.m
+      - src/nsxwidget.h
+      - src/nsxwidget.m
+      - src/macfont.h
+      - src/macfont.m
+  script:
+    - DEBIAN_FRONTEND=noninteractive apt install --no-install-recommends -y 
-qq -o=Dpkg::Use-Pty=0 gnustep-devel
+    - ./autogen.sh autoconf
+    - ./configure --without-makeinfo --with-ns
+    - make bootstrap
+    - make install
diff --git a/admin/CPP-DEFINES b/admin/CPP-DEFINES
index ce9a444..a40b430 100644
--- a/admin/CPP-DEFINES
+++ b/admin/CPP-DEFINES
@@ -124,9 +124,7 @@ HAVE_DECL_STRTOIMAX
 HAVE_DECL_STRTOLL
 HAVE_DECL_STRTOULL
 HAVE_DECL_STRTOUMAX
-HAVE_DECL_SYS_SIGLIST
 HAVE_DECL_TZNAME
-HAVE_DECL___SYS_SIGLIST
 HAVE_DIALOGS
 HAVE_DIFFTIME
 HAVE_DUP2
diff --git a/admin/admin.el b/admin/admin.el
index 923f010..728aab8 100644
--- a/admin/admin.el
+++ b/admin/admin.el
@@ -151,7 +151,7 @@ Root must be the root of an Emacs source tree."
           (display-warning 'admin
                            "NEWS file contains empty sections - remove them?"))
         (goto-char (point-min))
-        (if (re-search-forward "^\\(\\+\\+\\+ *\\|--- *\\)$" nil t)
+        (if (re-search-forward "^\\(\\+\\+\\+ *$\\|--- *$\\|Temporary 
note:\\)" nil t)
             (display-warning 'admin
                              "NEWS file still contains temporary markup.
 Documentation changes might not have been completed!"))))
@@ -921,6 +921,51 @@ changes (in a non-trivial way).  This function does not 
check for that."
                              'help-echo "Mouse-2: visit this definition"
                              :type 'cusver-xref)))))))
 
+
+;; Reminder message for open release-blocking bugs.  This requires the
+;; GNU ELPA package `debbugs'.
+
+(defun reminder-for-release-blocking-bugs (version)
+  "Submit a reminder message for release-blocking bugs of Emacs VERSION."
+  (interactive
+    (list (completing-read
+          "Emacs release: "
+          (mapcar #'identity debbugs-gnu-emacs-blocking-reports)
+          nil t debbugs-gnu-emacs-current-release)))
+
+  (require 'reporter)
+  (require 'debbugs-gnu)
+
+  (when-let ((id (alist-get version debbugs-gnu-emacs-blocking-reports
+                            nil nil #'string-equal))
+             (status-id (debbugs-get-status id))
+             (blockedby-ids (debbugs-get-attribute (car status-id) 'blockedby))
+             (blockedby-status
+              (apply #'debbugs-get-status (sort blockedby-ids #'<))))
+
+    (reporter-submit-bug-report
+     "<emacs-devel@gnu.org>" ; to-address
+     nil nil nil
+     (lambda () ; posthook
+       (goto-char (point-min))
+       (mail-position-on-field "subject")
+       (insert (format "Release-blocking bugs for Emacs %s" version))
+       (mail-text)
+       (delete-region (point) (point-max))
+       (insert "
+The following bugs are regarded as release-blocking for Emacs " version ".
+People are encouraged to work on them with priority.\n\n")
+       (dolist (_ blockedby-status)
+         (unless (equal (debbugs-get-attribute _ 'pending) "done")
+           (insert (format "bug#%d %s\n"
+                           (debbugs-get-attribute _ 'id)
+                           (debbugs-get-attribute _ 'subject)))))
+       (insert "
+If you use the debbugs package from GNU ELPA, you can apply the
+following form to see all bugs which block a given release:
+
+  (debbugs-gnu-emacs-release-blocking-reports \"" version "\")\n")))))
+
 (provide 'admin)
 
 ;;; admin.el ends here
diff --git a/admin/merge-gnulib b/admin/merge-gnulib
index 3f32536..164300e 100755
--- a/admin/merge-gnulib
+++ b/admin/merge-gnulib
@@ -40,7 +40,7 @@ GNULIB_MODULES='
   manywarnings memmem-simple mempcpy memrchr minmax mkostemp mktime nstrftime
   pathmax pipe2 pselect pthread_sigmask
   qcopy-acl readlink readlinkat regex
-  sig2str socklen stat-time std-gnu11 stdalign stddef stdio
+  sig2str sigdescr_np socklen stat-time std-gnu11 stdalign stddef stdio
   stpcpy strnlen strtoimax symlink sys_stat sys_time
   tempname time time_r time_rz timegm timer-time timespec-add timespec-sub
   update-copyright unlocked-io utimensat
diff --git a/configure.ac b/configure.ac
index cdc18ea..31484db 100644
--- a/configure.ac
+++ b/configure.ac
@@ -463,6 +463,7 @@ OPTION_DEFAULT_ON([m17n-flt],[don't use m17n-flt for text 
shaping])
 OPTION_DEFAULT_ON([toolkit-scroll-bars],[don't use Motif/Xaw3d/GTK toolkit 
scroll bars])
 OPTION_DEFAULT_ON([xaw3d],[don't use Xaw3d])
 OPTION_DEFAULT_ON([xim],[at runtime, default X11 XIM to off])
+OPTION_DEFAULT_ON([xdbe],[don't use X11 double buffering support])
 AC_ARG_WITH([ns],[AS_HELP_STRING([--with-ns],
 [use Nextstep (macOS Cocoa or GNUstep) windowing system.
 On by default on macOS.])],[],[with_ns=maybe])
@@ -1773,13 +1774,6 @@ dnl On Solaris 8 there's a compilation warning for 
term.h because
 dnl it doesn't define 'bool'.
 AC_CHECK_HEADERS(term.h, , , -)
 AC_HEADER_TIME
-AC_CHECK_DECLS([sys_siglist], [], [], [[#include <signal.h>
-                                     ]])
-if test $ac_cv_have_decl_sys_siglist != yes; then
-  # For Tru64, at least:
-  AC_CHECK_DECLS([__sys_siglist], [], [], [[#include <signal.h>
-                                         ]])
-fi
 AC_HEADER_SYS_WAIT
 
 AC_CHECK_HEADERS_ONCE(sys/socket.h)
@@ -1907,7 +1901,8 @@ tmp_CPPFLAGS="$CPPFLAGS"
 tmp_CFLAGS="$CFLAGS"
 CPPFLAGS="$CPPFLAGS -x objective-c"
 CFLAGS="$CFLAGS -x objective-c"
-GNU_OBJC_CFLAGS=
+# Recent versions of GCC don't use C99 to compile Obj-C.
+GNU_OBJC_CFLAGS="-std=c99"
 LIBS_GNUSTEP=
 if test "${with_ns}" != no; then
   # macfont.o requires macuvs.h which is absent after 'make extraclean',
@@ -1923,7 +1918,7 @@ if test "${with_ns}" != no; then
   elif flags=$( (gnustep-config --objc-flags) 2>/dev/null); then
      NS_IMPL_GNUSTEP=yes
      NS_GNUSTEP_CONFIG=yes
-     GNU_OBJC_CFLAGS=$flags
+     GNU_OBJC_CFLAGS="$GNU_OBJC_CFLAGS $flags"
      LIBS_GNUSTEP=$(gnustep-config --gui-libs) || exit
   elif test -f $GNUSTEP_CONFIG_FILE; then
      NS_IMPL_GNUSTEP=yes
@@ -1968,7 +1963,7 @@ fail;
        dnl _NATIVE_OBJC_EXCEPTIONS is used by the GNUstep headers.
        AC_DEFINE(_NATIVE_OBJC_EXCEPTIONS, 1,
          [Define if GNUstep uses ObjC exceptions.])
-       GNU_OBJC_CFLAGS="-fobjc-exceptions"
+       GNU_OBJC_CFLAGS="$GNU_OBJC_CFLAGS -fobjc-exceptions"
      fi
   fi
   if test $NS_IMPL_GNUSTEP = yes; then
@@ -4121,11 +4116,13 @@ AC_SUBST(XFIXES_LIBS)
 ### Use Xdbe (-lXdbe) if available
 HAVE_XDBE=no
 if test "${HAVE_X11}" = "yes"; then
-  AC_CHECK_HEADER(X11/extensions/Xdbe.h,
-    [AC_CHECK_LIB(Xext, XdbeAllocateBackBufferName, HAVE_XDBE=yes)],
-    [],
-    [#include <X11/Xlib.h>
-    ])
+  if test "${with_xdbe}" != "no"; then
+    AC_CHECK_HEADER(X11/extensions/Xdbe.h,
+      [AC_CHECK_LIB(Xext, XdbeAllocateBackBufferName, HAVE_XDBE=yes)],
+      [],
+      [#include <X11/Xlib.h>
+      ])
+  fi
   if test $HAVE_XDBE = yes; then
     XDBE_LIBS=-lXext
   fi
diff --git a/doc/emacs/emacs.texi b/doc/emacs/emacs.texi
index 5b6b7b7..6aed7bd 100644
--- a/doc/emacs/emacs.texi
+++ b/doc/emacs/emacs.texi
@@ -1285,11 +1285,12 @@ programmer, but if you are not interested in 
customizing, you can
 ignore the customization hints.
 
   This is primarily a reference manual, but can also be used as a
-primer.  If you are new to Emacs, we recommend you start with
-the integrated, learn-by-doing tutorial, before reading the manual.  To
-run the tutorial, start Emacs and type @kbd{C-h t}.  The tutorial
-describes commands, tells you when to try them, and explains the
-results.  The tutorial is available in several languages.
+primer.  If you are new to Emacs, we recommend you start with the
+integrated, learn-by-doing tutorial, before reading the manual.  To
+run the tutorial, start Emacs and type @kbd{C-h t} (which is ``control
+h and then t'').  The tutorial describes commands, tells you when to
+try them, and explains the results.  The tutorial is available in
+several languages.
 
   On first reading, just skim chapters 1 and 2, which describe the
 notational conventions of the manual and the general appearance of the
diff --git a/doc/emacs/fixit.texi b/doc/emacs/fixit.texi
index 6633848..db77ae4 100644
--- a/doc/emacs/fixit.texi
+++ b/doc/emacs/fixit.texi
@@ -277,6 +277,10 @@ Check and correct spelling in the region.
 @item M-x ispell-message
 Check and correct spelling in a draft mail message, excluding cited
 material.
+@item M-x ispell-comments-and-strings
+Check and correct spelling of comments and strings in the buffer or region.
+@item M-x ispell-comment-or-string-at-point
+Check the comment or string at point.
 @item M-x ispell-change-dictionary @key{RET} @var{dict} @key{RET}
 Restart the spell-checker process, using @var{dict} as the dictionary.
 @item M-x ispell-kill-ispell
@@ -304,6 +308,8 @@ region; @pxref{Disabled Transient Mark}.)
 @findex ispell
 @findex ispell-buffer
 @findex ispell-region
+@findex ispell-comments-and-strings
+@findex ispell-comment-or-string-at-point
 @cindex spell-checking the active region
   Similarly, the command @kbd{M-x ispell} performs spell-checking in
 the region if one is active, or in the entire buffer otherwise.  The
@@ -312,7 +318,10 @@ explicitly perform spell-checking on the entire buffer or 
the region
 respectively.  To check spelling in an email message you are writing,
 use @w{@kbd{M-x ispell-message}}; that command checks the whole buffer,
 except for material that is indented or appears to be cited from other
-messages.  @xref{Sending Mail}.
+messages.  @xref{Sending Mail}.  When dealing with source code, you
+can use @kbd{M-x ispell-comments-and-strings} or @w{@kbd{M-x
+ispell-comment-or-string-at-point}} to check only comments or string
+literals.
 
   When one of these commands encounters what appears to be an
 incorrect word, it asks you what to do.  It usually displays a list of
diff --git a/doc/emacs/maintaining.texi b/doc/emacs/maintaining.texi
index 9f550b4..a9b0da5 100644
--- a/doc/emacs/maintaining.texi
+++ b/doc/emacs/maintaining.texi
@@ -1693,6 +1693,12 @@ Start Eshell in the current project's root directory
 @item C-x p c
 Run compilation in the current project's root directory
 (@code{project-compile}).
+@item C-x p !
+Run shell command in the current project's root directory
+(@code{project-shell-command}).
+@item C-x p &
+Run shell command asynchronously in the current project's root
+directory (@code{project-async-shell-command}).
 @end table
 
   Emacs provides commands for handling project files conveniently.
@@ -1770,6 +1776,14 @@ directory.  @xref{Top,Eshell,Eshell, eshell, Eshell: The 
Emacs Shell}.
   The command @kbd{C-x p c} (@code{project-compile}) runs compilation
 (@pxref{Compilation}) in the current project's root directory.
 
+@findex project-shell-command
+  The command @kbd{C-x p !} (@code{project-shell-command}) runs
+@code{shell-command} in the current project's root directory.
+
+@findex project-async-shell-command
+  The command @kbd{C-x p &} (@code{project-async-shell-command}) runs
+@code{async-shell-command} in the current project's root directory.
+
 @node Project Buffer Commands
 @subsection Project Commands That Operate on Buffers
 
diff --git a/doc/lispref/backups.texi b/doc/lispref/backups.texi
index 4ed1a10..3792795 100644
--- a/doc/lispref/backups.texi
+++ b/doc/lispref/backups.texi
@@ -414,10 +414,16 @@ version that the caller should consider deleting now.
 @end smallexample
 @end defun
 
-@c Emacs 19 feature
+@defun file-backup-file-names filename
+This function returns a list of all the backup file names for
+@var{filename}, or @code{nil} if there are none.  The files are sorted
+by modification time, descending, so that the most recent files are
+first.
+@end defun
+
 @defun file-newest-backup filename
-This function returns the name of the most recent backup file for
-@var{filename}, or @code{nil} if that file has no backup files.
+This function returns the first element of the list returned by
+@code{file-backup-file-names}.
 
 Some file comparison commands use this function so that they can
 automatically compare a file with its most recent backup.
@@ -460,6 +466,32 @@ Auto Save mode is enabled if 
@code{buffer-auto-save-file-name} is
 non-@code{nil} and @code{buffer-saved-size} (see below) is non-zero.
 @end deffn
 
+@defvar auto-save-file-name-transforms
+This variable lists transforms to apply to buffer's file name before
+making the auto-save file name.
+
+Each transform is a list of the form @w{@code{(@var{regexp}
+@var{replacement} [@var{uniquify}])}}.  @var{regexp} is a regular
+expression to match against the file name; if it matches,
+@code{replace-match} is used to replace the matching part with
+@var{replacement}.  If the optional element @var{uniquify} is non-nil,
+the auto-save file name is constructed by concatenating the directory
+part of the transformed file name with the buffer's file name in which
+all directory separators were changed to @samp{!} to prevent clashes.
+(This will not work correctly if your filesystem truncates the
+resulting name.)
+
+All the transforms in the list are tried, in the order they are listed.
+When one transform applies, its result is final;
+no further transforms are tried.
+
+The default value is set up to put the auto-save files of remote files
+into the temporary directory (@pxref{Unique File Names}).
+
+On MS-DOS filesystems without long names this variable is always
+ignored.
+@end defvar
+
 @defun auto-save-file-name-p filename
 This function returns a non-@code{nil} value if @var{filename} is a
 string that could be the name of an auto-save file.  It assumes
@@ -481,21 +513,6 @@ name.  The argument @var{filename} should not contain a 
directory part.
      @result{} nil
 @end group
 @end example
-
-The standard definition of this function is as follows:
-
-@example
-@group
-(defun auto-save-file-name-p (filename)
-  "Return non-nil if FILENAME can be yielded by..."
-  (string-match "^#.*#$" filename))
-@end group
-@end example
-
-This function exists so that you can customize it if you wish to
-change the naming convention for auto-save files.  If you redefine it,
-be sure to redefine the function @code{make-auto-save-file-name}
-correspondingly.
 @end defun
 
 @defun make-auto-save-file-name
@@ -511,31 +528,6 @@ function should check that variable first.
      @result{} "/xcssun/users/rms/lewis/#backups.texi#"
 @end group
 @end example
-
-Here is a simplified version of the standard definition of this
-function:
-
-@example
-@group
-(defun make-auto-save-file-name ()
-  "Return file name to use for auto-saves \
-of current buffer.."
-  (if buffer-file-name
-@end group
-@group
-      (concat
-       (file-name-directory buffer-file-name)
-       "#"
-       (file-name-nondirectory buffer-file-name)
-       "#")
-    (expand-file-name
-     (concat "#%" (buffer-name) "#"))))
-@end group
-@end example
-
-This exists as a separate function so that you can redefine it to
-customize the naming convention for auto-save files.  Be sure to
-change @code{auto-save-file-name-p} in a corresponding way.
 @end defun
 
 @defopt auto-save-visited-file-name
diff --git a/doc/lispref/files.texi b/doc/lispref/files.texi
index 92cbc2a..090c54f 100644
--- a/doc/lispref/files.texi
+++ b/doc/lispref/files.texi
@@ -2438,14 +2438,26 @@ This is for the sake of filesystems that have the 
concept of a
 superroot above the root directory @file{/}.  On other filesystems,
 @file{/../} is interpreted exactly the same as @file{/}.
 
+If a filename must be that of a directory, its expansion must be too.
+For example, if a filename ends in @samp{/} or @samp{/.} or @samp{/..}
+then its expansion ends in @samp{/} so that it cannot be
+misinterpreted as the name of a symbolic link:
+
+@example
+@group
+(expand-file-name "/a///b//.")
+     @result{} "/a/b/"
+@end group
+@end example
+
 Expanding @file{.} or the empty string returns the default directory:
 
 @example
 @group
 (expand-file-name "." "/usr/spool/")
-     @result{} "/usr/spool"
+     @result{} "/usr/spool/"
 (expand-file-name "" "/usr/spool/")
-     @result{} "/usr/spool"
+     @result{} "/usr/spool/"
 @end group
 @end example
 
diff --git a/doc/lispref/help.texi b/doc/lispref/help.texi
index 9b3c4fc..d4505d5 100644
--- a/doc/lispref/help.texi
+++ b/doc/lispref/help.texi
@@ -220,7 +220,8 @@ in the *Help* buffer."
 
 @group
     ;; @r{Display the data.}
-    (help-setup-xref (list 'describe-symbols pattern) (interactive-p))
+    (help-setup-xref (list 'describe-symbols pattern)
+                 (called-interactively-p 'interactive))
     (with-help-window (help-buffer)
       (mapcar describe-func (sort sym-list 'string<)))))
 @end group
diff --git a/doc/lispref/minibuf.texi b/doc/lispref/minibuf.texi
index 2488fb3..8b4240c 100644
--- a/doc/lispref/minibuf.texi
+++ b/doc/lispref/minibuf.texi
@@ -411,6 +411,34 @@ following bindings, in addition to those of 
@code{minibuffer-local-map}:
 @end table
 @end defvar
 
+@vindex minibuffer-default-prompt-format
+@defun format-prompt prompt default &rest format-args
+Format @var{prompt} with default value @var{default} according to the
+@code{minibuffer-default-prompt-format} variable.
+
+@code{minibuffer-default-prompt-format} is a format string (defaulting
+to @samp{" (default %s)"} that says how the ``default'' bit in prompts
+like @samp{"Local filename (default somefile): "} are to be formatted.
+
+To allow the users to customize how this is displayed, code that
+prompts the user for a value (and has a default) should look something
+along the lines of this code snippet:
+
+@lisp
+(read-file-name
+ (format-prompt "Local filename" file)
+ nil file)
+@end lisp
+
+If @var{format-args} is @code{nil}, @var{prompt} is used as a literal
+string.  If @var{format-args} is non-@code{nil}, @var{prompt} is used
+as a format control string, and @var{prompt} and @var{format-args} are
+passed to @code{format} (@pxref{Formatting Strings}).
+
+@code{minibuffer-default-prompt-format} can be @samp{""}, in which
+case no default values are displayed.
+@end defun
+
 @node Object from Minibuffer
 @section Reading Lisp Objects with the Minibuffer
 @cindex minibuffer input, reading lisp objects
diff --git a/doc/lispref/variables.texi b/doc/lispref/variables.texi
index abcd4bb..94c8c88 100644
--- a/doc/lispref/variables.texi
+++ b/doc/lispref/variables.texi
@@ -2585,8 +2585,11 @@ implemented this way:
       (macroexp-let2* nil ((start from) (end to))
         (funcall do `(substring ,getter ,start ,end)
                  (lambda (v)
-                   (funcall setter `(cl--set-substring
-                                     ,getter ,start ,end ,v))))))))
+                   (macroexp-let2 nil v v
+                     `(progn
+                        ,(funcall setter `(cl--set-substring
+                                           ,getter ,start ,end ,v))
+                        ,v))))))))
 @end example
 @end defmac
 
diff --git a/doc/misc/cc-mode.texi b/doc/misc/cc-mode.texi
index 10bbf8f..adc233d 100644
--- a/doc/misc/cc-mode.texi
+++ b/doc/misc/cc-mode.texi
@@ -1024,9 +1024,7 @@ These key sequences are not bound in AWK Mode, which 
doesn't have
 preprocessor statements.
 
 @item @kbd{M-x c-backward-into-nomenclature}
-@itemx @kbd{M-x c-forward-into-nomenclature}
 @findex c-backward-into-nomenclature
-@findex c-forward-into-nomenclature
 @findex backward-into-nomenclature @r{(c-)}
 @findex forward-into-nomenclature @r{(c-)}
 A popular programming style, especially for object-oriented languages
diff --git a/doc/misc/gnus.texi b/doc/misc/gnus.texi
index 332926a..0bdc2fa 100644
--- a/doc/misc/gnus.texi
+++ b/doc/misc/gnus.texi
@@ -828,6 +828,7 @@ Various
 * Spam Package::                A package for filtering and processing spam.
 * The Gnus Registry::           A package for tracking messages by Message-ID.
 * The Gnus Cloud::              A package for synchronizing Gnus marks.
+* D-Bus Integration::           Closing Gnus servers on system sleep.
 * Other modes::                 Interaction with other modes.
 * Various Various::             Things that are really various.
 
@@ -22333,6 +22334,7 @@ to you, using @kbd{G b u} and updating the group will 
usually fix this.
 * Spam Package::                A package for filtering and processing spam.
 * The Gnus Registry::           A package for tracking messages by Message-ID.
 * The Gnus Cloud::              A package for synchronizing Gnus marks.
+* D-Bus Integration::           Closing Gnus servers on system sleep.
 * Other modes::                 Interaction with other modes.
 * Various Various::             Things that are really various.
 @end menu
@@ -26404,6 +26406,26 @@ CloudSynchronizationDataPack(TM)s. It's easiest to set 
this from the
 Server buffer (@pxref{Gnus Cloud Setup}).
 @end defvar
 
+@node D-Bus Integration
+@section D-Bus Integration
+@cindex dbus
+@cindex D-Bus
+@cindex gnus-dbus
+@cindex system sleep
+@cindex closing servers automatically
+@cindex hung connections
+
+When using laptops or other systems that have a sleep or hibernate
+functionality, it's possible for long-running server connections to
+become ``hung'', requiring the user to manually close and re-open the
+connections after the system resumes.  On systems compiled with D-Bus
+support (check the value of @code{(featurep 'dbusbind)}), Gnus can
+register a D-Bus signal to automatically close all server connections
+before the system goes to sleep.  To enable this, set
+@code{gnus-dbus-close-on-sleep} to a non-nil value.
+
+For more information about D-Bus and Emacs, @pxref{Top,,, dbus, D-Bus 
integration in Emacs}.
+
 @node Other modes
 @section Interaction with other modes
 
diff --git a/doc/misc/tramp.texi b/doc/misc/tramp.texi
index c1a66d0..bdf3b40 100644
--- a/doc/misc/tramp.texi
+++ b/doc/misc/tramp.texi
@@ -239,7 +239,7 @@ included in the file name portion, @value{tramp} sends the 
login name
 followed by a newline.
 
 @item
-The remote host may then prompt for a password or pass phrase (for
+The remote host may then prompt for a password or passphrase (for
 @command{rsh} or for @command{telnet}).  @value{tramp} displays the
 password prompt in the minibuffer.  @value{tramp} then sends whatever
 is entered to the remote host, followed by a newline.
@@ -3563,9 +3563,8 @@ which must be set to a non-@code{nil} value.  Example:
 
 Using direct asynchronous processes in @value{tramp} is not possible,
 if the remote host is connected via multiple hops
-(@pxref{Multi-hops}), or the @code{make-process} /
-@code{start-file-process} call uses a stderr stream.  In this case,
-@value{tramp} falls back to its classical implementation.
+(@pxref{Multi-hops}).  In this case, @value{tramp} falls back to its
+classical implementation.
 
 Furthermore, this approach has the following limitations:
 
@@ -3575,8 +3574,10 @@ It works only for connection methods defined in 
@file{tramp-sh.el} and
 @file{tramp-adb.el}.
 
 @item
-It does not support interactive user authentication, like password
-handling.
+It does not support interactive user authentication.  With
+@option{ssh}-based methods, this can be avoided by using a password
+agent like @command{ssh-agent}, using public key authentication, or
+using @code{ControlMaster} options.
 
 @item
 It cannot be killed via @code{interrupt-process}.
@@ -3585,6 +3586,9 @@ It cannot be killed via @code{interrupt-process}.
 It does not report the remote terminal name via @code{process-tty-name}.
 
 @item
+It does not set process property @code{remote-pid}.
+
+@item
 It does not use @code{tramp-remote-path} and
 @code{tramp-remote-process-environment}.
 
diff --git a/etc/NEWS b/etc/NEWS
index d79cbe7..ad63955 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -42,6 +42,11 @@ default.  We strongly recommend building with HarBuzz 
support.  'x' is
 still a valid backend.
 
 ---
+** Building without double buffering support.
+configure --with-xdbe=no can now be used to disable double buffering
+at build time.
+
+---
 ** 'configure' now warns about building with libXft support.
 libXft is unmaintained, and causes a number of problems with modern
 fonts including but not limited to crashes; support for it may be
@@ -235,6 +240,14 @@ time zones will use a form like "+0100" instead of "CET".
 
 ** Dired
 
+---
+*** Broken and circular links are shown with the 'dired-broken-symlink' face.
+
+*** '=' ('dired-diff') will now put all backup files into the 'M-n' history.
+When using '=' on a file with backup files, the default file to use
+for diffing is the newest backup file.  You can now use 'M-n' to quickly
+select a different backup file instead.
+
 +++
 *** New user option 'dired-maybe-use-globstar'.
 If set, enables globstar (recursive globbing) in shells that support
@@ -291,6 +304,11 @@ tags to be considered as well.
 ** Gnus
 
 +++
+*** New option 'gnus-dbus-close-on-sleep'
+On systems with D-Bus support, it is now possible to register a signal
+to close all Gnus servers before the system sleeps.
+
++++
 *** The key binding of 'gnus-summary-search-article-forward' has changed.
 This command was previously on 'M-s' and shadowed the global 'M-s'
 search prefix.  The command has now been moved to 'M-s M-s'.  (For
@@ -371,6 +389,15 @@ take the actual screenshot, and defaults to "ImageMagick 
import".
 The menu-bar Help menu now has a "Show Recent Inputs" item under the
 "Describe" sub-menu.
 
+** Ispell
+
++++
+*** 'ispell-comments-and-strings' now accepts START and END arguments,
+defaulting to active region when used interactively.
+
++++
+*** New command 'ispell-comment-or-string-at-point' is provided.
+
 ---
 ** The old non-SMIE indentation of 'sh-mode' has been removed.
 
@@ -530,6 +557,9 @@ case-insensitive matching of messages when the old behavior 
is
 required, but the recommended solution is to use a correctly matching
 regexp instead.
 
+---
+*** Messages from Visual Studio that mention column numbers are now recognized.
+
 ** Hi Lock mode
 
 ---
@@ -688,6 +718,22 @@ problematic in some contexts (like PDFs), so this list is 
now filtered
 based on 'auto-mode-alist'.  Only file names that map to 'image-mode'
 are now supported.
 
+---
+*** The background and foreground of images now default to face colors.
+When an image doesn't specify a foreground or background color, Emacs
+now uses colors from the face used to draw the surrounding text
+instead of the frame's default colors.
+
+To load images with the default frame colors use the ':foreground' and
+':background' image attributes, for example:
+
+    (create-image "filename" nil nil
+                  :foreground (face-attribute 'default :foreground)
+                  :background (face-attribute 'default :background))
+
+This change only affects image types that support foreground and
+background colors or transparency, such as xbm, pbm, svg, png and gif.
+
 ** EWW
 
 +++
@@ -736,6 +782,11 @@ This command lets you "switch" to another project and run 
a project
 command chosen from a dispatch menu.
 
 +++
+*** New commands 'project-shell-command' and 'project-async-shell-command'.
+These commands run 'shell-command' and 'async-shell-command' in a
+project's root directory, respectively.
+
++++
 *** New user option 'project-list-file'.
 
 ** json.el
@@ -851,15 +902,20 @@ window after starting).  This variable defaults to nil.
 
 ** Miscellaneous
 
++++
+*** The user can now customize how \"default\" values are prompted for.
+The new utility function 'format-prompt' has been added which uses the
+new 'minibuffer-default-prompt-format' variable to format \"default\"
+prompts.  This means that prompts that look like "Enter a number
+(default 10)" can be customized to look like, for instance, "Enter a
+number [10]", or not have the default displayed at all, like "Enter a
+number".  (This requires that all callers are altered to user
+'format-prompt', though.)
+
 ---
 *** New 'diff-mode' font locking face 'diff-error'.
 This face is used for error messages from diff.
 
----
-*** 'hs-minor-mode' now heeds 'hs-special-modes-alist' for derived modes.
-The settings in 'hs-special-modes-alist' now also affect modes derived
-from those mentioned in that alist.
-
 +++
 *** New global mode 'global-goto-address-mode'
 This will enable 'goto-address-mode' in all buffers.
@@ -984,6 +1040,11 @@ mode, as are other data files produced by Emacs.
 
 It's a library to create, query, navigate and display hierarchy structures.
 
+** New themes 'modus-vivendi' and 'modus-operandi'.
+These themes are designed for colour-contrast accessibility.  You can
+load the new themes using 'M-x customize-themes' or 'load-theme' from
+your init file.
+
 
 * Incompatible Editing Changes in Emacs 28.1
 
@@ -1050,33 +1111,40 @@ ledit.el, lmenu.el, lucid.el and old-whitespace.el.
 
 ---
 ** Some functions and variables obsolete since Emacs 23 have been removed:
-
-'GOLD-map', 'bookmark-jump-noselect',
+'GOLD-map', 'advertised-xscheme-send-previous-expression',
+'allout-init', 'bookmark-jump-noselect',
 'bookmark-read-annotation-text-func', 'buffer-menu-mode-hook',
-'char-coding-system-table', 'char-valid-p', 'charset-bytes',
-'charset-id', 'charset-list' (function), 'complete-in-turn',
-'completion-common-substring', 'crm-minibuffer-complete',
-'crm-minibuffer-complete-and-exit', 'crm-minibuffer-completion-help',
-'custom-mode', 'custom-mode-hook', 'detect-coding-with-priority',
-'dirtrack-debug' (function), 'dirtrack-debug-toggle',
-'dynamic-completion-table',
+'c-forward-into-nomenclature', 'char-coding-system-table',
+'char-valid-p', 'charset-bytes', 'charset-id', 'charset-list'
+(function), 'choose-completion-delete-max-match', 'complete-in-turn',
+'completion-base-size', 'completion-common-substring',
+'crm-minibuffer-complete', 'crm-minibuffer-complete-and-exit',
+'crm-minibuffer-completion-help', 'custom-mode', 'custom-mode-hook',
+'detect-coding-with-priority', 'dirtrack-debug' (function),
+'dirtrack-debug-toggle', 'dynamic-completion-table',
 'easy-menu-precalculate-equivalent-keybindings',
 'epa-display-verify-result', 'epg-passphrase-callback-function',
-'eshell-report-bug', 'ffap-bug', 'ffap-submit-bug', 'forward-point',
-'generic-char-p', 'global-highlight-changes', 'hi-lock-face-history',
+'eshell-report-bug', 'eval-next-after-load', 'exchange-dot-and-mark',
+'ffap-bug', 'ffap-submit-bug', 'ffap-version',
+'file-cache-choose-completion', 'forward-point', 'generic-char-p',
+'global-highlight-changes', 'hi-lock-face-history',
 'hi-lock-regexp-history', 'highlight-changes-active-string',
 'highlight-changes-initial-state', 'highlight-changes-passive-string',
+'image-mode-maybe', 'imenu-example--name-and-position',
 'ispell-aspell-supports-utf8', 'lisp-mode-auto-fill',
 'locate-file-completion', 'make-coding-system',
-'minibuffer-local-must-match-filename-map', 'mouse-major-mode-menu',
-'mouse-popup-menubar', 'mouse-popup-menubar-stuff',
-'newsticker-groups-filename', 'non-iso-charset-alist',
-'nonascii-insert-offset', 'nonascii-translation-table',
-'password-read-and-add', 'pre-abbrev-expand-hook',
-'process-filter-multibyte-p', 'remember-buffer' (function),
+'minibuffer-local-must-match-filename-map', 'mouse-choose-completion',
+'mouse-major-mode-menu', 'mouse-popup-menubar',
+'mouse-popup-menubar-stuff', 'newsticker-groups-filename',
+'non-iso-charset-alist', 'nonascii-insert-offset',
+'nonascii-translation-table', 'password-read-and-add',
+'pre-abbrev-expand-hook', 'princ-list', 'print-help-return-message',
+'process-filter-multibyte-p', 'read-file-name-predicate',
+'remember-buffer' (function), 'rmail-highlight-face',
 'rmail-message-filter', 'set-coding-priority',
-'set-process-filter-multibyte', 'shell-dirtrack-toggle',
-'t-mouse-mode', 'tooltip-hook', 'tpu-have-ispell',
+'set-process-filter-multibyte', 'shadows-compare-text-p',
+'shell-dirtrack-toggle', 't-mouse-mode',
+'term-dynamic-simple-complete', 'tooltip-hook', 'tpu-have-ispell',
 'url-generate-unique-filename', 'url-temporary-directory',
 'vc-arch-command', 'vc-default-working-revision' (variable),
 'vc-mtn-command', 'vc-revert-buffer', 'vc-workfile-version',
@@ -1086,6 +1154,11 @@ ledit.el, lmenu.el, lucid.el and old-whitespace.el.
 * Lisp Changes in Emacs 28.1
 
 +++
+*** New function 'file-backup-file-names'.
+This function returns the list of file names of all the backup files
+of its file argument.
+
++++
 ** The 'count-lines' function now takes an optional parameter to
 ignore invisible lines.
 
@@ -1101,6 +1174,12 @@ This function can be used by modes to add elements to the
 'choice' customization type of a variable.
 
 +++
+** 'expand-file-name' no longer omits a trailing slash if the omission
+changes the filename's meaning.  E.g., (expand-file-name "/a/b/.") now
+returns "/a/b/" not "/a/b", which might be misinterpreted as the name
+of a symbolic link rather than of the directory it points to.
+
++++
 ** New function 'file-modes-number-to-symbolic' to convert a numeric
 file mode specification into symbolic form.
 
diff --git a/etc/NEWS.27 b/etc/NEWS.27
index 31b6902..5ef5430 100644
--- a/etc/NEWS.27
+++ b/etc/NEWS.27
@@ -24,7 +24,6 @@ applies, and please also update docstrings as needed.
 
 * Installation Changes in Emacs 27.1
 
----
 ** Emacs now uses GMP, the GNU Multiple Precision library.
 By default, if 'configure' does not find a suitable libgmp, it
 arranges for the included mini-gmp library to be built and used.
@@ -58,7 +57,6 @@ that building with Cairo enabled results in using Pango 
instead of
 libXft for font support, and that Pango 1.44 has removed support for
 bitmapped fonts.
 
-+++
 ** Emacs now uses a "portable dumper" instead of unexec.
 This improves compatibility with memory allocation on modern systems,
 and in particular better supports the Address Space Layout
diff --git a/etc/PROBLEMS b/etc/PROBLEMS
index f68a183..67537f6 100644
--- a/etc/PROBLEMS
+++ b/etc/PROBLEMS
@@ -1602,6 +1602,12 @@ even if you should be able to paste, and similar).
 You can get back menus on each frame by starting emacs like this:
 % env UBUNTU_MENUPROXY= emacs
 
+*** Mouse click coordinates not recognized correctly on multiple monitors.
+
+This happens on the proprietary X server ASTEC-X when the number of
+monitors is changed after the server has started.  A workaround is to
+restart the X server after the monitor configuration has been changed.
+
 * Runtime problems on character terminals
 
 ** The meta key does not work on xterm.
diff --git a/etc/compilation.txt b/etc/compilation.txt
index 8f7e290..11aefc6 100644
--- a/etc/compilation.txt
+++ b/etc/compilation.txt
@@ -381,6 +381,7 @@ made it more strict about the error message that follows.
 keyboard handler.c(537) : warning C4005: 'min' : macro redefinition
 d:\tmp\test.c(23) : error C2143: syntax error : missing ';' before 'if'
 d:\tmp\test.c(1145) : see declaration of 'nsRefPtr'
+c:\tmp\test.cpp(101,11): error C4101: 'bias0123': unreferenced local variable 
[c:\tmp\project.vcxproj]
 1>test_main.cpp(29): error C2144: syntax error : 'int' should be preceded by 
';'
 1>test_main.cpp(29): error C4430: missing type specifier - int assumed. Note: 
C++ does not support default-int
 1>
diff --git a/etc/themes/manoj-dark-theme.el b/etc/themes/manoj-dark-theme.el
index 5c76d6a..ac395f9 100644
--- a/etc/themes/manoj-dark-theme.el
+++ b/etc/themes/manoj-dark-theme.el
@@ -5,18 +5,20 @@
 ;; Author: Manoj Srivastava <srivasta@ieee.org>
 ;; Keywords: lisp, faces
 
-;; This program is free software; you can redistribute it and/or modify
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
 ;; the Free Software Foundation, either version 3 of the License, or
 ;; (at your option) any later version.
 
-;; This program is distributed in the hope that it will be useful,
+;; GNU Emacs is distributed in the hope that it will be useful,
 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with this program.  If not, see <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.
 
 ;;; Commentary:
 
diff --git a/etc/themes/modus-operandi-theme.el 
b/etc/themes/modus-operandi-theme.el
new file mode 100644
index 0000000..c1090ee
--- /dev/null
+++ b/etc/themes/modus-operandi-theme.el
@@ -0,0 +1,4266 @@
+;;; modus-operandi-theme.el --- Accessible light theme (WCAG AAA) -*- 
lexical-binding:t -*-
+
+;; Copyright (c) 2019-2020 Free Software Foundation, Inc.
+
+;; Author: Protesilaos Stavrou <info@protesilaos.com>
+;; URL: https://gitlab.com/protesilaos/modus-themes
+;; Version: 0.12.0
+;; Package-Requires: ((emacs "26.1"))
+;; Keywords: faces, theme, accessibility
+
+;; This file is part of GNU Emacs.
+
+;; This program is free software; you can redistribute it and/or
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+;;
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with this program.  If not, see <https://www.gnu.org/licenses/>.
+
+;;; Commentary:
+;;
+;; This theme is designed for colour-contrast accessibility.
+;;
+;; 1. Provide a consistent minimum contrast ratio between background and
+;; foreground values of 7:1 or higher.  This meets the highest such
+;; accessibility criterion per the guidelines of the Worldwide Web
+;; Consortium's Working Group on Accessibility (WCAG AAA standard).
+;;
+;; 2. Offer as close to full face coverage as possible.  The list is
+;; already quite long (see further below), with more additions to follow
+;; as part of the ongoing development process.
+;;
+;; The theme provides the following customisation options, all of which
+;; are disabled by default:
+;;
+;;     modus-operandi-theme-slanted-constructs             (boolean)
+;;     modus-operandi-theme-bold-constructs                (boolean)
+;;     modus-operandi-theme-variable-pitch-headings        (boolean)
+;;     modus-operandi-theme-rainbow-headings               (boolean)
+;;     modus-operandi-theme-section-headings               (boolean)
+;;     modus-operandi-theme-scale-headings                 (boolean)
+;;     modus-operandi-theme-fringes                        (choice)
+;;     modus-operandi-theme-org-blocks                     (choice)
+;;     modus-operandi-theme-prompts                        (choice)
+;;     modus-operandi-theme-3d-modeline                    (boolean)
+;;     modus-operandi-theme-subtle-diffs                   (boolean)
+;;     modus-operandi-theme-faint-syntax                   (boolean)
+;;     modus-operandi-theme-intense-hl-line                (boolean)
+;;     modus-operandi-theme-intense-paren-match            (boolean)
+;;     modus-operandi-theme-completions                    (choice)
+;;     modus-operandi-theme-override-colors-alist          (alist)
+;;
+;; The default scale is as follows (it can be customised as well):
+;;
+;;     modus-operandi-theme-scale-1 1.05
+;;     modus-operandi-theme-scale-2 1.1
+;;     modus-operandi-theme-scale-3 1.15
+;;     modus-operandi-theme-scale-4 1.2
+;;     modus-operandi-theme-scale-5 1.3
+;;
+;; What follows is the list of explicitly supported packages or face
+;; groups (there are implicitly supported packages as well, which
+;; inherit from font-lock or some basic group).  You are encouraged to
+;; notify me of any missing package or change you would like to see.
+;;
+;;     ace-window
+;;     ag
+;;     alert
+;;     all-the-icons
+;;     annotate
+;;     anzu
+;;     apropos
+;;     apt-sources-list
+;;     artbollocks-mode
+;;     auctex and TeX
+;;     auto-dim-other-buffers
+;;     avy
+;;     bm
+;;     bongo
+;;     boon
+;;     breakpoint (provided by built-in gdb-mi.el)
+;;     buffer-expose
+;;     calendar and diary
+;;     calfw
+;;     centaur-tabs
+;;     change-log and log-view (`vc-print-log' and `vc-print-root-log')
+;;     cider
+;;     circe
+;;     color-rg
+;;     column-enforce-mode
+;;     company-mode
+;;     company-posframe
+;;     compilation-mode
+;;     completions
+;;     counsel
+;;     counsel-css
+;;     counsel-notmuch
+;;     counsel-org-capture-string
+;;     cov
+;;     csv-mode
+;;     ctrlf
+;;     custom (M-x customize)
+;;     dap-mode
+;;     dashboard (emacs-dashboard)
+;;     deadgrep
+;;     debbugs
+;;     define-word
+;;     deft
+;;     dictionary
+;;     diff-hl
+;;     diff-mode
+;;     dim-autoload
+;;     dired
+;;     dired-async
+;;     dired-git
+;;     dired-git-info
+;;     dired-narrow
+;;     dired-subtree
+;;     diredfl
+;;     disk-usage
+;;     doom-modeline
+;;     dynamic-ruler
+;;     easy-jekyll
+;;     easy-kill
+;;     ebdb
+;;     ediff
+;;     eglot
+;;     el-search
+;;     eldoc-box
+;;     elfeed
+;;     elfeed-score
+;;     emms
+;;     enhanced-ruby-mode
+;;     epa
+;;     equake
+;;     erc
+;;     eros
+;;     ert
+;;     eshell
+;;     eshell-fringe-status
+;;     eshell-git-prompt
+;;     eshell-prompt-extras (epe)
+;;     evil (evil-mode)
+;;     evil-goggles
+;;     evil-visual-mark-mode
+;;     eww
+;;     eyebrowse
+;;     fancy-dabbrev
+;;     flycheck
+;;     flycheck-indicator
+;;     flycheck-posframe
+;;     flymake
+;;     flyspell
+;;     flyspell-correct
+;;     flx
+;;     freeze-it
+;;     frog-menu
+;;     focus
+;;     fold-this
+;;     font-lock (generic syntax highlighting)
+;;     forge
+;;     fountain (fountain-mode)
+;;     geiser
+;;     git-commit
+;;     git-gutter (and variants)
+;;     git-lens
+;;     git-rebase
+;;     git-timemachine
+;;     git-walktree
+;;     gnus
+;;     golden-ratio-scroll-screen
+;;     helm
+;;     helm-ls-git
+;;     helm-switch-shell
+;;     helm-xref
+;;     helpful
+;;     highlight-blocks
+;;     highlight-defined
+;;     highlight-escape-sequences (`hes-mode')
+;;     highlight-indentation
+;;     highlight-numbers
+;;     highlight-symbol
+;;     highlight-tail
+;;     highlight-thing
+;;     hl-defined
+;;     hl-fill-column
+;;     hl-line-mode
+;;     hl-todo
+;;     hydra
+;;     hyperlist
+;;     ibuffer
+;;     icomplete
+;;     ido-mode
+;;     iedit
+;;     iflipb
+;;     imenu-list
+;;     indium
+;;     info
+;;     info-colors
+;;     interaction-log
+;;     ioccur
+;;     isearch, occur, etc.
+;;     ivy
+;;     ivy-posframe
+;;     jira (org-jira)
+;;     journalctl-mode
+;;     js2-mode
+;;     julia
+;;     jupyter
+;;     kaocha-runner
+;;     keycast
+;;     line numbers (`display-line-numbers-mode' and global variant)
+;;     lsp-mode
+;;     lsp-ui
+;;     magit
+;;     magit-imerge
+;;     man
+;;     markdown-mode
+;;     markup-faces (`adoc-mode')
+;;     mentor
+;;     messages
+;;     minibuffer-line
+;;     minimap
+;;     modeline
+;;     mood-line
+;;     mu4e
+;;     mu4e-conversation
+;;     multiple-cursors
+;;     neotree
+;;     no-emoji
+;;     notmuch
+;;     num3-mode
+;;     nxml-mode
+;;     orderless
+;;     org
+;;     org-journal
+;;     org-noter
+;;     org-pomodoro
+;;     org-recur
+;;     org-roam
+;;     org-superstar
+;;     org-table-sticky-header
+;;     org-treescope
+;;     origami
+;;     outline-mode
+;;     outline-minor-faces
+;;     package (M-x list-packages)
+;;     page-break-lines
+;;     paradox
+;;     paren-face
+;;     parrot
+;;     pass
+;;     persp-mode
+;;     perspective
+;;     phi-grep
+;;     phi-search
+;;     pkgbuild-mode
+;;     pomidor
+;;     powerline
+;;     powerline-evil
+;;     proced
+;;     prodigy
+;;     rainbow-blocks
+;;     rainbow-identifiers
+;;     rainbow-delimiters
+;;     rcirc
+;;     regexp-builder (also known as `re-builder')
+;;     rg
+;;     ripgrep
+;;     rmail
+;;     ruler-mode
+;;     sallet
+;;     selectrum
+;;     semantic
+;;     sesman
+;;     shell-script-mode
+;;     show-paren-mode
+;;     side-notes
+;;     skewer-mode
+;;     smart-mode-line
+;;     smartparens
+;;     smerge
+;;     spaceline
+;;     speedbar
+;;     spell-fu
+;;     stripes
+;;     suggest
+;;     switch-window
+;;     swiper
+;;     swoop
+;;     sx
+;;     symbol-overlay
+;;     tab-bar-mode
+;;     tab-line-mode
+;;     syslog-mode
+;;     table (built-in table.el)
+;;     telephone-line
+;;     term
+;;     tomatinho
+;;     transient (pop-up windows like Magit's)
+;;     trashed
+;;     treemacs
+;;     tty-menu
+;;     tuareg
+;;     undo-tree
+;;     vc (built-in mode line status for version control)
+;;     vc-annotate (C-x v g)
+;;     vdiff
+;;     vimish-fold
+;;     visible-mark
+;;     visual-regexp
+;;     volatile-highlights
+;;     vterm
+;;     wcheck-mode
+;;     web-mode
+;;     wgrep
+;;     which-function-mode
+;;     which-key
+;;     whitespace-mode
+;;     window-divider-mode
+;;     winum
+;;     writegood-mode
+;;     woman
+;;     xah-elisp-mode
+;;     xref
+;;     xterm-color (and ansi-colors)
+;;     yaml-mode
+;;     yasnippet
+;;     ztree
+
+;;; Code:
+
+
+
+(deftheme modus-operandi
+  "Light theme that conforms with the highest accessibility
+  standard for colour contrast between background and
+  foreground elements (WCAG AAA).")
+
+;;; Custom faces
+
+;; These faces will be inherited by actual constructs.  They are meant
+;; for those cases where a face needs to distinguish its output from
+;; the rest of the text, such as `isearch' and `occur'…  We define
+;; these separately in order to combine each colour with its
+;; appropriate foreground value.  This is to ensure a consistent
+;; contrast ratio of >= 7:1.
+(defgroup modus-theme ()
+  "Theme that ensures WCAG AAA accessibility (contrast ratio
+between foreground and background is >= 7:1)."
+  :group 'faces
+  :prefix "modus-theme-"
+  :link '(url-link :tag "GitLab" "https://gitlab.com/protesilaos/modus-themes";)
+  :tag "Modus Operandi")
+
+(defface modus-theme-subtle-red nil nil)
+(defface modus-theme-subtle-green nil nil)
+(defface modus-theme-subtle-yellow nil nil)
+(defface modus-theme-subtle-blue nil nil)
+(defface modus-theme-subtle-magenta nil nil)
+(defface modus-theme-subtle-cyan nil nil)
+(defface modus-theme-subtle-neutral nil nil)
+(defface modus-theme-intense-red nil nil)
+(defface modus-theme-intense-green nil nil)
+(defface modus-theme-intense-yellow nil nil)
+(defface modus-theme-intense-blue nil nil)
+(defface modus-theme-intense-magenta nil nil)
+(defface modus-theme-intense-cyan nil nil)
+(defface modus-theme-intense-neutral nil nil)
+(defface modus-theme-refine-red nil nil)
+(defface modus-theme-refine-green nil nil)
+(defface modus-theme-refine-yellow nil nil)
+(defface modus-theme-refine-blue nil nil)
+(defface modus-theme-refine-magenta nil nil)
+(defface modus-theme-refine-cyan nil nil)
+(defface modus-theme-active-red nil nil)
+(defface modus-theme-active-green nil nil)
+(defface modus-theme-active-yellow nil nil)
+(defface modus-theme-active-blue nil nil)
+(defface modus-theme-active-magenta nil nil)
+(defface modus-theme-active-cyan nil nil)
+(defface modus-theme-fringe-red nil nil)
+(defface modus-theme-fringe-green nil nil)
+(defface modus-theme-fringe-yellow nil nil)
+(defface modus-theme-fringe-blue nil nil)
+(defface modus-theme-fringe-magenta nil nil)
+(defface modus-theme-fringe-cyan nil nil)
+(defface modus-theme-nuanced-red nil nil)
+(defface modus-theme-nuanced-green nil nil)
+(defface modus-theme-nuanced-yellow nil nil)
+(defface modus-theme-nuanced-blue nil nil)
+(defface modus-theme-nuanced-magenta nil nil)
+(defface modus-theme-nuanced-cyan nil nil)
+(defface modus-theme-special-cold nil nil)
+(defface modus-theme-special-mild nil nil)
+(defface modus-theme-special-warm nil nil)
+(defface modus-theme-special-calm nil nil)
+(defface modus-theme-diff-added nil nil)
+(defface modus-theme-diff-changed nil nil)
+(defface modus-theme-diff-removed nil nil)
+(defface modus-theme-diff-refine-added nil nil)
+(defface modus-theme-diff-refine-changed nil nil)
+(defface modus-theme-diff-refine-removed nil nil)
+(defface modus-theme-diff-focus-added nil nil)
+(defface modus-theme-diff-focus-changed nil nil)
+(defface modus-theme-diff-focus-removed nil nil)
+(defface modus-theme-diff-heading nil nil)
+(defface modus-theme-header nil nil)    ; Name is tentative
+(defface modus-theme-mark-alt nil nil)
+(defface modus-theme-mark-del nil nil)
+(defface modus-theme-mark-sel nil nil)
+(defface modus-theme-mark-symbol nil nil)
+(defface modus-theme-hl-line nil nil)
+
+;;; Customisation options
+
+;; User-facing customisation options.  They are all deactivated by
+;; default (users must opt in).
+(defcustom modus-operandi-theme-slanted-constructs nil
+  "Use slanted text in more code constructs (italics or oblique)."
+  :type 'boolean)
+
+(defcustom modus-operandi-theme-bold-constructs nil
+  "Use bold text in more code constructs."
+  :type 'boolean)
+
+(define-obsolete-variable-alias 'modus-operandi-theme-proportional-fonts
+  'modus-operandi-theme-variable-pitch-headings "`modus-operandi-theme' 
0.11.0")
+
+(defcustom modus-operandi-theme-proportional-fonts nil
+  "Use proportional fonts (variable-pitch) in headings."
+  :type 'boolean)
+
+(defcustom modus-operandi-theme-variable-pitch-headings nil
+  "Use proportional fonts (variable-pitch) in headings."
+  :type 'boolean)
+
+(defcustom modus-operandi-theme-rainbow-headings nil
+  "Use more saturated colours for headings."
+  :type 'boolean)
+
+(defcustom modus-operandi-theme-section-headings nil
+  "Use a background and an overline in headings."
+  :type 'boolean)
+
+(defcustom modus-operandi-theme-scale-headings nil
+  "Use font scaling for headings."
+  :type 'boolean)
+
+(defcustom modus-operandi-theme-scale-1 1.05
+  "Font size that is slightly larger than the base value.
+The default is a floating point that is interpreted as a multiple
+of the base font size.  However, the variable also accepts an
+integer, understood as an absolute height (e.g. a value of 140 is
+the same as setting the font at 14 point size).
+
+For more on the matter, read the documentation of
+`set-face-attribute', specifically the ':height' section."
+  :type 'number)
+
+(defcustom modus-operandi-theme-scale-2 1.1
+  "Font size slightly larger than `modus-operandi-theme-scale-1'.
+The default is a floating point that is interpreted as a multiple
+of the base font size.  However, the variable also accepts an
+integer, understood as an absolute height (e.g. a value of 140 is
+the same as setting the font at 14 point size).
+
+For more on the matter, read the documentation of
+`set-face-attribute', specifically the ':height' section."
+  :type 'number)
+
+(defcustom modus-operandi-theme-scale-3 1.15
+  "Font size slightly larger than `modus-operandi-theme-scale-2'.
+The default is a floating point that is interpreted as a multiple
+of the base font size.  However, the variable also accepts an
+integer, understood as an absolute height (e.g. a value of 140 is
+the same as setting the font at 14 point size).
+
+For more on the matter, read the documentation of
+`set-face-attribute', specifically the ':height' section."
+  :type 'number)
+
+(defcustom modus-operandi-theme-scale-4 1.2
+  "Font size slightly larger than `modus-operandi-theme-scale-3'.
+The default is a floating point that is interpreted as a multiple
+of the base font size.  However, the variable also accepts an
+integer, understood as an absolute height (e.g. a value of 140 is
+the same as setting the font at 14 point size).
+
+For more on the matter, read the documentation of
+`set-face-attribute', specifically the ':height' section."
+  :type 'number)
+
+(defcustom modus-operandi-theme-scale-5 1.3
+  "Font size slightly larger than `modus-operandi-theme-scale-4'.
+The default is a floating point that is interpreted as a multiple
+of the base font size.  However, the variable also accepts an
+integer, understood as an absolute height (e.g. a value of 140 is
+the same as setting the font at 14 point size).
+
+For more on the matter, read the documentation of
+`set-face-attribute', specifically the ':height' section."
+  :type 'number)
+
+(define-obsolete-variable-alias 'modus-operandi-theme-visible-fringes
+  'modus-operandi-theme-fringes "`modus-operandi-theme' 0.12.0")
+
+(defcustom modus-operandi-theme-visible-fringes nil
+  "Use a visible style for fringes."
+  :type 'boolean)
+
+(defcustom modus-operandi-theme-fringes nil
+  "Define the visibility of fringes.
+
+Nil means the fringes have no background colour.  Option `subtle'
+will apply a greyscale value that is visible yet close to the
+main buffer background colour.  Option `intense' will use a more
+pronounced greyscale value."
+  :type '(choice
+          (const :tag "No visible fringes (default)" nil)
+          (const :tag "Subtle greyscale background" subtle)
+          (const :tag "Intense greyscale background" intense)))
+
+(define-obsolete-variable-alias 'modus-operandi-theme-distinct-org-blocks
+  'modus-operandi-theme-org-blocks "`modus-operandi-theme' 0.11.0")
+
+(defcustom modus-operandi-theme-distinct-org-blocks nil
+  "Use a distinct neutral background for `org-mode' blocks."
+  :type 'boolean)
+
+(define-obsolete-variable-alias 'modus-operandi-theme-rainbow-org-src-blocks
+  'modus-operandi-theme-org-blocks "`modus-operandi-theme' 0.11.0")
+
+(defcustom modus-operandi-theme-rainbow-org-src-blocks nil
+  "Use colour-coded backgrounds for `org-mode' source blocks.
+The colour in use depends on the language (send feedback to
+include more languages)."
+  :type 'boolean)
+
+(defcustom modus-operandi-theme-org-blocks nil
+  "Use a subtle grey or colour-coded background for Org blocks.
+
+Nil means that the block will have no background of its own and
+will use the default that applies to the rest of the buffer.
+
+Option `greyscale' will apply a subtle neutral grey background to
+the block's contents.  It also affects the begin and end lines of
+the block: their background will be extended to the edge of the
+window for Emacs version >= 27 where the ':extend' keyword is
+recognised by `set-face-attribute'.
+
+Option `rainbow' will use an accented background for the contents
+of the block.  The exact colour will depend on the programming
+language and is controlled by the `org-src-block-faces'
+variable (refer to the theme's source code for the current
+association list)."
+  :type '(choice
+          (const :tag "No Org block background (default)" nil)
+          (const :tag "Subtle grey block background" greyscale)
+          (const :tag "Colour-coded background per programming language" 
rainbow)))
+
+(defcustom modus-operandi-theme-3d-modeline nil
+  "Use a three-dimensional style for the active mode line."
+  :type 'boolean)
+
+(defcustom modus-operandi-theme-subtle-diffs nil
+  "Use fewer/dim backgrounds in `diff-mode', `ediff',`magit'."
+  :type 'boolean)
+
+(define-obsolete-variable-alias 
'modus-operandi-theme-intense-standard-completions
+  'modus-operandi-theme-completions "`modus-operandi-theme' 0.12.0")
+
+(defcustom modus-operandi-theme-intense-standard-completions nil
+  "Use prominent backgrounds for Icomplete, Ido, or similar."
+  :type 'boolean)
+
+(defcustom modus-operandi-theme-completions nil
+  "Apply special styles to the UI of completion frameworks.
+This concerns Icomplete, Ivy, Helm, Selectrum, Ido, as well as
+any other tool meant to enhance their experience.  The effect
+will vary depending on the completion framework.
+
+Nil means to remain faithful to the metaphors that each UI
+establishes.  For example, Icomplete and Ido only use foreground
+colours to style their matches, whereas Ivy or Helm rely on an
+aesthetic that combines coloured backgrounds with appropriate
+text colour.
+
+Option `moderate' will apply a combination of background and
+foreground that is fairly subtle.  For Icomplete and the like,
+this constitutes a departure from their standard style.  While
+Ivy, Helm, and the others, will use less pronounced colours for
+applicable contexts.
+
+Option `opinionated' will apply colour combinations that
+refashion the completion UI.  So Icomplete et al will now use
+styles that resemble the defaults of Ivy and co., while the
+latter group will revert to an even more nuanced aesthetic."
+  :type '(choice
+          (const :tag "Respect the framework's established aesthetic 
(default)" nil)
+          (const :tag "Subtle backgrounds for various elements" moderate)
+          (const :tag "Radical alternative to the framework's looks" 
opinionated)))
+
+(defcustom modus-operandi-theme-prompts nil
+  "Use subtle or intense styles for minibuffer and REPL prompts.
+
+Nil means to only use an accented foreground colour.
+
+Options `subtle' and `intense' will change both the background
+and the foreground values.  The latter has a more pronounced
+effect than the former."
+  :type '(choice
+          (const :tag "No prompt background (default)" nil)
+          (const :tag "Subtle accented background for the prompt" subtle)
+          (const :tag "Intense background and foreground for the prompt" 
intense)))
+
+(defcustom modus-operandi-theme-intense-hl-line nil
+  "Use more prominent background for `hl-line-mode'."
+  :type 'boolean)
+
+(defcustom modus-operandi-theme-intense-paren-match nil
+  "Use more prominent colour for parenthesis matching."
+  :type 'boolean)
+
+(defcustom modus-operandi-theme-faint-syntax nil
+  "Use less saturated colours for code syntax highlighting."
+  :type 'boolean)
+
+;;; Internal functions
+
+;; Helper functions that are meant to ease the implementation of the
+;; above customisation options.
+(defun modus-operandi-theme-bold-weight ()
+  "Conditional use of a heavier text weight."
+  (when modus-operandi-theme-bold-constructs
+    (list :inherit 'bold)))
+
+(defun modus-operandi-theme-fringe (subtlebg intensebg)
+  "Conditional use of background colours for fringes.
+SUBTLEBG should be a subtle greyscale value.  INTENSEBG must be a
+more pronounced greyscale colour."
+  (pcase modus-operandi-theme-fringes
+    ('intense (list :background intensebg))
+    ('subtle (list :background subtlebg))
+    (_ (list :background nil))))
+
+(defun modus-operandi-theme-prompt (mainfg subtlebg subtlefg intensebg 
intensefg)
+  "Conditional use of background colours for prompts.
+MAINFG is the prompt's standard foreground.  SUBTLEBG should be a
+subtle accented background that works with SUBTLEFG.  INTENSEBG
+must be a more pronounced accented colour that should be
+combinable with INTENSEFG."
+  (pcase modus-operandi-theme-prompts
+    ('intense (list :background intensebg :foreground intensefg))
+    ('subtle (list :background subtlebg :foreground subtlefg))
+    (_ (list :background nil :foreground mainfg))))
+
+(defun modus-operandi-theme-paren (normalbg intensebg)
+  "Conditional use of intense colours for matching parentheses.
+NORMALBG should the special palette colour 'bg-paren-match' or
+something similar.  INTENSEBG must be easier to discern next to
+other backgrounds, such as the special palette colour
+'bg-paren-match-intense'."
+  (if modus-operandi-theme-intense-paren-match
+      (list :background intensebg)
+    (list :background normalbg)))
+
+(defun modus-operandi-theme-syntax-foreground (normal faint)
+  "Apply foreground value to code syntax.
+NORMAL is the more saturated colour, which should be the default.
+FAINT is the less saturated colour."
+  (if modus-operandi-theme-faint-syntax
+      (list :foreground faint)
+    (list :foreground normal)))
+
+(defun modus-operandi-theme-heading-foreground (subtle rainbow)
+  "Apply foreground value to headings.
+SUBTLE is the default aesthetic.  RAINBOW is the saturated one."
+  (if modus-operandi-theme-rainbow-headings
+      (list :foreground rainbow)
+    (list :foreground subtle)))
+
+(defun modus-operandi-theme-heading-block (bg fg)
+  "Conditionally extend heading styles.
+Apply BG to background and FG to overline."
+  (if modus-operandi-theme-section-headings
+      (append
+       (and (>= emacs-major-version 27) '(:extend t))
+       (list :background bg :overline fg))
+    (list :background nil :overline nil)))
+
+(defun modus-operandi-theme-org-todo-block (bgbox fgbox fg)
+  "Conditionally extend the styles of Org keywords.
+BGBOX applies to the background.  FGBOX applies to the foreground
+and the border.  FG is used when no block style is in effect."
+  (if modus-operandi-theme-section-headings
+      (list :background bgbox :foreground fgbox :box (list :color fgbox))
+    (list :foreground fg)))
+
+(defun modus-operandi-theme-org-block (bgblk)
+  "Conditionally set the background of Org blocks.
+BGBLK applies to a distinct neutral background.  Else blocks have
+no background of their own (the default), so they look the same
+as the rest of the buffer.
+
+`modus-operandi-theme-org-blocks' also accepts a `rainbow' option
+which is applied conditionally to `org-src-block-faces' (see the
+theme's source code)."
+  (if (eq modus-operandi-theme-org-blocks 'greyscale)
+      (append
+       (and (>= emacs-major-version 27) '(:extend t))
+       (list :background bgblk))
+    (list :background nil)))
+
+(defun modus-operandi-theme-org-block-delim (bgaccent fgaccent bg fg)
+  "Conditionally set the styles of Org block delimiters.
+BG, FG, BGACCENT, FGACCENT apply a background and foreground
+colour respectively.
+
+The former pair is a greyscale combination that should be more
+distinct than the background of the block.  It is applied to the
+default styles or when `modus-operandi-theme-org-blocks' is set
+to `greyscale'.
+
+The latter pair should be more subtle than the background of the
+block, as it is used when `modus-operandi-theme-org-blocks' is
+set to `rainbow'."
+  (pcase modus-operandi-theme-org-blocks
+    ('greyscale (append (and (>= emacs-major-version 27) '(:extend t))
+                        (list :background bg :foreground fg)))
+    ('rainbow (list :background bgaccent :foreground fgaccent))
+    (_ (list :background bg :foreground fg))))
+
+(defun modus-operandi-theme-modeline-box (col3d col &optional btn int)
+  "Control the box properties of the mode line.
+COL3D is the border that is intended for the three-dimensional
+modeline.  COL applies to the two-dimensional modeline.  Optional
+BTN provides the 3d button style.  Optional INT defines a border
+width."
+  (let* ((style (if btn 'released-button nil))
+         (int (if int int 1)))
+    (if modus-operandi-theme-3d-modeline
+        (list :line-width int :color col3d :style style)
+      (list :line-width 1 :color col :style nil))))
+
+(defun modus-operandi-theme-modeline-props (bg3d fg3d &optional bg fg)
+  "Control the background and foreground of the mode line.
+BG is the modeline's background.  FG is the modeline's
+foreground.  BG3D and FG3D apply to the three-dimensional
+modeline style."
+  (if modus-operandi-theme-3d-modeline
+      (list :background bg3d :foreground fg3d)
+    (list :background bg :foreground fg)))
+
+(defun modus-operandi-theme-diffs (subtle-bg subtle-fg intense-bg intense-fg)
+  "Colour combinations for `modus-operandi-theme-subtle-diffs'.
+
+SUBTLE-BG should be similar or the same as the main background.
+SUBTLE-FG should be an appropriate accent value.  INTENSE-BG
+should be one of the dedicated backgrounds for diffs.  INTENSE-FG
+should be one of the dedicated foregrounds for diffs"
+  (if modus-operandi-theme-subtle-diffs
+      (list :background subtle-bg :foreground subtle-fg)
+    (list :background intense-bg :foreground intense-fg)))
+
+(defun modus-operandi-theme-standard-completions (mainfg subtlebg intensebg 
intensefg)
+  "Combinations for `modus-operandi-theme-completions'.
+These are intended for Icomplete, Ido, and related.
+
+MAINFG is an accented foreground value.  SUBTLEBG is an accented
+background value that can be combined with MAINFG.  INTENSEBG and
+INTENSEFG are accented colours that are designed to be used in
+tandem."
+  (pcase modus-operandi-theme-completions
+    ('opinionated (list :background intensebg :foreground intensefg))
+    ('moderate (list :background subtlebg :foreground mainfg))
+    (_ (list :foreground mainfg))))
+
+(defun modus-operandi-theme-extra-completions (subtleface intenseface altface 
&optional altfg bold)
+  "Combinations for `modus-operandi-theme-completions'.
+These are intended for Helm, Ivy, Selectrum, etc.
+
+SUBTLEFACE and INTENSEFACE are custom theme faces that combine a
+background and foreground value.  The difference between the two
+is a matter of degree.
+
+ALTFACE is a combination of colours that represents a departure
+from the UI's default aesthetics.  Optional ALTFG is meant to be
+used in tandem with it.
+
+Optional BOLD will apply a heavier weight to the text."
+  (pcase modus-operandi-theme-completions
+    ('opinionated (list :inherit (list altface bold)
+                        :foreground (if altfg altfg 'unspecified)))
+    ('moderate (list :inherit (list subtleface bold)))
+    (_ (list :inherit (list intenseface bold)))))
+
+(defun modus-operandi-theme-scale (amount)
+  "Scale heading by AMOUNT.
+
+AMOUNT is a customisation option."
+  (when modus-operandi-theme-scale-headings
+    (list :height amount)))
+
+;;; Colour palette
+
+;; Define colour palette.  Each colour must have a >= 7:1 contrast
+;; ratio relative to the foreground/background colour it is rendered
+;; against.
+;;
+;; The design of the colour palette as a macro that maps it to faces is
+;; adapted from zenbern-theme.el, last seen at commit 7dd7968:
+;; https://github.com/bbatsov/zenburn-emacs
+(eval-and-compile
+  (defconst modus-operandi-theme-default-colors-alist
+    '(;; base values
+      ("bg-main" . "#ffffff") ("fg-main" . "#000000")
+      ("bg-alt" . "#f0f0f0") ("fg-alt" . "#505050")
+      ("bg-dim" . "#f8f8f8") ("fg-dim" . "#282828")
+      ;; specifically for on/off states (e.g. `mode-line')
+      ;;
+      ;; must be combined with themselves
+      ("bg-active" . "#e0e0e0") ("fg-active" . "#191919")
+      ("bg-inactive" . "#efedef") ("fg-inactive" . "#424242")
+      ;; special base values, used only for cases where the above
+      ;; fg-* or bg-* cannot or should not be used (to avoid confusion)
+      ;; must be combined with: {fg,bg}-{main,alt,dim}
+      ("bg-special-cold" . "#dde3f4") ("fg-special-cold" . "#093060")
+      ("bg-special-mild" . "#c4ede0") ("fg-special-mild" . "#184034")
+      ("bg-special-warm" . "#f0e0d4") ("fg-special-warm" . "#5d3026")
+      ("bg-special-calm" . "#f8ddea") ("fg-special-calm" . "#61284f")
+      ;; styles for the main constructs
+      ;;
+      ;; must be combined with: `bg-main', `bg-alt', `bg-dim'
+      ("red" . "#a60000") ("green" . "#005e00")
+      ("yellow" . "#813e00") ("blue" . "#0030a6")
+      ("magenta" . "#721045") ("cyan" . "#00538b")
+      ;; styles for common, but still specialised constructs
+      ;;
+      ;; must be combined with: `bg-main', `bg-alt', `bg-dim'
+      ("red-alt" . "#972500") ("green-alt" . "#315b00")
+      ("yellow-alt" . "#70480f") ("blue-alt" . "#223fbf")
+      ("magenta-alt" . "#8f0075") ("cyan-alt" . "#30517f")
+      ;; same purpose as above, just slight differences
+      ;;
+      ;; must be combined with: `bg-main', `bg-alt', `bg-dim'
+      ("red-alt-other" . "#a0132f") ("green-alt-other" . "#145c33")
+      ("yellow-alt-other" . "#863927") ("blue-alt-other" . "#0000bb")
+      ("magenta-alt-other" . "#5317ac") ("cyan-alt-other" . "#005a5f")
+      ;; styles for desaturated foreground text, intended for use with
+      ;; the `modus-operandi-theme-faint-syntax' option
+      ;;
+      ;; must be combined with: `bg-main', `bg-alt', `bg-dim'
+      ("red-faint" . "#7f1010") ("green-faint" . "#104410")
+      ("yellow-faint" . "#5f4400") ("blue-faint" . "#002f88")
+      ("magenta-faint" . "#752f50") ("cyan-faint" . "#12506f")
+
+      ("red-alt-faint" . "#702f00") ("green-alt-faint" . "#30440f")
+      ("yellow-alt-faint" . "#5d5000") ("blue-alt-faint" . "#003f78")
+      ("magenta-alt-faint" . "#702565") ("cyan-alt-faint" . "#354f6f")
+
+      ("red-alt-other-faint" . "#7f002f") ("green-alt-other-faint" . "#0f443f")
+      ("yellow-alt-other-faint" . "#5e3a20") ("blue-alt-other-faint" . 
"#1f2f6f")
+      ("magenta-alt-other-faint" . "#5f3f7f") ("cyan-alt-other-faint" . 
"#2e584f")
+      ;; styles for elements that should be very subtle, yet accented
+      ;;
+      ;; must be combined with: `bg-main', `bg-alt', `bg-dim' or any of
+      ;; the "nuanced" backgrounds
+      ("red-nuanced" . "#5f0000") ("green-nuanced" . "#004000")
+      ("yellow-nuanced" . "#3f3000") ("blue-nuanced" . "#201f55")
+      ("magenta-nuanced" . "#541f4f") ("cyan-nuanced" . "#0f3360")
+      ;; styles for slightly accented background
+      ;;
+      ;; must be combined with any of the above foreground values
+      ("red-nuanced-bg" . "#fff1f0") ("green-nuanced-bg" . "#ecf7ed")
+      ("yellow-nuanced-bg" . "#fff3da") ("blue-nuanced-bg" . "#f3f3ff")
+      ("magenta-nuanced-bg" . "#fdf0ff") ("cyan-nuanced-bg" . "#ebf6fa")
+      ;; styles for elements that should draw attention to themselves
+      ;;
+      ;; must be combined with: `bg-main'
+      ("red-intense" . "#b60000") ("green-intense" . "#006800")
+      ("yellow-intense" . "#904200") ("blue-intense" . "#1111ee")
+      ("magenta-intense" . "#7000e0") ("cyan-intense" . "#205b93")
+      ;; styles for background elements that should be visible yet
+      ;; subtle
+      ;;
+      ;; must be combined with: `fg-dim'
+      ("red-subtle-bg" . "#f2b0a2") ("green-subtle-bg" . "#aecf90")
+      ("yellow-subtle-bg" . "#e4c340") ("blue-subtle-bg" . "#b5d0ff")
+      ("magenta-subtle-bg" . "#f0d3ff") ("cyan-subtle-bg" . "#c0efff")
+      ;; styles for background elements that should be visible and
+      ;; distinguishable
+      ;;
+      ;; must be combined with: `fg-main'
+      ("red-intense-bg" . "#ff8892") ("green-intense-bg" . "#5ada88")
+      ("yellow-intense-bg" . "#f5df23") ("blue-intense-bg" . "#6aaeff")
+      ("magenta-intense-bg" . "#d5baff") ("cyan-intense-bg" . "#42cbd4")
+      ;; styles for refined contexts where both the foreground and the
+      ;; background need to have the same/similar hue
+      ;;
+      ;; must be combined with themselves OR the foregrounds can be
+      ;; combined with any of the base backgrounds
+      ("red-refine-bg" . "#ffcccc") ("red-refine-fg" . "#780000")
+      ("green-refine-bg" . "#aceaac") ("green-refine-fg" . "#004c00")
+      ("yellow-refine-bg" . "#fff29a") ("yellow-refine-fg" . "#604000")
+      ("blue-refine-bg" . "#8ac7ff") ("blue-refine-fg" . "#002288")
+      ("magenta-refine-bg" . "#ffccff") ("magenta-refine-fg" . "#770077")
+      ("cyan-refine-bg" . "#8eecf4") ("cyan-refine-fg" . "#004850")
+      ;; styles that are meant exclusively for the mode line
+      ;;
+      ;; must be combined with: `bg-active', `bg-inactive'
+      ("red-active" . "#930000") ("green-active" . "#005300")
+      ("yellow-active" . "#703700") ("blue-active" . "#0033c0")
+      ("magenta-active" . "#6320a0") ("cyan-active" . "#004882")
+      ;; styles that are meant exclusively for the fringes
+      ;;
+      ;; must have a minimum contrast ratio of 1.5:1 with `bg-inactive'
+      ;; and be combined with `fg-main' or `fg-dim'
+      ("red-fringe-bg" . "#ff9a9a") ("green-fringe-bg" . "#86cf86")
+      ("yellow-fringe-bg" . "#e0c050") ("blue-fringe-bg" . "#82afff")
+      ("magenta-fringe-bg" . "#f0a3ff") ("cyan-fringe-bg" . "#00d6e0")
+      ;; styles reserved for specific faces
+      ;;
+      ;; `bg-hl-line' is between `bg-dim' and `bg-alt', so it should
+      ;; work with all accents that cover those two, plus `bg-main'
+      ;;
+      ;; `bg-header' is between `bg-active' and `bg-inactive', so it
+      ;; can be combined with any of the "active" values, plus the
+      ;; "special" and base foreground colours
+      ;;
+      ;; `bg-paren-match', `bg-paren-match-intense', `bg-region' and
+      ;; `bg-tab-active' must be combined with `fg-main', while
+      ;; `bg-tab-inactive' should be combined with `fg-dim'
+      ;;
+      ;; `bg-tab-bar' is only intended for the bar that holds the tabs and
+      ;; can only be combined with `fg-main'
+      ;;
+      ;; `fg-tab-active' is meant to be combined with `bg-tab-active',
+      ;; though only for styling special elements, such as underlining
+      ;; the current tab
+      ;;
+      ;; `fg-escape-char-construct' and `fg-escape-char-backslash' can
+      ;; be combined `bg-main', `bg-dim', `bg-alt'
+      ;;
+      ;; `fg-lang-error', `fg-lang-warning', `fg-lang-note' can be
+      ;; combined with `bg-main', `bg-dim', `bg-alt'
+      ;;
+      ;; `fg-mark-sel', `fg-mark-del', `fg-mark-alt' can be combined
+      ;; with `bg-main', `bg-dim', `bg-alt', `bg-hl-line'
+      ;;
+      ;; `fg-unfocused' must be combined with `fg-main'
+      ;;
+      ;; the window divider colours apply to faces with just an fg value
+      ;;
+      ;; all pairs are combinable with themselves
+      ("bg-hl-line" . "#f2eff3")
+      ("bg-paren-match" . "#e0af82")
+      ("bg-paren-match-intense" . "#70af9f")
+      ("bg-region" . "#bcbcbc")
+
+      ("bg-tab-bar" . "#d5d5d5")
+      ("bg-tab-active" . "#f6f6f6")
+      ("bg-tab-inactive" . "#bdbdbd")
+      ("fg-tab-active" . "#30169e")
+
+      ("fg-escape-char-construct" . "#8b1030")
+      ("fg-escape-char-backslash" . "#654d0f")
+
+      ("fg-lang-error" . "#9f004f")
+      ("fg-lang-warning" . "#604f0f")
+      ("fg-lang-note" . "#4040ae")
+
+      ("fg-window-divider-inner" . "#888888")
+      ("fg-window-divider-outer" . "#585858")
+
+      ("fg-unfocused" . "#56576d")
+
+      ("bg-header" . "#e5e5e5") ("fg-header" . "#2a2a2a")
+
+      ("bg-whitespace" . "#fff8fc") ("fg-whitespace" . "#645060")
+
+      ("bg-diff-heading" . "#b7c2dd") ("fg-diff-heading" . "#043355")
+      ("bg-diff-added" . "#d4fad4") ("fg-diff-added" . "#004500")
+      ("bg-diff-changed" . "#fcefcf") ("fg-diff-changed" . "#524200")
+      ("bg-diff-removed" . "#ffe8ef") ("fg-diff-removed" . "#691616")
+
+      ("bg-diff-refine-added" . "#94cf94") ("fg-diff-refine-added" . "#002a00")
+      ("bg-diff-refine-changed" . "#cccf8f") ("fg-diff-refine-changed" . 
"#302010")
+      ("bg-diff-refine-removed" . "#daa2b0") ("fg-diff-refine-removed" . 
"#400000")
+
+      ("bg-diff-focus-added" . "#bbeabb") ("fg-diff-focus-added" . "#002c00")
+      ("bg-diff-focus-changed" . "#ecdfbf") ("fg-diff-focus-changed" . 
"#392900")
+      ("bg-diff-focus-removed" . "#efcbcf") ("fg-diff-focus-removed" . 
"#4a0000")
+
+      ("bg-diff-neutral-0" . "#979797") ("fg-diff-neutral-0" . "#040404")
+      ("bg-diff-neutral-1" . "#b0b0b0") ("fg-diff-neutral-1" . "#252525")
+      ("bg-diff-neutral-2" . "#cccccc") ("fg-diff-neutral-2" . "#3a3a3a")
+
+      ("bg-mark-sel" . "#a0f0cf") ("fg-mark-sel" . "#005040")
+      ("bg-mark-del" . "#ffccbb") ("fg-mark-del" . "#840040")
+      ("bg-mark-alt" . "#f5d88f") ("fg-mark-alt" . "#782900"))
+    "The entire palette of `modus-operandi-theme'.
+Each element has the form (NAME . HEX).")
+
+  (defcustom modus-operandi-theme-override-colors-alist '()
+    "Association list of palette colour overrides.
+Values can be mapped to variables, using the same syntax as the
+one present in `modus-operandi-theme-default-colors-alist'.
+
+This is only meant for do-it-yourself usage, with the
+understanding that the user is responsible for the resulting
+contrast ratio between new and existing colours."
+    :type '(alist
+            :key-type (string :tag "Name")
+            :value-type (string :tag " Hex")))
+
+  (defmacro modus-operandi-theme-with-color-variables (&rest body)
+    "`let' bind all colours around BODY.
+Also bind `class' to ((class color) (min-colors 89))."
+    (declare (indent 0))
+    `(let ((class '((class color) (min-colors 89)))
+           ,@(mapcar (lambda (cons)
+                       (list (intern (car cons)) (cdr cons)))
+                     (append modus-operandi-theme-default-colors-alist
+                             modus-operandi-theme-override-colors-alist))
+           ;; simple conditional styles that evaluate user-facing
+           ;; customisation options
+           (modus-theme-slant
+            (if modus-operandi-theme-slanted-constructs 'italic 'normal))
+           (modus-theme-variable-pitch
+            (if modus-operandi-theme-variable-pitch-headings 'variable-pitch 
'default)))
+       ,@body)))
+
+
+
+;;; Faces
+
+(modus-operandi-theme-with-color-variables
+  (custom-theme-set-faces
+   'modus-operandi
+;;;; custom faces
+   ;; these bespoke faces are inherited by other constructs below
+;;;;; subtle coloured backgrounds
+   `(modus-theme-subtle-red ((,class :background ,red-subtle-bg :foreground 
,fg-dim)))
+   `(modus-theme-subtle-green ((,class :background ,green-subtle-bg 
:foreground ,fg-dim)))
+   `(modus-theme-subtle-yellow ((,class :background ,yellow-subtle-bg 
:foreground ,fg-dim)))
+   `(modus-theme-subtle-blue ((,class :background ,blue-subtle-bg :foreground 
,fg-dim)))
+   `(modus-theme-subtle-magenta ((,class :background ,magenta-subtle-bg 
:foreground ,fg-dim)))
+   `(modus-theme-subtle-cyan ((,class :background ,cyan-subtle-bg :foreground 
,fg-dim)))
+   `(modus-theme-subtle-neutral ((,class :background ,bg-inactive :foreground 
,fg-inactive)))
+;;;;; intense coloured backgrounds
+   `(modus-theme-intense-red ((,class :background ,red-intense-bg :foreground 
,fg-main)))
+   `(modus-theme-intense-green ((,class :background ,green-intense-bg 
:foreground ,fg-main)))
+   `(modus-theme-intense-yellow ((,class :background ,yellow-intense-bg 
:foreground ,fg-main)))
+   `(modus-theme-intense-blue ((,class :background ,blue-intense-bg 
:foreground ,fg-main)))
+   `(modus-theme-intense-magenta ((,class :background ,magenta-intense-bg 
:foreground ,fg-main)))
+   `(modus-theme-intense-cyan ((,class :background ,cyan-intense-bg 
:foreground ,fg-main)))
+   `(modus-theme-intense-neutral ((,class :background ,bg-active :foreground 
,fg-main)))
+;;;;; refined background and foreground combinations
+   ;; general purpose styles that use an accented foreground against an
+   ;; accented background
+   `(modus-theme-refine-red ((,class :background ,red-refine-bg :foreground 
,red-refine-fg)))
+   `(modus-theme-refine-green ((,class :background ,green-refine-bg 
:foreground ,green-refine-fg)))
+   `(modus-theme-refine-yellow ((,class :background ,yellow-refine-bg 
:foreground ,yellow-refine-fg)))
+   `(modus-theme-refine-blue ((,class :background ,blue-refine-bg :foreground 
,blue-refine-fg)))
+   `(modus-theme-refine-magenta ((,class :background ,magenta-refine-bg 
:foreground ,magenta-refine-fg)))
+   `(modus-theme-refine-cyan ((,class :background ,cyan-refine-bg :foreground 
,cyan-refine-fg)))
+;;;;; "active" combinations, mostly for use on the mode line
+   `(modus-theme-active-red ((,class :background ,red-active :foreground 
,bg-active)))
+   `(modus-theme-active-green ((,class :background ,green-active :foreground 
,bg-active)))
+   `(modus-theme-active-yellow ((,class :background ,yellow-active :foreground 
,bg-active)))
+   `(modus-theme-active-blue ((,class :background ,blue-active :foreground 
,bg-active)))
+   `(modus-theme-active-magenta ((,class :background ,magenta-active 
:foreground ,bg-active)))
+   `(modus-theme-active-cyan ((,class :background ,cyan-active :foreground 
,bg-active)))
+;;;;; nuanced backgrounds
+   ;; useful for adding an accented background that is suitable for all
+   ;; main foreground colours (intended for use in Org source blocks)
+   `(modus-theme-nuanced-red ((,class :background ,red-nuanced-bg
+                                      ,@(and (>= emacs-major-version 27) 
'(:extend t)))))
+   `(modus-theme-nuanced-green ((,class :background ,green-nuanced-bg
+                                        ,@(and (>= emacs-major-version 27) 
'(:extend t)))))
+   `(modus-theme-nuanced-yellow ((,class :background ,yellow-nuanced-bg
+                                         ,@(and (>= emacs-major-version 27) 
'(:extend t)))))
+   `(modus-theme-nuanced-blue ((,class :background ,blue-nuanced-bg
+                                       ,@(and (>= emacs-major-version 27) 
'(:extend t)))))
+   `(modus-theme-nuanced-magenta ((,class :background ,magenta-nuanced-bg
+                                          ,@(and (>= emacs-major-version 27) 
'(:extend t)))))
+   `(modus-theme-nuanced-cyan ((,class :background ,cyan-nuanced-bg
+                                       ,@(and (>= emacs-major-version 27) 
'(:extend t)))))
+;;;;; fringe-specific combinations
+   `(modus-theme-fringe-red ((,class :background ,red-fringe-bg :foreground 
,fg-dim)))
+   `(modus-theme-fringe-green ((,class :background ,green-fringe-bg 
:foreground ,fg-dim)))
+   `(modus-theme-fringe-yellow ((,class :background ,yellow-fringe-bg 
:foreground ,fg-dim)))
+   `(modus-theme-fringe-blue ((,class :background ,blue-fringe-bg :foreground 
,fg-dim)))
+   `(modus-theme-fringe-magenta ((,class :background ,magenta-fringe-bg 
:foreground ,fg-dim)))
+   `(modus-theme-fringe-cyan ((,class :background ,cyan-fringe-bg :foreground 
,fg-dim)))
+;;;;; special base values
+   ;; these are closer to the grayscale than the accents defined above
+   ;; and should only be used when the next closest alternative would be
+   ;; a greyscale value than an accented one
+   `(modus-theme-special-cold ((,class :background ,bg-special-cold 
:foreground ,fg-special-cold)))
+   `(modus-theme-special-mild ((,class :background ,bg-special-mild 
:foreground ,fg-special-mild)))
+   `(modus-theme-special-warm ((,class :background ,bg-special-warm 
:foreground ,fg-special-warm)))
+   `(modus-theme-special-calm ((,class :background ,bg-special-calm 
:foreground ,fg-special-calm)))
+;;;;; diff-specific combinations
+   ;; intended for `diff-mode' or equivalent
+   `(modus-theme-diff-added ((,class :background ,bg-diff-added :foreground 
,fg-diff-added)))
+   `(modus-theme-diff-changed ((,class :background ,bg-diff-changed 
:foreground ,fg-diff-changed)))
+   `(modus-theme-diff-removed ((,class :background ,bg-diff-removed 
:foreground ,fg-diff-removed)))
+   `(modus-theme-diff-refine-added ((,class :background ,bg-diff-refine-added 
:foreground ,fg-diff-refine-added)))
+   `(modus-theme-diff-refine-changed ((,class :background 
,bg-diff-refine-changed :foreground ,fg-diff-refine-changed)))
+   `(modus-theme-diff-refine-removed ((,class :background 
,bg-diff-refine-removed :foreground ,fg-diff-refine-removed)))
+   `(modus-theme-diff-focus-added ((,class :background ,bg-diff-focus-added 
:foreground ,fg-diff-focus-added)))
+   `(modus-theme-diff-focus-changed ((,class :background 
,bg-diff-focus-changed :foreground ,fg-diff-focus-changed)))
+   `(modus-theme-diff-focus-removed ((,class :background 
,bg-diff-focus-removed :foreground ,fg-diff-focus-removed)))
+   `(modus-theme-diff-heading ((,class :background ,bg-diff-heading 
:foreground ,fg-diff-heading)))
+;;;;; mark indicators
+   ;; colour combinations intended for Dired, Ibuffer, or equivalent
+   `(modus-theme-header ((,class :inherit bold :foreground ,fg-main)))
+   `(modus-theme-mark-alt ((,class :inherit bold :background ,bg-mark-alt 
:foreground ,fg-mark-alt)))
+   `(modus-theme-mark-del ((,class :inherit bold :background ,bg-mark-del 
:foreground ,fg-mark-del)))
+   `(modus-theme-mark-sel ((,class :inherit bold :background ,bg-mark-sel 
:foreground ,fg-mark-sel)))
+   `(modus-theme-mark-symbol ((,class :inherit bold :foreground ,blue-alt)))
+;;;;; other custom faces
+   `(modus-theme-hl-line ((,class :background ,(if 
modus-operandi-theme-intense-hl-line
+                                                   bg-active bg-hl-line)
+                                  (and (>= emacs-major-version 27) '(:extend 
t)))))
+;;;; standard faces
+;;;;; absolute essentials
+   `(default ((,class :background ,bg-main :foreground ,fg-main)))
+   `(cursor ((,class :background ,fg-main)))
+   `(fringe ((,class ,@(modus-operandi-theme-fringe bg-inactive bg-active)
+                     :foreground ,fg-main)))
+   `(vertical-border ((,class :foreground ,fg-window-divider-inner)))
+;;;;; basic and/or ungrouped styles
+   ;; Modify the `bold' face to change the weight of all "bold" elements
+   ;; defined by the theme.  You need a typeface that supports a
+   ;; multitude of heavier weights than the regular one and then you
+   ;; must specify the exact name of the one you wish to apply.  Example
+   ;; for your init.el:
+   ;;
+   ;; (set-face-attribute 'bold nil :weight 'semibold)
+   `(bold ((,class :weight bold)))
+   `(comint-highlight-input ((,class :inherit bold)))
+   `(comint-highlight-prompt ((,class ,@(modus-operandi-theme-bold-weight)
+                                      ,@(modus-operandi-theme-prompt cyan
+                                                                     
blue-nuanced-bg
+                                                                     blue-alt
+                                                                     
blue-refine-bg
+                                                                     
fg-main))))
+   `(error ((,class :inherit bold :foreground ,red)))
+   `(escape-glyph ((,class :foreground ,fg-escape-char-construct)))
+   `(file-name-shadow ((,class :foreground ,fg-unfocused)))
+   `(header-line ((,class :background ,bg-header :foreground ,fg-header)))
+   `(header-line-highlight ((,class :inherit modus-theme-active-blue)))
+   `(homoglyph ((,class :foreground ,fg-escape-char-construct)))
+   `(ibuffer-locked-buffer ((,class :foreground ,yellow-alt-other)))
+   `(italic ((,class :slant italic)))
+   `(nobreak-hyphen ((,class :foreground ,fg-escape-char-construct)))
+   `(nobreak-space ((,class :foreground ,fg-escape-char-construct :underline 
t)))
+   `(minibuffer-prompt ((,class ,@(modus-operandi-theme-prompt cyan-alt-other
+                                                               cyan-nuanced-bg
+                                                               cyan
+                                                               cyan-refine-bg
+                                                               fg-main))))
+   `(mm-command-output ((,class :foreground ,red-alt-other)))
+   `(mm-uu-extract ((,class :background ,bg-dim :foreground ,fg-special-mild)))
+   `(next-error ((,class :inherit modus-theme-subtle-red)))
+   `(rectangle-preview ((,class :inherit modus-theme-special-mild)))
+   `(region ((,class :background ,bg-region :foreground ,fg-main)))
+   `(secondary-selection ((,class :inherit modus-theme-special-cold)))
+   `(shadow ((,class :foreground ,fg-alt)))
+   `(success ((,class :inherit bold :foreground ,green)))
+   `(trailing-whitespace ((,class :background ,red-intense-bg)))
+   `(warning ((,class :inherit bold :foreground ,yellow)))
+;;;;; buttons, links, widgets
+   `(button ((,class :foreground ,blue-alt-other :underline t)))
+   `(link ((,class :foreground ,blue-alt-other :underline t)))
+   `(link-visited ((,class :foreground ,magenta-alt-other :underline t)))
+   `(tooltip ((,class :background ,bg-special-cold :foreground ,fg-main)))
+   `(widget-button ((,class :inherit button)))
+   `(widget-button-pressed ((,class :inherit button :foreground ,magenta)))
+   `(widget-documentation ((,class :foreground ,green)))
+   `(widget-field ((,class :background ,bg-alt :foreground ,fg-dim)))
+   `(widget-inactive ((,class :background ,bg-inactive :foreground 
,fg-inactive)))
+   `(widget-single-line-field ((,class :inherit widget-field)))
+;;;;; ag
+   `(ag-hit-face ((,class :foreground ,fg-special-cold)))
+   `(ag-match-face ((,class :inherit modus-theme-special-calm)))
+;;;;; alert
+   `(alert-high-face ((,class :inherit bold :foreground ,red-alt)))
+   `(alert-low-face ((,class :foreground ,fg-special-mild)))
+   `(alert-moderate-face ((,class :inherit bold :foreground ,yellow)))
+   `(alert-trivial-face ((,class :foreground ,fg-special-calm)))
+   `(alert-urgent-face ((,class :inherit bold :foreground ,red-intense)))
+;;;;; all-the-icons
+   `(all-the-icons-blue ((,class :foreground ,blue)))
+   `(all-the-icons-blue-alt ((,class :foreground ,blue-alt)))
+   `(all-the-icons-cyan ((,class :foreground ,cyan)))
+   `(all-the-icons-cyan-alt ((,class :foreground ,cyan-alt)))
+   `(all-the-icons-dblue ((,class :foreground ,blue-alt-other)))
+   `(all-the-icons-dcyan ((,class :foreground ,cyan-alt-other)))
+   `(all-the-icons-dgreen ((,class :foreground ,green-alt-other)))
+   `(all-the-icons-dired-dir-face ((,class :foreground ,blue)))
+   `(all-the-icons-dmaroon ((,class :foreground ,magenta-alt-other)))
+   `(all-the-icons-dorange ((,class :foreground ,red-alt-other)))
+   `(all-the-icons-dpink ((,class :foreground ,magenta)))
+   `(all-the-icons-dpurple ((,class :foreground ,magenta-alt)))
+   `(all-the-icons-dred ((,class :foreground ,red)))
+   `(all-the-icons-dsilver ((,class :foreground ,fg-special-cold)))
+   `(all-the-icons-dyellow ((,class :foreground ,yellow)))
+   `(all-the-icons-green ((,class :foreground ,green)))
+   `(all-the-icons-lblue ((,class :foreground ,blue-refine-fg)))
+   `(all-the-icons-lcyan ((,class :foreground ,cyan-refine-fg)))
+   `(all-the-icons-lgreen ((,class :foreground ,green-refine-fg)))
+   `(all-the-icons-lmaroon ((,class :foreground ,magenta-refine-fg)))
+   `(all-the-icons-lorange ((,class :foreground ,red-refine-fg)))
+   `(all-the-icons-lpink ((,class :foreground ,magenta-refine-fg)))
+   `(all-the-icons-lpurple ((,class :foreground ,magenta-refine-fg)))
+   `(all-the-icons-lred ((,class :foreground ,red-refine-fg)))
+   `(all-the-icons-lsilver ((,class :foreground ,fg-special-cold)))
+   `(all-the-icons-lyellow ((,class :foreground ,yellow-refine-fg)))
+   `(all-the-icons-maroon ((,class :foreground ,magenta)))
+   `(all-the-icons-orange ((,class :foreground ,red-alt)))
+   `(all-the-icons-pink ((,class :foreground ,magenta)))
+   `(all-the-icons-purple ((,class :foreground ,magenta-alt)))
+   `(all-the-icons-purple-alt ((,class :foreground ,magenta-alt-other)))
+   `(all-the-icons-red ((,class :foreground ,red)))
+   `(all-the-icons-red-alt ((,class :foreground ,red-alt)))
+   `(all-the-icons-silver ((,class :foreground ,fg-special-cold)))
+   `(all-the-icons-yellow ((,class :foreground ,yellow)))
+;;;;; annotate
+   `(annotate-annotation ((,class :inherit modus-theme-subtle-blue)))
+   `(annotate-annotation-secondary ((,class :inherit 
modus-theme-subtle-green)))
+   `(annotate-highlight ((,class :background ,blue-nuanced-bg :underline 
,blue-intense)))
+   `(annotate-highlight-secondary ((,class :background ,green-nuanced-bg 
:underline ,green-intense)))
+;;;;; anzu
+   `(anzu-match-1 ((,class :inherit modus-theme-subtle-cyan)))
+   `(anzu-match-2 ((,class :inherit modus-theme-subtle-green)))
+   `(anzu-match-3 ((,class :inherit modus-theme-subtle-yellow)))
+   `(anzu-mode-line ((,class :inherit bold :foreground ,green-active)))
+   `(anzu-mode-line-no-match ((,class :inherit bold :foreground ,red-active)))
+   `(anzu-replace-highlight ((,class :inherit modus-theme-refine-yellow 
:underline t)))
+   `(anzu-replace-to ((,class :inherit (modus-theme-intense-green bold))))
+;;;;; apropos
+   `(apropos-function-button ((,class :foreground ,magenta-alt-other 
:underline t)))
+   `(apropos-keybinding ((,class :inherit bold :foreground ,cyan)))
+   `(apropos-misc-button ((,class :foreground ,cyan-alt-other :underline t)))
+   `(apropos-property ((,class ,@(modus-operandi-theme-bold-weight) 
:foreground ,magenta-alt)))
+   `(apropos-symbol ((,class ,@(modus-operandi-theme-bold-weight) :foreground 
,blue-nuanced :underline t)))
+   `(apropos-user-option-button ((,class :foreground ,green-alt-other 
:underline t)))
+   `(apropos-variable-button ((,class :foreground ,blue :underline t)))
+;;;;; apt-sources-list
+   `(apt-sources-list-components ((,class :foreground ,cyan)))
+   `(apt-sources-list-options ((,class :foreground ,yellow)))
+   `(apt-sources-list-suite ((,class :foreground ,green)))
+   `(apt-sources-list-type ((,class :foreground ,magenta)))
+   `(apt-sources-list-uri ((,class :foreground ,blue)))
+;;;;; artbollocks-mode
+   `(artbollocks-face ((,class :foreground ,cyan-nuanced :underline 
,fg-lang-note)))
+   `(artbollocks-lexical-illusions-face ((,class :background ,bg-alt 
:foreground ,red-alt :underline t)))
+   `(artbollocks-passive-voice-face ((,class :foreground ,yellow-nuanced 
:underline ,fg-lang-warning)))
+   `(artbollocks-weasel-words-face ((,class :foreground ,red-nuanced 
:underline ,fg-lang-error)))
+;;;;; auctex and Tex
+   `(font-latex-bold-face ((,class :inherit bold :foreground 
,fg-special-calm)))
+   `(font-latex-doctex-documentation-face ((,class :foreground 
,fg-special-cold :slant ,modus-theme-slant)))
+   `(font-latex-doctex-preprocessor-face ((,class 
,@(modus-operandi-theme-bold-weight) :foreground ,red-alt-other)))
+   `(font-latex-italic-face ((,class :foreground ,fg-special-calm :slant 
italic)))
+   `(font-latex-math-face ((,class :foreground ,cyan-alt-other)))
+   `(font-latex-script-char-face ((,class :foreground ,cyan-alt-other)))
+   `(font-latex-sectioning-0-face ((,class :inherit 
,modus-theme-variable-pitch :foreground ,blue-nuanced)))
+   `(font-latex-sectioning-1-face ((,class :inherit (bold 
,modus-theme-variable-pitch) :foreground ,blue-nuanced)))
+   `(font-latex-sectioning-2-face ((,class :inherit (bold 
,modus-theme-variable-pitch) :foreground ,blue-nuanced)))
+   `(font-latex-sectioning-3-face ((,class :inherit (bold 
,modus-theme-variable-pitch) :foreground ,blue-nuanced)))
+   `(font-latex-sectioning-4-face ((,class :inherit (bold 
,modus-theme-variable-pitch) :foreground ,blue-nuanced)))
+   `(font-latex-sectioning-5-face ((,class :inherit 
,modus-theme-variable-pitch :foreground ,blue-nuanced)))
+   `(font-latex-sedate-face ((,class ,@(modus-operandi-theme-bold-weight) 
:foreground ,magenta-alt-other)))
+   `(font-latex-slide-title-face ((,class :inherit (bold 
,modus-theme-variable-pitch) :foreground ,cyan-nuanced
+                                          ,@(modus-operandi-theme-scale 
modus-operandi-theme-scale-4))))
+   `(font-latex-string-face ((,class :foreground ,blue-alt)))
+   `(font-latex-subscript-face ((,class :height 0.95)))
+   `(font-latex-superscript-face ((,class :height 0.95)))
+   `(font-latex-verbatim-face ((,class :background ,bg-dim :foreground 
,fg-special-mild)))
+   `(font-latex-warning-face ((,class :foreground ,yellow-alt-other)))
+   `(tex-match ((,class :foreground ,blue-alt-other)))
+   `(tex-verbatim ((,class :background ,bg-dim :foreground ,fg-special-mild)))
+   `(texinfo-heading ((,class :foreground ,magenta)))
+   `(TeX-error-description-error ((,class :inherit bold :foreground ,red)))
+   `(TeX-error-description-help ((,class :foreground ,blue)))
+   `(TeX-error-description-tex-said ((,class :foreground ,blue)))
+   `(TeX-error-description-warning ((,class :inherit bold :foreground 
,yellow)))
+;;;;; auto-dim-other-buffers
+   `(auto-dim-other-buffers-face ((,class :background ,bg-alt)))
+;;;;; avy
+   `(avy-background-face ((,class :background ,bg-dim :foreground ,fg-dim)))
+   `(avy-goto-char-timer-face ((,class :inherit (modus-theme-intense-yellow 
bold))))
+   `(avy-lead-face ((,class :inherit (modus-theme-intense-magenta bold))))
+   `(avy-lead-face-0 ((,class :inherit (modus-theme-intense-blue bold))))
+   `(avy-lead-face-1 ((,class :inherit (modus-theme-intense-red bold))))
+   `(avy-lead-face-2 ((,class :inherit (modus-theme-intense-green bold))))
+;;;;; aw (ace-window)
+   `(aw-background-face ((,class :background ,bg-dim :foreground ,fg-dim)))
+   `(aw-key-face ((,class :inherit bold :foreground ,blue-intense)))
+   `(aw-leading-char-face ((,class :inherit bold :height 1.5 :background 
,bg-main :foreground ,red-intense)))
+   `(aw-minibuffer-leading-char-face ((,class :foreground ,magenta-active)))
+   `(aw-mode-line-face ((,class :inherit bold)))
+;;;;; bm
+   `(bm-face ((,class :inherit modus-theme-subtle-yellow
+                      ,@(and (>= emacs-major-version 27) '(:extend t)))))
+   `(bm-fringe-face ((,class :inherit modus-theme-fringe-yellow)))
+   `(bm-fringe-persistent-face ((,class :inherit modus-theme-fringe-blue)))
+   `(bm-persistent-face ((,class :inherit modus-theme-intense-blue
+                                 ,@(and (>= emacs-major-version 27) '(:extend 
t)))))
+;;;;; bongo
+   `(bongo-album-title ((,class :foreground ,cyan-active)))
+   `(bongo-artist ((,class :foreground ,magenta-active)))
+   `(bongo-currently-playing-track ((,class :inherit bold)))
+   `(bongo-elapsed-track-part ((,class :inherit modus-theme-subtle-magenta 
:underline t)))
+   `(bongo-filled-seek-bar ((,class :background ,blue-subtle-bg :foreground 
,fg-main)))
+   `(bongo-marked-track ((,class :foreground ,fg-mark-alt)))
+   `(bongo-marked-track-line ((,class :background ,bg-mark-alt)))
+   `(bongo-played-track ((,class :foreground ,fg-unfocused :strike-through t)))
+   `(bongo-track-length ((,class :foreground ,blue-alt-other)))
+   `(bongo-track-title ((,class :foreground ,blue-active)))
+   `(bongo-unfilled-seek-bar ((,class :background ,blue-nuanced-bg :foreground 
,fg-main)))
+;;;;; boon
+   `(boon-modeline-cmd ((,class :inherit modus-theme-active-blue)))
+   `(boon-modeline-ins ((,class :inherit modus-theme-active-red)))
+   `(boon-modeline-off ((,class :inherit modus-theme-active-yellow)))
+   `(boon-modeline-spc ((,class :inherit modus-theme-active-green)))
+;;;;; breakpoint (built-in gdb-mi.el)
+   `(breakpoint-disabled ((,class :foreground ,fg-alt)))
+   `(breakpoint-enabled ((,class :inherit bold :foreground ,red)))
+;;;;; buffer-expose
+   `(buffer-expose-ace-char-face ((,class :inherit bold :foreground 
,red-active)))
+   `(buffer-expose-mode-line-face ((,class :foreground ,cyan-active)))
+   `(buffer-expose-selected-face ((,class :inherit modus-theme-special-mild)))
+;;;;; calendar and diary
+   `(calendar-month-header ((,class :inherit bold :foreground ,fg-main)))
+   `(calendar-today ((,class :underline t)))
+   `(calendar-weekday-header ((,class :foreground ,fg-dim)))
+   `(calendar-weekend-header ((,class :foreground ,fg-alt)))
+   `(diary ((,class :foreground ,cyan-alt-other)))
+   `(diary-anniversary ((,class :foreground ,red-alt-other)))
+   `(diary-time ((,class :foreground ,blue-alt)))
+   `(holiday ((,class :foreground ,magenta-alt)))
+;;;;; calfw
+   `(cfw:face-annotation ((,class :background ,bg-alt :foreground ,fg-alt)))
+   `(cfw:face-day-title ((,class :background ,bg-alt :foreground ,fg-main)))
+   `(cfw:face-default-content ((,class :foreground ,green-alt)))
+   `(cfw:face-default-day ((,class :inherit (cfw:face-day-title bold))))
+   `(cfw:face-disable ((,class :background ,bg-inactive :foreground 
,fg-inactive)))
+   `(cfw:face-grid ((,class :foreground ,fg-inactive)))
+   `(cfw:face-header ((,class :inherit bold ::foreground ,fg-main)))
+   `(cfw:face-holiday ((,class :inherit bold :background ,bg-alt :foreground 
,magenta)))
+   `(cfw:face-periods ((,class :foreground ,cyan-alt-other)))
+   `(cfw:face-saturday ((,class :inherit bold :background ,bg-alt :foreground 
,magenta-alt)))
+   `(cfw:face-select ((,class :inherit modus-theme-intense-blue)))
+   `(cfw:face-sunday ((,class :inherit bold :background ,bg-alt :foreground 
,magenta-alt-other)))
+   `(cfw:face-title ((,class :inherit ,modus-theme-variable-pitch
+                             :foreground ,fg-special-warm
+                             ,@(modus-operandi-theme-scale 
modus-operandi-theme-scale-4))))
+   `(cfw:face-today ((,class :inherit bold :foreground ,blue)))
+   `(cfw:face-today-title ((,class :inherit modus-theme-special-mild :box t)))
+   `(cfw:face-toolbar ((,class :background ,bg-active :foreground ,bg-active)))
+   `(cfw:face-toolbar-button-off ((,class :background ,bg-alt :foreground 
,cyan)))
+   `(cfw:face-toolbar-button-on ((,class :inherit bold :background ,bg-main 
:foreground ,blue-intense)))
+;;;;; centaur-tabs
+   `(centaur-tabs-active-bar-face ((,class :background ,fg-tab-active)))
+   `(centaur-tabs-close-mouse-face ((,class :inherit bold :foreground 
,red-active :underline t)))
+   `(centaur-tabs-close-selected ((,class :inherit centaur-tabs-selected)))
+   `(centaur-tabs-close-unselected ((,class :inherit centaur-tabs-unselected)))
+   `(centaur-tabs-modified-marker-selected ((,class :inherit 
centaur-tabs-selected)))
+   `(centaur-tabs-modified-marker-unselected ((,class :inherit 
centaur-tabs-unselected)))
+   `(centaur-tabs-default ((,class :background ,bg-main :foreground ,bg-main)))
+   `(centaur-tabs-selected ((,class :inherit bold :background ,bg-tab-active 
:foreground ,fg-main)))
+   `(centaur-tabs-selected-modified ((,class :background ,bg-tab-active 
:foreground ,fg-main :slant italic)))
+   `(centaur-tabs-unselected ((,class :background ,bg-tab-inactive :foreground 
,fg-dim)))
+   `(centaur-tabs-unselected-modified ((,class :background ,bg-tab-inactive 
:foreground ,fg-dim :slant italic)))
+;;;;; change-log and log-view (`vc-print-log' and `vc-print-root-log')
+   `(change-log-acknowledgment ((,class :foreground ,fg-alt)))
+   `(change-log-conditionals ((,class :foreground ,magenta-alt)))
+   `(change-log-date ((,class :foreground ,cyan-alt-other)))
+   `(change-log-email ((,class :foreground ,cyan)))
+   `(change-log-file ((,class :foreground ,blue)))
+   `(change-log-function ((,class :foreground ,green-alt-other)))
+   `(change-log-list ((,class :foreground ,magenta-alt-other)))
+   `(change-log-name ((,class :foreground ,cyan)))
+   `(log-edit-header ((,class :inherit bold :foreground ,green-alt-other)))
+   `(log-edit-summary ((,class :foreground ,magenta-alt-other)))
+   `(log-edit-unknown-header ((,class :foreground ,fg-alt)))
+   `(log-view-file ((,class :inherit bold :foreground ,fg-special-cold)))
+   `(log-view-message ((,class :foreground ,fg-alt)))
+;;;;; cider
+   `(cider-debug-code-overlay-face ((,class :background ,bg-alt)))
+   `(cider-debug-prompt-face ((,class :foreground ,magenta-alt :underline t)))
+   `(cider-deprecated-face ((,class :inherit modus-theme-refine-yellow)))
+   `(cider-docview-emphasis-face ((,class :foreground ,fg-special-cold :slant 
italic)))
+   `(cider-docview-literal-face ((,class :foreground ,blue-alt)))
+   `(cider-docview-strong-face ((,class :inherit bold :foreground 
,fg-special-cold)))
+   `(cider-docview-table-border-face ((,class :foreground ,fg-alt)))
+   `(cider-enlightened-face ((,class :box (:line-width -1 :color ,yellow-alt 
:style nil) :background ,bg-dim)))
+   `(cider-enlightened-local-face ((,class :inherit bold :foreground 
,yellow-alt-other)))
+   `(cider-error-highlight-face ((,class :foreground ,red :underline t)))
+   `(cider-fragile-button-face ((,class :box (:line-width 3 :color ,fg-alt 
:style released-button) :foreground ,yellow)))
+   `(cider-fringe-good-face ((,class :foreground ,green-active)))
+   `(cider-instrumented-face ((,class :box (:line-width -1 :color ,red :style 
nil) :background ,bg-dim)))
+   `(cider-reader-conditional-face ((,class :foreground ,fg-special-warm 
:slant italic)))
+   `(cider-repl-input-face ((,class :inherit bold)))
+   `(cider-repl-prompt-face ((,class :foreground ,cyan-alt-other)))
+   `(cider-repl-stderr-face ((,class :inherit bold :foreground ,red)))
+   `(cider-repl-stdout-face ((,class :foreground ,blue)))
+   `(cider-result-overlay-face ((,class :box (:line-width -1 :color ,blue 
:style nil) :background ,bg-dim)))
+   `(cider-stacktrace-error-class-face ((,class :inherit bold :foreground 
,red)))
+   `(cider-stacktrace-error-message-face ((,class :foreground ,red-alt-other 
:slant italic)))
+   `(cider-stacktrace-face ((,class :foreground ,fg-main)))
+   `(cider-stacktrace-filter-active-face ((,class :foreground ,cyan-alt 
:underline t)))
+   `(cider-stacktrace-filter-inactive-face ((,class :foreground ,cyan-alt)))
+   `(cider-stacktrace-fn-face ((,class :inherit bold :foreground ,fg-main)))
+   `(cider-stacktrace-ns-face ((,class :foreground ,fg-alt :slant italic)))
+   `(cider-stacktrace-promoted-button-face ((,class :box (:line-width 3 :color 
,fg-alt :style released-button) :foreground ,red)))
+   `(cider-stacktrace-suppressed-button-face ((,class :box (:line-width 3 
:color ,fg-alt :style pressed-button)
+                                                      :background ,bg-alt 
:foreground ,fg-alt)))
+   `(cider-test-error-face ((,class :inherit modus-theme-subtle-red)))
+   `(cider-test-failure-face ((,class :inherit (modus-theme-intense-red 
bold))))
+   `(cider-test-success-face ((,class :inherit modus-theme-intense-green)))
+   `(cider-traced-face ((,class :box (:line-width -1 :color ,cyan :style nil) 
:background ,bg-dim)))
+   `(cider-warning-highlight-face ((,class :foreground ,yellow :underline t)))
+;;;;; circe (and lui)
+   `(circe-fool-face ((,class :foreground ,fg-alt)))
+   `(circe-highlight-nick-face ((,class :inherit bold :foreground ,blue)))
+   `(circe-prompt-face ((,class :inherit bold :foreground ,cyan-alt-other)))
+   `(circe-server-face ((,class :foreground ,fg-unfocused)))
+   `(lui-button-face ((,class :foreground ,blue :underline t)))
+   `(lui-highlight-face ((,class :foreground ,magenta-alt)))
+   `(lui-time-stamp-face ((,class :foreground ,blue-nuanced)))
+;;;;; color-rg
+   `(color-rg-font-lock-column-number ((,class :foreground 
,magenta-alt-other)))
+   `(color-rg-font-lock-command ((,class :inherit bold :foreground ,fg-main)))
+   `(color-rg-font-lock-file ((,class :inherit bold :foreground 
,fg-special-cold)))
+   `(color-rg-font-lock-flash ((,class :inherit modus-theme-intense-blue)))
+   `(color-rg-font-lock-function-location ((,class :inherit 
modus-theme-special-calm)))
+   `(color-rg-font-lock-header-line-directory ((,class :foreground 
,blue-active)))
+   `(color-rg-font-lock-header-line-edit-mode ((,class :foreground 
,magenta-active)))
+   `(color-rg-font-lock-header-line-keyword ((,class :foreground 
,green-active)))
+   `(color-rg-font-lock-header-line-text ((,class :foreground ,fg-active)))
+   `(color-rg-font-lock-line-number ((,class :foreground ,fg-special-warm)))
+   `(color-rg-font-lock-mark-changed ((,class :inherit bold :foreground 
,blue)))
+   `(color-rg-font-lock-mark-deleted ((,class :inherit bold :foreground ,red)))
+   `(color-rg-font-lock-match ((,class :inherit modus-theme-special-calm)))
+   `(color-rg-font-lock-position-splitter ((,class :foreground ,fg-alt)))
+;;;;; column-enforce-mode
+   `(column-enforce-face ((,class :inherit modus-theme-refine-yellow)))
+;;;;; company-mode
+   `(company-echo-common ((,class :foreground ,magenta-alt-other)))
+   `(company-preview ((,class :background ,bg-dim :foreground ,fg-dim)))
+   `(company-preview-common ((,class :foreground ,blue-alt)))
+   `(company-preview-search ((,class :inherit modus-theme-special-calm)))
+   `(company-scrollbar-bg ((,class :background ,bg-active)))
+   `(company-scrollbar-fg ((,class :background ,fg-active)))
+   `(company-template-field ((,class :inherit modus-theme-intense-magenta)))
+   `(company-tooltip ((,class :background ,bg-alt :foreground ,fg-alt)))
+   `(company-tooltip-annotation ((,class :foreground ,fg-special-cold :slant 
,modus-theme-slant)))
+   `(company-tooltip-annotation-selection ((,class :inherit bold :foreground 
,fg-main)))
+   `(company-tooltip-common ((,class :inherit bold :foreground ,blue-alt)))
+   `(company-tooltip-common-selection ((,class :foreground ,fg-main)))
+   `(company-tooltip-mouse ((,class :inherit modus-theme-intense-blue)))
+   `(company-tooltip-search ((,class :inherit (modus-theme-refine-cyan bold))))
+   `(company-tooltip-search-selection ((,class :inherit 
(modus-theme-intense-green bold) :underline t)))
+   `(company-tooltip-selection ((,class :inherit (modus-theme-subtle-cyan 
bold))))
+;;;;; company-posframe
+   `(company-posframe-active-backend-name ((,class :inherit bold :background 
,bg-active :foreground ,blue-active)))
+   `(company-posframe-inactive-backend-name ((,class :background ,bg-active 
:foreground ,fg-active)))
+   `(company-posframe-metadata ((,class :background ,bg-inactive :foreground 
,fg-inactive)))
+;;;;; compilation feedback
+   `(compilation-column-number ((,class :foreground ,magenta-alt-other)))
+   `(compilation-error ((,class ,@(modus-operandi-theme-bold-weight) 
:foreground ,red)))
+   `(compilation-info ((,class :foreground ,fg-special-cold)))
+   `(compilation-line-number ((,class :foreground ,fg-special-warm)))
+   `(compilation-mode-line-exit ((,class ,@(modus-operandi-theme-bold-weight) 
:foreground ,blue-active)))
+   `(compilation-mode-line-fail ((,class ,@(modus-operandi-theme-bold-weight) 
:foreground ,red-active)))
+   `(compilation-mode-line-run ((,class ,@(modus-operandi-theme-bold-weight) 
:foreground ,magenta-active)))
+   `(compilation-warning ((,class ,@(modus-operandi-theme-bold-weight) 
:foreground ,yellow)))
+;;;;; completions
+   `(completions-annotations ((,class :foreground ,fg-special-cold :slant 
,modus-theme-slant)))
+   `(completions-common-part ((,class 
,@(modus-operandi-theme-standard-completions
+                                         cyan-alt-other cyan-nuanced-bg
+                                         yellow-refine-bg yellow-refine-fg))))
+   `(completions-first-difference ((,class :inherit bold
+                                           
,@(modus-operandi-theme-standard-completions
+                                              blue-alt-other blue-nuanced-bg
+                                              cyan-subtle-bg fg-dim))))
+;;;;; counsel
+   `(counsel-active-mode ((,class :foreground ,magenta-alt-other)))
+   `(counsel-application-name ((,class :foreground ,red-alt-other)))
+   `(counsel-key-binding ((,class :inherit bold :foreground ,blue-alt-other)))
+   `(counsel-outline-1 ((,class :inherit outline-1)))
+   `(counsel-outline-2 ((,class :inherit outline-2)))
+   `(counsel-outline-3 ((,class :inherit outline-3)))
+   `(counsel-outline-4 ((,class :inherit outline-4)))
+   `(counsel-outline-5 ((,class :inherit outline-5)))
+   `(counsel-outline-6 ((,class :inherit outline-6)))
+   `(counsel-outline-7 ((,class :inherit outline-7)))
+   `(counsel-outline-8 ((,class :inherit outline-8)))
+   `(counsel-outline-default ((,class :inherit bold :foreground 
,green-alt-other)))
+   `(counsel-variable-documentation ((,class :foreground ,yellow-alt-other 
:slant ,modus-theme-slant)))
+;;;;; counsel-css
+   `(counsel-css-selector-depth-face-1 ((,class :foreground ,blue)))
+   `(counsel-css-selector-depth-face-2 ((,class :foreground ,cyan)))
+   `(counsel-css-selector-depth-face-3 ((,class :foreground ,green)))
+   `(counsel-css-selector-depth-face-4 ((,class :foreground ,yellow)))
+   `(counsel-css-selector-depth-face-5 ((,class :foreground ,magenta)))
+   `(counsel-css-selector-depth-face-6 ((,class :foreground ,red)))
+;;;;; counsel-notmuch
+   `(counsel-notmuch-count-face ((,class :foreground ,cyan)))
+   `(counsel-notmuch-date-face ((,class :foreground ,blue)))
+   `(counsel-notmuch-people-face ((,class :foreground ,magenta)))
+   `(counsel-notmuch-subject-face ((,class :foreground ,magenta-alt-other)))
+;;;;; counsel-org-capture-string
+   `(counsel-org-capture-string-template-body-face ((,class :foreground 
,fg-special-cold)))
+;;;;; cov
+   `(cov-coverage-not-run-face ((,class :foreground ,red-intense)))
+   `(cov-coverage-run-face ((,class :foreground ,green-intense)))
+   `(cov-heavy-face ((,class :foreground ,magenta-intense)))
+   `(cov-light-face ((,class :foreground ,blue-intense)))
+   `(cov-med-face ((,class :foreground ,yellow-intense)))
+   `(cov-none-face ((,class :foreground ,cyan-intense)))
+;;;;; csv-mode
+   `(csv-separator-face ((,class :background ,bg-special-cold :foreground 
,fg-main)))
+;;;;; ctrlf
+   `(ctrlf-highlight-active ((,class :inherit (modus-theme-intense-green 
bold))))
+   `(ctrlf-highlight-line ((,class :inherit modus-theme-hl-line)))
+   `(ctrlf-highlight-passive ((,class :inherit modus-theme-refine-cyan)))
+;;;;; custom (M-x customize)
+   `(custom-button ((,class :box (:line-width 2 :color nil :style 
released-button)
+                            :background ,bg-active :foreground ,fg-main)))
+   `(custom-button-mouse ((,class :box (:line-width 2 :color nil :style 
released-button)
+                                  :background ,bg-active :foreground 
,fg-active)))
+   `(custom-button-pressed ((,class :box (:line-width 2 :color nil :style 
pressed-button)
+                                    :background ,bg-active :foreground 
,fg-main)))
+   `(custom-changed ((,class :inherit modus-theme-subtle-cyan)))
+   `(custom-comment ((,class :foreground ,fg-alt)))
+   `(custom-comment-tag ((,class :background ,bg-alt :foreground 
,yellow-alt-other)))
+   `(custom-face-tag ((,class :inherit bold :foreground ,blue-intense)))
+   `(custom-group-tag ((,class :inherit bold :foreground ,green-intense)))
+   `(custom-group-tag-1 ((,class :inherit modus-theme-special-warm)))
+   `(custom-invalid ((,class :inherit (modus-theme-intense-red bold))))
+   `(custom-modified ((,class :inherit modus-theme-subtle-cyan)))
+   `(custom-rogue ((,class :inherit modus-theme-refine-magenta)))
+   `(custom-set ((,class :foreground ,blue-alt)))
+   `(custom-state ((,class :foreground ,cyan-alt-other)))
+   `(custom-themed ((,class :inherit modus-theme-subtle-blue)))
+   `(custom-variable-tag ((,class :inherit bold :foreground ,cyan)))
+;;;;; dap-mode
+   `(dap-mouse-eval-thing-face ((,class :box (:line-width -1 :color 
,blue-active :style nil)
+                                        :background ,bg-active :foreground 
,fg-main)))
+   `(dap-result-overlay-face ((,class :box (:line-width -1 :color ,bg-active 
:style nil)
+                                      :background ,bg-active :foreground 
,fg-main)))
+   `(dap-ui-breakpoint-verified-fringe ((,class :inherit bold :foreground 
,green-active)))
+   `(dap-ui-compile-errline ((,class :inherit bold :foreground ,red-intense)))
+   `(dap-ui-locals-scope-face ((,class :inherit bold :foreground ,magenta 
:underline t)))
+   `(dap-ui-locals-variable-face ((,class :inherit bold :foreground ,cyan)))
+   `(dap-ui-locals-variable-leaf-face ((,class :foreground ,cyan-alt-other 
:slant italic)))
+   `(dap-ui-marker-face ((,class :inherit modus-theme-subtle-blue)))
+   `(dap-ui-sessions-stack-frame-face ((,class :inherit bold :foreground 
,magenta-alt)))
+   `(dap-ui-sessions-terminated-active-face ((,class :inherit bold :foreground 
,fg-alt)))
+   `(dap-ui-sessions-terminated-face ((,class :foreground ,fg-alt)))
+;;;;; dashboard (emacs-dashboard)
+   `(dashboard-banner-logo-title ((,class :inherit bold :foreground 
,fg-special-cold)))
+   `(dashboard-footer ((,class :inherit bold :foreground ,fg-special-mild)))
+   `(dashboard-heading ((,class :inherit bold :foreground ,fg-special-warm)))
+   `(dashboard-navigator ((,class :foreground ,cyan-alt-other)))
+   `(dashboard-text-banner ((,class :foreground ,fg-dim)))
+;;;;; deadgrep
+   `(deadgrep-filename-face ((,class :inherit bold :foreground 
,fg-special-cold)))
+   `(deadgrep-match-face ((,class :inherit modus-theme-special-calm)))
+   `(deadgrep-meta-face ((,class :foreground ,fg-alt)))
+   `(deadgrep-regexp-metachar-face ((,class :inherit bold :foreground 
,yellow-intense)))
+   `(deadgrep-search-term-face ((,class :inherit bold :foreground 
,green-intense)))
+;;;;; debbugs
+   `(debbugs-gnu-archived ((,class :inverse-video t)))
+   `(debbugs-gnu-done ((,class :foreground ,fg-alt)))
+   `(debbugs-gnu-forwarded ((,class :foreground ,fg-special-warm)))
+   `(debbugs-gnu-handled ((,class :foreground ,green)))
+   `(debbugs-gnu-new ((,class :foreground ,red)))
+   `(debbugs-gnu-pending ((,class :foreground ,cyan)))
+   `(debbugs-gnu-stale-1 ((,class :foreground ,yellow-nuanced)))
+   `(debbugs-gnu-stale-2 ((,class :foreground ,yellow)))
+   `(debbugs-gnu-stale-3 ((,class :foreground ,yellow-alt)))
+   `(debbugs-gnu-stale-4 ((,class :foreground ,yellow-alt-other)))
+   `(debbugs-gnu-stale-5 ((,class :foreground ,red-alt)))
+   `(debbugs-gnu-tagged ((,class :foreground ,magenta-alt)))
+;;;;; define-word
+   `(define-word-face-1 ((,class :foreground ,yellow)))
+   `(define-word-face-2 ((,class :foreground ,fg-main)))
+;;;;; deft
+   `(deft-filter-string-error-face ((,class :inherit modus-theme-refine-red)))
+   `(deft-filter-string-face ((,class :foreground ,green-intense)))
+   `(deft-header-face ((,class :inherit bold :foreground ,fg-special-warm)))
+   `(deft-separator-face ((,class :foreground ,fg-alt)))
+   `(deft-summary-face ((,class :foreground ,fg-alt :slant 
,modus-theme-slant)))
+   `(deft-time-face ((,class :foreground ,fg-special-cold)))
+   `(deft-title-face ((,class :inherit bold :foreground ,fg-main)))
+;;;;; dictionary
+   `(dictionary-button-face ((,class :inherit bold :foreground 
,fg-special-cold)))
+   `(dictionary-reference-face ((,class :foreground ,blue-alt-other :underline 
t)))
+   `(dictionary-word-definition-face ((,class :foreground ,fg-main)))
+   `(dictionary-word-entry-face ((,class :foreground ,fg-special-cold :slant 
,modus-theme-slant)))
+;;;;; diff-hl
+   `(diff-hl-change ((,class :inherit modus-theme-fringe-yellow)))
+   `(diff-hl-delete ((,class :inherit modus-theme-fringe-red)))
+   `(diff-hl-dired-change ((,class :inherit diff-hl-change)))
+   `(diff-hl-dired-delete ((,class :inherit diff-hl-delete)))
+   `(diff-hl-dired-ignored ((,class :inherit dired-ignored)))
+   `(diff-hl-dired-insert ((,class :inherit diff-hl-insert)))
+   `(diff-hl-dired-unknown ((,class :inherit dired-ignored)))
+   `(diff-hl-insert ((,class :inherit modus-theme-fringe-green)))
+   `(diff-hl-reverted-hunk-highlight ((,class :inherit 
(modus-theme-active-magenta bold))))
+;;;;; diff-mode
+   `(diff-added ((,class ,@(modus-operandi-theme-diffs
+                            bg-main green
+                            bg-diff-focus-added fg-diff-focus-added))))
+   `(diff-changed ((,class ,@(modus-operandi-theme-diffs
+                              bg-main yellow
+                              bg-diff-focus-changed fg-diff-focus-changed))))
+   `(diff-context ((,class :foreground ,fg-unfocused)))
+   `(diff-file-header ((,class :inherit bold :foreground ,blue)))
+   `(diff-function ((,class :foreground ,fg-special-cold)))
+   `(diff-header ((,class :foreground ,blue-nuanced)))
+   `(diff-hunk-header ((,class ,@(modus-operandi-theme-diffs
+                                  bg-alt blue-alt
+                                  bg-diff-heading fg-diff-heading))))
+   `(diff-index ((,class :inherit bold :foreground ,blue-alt)))
+   `(diff-indicator-added ((,class :inherit diff-added)))
+   `(diff-indicator-changed ((,class :inherit diff-changed)))
+   `(diff-indicator-removed ((,class :inherit diff-removed)))
+   `(diff-nonexistent ((,class :inherit (modus-theme-neutral bold))))
+   `(diff-refine-added ((,class ,@(modus-operandi-theme-diffs
+                                   bg-diff-added fg-diff-added
+                                   bg-diff-refine-added 
fg-diff-refine-added))))
+   `(diff-refine-changed ((,class ,@(modus-operandi-theme-diffs
+                                     bg-diff-changed fg-diff-changed
+                                     bg-diff-refine-changed 
fg-diff-refine-changed))))
+   `(diff-refine-removed ((,class ,@(modus-operandi-theme-diffs
+                                     bg-diff-removed fg-diff-removed
+                                     bg-diff-refine-removed 
fg-diff-refine-removed))))
+   `(diff-removed ((,class ,@(modus-operandi-theme-diffs
+                              bg-main red
+                              bg-diff-focus-removed fg-diff-focus-removed))))
+;;;;; dim-autoload
+   `(dim-autoload-cookie-line ((,class :foreground ,fg-alt :slant 
,modus-theme-slant)))
+;;;;; dired
+   `(dired-directory ((,class :foreground ,blue)))
+   `(dired-flagged ((,class :inherit modus-theme-mark-del)))
+   `(dired-header ((,class :inherit modus-theme-header)))
+   `(dired-ignored ((,class :foreground ,fg-alt)))
+   `(dired-mark ((,class :inherit modus-theme-mark-symbol)))
+   `(dired-marked ((,class :inherit modus-theme-mark-sel)))
+   `(dired-perm-write ((,class :foreground ,fg-special-warm)))
+   `(dired-symlink ((,class :foreground ,cyan-alt :underline t)))
+   `(dired-warning ((,class :inherit bold :foreground ,yellow)))
+;;;;; dired-async
+   `(dired-async-failures ((,class ,@(modus-operandi-theme-bold-weight) 
:foreground ,red-active)))
+   `(dired-async-message ((,class ,@(modus-operandi-theme-bold-weight) 
:foreground ,green-active)))
+   `(dired-async-mode-message ((,class ,@(modus-operandi-theme-bold-weight) 
:foreground ,cyan-active)))
+;;;;; dired-git
+   `(dired-git-branch-else ((,class :inherit bold :foreground ,magenta-alt)))
+   `(dired-git-branch-master ((,class :inherit bold :foreground 
,magenta-alt-other)))
+;;;;; dired-git-info
+   `(dgi-commit-message-face ((,class :foreground ,fg-special-mild)))
+;;;;; dired-narrow
+   `(dired-narrow-blink ((,class :inherit (modus-theme-subtle-cyan bold))))
+;;;;; dired-subtree
+   ;; remove background from dired-subtree, else it breaks
+   ;; dired-{flagged,marked} and any other face that sets a background
+   ;; such as hl-line
+   `(dired-subtree-depth-1-face ((,class :background nil)))
+   `(dired-subtree-depth-2-face ((,class :background nil)))
+   `(dired-subtree-depth-3-face ((,class :background nil)))
+   `(dired-subtree-depth-4-face ((,class :background nil)))
+   `(dired-subtree-depth-5-face ((,class :background nil)))
+   `(dired-subtree-depth-6-face ((,class :background nil)))
+;;;;; diredfl
+   `(diredfl-autofile-name ((,class :inherit modus-theme-special-cold)))
+   `(diredfl-compressed-file-name ((,class :foreground ,green-alt-other)))
+   `(diredfl-compressed-file-suffix ((,class :foreground ,green-alt)))
+   `(diredfl-date-time ((,class :foreground ,fg-special-cold)))
+   `(diredfl-deletion ((,class :inherit modus-theme-mark-del)))
+   `(diredfl-deletion-file-name ((,class :inherit modus-theme-mark-del)))
+   `(diredfl-dir-heading ((,class :inherit modus-theme-header)))
+   `(diredfl-dir-name ((,class :inherit dired-directory)))
+   `(diredfl-dir-priv ((,class :foreground ,blue)))
+   `(diredfl-exec-priv ((,class :foreground ,red-alt-other)))
+   `(diredfl-executable-tag ((,class :foreground ,red-alt)))
+   `(diredfl-file-name ((,class :foreground ,fg-main)))
+   `(diredfl-file-suffix ((,class :foreground ,fg-special-warm)))
+   `(diredfl-flag-mark ((,class :inherit modus-theme-mark-sel)))
+   `(diredfl-flag-mark-line ((,class :inherit modus-theme-mark-sel)))
+   `(diredfl-ignored-file-name ((,class :foreground ,fg-inactive)))
+   `(diredfl-link-priv ((,class :foreground ,blue-alt-other)))
+   `(diredfl-no-priv ((,class :foreground ,fg-inactive)))
+   `(diredfl-number ((,class :foreground ,cyan)))
+   `(diredfl-other-priv ((,class :foreground ,yellow)))
+   `(diredfl-rare-priv ((,class :foreground ,magenta-alt-other)))
+   `(diredfl-read-priv ((,class :foreground ,magenta)))
+   `(diredfl-symlink ((,class :foreground ,cyan-alt :underline t)))
+   `(diredfl-tagged-autofile-name ((,class :inherit 
modus-theme-refine-magenta)))
+   `(diredfl-write-priv ((,class :foreground ,cyan-alt-other)))
+;;;;; disk-usage
+   `(disk-usage-children ((,class :foreground ,yellow)))
+   `(disk-usage-inaccessible ((,class :inherit bold :foreground ,red)))
+   `(disk-usage-percent ((,class :foreground ,green)))
+   `(disk-usage-size ((,class :foreground ,cyan)))
+   `(disk-usage-symlink ((,class :foreground ,blue :underline t)))
+   `(disk-usage-symlink-directory ((,class :inherit bold :foreground 
,blue-alt)))
+;;;;; doom-modeline
+   `(doom-modeline-bar ((,class :inherit modus-theme-active-blue)))
+   `(doom-modeline-bar-inactive ((,class :background ,fg-inactive :foreground 
,bg-main)))
+   `(doom-modeline-battery-charging ((,class :foreground ,green-active)))
+   `(doom-modeline-battery-critical ((,class :inherit bold :foreground 
,red-active)))
+   `(doom-modeline-battery-error ((,class :inherit modus-theme-active-red)))
+   `(doom-modeline-battery-full ((,class :foreground ,blue-active)))
+   `(doom-modeline-battery-normal ((,class :foreground ,fg-active)))
+   `(doom-modeline-battery-warning ((,class :inherit bold :foreground 
,yellow-active)))
+   `(doom-modeline-buffer-file ((,class :inherit bold :foreground ,fg-active)))
+   `(doom-modeline-buffer-major-mode ((,class :inherit bold :foreground 
,cyan-active)))
+   `(doom-modeline-buffer-minor-mode ((,class :foreground ,fg-inactive)))
+   `(doom-modeline-buffer-modified ((,class :inherit bold :foreground 
,magenta-active)))
+   `(doom-modeline-buffer-path ((,class :inherit bold :foreground ,fg-active)))
+   `(doom-modeline-debug ((,class :inherit bold :foreground ,yellow-active)))
+   `(doom-modeline-debug-visual ((,class :inherit bold :foreground 
,red-active)))
+   `(doom-modeline-evil-emacs-state ((,class :inherit bold :foreground 
,magenta-active)))
+   `(doom-modeline-evil-insert-state ((,class :inherit bold :foreground 
,green-active)))
+   `(doom-modeline-evil-motion-state ((,class :inherit bold :foreground 
,fg-inactive)))
+   `(doom-modeline-evil-normal-state ((,class :inherit bold :foreground 
,fg-active)))
+   `(doom-modeline-evil-operator-state ((,class :inherit bold :foreground 
,blue-active)))
+   `(doom-modeline-evil-replace-state ((,class :inherit bold :foreground 
,red-active)))
+   `(doom-modeline-evil-visual-state ((,class :inherit bold :foreground 
,cyan-active)))
+   `(doom-modeline-highlight ((,class :inherit bold :foreground ,blue-active)))
+   `(doom-modeline-host ((,class :slant italic)))
+   `(doom-modeline-info ((,class :foreground ,green-active)))
+   `(doom-modeline-lsp-error ((,class :inherit bold :foreground ,red-active)))
+   `(doom-modeline-lsp-success ((,class :inherit bold :foreground 
,green-active)))
+   `(doom-modeline-lsp-warning ((,class :inherit bold :foreground 
,yellow-active)))
+   `(doom-modeline-panel ((,class :inherit modus-theme-active-blue)))
+   `(doom-modeline-persp-buffer-not-in-persp ((,class :foreground 
,yellow-active :slant italic)))
+   `(doom-modeline-persp-name ((,class :foreground ,fg-active)))
+   `(doom-modeline-project-dir ((,class :inherit bold :foreground 
,blue-active)))
+   `(doom-modeline-project-parent-dir ((,class :foreground ,blue-active)))
+   `(doom-modeline-project-root-dir ((,class :foreground ,fg-active)))
+   `(doom-modeline-unread-number ((,class :foreground ,fg-active :slant 
italic)))
+   `(doom-modeline-urgent ((,class :inherit bold :foreground ,red-active)))
+   `(doom-modeline-warning ((,class :inherit bold :foreground ,yellow-active)))
+;;;;; dynamic-ruler
+   `(dynamic-ruler-negative-face ((,class :inherit 
modus-theme-intense-neutral)))
+   `(dynamic-ruler-positive-face ((,class :inherit 
modus-theme-intense-yellow)))
+;;;;; easy-jekyll
+   `(easy-jekyll-help-face ((,class :background ,bg-dim :foreground 
,cyan-alt-other)))
+;;;;; easy-kill
+   `(easy-kill-origin ((,class :inherit modus-theme-subtle-red)))
+   `(easy-kill-selection ((,class :inherit modus-theme-subtle-yellow)))
+;;;;; ebdb
+   `(ebdb-address-default ((,class :foreground ,fg-main)))
+   `(ebdb-db-char ((,class :foreground ,fg-special-cold)))
+   `(ebdb-defunct ((,class :foreground ,fg-alt)))
+   `(ebdb-field-hidden ((,class :foreground ,magenta)))
+   `(ebdb-field-url ((,class :foreground ,blue)))
+   `(ebdb-label ((,class :foreground ,cyan-alt-other)))
+   `(ebdb-mail-default ((,class :foreground ,fg-main)))
+   `(ebdb-mail-primary ((,class :foreground ,blue-alt)))
+   `(ebdb-marked ((,class :background ,cyan-intense-bg)))
+   `(ebdb-organization-name ((,class :foreground ,fg-special-calm)))
+   `(ebdb-person-name ((,class :foreground ,magenta-alt-other)))
+   `(ebdb-phone-default ((,class :foreground ,fg-special-warm)))
+   `(ebdb-role-defunct ((,class :foreground ,fg-alt)))
+   `(eieio-custom-slot-tag-face ((,class :foreground ,red-alt)))
+;;;;; ediff
+   `(ediff-current-diff-A ((,class ,@(modus-operandi-theme-diffs
+                                      bg-alt red
+                                      bg-diff-removed fg-diff-removed))))
+   `(ediff-current-diff-Ancestor ((,class ,@(modus-operandi-theme-diffs
+                                             bg-alt fg-special-cold
+                                             bg-special-cold 
fg-special-cold))))
+   `(ediff-current-diff-B ((,class ,@(modus-operandi-theme-diffs
+                                      bg-alt green
+                                      bg-diff-added fg-diff-added))))
+   `(ediff-current-diff-C ((,class ,@(modus-operandi-theme-diffs
+                                      bg-alt yellow
+                                      bg-diff-changed fg-diff-changed))))
+   `(ediff-even-diff-A ((,class :background ,bg-diff-neutral-1 :foreground 
,fg-diff-neutral-1)))
+   `(ediff-even-diff-Ancestor ((,class :background ,bg-diff-neutral-2 
:foreground ,fg-diff-neutral-1)))
+   `(ediff-even-diff-B ((,class :background ,bg-diff-neutral-1 :foreground 
,fg-diff-neutral-1)))
+   `(ediff-even-diff-C ((,class :background ,bg-diff-neutral-2 :foreground 
,fg-diff-neutral-2)))
+   `(ediff-fine-diff-A ((,class :background ,bg-diff-focus-removed :foreground 
,fg-diff-focus-removed)))
+   `(ediff-fine-diff-Ancestor ((,class :inherit modus-theme-refine-cyan)))
+   `(ediff-fine-diff-B ((,class :background ,bg-diff-focus-added :foreground 
,fg-diff-focus-added)))
+   `(ediff-fine-diff-C ((,class :background ,bg-diff-focus-changed :foreground 
,fg-diff-focus-changed)))
+   `(ediff-odd-diff-A ((,class :background ,bg-diff-neutral-2 :foreground 
,fg-diff-neutral-2)))
+   `(ediff-odd-diff-Ancestor ((,class :background ,bg-diff-neutral-0 
:foreground ,fg-diff-neutral-0)))
+   `(ediff-odd-diff-B ((,class :background ,bg-diff-neutral-2 :foreground 
,fg-diff-neutral-2)))
+   `(ediff-odd-diff-C ((,class :background ,bg-diff-neutral-1 :foreground 
,fg-diff-neutral-1)))
+;;;;; eglot
+   `(eglot-mode-line ((,class ,@(modus-operandi-theme-bold-weight) :foreground 
,magenta-active)))
+;;;;; el-search
+   `(el-search-highlight-in-prompt-face ((,class :inherit bold :foreground 
,magenta-alt)))
+   `(el-search-match ((,class :inherit modus-theme-intense-green)))
+   `(el-search-other-match ((,class :inherit modus-theme-special-mild)))
+   `(el-search-occur-match ((,class :inherit modus-theme-special-calm)))
+;;;;; eldoc-box
+   `(eldoc-box-body ((,class :background ,bg-alt :foreground ,fg-main)))
+   `(eldoc-box-border ((,class :background ,fg-alt)))
+;;;;; elfeed
+   `(elfeed-log-date-face ((,class :foreground ,cyan-alt)))
+   `(elfeed-log-debug-level-face ((,class :foreground ,magenta)))
+   `(elfeed-log-error-level-face ((,class :foreground ,red)))
+   `(elfeed-log-info-level-face ((,class :foreground ,green)))
+   `(elfeed-log-warn-level-face ((,class :foreground ,yellow)))
+   `(elfeed-search-date-face ((,class :foreground ,cyan)))
+   `(elfeed-search-feed-face ((,class :foreground ,blue)))
+   `(elfeed-search-filter-face ((,class :foreground ,magenta-active)))
+   `(elfeed-search-last-update-face ((,class :foreground ,green-active)))
+   `(elfeed-search-tag-face ((,class :foreground ,cyan-alt-other)))
+   `(elfeed-search-title-face ((,class :foreground ,fg-main)))
+   `(elfeed-search-unread-count-face ((,class :foreground ,blue-active)))
+   `(elfeed-search-unread-title-face ((,class :inherit bold)))
+;;;;; elfeed-score
+   `(elfeed-score-date-face ((,class :foreground ,blue)))
+   `(elfeed-score-debug-level-face ((,class :foreground ,magenta-alt-other)))
+   `(elfeed-score-error-level-face ((,class :foreground ,red)))
+   `(elfeed-score-info-level-face ((,class :foreground ,cyan)))
+   `(elfeed-score-warn-level-face ((,class :foreground ,yellow)))
+;;;;; emms
+   `(emms-playlist-track-face ((,class :foreground ,blue)))
+   `(emms-playlist-selected-face ((,class :inherit bold :foreground ,magenta)))
+;;;;; enhanced-ruby-mode
+   `(enh-ruby-heredoc-delimiter-face ((,class :foreground ,blue-alt-other)))
+   `(enh-ruby-op-face ((,class :foreground ,fg-main)))
+   `(enh-ruby-regexp-delimiter-face ((,class :foreground ,green)))
+   `(enh-ruby-regexp-face ((,class :foreground ,magenta)))
+   `(enh-ruby-string-delimiter-face ((,class :foreground ,blue-alt)))
+   `(erm-syn-errline ((,class :foreground ,red :underline t)))
+   `(erm-syn-warnline ((,class :foreground ,yellow :underline t)))
+;;;;; epa
+   `(epa-field-body ((,class :foreground ,fg-main)))
+   `(epa-field-name ((,class :inherit bold :foreground ,fg-dim)))
+   `(epa-mark ((,class :inherit bold :foreground ,magenta)))
+   `(epa-string ((,class :foreground ,blue-alt)))
+   `(epa-validity-disabled ((,class :inherit modus-theme-refine-red)))
+   `(epa-validity-high ((,class :inherit bold :foreground ,green-alt-other)))
+   `(epa-validity-low ((,class :foreground ,fg-alt)))
+   `(epa-validity-medium ((,class :foreground ,green-alt)))
+;;;;; equake
+   `(equake-buffer-face ((,class :background ,bg-main :foreground ,fg-main)))
+   `(equake-shell-type-eshell ((,class :background ,bg-inactive :foreground 
,green-active)))
+   `(equake-shell-type-rash ((,class :background ,bg-inactive :foreground 
,red-active)))
+   `(equake-shell-type-shell ((,class :background ,bg-inactive :foreground 
,cyan-active)))
+   `(equake-shell-type-term ((,class :background ,bg-inactive :foreground 
,yellow-active)))
+   `(equake-shell-type-vterm ((,class :background ,bg-inactive :foreground 
,magenta-active)))
+   `(equake-tab-active ((,class :background ,fg-alt :foreground ,bg-alt)))
+   `(equake-tab-inactive ((,class :foreground ,fg-inactive)))
+;;;;; erc
+   `(erc-action-face ((,class :inherit bold :foreground ,cyan)))
+   `(erc-bold-face ((,class :inherit bold)))
+   `(erc-button ((,class :inherit button)))
+   `(erc-command-indicator-face ((,class :inherit bold :foreground ,cyan-alt)))
+   `(erc-current-nick-face ((,class :foreground ,magenta-alt-other)))
+   `(erc-dangerous-host-face ((,class :inherit modus-theme-intense-red)))
+   `(erc-direct-msg-face ((,class :foreground ,magenta)))
+   `(erc-error-face ((,class :inherit bold :foreground ,red)))
+   `(erc-fool-face ((,class :foreground ,fg-inactive)))
+   `(erc-header-line ((,class :background ,bg-header :foreground ,fg-header)))
+   `(erc-input-face ((,class :foreground ,fg-special-calm)))
+   `(erc-inverse-face ((,class :inherit erc-default-face :inverse-video t)))
+   `(erc-keyword-face ((,class :inherit bold :foreground ,magenta-alt)))
+   `(erc-my-nick-face ((,class :inherit bold :foreground ,magenta)))
+   `(erc-my-nick-prefix-face ((,class :inherit erc-my-nick-face)))
+   `(erc-nick-default-face ((,class :inherit bold :foreground ,blue)))
+   `(erc-nick-msg-face ((,class :inherit bold :foreground ,green)))
+   `(erc-nick-prefix-face ((,class :inherit erc-nick-default-face)))
+   `(erc-notice-face ((,class :foreground ,fg-unfocused)))
+   `(erc-pal-face ((,class :inherit bold :foreground ,red-alt)))
+   `(erc-prompt-face ((,class :inherit bold :foreground ,cyan-alt-other)))
+   `(erc-timestamp-face ((,class :foreground ,blue-nuanced)))
+   `(erc-underline-face ((,class :underline t)))
+;;;;; eros
+   `(eros-result-overlay-face ((,class :box (:line-width -1 :color ,blue)
+                                       :background ,bg-dim :foreground 
,fg-dim)))
+;;;;; ert
+   `(ert-test-result-expected ((,class :inherit modus-theme-intense-green)))
+   `(ert-test-result-unexpected ((,class :inherit modus-theme-intense-red)))
+;;;;; eshell
+   `(eshell-ls-archive ((,class :inherit bold :foreground ,cyan-alt)))
+   `(eshell-ls-backup ((,class :foreground ,yellow-alt)))
+   `(eshell-ls-clutter ((,class :foreground ,red-alt)))
+   `(eshell-ls-directory ((,class :inherit bold :foreground ,blue-alt)))
+   `(eshell-ls-executable ((,class :foreground ,magenta-alt)))
+   `(eshell-ls-missing ((,class :inherit modus-theme-intense-red)))
+   `(eshell-ls-product ((,class :foreground ,fg-special-warm)))
+   `(eshell-ls-readonly ((,class :foreground ,fg-special-cold)))
+   `(eshell-ls-special ((,class :inherit bold :foreground ,magenta)))
+   `(eshell-ls-symlink ((,class :foreground ,cyan :underline t)))
+   `(eshell-ls-unreadable ((,class :background ,bg-inactive :foreground 
,fg-inactive)))
+   `(eshell-prompt ((,class ,@(modus-operandi-theme-bold-weight)
+                            ,@(modus-operandi-theme-prompt green-alt-other
+                                                           green-nuanced-bg
+                                                           green-alt
+                                                           green-refine-bg
+                                                           fg-main))))
+;;;;; eshell-fringe-status
+   `(eshell-fringe-status-failure ((,class :foreground ,red)))
+   `(eshell-fringe-status-success ((,class :foreground ,green)))
+;;;;; eshell-git-prompt
+   `(eshell-git-prompt-add-face ((,class :foreground ,fg-alt)))
+   `(eshell-git-prompt-branch-face ((,class :foreground ,fg-alt)))
+   `(eshell-git-prompt-directory-face ((,class :foreground ,cyan)))
+   `(eshell-git-prompt-exit-fail-face ((,class :foreground ,red)))
+   `(eshell-git-prompt-exit-success-face ((,class :foreground ,green)))
+   `(eshell-git-prompt-modified-face ((,class :foreground ,yellow)))
+   `(eshell-git-prompt-powerline-clean-face ((,class :background 
,green-refine-bg)))
+   `(eshell-git-prompt-powerline-dir-face ((,class :background 
,blue-refine-bg)))
+   `(eshell-git-prompt-powerline-not-clean-face ((,class :background 
,magenta-refine-bg)))
+   `(eshell-git-prompt-robyrussell-branch-face ((,class :foreground ,red)))
+   `(eshell-git-prompt-robyrussell-git-dirty-face ((,class :foreground 
,yellow)))
+   `(eshell-git-prompt-robyrussell-git-face ((,class :foreground ,blue)))
+;;;;; eshell-prompt-extras (epe)
+   `(epe-dir-face ((,class ,@(modus-operandi-theme-bold-weight) :foreground 
,blue)))
+   `(epe-git-dir-face ((,class :foreground ,red-alt-other)))
+   `(epe-git-face ((,class :foreground ,cyan-alt)))
+   `(epe-pipeline-delimiter-face ((,class :foreground ,green-alt)))
+   `(epe-pipeline-host-face ((,class :foreground ,blue)))
+   `(epe-pipeline-time-face ((,class :foreground ,fg-special-warm)))
+   `(epe-pipeline-user-face ((,class :foreground ,magenta)))
+   `(epe-remote-face ((,class :foreground ,fg-alt :slant ,modus-theme-slant)))
+   `(epe-status-face ((,class :foreground ,magenta-alt-other)))
+   `(epe-venv-face ((,class :foreground ,fg-alt :slant ,modus-theme-slant)))
+;;;;; evil-mode
+   `(evil-ex-commands ((,class :foreground ,magenta-alt-other)))
+   `(evil-ex-info ((,class :foreground ,cyan-alt-other)))
+   `(evil-ex-lazy-highlight ((,class :inherit modus-theme-refine-cyan)))
+   `(evil-ex-search ((,class :inherit modus-theme-intense-green)))
+   `(evil-ex-substitute-matches ((,class :inherit modus-theme-refine-yellow 
:underline t)))
+   `(evil-ex-substitute-replacement ((,class :inherit 
(modus-theme-intense-green bold))))
+;;;;; evil-goggles
+   `(evil-goggles-change-face ((,class :inherit modus-theme-refine-yellow)))
+   `(evil-goggles-commentary-face ((,class :inherit modus-theme-subtle-neutral 
:slant ,modus-theme-slant)))
+   `(evil-goggles-default-face ((,class :inherit modus-theme-subtle-neutral)))
+   `(evil-goggles-delete-face ((,class :inherit modus-theme-refine-red)))
+   `(evil-goggles-fill-and-move-face ((,class :inherit 
evil-goggles-default-face)))
+   `(evil-goggles-indent-face ((,class :inherit evil-goggles-default-face)))
+   `(evil-goggles-join-face ((,class :inherit modus-theme-subtle-green)))
+   `(evil-goggles-nerd-commenter-face ((,class :inherit 
evil-goggles-commentary-face)))
+   `(evil-goggles-paste-face ((,class :inherit modus-theme-subtle-cyan)))
+   `(evil-goggles-record-macro-face ((,class :inherit 
modus-theme-special-cold)))
+   `(evil-goggles-replace-with-register-face ((,class :inherit 
modus-theme-refine-magenta)))
+   `(evil-goggles-set-marker-face ((,class :inherit 
modus-theme-intense-magenta)))
+   `(evil-goggles-shift-face ((,class :inherit evil-goggles-default-face)))
+   `(evil-goggles-surround-face ((,class :inherit evil-goggles-default-face)))
+   `(evil-goggles-yank-face ((,class :inherit modus-theme-subtle-blue)))
+;;;;; evil-visual-mark-mode
+   `(evil-visual-mark-face ((,class :inherit modus-theme-intense-magenta)))
+;;;;; eww
+   `(eww-invalid-certificate ((,class :foreground ,red-active)))
+   `(eww-valid-certificate ((,class :foreground ,green-active)))
+   `(eww-form-checkbox ((,class :box (:line-width 1 :color ,fg-inactive :style 
released-button) :background ,bg-inactive :foreground ,fg-main)))
+   `(eww-form-file ((,class :box (:line-width 1 :color ,fg-inactive :style 
released-button) :background ,bg-active :foreground ,fg-main)))
+   `(eww-form-select ((,class :inherit eww-form-checkbox)))
+   `(eww-form-submit ((,class :inherit eww-form-file)))
+   `(eww-form-text ((,class :box (:line-width 1 :color ,fg-inactive :style 
none) :background ,bg-active :foreground ,fg-active)))
+   `(eww-form-textarea ((,class :background ,bg-alt :foreground ,fg-main)))
+;;;;; eyebrowse
+   `(eyebrowse-mode-line-active ((,class :inherit bold :foreground 
,blue-active)))
+;;;;; fancy-dabbrev
+   `(fancy-dabbrev-menu-face ((,class :background ,bg-alt :foreground 
,fg-alt)))
+   `(fancy-dabbrev-preview-face ((,class :foreground ,fg-alt :underline t)))
+   `(fancy-dabbrev-selection-face ((,class :inherit (modus-theme-intense-cyan 
bold))))
+;;;;; flycheck
+   `(flycheck-error
+     ((,(append '((supports :underline (:style wave))) class)
+       :underline (:color ,fg-lang-error :style wave))
+      (,class :foreground ,fg-lang-error :underline t)))
+   `(flycheck-error-list-checker-name ((,class :foreground ,magenta-active)))
+   `(flycheck-error-list-column-number ((,class :foreground ,fg-special-cold)))
+   `(flycheck-error-list-error ((,class ,@(modus-operandi-theme-bold-weight) 
:foreground ,red)))
+   `(flycheck-error-list-filename ((,class :foreground ,blue)))
+   `(flycheck-error-list-highlight ((,class :inherit modus-theme-hl-line)))
+   `(flycheck-error-list-id ((,class :foreground ,magenta-alt-other)))
+   `(flycheck-error-list-id-with-explainer ((,class :inherit 
flycheck-error-list-id :box t)))
+   `(flycheck-error-list-info ((,class :foreground ,cyan)))
+   `(flycheck-error-list-line-number ((,class :foreground ,fg-special-warm)))
+   `(flycheck-error-list-warning ((,class :foreground ,yellow)))
+   `(flycheck-fringe-error ((,class :inherit modus-theme-fringe-red)))
+   `(flycheck-fringe-info ((,class :inherit modus-theme-fringe-cyan)))
+   `(flycheck-fringe-warning ((,class :inherit modus-theme-fringe-yellow)))
+   `(flycheck-info
+     ((,(append '((supports :underline (:style wave))) class)
+       :underline (:color ,fg-lang-note :style wave))
+      (,class :foreground ,fg-lang-note :underline t)))
+   `(flycheck-verify-select-checker ((,class :box (:line-width 1 :color nil 
:style released-button))))
+   `(flycheck-warning
+     ((,(append '((supports :underline (:style wave))) class)
+       :underline (:color ,fg-lang-warning :style wave))
+      (,class :foreground ,fg-lang-warning :underline t)))
+;;;;; flycheck-indicator
+   `(flycheck-indicator-disabled ((,class :foreground ,fg-inactive :slant 
,modus-theme-slant)))
+   `(flycheck-indicator-error ((,class ,@(modus-operandi-theme-bold-weight) 
:foreground ,red-active)))
+   `(flycheck-indicator-info ((,class ,@(modus-operandi-theme-bold-weight) 
:foreground ,blue-active)))
+   `(flycheck-indicator-running ((,class ,@(modus-operandi-theme-bold-weight) 
:foreground ,magenta-active)))
+   `(flycheck-indicator-success ((,class ,@(modus-operandi-theme-bold-weight) 
:foreground ,green-active)))
+   `(flycheck-indicator-warning ((,class ,@(modus-operandi-theme-bold-weight) 
:foreground ,yellow-active)))
+;;;;; flycheck-posframe
+   `(flycheck-posframe-background-face ((,class :background ,bg-alt)))
+   `(flycheck-posframe-border-face ((,class :foreground ,fg-alt)))
+   `(flycheck-posframe-error-face ((,class :inherit bold :foreground ,red)))
+   `(flycheck-posframe-face ((,class :foreground ,fg-main :slant 
,modus-theme-slant)))
+   `(flycheck-posframe-info-face ((,class :inherit bold :foreground ,cyan)))
+   `(flycheck-posframe-warning-face ((,class :inherit bold :foreground 
,yellow)))
+;;;;; flymake
+   `(flymake-error
+     ((,(append '((supports :underline (:style wave))) class)
+       :underline (:color ,fg-lang-error :style wave))
+      (,class :foreground ,fg-lang-error :underline t)))
+   `(flymake-note
+     ((,(append '((supports :underline (:style wave))) class)
+       :underline (:color ,fg-lang-note :style wave))
+      (,class :foreground ,fg-lang-note :underline t)))
+   `(flymake-warning
+     ((,(append '((supports :underline (:style wave))) class)
+       :underline (:color ,fg-lang-warning :style wave))
+      (,class :foreground ,fg-lang-warning :underline t)))
+;;;;; flyspell
+   `(flyspell-duplicate
+     ((,(append '((supports :underline (:style wave))) class)
+       :underline (:color ,fg-lang-warning :style wave))
+      (,class :foreground ,fg-lang-warning :underline t)))
+   `(flyspell-incorrect
+     ((,(append '((supports :underline (:style wave))) class)
+       :underline (:color ,fg-lang-error :style wave))
+      (,class :foreground ,fg-lang-error :underline t)))
+;;;;; flyspell-correct
+   `(flyspell-correct-highlight-face ((,class :inherit 
modus-theme-refine-green)))
+;;;;; flx
+   `(flx-highlight-face ((,class ,@(modus-operandi-theme-extra-completions
+                                    'modus-theme-subtle-magenta
+                                    'modus-theme-intense-magenta
+                                    'modus-theme-nuanced-magenta
+                                    magenta-alt-other
+                                    'bold))))
+;;;;; freeze-it
+   `(freeze-it-show ((,class :background ,bg-dim :foreground 
,fg-special-warm)))
+;;;;; frog-menu
+   `(frog-menu-action-keybinding-face ((,class :foreground ,blue-alt-other)))
+   `(frog-menu-actions-face ((,class :foreground ,magenta)))
+   `(frog-menu-border ((,class :background ,bg-active)))
+   `(frog-menu-candidates-face ((,class :foreground ,fg-main)))
+   `(frog-menu-posframe-background-face ((,class :background ,bg-dim)))
+   `(frog-menu-prompt-face ((,class :foreground ,cyan)))
+;;;;; focus
+   `(focus-unfocused ((,class :foreground ,fg-unfocused)))
+;;;;; fold-this
+   `(fold-this-overlay ((,class :inherit modus-theme-special-mild)))
+;;;;; font-lock
+   `(font-lock-builtin-face ((,class ,@(modus-operandi-theme-syntax-foreground
+                                        magenta-alt magenta-alt-faint)
+                                     ,@(modus-operandi-theme-bold-weight))))
+   `(font-lock-comment-delimiter-face ((,class :foreground ,fg-alt :slant 
,modus-theme-slant)))
+   `(font-lock-comment-face ((,class :foreground ,fg-alt :slant 
,modus-theme-slant)))
+   `(font-lock-constant-face ((,class ,@(modus-operandi-theme-syntax-foreground
+                                         blue-alt-other 
blue-alt-other-faint))))
+   `(font-lock-doc-face ((,class ,@(modus-operandi-theme-syntax-foreground
+                                    fg-special-cold cyan-alt-other-faint)
+                                 :slant ,modus-theme-slant)))
+   `(font-lock-function-name-face ((,class 
,@(modus-operandi-theme-syntax-foreground
+                                              magenta magenta-faint))))
+   `(font-lock-keyword-face ((,class ,@(modus-operandi-theme-syntax-foreground
+                                        magenta-alt-other 
magenta-alt-other-faint)
+                                     ,@(modus-operandi-theme-bold-weight))))
+   `(font-lock-negation-char-face ((,class 
,@(modus-operandi-theme-syntax-foreground
+                                              yellow yellow-faint)
+                                           
,@(modus-operandi-theme-bold-weight))))
+   `(font-lock-preprocessor-face ((,class 
,@(modus-operandi-theme-syntax-foreground
+                                             red-alt-other 
red-alt-other-faint))))
+   `(font-lock-regexp-grouping-backslash ((,class :inherit bold :foreground 
,fg-escape-char-backslash)))
+   `(font-lock-regexp-grouping-construct ((,class :inherit bold :foreground 
,fg-escape-char-construct)))
+   `(font-lock-string-face ((,class ,@(modus-operandi-theme-syntax-foreground
+                                       blue-alt blue-alt-faint))))
+   `(font-lock-type-face ((,class ,@(modus-operandi-theme-syntax-foreground
+                                     magenta-alt magenta-alt-faint))))
+   `(font-lock-variable-name-face ((,class 
,@(modus-operandi-theme-syntax-foreground
+                                              cyan cyan-faint))))
+   `(font-lock-warning-face ((,class ,@(modus-operandi-theme-syntax-foreground
+                                        yellow-active yellow-alt-faint)
+                                     ,@(modus-operandi-theme-bold-weight))))
+;;;;; forge
+   `(forge-post-author ((,class :inherit bold :foreground ,fg-main)))
+   `(forge-post-date ((,class :foreground ,fg-special-cold)))
+   `(forge-topic-closed ((,class :foreground ,fg-alt)))
+   `(forge-topic-merged ((,class :foreground ,fg-alt)))
+   `(forge-topic-open ((,class :foreground ,fg-special-mild)))
+   `(forge-topic-unmerged ((,class :foreground ,magenta :slant 
,modus-theme-slant)))
+   `(forge-topic-unread ((,class :inherit bold :foreground ,fg-main)))
+;;;;; fountain-mode
+   `(fountain-character ((,class :foreground ,blue-alt-other)))
+   `(fountain-comment ((,class :foreground ,fg-alt :slant ,modus-theme-slant)))
+   `(fountain-dialog ((,class :foreground ,blue-alt)))
+   `(fountain-metadata-key ((,class :foreground ,green-alt-other)))
+   `(fountain-metadata-value ((,class :foreground ,blue)))
+   `(fountain-non-printing ((,class :foreground ,fg-alt)))
+   `(fountain-note ((,class :foreground ,yellow :slant ,modus-theme-slant)))
+   `(fountain-page-break ((,class :inherit bold :foreground ,red-alt)))
+   `(fountain-page-number ((,class :inherit bold :foreground ,red-alt-other)))
+   `(fountain-paren ((,class :foreground ,cyan)))
+   `(fountain-scene-heading ((,class :inherit bold :foreground ,blue-nuanced)))
+   `(fountain-section-heading ((,class :inherit (bold 
,modus-theme-variable-pitch) :foreground ,fg-main
+                                       ,@(modus-operandi-theme-scale 
modus-operandi-theme-scale-4))))
+   `(fountain-section-heading-1 ((,class :inherit (bold 
,modus-theme-variable-pitch) :foreground ,fg-main
+                                         ,@(modus-operandi-theme-scale 
modus-operandi-theme-scale-4))))
+   `(fountain-section-heading-2 ((,class :inherit (bold 
,modus-theme-variable-pitch) :foreground ,fg-special-warm
+                                         ,@(modus-operandi-theme-scale 
modus-operandi-theme-scale-3))))
+   `(fountain-section-heading-3 ((,class :inherit (bold 
,modus-theme-variable-pitch) :foreground ,fg-special-mild
+                                         ,@(modus-operandi-theme-scale 
modus-operandi-theme-scale-2))))
+   `(fountain-section-heading-4 ((,class :inherit (bold 
,modus-theme-variable-pitch) :foreground ,fg-special-calm
+                                         ,@(modus-operandi-theme-scale 
modus-operandi-theme-scale-1))))
+   `(fountain-section-heading-5 ((,class :inherit (bold 
,modus-theme-variable-pitch) :foreground ,fg-special-calm)))
+   `(fountain-synopsis ((,class :foreground ,cyan-alt)))
+   `(fountain-trans ((,class :foreground ,yellow-alt-other)))
+;;;;; geiser
+   `(geiser-font-lock-autodoc-current-arg ((,class 
,@(modus-operandi-theme-syntax-foreground
+                                                      magenta magenta-faint))))
+   `(geiser-font-lock-autodoc-identifier ((,class 
,@(modus-operandi-theme-syntax-foreground
+                                                     blue blue-faint))))
+   `(geiser-font-lock-doc-button ((,class 
,@(modus-operandi-theme-syntax-foreground
+                                             cyan-alt cyan-alt-faint)
+                                          :underline t)))
+   `(geiser-font-lock-doc-link ((,class :inherit link)))
+   `(geiser-font-lock-error-link ((,class 
,@(modus-operandi-theme-syntax-foreground
+                                             red-alt red-alt-faint)
+                                          :underline t)))
+   `(geiser-font-lock-image-button ((,class 
,@(modus-operandi-theme-syntax-foreground
+                                               green-alt green-alt-faint)
+                                            :underline t)))
+   `(geiser-font-lock-repl-input ((,class :inherit bold)))
+   `(geiser-font-lock-repl-output ((,class 
,@(modus-operandi-theme-syntax-foreground
+                                              magenta-alt-other 
magenta-alt-other-faint))))
+   `(geiser-font-lock-repl-prompt ((,class 
,@(modus-operandi-theme-syntax-foreground
+                                              cyan-alt-other 
cyan-alt-other-faint))))
+   `(geiser-font-lock-xref-header ((,class :inherit bold)))
+   `(geiser-font-lock-xref-link ((,class :inherit link)))
+;;;;; git-commit
+   `(git-commit-comment-action ((,class :foreground ,fg-alt :slant 
,modus-theme-slant)))
+   `(git-commit-comment-branch-local ((,class :foreground ,blue-alt :slant 
,modus-theme-slant)))
+   `(git-commit-comment-branch-remote ((,class :foreground ,magenta-alt :slant 
,modus-theme-slant)))
+   `(git-commit-comment-detached ((,class :foreground ,cyan-alt :slant 
,modus-theme-slant)))
+   `(git-commit-comment-file ((,class :foreground ,fg-special-cold :slant 
,modus-theme-slant)))
+   `(git-commit-comment-heading ((,class :inherit bold :foreground ,fg-alt 
:slant ,modus-theme-slant)))
+   `(git-commit-keyword ((,class :foreground ,magenta)))
+   `(git-commit-known-pseudo-header ((,class :inherit bold :foreground 
,fg-special-warm)))
+   `(git-commit-nonempty-second-line ((,class :inherit 
modus-theme-refine-yellow)))
+   `(git-commit-overlong-summary ((,class :inherit modus-theme-refine-yellow)))
+   `(git-commit-pseudo-header ((,class :inherit bold :foreground ,fg-alt)))
+   `(git-commit-summary ((,class :foreground ,magenta-alt-other)))
+;;;;; git-rebase
+   `(git-rebase-comment-hash ((,class :foreground ,fg-special-cold :slant 
,modus-theme-slant)))
+   `(git-rebase-comment-heading ((,class :inherit bold :foreground ,fg-dim 
:slant ,modus-theme-slant)))
+   `(git-rebase-description ((,class :foreground ,fg-main)))
+   `(git-rebase-hash ((,class :foreground ,cyan-alt-other)))
+;;;;; git-gutter
+   `(git-gutter:added ((,class :inherit modus-theme-fringe-green)))
+   `(git-gutter:deleted ((,class :inherit modus-theme-fringe-red)))
+   `(git-gutter:modified ((,class :inherit modus-theme-fringe-yellow)))
+   `(git-gutter:separator ((,class :inherit modus-theme-fringe-cyan)))
+   `(git-gutter:unchanged ((,class :inherit modus-theme-fringe-magenta)))
+;;;;; git-gutter-fr
+   `(git-gutter-fr:added ((,class :inherit modus-theme-fringe-green)))
+   `(git-gutter-fr:deleted ((,class :inherit modus-theme-fringe-red)))
+   `(git-gutter-fr:modified ((,class :inherit modus-theme-fringe-yellow)))
+;;;;; git-{gutter,fringe}+
+   `(git-gutter+-added ((,class :inherit modus-theme-fringe-green)))
+   `(git-gutter+-deleted ((,class :inherit modus-theme-fringe-red)))
+   `(git-gutter+-modified ((,class :inherit modus-theme-fringe-yellow)))
+   `(git-gutter+-separator ((,class :inherit modus-theme-fringe-cyan)))
+   `(git-gutter+-unchanged ((,class :inherit modus-theme-fringe-magenta)))
+   `(git-gutter-fr+-added ((,class :inherit modus-theme-fringe-green)))
+   `(git-gutter-fr+-deleted ((,class :inherit modus-theme-fringe-red)))
+   `(git-gutter-fr+-modified ((,class :inherit modus-theme-fringe-yellow)))
+;;;;; git-lens
+   `(git-lens-added ((,class :inherit bold :foreground ,green)))
+   `(git-lens-deleted ((,class :inherit bold :foreground ,red)))
+   `(git-lens-header ((,class :inherit bold :height 1.1 :foreground ,cyan)))
+   `(git-lens-modified ((,class :inherit bold :foreground ,yellow)))
+   `(git-lens-renamed ((,class :inherit bold :foreground ,magenta)))
+;;;;; git-timemachine
+   `(git-timemachine-commit ((,class :inherit bold :foreground 
,yellow-active)))
+   `(git-timemachine-minibuffer-author-face ((,class :foreground 
,fg-special-warm)))
+   `(git-timemachine-minibuffer-detail-face ((,class :foreground ,red-alt)))
+;;;;; git-walktree
+   `(git-walktree-commit-face ((,class :foreground ,yellow)))
+   `(git-walktree-symlink-face ((,class :foreground ,cyan :underline t)))
+   `(git-walktree-tree-face ((,class :foreground ,magenta)))
+;;;;; gnus
+   `(gnus-button ((,class :inherit button)))
+   `(gnus-cite-1 ((,class :foreground ,blue-alt)))
+   `(gnus-cite-10 ((,class :foreground ,magenta-alt-other)))
+   `(gnus-cite-11 ((,class :foreground ,yellow-alt-other)))
+   `(gnus-cite-2 ((,class :foreground ,red-alt)))
+   `(gnus-cite-3 ((,class :foreground ,green-alt)))
+   `(gnus-cite-4 ((,class :foreground ,magenta-alt)))
+   `(gnus-cite-5 ((,class :foreground ,yellow-alt)))
+   `(gnus-cite-6 ((,class :foreground ,cyan-alt)))
+   `(gnus-cite-7 ((,class :foreground ,blue-alt-other)))
+   `(gnus-cite-8 ((,class :foreground ,red-alt-other)))
+   `(gnus-cite-9 ((,class :foreground ,green-alt-other)))
+   `(gnus-cite-attribution ((,class :foreground ,fg-main :slant italic)))
+   `(gnus-emphasis-highlight-words ((,class :inherit 
modus-theme-refine-yellow)))
+   `(gnus-group-mail-1 ((,class :inherit bold :foreground ,magenta-alt)))
+   `(gnus-group-mail-1-empty ((,class :foreground ,magenta-alt)))
+   `(gnus-group-mail-2 ((,class :inherit bold :foreground ,magenta)))
+   `(gnus-group-mail-2-empty ((,class :foreground ,magenta)))
+   `(gnus-group-mail-3 ((,class :inherit bold :foreground ,magenta-alt-other)))
+   `(gnus-group-mail-3-empty ((,class :foreground ,magenta-alt-other)))
+   `(gnus-group-mail-low ((,class :inherit bold :foreground ,magenta-nuanced)))
+   `(gnus-group-mail-low-empty ((,class :foreground ,magenta-nuanced)))
+   `(gnus-group-news-1 ((,class :inherit bold :foreground ,green)))
+   `(gnus-group-news-1-empty ((,class :foreground ,green)))
+   `(gnus-group-news-2 ((,class :inherit bold :foreground ,cyan)))
+   `(gnus-group-news-2-empty ((,class :foreground ,cyan)))
+   `(gnus-group-news-3 ((,class :inherit bold :foreground ,yellow-nuanced)))
+   `(gnus-group-news-3-empty ((,class :foreground ,yellow-nuanced)))
+   `(gnus-group-news-4 ((,class :inherit bold :foreground ,cyan-nuanced)))
+   `(gnus-group-news-4-empty ((,class :foreground ,cyan-nuanced)))
+   `(gnus-group-news-5 ((,class :inherit bold :foreground ,red-nuanced)))
+   `(gnus-group-news-5-empty ((,class :foreground ,red-nuanced)))
+   `(gnus-group-news-6 ((,class :inherit bold :foreground ,fg-alt)))
+   `(gnus-group-news-6-empty ((,class :foreground ,fg-alt)))
+   `(gnus-group-news-low ((,class :inherit bold :foreground ,green-nuanced)))
+   `(gnus-group-news-low-empty ((,class :foreground ,green-nuanced)))
+   `(gnus-header-content ((,class :foreground ,fg-special-calm)))
+   `(gnus-header-from ((,class :inherit bold :foreground ,cyan-alt :underline 
nil)))
+   `(gnus-header-name ((,class :foreground ,cyan-alt-other)))
+   `(gnus-header-newsgroups ((,class :inherit bold :foreground ,blue-alt)))
+   `(gnus-header-subject ((,class :inherit bold :foreground 
,magenta-alt-other)))
+   `(gnus-server-agent ((,class :inherit bold :foreground ,cyan)))
+   `(gnus-server-closed ((,class :inherit bold :foreground ,magenta)))
+   `(gnus-server-cloud ((,class :inherit bold :foreground ,cyan-alt)))
+   `(gnus-server-cloud-host ((,class :inherit modus-theme-refine-cyan)))
+   `(gnus-server-denied ((,class :inherit bold :foreground ,red)))
+   `(gnus-server-offline ((,class :inherit bold :foreground ,yellow)))
+   `(gnus-server-opened ((,class :inherit bold :foreground ,green)))
+   `(gnus-signature ((,class :foreground ,fg-special-cold :slant italic)))
+   `(gnus-splash ((,class :foreground ,fg-alt)))
+   `(gnus-summary-cancelled ((,class :inherit modus-theme-mark-alt)))
+   `(gnus-summary-high-ancient ((,class :inherit bold :foreground ,fg-alt)))
+   `(gnus-summary-high-read ((,class :inherit bold :foreground 
,fg-special-cold)))
+   `(gnus-summary-high-ticked ((,class :inherit bold :foreground 
,red-alt-other)))
+   `(gnus-summary-high-undownloaded ((,class :inherit bold :foreground 
,yellow)))
+   `(gnus-summary-high-unread ((,class :inherit bold :foreground ,fg-main)))
+   `(gnus-summary-low-ancient ((,class :foreground ,fg-alt :slant italic)))
+   `(gnus-summary-low-read ((,class :foreground ,fg-special-cold :slant 
italic)))
+   `(gnus-summary-low-ticked ((,class :foreground ,red-refine-fg :slant 
italic)))
+   `(gnus-summary-low-undownloaded ((,class :foreground ,yellow-refine-fg 
:slant italic)))
+   `(gnus-summary-low-unread ((,class :inherit bold :foreground 
,fg-special-cold)))
+   `(gnus-summary-normal-ancient ((,class :foreground ,fg-special-calm)))
+   `(gnus-summary-normal-read ((,class :foreground ,fg-special-cold)))
+   `(gnus-summary-normal-ticked ((,class :foreground ,red-alt-other)))
+   `(gnus-summary-normal-undownloaded ((,class :foreground ,yellow)))
+   `(gnus-summary-normal-unread ((,class :foreground ,fg-main)))
+   `(gnus-summary-selected ((,class :inherit modus-theme-subtle-blue)))
+;;;;; golden-ratio-scroll-screen
+   `(golden-ratio-scroll-highlight-line-face ((,class :background 
,cyan-subtle-bg :foreground ,fg-main)))
+;;;;; helm
+   `(helm-M-x-key ((,class :inherit bold :foreground ,magenta-alt-other)))
+   `(helm-action ((,class :underline t)))
+   `(helm-bookmark-addressbook ((,class :foreground ,green-alt)))
+   `(helm-bookmark-directory ((,class :inherit bold :foreground ,blue)))
+   `(helm-bookmark-file ((,class :foreground ,fg-main)))
+   `(helm-bookmark-file-not-found ((,class :background ,bg-alt :foreground 
,fg-alt)))
+   `(helm-bookmark-gnus ((,class :foreground ,magenta)))
+   `(helm-bookmark-info ((,class :foreground ,cyan-alt)))
+   `(helm-bookmark-man ((,class :foreground ,yellow-alt)))
+   `(helm-bookmark-w3m ((,class :foreground ,blue-alt)))
+   `(helm-buffer-archive ((,class :inherit bold :foreground ,cyan)))
+   `(helm-buffer-directory ((,class :inherit bold :foreground ,blue)))
+   `(helm-buffer-file ((,class :foreground ,fg-main)))
+   `(helm-buffer-modified ((,class :foreground ,yellow-alt)))
+   `(helm-buffer-not-saved ((,class :foreground ,red-alt)))
+   `(helm-buffer-process ((,class :foreground ,magenta)))
+   `(helm-buffer-saved-out ((,class :inherit bold :background ,bg-alt 
:foreground ,red)))
+   `(helm-buffer-size ((,class :foreground ,fg-alt)))
+   `(helm-candidate-number ((,class :foreground ,cyan-active)))
+   `(helm-candidate-number-suspended ((,class :foreground ,yellow-active)))
+   `(helm-comint-prompts-buffer-name ((,class :foreground ,green-active)))
+   `(helm-comint-prompts-promptidx ((,class :foreground ,cyan-active)))
+   `(helm-delete-async-message ((,class :inherit bold :foreground 
,magenta-active)))
+   `(helm-eob-line ((,class :background ,bg-main :foreground ,fg-main)))
+   `(helm-eshell-prompts-buffer-name ((,class :foreground ,green-active)))
+   `(helm-eshell-prompts-promptidx ((,class :foreground ,cyan-active)))
+   `(helm-etags-file ((,class :foreground ,fg-dim :underline t)))
+   `(helm-ff-backup-file ((,class :foreground ,fg-alt)))
+   `(helm-ff-denied ((,class ,@(modus-operandi-theme-extra-completions
+                                'modus-theme-subtle-red
+                                'modus-theme-intense-red
+                                'modus-theme-nuanced-red
+                                red))))
+   `(helm-ff-directory ((,class :inherit helm-buffer-directory)))
+   `(helm-ff-dirs ((,class :inherit bold :foreground ,blue-alt-other)))
+   `(helm-ff-dotted-directory ((,class :inherit bold :background ,bg-alt 
:foreground ,fg-alt)))
+   `(helm-ff-dotted-symlink-directory ((,class :inherit 
helm-ff-dotted-directory :underline t)))
+   `(helm-ff-executable ((,class :foreground ,magenta-alt)))
+   `(helm-ff-file ((,class :foreground ,fg-main)))
+   `(helm-ff-file-extension ((,class :foreground ,fg-special-warm)))
+   `(helm-ff-invalid-symlink ((,class :foreground ,red :underline t)))
+   `(helm-ff-pipe ((,class ,@(modus-operandi-theme-extra-completions
+                              'modus-theme-refine-magenta
+                              'modus-theme-subtle-magenta
+                              'modus-theme-nuanced-magenta
+                              magenta))))
+   `(helm-ff-prefix ((,class ,@(modus-operandi-theme-extra-completions
+                                'modus-theme-refine-yellow
+                                'modus-theme-subtle-yellow
+                                'modus-theme-nuanced-yellow
+                                yellow-alt-other))))
+   `(helm-ff-socket ((,class :foreground ,red-alt-other)))
+   `(helm-ff-suid ((,class ,@(modus-operandi-theme-extra-completions
+                              'modus-theme-subtle-red
+                              'modus-theme-refine-red
+                              'modus-theme-nuanced-yellow
+                              red-alt))))
+   `(helm-ff-symlink ((,class :foreground ,cyan :underline t)))
+   `(helm-ff-truename ((,class :foreground ,blue-alt-other)))
+   `(helm-grep-cmd-line ((,class :foreground ,yellow-alt-other)))
+   `(helm-grep-file ((,class :inherit bold :foreground ,fg-special-cold)))
+   `(helm-grep-finish ((,class :foreground ,green-active)))
+   `(helm-grep-lineno ((,class :foreground ,fg-special-warm)))
+   `(helm-grep-match ((,class :inherit modus-theme-special-calm)))
+   `(helm-header ((,class :inherit bold :foreground ,fg-special-cold)))
+   `(helm-header-line-left-margin ((,class :inherit bold :foreground 
,yellow-intense)))
+   `(helm-history-deleted ((,class ,@(modus-operandi-theme-extra-completions
+                                      'modus-theme-subtle-red
+                                      'modus-theme-intense-red
+                                      'modus-theme-nuanced-red
+                                      red
+                                      'bold))))
+   `(helm-history-remote ((,class :foreground ,red-alt-other)))
+   `(helm-lisp-completion-info ((,class :foreground ,fg-special-warm)))
+   `(helm-lisp-show-completion ((,class 
,@(modus-operandi-theme-extra-completions
+                                           'modus-theme-subtle-yellow
+                                           'modus-theme-refine-yellow
+                                           'modus-theme-nuanced-yellow
+                                           yellow
+                                           'bold))))
+   `(helm-locate-finish ((,class :foreground ,green-active)))
+   `(helm-match ((,class ,@(modus-operandi-theme-extra-completions
+                            'modus-theme-subtle-cyan
+                            'modus-theme-refine-cyan
+                            'modus-theme-nuanced-cyan
+                            cyan
+                            'bold))))
+   `(helm-match-item ((,class ,@(modus-operandi-theme-extra-completions
+                                 'modus-theme-subtle-neutral
+                                 'modus-theme-subtle-cyan
+                                 'modus-theme-nuanced-cyan
+                                 cyan-alt-other))))
+   `(helm-minibuffer-prompt ((,class :inherit minibuffer-prompt)))
+   `(helm-moccur-buffer ((,class :foreground ,cyan-alt-other :underline t)))
+   `(helm-mode-prefix ((,class ,@(modus-operandi-theme-extra-completions
+                                  'modus-theme-subtle-magenta
+                                  'modus-theme-intense-magenta
+                                  'modus-theme-nuanced-magenta
+                                  magenta-alt
+                                  'bold))))
+   `(helm-non-file-buffer ((,class :foreground ,fg-alt)))
+   `(helm-prefarg ((,class :foreground ,red-active)))
+   `(helm-resume-need-update ((,class ,@(modus-operandi-theme-extra-completions
+                                         'modus-theme-subtle-magenta
+                                         'modus-theme-refine-magenta
+                                         'modus-theme-nuanced-magenta
+                                         magenta-alt-other))))
+   `(helm-selection ((,class ,@(modus-operandi-theme-extra-completions
+                                'modus-theme-subtle-blue
+                                'modus-theme-refine-blue
+                                'modus-theme-special-cold
+                                nil
+                                'bold))))
+   `(helm-selection-line ((,class :inherit modus-theme-special-cold)))
+   `(helm-separator ((,class :foreground ,fg-special-mild)))
+   `(helm-time-zone-current ((,class :foreground ,green)))
+   `(helm-time-zone-home ((,class :foreground ,magenta)))
+   `(helm-source-header ((,class :inherit bold :foreground ,red-alt
+                                 ,@(modus-operandi-theme-scale 
modus-operandi-theme-scale-4))))
+   `(helm-top-columns ((,class :inherit helm-header)))
+   `(helm-ucs-char ((,class :foreground ,yellow-alt-other)))
+   `(helm-visible-mark ((,class :inherit modus-theme-subtle-cyan)))
+;;;;; helm-ls-git
+   `(helm-ls-git-added-copied-face ((,class :foreground ,green-intense)))
+   `(helm-ls-git-added-modified-face ((,class :foreground ,yellow-intense)))
+   `(helm-ls-git-conflict-face ((,class :inherit bold :foreground 
,red-intense)))
+   `(helm-ls-git-deleted-and-staged-face ((,class :foreground ,red-nuanced)))
+   `(helm-ls-git-deleted-not-staged-face ((,class :foreground ,red)))
+   `(helm-ls-git-modified-and-staged-face ((,class :foreground 
,yellow-nuanced)))
+   `(helm-ls-git-modified-not-staged-face ((,class :foreground ,yellow)))
+   `(helm-ls-git-renamed-modified-face ((,class :foreground ,magenta)))
+   `(helm-ls-git-untracked-face ((,class :foreground ,fg-special-cold)))
+;;;;; helm-switch-shell
+   `(helm-switch-shell-new-shell-face ((,class 
,@(modus-operandi-theme-extra-completions
+                                                  'modus-theme-subtle-magenta
+                                                  'modus-theme-refine-magenta
+                                                  'modus-theme-nuanced-magenta
+                                                  magenta-alt-other
+                                                  'bold))))
+;;;;; helm-xref
+   `(helm-xref-file-name ((,class :inherit bold :foreground ,fg-special-cold)))
+   `(helm-xref-file-name ((,class :foreground ,fg-special-warm)))
+;;;;; helpful
+   `(helpful-heading  ((,class :inherit (bold ,modus-theme-variable-pitch) 
:foreground ,fg-main
+                               ,@(modus-operandi-theme-scale 
modus-operandi-theme-scale-4))))
+;;;;; highlight region or ad-hoc regexp
+   `(hi-black-b ((,class :background ,fg-main :foreground ,bg-main)))
+   `(hi-blue ((,class :background ,bg-alt :foreground ,blue :underline t)))
+   `(hi-blue-b ((,class :inherit modus-theme-intense-blue)))
+   `(hi-green ((,class :background ,bg-alt :foreground ,green :underline t)))
+   `(hi-green-b ((,class :inherit modus-theme-intense-green)))
+   `(hi-pink ((,class :background ,bg-alt :foreground ,magenta :underline t)))
+   `(hi-red-b ((,class :inherit modus-theme-intense-red)))
+   `(hi-yellow ((,class :background ,bg-alt :foreground ,yellow :underline t)))
+   `(highlight ((,class :inherit modus-theme-subtle-blue)))
+   `(highlight-changes ((,class :foreground ,yellow-alt-other)))
+   `(highlight-changes-delete ((,class :foreground ,red-alt-other :underline 
t)))
+   `(hl-line ((,class :inherit modus-theme-hl-line)))
+;;;;; highlight-blocks
+   `(highlight-blocks-depth-1-face ((,class :background ,bg-dim :foreground 
,fg-main)))
+   `(highlight-blocks-depth-2-face ((,class :background ,bg-alt :foreground 
,fg-main)))
+   `(highlight-blocks-depth-3-face ((,class :background ,bg-special-cold 
:foreground ,fg-main)))
+   `(highlight-blocks-depth-4-face ((,class :background ,bg-special-calm 
:foreground ,fg-main)))
+   `(highlight-blocks-depth-5-face ((,class :background ,bg-special-warm 
:foreground ,fg-main)))
+   `(highlight-blocks-depth-6-face ((,class :background ,bg-special-mild 
:foreground ,fg-main)))
+   `(highlight-blocks-depth-7-face ((,class :background ,bg-inactive 
:foreground ,fg-main)))
+   `(highlight-blocks-depth-8-face ((,class :background ,bg-active :foreground 
,fg-main)))
+   `(highlight-blocks-depth-9-face ((,class :background ,cyan-subtle-bg 
:foreground ,fg-main)))
+;;;;; highlight-defined
+   `(highlight-defined-builtin-function-name-face ((,class :foreground 
,magenta)))
+   `(highlight-defined-face-name-face ((,class :foreground ,fg-main)))
+   `(highlight-defined-function-name-face ((,class :foreground ,magenta)))
+   `(highlight-defined-macro-name-face ((,class :foreground ,magenta-alt)))
+   `(highlight-defined-special-form-name-face ((,class :foreground 
,magenta-alt-other)))
+   `(highlight-defined-variable-name-face ((,class :foreground ,cyan)))
+;;;;; highlight-escape-sequences (`hes-mode')
+   `(hes-escape-backslash-face ((,class :inherit bold :foreground 
,fg-escape-char-construct)))
+   `(hes-escape-sequence-face ((,class :inherit bold :foreground 
,fg-escape-char-backslash)))
+;;;;; highlight-indentation
+   `(highlight-indentation-face ((,class :inherit modus-theme-hl-line)))
+   `(highlight-indentation-current-column-face ((,class :background 
,bg-active)))
+;;;;; highlight-numbers
+   `(highlight-numbers-number ((,class :foreground ,blue-alt-other)))
+;;;;; highlight-symbol
+   `(highlight-symbol-face ((,class :inherit modus-theme-special-mild)))
+;;;;; highlight-thing
+   `(highlight-thing ((,class :background ,bg-alt :foreground ,cyan)))
+;;;;; hl-defined
+   `(hdefd-functions ((,class :foreground ,blue)))
+   `(hdefd-undefined ((,class :foreground ,red-alt)))
+   `(hdefd-variables ((,class :foreground ,cyan-alt)))
+;;;;; hl-fill-column
+   `(hl-fill-column-face ((,class :background ,bg-active :foreground 
,fg-active)))
+;;;;; hl-todo
+   `(hl-todo ((,class :inherit bold :foreground ,red-alt-other :slant 
,modus-theme-slant)))
+;;;;; hydra
+   `(hydra-face-amaranth ((,class :inherit bold :foreground ,yellow)))
+   `(hydra-face-blue ((,class :inherit bold :foreground ,blue-alt)))
+   `(hydra-face-pink ((,class :inherit bold :foreground ,magenta-alt)))
+   `(hydra-face-red ((,class :inherit bold :foreground ,red)))
+   `(hydra-face-teal ((,class :inherit bold :foreground ,cyan)))
+;;;;; hyperlist
+   `(hyperlist-condition ((,class :foreground ,green)))
+   `(hyperlist-hashtag ((,class :foreground ,yellow)))
+   `(hyperlist-operator ((,class :foreground ,blue-alt)))
+   `(hyperlist-paren ((,class :foreground ,cyan-alt-other)))
+   `(hyperlist-quote ((,class :foreground ,cyan-alt)))
+   `(hyperlist-ref ((,class :foreground ,magenta-alt-other)))
+   `(hyperlist-stars ((,class :foreground ,fg-alt)))
+   `(hyperlist-tag ((,class :foreground ,red)))
+   `(hyperlist-toplevel ((,class :inherit bold :foreground ,fg-main)))
+;;;;; icomplete
+   `(icomplete-first-match ((,class :inherit bold
+                                    
,@(modus-operandi-theme-standard-completions
+                                       magenta magenta-nuanced-bg
+                                       magenta-intense-bg fg-main))))
+;;;;; icomplete-vertical
+   `(icomplete-vertical-separator ((,class :foreground ,fg-alt)))
+;;;;; ido-mode
+   `(ido-first-match ((,class :inherit bold
+                              ,@(modus-operandi-theme-standard-completions
+                                 magenta magenta-nuanced-bg
+                                 magenta-subtle-bg fg-main))))
+   `(ido-incomplete-regexp ((,class :inherit error)))
+   `(ido-indicator ((,class :inherit modus-theme-subtle-yellow)))
+   `(ido-only-match ((,class :inherit bold
+                             ,@(modus-operandi-theme-standard-completions
+                                magenta-intense red-nuanced-bg
+                                magenta-intense-bg fg-main))))
+   `(ido-subdir ((,class :foreground ,blue-alt-other)))
+   `(ido-virtual ((,class :foreground ,yellow-alt-other)))
+;;;;; iedit
+   `(iedit-occurrence ((,class :inherit modus-theme-refine-blue)))
+   `(iedit-read-only-occurrence ((,class :inherit modus-theme-intense-yellow)))
+;;;;; iflipb
+   `(iflipb-current-buffer-face ((,class :inherit bold :foreground ,cyan-alt)))
+   `(iflipb-other-buffer-face ((,class :foreground ,fg-alt)))
+;;;;; imenu-list
+   `(imenu-list-entry-face-0 ((,class :foreground ,cyan)))
+   `(imenu-list-entry-face-1 ((,class :foreground ,blue)))
+   `(imenu-list-entry-face-2 ((,class :foreground ,cyan-alt-other)))
+   `(imenu-list-entry-face-3 ((,class :foreground ,blue-alt)))
+   `(imenu-list-entry-subalist-face-0 ((,class :inherit bold :foreground 
,magenta-alt-other :underline t)))
+   `(imenu-list-entry-subalist-face-1 ((,class :inherit bold :foreground 
,magenta :underline t)))
+   `(imenu-list-entry-subalist-face-2 ((,class :inherit bold :foreground 
,green-alt-other :underline t)))
+   `(imenu-list-entry-subalist-face-3 ((,class :inherit bold :foreground 
,red-alt-other :underline t)))
+;;;;; indium
+   `(indium-breakpoint-face ((,class :foreground ,red-active)))
+   `(indium-frame-url-face ((,class :foreground ,fg-alt :underline t)))
+   `(indium-keyword-face ((,class :foreground ,magenta-alt-other)))
+   `(indium-litable-face ((,class :foreground ,fg-special-warm :slant 
,modus-theme-slant)))
+   `(indium-repl-error-face ((,class :inherit bold :foreground ,red)))
+   `(indium-repl-prompt-face ((,class :foreground ,cyan-alt-other)))
+   `(indium-repl-stdout-face ((,class :foreground ,fg-main)))
+;;;;; info
+   `(Info-quoted ((,class :foreground ,magenta))) ; the capitalisation is 
canonical
+   `(info-header-node ((,class :inherit bold :foreground ,fg-alt)))
+   `(info-header-xref ((,class :foreground ,blue-active)))
+   `(info-index-match ((,class :inherit match)))
+   `(info-menu-header ((,class :inherit (bold ,modus-theme-variable-pitch) 
:foreground ,fg-main
+                               ,@(modus-operandi-theme-scale 
modus-operandi-theme-scale-2))))
+   `(info-menu-star ((,class :foreground ,fg-main)))
+   `(info-node ((,class :inherit bold)))
+   `(info-title-1 ((,class :inherit (bold ,modus-theme-variable-pitch) 
:foreground ,fg-main
+                           ,@(modus-operandi-theme-scale 
modus-operandi-theme-scale-4))))
+   `(info-title-2 ((,class :inherit (bold ,modus-theme-variable-pitch) 
:foreground ,fg-special-warm
+                           ,@(modus-operandi-theme-scale 
modus-operandi-theme-scale-3))))
+   `(info-title-3 ((,class :inherit (bold ,modus-theme-variable-pitch) 
:foreground ,fg-special-cold
+                           ,@(modus-operandi-theme-scale 
modus-operandi-theme-scale-2))))
+   `(info-title-4 ((,class :inherit (bold ,modus-theme-variable-pitch) 
:foreground ,fg-special-mild
+                           ,@(modus-operandi-theme-scale 
modus-operandi-theme-scale-1))))
+;;;;; info-colors
+   `(info-colors-lisp-code-block ((,class :inherit fixed-pitch)))
+   `(info-colors-ref-item-command ((,class :foreground ,magenta)))
+   `(info-colors-ref-item-constant ((,class :foreground ,blue-alt-other)))
+   `(info-colors-ref-item-function ((,class :foreground ,magenta)))
+   `(info-colors-ref-item-macro ((,class ,@(modus-operandi-theme-bold-weight) 
:foreground ,magenta-alt-other)))
+   `(info-colors-ref-item-other ((,class :foreground ,cyan)))
+   `(info-colors-ref-item-special-form ((,class 
,@(modus-operandi-theme-bold-weight) :foreground ,magenta-alt-other)))
+   `(info-colors-ref-item-syntax-class ((,class :foreground ,magenta)))
+   `(info-colors-ref-item-type ((,class :foreground ,magenta-alt)))
+   `(info-colors-ref-item-user-option ((,class :foreground ,cyan)))
+   `(info-colors-ref-item-variable ((,class :foreground ,cyan)))
+;;;;; interaction-log
+   `(ilog-buffer-face ((,class :foreground ,magenta-alt-other)))
+   `(ilog-change-face ((,class :foreground ,magenta-alt)))
+   `(ilog-echo-face ((,class :foreground ,yellow-alt-other)))
+   `(ilog-load-face ((,class :foreground ,green)))
+   `(ilog-message-face ((,class :foreground ,fg-alt)))
+   `(ilog-non-change-face ((,class :foreground ,blue)))
+;;;;; ioccur
+   `(ioccur-cursor ((,class :foreground ,fg-main)))
+   `(ioccur-invalid-regexp ((,class :foreground ,red)))
+   `(ioccur-match-face ((,class :inherit modus-theme-special-calm)))
+   `(ioccur-match-overlay-face ((,class ,@(and (>= emacs-major-version 27) 
'(:extend t))
+                                        :inherit modus-theme-special-cold)))
+   `(ioccur-num-line-face ((,class :foreground ,fg-special-warm)))
+   `(ioccur-overlay-face ((,class ,@(and (>= emacs-major-version 27) '(:extend 
t))
+                                  :inherit modus-theme-refine-blue)))
+   `(ioccur-regexp-face ((,class :inherit (modus-theme-intense-magenta bold))))
+   `(ioccur-title-face ((,class :inherit bold :foreground ,red-alt
+                                ,@(modus-operandi-theme-scale 
modus-operandi-theme-scale-4))))
+;;;;; isearch, occur, and the like
+   `(isearch ((,class :inherit (modus-theme-intense-green bold))))
+   `(isearch-fail ((,class :inherit modus-theme-refine-red)))
+   `(lazy-highlight ((,class :inherit modus-theme-refine-cyan)))
+   `(match ((,class :inherit modus-theme-special-calm)))
+   `(query-replace ((,class :inherit (modus-theme-intense-yellow bold))))
+;;;;; ivy
+   `(ivy-action ((,class :inherit bold :foreground ,red-alt)))
+   `(ivy-completions-annotations ((,class :foreground ,fg-special-cold :slant 
,modus-theme-slant)))
+   `(ivy-confirm-face ((,class :foreground ,cyan)))
+   `(ivy-current-match ((,class ,@(modus-operandi-theme-extra-completions
+                                   'modus-theme-refine-cyan
+                                   'modus-theme-intense-cyan
+                                   'modus-theme-special-warm
+                                   nil
+                                   'bold))))
+   `(ivy-cursor ((,class :background ,fg-main :foreground ,bg-main)))
+   `(ivy-grep-info ((,class :foreground ,cyan-alt)))
+   `(ivy-grep-line-number ((,class :foreground ,fg-special-warm)))
+   `(ivy-highlight-face ((,class :foreground ,magenta)))
+   `(ivy-match-required-face ((,class :inherit error)))
+   `(ivy-minibuffer-match-face-1 ((,class 
,@(modus-operandi-theme-extra-completions
+                                             'modus-theme-subtle-neutral
+                                             'modus-theme-intense-neutral
+                                             'modus-theme-subtle-neutral
+                                             fg-alt))))
+   `(ivy-minibuffer-match-face-2 ((,class 
,@(modus-operandi-theme-extra-completions
+                                             'modus-theme-subtle-green
+                                             'modus-theme-refine-green
+                                             'modus-theme-nuanced-green
+                                             green-alt-other
+                                             'bold))))
+   `(ivy-minibuffer-match-face-3 ((,class 
,@(modus-operandi-theme-extra-completions
+                                             'modus-theme-subtle-cyan
+                                             'modus-theme-refine-cyan
+                                             'modus-theme-nuanced-cyan
+                                             cyan-alt-other
+                                             'bold))))
+   `(ivy-minibuffer-match-face-4 ((,class 
,@(modus-operandi-theme-extra-completions
+                                             'modus-theme-subtle-magenta
+                                             'modus-theme-refine-magenta
+                                             'modus-theme-nuanced-magenta
+                                             magenta-alt-other
+                                             'bold))))
+   `(ivy-minibuffer-match-highlight ((,class 
,@(modus-operandi-theme-extra-completions
+                                                'modus-theme-subtle-blue
+                                                'modus-theme-intense-blue
+                                                'modus-theme-nuanced-blue
+                                                blue-alt-other
+                                                'bold))))
+   `(ivy-modified-buffer ((,class :foreground ,yellow :slant 
,modus-theme-slant)))
+   `(ivy-modified-outside-buffer ((,class :foreground ,yellow-alt :slant 
,modus-theme-slant)))
+   `(ivy-org ((,class :foreground ,cyan-alt-other)))
+   `(ivy-prompt-match ((,class :inherit ivy-current-match)))
+   `(ivy-remote ((,class :foreground ,magenta)))
+   `(ivy-separator ((,class :foreground ,fg-alt)))
+   `(ivy-subdir ((,class :foreground ,blue-alt-other)))
+   `(ivy-virtual ((,class :foreground ,magenta-alt-other)))
+   `(ivy-yanked-word ((,class ,@(modus-operandi-theme-extra-completions
+                                 'modus-theme-subtle-blue
+                                 'modus-theme-refine-blue
+                                 'modus-theme-nuanced-blue
+                                 blue-alt))))
+;;;;; ivy-posframe
+   `(ivy-posframe ((,class :background ,bg-dim :foreground ,fg-main)))
+   `(ivy-posframe-border ((,class :background ,bg-active)))
+   `(ivy-posframe-cursor ((,class :background ,fg-main :foreground ,bg-main)))
+;;;;; jira (org-jira)
+   `(jiralib-comment-face ((,class :background ,bg-alt)))
+   `(jiralib-comment-header-face ((,class :inherit bold)))
+   `(jiralib-issue-info-face ((,class :inherit modus-theme-special-warm)))
+   `(jiralib-issue-info-header-face ((,class :inherit 
(modus-theme-special-warm bold))))
+   `(jiralib-issue-summary-face ((,class :inherit bold)))
+   `(jiralib-link-filter-face ((,class :underline t)))
+   `(jiralib-link-issue-face ((,class :underline t)))
+   `(jiralib-link-project-face ((,class :underline t)))
+;;;;; journalctl-mode
+   `(journalctl-error-face ((,class :inherit bold :foreground ,red)))
+   `(journalctl-finished-face ((,class :inherit bold :foreground ,green)))
+   `(journalctl-host-face ((,class :foreground ,blue)))
+   `(journalctl-process-face ((,class :foreground ,cyan-alt-other)))
+   `(journalctl-starting-face ((,class :foreground ,green)))
+   `(journalctl-timestamp-face ((,class :foreground ,fg-special-cold)))
+   `(journalctl-warning-face ((,class :inherit bold :foreground ,yellow)))
+;;;;; js2-mode
+   `(js2-error ((,class :foreground ,red)))
+   `(js2-external-variable ((,class :foreground ,cyan-alt-other)))
+   `(js2-function-call ((,class :foreground ,magenta)))
+   `(js2-function-param ((,class :foreground ,blue)))
+   `(js2-instance-member ((,class :foreground ,magenta-alt-other)))
+   `(js2-jsdoc-html-tag-delimiter ((,class :foreground ,fg-main)))
+   `(js2-jsdoc-html-tag-name ((,class :foreground ,cyan)))
+   `(js2-jsdoc-tag ((,class :foreground ,fg-special-calm)))
+   `(js2-jsdoc-type ((,class :foreground ,fg-special-cold)))
+   `(js2-jsdoc-value ((,class :foreground ,fg-special-warm)))
+   `(js2-object-property ((,class :foreground ,fg-main)))
+   `(js2-object-property-access ((,class :foreground ,fg-main)))
+   `(js2-private-function-call ((,class :foreground ,green-alt-other)))
+   `(js2-private-member ((,class :foreground ,fg-special-mild)))
+   `(js2-warning ((,class :foreground ,yellow-alt :underline t)))
+;;;;; julia
+   `(julia-macro-face ((,class ,@(modus-operandi-theme-bold-weight) 
:foreground ,magenta)))
+   `(julia-quoted-symbol-face ((,class :foreground ,blue-alt-other)))
+;;;;; jupyter
+   `(jupyter-eval-overlay ((,class :inherit bold :foreground ,blue)))
+   `(jupyter-repl-input-prompt ((,class :foreground ,cyan-alt-other)))
+   `(jupyter-repl-output-prompt ((,class :foreground ,magenta-alt-other)))
+   `(jupyter-repl-traceback ((,class :inherit modus-theme-intense-red)))
+;;;;; kaocha-runner
+   `(kaocha-runner-error-face ((,class :foreground ,red)))
+   `(kaocha-runner-success-face ((,class :foreground ,green)))
+   `(kaocha-runner-warning-face ((,class :foreground ,yellow)))
+;;;;; keycast
+   `(keycast-command ((,class :inherit bold :foreground ,blue-active)))
+   `(keycast-key ((,class :box ,(modus-operandi-theme-modeline-box blue-alt 
blue-active t -3)
+                          ,@(modus-operandi-theme-modeline-props
+                             blue-active bg-main
+                             blue-active bg-active))))
+;;;;; line numbers (display-line-numbers-mode and global variant)
+   `(line-number ((,class :background ,bg-dim :foreground ,fg-alt)))
+   `(line-number-current-line ((,class :inherit bold :background ,bg-active 
:foreground ,fg-active)))
+;;;;; lsp-mode
+   `(lsp-face-highlight-read ((,class :inherit modus-theme-subtle-blue 
:underline t)))
+   `(lsp-face-highlight-textual ((,class :inherit modus-theme-subtle-blue)))
+   `(lsp-face-highlight-write ((,class :inherit (modus-theme-refine-blue 
bold))))
+   `(lsp-face-semhl-constant ((,class :foreground ,blue-alt-other)))
+   `(lsp-face-semhl-deprecated
+     ((,(append '((supports :underline (:style wave))) class)
+       :foreground ,yellow :underline (:style wave))
+      (,class :foreground ,yellow :underline t)))
+   `(lsp-face-semhl-enummember ((,class :foreground ,blue-alt-other)))
+   `(lsp-face-semhl-field ((,class :foreground ,cyan-alt)))
+   `(lsp-face-semhl-field-static ((,class :foreground ,cyan-alt :slant 
,modus-theme-slant)))
+   `(lsp-face-semhl-function ((,class :foreground ,magenta)))
+   `(lsp-face-semhl-method ((,class :foreground ,magenta)))
+   `(lsp-face-semhl-namespace ((,class ,@(modus-operandi-theme-bold-weight) 
:foreground ,magenta-alt)))
+   `(lsp-face-semhl-preprocessor ((,class :foreground ,red-alt-other)))
+   `(lsp-face-semhl-static-method ((,class :foreground ,magenta :slant 
,modus-theme-slant)))
+   `(lsp-face-semhl-type-class ((,class :foreground ,magenta-alt)))
+   `(lsp-face-semhl-type-enum ((,class :foreground ,magenta-alt)))
+   `(lsp-face-semhl-type-primitive ((,class :foreground ,magenta-alt :slant 
,modus-theme-slant)))
+   `(lsp-face-semhl-type-template ((,class :foreground ,magenta-alt :slant 
,modus-theme-slant)))
+   `(lsp-face-semhl-type-typedef ((,class :foreground ,magenta-alt :slant 
,modus-theme-slant)))
+   `(lsp-face-semhl-variable ((,class :foreground ,cyan)))
+   `(lsp-face-semhl-variable-local ((,class :foreground ,cyan)))
+   `(lsp-face-semhl-variable-parameter ((,class :foreground ,cyan-alt-other)))
+   `(lsp-lens-face ((,class :height 0.8 :foreground ,fg-alt)))
+   `(lsp-lens-mouse-face ((,class :height 0.8 :foreground ,blue-alt-other 
:underline t)))
+   `(lsp-ui-doc-background ((,class :background ,bg-alt)))
+   `(lsp-ui-doc-header ((,class :background ,bg-header :foreground 
,fg-header)))
+   `(lsp-ui-doc-url ((,class :foreground ,blue-alt-other :underline t)))
+   `(lsp-ui-peek-filename ((,class :foreground ,fg-special-warm)))
+   `(lsp-ui-peek-footer ((,class :background ,bg-header :foreground 
,fg-header)))
+   `(lsp-ui-peek-header ((,class :background ,bg-header :foreground 
,fg-header)))
+   `(lsp-ui-peek-highlight ((,class :inherit modus-theme-subtle-blue)))
+   `(lsp-ui-peek-line-number ((,class :foreground ,fg-alt)))
+   `(lsp-ui-peek-list ((,class :background ,bg-dim)))
+   `(lsp-ui-peek-peek ((,class :background ,bg-alt)))
+   `(lsp-ui-peek-selection ((,class :inherit modus-theme-subtle-cyan)))
+   `(lsp-ui-sideline-code-action ((,class :foreground ,yellow)))
+   `(lsp-ui-sideline-current-symbol ((,class :inherit bold :height 0.99 :box 
(:line-width -1 :style nil) :foreground ,fg-main)))
+   `(lsp-ui-sideline-symbol ((,class :inherit bold :height 0.99 :box 
(:line-width -1 :style nil) :foreground ,fg-alt)))
+   `(lsp-ui-sideline-symbol-info ((,class :height 0.99 :slant italic)))
+;;;;; magit
+   `(magit-bisect-bad ((,class :foreground ,red-alt-other)))
+   `(magit-bisect-good ((,class :foreground ,green-alt-other)))
+   `(magit-bisect-skip ((,class :foreground ,yellow-alt-other)))
+   `(magit-blame-date ((,class :foreground ,blue)))
+   `(magit-blame-dimmed ((,class :foreground ,fg-alt)))
+   `(magit-blame-hash ((,class :foreground ,fg-special-warm)))
+   `(magit-blame-heading ((,class :background ,bg-alt)))
+   `(magit-blame-highlight ((,class :inherit modus-theme-nuanced-cyan)))
+   `(magit-blame-margin ((,class :inherit magit-blame-highlight)))
+   `(magit-blame-name ((,class :foreground ,magenta-alt-other)))
+   `(magit-blame-summary ((,class :foreground ,cyan-alt-other)))
+   `(magit-branch-current ((,class :foreground ,blue-alt-other :box t)))
+   `(magit-branch-local ((,class :foreground ,blue-alt)))
+   `(magit-branch-remote ((,class :foreground ,magenta-alt)))
+   `(magit-branch-remote-head ((,class :foreground ,magenta-alt-other :box t)))
+   `(magit-branch-upstream ((,class :slant italic)))
+   `(magit-cherry-equivalent ((,class :background ,bg-main :foreground 
,magenta-intense)))
+   `(magit-cherry-unmatched ((,class :background ,bg-main :foreground 
,cyan-intense)))
+   `(magit-diff-added ((,class ,@(modus-operandi-theme-diffs
+                                  bg-main green
+                                  bg-diff-added fg-diff-added))))
+   `(magit-diff-added-highlight ((,class ,@(modus-operandi-theme-diffs
+                                            bg-dim green
+                                            bg-diff-focus-added 
fg-diff-focus-added))))
+   `(magit-diff-base ((,class ,@(modus-operandi-theme-diffs
+                                 bg-main yellow
+                                 bg-diff-changed fg-diff-changed))))
+   `(magit-diff-base-highlight ((,class ,@(modus-operandi-theme-diffs
+                                           bg-dim yellow
+                                           bg-diff-focus-changed 
fg-diff-focus-changed))))
+   `(magit-diff-context ((,class :foreground ,fg-unfocused)))
+   `(magit-diff-context-highlight ((,class ,@(modus-operandi-theme-diffs
+                                              bg-dim fg-dim
+                                              bg-inactive fg-inactive))))
+   `(magit-diff-file-heading ((,class :inherit bold :foreground 
,fg-special-cold)))
+   `(magit-diff-file-heading-highlight ((,class :inherit 
(modus-theme-special-cold bold))))
+   `(magit-diff-file-heading-selection ((,class :background ,bg-alt 
:foreground ,cyan)))
+   `(magit-diff-hunk-heading ((,class :inherit bold :background ,bg-active 
:foreground ,fg-inactive)))
+   `(magit-diff-hunk-heading-highlight ((,class :inherit 
(modus-theme-diff-heading bold))))
+   `(magit-diff-hunk-heading-selection ((,class :inherit 
modus-theme-intense-cyan)))
+   `(magit-diff-hunk-region ((,class :inherit bold)))
+   `(magit-diff-lines-boundary ((,class :background ,fg-main)))
+   `(magit-diff-lines-heading ((,class :inherit modus-theme-refine-magenta)))
+   `(magit-diff-removed ((,class ,@(modus-operandi-theme-diffs
+                                    bg-main red
+                                    bg-diff-removed fg-diff-removed))))
+   `(magit-diff-removed-highlight ((,class ,@(modus-operandi-theme-diffs
+                                              bg-dim red
+                                              bg-diff-focus-removed 
fg-diff-focus-removed))))
+   `(magit-diffstat-added ((,class :foreground ,green)))
+   `(magit-diffstat-removed ((,class :foreground ,red)))
+   `(magit-dimmed ((,class :foreground ,fg-unfocused)))
+   `(magit-filename ((,class :foreground ,fg-special-cold)))
+   `(magit-hash ((,class :foreground ,fg-alt)))
+   `(magit-head ((,class :inherit magit-branch-local)))
+   `(magit-header-line ((,class :inherit bold :foreground ,magenta-active)))
+   `(magit-header-line-key ((,class :inherit bold :foreground ,red-active)))
+   `(magit-header-line-log-select ((,class :inherit bold :foreground 
,fg-main)))
+   `(magit-keyword ((,class :foreground ,magenta)))
+   `(magit-keyword-squash ((,class :inherit bold :foreground 
,yellow-alt-other)))
+   `(magit-log-author ((,class :foreground ,cyan)))
+   `(magit-log-date ((,class :foreground ,fg-alt)))
+   `(magit-log-graph ((,class :foreground ,fg-dim)))
+   `(magit-mode-line-process ((,class :inherit bold :foreground ,blue-active)))
+   `(magit-mode-line-process-error ((,class :inherit bold :foreground 
,red-active)))
+   `(magit-process-ng ((,class :inherit error)))
+   `(magit-process-ok ((,class :inherit success)))
+   `(magit-reflog-amend ((,class :background ,bg-main :foreground 
,magenta-intense)))
+   `(magit-reflog-checkout ((,class :background ,bg-main :foreground 
,blue-intense)))
+   `(magit-reflog-cherry-pick ((,class :background ,bg-main :foreground 
,green-intense)))
+   `(magit-reflog-commit ((,class :background ,bg-main :foreground 
,green-intense)))
+   `(magit-reflog-merge ((,class :background ,bg-main :foreground 
,green-intense)))
+   `(magit-reflog-other ((,class :background ,bg-main :foreground 
,cyan-intense)))
+   `(magit-reflog-rebase ((,class :background ,bg-main :foreground 
,magenta-intense)))
+   `(magit-reflog-remote ((,class :background ,bg-main :foreground 
,cyan-intense)))
+   `(magit-reflog-reset ((,class :background ,bg-main :foreground 
,red-intense)))
+   `(magit-refname ((,class :foreground ,fg-alt)))
+   `(magit-refname-pullreq ((,class :foreground ,fg-alt)))
+   `(magit-refname-stash ((,class :foreground ,fg-alt)))
+   `(magit-refname-wip ((,class :foreground ,fg-alt)))
+   `(magit-section ((,class :background ,bg-dim :foreground ,fg-main)))
+   `(magit-section-heading ((,class :inherit bold :foreground ,cyan)))
+   `(magit-section-heading-selection ((,class :inherit 
(modus-theme-refine-cyan bold))))
+   `(magit-section-highlight ((,class :background ,bg-alt)))
+   `(magit-sequence-done ((,class :foreground ,green-alt)))
+   `(magit-sequence-drop ((,class :foreground ,red-alt)))
+   `(magit-sequence-exec ((,class :foreground ,magenta-alt)))
+   `(magit-sequence-head ((,class :foreground ,cyan-alt)))
+   `(magit-sequence-onto ((,class :foreground ,fg-alt)))
+   `(magit-sequence-part ((,class :foreground ,yellow-alt)))
+   `(magit-sequence-pick ((,class :foreground ,blue-alt)))
+   `(magit-sequence-stop ((,class :foreground ,red)))
+   `(magit-signature-bad ((,class :inherit bold :foreground ,red)))
+   `(magit-signature-error ((,class :foreground ,red-alt)))
+   `(magit-signature-expired ((,class :foreground ,yellow)))
+   `(magit-signature-expired-key ((,class :foreground ,yellow)))
+   `(magit-signature-good ((,class :foreground ,green)))
+   `(magit-signature-revoked ((,class :foreground ,magenta)))
+   `(magit-signature-untrusted ((,class :foreground ,cyan)))
+   `(magit-tag ((,class :foreground ,yellow-alt-other)))
+;;;;; magit-imerge
+   `(magit-imerge-overriding-value ((,class :inherit bold :foreground 
,red-alt)))
+;;;;; man
+   `(Man-overstrike ((,class :inherit bold :foreground ,magenta)))
+   `(Man-reverse ((,class :inherit modus-theme-subtle-magenta)))
+   `(Man-underline ((,class :foreground ,cyan :underline t)))
+;;;;; markdown-mode
+   `(markdown-blockquote-face ((,class :foreground ,fg-special-warm :slant 
,modus-theme-slant)))
+   `(markdown-bold-face ((,class :inherit bold)))
+   `(markdown-code-face ((,class :inherit fixed-pitch)))
+   `(markdown-comment-face ((,class :foreground ,fg-alt :slant 
,modus-theme-slant)))
+   `(markdown-footnote-marker-face ((,class :inherit bold :foreground 
,cyan-alt)))
+   `(markdown-footnote-text-face ((,class :foreground ,fg-main :slant 
,modus-theme-slant)))
+   `(markdown-gfm-checkbox-face ((,class :foreground ,cyan-alt-other)))
+   `(markdown-header-delimiter-face ((,class 
,@(modus-operandi-theme-bold-weight) :foreground ,fg-dim)))
+   `(markdown-header-face ((,class :inherit bold)))
+   `(markdown-header-rule-face ((,class :inherit bold :foreground 
,fg-special-warm)))
+   `(markdown-hr-face ((,class :inherit bold :foreground ,fg-special-warm)))
+   `(markdown-html-attr-name-face ((,class :inherit fixed-pitch :foreground 
,cyan)))
+   `(markdown-html-attr-value-face ((,class :inherit fixed-pitch :foreground 
,blue)))
+   `(markdown-html-entity-face ((,class :inherit fixed-pitch :foreground 
,cyan)))
+   `(markdown-html-tag-delimiter-face ((,class :inherit fixed-pitch 
:foreground ,fg-special-mild)))
+   `(markdown-html-tag-name-face ((,class :inherit fixed-pitch :foreground 
,magenta-alt)))
+   `(markdown-inline-code-face ((,class :inherit fixed-pitch :foreground 
,magenta)))
+   `(markdown-italic-face ((,class :foreground ,fg-special-cold :slant 
italic)))
+   `(markdown-language-info-face ((,class :inherit fixed-pitch :foreground 
,fg-special-cold)))
+   `(markdown-language-keyword-face ((,class :inherit fixed-pitch :foreground 
,green-alt-other)))
+   `(markdown-line-break-face ((,class :inherit modus-theme-refine-cyan 
:underline t)))
+   `(markdown-link-face ((,class :inherit link)))
+   `(markdown-link-title-face ((,class :foreground ,fg-special-cold :slant 
,modus-theme-slant)))
+   `(markdown-list-face ((,class :foreground ,fg-dim)))
+   `(markdown-markup-face ((,class :foreground ,fg-alt)))
+   `(markdown-math-face ((,class :foreground ,magenta-alt-other)))
+   `(markdown-metadata-key-face ((,class :foreground ,cyan-alt-other)))
+   `(markdown-metadata-value-face ((,class :foreground ,blue-alt)))
+   `(markdown-missing-link-face ((,class :inherit bold :foreground ,yellow)))
+   `(markdown-plain-url-face ((,class :inherit markdown-link-face)))
+   `(markdown-pre-face ((,class ,@(and (>= emacs-major-version 27) '(:extend 
t))
+                                :inherit fixed-pitch :background ,bg-dim
+                                :foreground ,fg-special-mild)))
+   `(markdown-reference-face ((,class :inherit markdown-markup-face)))
+   `(markdown-strike-through-face ((,class :strike-through t)))
+   `(markdown-table-face ((,class :inherit fixed-pitch :foreground 
,fg-special-cold)))
+   `(markdown-url-face ((,class :foreground ,blue)))
+;;;;; markup-faces (`adoc-mode')
+   `(markup-anchor-face ((,class :foreground ,fg-inactive)))
+   `(markup-attribute-face ((,class :foreground ,fg-inactive :slant italic)))
+   `(markup-big-face ((,class :height 1.3 :foreground ,blue-nuanced)))
+   `(markup-bold-face ((,class :inherit bold :foreground ,red-nuanced)))
+   `(markup-code-face ((,class :inherit fixed-pitch :foreground ,magenta)))
+   `(markup-command-face ((,class :foreground ,fg-inactive)))
+   `(markup-comment-face ((,class :foreground ,fg-alt :slant 
,modus-theme-slant)))
+   `(markup-complex-replacement-face ((,class :box (:line-width 2 :color nil 
:style released-button)
+                                              :inherit 
modus-theme-refine-magenta)))
+   `(markup-emphasis-face ((,class :foreground ,fg-special-cold :slant 
italic)))
+   `(markup-error-face ((,class :inherit bold :foreground ,red)))
+   `(markup-gen-face ((,class :foreground ,magenta-alt)))
+   `(markup-internal-reference-face ((,class :foreground ,fg-inactive 
:underline t)))
+   `(markup-italic-face ((,class :foreground ,fg-special-cold :slant italic)))
+   `(markup-list-face ((,class :inherit modus-theme-special-calm)))
+   `(markup-meta-face ((,class :foreground ,fg-inactive)))
+   `(markup-meta-hide-face ((,class :foreground ,fg-alt)))
+   `(markup-passthrough-face ((,class :inherit fixed-pitch :foreground ,cyan)))
+   `(markup-preprocessor-face ((,class :foreground ,red-alt-other)))
+   `(markup-replacement-face ((,class :foreground ,yellow-alt-other)))
+   `(markup-secondary-text-face ((,class :height 0.8 :foreground 
,magenta-nuanced)))
+   `(markup-small-face ((,class :height 0.8 :foreground ,fg-main)))
+   `(markup-strong-face ((,class :inherit bold :foreground ,red-nuanced)))
+   `(markup-subscript-face ((,class :height 0.8 :foreground ,fg-special-cold)))
+   `(markup-superscript-face ((,class :height 0.8 :foreground 
,fg-special-cold)))
+   `(markup-table-cell-face ((,class :inherit modus-theme-special-cold)))
+   `(markup-table-face ((,class :inherit modus-theme-subtle-cyan)))
+   `(markup-table-row-face ((,class :inherit modus-theme-subtle-cyan)))
+   `(markup-title-0-face ((,class :height 3.0 :foreground ,blue-nuanced)))
+   `(markup-title-1-face ((,class :height 2.4 :foreground ,blue-nuanced)))
+   `(markup-title-2-face ((,class :height 1.8 :foreground ,blue-nuanced)))
+   `(markup-title-3-face ((,class :height 1.4 :foreground ,blue-nuanced)))
+   `(markup-title-4-face ((,class :height 1.2 :foreground ,blue-nuanced)))
+   `(markup-title-5-face ((,class :height 1.2 :foreground ,blue-nuanced 
:underline t)))
+   `(markup-value-face ((,class :foreground ,fg-inactive)))
+   `(markup-verbatim-face ((,class :inherit modus-theme-special-mild)))
+;;;;; mentor
+   `(mentor-download-message ((,class :foreground ,fg-special-warm)))
+   `(mentor-download-name ((,class :foreground ,fg-special-cold)))
+   `(mentor-download-progress ((,class :foreground ,blue-alt-other)))
+   `(mentor-download-size ((,class :foreground ,magenta-alt-other)))
+   `(mentor-download-speed-down ((,class :foreground ,cyan-alt)))
+   `(mentor-download-speed-up ((,class :foreground ,red-alt)))
+   `(mentor-download-state ((,class :foreground ,yellow-alt)))
+   `(mentor-highlight-face ((,class :inherit modus-theme-subtle-blue)))
+   `(mentor-tracker-name ((,class :foreground ,magenta-alt)))
+;;;;; messages
+   `(message-cited-text-1 ((,class :foreground ,blue-alt)))
+   `(message-cited-text-2 ((,class :foreground ,red-alt)))
+   `(message-cited-text-3 ((,class :foreground ,green-alt)))
+   `(message-cited-text-4 ((,class :foreground ,magenta-alt)))
+   `(message-header-cc ((,class :foreground ,blue-alt)))
+   `(message-header-name ((,class :foreground ,green-alt-other)))
+   `(message-header-newsgroups ((,class :inherit bold :foreground ,blue)))
+   `(message-header-other ((,class :inherit bold :foreground ,cyan-alt-other)))
+   `(message-header-subject ((,class :inherit bold :foreground 
,magenta-alt-other)))
+   `(message-header-to ((,class :inherit bold :foreground ,magenta-alt)))
+   `(message-header-xheader ((,class :foreground ,blue-alt-other)))
+   `(message-mml ((,class :foreground ,green-alt)))
+   `(message-separator ((,class :background ,bg-active :foreground 
,fg-special-warm)))
+;;;;; minibuffer-line
+   `(minibuffer-line ((,class :foreground ,fg-main)))
+;;;;; minimap
+   `(minimap-active-region-background ((,class :background ,bg-active)))
+   `(minimap-current-line-face ((,class :background ,cyan-intense-bg 
:foreground ,fg-main)))
+;;;;; modeline
+   `(mode-line ((,class :box ,(modus-operandi-theme-modeline-box bg-active 
fg-alt t)
+                        ,@(modus-operandi-theme-modeline-props
+                           bg-active fg-dim
+                           bg-active fg-active))))
+   `(mode-line-buffer-id ((,class :inherit bold)))
+   `(mode-line-emphasis ((,class :inherit bold :foreground ,blue-active)))
+   `(mode-line-highlight ((,class :inherit modus-theme-active-blue :box 
(:line-width -1 :style pressed-button))))
+   `(mode-line-inactive ((,class :box ,(modus-operandi-theme-modeline-box 
bg-active bg-region)
+                                 ,@(modus-operandi-theme-modeline-props
+                                    bg-dim fg-inactive
+                                    bg-inactive fg-inactive))))
+;;;;; mood-line
+   `(mood-line-modified ((,class :foreground ,magenta-active)))
+   `(mood-line-status-error ((,class :inherit bold :foreground ,red-active)))
+   `(mood-line-status-info ((,class :foreground ,cyan-active)))
+   `(mood-line-status-neutral ((,class :foreground ,blue-active)))
+   `(mood-line-status-success ((,class :foreground ,green-active)))
+   `(mood-line-status-warning ((,class :inherit bold :foreground 
,yellow-active)))
+   `(mood-line-unimportant ((,class :foreground ,fg-inactive)))
+;;;;; mu4e
+   `(mu4e-attach-number-face ((,class :inherit bold :foreground ,cyan-alt)))
+   `(mu4e-cited-1-face ((,class :foreground ,blue-alt)))
+   `(mu4e-cited-2-face ((,class :foreground ,red-alt)))
+   `(mu4e-cited-3-face ((,class :foreground ,green-alt)))
+   `(mu4e-cited-4-face ((,class :foreground ,magenta-alt)))
+   `(mu4e-cited-5-face ((,class :foreground ,yellow-alt)))
+   `(mu4e-cited-6-face ((,class :foreground ,cyan-alt)))
+   `(mu4e-cited-7-face ((,class :foreground ,magenta)))
+   `(mu4e-compose-header-face ((,class :inherit mu4e-compose-separator-face)))
+   `(mu4e-compose-separator-face ((,class :background ,bg-active :foreground 
,fg-special-warm)))
+   `(mu4e-contact-face ((,class :inherit bold :foreground ,cyan-alt-other)))
+   `(mu4e-context-face ((,class :foreground ,blue-active)))
+   `(mu4e-draft-face ((,class :foreground ,magenta-alt)))
+   `(mu4e-flagged-face ((,class :foreground ,red-alt)))
+   `(mu4e-footer-face ((,class :foreground ,fg-special-cold :slant 
,modus-theme-slant)))
+   `(mu4e-forwarded-face ((,class :foreground ,magenta-alt-other)))
+   `(mu4e-header-face ((,class :foreground ,fg-alt)))
+   `(mu4e-header-highlight-face ((,class :inherit modus-theme-hl-line)))
+   `(mu4e-header-key-face ((,class :foreground ,cyan)))
+   `(mu4e-header-marks-face ((,class :inherit bold :foreground ,magenta-alt)))
+   `(mu4e-header-title-face ((,class :foreground ,fg-special-mild)))
+   `(mu4e-header-value-face ((,class :inherit bold :foreground 
,magenta-alt-other)))
+   `(mu4e-highlight-face ((,class :inherit bold :foreground ,blue-alt-other)))
+   `(mu4e-link-face ((,class :inherit link)))
+   `(mu4e-modeline-face ((,class :foreground ,magenta-active)))
+   `(mu4e-moved-face ((,class :foreground ,yellow :slant ,modus-theme-slant)))
+   `(mu4e-ok-face ((,class :inherit bold :foreground ,green)))
+   `(mu4e-region-code ((,class :inherit modus-theme-special-calm)))
+   `(mu4e-replied-face ((,class :foreground ,cyan-active)))
+   `(mu4e-special-header-value-face ((,class :inherit bold :foreground 
,blue-alt-other)))
+   `(mu4e-system-face ((,class :foreground ,fg-mark-del :slant 
,modus-theme-slant)))
+   `(mu4e-title-face ((,class :foreground ,fg-main)))
+   `(mu4e-trashed-face ((,class :foreground ,red)))
+   `(mu4e-unread-face ((,class :inherit bold :foreground ,fg-main)))
+   `(mu4e-url-number-face ((,class :inherit bold :foreground ,cyan-alt-other)))
+   `(mu4e-view-body-face ((,class :foreground ,fg-main)))
+   `(mu4e-warning-face ((,class :inherit warning)))
+;;;;; mu4e-conversation
+   `(mu4e-conversation-header ((,class :inherit modus-theme-special-cold)))
+   `(mu4e-conversation-sender-1 ((,class :foreground ,fg-special-warm)))
+   `(mu4e-conversation-sender-2 ((,class :foreground ,fg-special-cold)))
+   `(mu4e-conversation-sender-3 ((,class :foreground ,fg-special-mild)))
+   `(mu4e-conversation-sender-4 ((,class :foreground ,fg-alt)))
+   `(mu4e-conversation-sender-5 ((,class :foreground ,yellow-refine-fg)))
+   `(mu4e-conversation-sender-6 ((,class :foreground ,cyan-refine-fg)))
+   `(mu4e-conversation-sender-7 ((,class :foreground ,green-refine-fg)))
+   `(mu4e-conversation-sender-8 ((,class :foreground ,blue-refine-fg)))
+   `(mu4e-conversation-sender-me ((,class :foreground ,fg-main)))
+   `(mu4e-conversation-unread ((,class :inherit bold)))
+;;;;; multiple-cursors
+   `(mc/cursor-bar-face ((,class :height 1 :background ,fg-main)))
+   `(mc/cursor-face ((,class :inverse-video t)))
+   `(mc/region-face ((,class :inherit region)))
+;;;;; neotree
+   `(neo-banner-face ((,class :foreground ,magenta)))
+   `(neo-button-face ((,class :inherit button)))
+   `(neo-dir-link-face ((,class :inherit bold :foreground ,blue)))
+   `(neo-expand-btn-face ((,class :foreground ,cyan)))
+   `(neo-file-link-face ((,class :foreground ,fg-main)))
+   `(neo-header-face ((,class :inherit bold :foreground ,fg-main)))
+   `(neo-root-dir-face ((,class :inherit bold :foreground ,cyan-alt)))
+   `(neo-vc-added-face ((,class :foreground ,green)))
+   `(neo-vc-conflict-face ((,class :inherit bold :foreground ,red)))
+   `(neo-vc-default-face ((,class :foreground ,fg-main)))
+   `(neo-vc-edited-face ((,class :foreground ,yellow)))
+   `(neo-vc-ignored-face ((,class :foreground ,fg-inactive)))
+   `(neo-vc-missing-face ((,class :foreground ,red-alt)))
+   `(neo-vc-needs-merge-face ((,class :foreground ,magenta-alt)))
+   `(neo-vc-needs-update-face ((,class :underline t)))
+   `(neo-vc-removed-face ((,class :strike-through t)))
+   `(neo-vc-unlocked-changes-face ((,class :inherit modus-theme-refine-blue)))
+   `(neo-vc-up-to-date-face ((,class :foreground ,fg-alt)))
+   `(neo-vc-user-face ((,class :foreground ,magenta)))
+;;;;; no-emoji
+   `(no-emoji ((,class :foreground ,cyan)))
+;;;;; notmuch
+   `(notmuch-crypto-decryption ((,class :inherit modus-theme-refine-magenta)))
+   `(notmuch-crypto-part-header ((,class :foreground ,magenta-alt-other)))
+   `(notmuch-crypto-signature-bad ((,class :inherit modus-theme-intense-red)))
+   `(notmuch-crypto-signature-good ((,class :inherit 
modus-theme-refine-green)))
+   `(notmuch-crypto-signature-good-key ((,class :inherit 
modus-theme-refine-yellow)))
+   `(notmuch-crypto-signature-unknown ((,class :inherit 
modus-theme-refine-red)))
+   `(notmuch-hello-logo-background ((,class :background ,bg-main)))
+   `(notmuch-message-summary-face ((,class :inherit modus-theme-nuanced-cyan)))
+   `(notmuch-search-flagged-face ((,class :foreground ,red-alt)))
+   `(notmuch-search-matching-authors ((,class :foreground ,fg-main)))
+   `(notmuch-search-non-matching-authors ((,class :foreground ,fg-alt)))
+   `(notmuch-search-unread-face ((,class :inherit bold)))
+   `(notmuch-tag-added
+     ((,(append '((supports :underline (:style wave))) class)
+       :underline (:color ,green :style wave))
+      (,class :foreground ,green :underline t)))
+   `(notmuch-tag-deleted
+     ((,(append '((supports :underline (:style wave))) class)
+       :underline (:color ,red :style wave))
+      (,class :foreground ,red :underline t)))
+   `(notmuch-tag-face ((,class :inherit bold :foreground ,blue-alt)))
+   `(notmuch-tag-flagged ((,class :foreground ,red-alt)))
+   `(notmuch-tag-unread ((,class :foreground ,magenta-alt)))
+   `(notmuch-tree-match-author-face ((,class :foreground ,fg-special-cold)))
+   `(notmuch-tree-match-face ((,class :foreground ,fg-main)))
+   `(notmuch-tree-match-tag-face ((,class :inherit bold :foreground 
,blue-alt)))
+   `(notmuch-tree-no-match-face ((,class :foreground ,fg-alt)))
+   `(notmuch-wash-cited-text ((,class :foreground ,cyan)))
+   `(notmuch-wash-toggle-button ((,class :background ,bg-alt :foreground 
,fg-alt)))
+;;;;; num3-mode
+   `(num3-face-even ((,class :inherit bold :background ,bg-alt)))
+;;;;; nxml-mode
+   `(nxml-attribute-colon ((,class :foreground ,fg-main)))
+   `(nxml-attribute-local-name ((,class 
,@(modus-operandi-theme-syntax-foreground
+                                           cyan-alt cyan-alt-faint))))
+   `(nxml-attribute-prefix ((,class ,@(modus-operandi-theme-syntax-foreground
+                                       cyan-alt-other cyan-alt-other-faint)
+                                    ,@(modus-operandi-theme-bold-weight))))
+   `(nxml-attribute-value ((,class ,@(modus-operandi-theme-syntax-foreground
+                                      blue blue-faint))))
+   `(nxml-cdata-section-CDATA ((,class 
,@(modus-operandi-theme-syntax-foreground
+                                          red-alt red-alt-faint)
+                                       ,@(modus-operandi-theme-bold-weight))))
+   `(nxml-cdata-section-delimiter ((,class 
,@(modus-operandi-theme-syntax-foreground
+                                              red-alt red-alt-faint))))
+   `(nxml-char-ref-delimiter ((,class ,@(modus-operandi-theme-syntax-foreground
+                                         green-alt-other 
green-alt-other-faint))))
+   `(nxml-char-ref-number ((,class ,@(modus-operandi-theme-syntax-foreground
+                                      green-alt-other green-alt-other-faint)
+                                   ,@(modus-operandi-theme-bold-weight))))
+   `(nxml-delimited-data ((,class :foreground ,fg-special-cold :slant 
,modus-theme-slant)))
+   `(nxml-delimiter ((,class :foreground ,fg-dim)))
+   `(nxml-element-colon ((,class :foreground ,fg-main)))
+   `(nxml-element-local-name ((,class ,@(modus-operandi-theme-syntax-foreground
+                                         magenta magenta-faint))))
+   `(nxml-element-prefix ((,class ,@(modus-operandi-theme-syntax-foreground
+                                     magenta-alt magenta-alt-faint)
+                                  ,@(modus-operandi-theme-bold-weight))))
+   `(nxml-entity-ref-delimiter ((,class 
,@(modus-operandi-theme-syntax-foreground
+                                           green-alt-other 
green-alt-other-faint))))
+   `(nxml-entity-ref-name ((,class ,@(modus-operandi-theme-syntax-foreground
+                                      green-alt-other green-alt-other-faint)
+                                   ,@(modus-operandi-theme-bold-weight))))
+   `(nxml-glyph ((,class :inherit modus-theme-intense-neutral)))
+   `(nxml-hash ((,class ,@(modus-operandi-theme-syntax-foreground
+                           blue-alt blue-alt-faint)
+                        ,@(modus-operandi-theme-bold-weight))))
+   `(nxml-heading ((,class :inherit bold)))
+   `(nxml-name ((,class ,@(modus-operandi-theme-syntax-foreground
+                           magenta-alt magenta-alt-faint)
+                        ,@(modus-operandi-theme-bold-weight))))
+   `(nxml-namespace-attribute-colon ((,class :foreground ,fg-main)))
+   `(nxml-namespace-attribute-prefix ((,class 
,@(modus-operandi-theme-syntax-foreground
+                                                 cyan cyan-faint))))
+   `(nxml-processing-instruction-target ((,class 
,@(modus-operandi-theme-syntax-foreground
+                                                    magenta-alt-other 
magenta-alt-other-faint)
+                                                 
,@(modus-operandi-theme-bold-weight))))
+   `(nxml-prolog-keyword ((,class ,@(modus-operandi-theme-syntax-foreground
+                                     magenta-alt-other magenta-alt-other-faint)
+                                  ,@(modus-operandi-theme-bold-weight))))
+   `(nxml-ref ((,class ,@(modus-operandi-theme-syntax-foreground
+                          green-alt-other green-alt-other-faint)
+                       ,@(modus-operandi-theme-bold-weight))))
+;;;;; orderless
+   `(orderless-match-face-0 ((,class :inherit bold
+                                     
,@(modus-operandi-theme-standard-completions
+                                        blue-alt blue-nuanced-bg
+                                        blue-refine-bg blue-refine-fg))))
+   `(orderless-match-face-1 ((,class :inherit bold
+                                     
,@(modus-operandi-theme-standard-completions
+                                        magenta-alt magenta-nuanced-bg
+                                        magenta-refine-bg magenta-refine-fg))))
+   `(orderless-match-face-2 ((,class :inherit bold
+                                     
,@(modus-operandi-theme-standard-completions
+                                        green-alt-other green-nuanced-bg
+                                        green-refine-bg green-refine-fg))))
+   `(orderless-match-face-3 ((,class :inherit bold
+                                     
,@(modus-operandi-theme-standard-completions
+                                        yellow-alt-other yellow-nuanced-bg
+                                        yellow-refine-bg yellow-refine-fg))))
+;;;;; org
+   `(org-agenda-calendar-event ((,class :foreground ,fg-main)))
+   `(org-agenda-calendar-sexp ((,class :foreground ,cyan-alt)))
+   `(org-agenda-clocking ((,class :inherit modus-theme-special-cold)))
+   `(org-agenda-column-dateline ((,class :background ,bg-alt)))
+   `(org-agenda-current-time ((,class :inherit modus-theme-subtle-cyan)))
+   `(org-agenda-date ((,class :inherit ,modus-theme-variable-pitch :foreground 
,cyan-alt-other
+                              ,@(modus-operandi-theme-scale 
modus-operandi-theme-scale-4)
+                              ,@(modus-operandi-theme-heading-block 
cyan-nuanced-bg cyan-nuanced))))
+   `(org-agenda-date-today ((,class :inherit (bold ,modus-theme-variable-pitch)
+                                    :background ,cyan-intense-bg :foreground 
,fg-main
+                                    ,@(modus-operandi-theme-scale 
modus-operandi-theme-scale-4))))
+   `(org-agenda-date-weekend ((,class :inherit ,modus-theme-variable-pitch 
:foreground ,cyan
+                                      ,@(modus-operandi-theme-scale 
modus-operandi-theme-scale-4)
+                                      ,@(modus-operandi-theme-heading-block 
blue-nuanced-bg cyan-nuanced))))
+   `(org-agenda-diary ((,class :foreground ,fg-main)))
+   `(org-agenda-dimmed-todo-face ((,class :inherit 
modus-theme-subtle-neutral)))
+   `(org-agenda-done ((,class ,@(modus-operandi-theme-org-todo-block 
green-nuanced-bg green-nuanced green))))
+   `(org-agenda-filter-category ((,class :inherit bold :foreground 
,magenta-active)))
+   `(org-agenda-filter-effort ((,class :inherit bold :foreground 
,magenta-active)))
+   `(org-agenda-filter-regexp ((,class :inherit bold :foreground 
,magenta-active)))
+   `(org-agenda-filter-tags ((,class :inherit bold :foreground 
,magenta-active)))
+   `(org-agenda-restriction-lock ((,class :background ,bg-dim :foreground 
,fg-dim)))
+   `(org-agenda-structure ((,class :inherit ,modus-theme-variable-pitch
+                                   :foreground ,fg-special-mild
+                                   ,@(modus-operandi-theme-scale 
modus-operandi-theme-scale-3))))
+   `(org-archived ((,class :background ,bg-alt :foreground ,fg-alt)))
+   `(org-block ((,class ,@(modus-operandi-theme-org-block bg-dim)
+                        :inherit fixed-pitch :foreground ,fg-main)))
+   `(org-block-begin-line ((,class ,@(modus-operandi-theme-org-block-delim
+                                      bg-dim fg-special-cold
+                                      bg-alt fg-special-mild)
+                                   :inherit fixed-pitch)))
+   `(org-block-end-line ((,class :inherit org-block-begin-line)))
+   `(org-checkbox ((,class :box (:line-width 1 :color ,bg-active)
+                           :background ,bg-inactive :foreground ,fg-active)))
+   `(org-checkbox-statistics-done ((,class :foreground ,green
+                                           
,@(modus-operandi-theme-heading-block
+                                              green-nuanced-bg 
green-nuanced))))
+   `(org-checkbox-statistics-todo ((,class 
,@(modus-operandi-theme-heading-foreground red-alt red)
+                                           
,@(modus-operandi-theme-heading-block
+                                              red-nuanced-bg red-nuanced))))
+   `(org-clock-overlay ((,class :inherit modus-theme-special-cold)))
+   `(org-code ((,class :inherit fixed-pitch :foreground ,magenta)))
+   `(org-column ((,class :background ,bg-alt)))
+   `(org-column-title ((,class :inherit bold :underline t :background 
,bg-alt)))
+   `(org-date ((,class :inherit fixed-pitch :foreground ,cyan-alt-other 
:underline t)))
+   `(org-date-selected ((,class :inherit bold :foreground ,blue-alt 
:inverse-video t)))
+   `(org-default ((,class :background ,bg-main :foreground ,fg-main)))
+   `(org-document-info ((,class :foreground ,fg-special-cold)))
+   `(org-document-info-keyword ((,class :inherit fixed-pitch :foreground 
,fg-alt)))
+   `(org-document-title ((,class :inherit (bold ,modus-theme-variable-pitch) 
:foreground ,fg-special-cold
+                                 ,@(modus-operandi-theme-scale 
modus-operandi-theme-scale-5))))
+   `(org-done ((,class ,@(modus-operandi-theme-org-todo-block green-nuanced-bg 
green-nuanced green))))
+   `(org-drawer ((,class :foreground ,cyan-alt)))
+   `(org-ellipsis ((,class :foreground nil))) ; inherits from the heading's 
colour
+   `(org-footnote ((,class :foreground ,blue-alt :underline t)))
+   `(org-formula ((,class :inherit fixed-pitch :foreground ,red-alt)))
+   `(org-habit-alert-face ((,class :inherit modus-theme-intense-yellow)))
+   `(org-habit-alert-future-face ((,class :inherit modus-theme-refine-yellow)))
+   `(org-habit-clear-face ((,class :inherit modus-theme-intense-magenta)))
+   `(org-habit-clear-future-face ((,class :inherit 
modus-theme-refine-magenta)))
+   `(org-habit-overdue-face ((,class :inherit modus-theme-intense-red)))
+   `(org-habit-overdue-future-face ((,class :inherit modus-theme-refine-red)))
+   `(org-habit-ready-face ((,class :inherit modus-theme-intense-blue)))
+   `(org-habit-ready-future-face ((,class :inherit modus-theme-refine-blue)))
+   `(org-headline-done ((,class :foreground ,green-nuanced
+                                ,@(modus-operandi-theme-heading-block
+                                   green-nuanced-bg green-nuanced))))
+   `(org-hide ((,class :foreground ,bg-main)))
+   `(org-indent ((,class :inherit (fixed-pitch org-hide))))
+   `(org-latex-and-related ((,class :foreground ,magenta-refine-fg)))
+   `(org-level-1 ((,class :inherit (bold ,modus-theme-variable-pitch)
+                          ,@(modus-operandi-theme-heading-foreground fg-main 
magenta-alt-other)
+                          ,@(modus-operandi-theme-scale 
modus-operandi-theme-scale-4)
+                          ,@(modus-operandi-theme-heading-block 
magenta-nuanced-bg magenta-nuanced))))
+   `(org-level-2 ((,class :inherit (bold ,modus-theme-variable-pitch)
+                          ,@(modus-operandi-theme-heading-foreground 
fg-special-warm magenta-alt)
+                          ,@(modus-operandi-theme-scale 
modus-operandi-theme-scale-3)
+                          ,@(modus-operandi-theme-heading-block red-nuanced-bg 
red-nuanced))))
+   `(org-level-3 ((,class :inherit (bold ,modus-theme-variable-pitch)
+                          ,@(modus-operandi-theme-heading-foreground 
fg-special-cold blue)
+                          ,@(modus-operandi-theme-scale 
modus-operandi-theme-scale-2)
+                          ,@(modus-operandi-theme-heading-block 
blue-nuanced-bg blue-nuanced))))
+   `(org-level-4 ((,class :inherit (bold ,modus-theme-variable-pitch)
+                          ,@(modus-operandi-theme-heading-foreground 
fg-special-mild cyan)
+                          ,@(modus-operandi-theme-scale 
modus-operandi-theme-scale-1)
+                          ,@(modus-operandi-theme-heading-block 
cyan-nuanced-bg cyan-nuanced))))
+   `(org-level-5 ((,class :inherit (bold ,modus-theme-variable-pitch)
+                          ,@(modus-operandi-theme-heading-foreground 
fg-special-calm green-alt-other)
+                          ,@(modus-operandi-theme-heading-block 
green-nuanced-bg green-nuanced))))
+   `(org-level-6 ((,class :inherit (bold ,modus-theme-variable-pitch)
+                          ,@(modus-operandi-theme-heading-foreground 
yellow-nuanced yellow-alt-other)
+                          ,@(modus-operandi-theme-heading-block 
yellow-nuanced-bg yellow-nuanced))))
+   `(org-level-7 ((,class :inherit (bold ,modus-theme-variable-pitch)
+                          ,@(modus-operandi-theme-heading-foreground 
red-nuanced red-alt)
+                          ,@(modus-operandi-theme-heading-block red-nuanced-bg 
red-nuanced))))
+   `(org-level-8 ((,class :inherit (bold ,modus-theme-variable-pitch)
+                          ,@(modus-operandi-theme-heading-foreground fg-dim 
magenta)
+                          ,@(modus-operandi-theme-heading-block bg-alt 
fg-alt))))
+   `(org-link ((,class :inherit link)))
+   `(org-list-dt ((,class :inherit bold)))
+   `(org-macro ((,class :inherit org-latex-and-related)))
+   `(org-meta-line ((,class :inherit fixed-pitch :background ,cyan-nuanced-bg 
:foreground ,cyan-nuanced)))
+   `(org-mode-line-clock ((,class :foreground ,fg-main)))
+   `(org-mode-line-clock-overrun ((,class :inherit modus-theme-active-red)))
+   `(org-priority ((,class ,@(modus-operandi-theme-org-todo-block 
magenta-nuanced-bg magenta-nuanced magenta)
+                           ,@(modus-operandi-theme-heading-foreground magenta 
magenta-alt-other))))
+   `(org-quote ((,class ,@(if modus-operandi-theme-org-blocks
+                              (append
+                               (and (>= emacs-major-version 27) '(:extend t))
+                               (list :background bg-dim))
+                            (list :background nil))
+                        :foreground ,fg-special-calm :slant 
,modus-theme-slant)))
+   `(org-scheduled ((,class :foreground ,fg-special-warm)))
+   `(org-scheduled-previously ((,class :foreground ,yellow-alt-other)))
+   `(org-scheduled-today ((,class :foreground ,magenta-alt-other)))
+   `(org-sexp-date ((,class :inherit org-date)))
+   `(org-special-keyword ((,class ,@(modus-operandi-theme-org-todo-block 
cyan-nuanced-bg cyan-nuanced cyan-alt))))
+   `(org-table ((,class :inherit fixed-pitch :foreground ,fg-special-cold)))
+   `(org-tag ((,class ,@(modus-operandi-theme-bold-weight) :foreground 
,magenta-nuanced)))
+   `(org-tag-group ((,class :inherit bold :foreground ,cyan-nuanced)))
+   `(org-target ((,class :underline t)))
+   `(org-time-grid ((,class :foreground ,fg-unfocused)))
+   `(org-todo ((,class ,@(modus-operandi-theme-org-todo-block red-nuanced-bg 
red-nuanced red-alt)
+                       ,@(modus-operandi-theme-heading-foreground red-alt 
red))))
+   `(org-upcoming-deadline ((,class :foreground ,red-alt-other)))
+   `(org-upcoming-distant-deadline ((,class :foreground ,red-nuanced)))
+   `(org-verbatim ((,class :inherit fixed-pitch :background ,bg-alt 
:foreground ,fg-special-calm)))
+   `(org-verse ((,class :inherit org-quote)))
+   `(org-warning ((,class :inherit bold :foreground ,red-alt-other)))
+;;;;; org-journal
+   `(org-journal-calendar-entry-face ((,class :foreground ,yellow-alt-other 
:slant ,modus-theme-slant)))
+   `(org-journal-calendar-scheduled-face ((,class :foreground ,red-alt-other 
:slant ,modus-theme-slant)))
+   `(org-journal-highlight ((,class :foreground ,magenta-alt)))
+;;;;; org-noter
+   `(org-noter-no-notes-exist-face ((,class :inherit bold :foreground 
,red-active)))
+   `(org-noter-notes-exist-face ((,class :inherit bold :foreground 
,green-active)))
+;;;;; org-pomodoro
+   `(org-pomodoro-mode-line ((,class :foreground ,red-active)))
+   `(org-pomodoro-mode-line-break ((,class :foreground ,cyan-active)))
+   `(org-pomodoro-mode-line-overtime ((,class :inherit bold :foreground 
,red-active)))
+;;;;; org-recur
+   `(org-recur ((,class :foreground ,magenta-active)))
+;;;;; org-roam
+   `(org-roam-link ((,class :foreground ,blue-alt-other :underline t)))
+   `(org-roam-backlink ((,class :foreground ,green-alt-other :underline t)))
+;;;;; org-superstar
+   `(org-superstar-item ((,class :foreground ,fg-main)))
+   `(org-superstar-leading ((,class :foreground ,fg-whitespace)))
+;;;;; org-table-sticky-header
+   `(org-table-sticky-header-face ((,class :inherit 
modus-theme-intense-neutral)))
+;;;;; org-treescope
+   `(org-treescope-faces--markerinternal-midday ((,class :inherit 
modus-theme-intense-blue)))
+   `(org-treescope-faces--markerinternal-range ((,class :inherit 
modus-theme-special-mild)))
+;;;;; origami
+   `(origami-fold-header-face ((,class :background ,bg-dim :foreground ,fg-dim 
:box t)))
+   `(origami-fold-replacement-face ((,class :background ,bg-alt :foreground 
,fg-alt)))
+;;;;; outline-mode
+   `(outline-1 ((,class :inherit (bold ,modus-theme-variable-pitch)
+                        ,@(modus-operandi-theme-heading-foreground fg-main 
magenta-alt-other)
+                        ,@(modus-operandi-theme-scale 
modus-operandi-theme-scale-4)
+                        ,@(modus-operandi-theme-heading-block 
magenta-nuanced-bg magenta-nuanced))))
+   `(outline-2 ((,class :inherit (bold ,modus-theme-variable-pitch)
+                        ,@(modus-operandi-theme-heading-foreground 
fg-special-warm magenta-alt)
+                        ,@(modus-operandi-theme-scale 
modus-operandi-theme-scale-3)
+                        ,@(modus-operandi-theme-heading-block red-nuanced-bg 
red-nuanced))))
+   `(outline-3 ((,class :inherit (bold ,modus-theme-variable-pitch)
+                        ,@(modus-operandi-theme-heading-foreground 
fg-special-cold blue)
+                        ,@(modus-operandi-theme-scale 
modus-operandi-theme-scale-2)
+                        ,@(modus-operandi-theme-heading-block blue-nuanced-bg 
blue-nuanced))))
+   `(outline-4 ((,class :inherit (bold ,modus-theme-variable-pitch)
+                        ,@(modus-operandi-theme-heading-foreground 
fg-special-mild cyan)
+                        ,@(modus-operandi-theme-scale 
modus-operandi-theme-scale-1)
+                        ,@(modus-operandi-theme-heading-block cyan-nuanced-bg 
cyan-nuanced))))
+   `(outline-5 ((,class :inherit (bold ,modus-theme-variable-pitch)
+                        ,@(modus-operandi-theme-heading-foreground 
fg-special-calm green-alt-other)
+                        ,@(modus-operandi-theme-heading-block green-nuanced-bg 
green-nuanced))))
+   `(outline-6 ((,class :inherit (bold ,modus-theme-variable-pitch)
+                        ,@(modus-operandi-theme-heading-foreground 
yellow-nuanced yellow-alt-other)
+                        ,@(modus-operandi-theme-heading-block 
yellow-nuanced-bg yellow-nuanced))))
+   `(outline-7 ((,class :inherit (bold ,modus-theme-variable-pitch)
+                        ,@(modus-operandi-theme-heading-foreground red-nuanced 
red-alt)
+                        ,@(modus-operandi-theme-heading-block red-nuanced-bg 
red-nuanced))))
+   `(outline-8 ((,class :inherit (bold ,modus-theme-variable-pitch)
+                        ,@(modus-operandi-theme-heading-foreground fg-dim 
magenta)
+                        ,@(modus-operandi-theme-heading-block bg-alt fg-alt))))
+;;;;; outline-minor-faces
+   `(outline-minor-0 ((,class ,@(unless modus-operandi-theme-section-headings
+                                  (list :background cyan-nuanced-bg)))))
+;;;;; package (M-x list-packages)
+   `(package-description ((,class :foreground ,fg-special-cold)))
+   `(package-help-section-name ((,class :inherit bold :foreground 
,magenta-alt-other)))
+   `(package-name ((,class :inherit link)))
+   `(package-status-avail-obso ((,class :inherit bold :foreground ,red)))
+   `(package-status-available ((,class :foreground ,fg-special-mild)))
+   `(package-status-built-in ((,class :foreground ,magenta)))
+   `(package-status-dependency ((,class :foreground ,magenta-alt-other)))
+   `(package-status-disabled ((,class :inherit modus-theme-subtle-red)))
+   `(package-status-external ((,class :foreground ,cyan-alt-other)))
+   `(package-status-held ((,class :foreground ,yellow-alt)))
+   `(package-status-incompat ((,class :inherit bold :foreground ,yellow)))
+   `(package-status-installed ((,class :foreground ,fg-special-warm)))
+   `(package-status-new ((,class :inherit bold :foreground ,green)))
+   `(package-status-unsigned ((,class :inherit bold :foreground ,red-alt)))
+;;;;; page-break-lines
+   `(page-break-lines ((,class :inherit default :foreground 
,fg-window-divider-outer)))
+;;;;; paradox
+   `(paradox-archive-face ((,class :foreground ,fg-special-mild)))
+   `(paradox-comment-face ((,class :foreground ,fg-alt :slant 
,modus-theme-slant)))
+   `(paradox-commit-tag-face ((,class :inherit modus-theme-refine-magenta :box 
t)))
+   `(paradox-description-face ((,class :foreground ,fg-special-cold)))
+   `(paradox-description-face-multiline ((,class :foreground 
,fg-special-cold)))
+   `(paradox-download-face ((,class ,@(modus-operandi-theme-bold-weight) 
:foreground ,blue-alt-other)))
+   `(paradox-highlight-face ((,class ,@(modus-operandi-theme-bold-weight) 
:foreground ,cyan-alt-other)))
+   `(paradox-homepage-button-face ((,class :foreground ,magenta-alt-other 
:underline t)))
+   `(paradox-mode-line-face ((,class :inherit bold :foreground ,cyan-active)))
+   `(paradox-name-face ((,class :foreground ,blue :underline t)))
+   `(paradox-star-face ((,class :foreground ,magenta)))
+   `(paradox-starred-face ((,class :foreground ,magenta-alt)))
+;;;;; paren-face
+   `(parenthesis ((,class :foreground ,fg-unfocused)))
+;;;;; parrot
+   `(parrot-rotate-rotation-highlight-face ((,class :inherit 
modus-theme-refine-magenta)))
+;;;;; pass
+   `(pass-mode-directory-face ((,class :inherit bold :foreground 
,fg-special-cold)))
+   `(pass-mode-entry-face ((,class :background ,bg-main :foreground ,fg-main)))
+   `(pass-mode-header-face ((,class :foreground ,fg-special-warm)))
+;;;;; persp-mode
+   `(persp-face-lighter-buffer-not-in-persp ((,class :inherit 
modus-theme-intense-red)))
+   `(persp-face-lighter-default ((,class :inherit bold :foreground 
,blue-active)))
+   `(persp-face-lighter-nil-persp ((,class :inherit bold :foreground 
,fg-active)))
+;;;;; perspective
+   `(persp-selected-face ((,class :inherit bold :foreground ,blue-active)))
+;;;;; phi-grep
+   `(phi-grep-heading-face  ((,class :inherit bold :foreground ,red-alt
+                                     ,@(modus-operandi-theme-scale 
modus-operandi-theme-scale-4))))
+   `(phi-grep-line-number-face ((,class :foreground ,fg-special-warm)))
+   `(phi-grep-match-face ((,class :inherit modus-theme-special-calm)))
+   `(phi-grep-modified-face ((,class :inherit modus-theme-refine-yellow)))
+   `(phi-grep-overlay-face ((,class :inherit modus-theme-refine-blue)))
+;;;;; phi-search
+   `(phi-replace-preview-face ((,class :inherit modus-theme-intense-magenta)))
+   `(phi-search-failpart-face ((,class :inherit modus-theme-refine-red)))
+   `(phi-search-match-face ((,class :inherit modus-theme-refine-cyan)))
+   `(phi-search-selection-face ((,class :inherit (modus-theme-intense-green 
bold))))
+;;;;; pkgbuild-mode
+   `(pkgbuild-error-face ((,class :underline ,fg-lang-error)))
+;;;;; pomidor
+   `(pomidor-break-face ((,class :foreground ,blue-alt-other)))
+   `(pomidor-overwork-face ((,class :foreground ,red-alt-other)))
+   `(pomidor-skip-face ((,class :foreground ,fg-alt :slant 
,modus-theme-slant)))
+   `(pomidor-work-face ((,class :foreground ,green-alt-other)))
+;;;;; powerline
+   `(powerline-active0 ((,class :background ,bg-main :foreground ,blue-faint 
:inverse-video t)))
+   `(powerline-active1 ((,class :background ,blue-nuanced-bg :foreground 
,blue-nuanced)))
+   `(powerline-active2 ((,class :background ,bg-active :foreground 
,fg-active)))
+   `(powerline-inactive0 ((,class :background ,bg-special-cold :foreground 
,fg-special-cold)))
+   `(powerline-inactive1 ((,class :background ,bg-dim :foreground 
,fg-inactive)))
+   `(powerline-inactive2 ((,class :background ,bg-inactive :foreground 
,fg-inactive)))
+;;;;; powerline-evil
+   `(powerline-evil-base-face ((,class :background ,fg-main :foreground 
,bg-main)))
+   `(powerline-evil-emacs-face ((,class :inherit modus-theme-active-magenta)))
+   `(powerline-evil-insert-face ((,class :inherit modus-theme-active-green)))
+   `(powerline-evil-motion-face ((,class :inherit modus-theme-active-blue)))
+   `(powerline-evil-normal-face ((,class :background ,fg-alt :foreground 
,bg-main)))
+   `(powerline-evil-operator-face ((,class :inherit 
modus-theme-active-yellow)))
+   `(powerline-evil-replace-face ((,class :inherit modus-theme-active-red)))
+   `(powerline-evil-visual-face ((,class :inherit modus-theme-active-cyan)))
+;;;;; proced
+   `(proced-mark ((,class :inherit modus-theme-mark-symbol)))
+   `(proced-marked ((,class :inherit modus-theme-mark-alt)))
+   `(proced-sort-header ((,class :inherit bold :foreground ,fg-special-calm 
:underline t)))
+;;;;; prodigy
+   `(prodigy-green-face ((,class :foreground ,green)))
+   `(prodigy-red-face ((,class :foreground ,red)))
+   `(prodigy-yellow-face ((,class :foreground ,yellow)))
+;;;;; rainbow-blocks
+   `(rainbow-blocks-depth-1-face ((,class :foreground ,magenta-alt-other)))
+   `(rainbow-blocks-depth-2-face ((,class :foreground ,blue)))
+   `(rainbow-blocks-depth-3-face ((,class :foreground ,magenta-alt)))
+   `(rainbow-blocks-depth-4-face ((,class :foreground ,green)))
+   `(rainbow-blocks-depth-5-face ((,class :foreground ,magenta)))
+   `(rainbow-blocks-depth-6-face ((,class :foreground ,cyan)))
+   `(rainbow-blocks-depth-7-face ((,class :foreground ,yellow)))
+   `(rainbow-blocks-depth-8-face ((,class :foreground ,cyan-alt)))
+   `(rainbow-blocks-depth-9-face ((,class :foreground ,red-alt)))
+   `(rainbow-blocks-unmatched-face ((,class :foreground ,red)))
+;;;;; rainbow-identifiers
+   `(rainbow-identifiers-identifier-1 ((,class :foreground ,green-alt-other)))
+   `(rainbow-identifiers-identifier-2 ((,class :foreground 
,magenta-alt-other)))
+   `(rainbow-identifiers-identifier-3 ((,class :foreground ,cyan-alt-other)))
+   `(rainbow-identifiers-identifier-4 ((,class :foreground ,yellow-alt-other)))
+   `(rainbow-identifiers-identifier-5 ((,class :foreground ,blue-alt-other)))
+   `(rainbow-identifiers-identifier-6 ((,class :foreground ,green-alt)))
+   `(rainbow-identifiers-identifier-7 ((,class :foreground ,magenta-alt)))
+   `(rainbow-identifiers-identifier-8 ((,class :foreground ,cyan-alt)))
+   `(rainbow-identifiers-identifier-9 ((,class :foreground ,yellow-alt)))
+   `(rainbow-identifiers-identifier-10 ((,class :foreground ,green)))
+   `(rainbow-identifiers-identifier-11 ((,class :foreground ,magenta)))
+   `(rainbow-identifiers-identifier-12 ((,class :foreground ,cyan)))
+   `(rainbow-identifiers-identifier-13 ((,class :foreground ,yellow)))
+   `(rainbow-identifiers-identifier-14 ((,class :foreground ,blue-alt)))
+   `(rainbow-identifiers-identifier-15 ((,class :foreground ,red-alt)))
+;;;;; rainbow-delimiters
+   `(rainbow-delimiters-base-face-error ((,class :foreground ,red)))
+   `(rainbow-delimiters-base-face ((,class :foreground ,fg-main)))
+   `(rainbow-delimiters-depth-1-face ((,class :foreground ,green-alt-other)))
+   `(rainbow-delimiters-depth-2-face ((,class :foreground ,magenta-alt-other)))
+   `(rainbow-delimiters-depth-3-face ((,class :foreground ,cyan-alt-other)))
+   `(rainbow-delimiters-depth-4-face ((,class :foreground ,yellow-alt-other)))
+   `(rainbow-delimiters-depth-5-face ((,class :foreground ,blue-alt-other)))
+   `(rainbow-delimiters-depth-6-face ((,class :foreground ,green-alt)))
+   `(rainbow-delimiters-depth-7-face ((,class :foreground ,magenta-alt)))
+   `(rainbow-delimiters-depth-8-face ((,class :foreground ,cyan-alt)))
+   `(rainbow-delimiters-depth-9-face ((,class :foreground ,yellow-alt)))
+   `(rainbow-delimiters-mismatched-face ((,class :inherit bold :foreground 
,red-alt)))
+   `(rainbow-delimiters-unmatched-face ((,class :inherit bold :foreground 
,red)))
+;;;;; rcirc
+   `(rcirc-bright-nick ((,class :inherit bold :foreground ,magenta-alt)))
+   `(rcirc-dim-nick ((,class :foreground ,fg-alt)))
+   `(rcirc-my-nick ((,class :inherit bold :foreground ,magenta)))
+   `(rcirc-nick-in-message ((,class :foreground ,magenta-alt-other)))
+   `(rcirc-nick-in-message-full-line ((,class :inherit bold :foreground 
,fg-special-mild)))
+   `(rcirc-other-nick ((,class :inherit bold :foreground ,fg-special-cold)))
+   `(rcirc-prompt ((,class :inherit bold :foreground ,cyan-alt-other)))
+   `(rcirc-server ((,class :foreground ,fg-unfocused)))
+   `(rcirc-timestamp ((,class :foreground ,blue-nuanced)))
+   `(rcirc-url ((,class :foreground ,blue :underline t)))
+;;;;; regexp-builder (re-builder)
+   `(reb-match-0 ((,class :inherit modus-theme-intense-blue)))
+   `(reb-match-1 ((,class :inherit modus-theme-intense-magenta)))
+   `(reb-match-2 ((,class :inherit modus-theme-intense-green)))
+   `(reb-match-3 ((,class :inherit modus-theme-intense-red)))
+   `(reb-regexp-grouping-backslash ((,class :inherit bold :foreground 
,fg-escape-char-backslash)))
+   `(reb-regexp-grouping-construct ((,class :inherit bold :foreground 
,fg-escape-char-construct)))
+;;;;; rg (rg.el)
+   `(rg-column-number-face ((,class :foreground ,magenta-alt-other)))
+   `(rg-context-face ((,class :foreground ,fg-unfocused)))
+   `(rg-error-face ((,class :inherit bold :foreground ,red)))
+   `(rg-file-tag-face ((,class :foreground ,fg-special-cold)))
+   `(rg-filename-face ((,class :inherit bold :foreground ,fg-special-cold)))
+   `(rg-line-number-face ((,class :foreground ,fg-special-warm)))
+   `(rg-literal-face ((,class :foreground ,blue-alt)))
+   `(rg-match-face ((,class :inherit modus-theme-special-calm)))
+   `(rg-regexp-face ((,class :foreground ,magenta-active)))
+   `(rg-toggle-off-face ((,class :inherit bold :foreground ,fg-inactive)))
+   `(rg-toggle-on-face ((,class :inherit bold :foreground ,cyan-active)))
+   `(rg-warning-face ((,class :inherit bold :foreground ,yellow)))
+;;;;; ripgrep
+   `(ripgrep-context-face ((,class :foreground ,fg-unfocused)))
+   `(ripgrep-error-face ((,class :inherit bold :foreground ,red)))
+   `(ripgrep-hit-face ((,class :foreground ,cyan)))
+   `(ripgrep-match-face ((,class :inherit modus-theme-special-calm)))
+;;;;; rmail
+   `(rmail-header-name ((,class :foreground ,cyan-alt-other)))
+   `(rmail-highlight ((,class :inherit bold :foreground ,magenta-alt)))
+;;;;; ruler-mode
+   `(ruler-mode-column-number ((,class :inherit (ruler-mode-default bold) 
:foreground ,fg-main)))
+   `(ruler-mode-comment-column ((,class :inherit ruler-mode-default 
:foreground ,red-active)))
+   `(ruler-mode-current-column ((,class :inherit ruler-mode-default 
:foreground ,cyan-active :box t)))
+   `(ruler-mode-default ((,class :background ,bg-inactive :foreground 
,fg-inactive)))
+   `(ruler-mode-fill-column ((,class :inherit ruler-mode-default :foreground 
,green-active)))
+   `(ruler-mode-fringes ((,class :inherit ruler-mode-default :foreground 
,blue-active)))
+   `(ruler-mode-goal-column ((,class :inherit ruler-mode-default :foreground 
,magenta-active)))
+   `(ruler-mode-margins ((,class :inherit ruler-mode-default :foreground 
,bg-main)))
+   `(ruler-mode-pad ((,class :background ,bg-active :foreground ,fg-inactive)))
+   `(ruler-mode-tab-stop ((,class :inherit ruler-mode-default :foreground 
,yellow-active)))
+;;;;; sallet
+   `(sallet-buffer-compressed ((,class :foreground ,yellow-nuanced :slant 
italic)))
+   `(sallet-buffer-default-directory ((,class :foreground ,cyan-nuanced)))
+   `(sallet-buffer-directory ((,class :foreground ,blue-nuanced)))
+   `(sallet-buffer-help ((,class :foreground ,fg-special-cold)))
+   `(sallet-buffer-modified ((,class :foreground ,yellow-alt-other :slant 
italic)))
+   `(sallet-buffer-ordinary ((,class :foreground ,fg-main)))
+   `(sallet-buffer-read-only ((,class :foreground ,yellow-alt)))
+   `(sallet-buffer-size ((,class :foreground ,fg-special-calm)))
+   `(sallet-buffer-special ((,class :foreground ,magenta-alt-other)))
+   `(sallet-flx-match ((,class ,@(modus-operandi-theme-extra-completions
+                                  'modus-theme-subtle-cyan
+                                  'modus-theme-refine-cyan
+                                  'modus-theme-nuanced-cyan
+                                  cyan-alt-other))))
+   `(sallet-recentf-buffer-name ((,class :foreground ,blue-nuanced)))
+   `(sallet-recentf-file-path ((,class :foreground ,fg-special-mild)))
+   `(sallet-regexp-match ((,class ,@(modus-operandi-theme-extra-completions
+                                     'modus-theme-subtle-magenta
+                                     'modus-theme-refine-magenta
+                                     'modus-theme-nuanced-magenta
+                                     magenta-alt-other))))
+   `(sallet-source-header ((,class :inherit bold :foreground ,red-alt
+                                   ,@(modus-operandi-theme-scale 
modus-operandi-theme-scale-4))))
+   `(sallet-substring-match ((,class ,@(modus-operandi-theme-extra-completions
+                                        'modus-theme-subtle-blue
+                                        'modus-theme-refine-blue
+                                        'modus-theme-nuanced-blue
+                                        blue-alt-other))))
+;;;;; selectrum
+   `(selectrum-current-candidate ((,class 
,@(modus-operandi-theme-extra-completions
+                                             'modus-theme-refine-magenta
+                                             'modus-theme-intense-magenta
+                                             'modus-theme-nuanced-magenta
+                                             magenta
+                                             'bold))))
+   `(selectrum-primary-highlight ((,class 
,@(modus-operandi-theme-extra-completions
+                                             'modus-theme-refine-blue
+                                             'modus-theme-intense-blue
+                                             'modus-theme-nuanced-blue
+                                             blue
+                                             'bold))))
+   `(selectrum-secondary-highlight ((,class 
,@(modus-operandi-theme-extra-completions
+                                               'modus-theme-refine-cyan
+                                               'modus-theme-intense-cyan
+                                               'modus-theme-nuanced-cyan
+                                               cyan
+                                               'bold))))
+;;;;; semantic
+   `(semantic-complete-inline-face ((,class :foreground ,fg-special-warm 
:underline t)))
+   `(semantic-decoration-on-private-members-face ((,class :inherit 
modus-theme-refine-cyan)))
+   `(semantic-decoration-on-protected-members-face ((,class :background 
,bg-dim)))
+   `(semantic-highlight-edits-face ((,class :background ,bg-alt)))
+   `(semantic-highlight-func-current-tag-face ((,class :background ,bg-alt)))
+   `(semantic-idle-symbol-highlight ((,class :inherit 
modus-theme-special-mild)))
+   `(semantic-tag-boundary-face ((,class :overline ,blue-intense)))
+   `(semantic-unmatched-syntax-face ((,class :underline ,fg-lang-error)))
+;;;;; sesman
+   `(sesman-browser-button-face ((,class :foreground ,blue-alt-other 
:underline t)))
+   `(sesman-browser-highligh-face ((,class :inherit modus-theme-subtle-blue)))
+   `(sesman-buffer-face ((,class :foreground ,magenta)))
+   `(sesman-directory-face ((,class :inherit bold :foreground ,blue)))
+   `(sesman-project-face ((,class :inherit bold :foreground 
,magenta-alt-other)))
+;;;;; shell-script-mode
+   `(sh-heredoc ((,class :foreground ,blue-alt)))
+   `(sh-quoted-exec ((,class ,@(modus-operandi-theme-bold-weight) :foreground 
,magenta-alt)))
+;;;;; show-paren-mode
+   `(show-paren-match ((,class ,@(modus-operandi-theme-paren bg-paren-match
+                                                             
bg-paren-match-intense)
+                               :foreground ,fg-main)))
+   `(show-paren-match-expression ((,class :inherit modus-theme-special-calm)))
+   `(show-paren-mismatch ((,class :inherit modus-theme-intense-red)))
+;;;;; side-notes
+   `(side-notes ((,class :background ,bg-dim :foreground ,fg-dim)))
+;;;;; skewer-mode
+   `(skewer-error-face ((,class :foreground ,red :underline t)))
+;;;;; smart-mode-line
+   `(sml/charging ((,class :foreground ,green-active)))
+   `(sml/discharging ((,class :foreground ,red-active)))
+   `(sml/filename ((,class :inherit bold :foreground ,blue-active)))
+   `(sml/folder ((,class :foreground ,fg-active)))
+   `(sml/git ((,class :inherit bold :foreground ,green-active)))
+   `(sml/global ((,class :foreground ,fg-active)))
+   `(sml/line-number ((,class :inherit sml/global)))
+   `(sml/minor-modes ((,class :inherit sml/global)))
+   `(sml/modes ((,class :inherit bold :foreground ,fg-active)))
+   `(sml/modified ((,class :inherit bold :foreground ,magenta-active)))
+   `(sml/mule-info ((,class :inherit sml/global)))
+   `(sml/name-filling ((,class :foreground ,yellow-active)))
+   `(sml/not-modified ((,class :inherit sml/global)))
+   `(sml/numbers-separator ((,class :inherit sml/global)))
+   `(sml/outside-modified ((,class :inherit modus-theme-intense-red)))
+   `(sml/position-percentage ((,class :inherit sml/global)))
+   `(sml/prefix ((,class :foreground ,green-active)))
+   `(sml/process ((,class :inherit sml/prefix)))
+   `(sml/projectile ((,class :inherit sml/git)))
+   `(sml/read-only ((,class :inherit bold :foreground ,cyan-active)))
+   `(sml/remote ((,class :inherit sml/global)))
+   `(sml/sudo ((,class :inherit modus-theme-subtle-red)))
+   `(sml/time ((,class :inherit sml/global)))
+   `(sml/vc ((,class :inherit sml/git)))
+   `(sml/vc-edited ((,class :inherit bold :foreground ,yellow-active)))
+;;;;; smartparens
+   `(sp-pair-overlay-face ((,class :inherit modus-theme-special-warm)))
+   `(sp-show-pair-enclosing ((,class :inherit modus-theme-special-mild)))
+   `(sp-show-pair-match-face ((,class ,@(modus-operandi-theme-paren 
bg-paren-match
+                                                                    
bg-paren-match-intense)
+                                      :foreground ,fg-main)))
+   `(sp-show-pair-mismatch-face ((,class :inherit modus-theme-intense-red)))
+   `(sp-wrap-overlay-closing-pair ((,class :inherit sp-pair-overlay-face)))
+   `(sp-wrap-overlay-face ((,class :inherit sp-pair-overlay-face)))
+   `(sp-wrap-overlay-opening-pair ((,class :inherit sp-pair-overlay-face)))
+   `(sp-wrap-tag-overlay-face ((,class :inherit sp-pair-overlay-face)))
+;;;;; smerge
+   `(smerge-base ((,class ,@(modus-operandi-theme-diffs
+                             bg-main yellow
+                             bg-diff-focus-changed fg-diff-focus-changed))))
+   `(smerge-lower ((,class ,@(modus-operandi-theme-diffs
+                              bg-main green
+                              bg-diff-focus-added fg-diff-focus-added))))
+   `(smerge-markers ((,class :background ,bg-diff-neutral-2 :foreground 
,fg-diff-neutral-2)))
+   `(smerge-refined-added ((,class ,@(modus-operandi-theme-diffs
+                                      bg-diff-added fg-diff-added
+                                      bg-diff-refine-added 
fg-diff-refine-added))))
+   `(smerge-refined-changed ((,class)))
+   `(smerge-refined-removed ((,class ,@(modus-operandi-theme-diffs
+                                        bg-diff-removed fg-diff-removed
+                                        bg-diff-refine-removed 
fg-diff-refine-removed))))
+   `(smerge-upper ((,class ,@(modus-operandi-theme-diffs
+                              bg-main red
+                              bg-diff-focus-removed fg-diff-focus-removed))))
+;;;;; spaceline
+   `(spaceline-evil-emacs ((,class :inherit modus-theme-active-magenta)))
+   `(spaceline-evil-insert ((,class :inherit modus-theme-active-green)))
+   `(spaceline-evil-motion ((,class :inherit modus-theme-active-blue)))
+   `(spaceline-evil-normal ((,class :background ,fg-alt :foreground ,bg-alt)))
+   `(spaceline-evil-replace ((,class :inherit modus-theme-active-red)))
+   `(spaceline-evil-visual ((,class :inherit modus-theme-active-cyan)))
+   `(spaceline-flycheck-error ((,class :foreground ,red-active)))
+   `(spaceline-flycheck-info ((,class :foreground ,cyan-active)))
+   `(spaceline-flycheck-warning ((,class :foreground ,yellow-active)))
+   `(spaceline-highlight-face ((,class :inherit modus-theme-fringe-blue)))
+   `(spaceline-modified ((,class :inherit modus-theme-fringe-magenta)))
+   `(spaceline-python-venv ((,class :foreground ,magenta-active)))
+   `(spaceline-read-only ((,class :inherit modus-theme-fringe-red)))
+   `(spaceline-unmodified ((,class :inherit modus-theme-fringe-cyan)))
+;;;;; speedbar
+   `(speedbar-button-face ((,class :inherit link)))
+   `(speedbar-directory-face ((,class :inherit bold :foreground ,blue)))
+   `(speedbar-file-face ((,class :foreground ,fg-main)))
+   `(speedbar-highlight-face ((,class :inherit modus-theme-subtle-blue)))
+   `(speedbar-selected-face ((,class :inherit bold :foreground ,cyan)))
+   `(speedbar-separator-face ((,class :inherit modus-theme-intense-neutral)))
+   `(speedbar-tag-face ((,class :foreground ,yellow-alt-other)))
+;;;;; spell-fu
+   `(spell-fu-incorrect-face
+     ((,(append '((supports :underline (:style wave))) class)
+       :foreground ,fg-lang-error :underline (:style wave))
+      (,class :foreground ,fg-lang-error :underline t)))
+;;;;; stripes
+   `(stripes ((,class :inherit modus-theme-hl-line)))
+;;;;; success
+   `(suggest-heading ((,class :inherit bold :foreground ,yellow-alt-other)))
+;;;;; switch-window
+   `(switch-window-background ((,class :background ,bg-dim)))
+   `(switch-window-label ((,class :height 3.0 :foreground ,blue-intense)))
+;;;;; swiper
+   `(swiper-background-match-face-1 ((,class :inherit 
modus-theme-subtle-neutral)))
+   `(swiper-background-match-face-2 ((,class :inherit 
modus-theme-subtle-cyan)))
+   `(swiper-background-match-face-3 ((,class :inherit 
modus-theme-subtle-magenta)))
+   `(swiper-background-match-face-4 ((,class :inherit 
modus-theme-subtle-green)))
+   `(swiper-line-face ((,class ,@(and (>= emacs-major-version 27) '(:extend t))
+                               :inherit modus-theme-special-cold)))
+   `(swiper-match-face-1 ((,class :inherit swiper-line-face)))
+   `(swiper-match-face-2 ((,class :inherit swiper-line-face)))
+   `(swiper-match-face-3 ((,class :inherit swiper-line-face)))
+   `(swiper-match-face-4 ((,class :inherit swiper-line-face)))
+;;;;; swoop
+   `(swoop-face-header-format-line ((,class :inherit bold :foreground ,red-alt
+                                            ,@(modus-operandi-theme-scale 
modus-operandi-theme-scale-3))))
+   `(swoop-face-line-buffer-name ((,class :inherit bold :foreground ,blue-alt
+                                          ,@(modus-operandi-theme-scale 
modus-operandi-theme-scale-4))))
+   `(swoop-face-line-number ((,class :foreground ,fg-special-warm)))
+   `(swoop-face-target-line ((,class :inherit modus-theme-intense-blue
+                                     ,@(and (>= emacs-major-version 27) 
'(:extend t)))))
+   `(swoop-face-target-words ((,class :inherit modus-theme-refine-cyan)))
+;;;;; sx
+   `(sx-inbox-item-type ((,class :foreground ,magenta-alt-other)))
+   `(sx-inbox-item-type-unread ((,class :inherit (sx-inbox-item-type bold))))
+   `(sx-question-list-answers ((,class :foreground ,green)))
+   `(sx-question-list-answers-accepted ((,class :box t :foreground ,green)))
+   `(sx-question-list-bounty ((,class :inherit bold :background ,bg-alt 
:foreground ,yellow)))
+   `(sx-question-list-date ((,class :foreground ,fg-special-cold)))
+   `(sx-question-list-favorite ((,class :inherit bold :foreground 
,fg-special-warm)))
+   `(sx-question-list-parent ((,class :foreground ,fg-main)))
+   `(sx-question-list-read-question ((,class :foreground ,fg-alt)))
+   `(sx-question-list-score ((,class :foreground ,fg-special-mild)))
+   `(sx-question-list-score-upvoted ((,class :inherit (sx-question-list-score 
bold))))
+   `(sx-question-list-unread-question ((,class :inherit bold :foreground 
,fg-main)))
+   `(sx-question-mode-accepted ((,class :inherit bold :height 1.3 :foreground 
,green)))
+   `(sx-question-mode-closed ((,class :inherit modus-theme-active-yellow :box 
(:line-width 2 :color nil))))
+   `(sx-question-mode-closed-reason ((,class :box (:line-width 2 :color nil) 
:foreground ,fg-main)))
+   `(sx-question-mode-content-face ((,class :background ,bg-dim)))
+   `(sx-question-mode-date ((,class :foreground ,blue)))
+   `(sx-question-mode-header ((,class :inherit bold :foreground ,cyan)))
+   `(sx-question-mode-kbd-tag ((,class :inherit bold :height 0.9 :box 
(:line-width 3 :color ,fg-main :style released-button) :foreground ,fg-main)))
+   `(sx-question-mode-score ((,class :foreground ,fg-dim)))
+   `(sx-question-mode-score-downvoted ((,class :foreground ,yellow)))
+   `(sx-question-mode-score-upvoted ((,class :inherit bold :foreground 
,magenta)))
+   `(sx-question-mode-title ((,class :inherit bold :foreground ,fg-main)))
+   `(sx-question-mode-title-comments ((,class :inherit bold :foreground 
,fg-alt)))
+   `(sx-tag ((,class :foreground ,magenta-alt)))
+   `(sx-user-name ((,class :foreground ,blue-alt)))
+   `(sx-user-reputation ((,class :foreground ,fg-alt)))
+;;;;; symbol-overlay
+   `(symbol-overlay-default-face ((,class :inherit modus-theme-special-warm)))
+   `(symbol-overlay-face-1 ((,class :inherit modus-theme-intense-blue)))
+   `(symbol-overlay-face-2 ((,class :inherit modus-theme-refine-magenta)))
+   `(symbol-overlay-face-3 ((,class :inherit modus-theme-intense-yellow)))
+   `(symbol-overlay-face-4 ((,class :inherit modus-theme-intense-magenta)))
+   `(symbol-overlay-face-5 ((,class :inherit modus-theme-intense-red)))
+   `(symbol-overlay-face-6 ((,class :inherit modus-theme-refine-red)))
+   `(symbol-overlay-face-7 ((,class :inherit modus-theme-intense-cyan)))
+   `(symbol-overlay-face-8 ((,class :inherit modus-theme-refine-cyan)))
+;;;;; syslog-mode
+   `(syslog-debug ((,class :inherit bold :foreground ,cyan-alt-other)))
+   `(syslog-error ((,class :inherit bold :foreground ,red)))
+   `(syslog-file ((,class :inherit bold :foreground ,fg-special-cold)))
+   `(syslog-hide ((,class :background ,bg-main :foreground ,fg-main)))
+   `(syslog-hour ((,class :inherit bold :foreground ,magenta-alt-other)))
+   `(syslog-info ((,class :inherit bold :foreground ,blue-alt-other)))
+   `(syslog-ip ((,class :inherit bold :foreground ,fg-special-mild :underline 
t)))
+   `(syslog-su ((,class :inherit bold :foreground ,red-alt)))
+   `(syslog-warn ((,class :inherit bold :foreground ,yellow)))
+;;;;; table (built-in table.el)
+   `(table-cell ((,class :background ,blue-nuanced-bg)))
+;;;;; telephone-line
+   `(telephone-line-accent-active ((,class :background ,fg-inactive 
:foreground ,bg-inactive)))
+   `(telephone-line-accent-inactive ((,class :background ,bg-active 
:foreground ,fg-active)))
+   `(telephone-line-error ((,class :inherit bold :foreground ,red-active)))
+   `(telephone-line-evil ((,class :foreground ,fg-main)))
+   `(telephone-line-evil-emacs ((,class :inherit telephone-line-evil 
:background ,magenta-intense-bg)))
+   `(telephone-line-evil-insert ((,class :inherit telephone-line-evil 
:background ,green-intense-bg)))
+   `(telephone-line-evil-motion ((,class :inherit telephone-line-evil 
:background ,yellow-intense-bg)))
+   `(telephone-line-evil-normal ((,class :inherit telephone-line-evil 
:background ,bg-alt)))
+   `(telephone-line-evil-operator ((,class :inherit telephone-line-evil 
:background ,yellow-subtle-bg)))
+   `(telephone-line-evil-replace ((,class :inherit telephone-line-evil 
:background ,red-intense-bg)))
+   `(telephone-line-evil-visual ((,class :inherit telephone-line-evil 
:background ,cyan-intense-bg)))
+   `(telephone-line-projectile ((,class :foreground ,cyan-active)))
+   `(telephone-line-unimportant ((,class :foreground ,fg-inactive)))
+   `(telephone-line-warning ((,class :inherit bold :foreground 
,yellow-active)))
+;;;;; term
+   `(term ((,class :background ,bg-main :foreground ,fg-main)))
+   `(term-bold ((,class :inherit bold)))
+   `(term-color-blue ((,class :background ,blue :foreground ,blue)))
+   `(term-color-cyan ((,class :background ,cyan :foreground ,cyan)))
+   `(term-color-green ((,class :background ,green :foreground ,green)))
+   `(term-color-magenta ((,class :background ,magenta :foreground ,magenta)))
+   `(term-color-red ((,class :background ,red :foreground ,red)))
+   `(term-color-yellow ((,class :background ,yellow :foreground ,yellow)))
+   `(term-underline ((,class :underline t)))
+;;;;; tomatinho
+   `(tomatinho-ok-face ((,class :foreground ,blue-intense)))
+   `(tomatinho-pause-face ((,class :foreground ,yellow-intense)))
+   `(tomatinho-reset-face ((,class :foreground ,fg-alt)))
+;;;;; transient
+   `(transient-active-infix ((,class :inherit modus-theme-special-mild)))
+   `(transient-amaranth ((,class :inherit bold :foreground ,yellow)))
+   `(transient-argument ((,class :inherit bold :foreground ,red-alt)))
+   `(transient-blue ((,class :inherit bold :foreground ,blue)))
+   `(transient-disabled-suffix ((,class :inherit modus-theme-intense-red)))
+   `(transient-enabled-suffix ((,class :inherit modus-theme-intense-green)))
+   `(transient-heading ((,class :inherit bold :foreground ,fg-main)))
+   `(transient-inactive-argument ((,class :foreground ,fg-alt)))
+   `(transient-inactive-value ((,class :foreground ,fg-alt)))
+   `(transient-key ((,class :inherit bold :foreground ,blue)))
+   `(transient-mismatched-key ((,class :underline t)))
+   `(transient-nonstandard-key ((,class :underline t)))
+   `(transient-pink ((,class :inherit bold :foreground ,magenta)))
+   `(transient-red ((,class :inherit bold :foreground ,red-intense)))
+   `(transient-teal ((,class :inherit bold :foreground ,cyan-alt-other)))
+   `(transient-unreachable ((,class :foreground ,fg-unfocused)))
+   `(transient-unreachable-key ((,class :foreground ,fg-unfocused)))
+   `(transient-value ((,class :foreground ,magenta-alt)))
+;;;;; trashed
+   `(trashed-deleted ((,class :inherit modus-theme-mark-del)))
+   `(trashed-directory ((,class :foreground ,blue)))
+   `(trashed-mark ((,class :inherit modus-theme-mark-symbol)))
+   `(trashed-marked ((,class :inherit modus-theme-mark-alt)))
+   `(trashed-restored ((,class :inherit modus-theme-mark-sel)))
+   `(trashed-symlink ((,class :foreground ,cyan-alt :underline t)))
+;;;;; treemacs
+   `(treemacs-directory-collapsed-face ((,class :foreground ,magenta-alt)))
+   `(treemacs-directory-face ((,class :inherit dired-directory)))
+   `(treemacs-file-face ((,class :foreground ,fg-main)))
+   `(treemacs-fringe-indicator-face ((,class :foreground ,fg-main)))
+   `(treemacs-git-added-face ((,class :foreground ,green-intense)))
+   `(treemacs-git-conflict-face ((,class :inherit (modus-theme-intense-red 
bold))))
+   `(treemacs-git-ignored-face ((,class :foreground ,fg-alt)))
+   `(treemacs-git-modified-face ((,class :foreground ,yellow-alt-other)))
+   `(treemacs-git-renamed-face ((,class :foreground ,cyan-alt-other)))
+   `(treemacs-git-unmodified-face ((,class :foreground ,fg-main)))
+   `(treemacs-git-untracked-face ((,class :foreground ,red-alt-other)))
+   `(treemacs-help-column-face ((,class ,@(modus-operandi-theme-bold-weight) 
:foreground ,magenta-alt-other :underline t)))
+   `(treemacs-help-title-face ((,class :foreground ,blue-alt-other)))
+   `(treemacs-on-failure-pulse-face ((,class :inherit 
modus-theme-intense-red)))
+   `(treemacs-on-success-pulse-face ((,class :inherit 
modus-theme-intense-green)))
+   `(treemacs-root-face ((,class :inherit bold :foreground ,blue-alt-other 
:height 1.2 :underline t)))
+   `(treemacs-root-remote-disconnected-face ((,class :inherit 
treemacs-root-remote-face :foreground ,yellow)))
+   `(treemacs-root-remote-face ((,class :inherit treemacs-root-face 
:foreground ,magenta)))
+   `(treemacs-root-remote-unreadable-face ((,class :inherit 
treemacs-root-unreadable-face)))
+   `(treemacs-root-unreadable-face ((,class :inherit treemacs-root-face 
:strike-through t)))
+   `(treemacs-tags-face ((,class :foreground ,blue-alt)))
+   `(treemacs-tags-face ((,class :foreground ,magenta-alt)))
+;;;;; tty-menu
+   `(tty-menu-disabled-face ((,class :background ,bg-alt :foreground ,fg-alt)))
+   `(tty-menu-enabled-face ((,class :inherit bold :background ,bg-alt 
:foreground ,fg-main)))
+   `(tty-menu-selected-face ((,class :inherit modus-theme-intense-blue)))
+;;;;; tuareg
+   `(caml-types-def-face ((,class :inherit modus-theme-subtle-red)))
+   `(caml-types-expr-face ((,class :inherit modus-theme-subtle-green)))
+   `(caml-types-occ-face ((,class :inherit modus-theme-subtle-green)))
+   `(caml-types-scope-face ((,class :inherit modus-theme-subtle-blue)))
+   `(caml-types-typed-face ((,class :inherit modus-theme-subtle-magenta)))
+   `(tuareg-font-double-semicolon-face ((,class 
,@(modus-operandi-theme-syntax-foreground
+                                                   red-alt red-alt-faint))))
+   `(tuareg-font-lock-attribute-face ((,class 
,@(modus-operandi-theme-syntax-foreground
+                                                 magenta magenta-faint))))
+   `(tuareg-font-lock-constructor-face ((,class :foreground ,fg-main)))
+   `(tuareg-font-lock-error-face ((,class :inherit (modus-theme-intense-red 
bold))))
+   `(tuareg-font-lock-extension-node-face ((,class :background ,bg-alt 
:foreground ,magenta)))
+   `(tuareg-font-lock-governing-face ((,class :inherit bold :foreground 
,fg-main)))
+   `(tuareg-font-lock-infix-extension-node-face ((,class 
,@(modus-operandi-theme-syntax-foreground
+                                                            magenta 
magenta-faint))))
+   `(tuareg-font-lock-interactive-directive-face ((,class :foreground 
,fg-special-cold)))
+   `(tuareg-font-lock-interactive-error-face ((,class :inherit bold
+                                                      
,@(modus-operandi-theme-syntax-foreground
+                                                         red red-faint))))
+   `(tuareg-font-lock-interactive-output-face ((,class 
,@(modus-operandi-theme-syntax-foreground
+                                                          blue-alt-other 
blue-alt-other-faint))))
+   `(tuareg-font-lock-label-face ((,class 
,@(modus-operandi-theme-syntax-foreground
+                                             cyan-alt-other 
cyan-alt-other-faint))))
+   `(tuareg-font-lock-line-number-face ((,class :foreground ,fg-special-warm)))
+   `(tuareg-font-lock-module-face ((,class 
,@(modus-operandi-theme-syntax-foreground
+                                              magenta-alt magenta-alt-faint))))
+   `(tuareg-font-lock-multistage-face ((,class :inherit bold :background 
,bg-alt
+                                               
,@(modus-operandi-theme-syntax-foreground
+                                                  blue blue-faint))))
+   `(tuareg-font-lock-operator-face ((,class 
,@(modus-operandi-theme-syntax-foreground
+                                                red-alt red-alt-faint))))
+   `(tuareg-opam-error-face ((,class :inherit bold
+                                     ,@(modus-operandi-theme-syntax-foreground
+                                        red red-faint))))
+   `(tuareg-opam-pkg-variable-name-face ((,class 
,@(modus-operandi-theme-syntax-foreground
+                                                    cyan cyan-faint)
+                                                 :slant ,modus-theme-slant)))
+;;;;; undo-tree
+   `(undo-tree-visualizer-active-branch-face ((,class :inherit bold 
:foreground ,fg-main)))
+   `(undo-tree-visualizer-current-face ((,class :foreground ,blue-intense)))
+   `(undo-tree-visualizer-default-face ((,class :foreground ,fg-alt)))
+   `(undo-tree-visualizer-register-face ((,class :foreground 
,magenta-intense)))
+   `(undo-tree-visualizer-unmodified-face ((,class :foreground 
,green-intense)))
+;;;;; vc
+   `(vc-conflict-state ((,class ,@(modus-operandi-theme-bold-weight) 
:foreground ,red-active)))
+   `(vc-edited-state ((,class :foreground ,fg-special-warm)))
+   `(vc-locally-added-state ((,class :foreground ,cyan-active)))
+   `(vc-locked-state ((,class ,@(modus-operandi-theme-bold-weight) :foreground 
,magenta-active)))
+   `(vc-missing-state ((,class ,@(modus-operandi-theme-bold-weight) 
:foreground ,yellow-active)))
+   `(vc-needs-update-state ((,class ,@(modus-operandi-theme-bold-weight) 
:foreground ,fg-special-mild)))
+   `(vc-removed-state ((,class :foreground ,red-active)))
+   `(vc-state-base ((,class :foreground ,fg-active)))
+   `(vc-up-to-date-state ((,class :foreground ,fg-special-cold)))
+;;;;; vdiff
+   `(vdiff-addition-face ((,class ,@(modus-operandi-theme-diffs
+                                     bg-main green
+                                     bg-diff-focus-added 
fg-diff-focus-added))))
+   `(vdiff-change-face ((,class ,@(modus-operandi-theme-diffs
+                                   bg-main yellow
+                                   bg-diff-focus-changed 
fg-diff-focus-changed))))
+   `(vdiff-closed-fold-face ((,class :background ,bg-diff-neutral-1 
:foreground ,fg-diff-neutral-1)))
+   `(vdiff-refine-added ((,class ,@(modus-operandi-theme-diffs
+                                    bg-diff-added fg-diff-added
+                                    bg-diff-refine-added 
fg-diff-refine-added))))
+   `(vdiff-refine-changed ((,class ,@(modus-operandi-theme-diffs
+                                      bg-diff-changed fg-diff-changed
+                                      bg-diff-refine-changed 
fg-diff-refine-changed))))
+   `(vdiff-subtraction-face ((,class ,@(modus-operandi-theme-diffs
+                                        bg-main red
+                                        bg-diff-focus-removed 
fg-diff-focus-removed))))
+   `(vdiff-target-face ((,class :inherit modus-theme-intense-blue)))
+;;;;; vimish-fold
+   `(vimish-fold-fringe ((,class :foreground ,cyan-active)))
+   `(vimish-fold-mouse-face ((,class :inherit modus-theme-intense-blue)))
+   `(vimish-fold-overlay ((,class :background ,bg-alt :foreground 
,fg-special-cold)))
+;;;;; visible-mark
+   `(visible-mark-active ((,class :background ,blue-intense-bg)))
+   `(visible-mark-face1 ((,class :background ,cyan-intense-bg)))
+   `(visible-mark-face2 ((,class :background ,yellow-intense-bg)))
+   `(visible-mark-forward-face1 ((,class :background ,magenta-intense-bg)))
+   `(visible-mark-forward-face2 ((,class :background ,green-intense-bg)))
+;;;;; visual-regexp
+   `(vr/group-0 ((,class :inherit modus-theme-intense-blue)))
+   `(vr/group-1 ((,class :inherit modus-theme-intense-magenta)))
+   `(vr/group-2 ((,class :inherit modus-theme-intense-green)))
+   `(vr/match-0 ((,class :inherit modus-theme-refine-yellow)))
+   `(vr/match-1 ((,class :inherit modus-theme-refine-yellow)))
+   `(vr/match-separator-face ((,class :inherit (modus-theme-intense-neutral 
bold))))
+;;;;; volatile-highlights
+   `(vhl/default-face ((,class ,@(and (>= emacs-major-version 27) '(:extend t))
+                               :background ,bg-alt :foreground ,blue-nuanced)))
+;;;;; vterm
+   `(vterm-color-black ((,class :background "black" :foreground "black")))
+   `(vterm-color-blue ((,class :background ,blue :foreground ,blue)))
+   `(vterm-color-cyan ((,class :background ,cyan :foreground ,cyan)))
+   `(vterm-color-default ((,class :background ,bg-main :foreground ,fg-main)))
+   `(vterm-color-green ((,class :background ,green :foreground ,green)))
+   `(vterm-color-inverse-video ((,class :background ,bg-main :inverse-video 
t)))
+   `(vterm-color-magenta ((,class :background ,magenta :foreground ,magenta)))
+   `(vterm-color-red ((,class :background ,red :foreground ,red)))
+   `(vterm-color-underline ((,class :foreground ,fg-special-warm :underline 
t)))
+   `(vterm-color-white ((,class :background "white" :foreground "white")))
+   `(vterm-color-yellow ((,class :background ,yellow :foreground ,yellow)))
+;;;;; wcheck-mode
+   `(wcheck-default-face ((,class :foreground ,red :underline t)))
+;;;;; web-mode
+   `(web-mode-annotation-face ((,class :inherit web-mode-comment-face)))
+   `(web-mode-annotation-html-face ((,class :inherit web-mode-comment-face)))
+   `(web-mode-annotation-tag-face ((,class :inherit web-mode-comment-face 
:underline t)))
+   `(web-mode-block-attr-name-face ((,class 
,@(modus-operandi-theme-syntax-foreground
+                                               blue blue-faint))))
+   `(web-mode-block-attr-value-face ((,class 
,@(modus-operandi-theme-syntax-foreground
+                                                cyan-alt-other 
cyan-alt-other-faint))))
+   `(web-mode-block-comment-face ((,class :inherit web-mode-comment-face)))
+   `(web-mode-block-control-face ((,class 
,@(modus-operandi-theme-syntax-foreground
+                                             magenta-alt magenta-alt-faint)
+                                          
,@(modus-operandi-theme-bold-weight))))
+   `(web-mode-block-delimiter-face ((,class :foreground ,fg-main)))
+   `(web-mode-block-face ((,class :background ,bg-dim)))
+   `(web-mode-block-string-face ((,class :inherit web-mode-string-face)))
+   `(web-mode-bold-face ((,class :inherit bold)))
+   `(web-mode-builtin-face ((,class ,@(modus-operandi-theme-syntax-foreground
+                                       magenta-alt magenta-alt-faint)
+                                    ,@(modus-operandi-theme-bold-weight))))
+   `(web-mode-comment-face ((,class :foreground ,fg-alt :slant 
,modus-theme-slant)))
+   `(web-mode-comment-keyword-face ((,class :inherit bold :background ,bg-dim
+                                            
,@(modus-operandi-theme-syntax-foreground
+                                               yellow yellow-faint))))
+   `(web-mode-constant-face ((,class ,@(modus-operandi-theme-syntax-foreground
+                                        blue-alt-other blue-alt-other-faint))))
+   `(web-mode-css-at-rule-face ((,class 
,@(modus-operandi-theme-syntax-foreground
+                                           blue-alt-other 
blue-alt-other-faint))))
+   `(web-mode-css-color-face ((,class ,@(modus-operandi-theme-syntax-foreground
+                                         magenta-alt magenta-alt-faint)
+                                      ,@(modus-operandi-theme-bold-weight))))
+   `(web-mode-css-comment-face ((,class :inherit web-mode-comment-face)))
+   `(web-mode-css-function-face ((,class 
,@(modus-operandi-theme-syntax-foreground
+                                            magenta-alt magenta-alt-faint)
+                                         
,@(modus-operandi-theme-bold-weight))))
+   `(web-mode-css-priority-face ((,class 
,@(modus-operandi-theme-syntax-foreground
+                                            yellow-alt yellow-alt-faint)
+                                         
,@(modus-operandi-theme-bold-weight))))
+   `(web-mode-css-property-name-face ((,class 
,@(modus-operandi-theme-syntax-foreground
+                                                 cyan cyan-faint))))
+   `(web-mode-css-pseudo-class-face ((,class 
,@(modus-operandi-theme-syntax-foreground
+                                                cyan-alt-other 
cyan-alt-other-faint))))
+   `(web-mode-css-selector-face ((,class 
,@(modus-operandi-theme-syntax-foreground
+                                            magenta-alt-other 
magenta-alt-other-faint)
+                                         
,@(modus-operandi-theme-bold-weight))))
+   `(web-mode-css-string-face ((,class :inherit web-mode-string-face)))
+   `(web-mode-css-variable-face ((,class :foreground ,fg-special-warm)))
+   `(web-mode-current-column-highlight-face ((,class :background ,bg-alt)))
+   `(web-mode-current-element-highlight-face ((,class :inherit 
modus-theme-special-mild)))
+   `(web-mode-doctype-face ((,class :foreground ,fg-special-cold :slant 
,modus-theme-slant)))
+   `(web-mode-error-face ((,class :inherit modus-theme-intense-red)))
+   `(web-mode-filter-face ((,class ,@(modus-operandi-theme-syntax-foreground
+                                      magenta magenta-faint))))
+   `(web-mode-folded-face ((,class :underline t)))
+   `(web-mode-function-call-face ((,class 
,@(modus-operandi-theme-syntax-foreground
+                                             magenta magenta-faint))))
+   `(web-mode-function-name-face ((,class 
,@(modus-operandi-theme-syntax-foreground
+                                             magenta magenta-faint))))
+   `(web-mode-html-attr-custom-face ((,class 
,@(modus-operandi-theme-syntax-foreground
+                                                cyan cyan-faint))))
+   `(web-mode-html-attr-engine-face ((,class :foreground ,fg-main)))
+   `(web-mode-html-attr-equal-face ((,class :foreground ,fg-main)))
+   `(web-mode-html-attr-name-face ((,class 
,@(modus-operandi-theme-syntax-foreground
+                                              cyan cyan-faint))))
+   `(web-mode-html-attr-value-face ((,class 
,@(modus-operandi-theme-syntax-foreground
+                                               blue-alt-other 
blue-alt-other-faint))))
+   `(web-mode-html-entity-face ((,class 
,@(modus-operandi-theme-syntax-foreground
+                                           yellow-alt-other 
yellow-alt-other-faint)
+                                        :slant ,modus-theme-slant)))
+   `(web-mode-html-tag-bracket-face ((,class :foreground ,fg-dim)))
+   `(web-mode-html-tag-custom-face ((,class 
,@(modus-operandi-theme-syntax-foreground
+                                               magenta magenta-faint))))
+   `(web-mode-html-tag-face ((,class ,@(modus-operandi-theme-syntax-foreground
+                                        magenta magenta-faint))))
+   `(web-mode-html-tag-namespaced-face ((,class 
,@(modus-operandi-theme-syntax-foreground
+                                                   magenta-alt 
magenta-alt-faint)
+                                                
,@(modus-operandi-theme-bold-weight))))
+   `(web-mode-html-tag-unclosed-face ((,class 
,@(modus-operandi-theme-syntax-foreground
+                                                 red red-faint)
+                                              :underline t)))
+   `(web-mode-inlay-face ((,class :background ,bg-alt)))
+   `(web-mode-italic-face ((,class :slant italic)))
+   `(web-mode-javascript-comment-face ((,class :inherit 
web-mode-comment-face)))
+   `(web-mode-javascript-string-face ((,class :inherit web-mode-string-face)))
+   `(web-mode-json-comment-face ((,class :inherit web-mode-comment-face)))
+   `(web-mode-json-context-face ((,class 
,@(modus-operandi-theme-syntax-foreground
+                                            magenta-alt magenta-alt-faint))))
+   `(web-mode-json-key-face ((,class :foreground ,blue-nuanced)))
+   `(web-mode-json-string-face ((,class :inherit web-mode-string-face)))
+   `(web-mode-jsx-depth-1-face ((,class :background ,blue-intense-bg 
:foreground ,fg-main)))
+   `(web-mode-jsx-depth-2-face ((,class :background ,blue-subtle-bg 
:foreground ,fg-main)))
+   `(web-mode-jsx-depth-3-face ((,class :background ,bg-special-cold 
:foreground ,fg-special-cold)))
+   `(web-mode-jsx-depth-4-face ((,class :background ,bg-alt :foreground 
,blue-refine-fg)))
+   `(web-mode-jsx-depth-5-face ((,class :background ,bg-alt :foreground 
,blue-nuanced)))
+   `(web-mode-keyword-face ((,class ,@(modus-operandi-theme-syntax-foreground
+                                       magenta-alt-other 
magenta-alt-other-faint)
+                                    ,@(modus-operandi-theme-bold-weight))))
+   `(web-mode-param-name-face ((,class 
,@(modus-operandi-theme-syntax-foreground
+                                          magenta magenta-faint))))
+   `(web-mode-part-comment-face ((,class :inherit web-mode-comment-face)))
+   `(web-mode-part-face ((,class :inherit web-mode-block-face)))
+   `(web-mode-part-string-face ((,class :inherit web-mode-string-face)))
+   `(web-mode-preprocessor-face ((,class 
,@(modus-operandi-theme-syntax-foreground
+                                            red-alt-other 
red-alt-other-faint))))
+   `(web-mode-script-face ((,class :inherit web-mode-part-face)))
+   `(web-mode-sql-keyword-face ((,class :inherit bold
+                                        
,@(modus-operandi-theme-syntax-foreground
+                                           yellow yellow-faint))))
+   `(web-mode-string-face ((,class ,@(modus-operandi-theme-syntax-foreground
+                                      blue-alt blue-alt-faint))))
+   `(web-mode-style-face ((,class :inherit web-mode-part-face)))
+   `(web-mode-symbol-face ((,class ,@(modus-operandi-theme-syntax-foreground
+                                      blue-alt-other blue-alt-other-faint))))
+   `(web-mode-type-face ((,class ,@(modus-operandi-theme-syntax-foreground
+                                    magenta-alt magenta-alt-faint))))
+   `(web-mode-underline-face ((,class :underline t)))
+   `(web-mode-variable-name-face ((,class 
,@(modus-operandi-theme-syntax-foreground
+                                             cyan cyan-faint))))
+   `(web-mode-warning-face ((,class :inherit bold :background ,bg-alt
+                                    ,@(modus-operandi-theme-syntax-foreground
+                                       yellow-alt-other 
yellow-alt-other-faint))))
+   `(web-mode-whitespace-face ((,class :background ,bg-whitespace :foreground 
,fg-whitespace)))
+;;;;; wgrep
+   `(wgrep-delete-face ((,class :inherit modus-theme-refine-yellow)))
+   `(wgrep-done-face ((,class :inherit modus-theme-refine-blue)))
+   `(wgrep-face ((,class :inherit modus-theme-refine-green)))
+   `(wgrep-file-face ((,class :foreground ,fg-special-warm)))
+   `(wgrep-reject-face ((,class :inherit (modus-theme-intense-red bold))))
+;;;;; which-function-mode
+   `(which-func ((,class :foreground ,magenta-active)))
+;;;;; which-key
+   `(which-key-command-description-face ((,class :foreground ,cyan)))
+   `(which-key-group-description-face ((,class :foreground ,magenta-alt)))
+   `(which-key-highlighted-command-face ((,class :foreground ,cyan-alt 
:underline t)))
+   `(which-key-key-face ((,class :inherit bold :foreground ,blue-intense)))
+   `(which-key-local-map-description-face ((,class :foreground ,fg-main)))
+   `(which-key-note-face ((,class :background ,bg-dim :foreground 
,fg-special-mild)))
+   `(which-key-separator-face ((,class :foreground ,fg-alt)))
+   `(which-key-special-key-face ((,class :inherit bold :foreground 
,yellow-intense)))
+;;;;; whitespace-mode
+   `(whitespace-big-indent ((,class :inherit modus-theme-subtle-red)))
+   `(whitespace-empty ((,class :inherit modus-theme-intense-magenta)))
+   `(whitespace-hspace ((,class :background ,bg-whitespace :foreground 
,fg-whitespace)))
+   `(whitespace-indentation ((,class :background ,bg-whitespace :foreground 
,fg-whitespace)))
+   `(whitespace-line ((,class :inherit modus-theme-special-warm)))
+   `(whitespace-newline ((,class :background ,bg-whitespace :foreground 
,fg-whitespace)))
+   `(whitespace-space ((,class :background ,bg-whitespace :foreground 
,fg-whitespace)))
+   `(whitespace-space-after-tab ((,class :inherit modus-theme-subtle-magenta)))
+   `(whitespace-space-before-tab ((,class :inherit modus-theme-subtle-cyan)))
+   `(whitespace-tab ((,class :background ,bg-whitespace :foreground 
,fg-whitespace)))
+   `(whitespace-trailing ((,class :inherit modus-theme-intense-red)))
+;;;;; window-divider-mode
+   `(window-divider ((,class :foreground ,fg-window-divider-inner)))
+   `(window-divider-first-pixel ((,class :foreground 
,fg-window-divider-outer)))
+   `(window-divider-last-pixel ((,class :foreground ,fg-window-divider-outer)))
+;;;;; winum
+   `(winum-face ((,class ,@(modus-operandi-theme-bold-weight) :foreground 
,cyan-active)))
+;;;;; writegood-mode
+   `(writegood-duplicates-face ((,class :background ,bg-alt :foreground 
,red-alt :underline t)))
+   `(writegood-passive-voice-face ((,class :foreground ,yellow-nuanced 
:underline ,fg-lang-warning)))
+   `(writegood-weasels-face ((,class :foreground ,red-nuanced :underline 
,fg-lang-error)))
+;;;;; woman
+   `(woman-addition ((,class :foreground ,magenta-alt-other)))
+   `(woman-bold ((,class :inherit bold :foreground ,magenta)))
+   `(woman-italic ((,class :foreground ,cyan :slant italic)))
+   `(woman-unknown ((,class :foreground ,yellow :slant italic)))
+;;;;; xah-elisp-mode
+   `(xah-elisp-at-symbol ((,class :inherit bold
+                                  ,@(modus-operandi-theme-syntax-foreground
+                                     red-alt red-alt-faint))))
+   `(xah-elisp-cap-variable ((,class ,@(modus-operandi-theme-syntax-foreground
+                                        red-alt-other red-alt-other-faint))))
+   `(xah-elisp-command-face ((,class ,@(modus-operandi-theme-syntax-foreground
+                                        cyan-alt-other cyan-alt-other-faint))))
+   `(xah-elisp-dollar-symbol ((,class ,@(modus-operandi-theme-syntax-foreground
+                                         green green-faint))))
+;;;;; xref
+   `(xref-file-header ((,class :inherit bold :foreground ,fg-special-cold)))
+   `(xref-line-number ((,class :foreground ,fg-alt)))
+   `(xref-match ((,class :inherit match)))
+;;;;; yaml-mode
+   `(yaml-tab-face ((,class :inherit modus-theme-intense-red)))
+;;;;; yasnippet
+   `(yas-field-highlight-face ((,class :background ,bg-alt :foreground 
,fg-main)))
+;;;;; ztree
+   `(ztreep-arrow-face ((,class :foreground ,fg-inactive)))
+   `(ztreep-diff-header-face ((,class :inherit bold :height 1.2 :foreground 
,fg-special-cold)))
+   `(ztreep-diff-header-small-face ((,class :inherit bold :foreground 
,fg-special-mild)))
+   `(ztreep-diff-model-add-face ((,class :foreground ,green)))
+   `(ztreep-diff-model-diff-face ((,class :foreground ,red)))
+   `(ztreep-diff-model-ignored-face ((,class :foreground ,fg-alt 
:strike-through t)))
+   `(ztreep-diff-model-normal-face ((,class :foreground ,fg-alt)))
+   `(ztreep-expand-sign-face ((,class :foreground ,blue)))
+   `(ztreep-header-face ((,class :inherit bold :height 1.2 :foreground 
,fg-special-cold)))
+   `(ztreep-leaf-face ((,class :foreground ,cyan)))
+   `(ztreep-node-count-children-face ((,class :foreground ,fg-special-warm)))
+   `(ztreep-node-face ((,class :foreground ,fg-main))))
+;;;; Emacs 27+
+  ;; EXPERIMENTAL this form is subject to review
+  (when (>= emacs-major-version 27)
+    (custom-theme-set-faces
+     'modus-operandi
+;;;;; line numbers (`display-line-numbers-mode' and global variant)
+     ;; NOTE that this is specifically for the faces that were
+     ;; introduced in Emacs 27, as the other faces are already
+     ;; supported.
+     `(line-number-major-tick ((,class (:background ,yellow-nuanced-bg 
:foreground ,yellow-nuanced))))
+     `(line-number-minor-tick ((,class (:background ,cyan-nuanced-bg 
:foreground ,cyan-nuanced))))
+;;;;; tab-bar-mode
+     `(tab-bar ((,class :background ,bg-tab-bar :foreground ,fg-main)))
+     `(tab-bar-tab ((,class :inherit bold :box (:line-width 2 :color 
,bg-tab-active)
+                            :background ,bg-tab-active :foreground ,fg-main)))
+     `(tab-bar-tab-inactive ((,class :box (:line-width 2 :color 
,bg-tab-inactive)
+                                     :background ,bg-tab-inactive :foreground 
,fg-dim)))
+;;;;; tab-line-mode
+     `(tab-line ((,class :height 0.95 :background ,bg-tab-bar :foreground 
,fg-main)))
+     `(tab-line-close-highlight ((,class :foreground ,red)))
+     `(tab-line-highlight ((,class :background ,blue-subtle-bg :foreground 
,fg-dim)))
+     `(tab-line-tab ((,class :inherit bold :box (:line-width 2 :color 
,bg-tab-active)
+                             :background ,bg-tab-active :foreground ,fg-main)))
+     `(tab-line-tab-current ((,class :inherit tab-line-tab)))
+     `(tab-line-tab-inactive ((,class :box (:line-width 2 :color 
,bg-tab-inactive)
+                                      :background ,bg-tab-inactive :foreground 
,fg-dim)))))
+;;; variables
+  (custom-theme-set-variables
+   'modus-operandi
+;;;; ansi-colors
+   `(ansi-color-faces-vector [default bold shadow italic underline success 
warning error])
+   `(ansi-color-names-vector [,fg-main ,red ,green ,yellow ,blue ,magenta 
,cyan ,bg-main])
+;;;; flymake fringe indicators
+   `(flymake-error-bitmap '(flymake-double-exclamation-mark 
modus-theme-fringe-red))
+   `(flymake-warning-bitmap '(exclamation-mark modus-theme-fringe-yellow))
+   `(flymake-note-bitmap '(exclamation-mark modus-theme-fringe-cyan))
+;;;; ibuffer
+   `(ibuffer-deletion-face 'modus-theme-mark-del)
+   `(ibuffer-filter-group-name-face 'modus-theme-mark-symbol)
+   `(ibuffer-marked-face 'modus-theme-mark-sel)
+   `(ibuffer-title-face 'modus-theme-header)
+;;;; highlight-tail
+   `(highlight-tail-colors
+     '((,green-subtle-bg . 0)
+       (,cyan-subtle-bg . 20)))
+;;;; hl-todo
+   `(hl-todo-keyword-faces
+     '(("HOLD" . ,yellow-alt)
+       ("TODO" . ,magenta)
+       ("NEXT" . ,magenta-alt-other)
+       ("THEM" . ,magenta-alt)
+       ("PROG" . ,cyan)
+       ("OKAY" . ,cyan-alt)
+       ("DONT" . ,green-alt)
+       ("FAIL" . ,red)
+       ("BUG" . ,red)
+       ("DONE" . ,green)
+       ("NOTE" . ,yellow-alt-other)
+       ("KLUDGE" . ,yellow)
+       ("HACK" . ,yellow)
+       ("TEMP" . ,red-nuanced)
+       ("FIXME" . ,red-alt-other)
+       ("XXX+" . ,red-alt)
+       ("REVIEW" . ,cyan-alt-other)
+       ("DEPRECATED" . ,blue-nuanced)))
+;;;; vc-annotate (C-x v g)
+   `(vc-annotate-background nil)
+   `(vc-annotate-background-mode nil)
+   `(vc-annotate-color-map
+     '((20 . ,red)
+       (40 . ,magenta)
+       (60 . ,magenta-alt)
+       (80 . ,red-alt)
+       (100 . ,yellow)
+       (120 . ,yellow-alt)
+       (140 . ,fg-special-warm)
+       (160 . ,fg-special-mild)
+       (180 . ,green)
+       (200 . ,green-alt)
+       (220 . ,cyan-alt-other)
+       (240 . ,cyan-alt)
+       (260 . ,cyan)
+       (280 . ,fg-special-cold)
+       (300 . ,blue)
+       (320 . ,blue-alt)
+       (340 . ,blue-alt-other)
+       (360 . ,magenta-alt-other)))
+   `(vc-annotate-very-old-color nil)
+;;;; xterm-color
+   `(xterm-color-names [,fg-main ,red ,green ,yellow ,blue ,magenta ,cyan 
,bg-alt])
+   `(xterm-color-names-bright [,fg-alt ,red-alt ,green-alt ,yellow-alt 
,blue-alt ,magenta-alt ,cyan-alt ,bg-main]))
+;;; Conditional theme variables
+;;;; org-src-block-faces
+  ;; this is a user option to add a colour-coded background to source
+  ;; blocks for various programming languages
+  (when (eq modus-operandi-theme-org-blocks 'rainbow)
+    (custom-theme-set-variables
+     'modus-operandi
+     `(org-src-block-faces              ; TODO this list should be expanded
+       `(("emacs-lisp" modus-theme-nuanced-magenta)
+         ("elisp" modus-theme-nuanced-magenta)
+         ("clojure" modus-theme-nuanced-magenta)
+         ("clojurescript" modus-theme-nuanced-magenta)
+         ("c" modus-theme-nuanced-blue)
+         ("c++" modus-theme-nuanced-blue)
+         ("sh" modus-theme-nuanced-green)
+         ("shell" modus-theme-nuanced-green)
+         ("html" modus-theme-nuanced-yellow)
+         ("xml" modus-theme-nuanced-yellow)
+         ("css" modus-theme-nuanced-red)
+         ("scss" modus-theme-nuanced-red)
+         ("python" modus-theme-nuanced-green)
+         ("ipython" modus-theme-nuanced-magenta)
+         ("r" modus-theme-nuanced-cyan)
+         ("yaml" modus-theme-nuanced-cyan)
+         ("conf" modus-theme-nuanced-cyan)
+         ("docker" modus-theme-nuanced-cyan)
+         ("json" modus-theme-nuanced-cyan))))))
+
+;;; library provides
+;;;###autoload
+(when load-file-name
+  (add-to-list 'custom-theme-load-path
+               (file-name-as-directory (file-name-directory load-file-name))))
+
+(provide-theme 'modus-operandi)
+
+(provide 'modus-operandi-theme)
+
+;;; modus-operandi-theme.el ends here
diff --git a/etc/themes/modus-vivendi-theme.el 
b/etc/themes/modus-vivendi-theme.el
new file mode 100644
index 0000000..fa1b6be
--- /dev/null
+++ b/etc/themes/modus-vivendi-theme.el
@@ -0,0 +1,4266 @@
+;;; modus-vivendi-theme.el --- Accessible dark theme (WCAG AAA) -*- 
lexical-binding:t -*-
+
+;; Copyright (c) 2019-2020 Free Software Foundation, Inc.
+
+;; Author: Protesilaos Stavrou <info@protesilaos.com>
+;; URL: https://gitlab.com/protesilaos/modus-themes
+;; Version: 0.12.0
+;; Package-Requires: ((emacs "26.1"))
+;; Keywords: faces, theme, accessibility
+
+;; This file is part of GNU Emacs.
+
+;; This program is free software; you can redistribute it and/or
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+;;
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with this program.  If not, see <https://www.gnu.org/licenses/>.
+
+;;; Commentary:
+;;
+;; This theme is designed for colour-contrast accessibility.
+;;
+;; 1. Provide a consistent minimum contrast ratio between background and
+;; foreground values of 7:1 or higher.  This meets the highest such
+;; accessibility criterion per the guidelines of the Worldwide Web
+;; Consortium's Working Group on Accessibility (WCAG AAA standard).
+;;
+;; 2. Offer as close to full face coverage as possible.  The list is
+;; already quite long (see further below), with more additions to follow
+;; as part of the ongoing development process.
+;;
+;; The theme provides the following customisation options, all of which
+;; are disabled by default:
+;;
+;;     modus-vivendi-theme-slanted-constructs             (boolean)
+;;     modus-vivendi-theme-bold-constructs                (boolean)
+;;     modus-vivendi-theme-variable-pitch-headings        (boolean)
+;;     modus-vivendi-theme-rainbow-headings               (boolean)
+;;     modus-vivendi-theme-section-headings               (boolean)
+;;     modus-vivendi-theme-scale-headings                 (boolean)
+;;     modus-vivendi-theme-fringes                        (choice)
+;;     modus-vivendi-theme-org-blocks                     (choice)
+;;     modus-vivendi-theme-prompts                        (choice)
+;;     modus-vivendi-theme-3d-modeline                    (boolean)
+;;     modus-vivendi-theme-subtle-diffs                   (boolean)
+;;     modus-vivendi-theme-faint-syntax                   (boolean)
+;;     modus-vivendi-theme-intense-hl-line                (boolean)
+;;     modus-vivendi-theme-intense-paren-match            (boolean)
+;;     modus-vivendi-theme-completions                    (choice)
+;;     modus-vivendi-theme-override-colors-alist          (alist)
+;;
+;; The default scale is as follows (it can be customised as well):
+;;
+;;     modus-vivendi-theme-scale-1 1.05
+;;     modus-vivendi-theme-scale-2 1.1
+;;     modus-vivendi-theme-scale-3 1.15
+;;     modus-vivendi-theme-scale-4 1.2
+;;     modus-vivendi-theme-scale-5 1.3
+;;
+;; What follows is the list of explicitly supported packages or face
+;; groups (there are implicitly supported packages as well, which
+;; inherit from font-lock or some basic group).  You are encouraged to
+;; notify me of any missing package or change you would like to see.
+;;
+;;     ace-window
+;;     ag
+;;     alert
+;;     all-the-icons
+;;     annotate
+;;     anzu
+;;     apropos
+;;     apt-sources-list
+;;     artbollocks-mode
+;;     auctex and TeX
+;;     auto-dim-other-buffers
+;;     avy
+;;     bm
+;;     bongo
+;;     boon
+;;     breakpoint (provided by built-in gdb-mi.el)
+;;     buffer-expose
+;;     calendar and diary
+;;     calfw
+;;     centaur-tabs
+;;     change-log and log-view (`vc-print-log' and `vc-print-root-log')
+;;     cider
+;;     circe
+;;     color-rg
+;;     column-enforce-mode
+;;     company-mode
+;;     company-posframe
+;;     compilation-mode
+;;     completions
+;;     counsel
+;;     counsel-css
+;;     counsel-notmuch
+;;     counsel-org-capture-string
+;;     cov
+;;     csv-mode
+;;     ctrlf
+;;     custom (M-x customize)
+;;     dap-mode
+;;     dashboard (emacs-dashboard)
+;;     deadgrep
+;;     debbugs
+;;     define-word
+;;     deft
+;;     dictionary
+;;     diff-hl
+;;     diff-mode
+;;     dim-autoload
+;;     dired
+;;     dired-async
+;;     dired-git
+;;     dired-git-info
+;;     dired-narrow
+;;     dired-subtree
+;;     diredfl
+;;     disk-usage
+;;     doom-modeline
+;;     dynamic-ruler
+;;     easy-jekyll
+;;     easy-kill
+;;     ebdb
+;;     ediff
+;;     eglot
+;;     el-search
+;;     eldoc-box
+;;     elfeed
+;;     elfeed-score
+;;     emms
+;;     enhanced-ruby-mode
+;;     epa
+;;     equake
+;;     erc
+;;     eros
+;;     ert
+;;     eshell
+;;     eshell-fringe-status
+;;     eshell-git-prompt
+;;     eshell-prompt-extras (epe)
+;;     evil (evil-mode)
+;;     evil-goggles
+;;     evil-visual-mark-mode
+;;     eww
+;;     eyebrowse
+;;     fancy-dabbrev
+;;     flycheck
+;;     flycheck-indicator
+;;     flycheck-posframe
+;;     flymake
+;;     flyspell
+;;     flyspell-correct
+;;     flx
+;;     freeze-it
+;;     frog-menu
+;;     focus
+;;     fold-this
+;;     font-lock (generic syntax highlighting)
+;;     forge
+;;     fountain (fountain-mode)
+;;     geiser
+;;     git-commit
+;;     git-gutter (and variants)
+;;     git-lens
+;;     git-rebase
+;;     git-timemachine
+;;     git-walktree
+;;     gnus
+;;     golden-ratio-scroll-screen
+;;     helm
+;;     helm-ls-git
+;;     helm-switch-shell
+;;     helm-xref
+;;     helpful
+;;     highlight-blocks
+;;     highlight-defined
+;;     highlight-escape-sequences (`hes-mode')
+;;     highlight-indentation
+;;     highlight-numbers
+;;     highlight-symbol
+;;     highlight-tail
+;;     highlight-thing
+;;     hl-defined
+;;     hl-fill-column
+;;     hl-line-mode
+;;     hl-todo
+;;     hydra
+;;     hyperlist
+;;     ibuffer
+;;     icomplete
+;;     ido-mode
+;;     iedit
+;;     iflipb
+;;     imenu-list
+;;     indium
+;;     info
+;;     info-colors
+;;     interaction-log
+;;     ioccur
+;;     isearch, occur, etc.
+;;     ivy
+;;     ivy-posframe
+;;     jira (org-jira)
+;;     journalctl-mode
+;;     js2-mode
+;;     julia
+;;     jupyter
+;;     kaocha-runner
+;;     keycast
+;;     line numbers (`display-line-numbers-mode' and global variant)
+;;     lsp-mode
+;;     lsp-ui
+;;     magit
+;;     magit-imerge
+;;     man
+;;     markdown-mode
+;;     markup-faces (`adoc-mode')
+;;     mentor
+;;     messages
+;;     minibuffer-line
+;;     minimap
+;;     modeline
+;;     mood-line
+;;     mu4e
+;;     mu4e-conversation
+;;     multiple-cursors
+;;     neotree
+;;     no-emoji
+;;     notmuch
+;;     num3-mode
+;;     nxml-mode
+;;     orderless
+;;     org
+;;     org-journal
+;;     org-noter
+;;     org-pomodoro
+;;     org-recur
+;;     org-roam
+;;     org-superstar
+;;     org-table-sticky-header
+;;     org-treescope
+;;     origami
+;;     outline-mode
+;;     outline-minor-faces
+;;     package (M-x list-packages)
+;;     page-break-lines
+;;     paradox
+;;     paren-face
+;;     parrot
+;;     pass
+;;     persp-mode
+;;     perspective
+;;     phi-grep
+;;     phi-search
+;;     pkgbuild-mode
+;;     pomidor
+;;     powerline
+;;     powerline-evil
+;;     proced
+;;     prodigy
+;;     rainbow-blocks
+;;     rainbow-identifiers
+;;     rainbow-delimiters
+;;     rcirc
+;;     regexp-builder (also known as `re-builder')
+;;     rg
+;;     ripgrep
+;;     rmail
+;;     ruler-mode
+;;     sallet
+;;     selectrum
+;;     semantic
+;;     sesman
+;;     shell-script-mode
+;;     show-paren-mode
+;;     side-notes
+;;     skewer-mode
+;;     smart-mode-line
+;;     smartparens
+;;     smerge
+;;     spaceline
+;;     speedbar
+;;     spell-fu
+;;     stripes
+;;     suggest
+;;     switch-window
+;;     swiper
+;;     swoop
+;;     sx
+;;     symbol-overlay
+;;     tab-bar-mode
+;;     tab-line-mode
+;;     syslog-mode
+;;     table (built-in table.el)
+;;     telephone-line
+;;     term
+;;     tomatinho
+;;     transient (pop-up windows like Magit's)
+;;     trashed
+;;     treemacs
+;;     tty-menu
+;;     tuareg
+;;     undo-tree
+;;     vc (built-in mode line status for version control)
+;;     vc-annotate (C-x v g)
+;;     vdiff
+;;     vimish-fold
+;;     visible-mark
+;;     visual-regexp
+;;     volatile-highlights
+;;     vterm
+;;     wcheck-mode
+;;     web-mode
+;;     wgrep
+;;     which-function-mode
+;;     which-key
+;;     whitespace-mode
+;;     window-divider-mode
+;;     winum
+;;     writegood-mode
+;;     woman
+;;     xah-elisp-mode
+;;     xref
+;;     xterm-color (and ansi-colors)
+;;     yaml-mode
+;;     yasnippet
+;;     ztree
+
+;;; Code:
+
+
+
+(deftheme modus-vivendi
+  "Dark theme that conforms with the highest accessibility
+  standard for colour contrast between background and
+  foreground elements (WCAG AAA).")
+
+;;; Custom faces
+
+;; These faces will be inherited by actual constructs.  They are meant
+;; for those cases where a face needs to distinguish its output from
+;; the rest of the text, such as `isearch' and `occur'…  We define
+;; these separately in order to combine each colour with its
+;; appropriate foreground value.  This is to ensure a consistent
+;; contrast ratio of >= 7:1.
+(defgroup modus-theme ()
+  "Theme that ensures WCAG AAA accessibility (contrast ratio
+between foreground and background is >= 7:1)."
+  :group 'faces
+  :prefix "modus-theme-"
+  :link '(url-link :tag "GitLab" "https://gitlab.com/protesilaos/modus-themes";)
+  :tag "Modus Vivendi")
+
+(defface modus-theme-subtle-red nil nil)
+(defface modus-theme-subtle-green nil nil)
+(defface modus-theme-subtle-yellow nil nil)
+(defface modus-theme-subtle-blue nil nil)
+(defface modus-theme-subtle-magenta nil nil)
+(defface modus-theme-subtle-cyan nil nil)
+(defface modus-theme-subtle-neutral nil nil)
+(defface modus-theme-intense-red nil nil)
+(defface modus-theme-intense-green nil nil)
+(defface modus-theme-intense-yellow nil nil)
+(defface modus-theme-intense-blue nil nil)
+(defface modus-theme-intense-magenta nil nil)
+(defface modus-theme-intense-cyan nil nil)
+(defface modus-theme-intense-neutral nil nil)
+(defface modus-theme-refine-red nil nil)
+(defface modus-theme-refine-green nil nil)
+(defface modus-theme-refine-yellow nil nil)
+(defface modus-theme-refine-blue nil nil)
+(defface modus-theme-refine-magenta nil nil)
+(defface modus-theme-refine-cyan nil nil)
+(defface modus-theme-active-red nil nil)
+(defface modus-theme-active-green nil nil)
+(defface modus-theme-active-yellow nil nil)
+(defface modus-theme-active-blue nil nil)
+(defface modus-theme-active-magenta nil nil)
+(defface modus-theme-active-cyan nil nil)
+(defface modus-theme-fringe-red nil nil)
+(defface modus-theme-fringe-green nil nil)
+(defface modus-theme-fringe-yellow nil nil)
+(defface modus-theme-fringe-blue nil nil)
+(defface modus-theme-fringe-magenta nil nil)
+(defface modus-theme-fringe-cyan nil nil)
+(defface modus-theme-nuanced-red nil nil)
+(defface modus-theme-nuanced-green nil nil)
+(defface modus-theme-nuanced-yellow nil nil)
+(defface modus-theme-nuanced-blue nil nil)
+(defface modus-theme-nuanced-magenta nil nil)
+(defface modus-theme-nuanced-cyan nil nil)
+(defface modus-theme-special-cold nil nil)
+(defface modus-theme-special-mild nil nil)
+(defface modus-theme-special-warm nil nil)
+(defface modus-theme-special-calm nil nil)
+(defface modus-theme-diff-added nil nil)
+(defface modus-theme-diff-changed nil nil)
+(defface modus-theme-diff-removed nil nil)
+(defface modus-theme-diff-refine-added nil nil)
+(defface modus-theme-diff-refine-changed nil nil)
+(defface modus-theme-diff-refine-removed nil nil)
+(defface modus-theme-diff-focus-added nil nil)
+(defface modus-theme-diff-focus-changed nil nil)
+(defface modus-theme-diff-focus-removed nil nil)
+(defface modus-theme-diff-heading nil nil)
+(defface modus-theme-header nil nil)    ; Name is tentative
+(defface modus-theme-mark-alt nil nil)
+(defface modus-theme-mark-del nil nil)
+(defface modus-theme-mark-sel nil nil)
+(defface modus-theme-mark-symbol nil nil)
+(defface modus-theme-hl-line nil nil)
+
+;;; Customisation options
+
+;; User-facing customisation options.  They are all deactivated by
+;; default (users must opt in).
+(defcustom modus-vivendi-theme-slanted-constructs nil
+  "Use slanted text in more code constructs (italics or oblique)."
+  :type 'boolean)
+
+(defcustom modus-vivendi-theme-bold-constructs nil
+  "Use bold text in more code constructs."
+  :type 'boolean)
+
+(define-obsolete-variable-alias 'modus-vivendi-theme-proportional-fonts
+  'modus-vivendi-theme-variable-pitch-headings "`modus-vivendi-theme' 0.11.0")
+
+(defcustom modus-vivendi-theme-proportional-fonts nil
+  "Use proportional fonts (variable-pitch) in headings."
+  :type 'boolean)
+
+(defcustom modus-vivendi-theme-variable-pitch-headings nil
+  "Use proportional fonts (variable-pitch) in headings."
+  :type 'boolean)
+
+(defcustom modus-vivendi-theme-rainbow-headings nil
+  "Use more saturated colours for headings."
+  :type 'boolean)
+
+(defcustom modus-vivendi-theme-section-headings nil
+  "Use a background and an overline in headings."
+  :type 'boolean)
+
+(defcustom modus-vivendi-theme-scale-headings nil
+  "Use font scaling for headings."
+  :type 'boolean)
+
+(defcustom modus-vivendi-theme-scale-1 1.05
+  "Font size that is slightly larger than the base value.
+The default is a floating point that is interpreted as a multiple
+of the base font size.  However, the variable also accepts an
+integer, understood as an absolute height (e.g. a value of 140 is
+the same as setting the font at 14 point size).
+
+For more on the matter, read the documentation of
+`set-face-attribute', specifically the ':height' section."
+  :type 'number)
+
+(defcustom modus-vivendi-theme-scale-2 1.1
+  "Font size slightly larger than `modus-vivendi-theme-scale-1'.
+The default is a floating point that is interpreted as a multiple
+of the base font size.  However, the variable also accepts an
+integer, understood as an absolute height (e.g. a value of 140 is
+the same as setting the font at 14 point size).
+
+For more on the matter, read the documentation of
+`set-face-attribute', specifically the ':height' section."
+  :type 'number)
+
+(defcustom modus-vivendi-theme-scale-3 1.15
+  "Font size slightly larger than `modus-vivendi-theme-scale-2'.
+The default is a floating point that is interpreted as a multiple
+of the base font size.  However, the variable also accepts an
+integer, understood as an absolute height (e.g. a value of 140 is
+the same as setting the font at 14 point size).
+
+For more on the matter, read the documentation of
+`set-face-attribute', specifically the ':height' section."
+  :type 'number)
+
+(defcustom modus-vivendi-theme-scale-4 1.2
+  "Font size slightly larger than `modus-vivendi-theme-scale-3'.
+The default is a floating point that is interpreted as a multiple
+of the base font size.  However, the variable also accepts an
+integer, understood as an absolute height (e.g. a value of 140 is
+the same as setting the font at 14 point size).
+
+For more on the matter, read the documentation of
+`set-face-attribute', specifically the ':height' section."
+  :type 'number)
+
+(defcustom modus-vivendi-theme-scale-5 1.3
+  "Font size slightly larger than `modus-vivendi-theme-scale-4'.
+The default is a floating point that is interpreted as a multiple
+of the base font size.  However, the variable also accepts an
+integer, understood as an absolute height (e.g. a value of 140 is
+the same as setting the font at 14 point size).
+
+For more on the matter, read the documentation of
+`set-face-attribute', specifically the ':height' section."
+  :type 'number)
+
+(define-obsolete-variable-alias 'modus-vivendi-theme-visible-fringes
+  'modus-vivendi-theme-fringes "`modus-vivendi-theme' 0.12.0")
+
+(defcustom modus-vivendi-theme-visible-fringes nil
+  "Use a visible style for fringes."
+  :type 'boolean)
+
+(defcustom modus-vivendi-theme-fringes nil
+  "Define the visibility of fringes.
+
+Nil means the fringes have no background colour.  Option `subtle'
+will apply a greyscale value that is visible yet close to the
+main buffer background colour.  Option `intense' will use a more
+pronounced greyscale value."
+  :type '(choice
+          (const :tag "No visible fringes (default)" nil)
+          (const :tag "Subtle greyscale background" subtle)
+          (const :tag "Intense greyscale background" intense)))
+
+(define-obsolete-variable-alias 'modus-vivendi-theme-distinct-org-blocks
+  'modus-vivendi-theme-org-blocks "`modus-vivendi-theme' 0.11.0")
+
+(defcustom modus-vivendi-theme-distinct-org-blocks nil
+  "Use a distinct neutral background for `org-mode' blocks."
+  :type 'boolean)
+
+(define-obsolete-variable-alias 'modus-vivendi-theme-rainbow-org-src-blocks
+  'modus-vivendi-theme-org-blocks "`modus-vivendi-theme' 0.11.0")
+
+(defcustom modus-vivendi-theme-rainbow-org-src-blocks nil
+  "Use colour-coded backgrounds for `org-mode' source blocks.
+The colour in use depends on the language (send feedback to
+include more languages)."
+  :type 'boolean)
+
+(defcustom modus-vivendi-theme-org-blocks nil
+  "Use a subtle grey or colour-coded background for Org blocks.
+
+Nil means that the block will have no background of its own and
+will use the default that applies to the rest of the buffer.
+
+Option `greyscale' will apply a subtle neutral grey background to
+the block's contents.  It also affects the begin and end lines of
+the block: their background will be extended to the edge of the
+window for Emacs version >= 27 where the ':extend' keyword is
+recognised by `set-face-attribute'.
+
+Option `rainbow' will use an accented background for the contents
+of the block.  The exact colour will depend on the programming
+language and is controlled by the `org-src-block-faces'
+variable (refer to the theme's source code for the current
+association list)."
+  :type '(choice
+          (const :tag "No Org block background (default)" nil)
+          (const :tag "Subtle grey block background" greyscale)
+          (const :tag "Colour-coded background per programming language" 
rainbow)))
+
+(defcustom modus-vivendi-theme-3d-modeline nil
+  "Use a three-dimensional style for the active mode line."
+  :type 'boolean)
+
+(defcustom modus-vivendi-theme-subtle-diffs nil
+  "Use fewer/dim backgrounds in `diff-mode', `ediff',`magit'."
+  :type 'boolean)
+
+(define-obsolete-variable-alias 
'modus-vivendi-theme-intense-standard-completions
+  'modus-vivendi-theme-completions "`modus-vivendi-theme' 0.12.0")
+
+(defcustom modus-vivendi-theme-intense-standard-completions nil
+  "Use prominent backgrounds for Icomplete, Ido, or similar."
+  :type 'boolean)
+
+(defcustom modus-vivendi-theme-completions nil
+  "Apply special styles to the UI of completion frameworks.
+This concerns Icomplete, Ivy, Helm, Selectrum, Ido, as well as
+any other tool meant to enhance their experience.  The effect
+will vary depending on the completion framework.
+
+Nil means to remain faithful to the metaphors that each UI
+establishes.  For example, Icomplete and Ido only use foreground
+colours to style their matches, whereas Ivy or Helm rely on an
+aesthetic that combines coloured backgrounds with appropriate
+text colour.
+
+Option `moderate' will apply a combination of background and
+foreground that is fairly subtle.  For Icomplete and the like,
+this constitutes a departure from their standard style.  While
+Ivy, Helm, and the others, will use less pronounced colours for
+applicable contexts.
+
+Option `opinionated' will apply colour combinations that
+refashion the completion UI.  So Icomplete et al will now use
+styles that resemble the defaults of Ivy and co., while the
+latter group will revert to an even more nuanced aesthetic."
+  :type '(choice
+          (const :tag "Respect the framework's established aesthetic 
(default)" nil)
+          (const :tag "Subtle backgrounds for various elements" moderate)
+          (const :tag "Radical alternative to the framework's looks" 
opinionated)))
+
+(defcustom modus-vivendi-theme-prompts nil
+  "Use subtle or intense styles for minibuffer and REPL prompts.
+
+Nil means to only use an accented foreground colour.
+
+Options `subtle' and `intense' will change both the background
+and the foreground values.  The latter has a more pronounced
+effect than the former."
+  :type '(choice
+          (const :tag "No prompt background (default)" nil)
+          (const :tag "Subtle accented background for the prompt" subtle)
+          (const :tag "Intense background and foreground for the prompt" 
intense)))
+
+(defcustom modus-vivendi-theme-intense-hl-line nil
+  "Use more prominent background for `hl-line-mode'."
+  :type 'boolean)
+
+(defcustom modus-vivendi-theme-intense-paren-match nil
+  "Use more prominent colour for parenthesis matching."
+  :type 'boolean)
+
+(defcustom modus-vivendi-theme-faint-syntax nil
+  "Use less saturated colours for code syntax highlighting."
+  :type 'boolean)
+
+;;; Internal functions
+
+;; Helper functions that are meant to ease the implementation of the
+;; above customisation options.
+(defun modus-vivendi-theme-bold-weight ()
+  "Conditional use of a heavier text weight."
+  (when modus-vivendi-theme-bold-constructs
+    (list :inherit 'bold)))
+
+(defun modus-vivendi-theme-fringe (subtlebg intensebg)
+  "Conditional use of background colours for fringes.
+SUBTLEBG should be a subtle greyscale value.  INTENSEBG must be a
+more pronounced greyscale colour."
+  (pcase modus-vivendi-theme-fringes
+    ('intense (list :background intensebg))
+    ('subtle (list :background subtlebg))
+    (_ (list :background nil))))
+
+(defun modus-vivendi-theme-prompt (mainfg subtlebg subtlefg intensebg 
intensefg)
+  "Conditional use of background colours for prompts.
+MAINFG is the prompt's standard foreground.  SUBTLEBG should be a
+subtle accented background that works with SUBTLEFG.  INTENSEBG
+must be a more pronounced accented colour that should be
+combinable with INTENSEFG."
+  (pcase modus-vivendi-theme-prompts
+    ('intense (list :background intensebg :foreground intensefg))
+    ('subtle (list :background subtlebg :foreground subtlefg))
+    (_ (list :background nil :foreground mainfg))))
+
+(defun modus-vivendi-theme-paren (normalbg intensebg)
+  "Conditional use of intense colours for matching parentheses.
+NORMALBG should the special palette colour 'bg-paren-match' or
+something similar.  INTENSEBG must be easier to discern next to
+other backgrounds, such as the special palette colour
+'bg-paren-match-intense'."
+  (if modus-vivendi-theme-intense-paren-match
+      (list :background intensebg)
+    (list :background normalbg)))
+
+(defun modus-vivendi-theme-syntax-foreground (normal faint)
+  "Apply foreground value to code syntax.
+NORMAL is the more saturated colour, which should be the default.
+FAINT is the less saturated colour."
+  (if modus-vivendi-theme-faint-syntax
+      (list :foreground faint)
+    (list :foreground normal)))
+
+(defun modus-vivendi-theme-heading-foreground (subtle rainbow)
+  "Apply foreground value to headings.
+SUBTLE is the default aesthetic.  RAINBOW is the saturated one."
+  (if modus-vivendi-theme-rainbow-headings
+      (list :foreground rainbow)
+    (list :foreground subtle)))
+
+(defun modus-vivendi-theme-heading-block (bg fg)
+  "Conditionally extend heading styles.
+Apply BG to background and FG to overline."
+  (if modus-vivendi-theme-section-headings
+      (append
+       (and (>= emacs-major-version 27) '(:extend t))
+       (list :background bg :overline fg))
+    (list :background nil :overline nil)))
+
+(defun modus-vivendi-theme-org-todo-block (bgbox fgbox fg)
+  "Conditionally extend the styles of Org keywords.
+BGBOX applies to the background.  FGBOX applies to the foreground
+and the border.  FG is used when no block style is in effect."
+  (if modus-vivendi-theme-section-headings
+      (list :background bgbox :foreground fgbox :box (list :color fgbox))
+    (list :foreground fg)))
+
+(defun modus-vivendi-theme-org-block (bgblk)
+  "Conditionally set the background of Org blocks.
+BGBLK applies to a distinct neutral background.  Else blocks have
+no background of their own (the default), so they look the same
+as the rest of the buffer.
+
+`modus-vivendi-theme-org-blocks' also accepts a `rainbow' option
+which is applied conditionally to `org-src-block-faces' (see the
+theme's source code)."
+  (if (eq modus-vivendi-theme-org-blocks 'greyscale)
+      (append
+       (and (>= emacs-major-version 27) '(:extend t))
+       (list :background bgblk))
+    (list :background nil)))
+
+(defun modus-vivendi-theme-org-block-delim (bgaccent fgaccent bg fg)
+  "Conditionally set the styles of Org block delimiters.
+BG, FG, BGACCENT, FGACCENT apply a background and foreground
+colour respectively.
+
+The former pair is a greyscale combination that should be more
+distinct than the background of the block.  It is applied to the
+default styles or when `modus-vivendi-theme-org-blocks' is set
+to `greyscale'.
+
+The latter pair should be more subtle than the background of the
+block, as it is used when `modus-vivendi-theme-org-blocks' is
+set to `rainbow'."
+  (pcase modus-vivendi-theme-org-blocks
+    ('greyscale (append (and (>= emacs-major-version 27) '(:extend t))
+                        (list :background bg :foreground fg)))
+    ('rainbow (list :background bgaccent :foreground fgaccent))
+    (_ (list :background bg :foreground fg))))
+
+(defun modus-vivendi-theme-modeline-box (col3d col &optional btn int)
+  "Control the box properties of the mode line.
+COL3D is the border that is intended for the three-dimensional
+modeline.  COL applies to the two-dimensional modeline.  Optional
+BTN provides the 3d button style.  Optional INT defines a border
+width."
+  (let* ((style (if btn 'released-button nil))
+         (int (if int int 1)))
+    (if modus-vivendi-theme-3d-modeline
+        (list :line-width int :color col3d :style style)
+      (list :line-width 1 :color col :style nil))))
+
+(defun modus-vivendi-theme-modeline-props (bg3d fg3d &optional bg fg)
+  "Control the background and foreground of the mode line.
+BG is the modeline's background.  FG is the modeline's
+foreground.  BG3D and FG3D apply to the three-dimensional
+modeline style."
+  (if modus-vivendi-theme-3d-modeline
+      (list :background bg3d :foreground fg3d)
+    (list :background bg :foreground fg)))
+
+(defun modus-vivendi-theme-diffs (subtle-bg subtle-fg intense-bg intense-fg)
+  "Colour combinations for `modus-vivendi-theme-subtle-diffs'.
+
+SUBTLE-BG should be similar or the same as the main background.
+SUBTLE-FG should be an appropriate accent value.  INTENSE-BG
+should be one of the dedicated backgrounds for diffs.  INTENSE-FG
+should be one of the dedicated foregrounds for diffs"
+  (if modus-vivendi-theme-subtle-diffs
+      (list :background subtle-bg :foreground subtle-fg)
+    (list :background intense-bg :foreground intense-fg)))
+
+(defun modus-vivendi-theme-standard-completions (mainfg subtlebg intensebg 
intensefg)
+  "Combinations for `modus-vivendi-theme-completions'.
+These are intended for Icomplete, Ido, and related.
+
+MAINFG is an accented foreground value.  SUBTLEBG is an accented
+background value that can be combined with MAINFG.  INTENSEBG and
+INTENSEFG are accented colours that are designed to be used in
+tandem."
+  (pcase modus-vivendi-theme-completions
+    ('opinionated (list :background intensebg :foreground intensefg))
+    ('moderate (list :background subtlebg :foreground mainfg))
+    (_ (list :foreground mainfg))))
+
+(defun modus-vivendi-theme-extra-completions (subtleface intenseface altface 
&optional altfg bold)
+  "Combinations for `modus-vivendi-theme-completions'.
+These are intended for Helm, Ivy, Selectrum, etc.
+
+SUBTLEFACE and INTENSEFACE are custom theme faces that combine a
+background and foreground value.  The difference between the two
+is a matter of degree.
+
+ALTFACE is a combination of colours that represents a departure
+from the UI's default aesthetics.  Optional ALTFG is meant to be
+used in tandem with it.
+
+Optional BOLD will apply a heavier weight to the text."
+  (pcase modus-vivendi-theme-completions
+    ('opinionated (list :inherit (list altface bold)
+                        :foreground (if altfg altfg 'unspecified)))
+    ('moderate (list :inherit (list subtleface bold)))
+    (_ (list :inherit (list intenseface bold)))))
+
+(defun modus-vivendi-theme-scale (amount)
+  "Scale heading by AMOUNT.
+
+AMOUNT is a customisation option."
+  (when modus-vivendi-theme-scale-headings
+    (list :height amount)))
+
+;;; Colour palette
+
+;; Define colour palette.  Each colour must have a >= 7:1 contrast
+;; ratio relative to the foreground/background colour it is rendered
+;; against.
+;;
+;; The design of the colour palette as a macro that maps it to faces is
+;; adapted from zenbern-theme.el, last seen at commit 7dd7968:
+;; https://github.com/bbatsov/zenburn-emacs
+(eval-and-compile
+  (defconst modus-vivendi-theme-default-colors-alist
+    '(;; base values
+      ("bg-main" . "#000000") ("fg-main" . "#ffffff")
+      ("bg-alt" . "#181a20") ("fg-alt" . "#a8a8a8")
+      ("bg-dim" . "#110b11") ("fg-dim" . "#e0e6f0")
+      ;; specifically for on/off states (e.g. `mode-line')
+      ;;
+      ;; must be combined with themselves
+      ("bg-active" . "#2f2f2f") ("fg-active" . "#f5f5f5")
+      ("bg-inactive" . "#202020") ("fg-inactive" . "#bebebe")
+      ;; special base values, used only for cases where the above
+      ;; fg-* or bg-* cannot or should not be used (to avoid confusion)
+      ;; must be combined with: {fg,bg}-{main,alt,dim}
+      ("bg-special-cold" . "#203448") ("fg-special-cold" . "#c6eaff")
+      ("bg-special-mild" . "#00322e") ("fg-special-mild" . "#bfebe0")
+      ("bg-special-warm" . "#382f27") ("fg-special-warm" . "#f8dec0")
+      ("bg-special-calm" . "#392a48") ("fg-special-calm" . "#fbd6f4")
+      ;; styles for the main constructs
+      ;;
+      ;; must be combined with: `bg-main', `bg-alt', `bg-dim'
+      ("red" . "#ff8059") ("green" . "#44bc44")
+      ("yellow" . "#eecc00") ("blue" . "#29aeff")
+      ("magenta" . "#feacd0") ("cyan" . "#00d3d0")
+      ;; styles for common, but still specialised constructs
+      ;;
+      ;; must be combined with: `bg-main', `bg-alt', `bg-dim'
+      ("red-alt" . "#f4923b") ("green-alt" . "#80d200")
+      ("yellow-alt" . "#cfdf30") ("blue-alt" . "#72a4ff")
+      ("magenta-alt" . "#f78fe7") ("cyan-alt" . "#4ae8fc")
+      ;; same purpose as above, just slight differences
+      ;;
+      ;; must be combined with: `bg-main', `bg-alt', `bg-dim'
+      ("red-alt-other" . "#ff9977") ("green-alt-other" . "#00cd68")
+      ("yellow-alt-other" . "#f0ce43") ("blue-alt-other" . "#00bdfa")
+      ("magenta-alt-other" . "#b6a0ff") ("cyan-alt-other" . "#6ae4b9")
+      ;; styles for desaturated foreground text, intended for use with
+      ;; the `modus-vivendi-theme-faint-syntax' option
+      ;;
+      ;; must be combined with: `bg-main', `bg-alt', `bg-dim'
+      ("red-faint" . "#ffa0a0") ("green-faint" . "#88cf88")
+      ("yellow-faint" . "#d2b580") ("blue-faint" . "#92baff")
+      ("magenta-faint" . "#e0b2d6") ("cyan-faint" . "#a0bfdf")
+
+      ("red-alt-faint" . "#f5aa80") ("green-alt-faint" . "#a8cf88")
+      ("yellow-alt-faint" . "#cabf77") ("blue-alt-faint" . "#a4b0ff")
+      ("magenta-alt-faint" . "#ef9fe4") ("cyan-alt-faint" . "#90c4ed")
+
+      ("red-alt-other-faint" . "#ff9fbf") ("green-alt-other-faint" . "#88cfaf")
+      ("yellow-alt-other-faint" . "#d0ba95") ("blue-alt-other-faint" . 
"#8fc5ff")
+      ("magenta-alt-other-faint" . "#d0b4ff") ("cyan-alt-other-faint" . 
"#a4d0bb")
+      ;; styles for elements that should be very subtle, yet accented
+      ;;
+      ;; must be combined with: `bg-main', `bg-alt', `bg-dim' or any of
+      ;; the "nuanced" backgrounds
+      ("red-nuanced" . "#ffcccc") ("green-nuanced" . "#b8e2b8")
+      ("yellow-nuanced" . "#dfdfb0") ("blue-nuanced" . "#bfd9ff")
+      ("magenta-nuanced" . "#e5cfef") ("cyan-nuanced" . "#a8e5e5")
+      ;; styles for slightly accented background
+      ;;
+      ;; must be combined with any of the above foreground values
+      ("red-nuanced-bg" . "#2c0614") ("green-nuanced-bg" . "#001904")
+      ("yellow-nuanced-bg" . "#221000") ("blue-nuanced-bg" . "#0f0e39")
+      ("magenta-nuanced-bg" . "#230631") ("cyan-nuanced-bg" . "#041529")
+      ;; styles for elements that should draw attention to themselves
+      ;;
+      ;; must be combined with: `bg-main'
+      ("red-intense" . "#fb6859") ("green-intense" . "#00fc50")
+      ("yellow-intense" . "#ffdd00") ("blue-intense" . "#00a2ff")
+      ("magenta-intense" . "#ff8bd4") ("cyan-intense" . "#30ffc0")
+      ;; styles for background elements that should be visible yet
+      ;; subtle
+      ;;
+      ;; must be combined with: `fg-dim'
+      ("red-subtle-bg" . "#762422") ("green-subtle-bg" . "#2f4a00")
+      ("yellow-subtle-bg" . "#604200") ("blue-subtle-bg" . "#10387c")
+      ("magenta-subtle-bg" . "#49366e") ("cyan-subtle-bg" . "#00415e")
+      ;; styles for background elements that should be visible and
+      ;; distinguishable
+      ;;
+      ;; must be combined with: `fg-main'
+      ("red-intense-bg" . "#a4202a") ("green-intense-bg" . "#006800")
+      ("yellow-intense-bg" . "#874900") ("blue-intense-bg" . "#2a40b8")
+      ("magenta-intense-bg" . "#7042a2") ("cyan-intense-bg" . "#005f88")
+      ;; styles for refined contexts where both the foreground and the
+      ;; background need to have the same/similar hue
+      ;;
+      ;; must be combined with themselves OR the foregrounds can be
+      ;; combined with any of the base backgrounds
+      ("red-refine-bg" . "#77002a") ("red-refine-fg" . "#ffb9ab")
+      ("green-refine-bg" . "#00422a") ("green-refine-fg" . "#9ff0cf")
+      ("yellow-refine-bg" . "#693200") ("yellow-refine-fg" . "#e2d980")
+      ("blue-refine-bg" . "#242679") ("blue-refine-fg" . "#8ec6ff")
+      ("magenta-refine-bg" . "#71206a") ("magenta-refine-fg" . "#ffcaf0")
+      ("cyan-refine-bg" . "#004065") ("cyan-refine-fg" . "#8ae4f2")
+      ;; styles that are meant exclusively for the mode line
+      ;;
+      ;; must be combined with: `bg-active', `bg-inactive'
+      ("red-active" . "#ffa49e") ("green-active" . "#70e030")
+      ("yellow-active" . "#efdf00") ("blue-active" . "#00ccff")
+      ("magenta-active" . "#d0acff") ("cyan-active" . "#00ddc0")
+      ;; styles that are meant exclusively for the fringes
+      ;;
+      ;; must have a minimum contrast ratio of 1.5:1 with `bg-inactive'
+      ;; and be combined with `fg-main' or `fg-dim'
+      ("red-fringe-bg" . "#8f0040") ("green-fringe-bg" . "#006000")
+      ("yellow-fringe-bg" . "#6f4a00") ("blue-fringe-bg" . "#3a30ab")
+      ("magenta-fringe-bg" . "#692089") ("cyan-fringe-bg" . "#0068a0")
+      ;; styles reserved for specific faces
+      ;;
+      ;; `bg-hl-line' is between `bg-dim' and `bg-alt', so it should
+      ;; work with all accents that cover those two, plus `bg-main'
+      ;;
+      ;; `bg-header' is between `bg-active' and `bg-inactive', so it
+      ;; can be combined with any of the "active" values, plus the
+      ;; "special" and base foreground colours
+      ;;
+      ;; `bg-paren-match', `bg-paren-match-intense', `bg-region' and
+      ;; `bg-tab-active' must be combined with `fg-main', while
+      ;; `bg-tab-inactive' should be combined with `fg-dim'
+      ;;
+      ;; `bg-tab-bar' is only intended for the bar that holds the tabs and
+      ;; can only be combined with `fg-main'
+      ;;
+      ;; `fg-tab-active' is meant to be combined with `bg-tab-active',
+      ;; though only for styling special elements, such as underlining
+      ;; the current tab
+      ;;
+      ;; `fg-escape-char-construct' and `fg-escape-char-backslash' can
+      ;; be combined `bg-main', `bg-dim', `bg-alt'
+      ;;
+      ;; `fg-lang-error', `fg-lang-warning', `fg-lang-note' can be
+      ;; combined with `bg-main', `bg-dim', `bg-alt'
+      ;;
+      ;; `fg-mark-sel', `fg-mark-del', `fg-mark-alt' can be combined
+      ;; with `bg-main', `bg-dim', `bg-alt', `bg-hl-line'
+      ;;
+      ;; `fg-unfocused' must be combined with `fg-main'
+      ;;
+      ;; the window divider colours apply to faces with just an fg value
+      ;;
+      ;; all pairs are combinable with themselves
+      ("bg-hl-line" . "#151823")
+      ("bg-paren-match" . "#5f362f")
+      ("bg-paren-match-intense" . "#255650")
+      ("bg-region" . "#3c3c3c")
+
+      ("bg-tab-bar" . "#2c2c2c")
+      ("bg-tab-active" . "#0e0e0e")
+      ("bg-tab-inactive" . "#3d3d3d")
+      ("fg-tab-active" . "#5ac3cf")
+
+      ("fg-escape-char-construct" . "#e7a59a")
+      ("fg-escape-char-backslash" . "#abab00")
+
+      ("fg-lang-error" . "#ef8690")
+      ("fg-lang-warning" . "#b0aa00")
+      ("fg-lang-note" . "#9d9def")
+
+      ("fg-window-divider-inner" . "#646464")
+      ("fg-window-divider-outer" . "#969696")
+
+      ("fg-unfocused" . "#93959b")
+
+      ("bg-header" . "#212121") ("fg-header" . "#dddddd")
+
+      ("bg-whitespace" . "#170016") ("fg-whitespace" . "#a4959f")
+
+      ("bg-diff-heading" . "#304466") ("fg-diff-heading" . "#dadffe")
+      ("bg-diff-added" . "#0a280a") ("fg-diff-added" . "#94ba94")
+      ("bg-diff-changed" . "#2a2000") ("fg-diff-changed" . "#b0ba9f")
+      ("bg-diff-removed" . "#40160f") ("fg-diff-removed" . "#c6adaa")
+
+      ("bg-diff-refine-added" . "#005a36") ("fg-diff-refine-added" . "#e0f6e0")
+      ("bg-diff-refine-changed" . "#585800") ("fg-diff-refine-changed" . 
"#ffffcc")
+      ("bg-diff-refine-removed" . "#852828") ("fg-diff-refine-removed" . 
"#ffd9eb")
+
+      ("bg-diff-focus-added" . "#203d20") ("fg-diff-focus-added" . "#b4ddb4")
+      ("bg-diff-focus-changed" . "#4a3a10") ("fg-diff-focus-changed" . 
"#d0daaf")
+      ("bg-diff-focus-removed" . "#5e2526") ("fg-diff-focus-removed" . 
"#eebdba")
+
+      ("bg-diff-neutral-0" . "#575757") ("fg-diff-neutral-0" . "#fcfcfc")
+      ("bg-diff-neutral-1" . "#454545") ("fg-diff-neutral-1" . "#dddddd")
+      ("bg-diff-neutral-2" . "#313131") ("fg-diff-neutral-2" . "#bfbfbf")
+
+      ("bg-mark-sel" . "#002f2f") ("fg-mark-sel" . "#60cfa2")
+      ("bg-mark-del" . "#5a0000") ("fg-mark-del" . "#ff99aa")
+      ("bg-mark-alt" . "#3f2210") ("fg-mark-alt" . "#f0aa20"))
+    "The entire palette of `modus-vivendi-theme'.
+Each element has the form (NAME . HEX).")
+
+  (defcustom modus-vivendi-theme-override-colors-alist '()
+    "Association list of palette colour overrides.
+Values can be mapped to variables, using the same syntax as the
+one present in `modus-vivendi-theme-default-colors-alist'.
+
+This is only meant for do-it-yourself usage, with the
+understanding that the user is responsible for the resulting
+contrast ratio between new and existing colours."
+    :type '(alist
+            :key-type (string :tag "Name")
+            :value-type (string :tag " Hex")))
+
+  (defmacro modus-vivendi-theme-with-color-variables (&rest body)
+    "`let' bind all colours around BODY.
+Also bind `class' to ((class color) (min-colors 89))."
+    (declare (indent 0))
+    `(let ((class '((class color) (min-colors 89)))
+           ,@(mapcar (lambda (cons)
+                       (list (intern (car cons)) (cdr cons)))
+                     (append modus-vivendi-theme-default-colors-alist
+                             modus-vivendi-theme-override-colors-alist))
+           ;; simple conditional styles that evaluate user-facing
+           ;; customisation options
+           (modus-theme-slant
+            (if modus-vivendi-theme-slanted-constructs 'italic 'normal))
+           (modus-theme-variable-pitch
+            (if modus-vivendi-theme-variable-pitch-headings 'variable-pitch 
'default)))
+       ,@body)))
+
+
+
+;;; Faces
+
+(modus-vivendi-theme-with-color-variables
+  (custom-theme-set-faces
+   'modus-vivendi
+;;;; custom faces
+   ;; these bespoke faces are inherited by other constructs below
+;;;;; subtle coloured backgrounds
+   `(modus-theme-subtle-red ((,class :background ,red-subtle-bg :foreground 
,fg-dim)))
+   `(modus-theme-subtle-green ((,class :background ,green-subtle-bg 
:foreground ,fg-dim)))
+   `(modus-theme-subtle-yellow ((,class :background ,yellow-subtle-bg 
:foreground ,fg-dim)))
+   `(modus-theme-subtle-blue ((,class :background ,blue-subtle-bg :foreground 
,fg-dim)))
+   `(modus-theme-subtle-magenta ((,class :background ,magenta-subtle-bg 
:foreground ,fg-dim)))
+   `(modus-theme-subtle-cyan ((,class :background ,cyan-subtle-bg :foreground 
,fg-dim)))
+   `(modus-theme-subtle-neutral ((,class :background ,bg-inactive :foreground 
,fg-inactive)))
+;;;;; intense coloured backgrounds
+   `(modus-theme-intense-red ((,class :background ,red-intense-bg :foreground 
,fg-main)))
+   `(modus-theme-intense-green ((,class :background ,green-intense-bg 
:foreground ,fg-main)))
+   `(modus-theme-intense-yellow ((,class :background ,yellow-intense-bg 
:foreground ,fg-main)))
+   `(modus-theme-intense-blue ((,class :background ,blue-intense-bg 
:foreground ,fg-main)))
+   `(modus-theme-intense-magenta ((,class :background ,magenta-intense-bg 
:foreground ,fg-main)))
+   `(modus-theme-intense-cyan ((,class :background ,cyan-intense-bg 
:foreground ,fg-main)))
+   `(modus-theme-intense-neutral ((,class :background ,bg-active :foreground 
,fg-main)))
+;;;;; refined background and foreground combinations
+   ;; general purpose styles that use an accented foreground against an
+   ;; accented background
+   `(modus-theme-refine-red ((,class :background ,red-refine-bg :foreground 
,red-refine-fg)))
+   `(modus-theme-refine-green ((,class :background ,green-refine-bg 
:foreground ,green-refine-fg)))
+   `(modus-theme-refine-yellow ((,class :background ,yellow-refine-bg 
:foreground ,yellow-refine-fg)))
+   `(modus-theme-refine-blue ((,class :background ,blue-refine-bg :foreground 
,blue-refine-fg)))
+   `(modus-theme-refine-magenta ((,class :background ,magenta-refine-bg 
:foreground ,magenta-refine-fg)))
+   `(modus-theme-refine-cyan ((,class :background ,cyan-refine-bg :foreground 
,cyan-refine-fg)))
+;;;;; "active" combinations, mostly for use on the mode line
+   `(modus-theme-active-red ((,class :background ,red-active :foreground 
,bg-active)))
+   `(modus-theme-active-green ((,class :background ,green-active :foreground 
,bg-active)))
+   `(modus-theme-active-yellow ((,class :background ,yellow-active :foreground 
,bg-active)))
+   `(modus-theme-active-blue ((,class :background ,blue-active :foreground 
,bg-active)))
+   `(modus-theme-active-magenta ((,class :background ,magenta-active 
:foreground ,bg-active)))
+   `(modus-theme-active-cyan ((,class :background ,cyan-active :foreground 
,bg-active)))
+;;;;; nuanced backgrounds
+   ;; useful for adding an accented background that is suitable for all
+   ;; main foreground colours (intended for use in Org source blocks)
+   `(modus-theme-nuanced-red ((,class :background ,red-nuanced-bg
+                                      ,@(and (>= emacs-major-version 27) 
'(:extend t)))))
+   `(modus-theme-nuanced-green ((,class :background ,green-nuanced-bg
+                                        ,@(and (>= emacs-major-version 27) 
'(:extend t)))))
+   `(modus-theme-nuanced-yellow ((,class :background ,yellow-nuanced-bg
+                                         ,@(and (>= emacs-major-version 27) 
'(:extend t)))))
+   `(modus-theme-nuanced-blue ((,class :background ,blue-nuanced-bg
+                                       ,@(and (>= emacs-major-version 27) 
'(:extend t)))))
+   `(modus-theme-nuanced-magenta ((,class :background ,magenta-nuanced-bg
+                                          ,@(and (>= emacs-major-version 27) 
'(:extend t)))))
+   `(modus-theme-nuanced-cyan ((,class :background ,cyan-nuanced-bg
+                                       ,@(and (>= emacs-major-version 27) 
'(:extend t)))))
+;;;;; fringe-specific combinations
+   `(modus-theme-fringe-red ((,class :background ,red-fringe-bg :foreground 
,fg-dim)))
+   `(modus-theme-fringe-green ((,class :background ,green-fringe-bg 
:foreground ,fg-dim)))
+   `(modus-theme-fringe-yellow ((,class :background ,yellow-fringe-bg 
:foreground ,fg-dim)))
+   `(modus-theme-fringe-blue ((,class :background ,blue-fringe-bg :foreground 
,fg-dim)))
+   `(modus-theme-fringe-magenta ((,class :background ,magenta-fringe-bg 
:foreground ,fg-dim)))
+   `(modus-theme-fringe-cyan ((,class :background ,cyan-fringe-bg :foreground 
,fg-dim)))
+;;;;; special base values
+   ;; these are closer to the grayscale than the accents defined above
+   ;; and should only be used when the next closest alternative would be
+   ;; a greyscale value than an accented one
+   `(modus-theme-special-cold ((,class :background ,bg-special-cold 
:foreground ,fg-special-cold)))
+   `(modus-theme-special-mild ((,class :background ,bg-special-mild 
:foreground ,fg-special-mild)))
+   `(modus-theme-special-warm ((,class :background ,bg-special-warm 
:foreground ,fg-special-warm)))
+   `(modus-theme-special-calm ((,class :background ,bg-special-calm 
:foreground ,fg-special-calm)))
+;;;;; diff-specific combinations
+   ;; intended for `diff-mode' or equivalent
+   `(modus-theme-diff-added ((,class :background ,bg-diff-added :foreground 
,fg-diff-added)))
+   `(modus-theme-diff-changed ((,class :background ,bg-diff-changed 
:foreground ,fg-diff-changed)))
+   `(modus-theme-diff-removed ((,class :background ,bg-diff-removed 
:foreground ,fg-diff-removed)))
+   `(modus-theme-diff-refine-added ((,class :background ,bg-diff-refine-added 
:foreground ,fg-diff-refine-added)))
+   `(modus-theme-diff-refine-changed ((,class :background 
,bg-diff-refine-changed :foreground ,fg-diff-refine-changed)))
+   `(modus-theme-diff-refine-removed ((,class :background 
,bg-diff-refine-removed :foreground ,fg-diff-refine-removed)))
+   `(modus-theme-diff-focus-added ((,class :background ,bg-diff-focus-added 
:foreground ,fg-diff-focus-added)))
+   `(modus-theme-diff-focus-changed ((,class :background 
,bg-diff-focus-changed :foreground ,fg-diff-focus-changed)))
+   `(modus-theme-diff-focus-removed ((,class :background 
,bg-diff-focus-removed :foreground ,fg-diff-focus-removed)))
+   `(modus-theme-diff-heading ((,class :background ,bg-diff-heading 
:foreground ,fg-diff-heading)))
+;;;;; mark indicators
+   ;; colour combinations intended for Dired, Ibuffer, or equivalent
+   `(modus-theme-header ((,class :inherit bold :foreground ,fg-main)))
+   `(modus-theme-mark-alt ((,class :inherit bold :background ,bg-mark-alt 
:foreground ,fg-mark-alt)))
+   `(modus-theme-mark-del ((,class :inherit bold :background ,bg-mark-del 
:foreground ,fg-mark-del)))
+   `(modus-theme-mark-sel ((,class :inherit bold :background ,bg-mark-sel 
:foreground ,fg-mark-sel)))
+   `(modus-theme-mark-symbol ((,class :inherit bold :foreground ,blue-alt)))
+;;;;; other custom faces
+   `(modus-theme-hl-line ((,class :background ,(if 
modus-vivendi-theme-intense-hl-line
+                                                   bg-active bg-hl-line)
+                                  (and (>= emacs-major-version 27) '(:extend 
t)))))
+;;;; standard faces
+;;;;; absolute essentials
+   `(default ((,class :background ,bg-main :foreground ,fg-main)))
+   `(cursor ((,class :background ,fg-main)))
+   `(fringe ((,class ,@(modus-vivendi-theme-fringe bg-inactive bg-active)
+                     :foreground ,fg-main)))
+   `(vertical-border ((,class :foreground ,fg-window-divider-inner)))
+;;;;; basic and/or ungrouped styles
+   ;; Modify the `bold' face to change the weight of all "bold" elements
+   ;; defined by the theme.  You need a typeface that supports a
+   ;; multitude of heavier weights than the regular one and then you
+   ;; must specify the exact name of the one you wish to apply.  Example
+   ;; for your init.el:
+   ;;
+   ;; (set-face-attribute 'bold nil :weight 'semibold)
+   `(bold ((,class :weight bold)))
+   `(comint-highlight-input ((,class :inherit bold)))
+   `(comint-highlight-prompt ((,class ,@(modus-vivendi-theme-bold-weight)
+                                      ,@(modus-vivendi-theme-prompt cyan
+                                                                    
blue-nuanced-bg
+                                                                    blue-alt
+                                                                    
blue-refine-bg
+                                                                    fg-main))))
+   `(error ((,class :inherit bold :foreground ,red)))
+   `(escape-glyph ((,class :foreground ,fg-escape-char-construct)))
+   `(file-name-shadow ((,class :foreground ,fg-unfocused)))
+   `(header-line ((,class :background ,bg-header :foreground ,fg-header)))
+   `(header-line-highlight ((,class :inherit modus-theme-active-blue)))
+   `(homoglyph ((,class :foreground ,fg-escape-char-construct)))
+   `(ibuffer-locked-buffer ((,class :foreground ,yellow-alt-other)))
+   `(italic ((,class :slant italic)))
+   `(nobreak-hyphen ((,class :foreground ,fg-escape-char-construct)))
+   `(nobreak-space ((,class :foreground ,fg-escape-char-construct :underline 
t)))
+   `(minibuffer-prompt ((,class ,@(modus-vivendi-theme-prompt cyan-alt-other
+                                                              cyan-nuanced-bg
+                                                              cyan
+                                                              cyan-refine-bg
+                                                              fg-main))))
+   `(mm-command-output ((,class :foreground ,red-alt-other)))
+   `(mm-uu-extract ((,class :background ,bg-dim :foreground ,fg-special-mild)))
+   `(next-error ((,class :inherit modus-theme-subtle-red)))
+   `(rectangle-preview ((,class :inherit modus-theme-special-mild)))
+   `(region ((,class :background ,bg-region :foreground ,fg-main)))
+   `(secondary-selection ((,class :inherit modus-theme-special-cold)))
+   `(shadow ((,class :foreground ,fg-alt)))
+   `(success ((,class :inherit bold :foreground ,green)))
+   `(trailing-whitespace ((,class :background ,red-intense-bg)))
+   `(warning ((,class :inherit bold :foreground ,yellow)))
+;;;;; buttons, links, widgets
+   `(button ((,class :foreground ,blue-alt-other :underline t)))
+   `(link ((,class :foreground ,blue-alt-other :underline t)))
+   `(link-visited ((,class :foreground ,magenta-alt-other :underline t)))
+   `(tooltip ((,class :background ,bg-special-cold :foreground ,fg-main)))
+   `(widget-button ((,class :inherit button)))
+   `(widget-button-pressed ((,class :inherit button :foreground ,magenta)))
+   `(widget-documentation ((,class :foreground ,green)))
+   `(widget-field ((,class :background ,bg-alt :foreground ,fg-dim)))
+   `(widget-inactive ((,class :background ,bg-inactive :foreground 
,fg-inactive)))
+   `(widget-single-line-field ((,class :inherit widget-field)))
+;;;;; ag
+   `(ag-hit-face ((,class :foreground ,fg-special-cold)))
+   `(ag-match-face ((,class :inherit modus-theme-special-calm)))
+;;;;; alert
+   `(alert-high-face ((,class :inherit bold :foreground ,red-alt)))
+   `(alert-low-face ((,class :foreground ,fg-special-mild)))
+   `(alert-moderate-face ((,class :inherit bold :foreground ,yellow)))
+   `(alert-trivial-face ((,class :foreground ,fg-special-calm)))
+   `(alert-urgent-face ((,class :inherit bold :foreground ,red-intense)))
+;;;;; all-the-icons
+   `(all-the-icons-blue ((,class :foreground ,blue)))
+   `(all-the-icons-blue-alt ((,class :foreground ,blue-alt)))
+   `(all-the-icons-cyan ((,class :foreground ,cyan)))
+   `(all-the-icons-cyan-alt ((,class :foreground ,cyan-alt)))
+   `(all-the-icons-dblue ((,class :foreground ,blue-alt-other)))
+   `(all-the-icons-dcyan ((,class :foreground ,cyan-alt-other)))
+   `(all-the-icons-dgreen ((,class :foreground ,green-alt-other)))
+   `(all-the-icons-dired-dir-face ((,class :foreground ,blue)))
+   `(all-the-icons-dmaroon ((,class :foreground ,magenta-alt-other)))
+   `(all-the-icons-dorange ((,class :foreground ,red-alt-other)))
+   `(all-the-icons-dpink ((,class :foreground ,magenta)))
+   `(all-the-icons-dpurple ((,class :foreground ,magenta-alt)))
+   `(all-the-icons-dred ((,class :foreground ,red)))
+   `(all-the-icons-dsilver ((,class :foreground ,fg-special-cold)))
+   `(all-the-icons-dyellow ((,class :foreground ,yellow)))
+   `(all-the-icons-green ((,class :foreground ,green)))
+   `(all-the-icons-lblue ((,class :foreground ,blue-refine-fg)))
+   `(all-the-icons-lcyan ((,class :foreground ,cyan-refine-fg)))
+   `(all-the-icons-lgreen ((,class :foreground ,green-refine-fg)))
+   `(all-the-icons-lmaroon ((,class :foreground ,magenta-refine-fg)))
+   `(all-the-icons-lorange ((,class :foreground ,red-refine-fg)))
+   `(all-the-icons-lpink ((,class :foreground ,magenta-refine-fg)))
+   `(all-the-icons-lpurple ((,class :foreground ,magenta-refine-fg)))
+   `(all-the-icons-lred ((,class :foreground ,red-refine-fg)))
+   `(all-the-icons-lsilver ((,class :foreground ,fg-special-cold)))
+   `(all-the-icons-lyellow ((,class :foreground ,yellow-refine-fg)))
+   `(all-the-icons-maroon ((,class :foreground ,magenta)))
+   `(all-the-icons-orange ((,class :foreground ,red-alt)))
+   `(all-the-icons-pink ((,class :foreground ,magenta)))
+   `(all-the-icons-purple ((,class :foreground ,magenta-alt)))
+   `(all-the-icons-purple-alt ((,class :foreground ,magenta-alt-other)))
+   `(all-the-icons-red ((,class :foreground ,red)))
+   `(all-the-icons-red-alt ((,class :foreground ,red-alt)))
+   `(all-the-icons-silver ((,class :foreground ,fg-special-cold)))
+   `(all-the-icons-yellow ((,class :foreground ,yellow)))
+;;;;; annotate
+   `(annotate-annotation ((,class :inherit modus-theme-subtle-blue)))
+   `(annotate-annotation-secondary ((,class :inherit 
modus-theme-subtle-green)))
+   `(annotate-highlight ((,class :background ,blue-nuanced-bg :underline 
,blue-intense)))
+   `(annotate-highlight-secondary ((,class :background ,green-nuanced-bg 
:underline ,green-intense)))
+;;;;; anzu
+   `(anzu-match-1 ((,class :inherit modus-theme-subtle-cyan)))
+   `(anzu-match-2 ((,class :inherit modus-theme-subtle-green)))
+   `(anzu-match-3 ((,class :inherit modus-theme-subtle-yellow)))
+   `(anzu-mode-line ((,class :inherit bold :foreground ,green-active)))
+   `(anzu-mode-line-no-match ((,class :inherit bold :foreground ,red-active)))
+   `(anzu-replace-highlight ((,class :inherit modus-theme-refine-yellow 
:underline t)))
+   `(anzu-replace-to ((,class :inherit (modus-theme-intense-green bold))))
+;;;;; apropos
+   `(apropos-function-button ((,class :foreground ,magenta-alt-other 
:underline t)))
+   `(apropos-keybinding ((,class :inherit bold :foreground ,cyan)))
+   `(apropos-misc-button ((,class :foreground ,cyan-alt-other :underline t)))
+   `(apropos-property ((,class ,@(modus-vivendi-theme-bold-weight) :foreground 
,magenta-alt)))
+   `(apropos-symbol ((,class ,@(modus-vivendi-theme-bold-weight) :foreground 
,blue-nuanced :underline t)))
+   `(apropos-user-option-button ((,class :foreground ,green-alt-other 
:underline t)))
+   `(apropos-variable-button ((,class :foreground ,blue :underline t)))
+;;;;; apt-sources-list
+   `(apt-sources-list-components ((,class :foreground ,cyan)))
+   `(apt-sources-list-options ((,class :foreground ,yellow)))
+   `(apt-sources-list-suite ((,class :foreground ,green)))
+   `(apt-sources-list-type ((,class :foreground ,magenta)))
+   `(apt-sources-list-uri ((,class :foreground ,blue)))
+;;;;; artbollocks-mode
+   `(artbollocks-face ((,class :foreground ,cyan-nuanced :underline 
,fg-lang-note)))
+   `(artbollocks-lexical-illusions-face ((,class :background ,bg-alt 
:foreground ,red-alt :underline t)))
+   `(artbollocks-passive-voice-face ((,class :foreground ,yellow-nuanced 
:underline ,fg-lang-warning)))
+   `(artbollocks-weasel-words-face ((,class :foreground ,red-nuanced 
:underline ,fg-lang-error)))
+;;;;; auctex and Tex
+   `(font-latex-bold-face ((,class :inherit bold :foreground 
,fg-special-calm)))
+   `(font-latex-doctex-documentation-face ((,class :foreground 
,fg-special-cold :slant ,modus-theme-slant)))
+   `(font-latex-doctex-preprocessor-face ((,class 
,@(modus-vivendi-theme-bold-weight) :foreground ,red-alt-other)))
+   `(font-latex-italic-face ((,class :foreground ,fg-special-calm :slant 
italic)))
+   `(font-latex-math-face ((,class :foreground ,cyan-alt-other)))
+   `(font-latex-script-char-face ((,class :foreground ,cyan-alt-other)))
+   `(font-latex-sectioning-0-face ((,class :inherit 
,modus-theme-variable-pitch :foreground ,blue-nuanced)))
+   `(font-latex-sectioning-1-face ((,class :inherit (bold 
,modus-theme-variable-pitch) :foreground ,blue-nuanced)))
+   `(font-latex-sectioning-2-face ((,class :inherit (bold 
,modus-theme-variable-pitch) :foreground ,blue-nuanced)))
+   `(font-latex-sectioning-3-face ((,class :inherit (bold 
,modus-theme-variable-pitch) :foreground ,blue-nuanced)))
+   `(font-latex-sectioning-4-face ((,class :inherit (bold 
,modus-theme-variable-pitch) :foreground ,blue-nuanced)))
+   `(font-latex-sectioning-5-face ((,class :inherit 
,modus-theme-variable-pitch :foreground ,blue-nuanced)))
+   `(font-latex-sedate-face ((,class ,@(modus-vivendi-theme-bold-weight) 
:foreground ,magenta-alt-other)))
+   `(font-latex-slide-title-face ((,class :inherit (bold 
,modus-theme-variable-pitch) :foreground ,cyan-nuanced
+                                          ,@(modus-vivendi-theme-scale 
modus-vivendi-theme-scale-4))))
+   `(font-latex-string-face ((,class :foreground ,blue-alt)))
+   `(font-latex-subscript-face ((,class :height 0.95)))
+   `(font-latex-superscript-face ((,class :height 0.95)))
+   `(font-latex-verbatim-face ((,class :background ,bg-dim :foreground 
,fg-special-mild)))
+   `(font-latex-warning-face ((,class :foreground ,yellow-alt-other)))
+   `(tex-match ((,class :foreground ,blue-alt-other)))
+   `(tex-verbatim ((,class :background ,bg-dim :foreground ,fg-special-mild)))
+   `(texinfo-heading ((,class :foreground ,magenta)))
+   `(TeX-error-description-error ((,class :inherit bold :foreground ,red)))
+   `(TeX-error-description-help ((,class :foreground ,blue)))
+   `(TeX-error-description-tex-said ((,class :foreground ,blue)))
+   `(TeX-error-description-warning ((,class :inherit bold :foreground 
,yellow)))
+;;;;; auto-dim-other-buffers
+   `(auto-dim-other-buffers-face ((,class :background ,bg-alt)))
+;;;;; avy
+   `(avy-background-face ((,class :background ,bg-dim :foreground ,fg-dim)))
+   `(avy-goto-char-timer-face ((,class :inherit (modus-theme-intense-yellow 
bold))))
+   `(avy-lead-face ((,class :inherit (modus-theme-intense-magenta bold))))
+   `(avy-lead-face-0 ((,class :inherit (modus-theme-intense-blue bold))))
+   `(avy-lead-face-1 ((,class :inherit (modus-theme-intense-red bold))))
+   `(avy-lead-face-2 ((,class :inherit (modus-theme-intense-green bold))))
+;;;;; aw (ace-window)
+   `(aw-background-face ((,class :background ,bg-dim :foreground ,fg-dim)))
+   `(aw-key-face ((,class :inherit bold :foreground ,blue-intense)))
+   `(aw-leading-char-face ((,class :inherit bold :height 1.5 :background 
,bg-main :foreground ,red-intense)))
+   `(aw-minibuffer-leading-char-face ((,class :foreground ,magenta-active)))
+   `(aw-mode-line-face ((,class :inherit bold)))
+;;;;; bm
+   `(bm-face ((,class :inherit modus-theme-subtle-yellow
+                      ,@(and (>= emacs-major-version 27) '(:extend t)))))
+   `(bm-fringe-face ((,class :inherit modus-theme-fringe-yellow)))
+   `(bm-fringe-persistent-face ((,class :inherit modus-theme-fringe-blue)))
+   `(bm-persistent-face ((,class :inherit modus-theme-intense-blue
+                                 ,@(and (>= emacs-major-version 27) '(:extend 
t)))))
+;;;;; bongo
+   `(bongo-album-title ((,class :foreground ,cyan-active)))
+   `(bongo-artist ((,class :foreground ,magenta-active)))
+   `(bongo-currently-playing-track ((,class :inherit bold)))
+   `(bongo-elapsed-track-part ((,class :inherit modus-theme-subtle-magenta 
:underline t)))
+   `(bongo-filled-seek-bar ((,class :background ,blue-subtle-bg :foreground 
,fg-main)))
+   `(bongo-marked-track ((,class :foreground ,fg-mark-alt)))
+   `(bongo-marked-track-line ((,class :background ,bg-mark-alt)))
+   `(bongo-played-track ((,class :foreground ,fg-unfocused :strike-through t)))
+   `(bongo-track-length ((,class :foreground ,blue-alt-other)))
+   `(bongo-track-title ((,class :foreground ,blue-active)))
+   `(bongo-unfilled-seek-bar ((,class :background ,blue-nuanced-bg :foreground 
,fg-main)))
+;;;;; boon
+   `(boon-modeline-cmd ((,class :inherit modus-theme-active-blue)))
+   `(boon-modeline-ins ((,class :inherit modus-theme-active-red)))
+   `(boon-modeline-off ((,class :inherit modus-theme-active-yellow)))
+   `(boon-modeline-spc ((,class :inherit modus-theme-active-green)))
+;;;;; breakpoint (built-in gdb-mi.el)
+   `(breakpoint-disabled ((,class :foreground ,fg-alt)))
+   `(breakpoint-enabled ((,class :inherit bold :foreground ,red)))
+;;;;; buffer-expose
+   `(buffer-expose-ace-char-face ((,class :inherit bold :foreground 
,red-active)))
+   `(buffer-expose-mode-line-face ((,class :foreground ,cyan-active)))
+   `(buffer-expose-selected-face ((,class :inherit modus-theme-special-mild)))
+;;;;; calendar and diary
+   `(calendar-month-header ((,class :inherit bold :foreground ,fg-main)))
+   `(calendar-today ((,class :underline t)))
+   `(calendar-weekday-header ((,class :foreground ,fg-dim)))
+   `(calendar-weekend-header ((,class :foreground ,fg-alt)))
+   `(diary ((,class :foreground ,cyan-alt-other)))
+   `(diary-anniversary ((,class :foreground ,red-alt-other)))
+   `(diary-time ((,class :foreground ,blue-alt)))
+   `(holiday ((,class :foreground ,magenta-alt)))
+;;;;; calfw
+   `(cfw:face-annotation ((,class :background ,bg-alt :foreground ,fg-alt)))
+   `(cfw:face-day-title ((,class :background ,bg-alt :foreground ,fg-main)))
+   `(cfw:face-default-content ((,class :foreground ,green-alt)))
+   `(cfw:face-default-day ((,class :inherit (cfw:face-day-title bold))))
+   `(cfw:face-disable ((,class :background ,bg-inactive :foreground 
,fg-inactive)))
+   `(cfw:face-grid ((,class :foreground ,fg-inactive)))
+   `(cfw:face-header ((,class :inherit bold ::foreground ,fg-main)))
+   `(cfw:face-holiday ((,class :inherit bold :background ,bg-alt :foreground 
,magenta)))
+   `(cfw:face-periods ((,class :foreground ,cyan-alt-other)))
+   `(cfw:face-saturday ((,class :inherit bold :background ,bg-alt :foreground 
,magenta-alt)))
+   `(cfw:face-select ((,class :inherit modus-theme-intense-blue)))
+   `(cfw:face-sunday ((,class :inherit bold :background ,bg-alt :foreground 
,magenta-alt-other)))
+   `(cfw:face-title ((,class :inherit ,modus-theme-variable-pitch
+                             :foreground ,fg-special-warm
+                             ,@(modus-vivendi-theme-scale 
modus-vivendi-theme-scale-4))))
+   `(cfw:face-today ((,class :inherit bold :foreground ,blue)))
+   `(cfw:face-today-title ((,class :inherit modus-theme-special-mild :box t)))
+   `(cfw:face-toolbar ((,class :background ,bg-active :foreground ,bg-active)))
+   `(cfw:face-toolbar-button-off ((,class :background ,bg-alt :foreground 
,cyan)))
+   `(cfw:face-toolbar-button-on ((,class :inherit bold :background ,bg-main 
:foreground ,blue-intense)))
+;;;;; centaur-tabs
+   `(centaur-tabs-active-bar-face ((,class :background ,fg-tab-active)))
+   `(centaur-tabs-close-mouse-face ((,class :inherit bold :foreground 
,red-active :underline t)))
+   `(centaur-tabs-close-selected ((,class :inherit centaur-tabs-selected)))
+   `(centaur-tabs-close-unselected ((,class :inherit centaur-tabs-unselected)))
+   `(centaur-tabs-modified-marker-selected ((,class :inherit 
centaur-tabs-selected)))
+   `(centaur-tabs-modified-marker-unselected ((,class :inherit 
centaur-tabs-unselected)))
+   `(centaur-tabs-default ((,class :background ,bg-main :foreground ,bg-main)))
+   `(centaur-tabs-selected ((,class :inherit bold :background ,bg-tab-active 
:foreground ,fg-main)))
+   `(centaur-tabs-selected-modified ((,class :background ,bg-tab-active 
:foreground ,fg-main :slant italic)))
+   `(centaur-tabs-unselected ((,class :background ,bg-tab-inactive :foreground 
,fg-dim)))
+   `(centaur-tabs-unselected-modified ((,class :background ,bg-tab-inactive 
:foreground ,fg-dim :slant italic)))
+;;;;; change-log and log-view (`vc-print-log' and `vc-print-root-log')
+   `(change-log-acknowledgment ((,class :foreground ,fg-alt)))
+   `(change-log-conditionals ((,class :foreground ,magenta-alt)))
+   `(change-log-date ((,class :foreground ,cyan-alt-other)))
+   `(change-log-email ((,class :foreground ,cyan)))
+   `(change-log-file ((,class :foreground ,blue)))
+   `(change-log-function ((,class :foreground ,green-alt-other)))
+   `(change-log-list ((,class :foreground ,magenta-alt-other)))
+   `(change-log-name ((,class :foreground ,cyan)))
+   `(log-edit-header ((,class :inherit bold :foreground ,green-alt-other)))
+   `(log-edit-summary ((,class :foreground ,magenta-alt-other)))
+   `(log-edit-unknown-header ((,class :foreground ,fg-alt)))
+   `(log-view-file ((,class :inherit bold :foreground ,fg-special-cold)))
+   `(log-view-message ((,class :foreground ,fg-alt)))
+;;;;; cider
+   `(cider-debug-code-overlay-face ((,class :background ,bg-alt)))
+   `(cider-debug-prompt-face ((,class :foreground ,magenta-alt :underline t)))
+   `(cider-deprecated-face ((,class :inherit modus-theme-refine-yellow)))
+   `(cider-docview-emphasis-face ((,class :foreground ,fg-special-cold :slant 
italic)))
+   `(cider-docview-literal-face ((,class :foreground ,blue-alt)))
+   `(cider-docview-strong-face ((,class :inherit bold :foreground 
,fg-special-cold)))
+   `(cider-docview-table-border-face ((,class :foreground ,fg-alt)))
+   `(cider-enlightened-face ((,class :box (:line-width -1 :color ,yellow-alt 
:style nil) :background ,bg-dim)))
+   `(cider-enlightened-local-face ((,class :inherit bold :foreground 
,yellow-alt-other)))
+   `(cider-error-highlight-face ((,class :foreground ,red :underline t)))
+   `(cider-fragile-button-face ((,class :box (:line-width 3 :color ,fg-alt 
:style released-button) :foreground ,yellow)))
+   `(cider-fringe-good-face ((,class :foreground ,green-active)))
+   `(cider-instrumented-face ((,class :box (:line-width -1 :color ,red :style 
nil) :background ,bg-dim)))
+   `(cider-reader-conditional-face ((,class :foreground ,fg-special-warm 
:slant italic)))
+   `(cider-repl-input-face ((,class :inherit bold)))
+   `(cider-repl-prompt-face ((,class :foreground ,cyan-alt-other)))
+   `(cider-repl-stderr-face ((,class :inherit bold :foreground ,red)))
+   `(cider-repl-stdout-face ((,class :foreground ,blue)))
+   `(cider-result-overlay-face ((,class :box (:line-width -1 :color ,blue 
:style nil) :background ,bg-dim)))
+   `(cider-stacktrace-error-class-face ((,class :inherit bold :foreground 
,red)))
+   `(cider-stacktrace-error-message-face ((,class :foreground ,red-alt-other 
:slant italic)))
+   `(cider-stacktrace-face ((,class :foreground ,fg-main)))
+   `(cider-stacktrace-filter-active-face ((,class :foreground ,cyan-alt 
:underline t)))
+   `(cider-stacktrace-filter-inactive-face ((,class :foreground ,cyan-alt)))
+   `(cider-stacktrace-fn-face ((,class :inherit bold :foreground ,fg-main)))
+   `(cider-stacktrace-ns-face ((,class :foreground ,fg-alt :slant italic)))
+   `(cider-stacktrace-promoted-button-face ((,class :box (:line-width 3 :color 
,fg-alt :style released-button) :foreground ,red)))
+   `(cider-stacktrace-suppressed-button-face ((,class :box (:line-width 3 
:color ,fg-alt :style pressed-button)
+                                                      :background ,bg-alt 
:foreground ,fg-alt)))
+   `(cider-test-error-face ((,class :inherit modus-theme-subtle-red)))
+   `(cider-test-failure-face ((,class :inherit (modus-theme-intense-red 
bold))))
+   `(cider-test-success-face ((,class :inherit modus-theme-intense-green)))
+   `(cider-traced-face ((,class :box (:line-width -1 :color ,cyan :style nil) 
:background ,bg-dim)))
+   `(cider-warning-highlight-face ((,class :foreground ,yellow :underline t)))
+;;;;; circe (and lui)
+   `(circe-fool-face ((,class :foreground ,fg-alt)))
+   `(circe-highlight-nick-face ((,class :inherit bold :foreground ,blue)))
+   `(circe-prompt-face ((,class :inherit bold :foreground ,cyan-alt-other)))
+   `(circe-server-face ((,class :foreground ,fg-unfocused)))
+   `(lui-button-face ((,class :foreground ,blue :underline t)))
+   `(lui-highlight-face ((,class :foreground ,magenta-alt)))
+   `(lui-time-stamp-face ((,class :foreground ,blue-nuanced)))
+;;;;; color-rg
+   `(color-rg-font-lock-column-number ((,class :foreground 
,magenta-alt-other)))
+   `(color-rg-font-lock-command ((,class :inherit bold :foreground ,fg-main)))
+   `(color-rg-font-lock-file ((,class :inherit bold :foreground 
,fg-special-cold)))
+   `(color-rg-font-lock-flash ((,class :inherit modus-theme-intense-blue)))
+   `(color-rg-font-lock-function-location ((,class :inherit 
modus-theme-special-calm)))
+   `(color-rg-font-lock-header-line-directory ((,class :foreground 
,blue-active)))
+   `(color-rg-font-lock-header-line-edit-mode ((,class :foreground 
,magenta-active)))
+   `(color-rg-font-lock-header-line-keyword ((,class :foreground 
,green-active)))
+   `(color-rg-font-lock-header-line-text ((,class :foreground ,fg-active)))
+   `(color-rg-font-lock-line-number ((,class :foreground ,fg-special-warm)))
+   `(color-rg-font-lock-mark-changed ((,class :inherit bold :foreground 
,blue)))
+   `(color-rg-font-lock-mark-deleted ((,class :inherit bold :foreground ,red)))
+   `(color-rg-font-lock-match ((,class :inherit modus-theme-special-calm)))
+   `(color-rg-font-lock-position-splitter ((,class :foreground ,fg-alt)))
+;;;;; column-enforce-mode
+   `(column-enforce-face ((,class :inherit modus-theme-refine-yellow)))
+;;;;; company-mode
+   `(company-echo-common ((,class :foreground ,magenta-alt-other)))
+   `(company-preview ((,class :background ,bg-dim :foreground ,fg-dim)))
+   `(company-preview-common ((,class :foreground ,blue-alt)))
+   `(company-preview-search ((,class :inherit modus-theme-special-calm)))
+   `(company-scrollbar-bg ((,class :background ,bg-active)))
+   `(company-scrollbar-fg ((,class :background ,fg-active)))
+   `(company-template-field ((,class :inherit modus-theme-intense-magenta)))
+   `(company-tooltip ((,class :background ,bg-alt :foreground ,fg-alt)))
+   `(company-tooltip-annotation ((,class :foreground ,fg-special-cold :slant 
,modus-theme-slant)))
+   `(company-tooltip-annotation-selection ((,class :inherit bold :foreground 
,fg-main)))
+   `(company-tooltip-common ((,class :inherit bold :foreground ,blue-alt)))
+   `(company-tooltip-common-selection ((,class :foreground ,fg-main)))
+   `(company-tooltip-mouse ((,class :inherit modus-theme-intense-blue)))
+   `(company-tooltip-search ((,class :inherit (modus-theme-refine-cyan bold))))
+   `(company-tooltip-search-selection ((,class :inherit 
(modus-theme-intense-green bold) :underline t)))
+   `(company-tooltip-selection ((,class :inherit (modus-theme-subtle-cyan 
bold))))
+;;;;; company-posframe
+   `(company-posframe-active-backend-name ((,class :inherit bold :background 
,bg-active :foreground ,blue-active)))
+   `(company-posframe-inactive-backend-name ((,class :background ,bg-active 
:foreground ,fg-active)))
+   `(company-posframe-metadata ((,class :background ,bg-inactive :foreground 
,fg-inactive)))
+;;;;; compilation feedback
+   `(compilation-column-number ((,class :foreground ,magenta-alt-other)))
+   `(compilation-error ((,class ,@(modus-vivendi-theme-bold-weight) 
:foreground ,red)))
+   `(compilation-info ((,class :foreground ,fg-special-cold)))
+   `(compilation-line-number ((,class :foreground ,fg-special-warm)))
+   `(compilation-mode-line-exit ((,class ,@(modus-vivendi-theme-bold-weight) 
:foreground ,blue-active)))
+   `(compilation-mode-line-fail ((,class ,@(modus-vivendi-theme-bold-weight) 
:foreground ,red-active)))
+   `(compilation-mode-line-run ((,class ,@(modus-vivendi-theme-bold-weight) 
:foreground ,magenta-active)))
+   `(compilation-warning ((,class ,@(modus-vivendi-theme-bold-weight) 
:foreground ,yellow)))
+;;;;; completions
+   `(completions-annotations ((,class :foreground ,fg-special-cold :slant 
,modus-theme-slant)))
+   `(completions-common-part ((,class 
,@(modus-vivendi-theme-standard-completions
+                                         cyan-alt-other cyan-nuanced-bg
+                                         yellow-refine-bg yellow-refine-fg))))
+   `(completions-first-difference ((,class :inherit bold
+                                           
,@(modus-vivendi-theme-standard-completions
+                                              blue-alt-other blue-nuanced-bg
+                                              cyan-subtle-bg fg-dim))))
+;;;;; counsel
+   `(counsel-active-mode ((,class :foreground ,magenta-alt-other)))
+   `(counsel-application-name ((,class :foreground ,red-alt-other)))
+   `(counsel-key-binding ((,class :inherit bold :foreground ,blue-alt-other)))
+   `(counsel-outline-1 ((,class :inherit outline-1)))
+   `(counsel-outline-2 ((,class :inherit outline-2)))
+   `(counsel-outline-3 ((,class :inherit outline-3)))
+   `(counsel-outline-4 ((,class :inherit outline-4)))
+   `(counsel-outline-5 ((,class :inherit outline-5)))
+   `(counsel-outline-6 ((,class :inherit outline-6)))
+   `(counsel-outline-7 ((,class :inherit outline-7)))
+   `(counsel-outline-8 ((,class :inherit outline-8)))
+   `(counsel-outline-default ((,class :inherit bold :foreground 
,green-alt-other)))
+   `(counsel-variable-documentation ((,class :foreground ,yellow-alt-other 
:slant ,modus-theme-slant)))
+;;;;; counsel-css
+   `(counsel-css-selector-depth-face-1 ((,class :foreground ,blue)))
+   `(counsel-css-selector-depth-face-2 ((,class :foreground ,cyan)))
+   `(counsel-css-selector-depth-face-3 ((,class :foreground ,green)))
+   `(counsel-css-selector-depth-face-4 ((,class :foreground ,yellow)))
+   `(counsel-css-selector-depth-face-5 ((,class :foreground ,magenta)))
+   `(counsel-css-selector-depth-face-6 ((,class :foreground ,red)))
+;;;;; counsel-notmuch
+   `(counsel-notmuch-count-face ((,class :foreground ,cyan)))
+   `(counsel-notmuch-date-face ((,class :foreground ,blue)))
+   `(counsel-notmuch-people-face ((,class :foreground ,magenta)))
+   `(counsel-notmuch-subject-face ((,class :foreground ,magenta-alt-other)))
+;;;;; counsel-org-capture-string
+   `(counsel-org-capture-string-template-body-face ((,class :foreground 
,fg-special-cold)))
+;;;;; cov
+   `(cov-coverage-not-run-face ((,class :foreground ,red-intense)))
+   `(cov-coverage-run-face ((,class :foreground ,green-intense)))
+   `(cov-heavy-face ((,class :foreground ,magenta-intense)))
+   `(cov-light-face ((,class :foreground ,blue-intense)))
+   `(cov-med-face ((,class :foreground ,yellow-intense)))
+   `(cov-none-face ((,class :foreground ,cyan-intense)))
+;;;;; csv-mode
+   `(csv-separator-face ((,class :background ,bg-special-cold :foreground 
,fg-main)))
+;;;;; ctrlf
+   `(ctrlf-highlight-active ((,class :inherit (modus-theme-intense-green 
bold))))
+   `(ctrlf-highlight-line ((,class :inherit modus-theme-hl-line)))
+   `(ctrlf-highlight-passive ((,class :inherit modus-theme-refine-cyan)))
+;;;;; custom (M-x customize)
+   `(custom-button ((,class :box (:line-width 2 :color nil :style 
released-button)
+                            :background ,bg-active :foreground ,fg-main)))
+   `(custom-button-mouse ((,class :box (:line-width 2 :color nil :style 
released-button)
+                                  :background ,bg-active :foreground 
,fg-active)))
+   `(custom-button-pressed ((,class :box (:line-width 2 :color nil :style 
pressed-button)
+                                    :background ,bg-active :foreground 
,fg-main)))
+   `(custom-changed ((,class :inherit modus-theme-subtle-cyan)))
+   `(custom-comment ((,class :foreground ,fg-alt)))
+   `(custom-comment-tag ((,class :background ,bg-alt :foreground 
,yellow-alt-other)))
+   `(custom-face-tag ((,class :inherit bold :foreground ,blue-intense)))
+   `(custom-group-tag ((,class :inherit bold :foreground ,green-intense)))
+   `(custom-group-tag-1 ((,class :inherit modus-theme-special-warm)))
+   `(custom-invalid ((,class :inherit (modus-theme-intense-red bold))))
+   `(custom-modified ((,class :inherit modus-theme-subtle-cyan)))
+   `(custom-rogue ((,class :inherit modus-theme-refine-magenta)))
+   `(custom-set ((,class :foreground ,blue-alt)))
+   `(custom-state ((,class :foreground ,cyan-alt-other)))
+   `(custom-themed ((,class :inherit modus-theme-subtle-blue)))
+   `(custom-variable-tag ((,class :inherit bold :foreground ,cyan)))
+;;;;; dap-mode
+   `(dap-mouse-eval-thing-face ((,class :box (:line-width -1 :color 
,blue-active :style nil)
+                                        :background ,bg-active :foreground 
,fg-main)))
+   `(dap-result-overlay-face ((,class :box (:line-width -1 :color ,bg-active 
:style nil)
+                                      :background ,bg-active :foreground 
,fg-main)))
+   `(dap-ui-breakpoint-verified-fringe ((,class :inherit bold :foreground 
,green-active)))
+   `(dap-ui-compile-errline ((,class :inherit bold :foreground ,red-intense)))
+   `(dap-ui-locals-scope-face ((,class :inherit bold :foreground ,magenta 
:underline t)))
+   `(dap-ui-locals-variable-face ((,class :inherit bold :foreground ,cyan)))
+   `(dap-ui-locals-variable-leaf-face ((,class :foreground ,cyan-alt-other 
:slant italic)))
+   `(dap-ui-marker-face ((,class :inherit modus-theme-subtle-blue)))
+   `(dap-ui-sessions-stack-frame-face ((,class :inherit bold :foreground 
,magenta-alt)))
+   `(dap-ui-sessions-terminated-active-face ((,class :inherit bold :foreground 
,fg-alt)))
+   `(dap-ui-sessions-terminated-face ((,class :foreground ,fg-alt)))
+;;;;; dashboard (emacs-dashboard)
+   `(dashboard-banner-logo-title ((,class :inherit bold :foreground 
,fg-special-cold)))
+   `(dashboard-footer ((,class :inherit bold :foreground ,fg-special-mild)))
+   `(dashboard-heading ((,class :inherit bold :foreground ,fg-special-warm)))
+   `(dashboard-navigator ((,class :foreground ,cyan-alt-other)))
+   `(dashboard-text-banner ((,class :foreground ,fg-dim)))
+;;;;; deadgrep
+   `(deadgrep-filename-face ((,class :inherit bold :foreground 
,fg-special-cold)))
+   `(deadgrep-match-face ((,class :inherit modus-theme-special-calm)))
+   `(deadgrep-meta-face ((,class :foreground ,fg-alt)))
+   `(deadgrep-regexp-metachar-face ((,class :inherit bold :foreground 
,yellow-intense)))
+   `(deadgrep-search-term-face ((,class :inherit bold :foreground 
,green-intense)))
+;;;;; debbugs
+   `(debbugs-gnu-archived ((,class :inverse-video t)))
+   `(debbugs-gnu-done ((,class :foreground ,fg-alt)))
+   `(debbugs-gnu-forwarded ((,class :foreground ,fg-special-warm)))
+   `(debbugs-gnu-handled ((,class :foreground ,green)))
+   `(debbugs-gnu-new ((,class :foreground ,red)))
+   `(debbugs-gnu-pending ((,class :foreground ,cyan)))
+   `(debbugs-gnu-stale-1 ((,class :foreground ,yellow-nuanced)))
+   `(debbugs-gnu-stale-2 ((,class :foreground ,yellow)))
+   `(debbugs-gnu-stale-3 ((,class :foreground ,yellow-alt)))
+   `(debbugs-gnu-stale-4 ((,class :foreground ,yellow-alt-other)))
+   `(debbugs-gnu-stale-5 ((,class :foreground ,red-alt)))
+   `(debbugs-gnu-tagged ((,class :foreground ,magenta-alt)))
+;;;;; define-word
+   `(define-word-face-1 ((,class :foreground ,yellow)))
+   `(define-word-face-2 ((,class :foreground ,fg-main)))
+;;;;; deft
+   `(deft-filter-string-error-face ((,class :inherit modus-theme-refine-red)))
+   `(deft-filter-string-face ((,class :foreground ,green-intense)))
+   `(deft-header-face ((,class :inherit bold :foreground ,fg-special-warm)))
+   `(deft-separator-face ((,class :foreground ,fg-alt)))
+   `(deft-summary-face ((,class :foreground ,fg-alt :slant 
,modus-theme-slant)))
+   `(deft-time-face ((,class :foreground ,fg-special-cold)))
+   `(deft-title-face ((,class :inherit bold :foreground ,fg-main)))
+;;;;; dictionary
+   `(dictionary-button-face ((,class :inherit bold :foreground 
,fg-special-cold)))
+   `(dictionary-reference-face ((,class :foreground ,blue-alt-other :underline 
t)))
+   `(dictionary-word-definition-face ((,class :foreground ,fg-main)))
+   `(dictionary-word-entry-face ((,class :foreground ,fg-special-cold :slant 
,modus-theme-slant)))
+;;;;; diff-hl
+   `(diff-hl-change ((,class :inherit modus-theme-fringe-yellow)))
+   `(diff-hl-delete ((,class :inherit modus-theme-fringe-red)))
+   `(diff-hl-dired-change ((,class :inherit diff-hl-change)))
+   `(diff-hl-dired-delete ((,class :inherit diff-hl-delete)))
+   `(diff-hl-dired-ignored ((,class :inherit dired-ignored)))
+   `(diff-hl-dired-insert ((,class :inherit diff-hl-insert)))
+   `(diff-hl-dired-unknown ((,class :inherit dired-ignored)))
+   `(diff-hl-insert ((,class :inherit modus-theme-fringe-green)))
+   `(diff-hl-reverted-hunk-highlight ((,class :inherit 
(modus-theme-active-magenta bold))))
+;;;;; diff-mode
+   `(diff-added ((,class ,@(modus-vivendi-theme-diffs
+                            bg-main green
+                            bg-diff-focus-added fg-diff-focus-added))))
+   `(diff-changed ((,class ,@(modus-vivendi-theme-diffs
+                              bg-main yellow
+                              bg-diff-focus-changed fg-diff-focus-changed))))
+   `(diff-context ((,class :foreground ,fg-unfocused)))
+   `(diff-file-header ((,class :inherit bold :foreground ,blue)))
+   `(diff-function ((,class :foreground ,fg-special-cold)))
+   `(diff-header ((,class :foreground ,blue-nuanced)))
+   `(diff-hunk-header ((,class ,@(modus-vivendi-theme-diffs
+                                  bg-alt blue-alt
+                                  bg-diff-heading fg-diff-heading))))
+   `(diff-index ((,class :inherit bold :foreground ,blue-alt)))
+   `(diff-indicator-added ((,class :inherit diff-added)))
+   `(diff-indicator-changed ((,class :inherit diff-changed)))
+   `(diff-indicator-removed ((,class :inherit diff-removed)))
+   `(diff-nonexistent ((,class :inherit (modus-theme-neutral bold))))
+   `(diff-refine-added ((,class ,@(modus-vivendi-theme-diffs
+                                   bg-diff-added fg-diff-added
+                                   bg-diff-refine-added 
fg-diff-refine-added))))
+   `(diff-refine-changed ((,class ,@(modus-vivendi-theme-diffs
+                                     bg-diff-changed fg-diff-changed
+                                     bg-diff-refine-changed 
fg-diff-refine-changed))))
+   `(diff-refine-removed ((,class ,@(modus-vivendi-theme-diffs
+                                     bg-diff-removed fg-diff-removed
+                                     bg-diff-refine-removed 
fg-diff-refine-removed))))
+   `(diff-removed ((,class ,@(modus-vivendi-theme-diffs
+                              bg-main red
+                              bg-diff-focus-removed fg-diff-focus-removed))))
+;;;;; dim-autoload
+   `(dim-autoload-cookie-line ((,class :foreground ,fg-alt :slant 
,modus-theme-slant)))
+;;;;; dired
+   `(dired-directory ((,class :foreground ,blue)))
+   `(dired-flagged ((,class :inherit modus-theme-mark-del)))
+   `(dired-header ((,class :inherit modus-theme-header)))
+   `(dired-ignored ((,class :foreground ,fg-alt)))
+   `(dired-mark ((,class :inherit modus-theme-mark-symbol)))
+   `(dired-marked ((,class :inherit modus-theme-mark-sel)))
+   `(dired-perm-write ((,class :foreground ,fg-special-warm)))
+   `(dired-symlink ((,class :foreground ,cyan-alt :underline t)))
+   `(dired-warning ((,class :inherit bold :foreground ,yellow)))
+;;;;; dired-async
+   `(dired-async-failures ((,class ,@(modus-vivendi-theme-bold-weight) 
:foreground ,red-active)))
+   `(dired-async-message ((,class ,@(modus-vivendi-theme-bold-weight) 
:foreground ,green-active)))
+   `(dired-async-mode-message ((,class ,@(modus-vivendi-theme-bold-weight) 
:foreground ,cyan-active)))
+;;;;; dired-git
+   `(dired-git-branch-else ((,class :inherit bold :foreground ,magenta-alt)))
+   `(dired-git-branch-master ((,class :inherit bold :foreground 
,magenta-alt-other)))
+;;;;; dired-git-info
+   `(dgi-commit-message-face ((,class :foreground ,fg-special-mild)))
+;;;;; dired-narrow
+   `(dired-narrow-blink ((,class :inherit (modus-theme-subtle-cyan bold))))
+;;;;; dired-subtree
+   ;; remove background from dired-subtree, else it breaks
+   ;; dired-{flagged,marked} and any other face that sets a background
+   ;; such as hl-line
+   `(dired-subtree-depth-1-face ((,class :background nil)))
+   `(dired-subtree-depth-2-face ((,class :background nil)))
+   `(dired-subtree-depth-3-face ((,class :background nil)))
+   `(dired-subtree-depth-4-face ((,class :background nil)))
+   `(dired-subtree-depth-5-face ((,class :background nil)))
+   `(dired-subtree-depth-6-face ((,class :background nil)))
+;;;;; diredfl
+   `(diredfl-autofile-name ((,class :inherit modus-theme-special-cold)))
+   `(diredfl-compressed-file-name ((,class :foreground ,green-alt-other)))
+   `(diredfl-compressed-file-suffix ((,class :foreground ,green-alt)))
+   `(diredfl-date-time ((,class :foreground ,fg-special-cold)))
+   `(diredfl-deletion ((,class :inherit modus-theme-mark-del)))
+   `(diredfl-deletion-file-name ((,class :inherit modus-theme-mark-del)))
+   `(diredfl-dir-heading ((,class :inherit modus-theme-header)))
+   `(diredfl-dir-name ((,class :inherit dired-directory)))
+   `(diredfl-dir-priv ((,class :foreground ,blue)))
+   `(diredfl-exec-priv ((,class :foreground ,red-alt-other)))
+   `(diredfl-executable-tag ((,class :foreground ,red-alt)))
+   `(diredfl-file-name ((,class :foreground ,fg-main)))
+   `(diredfl-file-suffix ((,class :foreground ,fg-special-warm)))
+   `(diredfl-flag-mark ((,class :inherit modus-theme-mark-sel)))
+   `(diredfl-flag-mark-line ((,class :inherit modus-theme-mark-sel)))
+   `(diredfl-ignored-file-name ((,class :foreground ,fg-inactive)))
+   `(diredfl-link-priv ((,class :foreground ,blue-alt-other)))
+   `(diredfl-no-priv ((,class :foreground ,fg-inactive)))
+   `(diredfl-number ((,class :foreground ,cyan)))
+   `(diredfl-other-priv ((,class :foreground ,yellow)))
+   `(diredfl-rare-priv ((,class :foreground ,magenta-alt-other)))
+   `(diredfl-read-priv ((,class :foreground ,magenta)))
+   `(diredfl-symlink ((,class :foreground ,cyan-alt :underline t)))
+   `(diredfl-tagged-autofile-name ((,class :inherit 
modus-theme-refine-magenta)))
+   `(diredfl-write-priv ((,class :foreground ,cyan-alt-other)))
+;;;;; disk-usage
+   `(disk-usage-children ((,class :foreground ,yellow)))
+   `(disk-usage-inaccessible ((,class :inherit bold :foreground ,red)))
+   `(disk-usage-percent ((,class :foreground ,green)))
+   `(disk-usage-size ((,class :foreground ,cyan)))
+   `(disk-usage-symlink ((,class :foreground ,blue :underline t)))
+   `(disk-usage-symlink-directory ((,class :inherit bold :foreground 
,blue-alt)))
+;;;;; doom-modeline
+   `(doom-modeline-bar ((,class :inherit modus-theme-active-blue)))
+   `(doom-modeline-bar-inactive ((,class :background ,fg-inactive :foreground 
,bg-main)))
+   `(doom-modeline-battery-charging ((,class :foreground ,green-active)))
+   `(doom-modeline-battery-critical ((,class :inherit bold :foreground 
,red-active)))
+   `(doom-modeline-battery-error ((,class :inherit modus-theme-active-red)))
+   `(doom-modeline-battery-full ((,class :foreground ,blue-active)))
+   `(doom-modeline-battery-normal ((,class :foreground ,fg-active)))
+   `(doom-modeline-battery-warning ((,class :inherit bold :foreground 
,yellow-active)))
+   `(doom-modeline-buffer-file ((,class :inherit bold :foreground ,fg-active)))
+   `(doom-modeline-buffer-major-mode ((,class :inherit bold :foreground 
,cyan-active)))
+   `(doom-modeline-buffer-minor-mode ((,class :foreground ,fg-inactive)))
+   `(doom-modeline-buffer-modified ((,class :inherit bold :foreground 
,magenta-active)))
+   `(doom-modeline-buffer-path ((,class :inherit bold :foreground ,fg-active)))
+   `(doom-modeline-debug ((,class :inherit bold :foreground ,yellow-active)))
+   `(doom-modeline-debug-visual ((,class :inherit bold :foreground 
,red-active)))
+   `(doom-modeline-evil-emacs-state ((,class :inherit bold :foreground 
,magenta-active)))
+   `(doom-modeline-evil-insert-state ((,class :inherit bold :foreground 
,green-active)))
+   `(doom-modeline-evil-motion-state ((,class :inherit bold :foreground 
,fg-inactive)))
+   `(doom-modeline-evil-normal-state ((,class :inherit bold :foreground 
,fg-active)))
+   `(doom-modeline-evil-operator-state ((,class :inherit bold :foreground 
,blue-active)))
+   `(doom-modeline-evil-replace-state ((,class :inherit bold :foreground 
,red-active)))
+   `(doom-modeline-evil-visual-state ((,class :inherit bold :foreground 
,cyan-active)))
+   `(doom-modeline-highlight ((,class :inherit bold :foreground ,blue-active)))
+   `(doom-modeline-host ((,class :slant italic)))
+   `(doom-modeline-info ((,class :foreground ,green-active)))
+   `(doom-modeline-lsp-error ((,class :inherit bold :foreground ,red-active)))
+   `(doom-modeline-lsp-success ((,class :inherit bold :foreground 
,green-active)))
+   `(doom-modeline-lsp-warning ((,class :inherit bold :foreground 
,yellow-active)))
+   `(doom-modeline-panel ((,class :inherit modus-theme-active-blue)))
+   `(doom-modeline-persp-buffer-not-in-persp ((,class :foreground 
,yellow-active :slant italic)))
+   `(doom-modeline-persp-name ((,class :foreground ,fg-active)))
+   `(doom-modeline-project-dir ((,class :inherit bold :foreground 
,blue-active)))
+   `(doom-modeline-project-parent-dir ((,class :foreground ,blue-active)))
+   `(doom-modeline-project-root-dir ((,class :foreground ,fg-active)))
+   `(doom-modeline-unread-number ((,class :foreground ,fg-active :slant 
italic)))
+   `(doom-modeline-urgent ((,class :inherit bold :foreground ,red-active)))
+   `(doom-modeline-warning ((,class :inherit bold :foreground ,yellow-active)))
+;;;;; dynamic-ruler
+   `(dynamic-ruler-negative-face ((,class :inherit 
modus-theme-intense-neutral)))
+   `(dynamic-ruler-positive-face ((,class :inherit 
modus-theme-intense-yellow)))
+;;;;; easy-jekyll
+   `(easy-jekyll-help-face ((,class :background ,bg-dim :foreground 
,cyan-alt-other)))
+;;;;; easy-kill
+   `(easy-kill-origin ((,class :inherit modus-theme-subtle-red)))
+   `(easy-kill-selection ((,class :inherit modus-theme-subtle-yellow)))
+;;;;; ebdb
+   `(ebdb-address-default ((,class :foreground ,fg-main)))
+   `(ebdb-db-char ((,class :foreground ,fg-special-cold)))
+   `(ebdb-defunct ((,class :foreground ,fg-alt)))
+   `(ebdb-field-hidden ((,class :foreground ,magenta)))
+   `(ebdb-field-url ((,class :foreground ,blue)))
+   `(ebdb-label ((,class :foreground ,cyan-alt-other)))
+   `(ebdb-mail-default ((,class :foreground ,fg-main)))
+   `(ebdb-mail-primary ((,class :foreground ,blue-alt)))
+   `(ebdb-marked ((,class :background ,cyan-intense-bg)))
+   `(ebdb-organization-name ((,class :foreground ,fg-special-calm)))
+   `(ebdb-person-name ((,class :foreground ,magenta-alt-other)))
+   `(ebdb-phone-default ((,class :foreground ,fg-special-warm)))
+   `(ebdb-role-defunct ((,class :foreground ,fg-alt)))
+   `(eieio-custom-slot-tag-face ((,class :foreground ,red-alt)))
+;;;;; ediff
+   `(ediff-current-diff-A ((,class ,@(modus-vivendi-theme-diffs
+                                      bg-alt red
+                                      bg-diff-removed fg-diff-removed))))
+   `(ediff-current-diff-Ancestor ((,class ,@(modus-vivendi-theme-diffs
+                                             bg-alt fg-special-cold
+                                             bg-special-cold 
fg-special-cold))))
+   `(ediff-current-diff-B ((,class ,@(modus-vivendi-theme-diffs
+                                      bg-alt green
+                                      bg-diff-added fg-diff-added))))
+   `(ediff-current-diff-C ((,class ,@(modus-vivendi-theme-diffs
+                                      bg-alt yellow
+                                      bg-diff-changed fg-diff-changed))))
+   `(ediff-even-diff-A ((,class :background ,bg-diff-neutral-1 :foreground 
,fg-diff-neutral-1)))
+   `(ediff-even-diff-Ancestor ((,class :background ,bg-diff-neutral-2 
:foreground ,fg-diff-neutral-1)))
+   `(ediff-even-diff-B ((,class :background ,bg-diff-neutral-1 :foreground 
,fg-diff-neutral-1)))
+   `(ediff-even-diff-C ((,class :background ,bg-diff-neutral-2 :foreground 
,fg-diff-neutral-2)))
+   `(ediff-fine-diff-A ((,class :background ,bg-diff-focus-removed :foreground 
,fg-diff-focus-removed)))
+   `(ediff-fine-diff-Ancestor ((,class :inherit modus-theme-refine-cyan)))
+   `(ediff-fine-diff-B ((,class :background ,bg-diff-focus-added :foreground 
,fg-diff-focus-added)))
+   `(ediff-fine-diff-C ((,class :background ,bg-diff-focus-changed :foreground 
,fg-diff-focus-changed)))
+   `(ediff-odd-diff-A ((,class :background ,bg-diff-neutral-2 :foreground 
,fg-diff-neutral-2)))
+   `(ediff-odd-diff-Ancestor ((,class :background ,bg-diff-neutral-0 
:foreground ,fg-diff-neutral-0)))
+   `(ediff-odd-diff-B ((,class :background ,bg-diff-neutral-2 :foreground 
,fg-diff-neutral-2)))
+   `(ediff-odd-diff-C ((,class :background ,bg-diff-neutral-1 :foreground 
,fg-diff-neutral-1)))
+;;;;; eglot
+   `(eglot-mode-line ((,class ,@(modus-vivendi-theme-bold-weight) :foreground 
,magenta-active)))
+;;;;; el-search
+   `(el-search-highlight-in-prompt-face ((,class :inherit bold :foreground 
,magenta-alt)))
+   `(el-search-match ((,class :inherit modus-theme-intense-green)))
+   `(el-search-other-match ((,class :inherit modus-theme-special-mild)))
+   `(el-search-occur-match ((,class :inherit modus-theme-special-calm)))
+;;;;; eldoc-box
+   `(eldoc-box-body ((,class :background ,bg-alt :foreground ,fg-main)))
+   `(eldoc-box-border ((,class :background ,fg-alt)))
+;;;;; elfeed
+   `(elfeed-log-date-face ((,class :foreground ,cyan-alt)))
+   `(elfeed-log-debug-level-face ((,class :foreground ,magenta)))
+   `(elfeed-log-error-level-face ((,class :foreground ,red)))
+   `(elfeed-log-info-level-face ((,class :foreground ,green)))
+   `(elfeed-log-warn-level-face ((,class :foreground ,yellow)))
+   `(elfeed-search-date-face ((,class :foreground ,cyan)))
+   `(elfeed-search-feed-face ((,class :foreground ,blue)))
+   `(elfeed-search-filter-face ((,class :foreground ,magenta-active)))
+   `(elfeed-search-last-update-face ((,class :foreground ,green-active)))
+   `(elfeed-search-tag-face ((,class :foreground ,cyan-alt-other)))
+   `(elfeed-search-title-face ((,class :foreground ,fg-main)))
+   `(elfeed-search-unread-count-face ((,class :foreground ,blue-active)))
+   `(elfeed-search-unread-title-face ((,class :inherit bold)))
+;;;;; elfeed-score
+   `(elfeed-score-date-face ((,class :foreground ,blue)))
+   `(elfeed-score-debug-level-face ((,class :foreground ,magenta-alt-other)))
+   `(elfeed-score-error-level-face ((,class :foreground ,red)))
+   `(elfeed-score-info-level-face ((,class :foreground ,cyan)))
+   `(elfeed-score-warn-level-face ((,class :foreground ,yellow)))
+;;;;; emms
+   `(emms-playlist-track-face ((,class :foreground ,blue)))
+   `(emms-playlist-selected-face ((,class :inherit bold :foreground ,magenta)))
+;;;;; enhanced-ruby-mode
+   `(enh-ruby-heredoc-delimiter-face ((,class :foreground ,blue-alt-other)))
+   `(enh-ruby-op-face ((,class :foreground ,fg-main)))
+   `(enh-ruby-regexp-delimiter-face ((,class :foreground ,green)))
+   `(enh-ruby-regexp-face ((,class :foreground ,magenta)))
+   `(enh-ruby-string-delimiter-face ((,class :foreground ,blue-alt)))
+   `(erm-syn-errline ((,class :foreground ,red :underline t)))
+   `(erm-syn-warnline ((,class :foreground ,yellow :underline t)))
+;;;;; epa
+   `(epa-field-body ((,class :foreground ,fg-main)))
+   `(epa-field-name ((,class :inherit bold :foreground ,fg-dim)))
+   `(epa-mark ((,class :inherit bold :foreground ,magenta)))
+   `(epa-string ((,class :foreground ,blue-alt)))
+   `(epa-validity-disabled ((,class :inherit modus-theme-refine-red)))
+   `(epa-validity-high ((,class :inherit bold :foreground ,green-alt-other)))
+   `(epa-validity-low ((,class :foreground ,fg-alt)))
+   `(epa-validity-medium ((,class :foreground ,green-alt)))
+;;;;; equake
+   `(equake-buffer-face ((,class :background ,bg-main :foreground ,fg-main)))
+   `(equake-shell-type-eshell ((,class :background ,bg-inactive :foreground 
,green-active)))
+   `(equake-shell-type-rash ((,class :background ,bg-inactive :foreground 
,red-active)))
+   `(equake-shell-type-shell ((,class :background ,bg-inactive :foreground 
,cyan-active)))
+   `(equake-shell-type-term ((,class :background ,bg-inactive :foreground 
,yellow-active)))
+   `(equake-shell-type-vterm ((,class :background ,bg-inactive :foreground 
,magenta-active)))
+   `(equake-tab-active ((,class :background ,fg-alt :foreground ,bg-alt)))
+   `(equake-tab-inactive ((,class :foreground ,fg-inactive)))
+;;;;; erc
+   `(erc-action-face ((,class :inherit bold :foreground ,cyan)))
+   `(erc-bold-face ((,class :inherit bold)))
+   `(erc-button ((,class :inherit button)))
+   `(erc-command-indicator-face ((,class :inherit bold :foreground ,cyan-alt)))
+   `(erc-current-nick-face ((,class :foreground ,magenta-alt-other)))
+   `(erc-dangerous-host-face ((,class :inherit modus-theme-intense-red)))
+   `(erc-direct-msg-face ((,class :foreground ,magenta)))
+   `(erc-error-face ((,class :inherit bold :foreground ,red)))
+   `(erc-fool-face ((,class :foreground ,fg-inactive)))
+   `(erc-header-line ((,class :background ,bg-header :foreground ,fg-header)))
+   `(erc-input-face ((,class :foreground ,fg-special-calm)))
+   `(erc-inverse-face ((,class :inherit erc-default-face :inverse-video t)))
+   `(erc-keyword-face ((,class :inherit bold :foreground ,magenta-alt)))
+   `(erc-my-nick-face ((,class :inherit bold :foreground ,magenta)))
+   `(erc-my-nick-prefix-face ((,class :inherit erc-my-nick-face)))
+   `(erc-nick-default-face ((,class :inherit bold :foreground ,blue)))
+   `(erc-nick-msg-face ((,class :inherit bold :foreground ,green)))
+   `(erc-nick-prefix-face ((,class :inherit erc-nick-default-face)))
+   `(erc-notice-face ((,class :foreground ,fg-unfocused)))
+   `(erc-pal-face ((,class :inherit bold :foreground ,red-alt)))
+   `(erc-prompt-face ((,class :inherit bold :foreground ,cyan-alt-other)))
+   `(erc-timestamp-face ((,class :foreground ,blue-nuanced)))
+   `(erc-underline-face ((,class :underline t)))
+;;;;; eros
+   `(eros-result-overlay-face ((,class :box (:line-width -1 :color ,blue)
+                                       :background ,bg-dim :foreground 
,fg-dim)))
+;;;;; ert
+   `(ert-test-result-expected ((,class :inherit modus-theme-intense-green)))
+   `(ert-test-result-unexpected ((,class :inherit modus-theme-intense-red)))
+;;;;; eshell
+   `(eshell-ls-archive ((,class :inherit bold :foreground ,cyan-alt)))
+   `(eshell-ls-backup ((,class :foreground ,yellow-alt)))
+   `(eshell-ls-clutter ((,class :foreground ,red-alt)))
+   `(eshell-ls-directory ((,class :inherit bold :foreground ,blue-alt)))
+   `(eshell-ls-executable ((,class :foreground ,magenta-alt)))
+   `(eshell-ls-missing ((,class :inherit modus-theme-intense-red)))
+   `(eshell-ls-product ((,class :foreground ,fg-special-warm)))
+   `(eshell-ls-readonly ((,class :foreground ,fg-special-cold)))
+   `(eshell-ls-special ((,class :inherit bold :foreground ,magenta)))
+   `(eshell-ls-symlink ((,class :foreground ,cyan :underline t)))
+   `(eshell-ls-unreadable ((,class :background ,bg-inactive :foreground 
,fg-inactive)))
+   `(eshell-prompt ((,class ,@(modus-vivendi-theme-bold-weight)
+                            ,@(modus-vivendi-theme-prompt green-alt-other
+                                                          green-nuanced-bg
+                                                          green-alt
+                                                          green-refine-bg
+                                                          fg-main))))
+;;;;; eshell-fringe-status
+   `(eshell-fringe-status-failure ((,class :foreground ,red)))
+   `(eshell-fringe-status-success ((,class :foreground ,green)))
+;;;;; eshell-git-prompt
+   `(eshell-git-prompt-add-face ((,class :foreground ,fg-alt)))
+   `(eshell-git-prompt-branch-face ((,class :foreground ,fg-alt)))
+   `(eshell-git-prompt-directory-face ((,class :foreground ,cyan)))
+   `(eshell-git-prompt-exit-fail-face ((,class :foreground ,red)))
+   `(eshell-git-prompt-exit-success-face ((,class :foreground ,green)))
+   `(eshell-git-prompt-modified-face ((,class :foreground ,yellow)))
+   `(eshell-git-prompt-powerline-clean-face ((,class :background 
,green-refine-bg)))
+   `(eshell-git-prompt-powerline-dir-face ((,class :background 
,blue-refine-bg)))
+   `(eshell-git-prompt-powerline-not-clean-face ((,class :background 
,magenta-refine-bg)))
+   `(eshell-git-prompt-robyrussell-branch-face ((,class :foreground ,red)))
+   `(eshell-git-prompt-robyrussell-git-dirty-face ((,class :foreground 
,yellow)))
+   `(eshell-git-prompt-robyrussell-git-face ((,class :foreground ,blue)))
+;;;;; eshell-prompt-extras (epe)
+   `(epe-dir-face ((,class ,@(modus-vivendi-theme-bold-weight) :foreground 
,blue)))
+   `(epe-git-dir-face ((,class :foreground ,red-alt-other)))
+   `(epe-git-face ((,class :foreground ,cyan-alt)))
+   `(epe-pipeline-delimiter-face ((,class :foreground ,green-alt)))
+   `(epe-pipeline-host-face ((,class :foreground ,blue)))
+   `(epe-pipeline-time-face ((,class :foreground ,fg-special-warm)))
+   `(epe-pipeline-user-face ((,class :foreground ,magenta)))
+   `(epe-remote-face ((,class :foreground ,fg-alt :slant ,modus-theme-slant)))
+   `(epe-status-face ((,class :foreground ,magenta-alt-other)))
+   `(epe-venv-face ((,class :foreground ,fg-alt :slant ,modus-theme-slant)))
+;;;;; evil-mode
+   `(evil-ex-commands ((,class :foreground ,magenta-alt-other)))
+   `(evil-ex-info ((,class :foreground ,cyan-alt-other)))
+   `(evil-ex-lazy-highlight ((,class :inherit modus-theme-refine-cyan)))
+   `(evil-ex-search ((,class :inherit modus-theme-intense-green)))
+   `(evil-ex-substitute-matches ((,class :inherit modus-theme-refine-yellow 
:underline t)))
+   `(evil-ex-substitute-replacement ((,class :inherit 
(modus-theme-intense-green bold))))
+;;;;; evil-goggles
+   `(evil-goggles-change-face ((,class :inherit modus-theme-refine-yellow)))
+   `(evil-goggles-commentary-face ((,class :inherit modus-theme-subtle-neutral 
:slant ,modus-theme-slant)))
+   `(evil-goggles-default-face ((,class :inherit modus-theme-subtle-neutral)))
+   `(evil-goggles-delete-face ((,class :inherit modus-theme-refine-red)))
+   `(evil-goggles-fill-and-move-face ((,class :inherit 
evil-goggles-default-face)))
+   `(evil-goggles-indent-face ((,class :inherit evil-goggles-default-face)))
+   `(evil-goggles-join-face ((,class :inherit modus-theme-subtle-green)))
+   `(evil-goggles-nerd-commenter-face ((,class :inherit 
evil-goggles-commentary-face)))
+   `(evil-goggles-paste-face ((,class :inherit modus-theme-subtle-cyan)))
+   `(evil-goggles-record-macro-face ((,class :inherit 
modus-theme-special-cold)))
+   `(evil-goggles-replace-with-register-face ((,class :inherit 
modus-theme-refine-magenta)))
+   `(evil-goggles-set-marker-face ((,class :inherit 
modus-theme-intense-magenta)))
+   `(evil-goggles-shift-face ((,class :inherit evil-goggles-default-face)))
+   `(evil-goggles-surround-face ((,class :inherit evil-goggles-default-face)))
+   `(evil-goggles-yank-face ((,class :inherit modus-theme-subtle-blue)))
+;;;;; evil-visual-mark-mode
+   `(evil-visual-mark-face ((,class :inherit modus-theme-intense-magenta)))
+;;;;; eww
+   `(eww-invalid-certificate ((,class :foreground ,red-active)))
+   `(eww-valid-certificate ((,class :foreground ,green-active)))
+   `(eww-form-checkbox ((,class :box (:line-width 1 :color ,fg-inactive :style 
released-button) :background ,bg-inactive :foreground ,fg-main)))
+   `(eww-form-file ((,class :box (:line-width 1 :color ,fg-inactive :style 
released-button) :background ,bg-active :foreground ,fg-main)))
+   `(eww-form-select ((,class :inherit eww-form-checkbox)))
+   `(eww-form-submit ((,class :inherit eww-form-file)))
+   `(eww-form-text ((,class :box (:line-width 1 :color ,fg-inactive :style 
none) :background ,bg-active :foreground ,fg-active)))
+   `(eww-form-textarea ((,class :background ,bg-alt :foreground ,fg-main)))
+;;;;; eyebrowse
+   `(eyebrowse-mode-line-active ((,class :inherit bold :foreground 
,blue-active)))
+;;;;; fancy-dabbrev
+   `(fancy-dabbrev-menu-face ((,class :background ,bg-alt :foreground 
,fg-alt)))
+   `(fancy-dabbrev-preview-face ((,class :foreground ,fg-alt :underline t)))
+   `(fancy-dabbrev-selection-face ((,class :inherit (modus-theme-intense-cyan 
bold))))
+;;;;; flycheck
+   `(flycheck-error
+     ((,(append '((supports :underline (:style wave))) class)
+       :underline (:color ,fg-lang-error :style wave))
+      (,class :foreground ,fg-lang-error :underline t)))
+   `(flycheck-error-list-checker-name ((,class :foreground ,magenta-active)))
+   `(flycheck-error-list-column-number ((,class :foreground ,fg-special-cold)))
+   `(flycheck-error-list-error ((,class ,@(modus-vivendi-theme-bold-weight) 
:foreground ,red)))
+   `(flycheck-error-list-filename ((,class :foreground ,blue)))
+   `(flycheck-error-list-highlight ((,class :inherit modus-theme-hl-line)))
+   `(flycheck-error-list-id ((,class :foreground ,magenta-alt-other)))
+   `(flycheck-error-list-id-with-explainer ((,class :inherit 
flycheck-error-list-id :box t)))
+   `(flycheck-error-list-info ((,class :foreground ,cyan)))
+   `(flycheck-error-list-line-number ((,class :foreground ,fg-special-warm)))
+   `(flycheck-error-list-warning ((,class :foreground ,yellow)))
+   `(flycheck-fringe-error ((,class :inherit modus-theme-fringe-red)))
+   `(flycheck-fringe-info ((,class :inherit modus-theme-fringe-cyan)))
+   `(flycheck-fringe-warning ((,class :inherit modus-theme-fringe-yellow)))
+   `(flycheck-info
+     ((,(append '((supports :underline (:style wave))) class)
+       :underline (:color ,fg-lang-note :style wave))
+      (,class :foreground ,fg-lang-note :underline t)))
+   `(flycheck-verify-select-checker ((,class :box (:line-width 1 :color nil 
:style released-button))))
+   `(flycheck-warning
+     ((,(append '((supports :underline (:style wave))) class)
+       :underline (:color ,fg-lang-warning :style wave))
+      (,class :foreground ,fg-lang-warning :underline t)))
+;;;;; flycheck-indicator
+   `(flycheck-indicator-disabled ((,class :foreground ,fg-inactive :slant 
,modus-theme-slant)))
+   `(flycheck-indicator-error ((,class ,@(modus-vivendi-theme-bold-weight) 
:foreground ,red-active)))
+   `(flycheck-indicator-info ((,class ,@(modus-vivendi-theme-bold-weight) 
:foreground ,blue-active)))
+   `(flycheck-indicator-running ((,class ,@(modus-vivendi-theme-bold-weight) 
:foreground ,magenta-active)))
+   `(flycheck-indicator-success ((,class ,@(modus-vivendi-theme-bold-weight) 
:foreground ,green-active)))
+   `(flycheck-indicator-warning ((,class ,@(modus-vivendi-theme-bold-weight) 
:foreground ,yellow-active)))
+;;;;; flycheck-posframe
+   `(flycheck-posframe-background-face ((,class :background ,bg-alt)))
+   `(flycheck-posframe-border-face ((,class :foreground ,fg-alt)))
+   `(flycheck-posframe-error-face ((,class :inherit bold :foreground ,red)))
+   `(flycheck-posframe-face ((,class :foreground ,fg-main :slant 
,modus-theme-slant)))
+   `(flycheck-posframe-info-face ((,class :inherit bold :foreground ,cyan)))
+   `(flycheck-posframe-warning-face ((,class :inherit bold :foreground 
,yellow)))
+;;;;; flymake
+   `(flymake-error
+     ((,(append '((supports :underline (:style wave))) class)
+       :underline (:color ,fg-lang-error :style wave))
+      (,class :foreground ,fg-lang-error :underline t)))
+   `(flymake-note
+     ((,(append '((supports :underline (:style wave))) class)
+       :underline (:color ,fg-lang-note :style wave))
+      (,class :foreground ,fg-lang-note :underline t)))
+   `(flymake-warning
+     ((,(append '((supports :underline (:style wave))) class)
+       :underline (:color ,fg-lang-warning :style wave))
+      (,class :foreground ,fg-lang-warning :underline t)))
+;;;;; flyspell
+   `(flyspell-duplicate
+     ((,(append '((supports :underline (:style wave))) class)
+       :underline (:color ,fg-lang-warning :style wave))
+      (,class :foreground ,fg-lang-warning :underline t)))
+   `(flyspell-incorrect
+     ((,(append '((supports :underline (:style wave))) class)
+       :underline (:color ,fg-lang-error :style wave))
+      (,class :foreground ,fg-lang-error :underline t)))
+;;;;; flyspell-correct
+   `(flyspell-correct-highlight-face ((,class :inherit 
modus-theme-refine-green)))
+;;;;; flx
+   `(flx-highlight-face ((,class ,@(modus-vivendi-theme-extra-completions
+                                    'modus-theme-subtle-magenta
+                                    'modus-theme-intense-magenta
+                                    'modus-theme-nuanced-magenta
+                                    magenta-alt-other
+                                    'bold))))
+;;;;; freeze-it
+   `(freeze-it-show ((,class :background ,bg-dim :foreground 
,fg-special-warm)))
+;;;;; frog-menu
+   `(frog-menu-action-keybinding-face ((,class :foreground ,blue-alt-other)))
+   `(frog-menu-actions-face ((,class :foreground ,magenta)))
+   `(frog-menu-border ((,class :background ,bg-active)))
+   `(frog-menu-candidates-face ((,class :foreground ,fg-main)))
+   `(frog-menu-posframe-background-face ((,class :background ,bg-dim)))
+   `(frog-menu-prompt-face ((,class :foreground ,cyan)))
+;;;;; focus
+   `(focus-unfocused ((,class :foreground ,fg-unfocused)))
+;;;;; fold-this
+   `(fold-this-overlay ((,class :inherit modus-theme-special-mild)))
+;;;;; font-lock
+   `(font-lock-builtin-face ((,class ,@(modus-vivendi-theme-syntax-foreground
+                                        magenta-alt magenta-alt-faint)
+                                     ,@(modus-vivendi-theme-bold-weight))))
+   `(font-lock-comment-delimiter-face ((,class :foreground ,fg-alt :slant 
,modus-theme-slant)))
+   `(font-lock-comment-face ((,class :foreground ,fg-alt :slant 
,modus-theme-slant)))
+   `(font-lock-constant-face ((,class ,@(modus-vivendi-theme-syntax-foreground
+                                         blue-alt-other 
blue-alt-other-faint))))
+   `(font-lock-doc-face ((,class ,@(modus-vivendi-theme-syntax-foreground
+                                    fg-special-cold cyan-alt-other-faint)
+                                 :slant ,modus-theme-slant)))
+   `(font-lock-function-name-face ((,class 
,@(modus-vivendi-theme-syntax-foreground
+                                              magenta magenta-faint))))
+   `(font-lock-keyword-face ((,class ,@(modus-vivendi-theme-syntax-foreground
+                                        magenta-alt-other 
magenta-alt-other-faint)
+                                     ,@(modus-vivendi-theme-bold-weight))))
+   `(font-lock-negation-char-face ((,class 
,@(modus-vivendi-theme-syntax-foreground
+                                              yellow yellow-faint)
+                                           
,@(modus-vivendi-theme-bold-weight))))
+   `(font-lock-preprocessor-face ((,class 
,@(modus-vivendi-theme-syntax-foreground
+                                             red-alt-other 
red-alt-other-faint))))
+   `(font-lock-regexp-grouping-backslash ((,class :inherit bold :foreground 
,fg-escape-char-backslash)))
+   `(font-lock-regexp-grouping-construct ((,class :inherit bold :foreground 
,fg-escape-char-construct)))
+   `(font-lock-string-face ((,class ,@(modus-vivendi-theme-syntax-foreground
+                                       blue-alt blue-alt-faint))))
+   `(font-lock-type-face ((,class ,@(modus-vivendi-theme-syntax-foreground
+                                     magenta-alt magenta-alt-faint))))
+   `(font-lock-variable-name-face ((,class 
,@(modus-vivendi-theme-syntax-foreground
+                                              cyan cyan-faint))))
+   `(font-lock-warning-face ((,class ,@(modus-vivendi-theme-syntax-foreground
+                                        yellow-active yellow-alt-faint)
+                                     ,@(modus-vivendi-theme-bold-weight))))
+;;;;; forge
+   `(forge-post-author ((,class :inherit bold :foreground ,fg-main)))
+   `(forge-post-date ((,class :foreground ,fg-special-cold)))
+   `(forge-topic-closed ((,class :foreground ,fg-alt)))
+   `(forge-topic-merged ((,class :foreground ,fg-alt)))
+   `(forge-topic-open ((,class :foreground ,fg-special-mild)))
+   `(forge-topic-unmerged ((,class :foreground ,magenta :slant 
,modus-theme-slant)))
+   `(forge-topic-unread ((,class :inherit bold :foreground ,fg-main)))
+;;;;; fountain-mode
+   `(fountain-character ((,class :foreground ,blue-alt-other)))
+   `(fountain-comment ((,class :foreground ,fg-alt :slant ,modus-theme-slant)))
+   `(fountain-dialog ((,class :foreground ,blue-alt)))
+   `(fountain-metadata-key ((,class :foreground ,green-alt-other)))
+   `(fountain-metadata-value ((,class :foreground ,blue)))
+   `(fountain-non-printing ((,class :foreground ,fg-alt)))
+   `(fountain-note ((,class :foreground ,yellow :slant ,modus-theme-slant)))
+   `(fountain-page-break ((,class :inherit bold :foreground ,red-alt)))
+   `(fountain-page-number ((,class :inherit bold :foreground ,red-alt-other)))
+   `(fountain-paren ((,class :foreground ,cyan)))
+   `(fountain-scene-heading ((,class :inherit bold :foreground ,blue-nuanced)))
+   `(fountain-section-heading ((,class :inherit (bold 
,modus-theme-variable-pitch) :foreground ,fg-main
+                                       ,@(modus-vivendi-theme-scale 
modus-vivendi-theme-scale-4))))
+   `(fountain-section-heading-1 ((,class :inherit (bold 
,modus-theme-variable-pitch) :foreground ,fg-main
+                                         ,@(modus-vivendi-theme-scale 
modus-vivendi-theme-scale-4))))
+   `(fountain-section-heading-2 ((,class :inherit (bold 
,modus-theme-variable-pitch) :foreground ,fg-special-warm
+                                         ,@(modus-vivendi-theme-scale 
modus-vivendi-theme-scale-3))))
+   `(fountain-section-heading-3 ((,class :inherit (bold 
,modus-theme-variable-pitch) :foreground ,fg-special-mild
+                                         ,@(modus-vivendi-theme-scale 
modus-vivendi-theme-scale-2))))
+   `(fountain-section-heading-4 ((,class :inherit (bold 
,modus-theme-variable-pitch) :foreground ,fg-special-calm
+                                         ,@(modus-vivendi-theme-scale 
modus-vivendi-theme-scale-1))))
+   `(fountain-section-heading-5 ((,class :inherit (bold 
,modus-theme-variable-pitch) :foreground ,fg-special-calm)))
+   `(fountain-synopsis ((,class :foreground ,cyan-alt)))
+   `(fountain-trans ((,class :foreground ,yellow-alt-other)))
+;;;;; geiser
+   `(geiser-font-lock-autodoc-current-arg ((,class 
,@(modus-vivendi-theme-syntax-foreground
+                                                      magenta magenta-faint))))
+   `(geiser-font-lock-autodoc-identifier ((,class 
,@(modus-vivendi-theme-syntax-foreground
+                                                     blue blue-faint))))
+   `(geiser-font-lock-doc-button ((,class 
,@(modus-vivendi-theme-syntax-foreground
+                                             cyan-alt cyan-alt-faint)
+                                          :underline t)))
+   `(geiser-font-lock-doc-link ((,class :inherit link)))
+   `(geiser-font-lock-error-link ((,class 
,@(modus-vivendi-theme-syntax-foreground
+                                             red-alt red-alt-faint)
+                                          :underline t)))
+   `(geiser-font-lock-image-button ((,class 
,@(modus-vivendi-theme-syntax-foreground
+                                               green-alt green-alt-faint)
+                                            :underline t)))
+   `(geiser-font-lock-repl-input ((,class :inherit bold)))
+   `(geiser-font-lock-repl-output ((,class 
,@(modus-vivendi-theme-syntax-foreground
+                                              magenta-alt-other 
magenta-alt-other-faint))))
+   `(geiser-font-lock-repl-prompt ((,class 
,@(modus-vivendi-theme-syntax-foreground
+                                              cyan-alt-other 
cyan-alt-other-faint))))
+   `(geiser-font-lock-xref-header ((,class :inherit bold)))
+   `(geiser-font-lock-xref-link ((,class :inherit link)))
+;;;;; git-commit
+   `(git-commit-comment-action ((,class :foreground ,fg-alt :slant 
,modus-theme-slant)))
+   `(git-commit-comment-branch-local ((,class :foreground ,blue-alt :slant 
,modus-theme-slant)))
+   `(git-commit-comment-branch-remote ((,class :foreground ,magenta-alt :slant 
,modus-theme-slant)))
+   `(git-commit-comment-detached ((,class :foreground ,cyan-alt :slant 
,modus-theme-slant)))
+   `(git-commit-comment-file ((,class :foreground ,fg-special-cold :slant 
,modus-theme-slant)))
+   `(git-commit-comment-heading ((,class :inherit bold :foreground ,fg-alt 
:slant ,modus-theme-slant)))
+   `(git-commit-keyword ((,class :foreground ,magenta)))
+   `(git-commit-known-pseudo-header ((,class :inherit bold :foreground 
,fg-special-warm)))
+   `(git-commit-nonempty-second-line ((,class :inherit 
modus-theme-refine-yellow)))
+   `(git-commit-overlong-summary ((,class :inherit modus-theme-refine-yellow)))
+   `(git-commit-pseudo-header ((,class :inherit bold :foreground ,fg-alt)))
+   `(git-commit-summary ((,class :foreground ,magenta-alt-other)))
+;;;;; git-gutter
+   `(git-gutter:added ((,class :inherit modus-theme-fringe-green)))
+   `(git-gutter:deleted ((,class :inherit modus-theme-fringe-red)))
+   `(git-gutter:modified ((,class :inherit modus-theme-fringe-yellow)))
+   `(git-gutter:separator ((,class :inherit modus-theme-fringe-cyan)))
+   `(git-gutter:unchanged ((,class :inherit modus-theme-fringe-magenta)))
+;;;;; git-gutter-fr
+   `(git-gutter-fr:added ((,class :inherit modus-theme-fringe-green)))
+   `(git-gutter-fr:deleted ((,class :inherit modus-theme-fringe-red)))
+   `(git-gutter-fr:modified ((,class :inherit modus-theme-fringe-yellow)))
+;;;;; git-{gutter,fringe}+
+   `(git-gutter+-added ((,class :inherit modus-theme-fringe-green)))
+   `(git-gutter+-deleted ((,class :inherit modus-theme-fringe-red)))
+   `(git-gutter+-modified ((,class :inherit modus-theme-fringe-yellow)))
+   `(git-gutter+-separator ((,class :inherit modus-theme-fringe-cyan)))
+   `(git-gutter+-unchanged ((,class :inherit modus-theme-fringe-magenta)))
+   `(git-gutter-fr+-added ((,class :inherit modus-theme-fringe-green)))
+   `(git-gutter-fr+-deleted ((,class :inherit modus-theme-fringe-red)))
+   `(git-gutter-fr+-modified ((,class :inherit modus-theme-fringe-yellow)))
+;;;;; git-lens
+   `(git-lens-added ((,class :inherit bold :foreground ,green)))
+   `(git-lens-deleted ((,class :inherit bold :foreground ,red)))
+   `(git-lens-header ((,class :inherit bold :height 1.1 :foreground ,cyan)))
+   `(git-lens-modified ((,class :inherit bold :foreground ,yellow)))
+   `(git-lens-renamed ((,class :inherit bold :foreground ,magenta)))
+;;;;; git-rebase
+   `(git-rebase-comment-hash ((,class :foreground ,fg-special-cold :slant 
,modus-theme-slant)))
+   `(git-rebase-comment-heading ((,class :inherit bold :foreground ,fg-dim 
:slant ,modus-theme-slant)))
+   `(git-rebase-description ((,class :foreground ,fg-main)))
+   `(git-rebase-hash ((,class :foreground ,cyan-alt-other)))
+;;;;; git-timemachine
+   `(git-timemachine-commit ((,class :inherit bold :foreground 
,yellow-active)))
+   `(git-timemachine-minibuffer-author-face ((,class :foreground 
,fg-special-warm)))
+   `(git-timemachine-minibuffer-detail-face ((,class :foreground ,red-alt)))
+;;;;; git-walktree
+   `(git-walktree-commit-face ((,class :foreground ,yellow)))
+   `(git-walktree-symlink-face ((,class :foreground ,cyan :underline t)))
+   `(git-walktree-tree-face ((,class :foreground ,magenta)))
+;;;;; gnus
+   `(gnus-button ((,class :inherit button)))
+   `(gnus-cite-1 ((,class :foreground ,blue-alt)))
+   `(gnus-cite-10 ((,class :foreground ,magenta-alt-other)))
+   `(gnus-cite-11 ((,class :foreground ,yellow-alt-other)))
+   `(gnus-cite-2 ((,class :foreground ,red-alt)))
+   `(gnus-cite-3 ((,class :foreground ,green-alt)))
+   `(gnus-cite-4 ((,class :foreground ,magenta-alt)))
+   `(gnus-cite-5 ((,class :foreground ,yellow-alt)))
+   `(gnus-cite-6 ((,class :foreground ,cyan-alt)))
+   `(gnus-cite-7 ((,class :foreground ,blue-alt-other)))
+   `(gnus-cite-8 ((,class :foreground ,red-alt-other)))
+   `(gnus-cite-9 ((,class :foreground ,green-alt-other)))
+   `(gnus-cite-attribution ((,class :foreground ,fg-main :slant italic)))
+   `(gnus-emphasis-highlight-words ((,class :inherit 
modus-theme-refine-yellow)))
+   `(gnus-group-mail-1 ((,class :inherit bold :foreground ,magenta-alt)))
+   `(gnus-group-mail-1-empty ((,class :foreground ,magenta-alt)))
+   `(gnus-group-mail-2 ((,class :inherit bold :foreground ,magenta)))
+   `(gnus-group-mail-2-empty ((,class :foreground ,magenta)))
+   `(gnus-group-mail-3 ((,class :inherit bold :foreground ,magenta-alt-other)))
+   `(gnus-group-mail-3-empty ((,class :foreground ,magenta-alt-other)))
+   `(gnus-group-mail-low ((,class :inherit bold :foreground ,magenta-nuanced)))
+   `(gnus-group-mail-low-empty ((,class :foreground ,magenta-nuanced)))
+   `(gnus-group-news-1 ((,class :inherit bold :foreground ,green)))
+   `(gnus-group-news-1-empty ((,class :foreground ,green)))
+   `(gnus-group-news-2 ((,class :inherit bold :foreground ,cyan)))
+   `(gnus-group-news-2-empty ((,class :foreground ,cyan)))
+   `(gnus-group-news-3 ((,class :inherit bold :foreground ,yellow-nuanced)))
+   `(gnus-group-news-3-empty ((,class :foreground ,yellow-nuanced)))
+   `(gnus-group-news-4 ((,class :inherit bold :foreground ,cyan-nuanced)))
+   `(gnus-group-news-4-empty ((,class :foreground ,cyan-nuanced)))
+   `(gnus-group-news-5 ((,class :inherit bold :foreground ,red-nuanced)))
+   `(gnus-group-news-5-empty ((,class :foreground ,red-nuanced)))
+   `(gnus-group-news-6 ((,class :inherit bold :foreground ,fg-alt)))
+   `(gnus-group-news-6-empty ((,class :foreground ,fg-alt)))
+   `(gnus-group-news-low ((,class :inherit bold :foreground ,green-nuanced)))
+   `(gnus-group-news-low-empty ((,class :foreground ,green-nuanced)))
+   `(gnus-header-content ((,class :foreground ,fg-special-calm)))
+   `(gnus-header-from ((,class :inherit bold :foreground ,cyan-alt :underline 
nil)))
+   `(gnus-header-name ((,class :foreground ,cyan-alt-other)))
+   `(gnus-header-newsgroups ((,class :inherit bold :foreground ,blue-alt)))
+   `(gnus-header-subject ((,class :inherit bold :foreground 
,magenta-alt-other)))
+   `(gnus-server-agent ((,class :inherit bold :foreground ,cyan)))
+   `(gnus-server-closed ((,class :inherit bold :foreground ,magenta)))
+   `(gnus-server-cloud ((,class :inherit bold :foreground ,cyan-alt)))
+   `(gnus-server-cloud-host ((,class :inherit modus-theme-refine-cyan)))
+   `(gnus-server-denied ((,class :inherit bold :foreground ,red)))
+   `(gnus-server-offline ((,class :inherit bold :foreground ,yellow)))
+   `(gnus-server-opened ((,class :inherit bold :foreground ,green)))
+   `(gnus-signature ((,class :foreground ,fg-special-cold :slant italic)))
+   `(gnus-splash ((,class :foreground ,fg-alt)))
+   `(gnus-summary-cancelled ((,class :inherit modus-theme-mark-alt)))
+   `(gnus-summary-high-ancient ((,class :inherit bold :foreground ,fg-alt)))
+   `(gnus-summary-high-read ((,class :inherit bold :foreground 
,fg-special-cold)))
+   `(gnus-summary-high-ticked ((,class :inherit bold :foreground 
,red-alt-other)))
+   `(gnus-summary-high-undownloaded ((,class :inherit bold :foreground 
,yellow)))
+   `(gnus-summary-high-unread ((,class :inherit bold :foreground ,fg-main)))
+   `(gnus-summary-low-ancient ((,class :foreground ,fg-alt :slant italic)))
+   `(gnus-summary-low-read ((,class :foreground ,fg-special-cold :slant 
italic)))
+   `(gnus-summary-low-ticked ((,class :foreground ,red-refine-fg :slant 
italic)))
+   `(gnus-summary-low-undownloaded ((,class :foreground ,yellow-refine-fg 
:slant italic)))
+   `(gnus-summary-low-unread ((,class :inherit bold :foreground 
,fg-special-cold)))
+   `(gnus-summary-normal-ancient ((,class :foreground ,fg-special-calm)))
+   `(gnus-summary-normal-read ((,class :foreground ,fg-special-cold)))
+   `(gnus-summary-normal-ticked ((,class :foreground ,red-alt-other)))
+   `(gnus-summary-normal-undownloaded ((,class :foreground ,yellow)))
+   `(gnus-summary-normal-unread ((,class :foreground ,fg-main)))
+   `(gnus-summary-selected ((,class :inherit modus-theme-subtle-blue)))
+;;;;; golden-ratio-scroll-screen
+   `(golden-ratio-scroll-highlight-line-face ((,class :background 
,cyan-subtle-bg :foreground ,fg-main)))
+;;;;; helm
+   `(helm-M-x-key ((,class :inherit bold :foreground ,magenta-alt-other)))
+   `(helm-action ((,class :underline t)))
+   `(helm-bookmark-addressbook ((,class :foreground ,green-alt)))
+   `(helm-bookmark-directory ((,class :inherit bold :foreground ,blue)))
+   `(helm-bookmark-file ((,class :foreground ,fg-main)))
+   `(helm-bookmark-file-not-found ((,class :background ,bg-alt :foreground 
,fg-alt)))
+   `(helm-bookmark-gnus ((,class :foreground ,magenta)))
+   `(helm-bookmark-info ((,class :foreground ,cyan-alt)))
+   `(helm-bookmark-man ((,class :foreground ,yellow-alt)))
+   `(helm-bookmark-w3m ((,class :foreground ,blue-alt)))
+   `(helm-buffer-archive ((,class :inherit bold :foreground ,cyan)))
+   `(helm-buffer-directory ((,class :inherit bold :foreground ,blue)))
+   `(helm-buffer-file ((,class :foreground ,fg-main)))
+   `(helm-buffer-modified ((,class :foreground ,yellow-alt)))
+   `(helm-buffer-not-saved ((,class :foreground ,red-alt)))
+   `(helm-buffer-process ((,class :foreground ,magenta)))
+   `(helm-buffer-saved-out ((,class :inherit bold :background ,bg-alt 
:foreground ,red)))
+   `(helm-buffer-size ((,class :foreground ,fg-alt)))
+   `(helm-candidate-number ((,class :foreground ,cyan-active)))
+   `(helm-candidate-number-suspended ((,class :foreground ,yellow-active)))
+   `(helm-comint-prompts-buffer-name ((,class :foreground ,green-active)))
+   `(helm-comint-prompts-promptidx ((,class :foreground ,cyan-active)))
+   `(helm-delete-async-message ((,class :inherit bold :foreground 
,magenta-active)))
+   `(helm-eob-line ((,class :background ,bg-main :foreground ,fg-main)))
+   `(helm-eshell-prompts-buffer-name ((,class :foreground ,green-active)))
+   `(helm-eshell-prompts-promptidx ((,class :foreground ,cyan-active)))
+   `(helm-etags-file ((,class :foreground ,fg-dim :underline t)))
+   `(helm-ff-backup-file ((,class :foreground ,fg-alt)))
+   `(helm-ff-denied ((,class ,@(modus-vivendi-theme-extra-completions
+                                'modus-theme-subtle-red
+                                'modus-theme-intense-red
+                                'modus-theme-nuanced-red
+                                red))))
+   `(helm-ff-directory ((,class :inherit helm-buffer-directory)))
+   `(helm-ff-dirs ((,class :inherit bold :foreground ,blue-alt-other)))
+   `(helm-ff-dotted-directory ((,class :inherit bold :background ,bg-alt 
:foreground ,fg-alt)))
+   `(helm-ff-dotted-symlink-directory ((,class :inherit 
helm-ff-dotted-directory :underline t)))
+   `(helm-ff-executable ((,class :foreground ,magenta-alt)))
+   `(helm-ff-file ((,class :foreground ,fg-main)))
+   `(helm-ff-file-extension ((,class :foreground ,fg-special-warm)))
+   `(helm-ff-invalid-symlink ((,class :foreground ,red :underline t)))
+   `(helm-ff-pipe ((,class ,@(modus-vivendi-theme-extra-completions
+                              'modus-theme-refine-magenta
+                              'modus-theme-subtle-magenta
+                              'modus-theme-nuanced-magenta
+                              magenta))))
+   `(helm-ff-prefix ((,class ,@(modus-vivendi-theme-extra-completions
+                                'modus-theme-refine-yellow
+                                'modus-theme-subtle-yellow
+                                'modus-theme-nuanced-yellow
+                                yellow-alt-other))))
+   `(helm-ff-socket ((,class :foreground ,red-alt-other)))
+   `(helm-ff-suid ((,class ,@(modus-vivendi-theme-extra-completions
+                              'modus-theme-subtle-red
+                              'modus-theme-refine-red
+                              'modus-theme-nuanced-yellow
+                              red-alt))))
+   `(helm-ff-symlink ((,class :foreground ,cyan :underline t)))
+   `(helm-ff-truename ((,class :foreground ,blue-alt-other)))
+   `(helm-grep-cmd-line ((,class :foreground ,yellow-alt-other)))
+   `(helm-grep-file ((,class :inherit bold :foreground ,fg-special-cold)))
+   `(helm-grep-finish ((,class :foreground ,green-active)))
+   `(helm-grep-lineno ((,class :foreground ,fg-special-warm)))
+   `(helm-grep-match ((,class :inherit modus-theme-special-calm)))
+   `(helm-header ((,class :inherit bold :foreground ,fg-special-cold)))
+   `(helm-header-line-left-margin ((,class :inherit bold :foreground 
,yellow-intense)))
+   `(helm-history-deleted ((,class ,@(modus-vivendi-theme-extra-completions
+                                      'modus-theme-subtle-red
+                                      'modus-theme-intense-red
+                                      'modus-theme-nuanced-red
+                                      red
+                                      'bold))))
+   `(helm-history-remote ((,class :foreground ,red-alt-other)))
+   `(helm-lisp-completion-info ((,class :foreground ,fg-special-warm)))
+   `(helm-lisp-show-completion ((,class 
,@(modus-vivendi-theme-extra-completions
+                                           'modus-theme-subtle-yellow
+                                           'modus-theme-refine-yellow
+                                           'modus-theme-nuanced-yellow
+                                           yellow
+                                           'bold))))
+   `(helm-locate-finish ((,class :foreground ,green-active)))
+   `(helm-match ((,class ,@(modus-vivendi-theme-extra-completions
+                            'modus-theme-subtle-cyan
+                            'modus-theme-refine-cyan
+                            'modus-theme-nuanced-cyan
+                            cyan
+                            'bold))))
+   `(helm-match-item ((,class ,@(modus-vivendi-theme-extra-completions
+                                 'modus-theme-subtle-neutral
+                                 'modus-theme-subtle-cyan
+                                 'modus-theme-nuanced-cyan
+                                 cyan-alt-other))))
+   `(helm-minibuffer-prompt ((,class :inherit minibuffer-prompt)))
+   `(helm-moccur-buffer ((,class :foreground ,cyan-alt-other :underline t)))
+   `(helm-mode-prefix ((,class ,@(modus-vivendi-theme-extra-completions
+                                  'modus-theme-subtle-magenta
+                                  'modus-theme-intense-magenta
+                                  'modus-theme-nuanced-magenta
+                                  magenta-alt
+                                  'bold))))
+   `(helm-non-file-buffer ((,class :foreground ,fg-alt)))
+   `(helm-prefarg ((,class :foreground ,red-active)))
+   `(helm-resume-need-update ((,class ,@(modus-vivendi-theme-extra-completions
+                                         'modus-theme-subtle-magenta
+                                         'modus-theme-refine-magenta
+                                         'modus-theme-nuanced-magenta
+                                         magenta-alt-other))))
+   `(helm-selection ((,class ,@(modus-vivendi-theme-extra-completions
+                                'modus-theme-subtle-blue
+                                'modus-theme-refine-blue
+                                'modus-theme-special-cold
+                                nil
+                                'bold))))
+   `(helm-selection-line ((,class :inherit modus-theme-special-cold)))
+   `(helm-separator ((,class :foreground ,fg-special-mild)))
+   `(helm-time-zone-current ((,class :foreground ,green)))
+   `(helm-time-zone-home ((,class :foreground ,magenta)))
+   `(helm-source-header ((,class :inherit bold :foreground ,red-alt
+                                 ,@(modus-vivendi-theme-scale 
modus-vivendi-theme-scale-4))))
+   `(helm-top-columns ((,class :inherit helm-header)))
+   `(helm-ucs-char ((,class :foreground ,yellow-alt-other)))
+   `(helm-visible-mark ((,class :inherit modus-theme-subtle-cyan)))
+;;;;; helm-ls-git
+   `(helm-ls-git-added-copied-face ((,class :foreground ,green-intense)))
+   `(helm-ls-git-added-modified-face ((,class :foreground ,yellow-intense)))
+   `(helm-ls-git-conflict-face ((,class :inherit bold :foreground 
,red-intense)))
+   `(helm-ls-git-deleted-and-staged-face ((,class :foreground ,red-nuanced)))
+   `(helm-ls-git-deleted-not-staged-face ((,class :foreground ,red)))
+   `(helm-ls-git-modified-and-staged-face ((,class :foreground 
,yellow-nuanced)))
+   `(helm-ls-git-modified-not-staged-face ((,class :foreground ,yellow)))
+   `(helm-ls-git-renamed-modified-face ((,class :foreground ,magenta)))
+   `(helm-ls-git-untracked-face ((,class :foreground ,fg-special-cold)))
+;;;;; helm-switch-shell
+   `(helm-switch-shell-new-shell-face ((,class 
,@(modus-vivendi-theme-extra-completions
+                                                  'modus-theme-subtle-magenta
+                                                  'modus-theme-refine-magenta
+                                                  'modus-theme-nuanced-magenta
+                                                  magenta-alt-other
+                                                  'bold))))
+;;;;; helm-xref
+   `(helm-xref-file-name ((,class :inherit bold :foreground ,fg-special-cold)))
+   `(helm-xref-file-name ((,class :foreground ,fg-special-warm)))
+;;;;; helpful
+   `(helpful-heading  ((,class :inherit (bold ,modus-theme-variable-pitch) 
:foreground ,fg-main
+                               ,@(modus-vivendi-theme-scale 
modus-vivendi-theme-scale-4))))
+;;;;; highlight region or ad-hoc regexp
+   `(hi-black-b ((,class :background ,fg-main :foreground ,bg-main)))
+   `(hi-blue ((,class :background ,bg-alt :foreground ,blue :underline t)))
+   `(hi-blue-b ((,class :inherit modus-theme-intense-blue)))
+   `(hi-green ((,class :background ,bg-alt :foreground ,green :underline t)))
+   `(hi-green-b ((,class :inherit modus-theme-intense-green)))
+   `(hi-pink ((,class :background ,bg-alt :foreground ,magenta :underline t)))
+   `(hi-red-b ((,class :inherit modus-theme-intense-red)))
+   `(hi-yellow ((,class :background ,bg-alt :foreground ,yellow :underline t)))
+   `(highlight ((,class :inherit modus-theme-subtle-blue)))
+   `(highlight-changes ((,class :foreground ,yellow-alt-other)))
+   `(highlight-changes-delete ((,class :foreground ,red-alt-other :underline 
t)))
+   `(hl-line ((,class :inherit modus-theme-hl-line)))
+;;;;; highlight-blocks
+   `(highlight-blocks-depth-1-face ((,class :background ,bg-dim :foreground 
,fg-main)))
+   `(highlight-blocks-depth-2-face ((,class :background ,bg-alt :foreground 
,fg-main)))
+   `(highlight-blocks-depth-3-face ((,class :background ,bg-special-cold 
:foreground ,fg-main)))
+   `(highlight-blocks-depth-4-face ((,class :background ,bg-special-calm 
:foreground ,fg-main)))
+   `(highlight-blocks-depth-5-face ((,class :background ,bg-special-warm 
:foreground ,fg-main)))
+   `(highlight-blocks-depth-6-face ((,class :background ,bg-special-mild 
:foreground ,fg-main)))
+   `(highlight-blocks-depth-7-face ((,class :background ,bg-inactive 
:foreground ,fg-main)))
+   `(highlight-blocks-depth-8-face ((,class :background ,bg-active :foreground 
,fg-main)))
+   `(highlight-blocks-depth-9-face ((,class :background ,cyan-subtle-bg 
:foreground ,fg-main)))
+;;;;; highlight-defined
+   `(highlight-defined-builtin-function-name-face ((,class :foreground 
,magenta)))
+   `(highlight-defined-face-name-face ((,class :foreground ,fg-main)))
+   `(highlight-defined-function-name-face ((,class :foreground ,magenta)))
+   `(highlight-defined-macro-name-face ((,class :foreground ,magenta-alt)))
+   `(highlight-defined-special-form-name-face ((,class :foreground 
,magenta-alt-other)))
+   `(highlight-defined-variable-name-face ((,class :foreground ,cyan)))
+;;;;; highlight-escape-sequences (`hes-mode')
+   `(hes-escape-backslash-face ((,class :inherit bold :foreground 
,fg-escape-char-construct)))
+   `(hes-escape-sequence-face ((,class :inherit bold :foreground 
,fg-escape-char-backslash)))
+;;;;; highlight-indentation
+   `(highlight-indentation-face ((,class :inherit modus-theme-hl-line)))
+   `(highlight-indentation-current-column-face ((,class :background 
,bg-active)))
+;;;;; highlight-numbers
+   `(highlight-numbers-number ((,class :foreground ,blue-alt-other)))
+;;;;; highlight-symbol
+   `(highlight-symbol-face ((,class :inherit modus-theme-special-mild)))
+;;;;; highlight-thing
+   `(highlight-thing ((,class :background ,bg-alt :foreground ,cyan)))
+;;;;; hl-defined
+   `(hdefd-functions ((,class :foreground ,blue)))
+   `(hdefd-undefined ((,class :foreground ,red-alt)))
+   `(hdefd-variables ((,class :foreground ,cyan-alt)))
+;;;;; hl-fill-column
+   `(hl-fill-column-face ((,class :background ,bg-active :foreground 
,fg-active)))
+;;;;; hl-todo
+   `(hl-todo ((,class :inherit bold :foreground ,red-alt-other :slant 
,modus-theme-slant)))
+;;;;; hydra
+   `(hydra-face-amaranth ((,class :inherit bold :foreground ,yellow)))
+   `(hydra-face-blue ((,class :inherit bold :foreground ,blue-alt)))
+   `(hydra-face-pink ((,class :inherit bold :foreground ,magenta-alt)))
+   `(hydra-face-red ((,class :inherit bold :foreground ,red)))
+   `(hydra-face-teal ((,class :inherit bold :foreground ,cyan)))
+;;;;; hyperlist
+   `(hyperlist-condition ((,class :foreground ,green)))
+   `(hyperlist-hashtag ((,class :foreground ,yellow)))
+   `(hyperlist-operator ((,class :foreground ,blue-alt)))
+   `(hyperlist-paren ((,class :foreground ,cyan-alt-other)))
+   `(hyperlist-quote ((,class :foreground ,cyan-alt)))
+   `(hyperlist-ref ((,class :foreground ,magenta-alt-other)))
+   `(hyperlist-stars ((,class :foreground ,fg-alt)))
+   `(hyperlist-tag ((,class :foreground ,red)))
+   `(hyperlist-toplevel ((,class :inherit bold :foreground ,fg-main)))
+;;;;; icomplete
+   `(icomplete-first-match ((,class :inherit bold
+                                    ,@(modus-vivendi-theme-standard-completions
+                                       magenta magenta-nuanced-bg
+                                       magenta-intense-bg fg-main))))
+;;;;; icomplete-vertical
+   `(icomplete-vertical-separator ((,class :foreground ,fg-alt)))
+;;;;; ido-mode
+   `(ido-first-match ((,class :inherit bold
+                              ,@(modus-vivendi-theme-standard-completions
+                                 magenta magenta-nuanced-bg
+                                 magenta-subtle-bg fg-main))))
+   `(ido-incomplete-regexp ((,class :inherit error)))
+   `(ido-indicator ((,class :inherit modus-theme-subtle-yellow)))
+   `(ido-only-match ((,class :inherit bold
+                             ,@(modus-vivendi-theme-standard-completions
+                                magenta-intense red-nuanced-bg
+                                magenta-intense-bg fg-main))))
+   `(ido-subdir ((,class :foreground ,blue-alt-other)))
+   `(ido-virtual ((,class :foreground ,yellow-alt-other)))
+;;;;; iedit
+   `(iedit-occurrence ((,class :inherit modus-theme-refine-blue)))
+   `(iedit-read-only-occurrence ((,class :inherit modus-theme-intense-yellow)))
+;;;;; iflipb
+   `(iflipb-current-buffer-face ((,class :inherit bold :foreground ,cyan-alt)))
+   `(iflipb-other-buffer-face ((,class :foreground ,fg-alt)))
+;;;;; imenu-list
+   `(imenu-list-entry-face-0 ((,class :foreground ,cyan)))
+   `(imenu-list-entry-face-1 ((,class :foreground ,blue)))
+   `(imenu-list-entry-face-2 ((,class :foreground ,cyan-alt-other)))
+   `(imenu-list-entry-face-3 ((,class :foreground ,blue-alt)))
+   `(imenu-list-entry-subalist-face-0 ((,class :inherit bold :foreground 
,magenta-alt-other :underline t)))
+   `(imenu-list-entry-subalist-face-1 ((,class :inherit bold :foreground 
,magenta :underline t)))
+   `(imenu-list-entry-subalist-face-2 ((,class :inherit bold :foreground 
,green-alt-other :underline t)))
+   `(imenu-list-entry-subalist-face-3 ((,class :inherit bold :foreground 
,red-alt-other :underline t)))
+;;;;; indium
+   `(indium-breakpoint-face ((,class :foreground ,red-active)))
+   `(indium-frame-url-face ((,class :foreground ,fg-alt :underline t)))
+   `(indium-keyword-face ((,class :foreground ,magenta-alt-other)))
+   `(indium-litable-face ((,class :foreground ,fg-special-warm :slant 
,modus-theme-slant)))
+   `(indium-repl-error-face ((,class :inherit bold :foreground ,red)))
+   `(indium-repl-prompt-face ((,class :foreground ,cyan-alt-other)))
+   `(indium-repl-stdout-face ((,class :foreground ,fg-main)))
+;;;;; info
+   `(Info-quoted ((,class :foreground ,magenta))) ; the capitalisation is 
canonical
+   `(info-header-node ((,class :inherit bold :foreground ,fg-alt)))
+   `(info-header-xref ((,class :foreground ,blue-active)))
+   `(info-index-match ((,class :inherit match)))
+   `(info-menu-header ((,class :inherit (bold ,modus-theme-variable-pitch) 
:foreground ,fg-main
+                               ,@(modus-vivendi-theme-scale 
modus-vivendi-theme-scale-2))))
+   `(info-menu-star ((,class :foreground ,fg-main)))
+   `(info-node ((,class :inherit bold)))
+   `(info-title-1 ((,class :inherit (bold ,modus-theme-variable-pitch) 
:foreground ,fg-main
+                           ,@(modus-vivendi-theme-scale 
modus-vivendi-theme-scale-4))))
+   `(info-title-2 ((,class :inherit (bold ,modus-theme-variable-pitch) 
:foreground ,fg-special-warm
+                           ,@(modus-vivendi-theme-scale 
modus-vivendi-theme-scale-3))))
+   `(info-title-3 ((,class :inherit (bold ,modus-theme-variable-pitch) 
:foreground ,fg-special-cold
+                           ,@(modus-vivendi-theme-scale 
modus-vivendi-theme-scale-2))))
+   `(info-title-4 ((,class :inherit (bold ,modus-theme-variable-pitch) 
:foreground ,fg-special-mild
+                           ,@(modus-vivendi-theme-scale 
modus-vivendi-theme-scale-1))))
+;;;;; info-colors
+   `(info-colors-lisp-code-block ((,class :inherit fixed-pitch)))
+   `(info-colors-ref-item-command ((,class :foreground ,magenta)))
+   `(info-colors-ref-item-constant ((,class :foreground ,blue-alt-other)))
+   `(info-colors-ref-item-function ((,class :foreground ,magenta)))
+   `(info-colors-ref-item-macro ((,class ,@(modus-vivendi-theme-bold-weight) 
:foreground ,magenta-alt-other)))
+   `(info-colors-ref-item-other ((,class :foreground ,cyan)))
+   `(info-colors-ref-item-special-form ((,class 
,@(modus-vivendi-theme-bold-weight) :foreground ,magenta-alt-other)))
+   `(info-colors-ref-item-syntax-class ((,class :foreground ,magenta)))
+   `(info-colors-ref-item-type ((,class :foreground ,magenta-alt)))
+   `(info-colors-ref-item-user-option ((,class :foreground ,cyan)))
+   `(info-colors-ref-item-variable ((,class :foreground ,cyan)))
+;;;;; interaction-log
+   `(ilog-buffer-face ((,class :foreground ,magenta-alt-other)))
+   `(ilog-change-face ((,class :foreground ,magenta-alt)))
+   `(ilog-echo-face ((,class :foreground ,yellow-alt-other)))
+   `(ilog-load-face ((,class :foreground ,green)))
+   `(ilog-message-face ((,class :foreground ,fg-alt)))
+   `(ilog-non-change-face ((,class :foreground ,blue)))
+;;;;; ioccur
+   `(ioccur-cursor ((,class :foreground ,fg-main)))
+   `(ioccur-invalid-regexp ((,class :foreground ,red)))
+   `(ioccur-match-face ((,class :inherit modus-theme-special-calm)))
+   `(ioccur-match-overlay-face ((,class ,@(and (>= emacs-major-version 27) 
'(:extend t))
+                                        :inherit modus-theme-special-cold)))
+   `(ioccur-num-line-face ((,class :foreground ,fg-special-warm)))
+   `(ioccur-overlay-face ((,class ,@(and (>= emacs-major-version 27) '(:extend 
t))
+                                  :inherit modus-theme-refine-blue)))
+   `(ioccur-regexp-face ((,class :inherit (modus-theme-intense-magenta bold))))
+   `(ioccur-title-face ((,class :inherit bold :foreground ,red-alt
+                                ,@(modus-vivendi-theme-scale 
modus-vivendi-theme-scale-4))))
+;;;;; isearch, occur, and the like
+   `(isearch ((,class :inherit (modus-theme-intense-green bold))))
+   `(isearch-fail ((,class :inherit modus-theme-refine-red)))
+   `(lazy-highlight ((,class :inherit modus-theme-refine-cyan)))
+   `(match ((,class :inherit modus-theme-special-calm)))
+   `(query-replace ((,class :inherit (modus-theme-intense-yellow bold))))
+;;;;; ivy
+   `(ivy-action ((,class :inherit bold :foreground ,red-alt)))
+   `(ivy-completions-annotations ((,class :foreground ,fg-special-cold :slant 
,modus-theme-slant)))
+   `(ivy-confirm-face ((,class :foreground ,cyan)))
+   `(ivy-current-match ((,class ,@(modus-vivendi-theme-extra-completions
+                                   'modus-theme-refine-cyan
+                                   'modus-theme-intense-cyan
+                                   'modus-theme-special-warm
+                                   nil
+                                   'bold))))
+   `(ivy-cursor ((,class :background ,fg-main :foreground ,bg-main)))
+   `(ivy-grep-info ((,class :foreground ,cyan-alt)))
+   `(ivy-grep-line-number ((,class :foreground ,fg-special-warm)))
+   `(ivy-highlight-face ((,class :foreground ,magenta)))
+   `(ivy-match-required-face ((,class :inherit error)))
+   `(ivy-minibuffer-match-face-1 ((,class 
,@(modus-vivendi-theme-extra-completions
+                                             'modus-theme-subtle-neutral
+                                             'modus-theme-intense-neutral
+                                             'modus-theme-subtle-neutral
+                                             fg-alt))))
+   `(ivy-minibuffer-match-face-2 ((,class 
,@(modus-vivendi-theme-extra-completions
+                                             'modus-theme-subtle-green
+                                             'modus-theme-refine-green
+                                             'modus-theme-nuanced-green
+                                             green-alt-other
+                                             'bold))))
+   `(ivy-minibuffer-match-face-3 ((,class 
,@(modus-vivendi-theme-extra-completions
+                                             'modus-theme-subtle-cyan
+                                             'modus-theme-refine-cyan
+                                             'modus-theme-nuanced-cyan
+                                             cyan-alt-other
+                                             'bold))))
+   `(ivy-minibuffer-match-face-4 ((,class 
,@(modus-vivendi-theme-extra-completions
+                                             'modus-theme-subtle-magenta
+                                             'modus-theme-refine-magenta
+                                             'modus-theme-nuanced-magenta
+                                             magenta-alt-other
+                                             'bold))))
+   `(ivy-minibuffer-match-highlight ((,class 
,@(modus-vivendi-theme-extra-completions
+                                                'modus-theme-subtle-blue
+                                                'modus-theme-intense-blue
+                                                'modus-theme-nuanced-blue
+                                                blue-alt-other
+                                                'bold))))
+   `(ivy-modified-buffer ((,class :foreground ,yellow :slant 
,modus-theme-slant)))
+   `(ivy-modified-outside-buffer ((,class :foreground ,yellow-alt :slant 
,modus-theme-slant)))
+   `(ivy-org ((,class :foreground ,cyan-alt-other)))
+   `(ivy-prompt-match ((,class :inherit ivy-current-match)))
+   `(ivy-remote ((,class :foreground ,magenta)))
+   `(ivy-separator ((,class :foreground ,fg-alt)))
+   `(ivy-subdir ((,class :foreground ,blue-alt-other)))
+   `(ivy-virtual ((,class :foreground ,magenta-alt-other)))
+   `(ivy-yanked-word ((,class ,@(modus-vivendi-theme-extra-completions
+                                 'modus-theme-subtle-blue
+                                 'modus-theme-refine-blue
+                                 'modus-theme-nuanced-blue
+                                 blue-alt))))
+;;;;; ivy-posframe
+   `(ivy-posframe ((,class :background ,bg-dim :foreground ,fg-main)))
+   `(ivy-posframe-border ((,class :background ,bg-active)))
+   `(ivy-posframe-cursor ((,class :background ,fg-main :foreground ,bg-main)))
+;;;;; jira (org-jira)
+   `(jiralib-comment-face ((,class :background ,bg-alt)))
+   `(jiralib-comment-header-face ((,class :inherit bold)))
+   `(jiralib-issue-info-face ((,class :inherit modus-theme-special-warm)))
+   `(jiralib-issue-info-header-face ((,class :inherit 
(modus-theme-special-warm bold))))
+   `(jiralib-issue-summary-face ((,class :inherit bold)))
+   `(jiralib-link-filter-face ((,class :underline t)))
+   `(jiralib-link-issue-face ((,class :underline t)))
+   `(jiralib-link-project-face ((,class :underline t)))
+;;;;; journalctl-mode
+   `(journalctl-error-face ((,class :inherit bold :foreground ,red)))
+   `(journalctl-finished-face ((,class :inherit bold :foreground ,green)))
+   `(journalctl-host-face ((,class :foreground ,blue)))
+   `(journalctl-process-face ((,class :foreground ,cyan-alt-other)))
+   `(journalctl-starting-face ((,class :foreground ,green)))
+   `(journalctl-timestamp-face ((,class :foreground ,fg-special-cold)))
+   `(journalctl-warning-face ((,class :inherit bold :foreground ,yellow)))
+;;;;; js2-mode
+   `(js2-error ((,class :foreground ,red)))
+   `(js2-external-variable ((,class :foreground ,cyan-alt-other)))
+   `(js2-function-call ((,class :foreground ,magenta)))
+   `(js2-function-param ((,class :foreground ,blue)))
+   `(js2-instance-member ((,class :foreground ,magenta-alt-other)))
+   `(js2-jsdoc-html-tag-delimiter ((,class :foreground ,fg-main)))
+   `(js2-jsdoc-html-tag-name ((,class :foreground ,cyan)))
+   `(js2-jsdoc-tag ((,class :foreground ,fg-special-calm)))
+   `(js2-jsdoc-type ((,class :foreground ,fg-special-cold)))
+   `(js2-jsdoc-value ((,class :foreground ,fg-special-warm)))
+   `(js2-object-property ((,class :foreground ,fg-main)))
+   `(js2-object-property-access ((,class :foreground ,fg-main)))
+   `(js2-private-function-call ((,class :foreground ,green-alt-other)))
+   `(js2-private-member ((,class :foreground ,fg-special-mild)))
+   `(js2-warning ((,class :foreground ,yellow-alt :underline t)))
+;;;;; julia
+   `(julia-macro-face ((,class ,@(modus-vivendi-theme-bold-weight) :foreground 
,magenta)))
+   `(julia-quoted-symbol-face ((,class :foreground ,blue-alt-other)))
+;;;;; jupyter
+   `(jupyter-eval-overlay ((,class :inherit bold :foreground ,blue)))
+   `(jupyter-repl-input-prompt ((,class :foreground ,cyan-alt-other)))
+   `(jupyter-repl-output-prompt ((,class :foreground ,magenta-alt-other)))
+   `(jupyter-repl-traceback ((,class :inherit modus-theme-intense-red)))
+;;;;; kaocha-runner
+   `(kaocha-runner-error-face ((,class :foreground ,red)))
+   `(kaocha-runner-success-face ((,class :foreground ,green)))
+   `(kaocha-runner-warning-face ((,class :foreground ,yellow)))
+;;;;; keycast
+   `(keycast-command ((,class :inherit bold :foreground ,blue-active)))
+   `(keycast-key ((,class :box ,(modus-vivendi-theme-modeline-box blue-alt 
blue-active t -3)
+                          ,@(modus-vivendi-theme-modeline-props
+                             blue-active bg-main
+                             blue-active bg-active))))
+;;;;; line numbers (display-line-numbers-mode and global variant)
+   `(line-number ((,class :background ,bg-dim :foreground ,fg-alt)))
+   `(line-number-current-line ((,class :inherit bold :background ,bg-active 
:foreground ,fg-active)))
+;;;;; lsp-mode
+   `(lsp-face-highlight-read ((,class :inherit modus-theme-subtle-blue 
:underline t)))
+   `(lsp-face-highlight-textual ((,class :inherit modus-theme-subtle-blue)))
+   `(lsp-face-highlight-write ((,class :inherit (modus-theme-refine-blue 
bold))))
+   `(lsp-face-semhl-constant ((,class :foreground ,blue-alt-other)))
+   `(lsp-face-semhl-deprecated
+     ((,(append '((supports :underline (:style wave))) class)
+       :foreground ,yellow :underline (:style wave))
+      (,class :foreground ,yellow :underline t)))
+   `(lsp-face-semhl-enummember ((,class :foreground ,blue-alt-other)))
+   `(lsp-face-semhl-field ((,class :foreground ,cyan-alt)))
+   `(lsp-face-semhl-field-static ((,class :foreground ,cyan-alt :slant 
,modus-theme-slant)))
+   `(lsp-face-semhl-function ((,class :foreground ,magenta)))
+   `(lsp-face-semhl-method ((,class :foreground ,magenta)))
+   `(lsp-face-semhl-namespace ((,class ,@(modus-vivendi-theme-bold-weight) 
:foreground ,magenta-alt)))
+   `(lsp-face-semhl-preprocessor ((,class :foreground ,red-alt-other)))
+   `(lsp-face-semhl-static-method ((,class :foreground ,magenta :slant 
,modus-theme-slant)))
+   `(lsp-face-semhl-type-class ((,class :foreground ,magenta-alt)))
+   `(lsp-face-semhl-type-enum ((,class :foreground ,magenta-alt)))
+   `(lsp-face-semhl-type-primitive ((,class :foreground ,magenta-alt :slant 
,modus-theme-slant)))
+   `(lsp-face-semhl-type-template ((,class :foreground ,magenta-alt :slant 
,modus-theme-slant)))
+   `(lsp-face-semhl-type-typedef ((,class :foreground ,magenta-alt :slant 
,modus-theme-slant)))
+   `(lsp-face-semhl-variable ((,class :foreground ,cyan)))
+   `(lsp-face-semhl-variable-local ((,class :foreground ,cyan)))
+   `(lsp-face-semhl-variable-parameter ((,class :foreground ,cyan-alt-other)))
+   `(lsp-lens-face ((,class :height 0.8 :foreground ,fg-alt)))
+   `(lsp-lens-mouse-face ((,class :height 0.8 :foreground ,blue-alt-other 
:underline t)))
+   `(lsp-ui-doc-background ((,class :background ,bg-alt)))
+   `(lsp-ui-doc-header ((,class :background ,bg-header :foreground 
,fg-header)))
+   `(lsp-ui-doc-url ((,class :foreground ,blue-alt-other :underline t)))
+   `(lsp-ui-peek-filename ((,class :foreground ,fg-special-warm)))
+   `(lsp-ui-peek-footer ((,class :background ,bg-header :foreground 
,fg-header)))
+   `(lsp-ui-peek-header ((,class :background ,bg-header :foreground 
,fg-header)))
+   `(lsp-ui-peek-highlight ((,class :inherit modus-theme-subtle-blue)))
+   `(lsp-ui-peek-line-number ((,class :foreground ,fg-alt)))
+   `(lsp-ui-peek-list ((,class :background ,bg-dim)))
+   `(lsp-ui-peek-peek ((,class :background ,bg-alt)))
+   `(lsp-ui-peek-selection ((,class :inherit modus-theme-subtle-cyan)))
+   `(lsp-ui-sideline-code-action ((,class :foreground ,yellow)))
+   `(lsp-ui-sideline-current-symbol ((,class :inherit bold :height 0.99 :box 
(:line-width -1 :style nil) :foreground ,fg-main)))
+   `(lsp-ui-sideline-symbol ((,class :inherit bold :height 0.99 :box 
(:line-width -1 :style nil) :foreground ,fg-alt)))
+   `(lsp-ui-sideline-symbol-info ((,class :height 0.99 :slant italic)))
+;;;;; magit
+   `(magit-bisect-bad ((,class :foreground ,red-alt-other)))
+   `(magit-bisect-good ((,class :foreground ,green-alt-other)))
+   `(magit-bisect-skip ((,class :foreground ,yellow-alt-other)))
+   `(magit-blame-date ((,class :foreground ,blue)))
+   `(magit-blame-dimmed ((,class :foreground ,fg-alt)))
+   `(magit-blame-hash ((,class :foreground ,fg-special-warm)))
+   `(magit-blame-heading ((,class :background ,bg-alt)))
+   `(magit-blame-highlight ((,class :inherit modus-theme-nuanced-cyan)))
+   `(magit-blame-margin ((,class :inherit magit-blame-highlight)))
+   `(magit-blame-name ((,class :foreground ,magenta-alt-other)))
+   `(magit-blame-summary ((,class :foreground ,cyan-alt-other)))
+   `(magit-branch-current ((,class :foreground ,blue-alt-other :box t)))
+   `(magit-branch-local ((,class :foreground ,blue-alt)))
+   `(magit-branch-remote ((,class :foreground ,magenta-alt)))
+   `(magit-branch-remote-head ((,class :foreground ,magenta-alt-other :box t)))
+   `(magit-branch-upstream ((,class :slant italic)))
+   `(magit-cherry-equivalent ((,class :background ,bg-main :foreground 
,magenta-intense)))
+   `(magit-cherry-unmatched ((,class :background ,bg-main :foreground 
,cyan-intense)))
+   `(magit-diff-added ((,class ,@(modus-vivendi-theme-diffs
+                                  bg-main green
+                                  bg-diff-added fg-diff-added))))
+   `(magit-diff-added-highlight ((,class ,@(modus-vivendi-theme-diffs
+                                            bg-dim green
+                                            bg-diff-focus-added 
fg-diff-focus-added))))
+   `(magit-diff-base ((,class ,@(modus-vivendi-theme-diffs
+                                 bg-main yellow
+                                 bg-diff-changed fg-diff-changed))))
+   `(magit-diff-base-highlight ((,class ,@(modus-vivendi-theme-diffs
+                                           bg-dim yellow
+                                           bg-diff-focus-changed 
fg-diff-focus-changed))))
+   `(magit-diff-context ((,class :foreground ,fg-unfocused)))
+   `(magit-diff-context-highlight ((,class ,@(modus-vivendi-theme-diffs
+                                              bg-dim fg-dim
+                                              bg-inactive fg-inactive))))
+   `(magit-diff-file-heading ((,class :inherit bold :foreground 
,fg-special-cold)))
+   `(magit-diff-file-heading-highlight ((,class :inherit 
(modus-theme-special-cold bold))))
+   `(magit-diff-file-heading-selection ((,class :background ,bg-alt 
:foreground ,cyan)))
+   `(magit-diff-hunk-heading ((,class :inherit bold :background ,bg-active 
:foreground ,fg-inactive)))
+   `(magit-diff-hunk-heading-highlight ((,class :inherit 
(modus-theme-diff-heading bold))))
+   `(magit-diff-hunk-heading-selection ((,class :inherit 
modus-theme-intense-cyan)))
+   `(magit-diff-hunk-region ((,class :inherit bold)))
+   `(magit-diff-lines-boundary ((,class :background ,fg-main)))
+   `(magit-diff-lines-heading ((,class :inherit modus-theme-refine-magenta)))
+   `(magit-diff-removed ((,class ,@(modus-vivendi-theme-diffs
+                                    bg-main red
+                                    bg-diff-removed fg-diff-removed))))
+   `(magit-diff-removed-highlight ((,class ,@(modus-vivendi-theme-diffs
+                                              bg-dim red
+                                              bg-diff-focus-removed 
fg-diff-focus-removed))))
+   `(magit-diffstat-added ((,class :foreground ,green)))
+   `(magit-diffstat-removed ((,class :foreground ,red)))
+   `(magit-dimmed ((,class :foreground ,fg-unfocused)))
+   `(magit-filename ((,class :foreground ,fg-special-cold)))
+   `(magit-hash ((,class :foreground ,fg-alt)))
+   `(magit-head ((,class :inherit magit-branch-local)))
+   `(magit-header-line ((,class :inherit bold :foreground ,magenta-active)))
+   `(magit-header-line-key ((,class :inherit bold :foreground ,red-active)))
+   `(magit-header-line-log-select ((,class :inherit bold :foreground 
,fg-main)))
+   `(magit-keyword ((,class :foreground ,magenta)))
+   `(magit-keyword-squash ((,class :inherit bold :foreground 
,yellow-alt-other)))
+   `(magit-log-author ((,class :foreground ,cyan)))
+   `(magit-log-date ((,class :foreground ,fg-alt)))
+   `(magit-log-graph ((,class :foreground ,fg-dim)))
+   `(magit-mode-line-process ((,class :inherit bold :foreground ,blue-active)))
+   `(magit-mode-line-process-error ((,class :inherit bold :foreground 
,red-active)))
+   `(magit-process-ng ((,class :inherit error)))
+   `(magit-process-ok ((,class :inherit success)))
+   `(magit-reflog-amend ((,class :background ,bg-main :foreground 
,magenta-intense)))
+   `(magit-reflog-checkout ((,class :background ,bg-main :foreground 
,blue-intense)))
+   `(magit-reflog-cherry-pick ((,class :background ,bg-main :foreground 
,green-intense)))
+   `(magit-reflog-commit ((,class :background ,bg-main :foreground 
,green-intense)))
+   `(magit-reflog-merge ((,class :background ,bg-main :foreground 
,green-intense)))
+   `(magit-reflog-other ((,class :background ,bg-main :foreground 
,cyan-intense)))
+   `(magit-reflog-rebase ((,class :background ,bg-main :foreground 
,magenta-intense)))
+   `(magit-reflog-remote ((,class :background ,bg-main :foreground 
,cyan-intense)))
+   `(magit-reflog-reset ((,class :background ,bg-main :foreground 
,red-intense)))
+   `(magit-refname ((,class :foreground ,fg-alt)))
+   `(magit-refname-pullreq ((,class :foreground ,fg-alt)))
+   `(magit-refname-stash ((,class :foreground ,fg-alt)))
+   `(magit-refname-wip ((,class :foreground ,fg-alt)))
+   `(magit-section ((,class :background ,bg-dim :foreground ,fg-main)))
+   `(magit-section-heading ((,class :inherit bold :foreground ,cyan)))
+   `(magit-section-heading-selection ((,class :inherit 
(modus-theme-refine-cyan bold))))
+   `(magit-section-highlight ((,class :background ,bg-alt)))
+   `(magit-sequence-done ((,class :foreground ,green-alt)))
+   `(magit-sequence-drop ((,class :foreground ,red-alt)))
+   `(magit-sequence-exec ((,class :foreground ,magenta-alt)))
+   `(magit-sequence-head ((,class :foreground ,cyan-alt)))
+   `(magit-sequence-onto ((,class :foreground ,fg-alt)))
+   `(magit-sequence-part ((,class :foreground ,yellow-alt)))
+   `(magit-sequence-pick ((,class :foreground ,blue-alt)))
+   `(magit-sequence-stop ((,class :foreground ,red)))
+   `(magit-signature-bad ((,class :inherit bold :foreground ,red)))
+   `(magit-signature-error ((,class :foreground ,red-alt)))
+   `(magit-signature-expired ((,class :foreground ,yellow)))
+   `(magit-signature-expired-key ((,class :foreground ,yellow)))
+   `(magit-signature-good ((,class :foreground ,green)))
+   `(magit-signature-revoked ((,class :foreground ,magenta)))
+   `(magit-signature-untrusted ((,class :foreground ,cyan)))
+   `(magit-tag ((,class :foreground ,yellow-alt-other)))
+;;;;; magit-imerge
+   `(magit-imerge-overriding-value ((,class :inherit bold :foreground 
,red-alt)))
+;;;;; man
+   `(Man-overstrike ((,class :inherit bold :foreground ,magenta)))
+   `(Man-reverse ((,class :inherit modus-theme-subtle-magenta)))
+   `(Man-underline ((,class :foreground ,cyan :underline t)))
+;;;;; markdown-mode
+   `(markdown-blockquote-face ((,class :foreground ,fg-special-warm :slant 
,modus-theme-slant)))
+   `(markdown-bold-face ((,class :inherit bold)))
+   `(markdown-code-face ((,class :inherit fixed-pitch)))
+   `(markdown-comment-face ((,class :foreground ,fg-alt :slant 
,modus-theme-slant)))
+   `(markdown-footnote-marker-face ((,class :inherit bold :foreground 
,cyan-alt)))
+   `(markdown-footnote-text-face ((,class :foreground ,fg-main :slant 
,modus-theme-slant)))
+   `(markdown-gfm-checkbox-face ((,class :foreground ,cyan-alt-other)))
+   `(markdown-header-delimiter-face ((,class 
,@(modus-vivendi-theme-bold-weight) :foreground ,fg-dim)))
+   `(markdown-header-face ((,class :inherit bold)))
+   `(markdown-header-rule-face ((,class :inherit bold :foreground 
,fg-special-warm)))
+   `(markdown-hr-face ((,class :inherit bold :foreground ,fg-special-warm)))
+   `(markdown-html-attr-name-face ((,class :inherit fixed-pitch :foreground 
,cyan)))
+   `(markdown-html-attr-value-face ((,class :inherit fixed-pitch :foreground 
,blue)))
+   `(markdown-html-entity-face ((,class :inherit fixed-pitch :foreground 
,cyan)))
+   `(markdown-html-tag-delimiter-face ((,class :inherit fixed-pitch 
:foreground ,fg-special-mild)))
+   `(markdown-html-tag-name-face ((,class :inherit fixed-pitch :foreground 
,magenta-alt)))
+   `(markdown-inline-code-face ((,class :inherit fixed-pitch :foreground 
,magenta)))
+   `(markdown-italic-face ((,class :foreground ,fg-special-cold :slant 
italic)))
+   `(markdown-language-info-face ((,class :inherit fixed-pitch :foreground 
,fg-special-cold)))
+   `(markdown-language-keyword-face ((,class :inherit fixed-pitch :foreground 
,green-alt-other)))
+   `(markdown-line-break-face ((,class :inherit modus-theme-refine-cyan 
:underline t)))
+   `(markdown-link-face ((,class :inherit link)))
+   `(markdown-link-title-face ((,class :foreground ,fg-special-cold :slant 
,modus-theme-slant)))
+   `(markdown-list-face ((,class :foreground ,fg-dim)))
+   `(markdown-markup-face ((,class :foreground ,fg-alt)))
+   `(markdown-math-face ((,class :foreground ,magenta-alt-other)))
+   `(markdown-metadata-key-face ((,class :foreground ,cyan-alt-other)))
+   `(markdown-metadata-value-face ((,class :foreground ,blue-alt)))
+   `(markdown-missing-link-face ((,class :inherit bold :foreground ,yellow)))
+   `(markdown-plain-url-face ((,class :inherit markdown-link-face)))
+   `(markdown-pre-face ((,class ,@(and (>= emacs-major-version 27) '(:extend 
t))
+                                :inherit fixed-pitch :background ,bg-dim
+                                :foreground ,fg-special-mild)))
+   `(markdown-reference-face ((,class :inherit markdown-markup-face)))
+   `(markdown-strike-through-face ((,class :strike-through t)))
+   `(markdown-table-face ((,class :inherit fixed-pitch :foreground 
,fg-special-cold)))
+   `(markdown-url-face ((,class :foreground ,blue)))
+;;;;; markup-faces (`adoc-mode')
+   `(markup-anchor-face ((,class :foreground ,fg-inactive)))
+   `(markup-attribute-face ((,class :foreground ,fg-inactive :slant italic)))
+   `(markup-big-face ((,class :height 1.3 :foreground ,blue-nuanced)))
+   `(markup-bold-face ((,class :inherit bold :foreground ,red-nuanced)))
+   `(markup-code-face ((,class :inherit fixed-pitch :foreground ,magenta)))
+   `(markup-command-face ((,class :foreground ,fg-inactive)))
+   `(markup-comment-face ((,class :foreground ,fg-alt :slant 
,modus-theme-slant)))
+   `(markup-complex-replacement-face ((,class :box (:line-width 2 :color nil 
:style released-button)
+                                              :inherit 
modus-theme-refine-magenta)))
+   `(markup-emphasis-face ((,class :foreground ,fg-special-cold :slant 
italic)))
+   `(markup-error-face ((,class :inherit bold :foreground ,red)))
+   `(markup-gen-face ((,class :foreground ,magenta-alt)))
+   `(markup-internal-reference-face ((,class :foreground ,fg-inactive 
:underline t)))
+   `(markup-italic-face ((,class :foreground ,fg-special-cold :slant italic)))
+   `(markup-list-face ((,class :inherit modus-theme-special-calm)))
+   `(markup-meta-face ((,class :foreground ,fg-inactive)))
+   `(markup-meta-hide-face ((,class :foreground ,fg-alt)))
+   `(markup-passthrough-face ((,class :inherit fixed-pitch :foreground ,cyan)))
+   `(markup-preprocessor-face ((,class :foreground ,red-alt-other)))
+   `(markup-replacement-face ((,class :foreground ,yellow-alt-other)))
+   `(markup-secondary-text-face ((,class :height 0.8 :foreground 
,magenta-nuanced)))
+   `(markup-small-face ((,class :height 0.8 :foreground ,fg-main)))
+   `(markup-strong-face ((,class :inherit bold :foreground ,red-nuanced)))
+   `(markup-subscript-face ((,class :height 0.8 :foreground ,fg-special-cold)))
+   `(markup-superscript-face ((,class :height 0.8 :foreground 
,fg-special-cold)))
+   `(markup-table-cell-face ((,class :inherit modus-theme-special-cold)))
+   `(markup-table-face ((,class :inherit modus-theme-subtle-cyan)))
+   `(markup-table-row-face ((,class :inherit modus-theme-subtle-cyan)))
+   `(markup-title-0-face ((,class :height 3.0 :foreground ,blue-nuanced)))
+   `(markup-title-1-face ((,class :height 2.4 :foreground ,blue-nuanced)))
+   `(markup-title-2-face ((,class :height 1.8 :foreground ,blue-nuanced)))
+   `(markup-title-3-face ((,class :height 1.4 :foreground ,blue-nuanced)))
+   `(markup-title-4-face ((,class :height 1.2 :foreground ,blue-nuanced)))
+   `(markup-title-5-face ((,class :height 1.2 :foreground ,blue-nuanced 
:underline t)))
+   `(markup-value-face ((,class :foreground ,fg-inactive)))
+   `(markup-verbatim-face ((,class :inherit modus-theme-special-mild)))
+;;;;; mentor
+   `(mentor-download-message ((,class :foreground ,fg-special-warm)))
+   `(mentor-download-name ((,class :foreground ,fg-special-cold)))
+   `(mentor-download-progress ((,class :foreground ,blue-alt-other)))
+   `(mentor-download-size ((,class :foreground ,magenta-alt-other)))
+   `(mentor-download-speed-down ((,class :foreground ,cyan-alt)))
+   `(mentor-download-speed-up ((,class :foreground ,red-alt)))
+   `(mentor-download-state ((,class :foreground ,yellow-alt)))
+   `(mentor-highlight-face ((,class :inherit modus-theme-subtle-blue)))
+   `(mentor-tracker-name ((,class :foreground ,magenta-alt)))
+;;;;; messages
+   `(message-cited-text-1 ((,class :foreground ,blue-alt)))
+   `(message-cited-text-2 ((,class :foreground ,red-alt)))
+   `(message-cited-text-3 ((,class :foreground ,green-alt)))
+   `(message-cited-text-4 ((,class :foreground ,magenta-alt)))
+   `(message-header-cc ((,class :foreground ,blue-alt)))
+   `(message-header-name ((,class :foreground ,green-alt-other)))
+   `(message-header-newsgroups ((,class :inherit bold :foreground ,blue)))
+   `(message-header-other ((,class :inherit bold :foreground ,cyan-alt-other)))
+   `(message-header-subject ((,class :inherit bold :foreground 
,magenta-alt-other)))
+   `(message-header-to ((,class :inherit bold :foreground ,magenta-alt)))
+   `(message-header-xheader ((,class :foreground ,blue-alt-other)))
+   `(message-mml ((,class :foreground ,green-alt)))
+   `(message-separator ((,class :background ,bg-active :foreground 
,fg-special-warm)))
+;;;;; minibuffer-line
+   `(minibuffer-line ((,class :foreground ,fg-main)))
+;;;;; minimap
+   `(minimap-active-region-background ((,class :background ,bg-active)))
+   `(minimap-current-line-face ((,class :background ,cyan-intense-bg 
:foreground ,fg-main)))
+;;;;; modeline
+   `(mode-line ((,class :box ,(modus-vivendi-theme-modeline-box bg-active 
fg-alt t)
+                        ,@(modus-vivendi-theme-modeline-props
+                           bg-active fg-dim
+                           bg-active fg-active))))
+   `(mode-line-buffer-id ((,class :inherit bold)))
+   `(mode-line-emphasis ((,class :inherit bold :foreground ,blue-active)))
+   `(mode-line-highlight ((,class :inherit modus-theme-active-blue :box 
(:line-width -1 :style pressed-button))))
+   `(mode-line-inactive ((,class :box ,(modus-vivendi-theme-modeline-box 
bg-active bg-region)
+                                 ,@(modus-vivendi-theme-modeline-props
+                                    bg-dim fg-inactive
+                                    bg-inactive fg-inactive))))
+;;;;; mood-line
+   `(mood-line-modified ((,class :foreground ,magenta-active)))
+   `(mood-line-status-error ((,class :inherit bold :foreground ,red-active)))
+   `(mood-line-status-info ((,class :foreground ,cyan-active)))
+   `(mood-line-status-neutral ((,class :foreground ,blue-active)))
+   `(mood-line-status-success ((,class :foreground ,green-active)))
+   `(mood-line-status-warning ((,class :inherit bold :foreground 
,yellow-active)))
+   `(mood-line-unimportant ((,class :foreground ,fg-inactive)))
+;;;;; mu4e
+   `(mu4e-attach-number-face ((,class :inherit bold :foreground ,cyan-alt)))
+   `(mu4e-cited-1-face ((,class :foreground ,blue-alt)))
+   `(mu4e-cited-2-face ((,class :foreground ,red-alt)))
+   `(mu4e-cited-3-face ((,class :foreground ,green-alt)))
+   `(mu4e-cited-4-face ((,class :foreground ,magenta-alt)))
+   `(mu4e-cited-5-face ((,class :foreground ,yellow-alt)))
+   `(mu4e-cited-6-face ((,class :foreground ,cyan-alt)))
+   `(mu4e-cited-7-face ((,class :foreground ,magenta)))
+   `(mu4e-compose-header-face ((,class :inherit mu4e-compose-separator-face)))
+   `(mu4e-compose-separator-face ((,class :background ,bg-active :foreground 
,fg-special-warm)))
+   `(mu4e-contact-face ((,class :inherit bold :foreground ,cyan-alt-other)))
+   `(mu4e-context-face ((,class :foreground ,blue-active)))
+   `(mu4e-draft-face ((,class :foreground ,magenta-alt)))
+   `(mu4e-flagged-face ((,class :foreground ,red-alt)))
+   `(mu4e-footer-face ((,class :foreground ,fg-special-cold :slant 
,modus-theme-slant)))
+   `(mu4e-forwarded-face ((,class :foreground ,magenta-alt-other)))
+   `(mu4e-header-face ((,class :foreground ,fg-alt)))
+   `(mu4e-header-highlight-face ((,class :inherit modus-theme-hl-line)))
+   `(mu4e-header-key-face ((,class :foreground ,cyan)))
+   `(mu4e-header-marks-face ((,class :inherit bold :foreground ,magenta-alt)))
+   `(mu4e-header-title-face ((,class :foreground ,fg-special-mild)))
+   `(mu4e-header-value-face ((,class :inherit bold :foreground 
,magenta-alt-other)))
+   `(mu4e-highlight-face ((,class :inherit bold :foreground ,blue-alt-other)))
+   `(mu4e-link-face ((,class :inherit link)))
+   `(mu4e-modeline-face ((,class :foreground ,magenta-active)))
+   `(mu4e-moved-face ((,class :foreground ,yellow :slant ,modus-theme-slant)))
+   `(mu4e-ok-face ((,class :inherit bold :foreground ,green)))
+   `(mu4e-region-code ((,class :inherit modus-theme-special-calm)))
+   `(mu4e-replied-face ((,class :foreground ,cyan-active)))
+   `(mu4e-special-header-value-face ((,class :inherit bold :foreground 
,blue-alt-other)))
+   `(mu4e-system-face ((,class :foreground ,fg-mark-del :slant 
,modus-theme-slant)))
+   `(mu4e-title-face ((,class :foreground ,fg-main)))
+   `(mu4e-trashed-face ((,class :foreground ,red)))
+   `(mu4e-unread-face ((,class :inherit bold :foreground ,fg-main)))
+   `(mu4e-url-number-face ((,class :inherit bold :foreground ,cyan-alt-other)))
+   `(mu4e-view-body-face ((,class :foreground ,fg-main)))
+   `(mu4e-warning-face ((,class :inherit warning)))
+;;;;; mu4e-conversation
+   `(mu4e-conversation-header ((,class :inherit modus-theme-special-cold)))
+   `(mu4e-conversation-sender-1 ((,class :foreground ,fg-special-warm)))
+   `(mu4e-conversation-sender-2 ((,class :foreground ,fg-special-cold)))
+   `(mu4e-conversation-sender-3 ((,class :foreground ,fg-special-mild)))
+   `(mu4e-conversation-sender-4 ((,class :foreground ,fg-alt)))
+   `(mu4e-conversation-sender-5 ((,class :foreground ,yellow-refine-fg)))
+   `(mu4e-conversation-sender-6 ((,class :foreground ,cyan-refine-fg)))
+   `(mu4e-conversation-sender-7 ((,class :foreground ,green-refine-fg)))
+   `(mu4e-conversation-sender-8 ((,class :foreground ,blue-refine-fg)))
+   `(mu4e-conversation-sender-me ((,class :foreground ,fg-main)))
+   `(mu4e-conversation-unread ((,class :inherit bold)))
+;;;;; multiple-cursors
+   `(mc/cursor-bar-face ((,class :height 1 :background ,fg-main)))
+   `(mc/cursor-face ((,class :inverse-video t)))
+   `(mc/region-face ((,class :inherit region)))
+;;;;; neotree
+   `(neo-banner-face ((,class :foreground ,magenta)))
+   `(neo-button-face ((,class :inherit button)))
+   `(neo-dir-link-face ((,class :inherit bold :foreground ,blue)))
+   `(neo-expand-btn-face ((,class :foreground ,cyan)))
+   `(neo-file-link-face ((,class :foreground ,fg-main)))
+   `(neo-header-face ((,class :inherit bold :foreground ,fg-main)))
+   `(neo-root-dir-face ((,class :inherit bold :foreground ,cyan-alt)))
+   `(neo-vc-added-face ((,class :foreground ,green)))
+   `(neo-vc-conflict-face ((,class :inherit bold :foreground ,red)))
+   `(neo-vc-default-face ((,class :foreground ,fg-main)))
+   `(neo-vc-edited-face ((,class :foreground ,yellow)))
+   `(neo-vc-ignored-face ((,class :foreground ,fg-inactive)))
+   `(neo-vc-missing-face ((,class :foreground ,red-alt)))
+   `(neo-vc-needs-merge-face ((,class :foreground ,magenta-alt)))
+   `(neo-vc-needs-update-face ((,class :underline t)))
+   `(neo-vc-removed-face ((,class :strike-through t)))
+   `(neo-vc-unlocked-changes-face ((,class :inherit modus-theme-refine-blue)))
+   `(neo-vc-up-to-date-face ((,class :foreground ,fg-alt)))
+   `(neo-vc-user-face ((,class :foreground ,magenta)))
+;;;;; no-emoji
+   `(no-emoji ((,class :foreground ,cyan)))
+;;;;; notmuch
+   `(notmuch-crypto-decryption ((,class :inherit modus-theme-refine-magenta)))
+   `(notmuch-crypto-part-header ((,class :foreground ,magenta-alt-other)))
+   `(notmuch-crypto-signature-bad ((,class :inherit modus-theme-intense-red)))
+   `(notmuch-crypto-signature-good ((,class :inherit 
modus-theme-refine-green)))
+   `(notmuch-crypto-signature-good-key ((,class :inherit 
modus-theme-refine-yellow)))
+   `(notmuch-crypto-signature-unknown ((,class :inherit 
modus-theme-refine-red)))
+   `(notmuch-hello-logo-background ((,class :background ,bg-main)))
+   `(notmuch-message-summary-face ((,class :inherit modus-theme-nuanced-cyan)))
+   `(notmuch-search-flagged-face ((,class :foreground ,red-alt)))
+   `(notmuch-search-matching-authors ((,class :foreground ,fg-main)))
+   `(notmuch-search-non-matching-authors ((,class :foreground ,fg-alt)))
+   `(notmuch-search-unread-face ((,class :inherit bold)))
+   `(notmuch-tag-added
+     ((,(append '((supports :underline (:style wave))) class)
+       :underline (:color ,green :style wave))
+      (,class :foreground ,green :underline t)))
+   `(notmuch-tag-deleted
+     ((,(append '((supports :underline (:style wave))) class)
+       :underline (:color ,red :style wave))
+      (,class :foreground ,red :underline t)))
+   `(notmuch-tag-face ((,class :inherit bold :foreground ,blue-alt)))
+   `(notmuch-tag-flagged ((,class :foreground ,red-alt)))
+   `(notmuch-tag-unread ((,class :foreground ,magenta-alt)))
+   `(notmuch-tree-match-author-face ((,class :foreground ,fg-special-cold)))
+   `(notmuch-tree-match-face ((,class :foreground ,fg-main)))
+   `(notmuch-tree-match-tag-face ((,class :inherit bold :foreground 
,blue-alt)))
+   `(notmuch-tree-no-match-face ((,class :foreground ,fg-alt)))
+   `(notmuch-wash-cited-text ((,class :foreground ,cyan)))
+   `(notmuch-wash-toggle-button ((,class :background ,bg-alt :foreground 
,fg-alt)))
+;;;;; num3-mode
+   `(num3-face-even ((,class :inherit bold :background ,bg-alt)))
+;;;;; nxml-mode
+   `(nxml-attribute-colon ((,class :foreground ,fg-main)))
+   `(nxml-attribute-local-name ((,class 
,@(modus-vivendi-theme-syntax-foreground
+                                           cyan-alt cyan-alt-faint))))
+   `(nxml-attribute-prefix ((,class ,@(modus-vivendi-theme-syntax-foreground
+                                       cyan-alt-other cyan-alt-other-faint)
+                                    ,@(modus-vivendi-theme-bold-weight))))
+   `(nxml-attribute-value ((,class ,@(modus-vivendi-theme-syntax-foreground
+                                      blue blue-faint))))
+   `(nxml-cdata-section-CDATA ((,class ,@(modus-vivendi-theme-syntax-foreground
+                                          red-alt red-alt-faint)
+                                       ,@(modus-vivendi-theme-bold-weight))))
+   `(nxml-cdata-section-delimiter ((,class 
,@(modus-vivendi-theme-syntax-foreground
+                                              red-alt red-alt-faint))))
+   `(nxml-char-ref-delimiter ((,class ,@(modus-vivendi-theme-syntax-foreground
+                                         green-alt-other 
green-alt-other-faint))))
+   `(nxml-char-ref-number ((,class ,@(modus-vivendi-theme-syntax-foreground
+                                      green-alt-other green-alt-other-faint)
+                                   ,@(modus-vivendi-theme-bold-weight))))
+   `(nxml-delimited-data ((,class :foreground ,fg-special-cold :slant 
,modus-theme-slant)))
+   `(nxml-delimiter ((,class :foreground ,fg-dim)))
+   `(nxml-element-colon ((,class :foreground ,fg-main)))
+   `(nxml-element-local-name ((,class ,@(modus-vivendi-theme-syntax-foreground
+                                         magenta magenta-faint))))
+   `(nxml-element-prefix ((,class ,@(modus-vivendi-theme-syntax-foreground
+                                     magenta-alt magenta-alt-faint)
+                                  ,@(modus-vivendi-theme-bold-weight))))
+   `(nxml-entity-ref-delimiter ((,class 
,@(modus-vivendi-theme-syntax-foreground
+                                           green-alt-other 
green-alt-other-faint))))
+   `(nxml-entity-ref-name ((,class ,@(modus-vivendi-theme-syntax-foreground
+                                      green-alt-other green-alt-other-faint)
+                                   ,@(modus-vivendi-theme-bold-weight))))
+   `(nxml-glyph ((,class :inherit modus-theme-intense-neutral)))
+   `(nxml-hash ((,class ,@(modus-vivendi-theme-syntax-foreground
+                           blue-alt blue-alt-faint)
+                        ,@(modus-vivendi-theme-bold-weight))))
+   `(nxml-heading ((,class :inherit bold)))
+   `(nxml-name ((,class ,@(modus-vivendi-theme-syntax-foreground
+                           magenta-alt magenta-alt-faint)
+                        ,@(modus-vivendi-theme-bold-weight))))
+   `(nxml-namespace-attribute-colon ((,class :foreground ,fg-main)))
+   `(nxml-namespace-attribute-prefix ((,class 
,@(modus-vivendi-theme-syntax-foreground
+                                                 cyan cyan-faint))))
+   `(nxml-processing-instruction-target ((,class 
,@(modus-vivendi-theme-syntax-foreground
+                                                    magenta-alt-other 
magenta-alt-other-faint)
+                                                 
,@(modus-vivendi-theme-bold-weight))))
+   `(nxml-prolog-keyword ((,class ,@(modus-vivendi-theme-syntax-foreground
+                                     magenta-alt-other magenta-alt-other-faint)
+                                  ,@(modus-vivendi-theme-bold-weight))))
+   `(nxml-ref ((,class ,@(modus-vivendi-theme-syntax-foreground
+                          green-alt-other green-alt-other-faint)
+                       ,@(modus-vivendi-theme-bold-weight))))
+;;;;; orderless
+   `(orderless-match-face-0 ((,class :inherit bold
+                                     
,@(modus-vivendi-theme-standard-completions
+                                        blue-alt blue-nuanced-bg
+                                        blue-refine-bg blue-refine-fg))))
+   `(orderless-match-face-1 ((,class :inherit bold
+                                     
,@(modus-vivendi-theme-standard-completions
+                                        magenta-alt magenta-nuanced-bg
+                                        magenta-refine-bg magenta-refine-fg))))
+   `(orderless-match-face-2 ((,class :inherit bold
+                                     
,@(modus-vivendi-theme-standard-completions
+                                        green-alt-other green-nuanced-bg
+                                        green-refine-bg green-refine-fg))))
+   `(orderless-match-face-3 ((,class :inherit bold
+                                     
,@(modus-vivendi-theme-standard-completions
+                                        yellow-alt-other yellow-nuanced-bg
+                                        yellow-refine-bg yellow-refine-fg))))
+;;;;; org
+   `(org-agenda-calendar-event ((,class :foreground ,fg-main)))
+   `(org-agenda-calendar-sexp ((,class :foreground ,cyan-alt)))
+   `(org-agenda-clocking ((,class :inherit modus-theme-special-cold)))
+   `(org-agenda-column-dateline ((,class :background ,bg-alt)))
+   `(org-agenda-current-time ((,class :inherit modus-theme-subtle-cyan)))
+   `(org-agenda-date ((,class :inherit ,modus-theme-variable-pitch :foreground 
,cyan-alt-other
+                              ,@(modus-vivendi-theme-scale 
modus-vivendi-theme-scale-4)
+                              ,@(modus-vivendi-theme-heading-block 
cyan-nuanced-bg cyan-nuanced))))
+   `(org-agenda-date-today ((,class :inherit (bold ,modus-theme-variable-pitch)
+                                    :background ,cyan-intense-bg :foreground 
,fg-main
+                                    ,@(modus-vivendi-theme-scale 
modus-vivendi-theme-scale-4))))
+   `(org-agenda-date-weekend ((,class :inherit ,modus-theme-variable-pitch 
:foreground ,cyan
+                                      ,@(modus-vivendi-theme-scale 
modus-vivendi-theme-scale-4)
+                                      ,@(modus-vivendi-theme-heading-block 
blue-nuanced-bg cyan-nuanced))))
+   `(org-agenda-diary ((,class :foreground ,fg-main)))
+   `(org-agenda-dimmed-todo-face ((,class :inherit 
modus-theme-subtle-neutral)))
+   `(org-agenda-done ((,class ,@(modus-vivendi-theme-org-todo-block 
green-nuanced-bg green-nuanced green))))
+   `(org-agenda-filter-category ((,class :inherit bold :foreground 
,magenta-active)))
+   `(org-agenda-filter-effort ((,class :inherit bold :foreground 
,magenta-active)))
+   `(org-agenda-filter-regexp ((,class :inherit bold :foreground 
,magenta-active)))
+   `(org-agenda-filter-tags ((,class :inherit bold :foreground 
,magenta-active)))
+   `(org-agenda-restriction-lock ((,class :background ,bg-dim :foreground 
,fg-dim)))
+   `(org-agenda-structure ((,class :inherit ,modus-theme-variable-pitch
+                                   :foreground ,fg-special-mild
+                                   ,@(modus-vivendi-theme-scale 
modus-vivendi-theme-scale-3))))
+   `(org-archived ((,class :background ,bg-alt :foreground ,fg-alt)))
+   `(org-block ((,class ,@(modus-vivendi-theme-org-block bg-dim)
+                        :inherit fixed-pitch :foreground ,fg-main)))
+   `(org-block-begin-line ((,class ,@(modus-vivendi-theme-org-block-delim
+                                      bg-dim fg-special-cold
+                                      bg-alt fg-special-mild)
+                                   :inherit fixed-pitch)))
+   `(org-block-end-line ((,class :inherit org-block-begin-line)))
+   `(org-checkbox ((,class :box (:line-width 1 :color ,bg-active)
+                           :background ,bg-inactive :foreground ,fg-active)))
+   `(org-checkbox-statistics-done ((,class :foreground ,green
+                                           ,@(modus-vivendi-theme-heading-block
+                                              green-nuanced-bg 
green-nuanced))))
+   `(org-checkbox-statistics-todo ((,class 
,@(modus-vivendi-theme-heading-foreground red-alt red)
+                                           ,@(modus-vivendi-theme-heading-block
+                                              red-nuanced-bg red-nuanced))))
+   `(org-clock-overlay ((,class :inherit modus-theme-special-cold)))
+   `(org-code ((,class :inherit fixed-pitch :foreground ,magenta)))
+   `(org-column ((,class :background ,bg-alt)))
+   `(org-column-title ((,class :inherit bold :underline t :background 
,bg-alt)))
+   `(org-date ((,class :inherit fixed-pitch :foreground ,cyan-alt-other 
:underline t)))
+   `(org-date-selected ((,class :inherit bold :foreground ,blue-alt 
:inverse-video t)))
+   `(org-default ((,class :background ,bg-main :foreground ,fg-main)))
+   `(org-document-info ((,class :foreground ,fg-special-cold)))
+   `(org-document-info-keyword ((,class :inherit fixed-pitch :foreground 
,fg-alt)))
+   `(org-document-title ((,class :inherit (bold ,modus-theme-variable-pitch) 
:foreground ,fg-special-cold
+                                 ,@(modus-vivendi-theme-scale 
modus-vivendi-theme-scale-5))))
+   `(org-done ((,class ,@(modus-vivendi-theme-org-todo-block green-nuanced-bg 
green-nuanced green))))
+   `(org-drawer ((,class :foreground ,cyan-alt)))
+   `(org-ellipsis ((,class :foreground nil))) ; inherits from the heading's 
colour
+   `(org-footnote ((,class :foreground ,blue-alt :underline t)))
+   `(org-formula ((,class :inherit fixed-pitch :foreground ,red-alt)))
+   `(org-habit-alert-face ((,class :inherit modus-theme-intense-yellow)))
+   `(org-habit-alert-future-face ((,class :inherit modus-theme-refine-yellow)))
+   `(org-habit-clear-face ((,class :inherit modus-theme-intense-magenta)))
+   `(org-habit-clear-future-face ((,class :inherit 
modus-theme-refine-magenta)))
+   `(org-habit-overdue-face ((,class :inherit modus-theme-intense-red)))
+   `(org-habit-overdue-future-face ((,class :inherit modus-theme-refine-red)))
+   `(org-habit-ready-face ((,class :inherit modus-theme-intense-blue)))
+   `(org-habit-ready-future-face ((,class :inherit modus-theme-refine-blue)))
+   `(org-headline-done ((,class :foreground ,green-nuanced
+                                ,@(modus-vivendi-theme-heading-block
+                                   green-nuanced-bg green-nuanced))))
+   `(org-hide ((,class :foreground ,bg-main)))
+   `(org-indent ((,class :inherit (fixed-pitch org-hide))))
+   `(org-latex-and-related ((,class :foreground ,magenta-refine-fg)))
+   `(org-level-1 ((,class :inherit (bold ,modus-theme-variable-pitch)
+                          ,@(modus-vivendi-theme-heading-foreground fg-main 
magenta-alt-other)
+                          ,@(modus-vivendi-theme-scale 
modus-vivendi-theme-scale-4)
+                          ,@(modus-vivendi-theme-heading-block 
magenta-nuanced-bg magenta-nuanced))))
+   `(org-level-2 ((,class :inherit (bold ,modus-theme-variable-pitch)
+                          ,@(modus-vivendi-theme-heading-foreground 
fg-special-warm magenta-alt)
+                          ,@(modus-vivendi-theme-scale 
modus-vivendi-theme-scale-3)
+                          ,@(modus-vivendi-theme-heading-block red-nuanced-bg 
red-nuanced))))
+   `(org-level-3 ((,class :inherit (bold ,modus-theme-variable-pitch)
+                          ,@(modus-vivendi-theme-heading-foreground 
fg-special-cold blue)
+                          ,@(modus-vivendi-theme-scale 
modus-vivendi-theme-scale-2)
+                          ,@(modus-vivendi-theme-heading-block blue-nuanced-bg 
blue-nuanced))))
+   `(org-level-4 ((,class :inherit (bold ,modus-theme-variable-pitch)
+                          ,@(modus-vivendi-theme-heading-foreground 
fg-special-mild cyan)
+                          ,@(modus-vivendi-theme-scale 
modus-vivendi-theme-scale-1)
+                          ,@(modus-vivendi-theme-heading-block cyan-nuanced-bg 
cyan-nuanced))))
+   `(org-level-5 ((,class :inherit (bold ,modus-theme-variable-pitch)
+                          ,@(modus-vivendi-theme-heading-foreground 
fg-special-calm green-alt-other)
+                          ,@(modus-vivendi-theme-heading-block 
green-nuanced-bg green-nuanced))))
+   `(org-level-6 ((,class :inherit (bold ,modus-theme-variable-pitch)
+                          ,@(modus-vivendi-theme-heading-foreground 
yellow-nuanced yellow-alt-other)
+                          ,@(modus-vivendi-theme-heading-block 
yellow-nuanced-bg yellow-nuanced))))
+   `(org-level-7 ((,class :inherit (bold ,modus-theme-variable-pitch)
+                          ,@(modus-vivendi-theme-heading-foreground 
red-nuanced red-alt)
+                          ,@(modus-vivendi-theme-heading-block red-nuanced-bg 
red-nuanced))))
+   `(org-level-8 ((,class :inherit (bold ,modus-theme-variable-pitch)
+                          ,@(modus-vivendi-theme-heading-foreground fg-dim 
magenta)
+                          ,@(modus-vivendi-theme-heading-block bg-alt 
fg-alt))))
+   `(org-link ((,class :inherit link)))
+   `(org-list-dt ((,class :inherit bold)))
+   `(org-macro ((,class :inherit org-latex-and-related)))
+   `(org-meta-line ((,class :inherit fixed-pitch :background ,cyan-nuanced-bg 
:foreground ,cyan-nuanced)))
+   `(org-mode-line-clock ((,class :foreground ,fg-main)))
+   `(org-mode-line-clock-overrun ((,class :inherit modus-theme-active-red)))
+   `(org-priority ((,class ,@(modus-vivendi-theme-org-todo-block 
magenta-nuanced-bg magenta-nuanced magenta)
+                           ,@(modus-vivendi-theme-heading-foreground magenta 
magenta-alt-other))))
+   `(org-quote ((,class ,@(if modus-vivendi-theme-org-blocks
+                              (append
+                               (and (>= emacs-major-version 27) '(:extend t))
+                               (list :background bg-dim))
+                            (list :background nil))
+                        :foreground ,fg-special-calm :slant 
,modus-theme-slant)))
+   `(org-scheduled ((,class :foreground ,fg-special-warm)))
+   `(org-scheduled-previously ((,class :foreground ,yellow-alt-other)))
+   `(org-scheduled-today ((,class :foreground ,magenta-alt-other)))
+   `(org-sexp-date ((,class :inherit org-date)))
+   `(org-special-keyword ((,class ,@(modus-vivendi-theme-org-todo-block 
cyan-nuanced-bg cyan-nuanced cyan-alt))))
+   `(org-table ((,class :inherit fixed-pitch :foreground ,fg-special-cold)))
+   `(org-tag ((,class ,@(modus-vivendi-theme-bold-weight) :foreground 
,magenta-nuanced)))
+   `(org-tag-group ((,class :inherit bold :foreground ,cyan-nuanced)))
+   `(org-target ((,class :underline t)))
+   `(org-time-grid ((,class :foreground ,fg-unfocused)))
+   `(org-todo ((,class ,@(modus-vivendi-theme-org-todo-block red-nuanced-bg 
red-nuanced red-alt)
+                       ,@(modus-vivendi-theme-heading-foreground red-alt 
red))))
+   `(org-upcoming-deadline ((,class :foreground ,red-alt-other)))
+   `(org-upcoming-distant-deadline ((,class :foreground ,red-nuanced)))
+   `(org-verbatim ((,class :inherit fixed-pitch :background ,bg-alt 
:foreground ,fg-special-calm)))
+   `(org-verse ((,class :inherit org-quote)))
+   `(org-warning ((,class :inherit bold :foreground ,red-alt-other)))
+;;;;; org-journal
+   `(org-journal-calendar-entry-face ((,class :foreground ,yellow-alt-other 
:slant ,modus-theme-slant)))
+   `(org-journal-calendar-scheduled-face ((,class :foreground ,red-alt-other 
:slant ,modus-theme-slant)))
+   `(org-journal-highlight ((,class :foreground ,magenta-alt)))
+;;;;; org-noter
+   `(org-noter-no-notes-exist-face ((,class :inherit bold :foreground 
,red-active)))
+   `(org-noter-notes-exist-face ((,class :inherit bold :foreground 
,green-active)))
+;;;;; org-pomodoro
+   `(org-pomodoro-mode-line ((,class :foreground ,red-active)))
+   `(org-pomodoro-mode-line-break ((,class :foreground ,cyan-active)))
+   `(org-pomodoro-mode-line-overtime ((,class :inherit bold :foreground 
,red-active)))
+;;;;; org-recur
+   `(org-recur ((,class :foreground ,magenta-active)))
+;;;;; org-roam
+   `(org-roam-link ((,class :foreground ,blue-alt-other :underline t)))
+   `(org-roam-backlink ((,class :foreground ,green-alt-other :underline t)))
+;;;;; org-superstar
+   `(org-superstar-item ((,class :foreground ,fg-main)))
+   `(org-superstar-leading ((,class :foreground ,fg-whitespace)))
+;;;;; org-table-sticky-header
+   `(org-table-sticky-header-face ((,class :inherit 
modus-theme-intense-neutral)))
+;;;;; org-treescope
+   `(org-treescope-faces--markerinternal-midday ((,class :inherit 
modus-theme-intense-blue)))
+   `(org-treescope-faces--markerinternal-range ((,class :inherit 
modus-theme-special-mild)))
+;;;;; origami
+   `(origami-fold-header-face ((,class :background ,bg-dim :foreground ,fg-dim 
:box t)))
+   `(origami-fold-replacement-face ((,class :background ,bg-alt :foreground 
,fg-alt)))
+;;;;; outline-mode
+   `(outline-1 ((,class :inherit (bold ,modus-theme-variable-pitch)
+                        ,@(modus-vivendi-theme-heading-foreground fg-main 
magenta-alt-other)
+                        ,@(modus-vivendi-theme-scale 
modus-vivendi-theme-scale-4)
+                        ,@(modus-vivendi-theme-heading-block 
magenta-nuanced-bg magenta-nuanced))))
+   `(outline-2 ((,class :inherit (bold ,modus-theme-variable-pitch)
+                        ,@(modus-vivendi-theme-heading-foreground 
fg-special-warm magenta-alt)
+                        ,@(modus-vivendi-theme-scale 
modus-vivendi-theme-scale-3)
+                        ,@(modus-vivendi-theme-heading-block red-nuanced-bg 
red-nuanced))))
+   `(outline-3 ((,class :inherit (bold ,modus-theme-variable-pitch)
+                        ,@(modus-vivendi-theme-heading-foreground 
fg-special-cold blue)
+                        ,@(modus-vivendi-theme-scale 
modus-vivendi-theme-scale-2)
+                        ,@(modus-vivendi-theme-heading-block blue-nuanced-bg 
blue-nuanced))))
+   `(outline-4 ((,class :inherit (bold ,modus-theme-variable-pitch)
+                        ,@(modus-vivendi-theme-heading-foreground 
fg-special-mild cyan)
+                        ,@(modus-vivendi-theme-scale 
modus-vivendi-theme-scale-1)
+                        ,@(modus-vivendi-theme-heading-block cyan-nuanced-bg 
cyan-nuanced))))
+   `(outline-5 ((,class :inherit (bold ,modus-theme-variable-pitch)
+                        ,@(modus-vivendi-theme-heading-foreground 
fg-special-calm green-alt-other)
+                        ,@(modus-vivendi-theme-heading-block green-nuanced-bg 
green-nuanced))))
+   `(outline-6 ((,class :inherit (bold ,modus-theme-variable-pitch)
+                        ,@(modus-vivendi-theme-heading-foreground 
yellow-nuanced yellow-alt-other)
+                        ,@(modus-vivendi-theme-heading-block yellow-nuanced-bg 
yellow-nuanced))))
+   `(outline-7 ((,class :inherit (bold ,modus-theme-variable-pitch)
+                        ,@(modus-vivendi-theme-heading-foreground red-nuanced 
red-alt)
+                        ,@(modus-vivendi-theme-heading-block red-nuanced-bg 
red-nuanced))))
+   `(outline-8 ((,class :inherit (bold ,modus-theme-variable-pitch)
+                        ,@(modus-vivendi-theme-heading-foreground fg-dim 
magenta)
+                        ,@(modus-vivendi-theme-heading-block bg-alt fg-alt))))
+;;;;; outline-minor-faces
+   `(outline-minor-0 ((,class ,@(unless modus-vivendi-theme-section-headings
+                                  (list :background cyan-nuanced-bg)))))
+;;;;; package (M-x list-packages)
+   `(package-description ((,class :foreground ,fg-special-cold)))
+   `(package-help-section-name ((,class :inherit bold :foreground 
,magenta-alt-other)))
+   `(package-name ((,class :inherit link)))
+   `(package-status-avail-obso ((,class :inherit bold :foreground ,red)))
+   `(package-status-available ((,class :foreground ,fg-special-mild)))
+   `(package-status-built-in ((,class :foreground ,magenta)))
+   `(package-status-dependency ((,class :foreground ,magenta-alt-other)))
+   `(package-status-disabled ((,class :inherit modus-theme-subtle-red)))
+   `(package-status-external ((,class :foreground ,cyan-alt-other)))
+   `(package-status-held ((,class :foreground ,yellow-alt)))
+   `(package-status-incompat ((,class :inherit bold :foreground ,yellow)))
+   `(package-status-installed ((,class :foreground ,fg-special-warm)))
+   `(package-status-new ((,class :inherit bold :foreground ,green)))
+   `(package-status-unsigned ((,class :inherit bold :foreground ,red-alt)))
+;;;;; page-break-lines
+   `(page-break-lines ((,class :inherit default :foreground 
,fg-window-divider-outer)))
+;;;;; paradox
+   `(paradox-archive-face ((,class :foreground ,fg-special-mild)))
+   `(paradox-comment-face ((,class :foreground ,fg-alt :slant 
,modus-theme-slant)))
+   `(paradox-commit-tag-face ((,class :inherit modus-theme-refine-magenta :box 
t)))
+   `(paradox-description-face ((,class :foreground ,fg-special-cold)))
+   `(paradox-description-face-multiline ((,class :foreground 
,fg-special-cold)))
+   `(paradox-download-face ((,class ,@(modus-vivendi-theme-bold-weight) 
:foreground ,blue-alt-other)))
+   `(paradox-highlight-face ((,class ,@(modus-vivendi-theme-bold-weight) 
:foreground ,cyan-alt-other)))
+   `(paradox-homepage-button-face ((,class :foreground ,magenta-alt-other 
:underline t)))
+   `(paradox-mode-line-face ((,class :inherit bold :foreground ,cyan-active)))
+   `(paradox-name-face ((,class :foreground ,blue :underline t)))
+   `(paradox-star-face ((,class :foreground ,magenta)))
+   `(paradox-starred-face ((,class :foreground ,magenta-alt)))
+;;;;; paren-face
+   `(parenthesis ((,class :foreground ,fg-unfocused)))
+;;;;; parrot
+   `(parrot-rotate-rotation-highlight-face ((,class :inherit 
modus-theme-refine-magenta)))
+;;;;; pass
+   `(pass-mode-directory-face ((,class :inherit bold :foreground 
,fg-special-cold)))
+   `(pass-mode-entry-face ((,class :background ,bg-main :foreground ,fg-main)))
+   `(pass-mode-header-face ((,class :foreground ,fg-special-warm)))
+;;;;; persp-mode
+   `(persp-face-lighter-buffer-not-in-persp ((,class :inherit 
modus-theme-intense-red)))
+   `(persp-face-lighter-default ((,class :inherit bold :foreground 
,blue-active)))
+   `(persp-face-lighter-nil-persp ((,class :inherit bold :foreground 
,fg-active)))
+;;;;; perspective
+   `(persp-selected-face ((,class :inherit bold :foreground ,blue-active)))
+;;;;; phi-grep
+   `(phi-grep-heading-face  ((,class :inherit bold :foreground ,red-alt
+                                     ,@(modus-vivendi-theme-scale 
modus-vivendi-theme-scale-4))))
+   `(phi-grep-line-number-face ((,class :foreground ,fg-special-warm)))
+   `(phi-grep-match-face ((,class :inherit modus-theme-special-calm)))
+   `(phi-grep-modified-face ((,class :inherit modus-theme-refine-yellow)))
+   `(phi-grep-overlay-face ((,class :inherit modus-theme-refine-blue)))
+;;;;; phi-search
+   `(phi-replace-preview-face ((,class :inherit modus-theme-intense-magenta)))
+   `(phi-search-failpart-face ((,class :inherit modus-theme-refine-red)))
+   `(phi-search-match-face ((,class :inherit modus-theme-refine-cyan)))
+   `(phi-search-selection-face ((,class :inherit (modus-theme-intense-green 
bold))))
+;;;;; pkgbuild-mode
+   `(pkgbuild-error-face ((,class :underline ,fg-lang-error)))
+;;;;; pomidor
+   `(pomidor-break-face ((,class :foreground ,blue-alt-other)))
+   `(pomidor-overwork-face ((,class :foreground ,red-alt-other)))
+   `(pomidor-skip-face ((,class :foreground ,fg-alt :slant 
,modus-theme-slant)))
+   `(pomidor-work-face ((,class :foreground ,green-alt-other)))
+;;;;; powerline
+   `(powerline-active0 ((,class :background ,bg-main :foreground ,blue-faint 
:inverse-video t)))
+   `(powerline-active1 ((,class :background ,blue-nuanced-bg :foreground 
,blue-nuanced)))
+   `(powerline-active2 ((,class :background ,bg-active :foreground 
,fg-active)))
+   `(powerline-inactive0 ((,class :background ,bg-special-cold :foreground 
,fg-special-cold)))
+   `(powerline-inactive1 ((,class :background ,bg-dim :foreground 
,fg-inactive)))
+   `(powerline-inactive2 ((,class :background ,bg-inactive :foreground 
,fg-inactive)))
+;;;;; powerline-evil
+   `(powerline-evil-base-face ((,class :background ,fg-main :foreground 
,bg-main)))
+   `(powerline-evil-emacs-face ((,class :inherit modus-theme-active-magenta)))
+   `(powerline-evil-insert-face ((,class :inherit modus-theme-active-green)))
+   `(powerline-evil-motion-face ((,class :inherit modus-theme-active-blue)))
+   `(powerline-evil-normal-face ((,class :background ,fg-alt :foreground 
,bg-main)))
+   `(powerline-evil-operator-face ((,class :inherit 
modus-theme-active-yellow)))
+   `(powerline-evil-replace-face ((,class :inherit modus-theme-active-red)))
+   `(powerline-evil-visual-face ((,class :inherit modus-theme-active-cyan)))
+;;;;; proced
+   `(proced-mark ((,class :inherit modus-theme-mark-symbol)))
+   `(proced-marked ((,class :inherit modus-theme-mark-alt)))
+   `(proced-sort-header ((,class :inherit bold :foreground ,fg-special-calm 
:underline t)))
+;;;;; prodigy
+   `(prodigy-green-face ((,class :foreground ,green)))
+   `(prodigy-red-face ((,class :foreground ,red)))
+   `(prodigy-yellow-face ((,class :foreground ,yellow)))
+;;;;; rainbow-blocks
+   `(rainbow-blocks-depth-1-face ((,class :foreground ,magenta-alt-other)))
+   `(rainbow-blocks-depth-2-face ((,class :foreground ,blue)))
+   `(rainbow-blocks-depth-3-face ((,class :foreground ,magenta-alt)))
+   `(rainbow-blocks-depth-4-face ((,class :foreground ,green)))
+   `(rainbow-blocks-depth-5-face ((,class :foreground ,magenta)))
+   `(rainbow-blocks-depth-6-face ((,class :foreground ,cyan)))
+   `(rainbow-blocks-depth-7-face ((,class :foreground ,yellow)))
+   `(rainbow-blocks-depth-8-face ((,class :foreground ,cyan-alt)))
+   `(rainbow-blocks-depth-9-face ((,class :foreground ,red-alt)))
+   `(rainbow-blocks-unmatched-face ((,class :foreground ,red)))
+;;;;; rainbow-identifiers
+   `(rainbow-identifiers-identifier-1 ((,class :foreground ,green-alt-other)))
+   `(rainbow-identifiers-identifier-2 ((,class :foreground 
,magenta-alt-other)))
+   `(rainbow-identifiers-identifier-3 ((,class :foreground ,cyan-alt-other)))
+   `(rainbow-identifiers-identifier-4 ((,class :foreground ,yellow-alt-other)))
+   `(rainbow-identifiers-identifier-5 ((,class :foreground ,blue-alt-other)))
+   `(rainbow-identifiers-identifier-6 ((,class :foreground ,green-alt)))
+   `(rainbow-identifiers-identifier-7 ((,class :foreground ,magenta-alt)))
+   `(rainbow-identifiers-identifier-8 ((,class :foreground ,cyan-alt)))
+   `(rainbow-identifiers-identifier-9 ((,class :foreground ,yellow-alt)))
+   `(rainbow-identifiers-identifier-10 ((,class :foreground ,green)))
+   `(rainbow-identifiers-identifier-11 ((,class :foreground ,magenta)))
+   `(rainbow-identifiers-identifier-12 ((,class :foreground ,cyan)))
+   `(rainbow-identifiers-identifier-13 ((,class :foreground ,yellow)))
+   `(rainbow-identifiers-identifier-14 ((,class :foreground ,blue-alt)))
+   `(rainbow-identifiers-identifier-15 ((,class :foreground ,red-alt)))
+;;;;; rainbow-delimiters
+   `(rainbow-delimiters-base-face-error ((,class :foreground ,red)))
+   `(rainbow-delimiters-base-face ((,class :foreground ,fg-main)))
+   `(rainbow-delimiters-depth-1-face ((,class :foreground ,green-alt-other)))
+   `(rainbow-delimiters-depth-2-face ((,class :foreground ,magenta-alt-other)))
+   `(rainbow-delimiters-depth-3-face ((,class :foreground ,cyan-alt-other)))
+   `(rainbow-delimiters-depth-4-face ((,class :foreground ,yellow-alt-other)))
+   `(rainbow-delimiters-depth-5-face ((,class :foreground ,blue-alt-other)))
+   `(rainbow-delimiters-depth-6-face ((,class :foreground ,green-alt)))
+   `(rainbow-delimiters-depth-7-face ((,class :foreground ,magenta-alt)))
+   `(rainbow-delimiters-depth-8-face ((,class :foreground ,cyan-alt)))
+   `(rainbow-delimiters-depth-9-face ((,class :foreground ,yellow-alt)))
+   `(rainbow-delimiters-mismatched-face ((,class :inherit bold :foreground 
,red-alt)))
+   `(rainbow-delimiters-unmatched-face ((,class :inherit bold :foreground 
,red)))
+;;;;; rcirc
+   `(rcirc-bright-nick ((,class :inherit bold :foreground ,magenta-alt)))
+   `(rcirc-dim-nick ((,class :foreground ,fg-alt)))
+   `(rcirc-my-nick ((,class :inherit bold :foreground ,magenta)))
+   `(rcirc-nick-in-message ((,class :foreground ,magenta-alt-other)))
+   `(rcirc-nick-in-message-full-line ((,class :inherit bold :foreground 
,fg-special-mild)))
+   `(rcirc-other-nick ((,class :inherit bold :foreground ,fg-special-cold)))
+   `(rcirc-prompt ((,class :inherit bold :foreground ,cyan-alt-other)))
+   `(rcirc-server ((,class :foreground ,fg-unfocused)))
+   `(rcirc-timestamp ((,class :foreground ,blue-nuanced)))
+   `(rcirc-url ((,class :foreground ,blue :underline t)))
+;;;;; regexp-builder (re-builder)
+   `(reb-match-0 ((,class :inherit modus-theme-intense-blue)))
+   `(reb-match-1 ((,class :inherit modus-theme-intense-magenta)))
+   `(reb-match-2 ((,class :inherit modus-theme-intense-green)))
+   `(reb-match-3 ((,class :inherit modus-theme-intense-red)))
+   `(reb-regexp-grouping-backslash ((,class :inherit bold :foreground 
,fg-escape-char-backslash)))
+   `(reb-regexp-grouping-construct ((,class :inherit bold :foreground 
,fg-escape-char-construct)))
+;;;;; rg (rg.el)
+   `(rg-column-number-face ((,class :foreground ,magenta-alt-other)))
+   `(rg-context-face ((,class :foreground ,fg-unfocused)))
+   `(rg-error-face ((,class :inherit bold :foreground ,red)))
+   `(rg-file-tag-face ((,class :foreground ,fg-special-cold)))
+   `(rg-filename-face ((,class :inherit bold :foreground ,fg-special-cold)))
+   `(rg-line-number-face ((,class :foreground ,fg-special-warm)))
+   `(rg-literal-face ((,class :foreground ,blue-alt)))
+   `(rg-match-face ((,class :inherit modus-theme-special-calm)))
+   `(rg-regexp-face ((,class :foreground ,magenta-active)))
+   `(rg-toggle-off-face ((,class :inherit bold :foreground ,fg-inactive)))
+   `(rg-toggle-on-face ((,class :inherit bold :foreground ,cyan-active)))
+   `(rg-warning-face ((,class :inherit bold :foreground ,yellow)))
+;;;;; ripgrep
+   `(ripgrep-context-face ((,class :foreground ,fg-unfocused)))
+   `(ripgrep-error-face ((,class :inherit bold :foreground ,red)))
+   `(ripgrep-hit-face ((,class :foreground ,cyan)))
+   `(ripgrep-match-face ((,class :inherit modus-theme-special-calm)))
+;;;;; rmail
+   `(rmail-header-name ((,class :foreground ,cyan-alt-other)))
+   `(rmail-highlight ((,class :inherit bold :foreground ,magenta-alt)))
+;;;;; ruler-mode
+   `(ruler-mode-column-number ((,class :inherit (ruler-mode-default bold) 
:foreground ,fg-main)))
+   `(ruler-mode-comment-column ((,class :inherit ruler-mode-default 
:foreground ,red-active)))
+   `(ruler-mode-current-column ((,class :inherit ruler-mode-default 
:foreground ,cyan-active :box t)))
+   `(ruler-mode-default ((,class :background ,bg-inactive :foreground 
,fg-inactive)))
+   `(ruler-mode-fill-column ((,class :inherit ruler-mode-default :foreground 
,green-active)))
+   `(ruler-mode-fringes ((,class :inherit ruler-mode-default :foreground 
,blue-active)))
+   `(ruler-mode-goal-column ((,class :inherit ruler-mode-default :foreground 
,magenta-active)))
+   `(ruler-mode-margins ((,class :inherit ruler-mode-default :foreground 
,bg-main)))
+   `(ruler-mode-pad ((,class :background ,bg-active :foreground ,fg-inactive)))
+   `(ruler-mode-tab-stop ((,class :inherit ruler-mode-default :foreground 
,yellow-active)))
+;;;;; sallet
+   `(sallet-buffer-compressed ((,class :foreground ,yellow-nuanced :slant 
italic)))
+   `(sallet-buffer-default-directory ((,class :foreground ,cyan-nuanced)))
+   `(sallet-buffer-directory ((,class :foreground ,blue-nuanced)))
+   `(sallet-buffer-help ((,class :foreground ,fg-special-cold)))
+   `(sallet-buffer-modified ((,class :foreground ,yellow-alt-other :slant 
italic)))
+   `(sallet-buffer-ordinary ((,class :foreground ,fg-main)))
+   `(sallet-buffer-read-only ((,class :foreground ,yellow-alt)))
+   `(sallet-buffer-size ((,class :foreground ,fg-special-calm)))
+   `(sallet-buffer-special ((,class :foreground ,magenta-alt-other)))
+   `(sallet-flx-match ((,class ,@(modus-vivendi-theme-extra-completions
+                                  'modus-theme-subtle-cyan
+                                  'modus-theme-refine-cyan
+                                  'modus-theme-nuanced-cyan
+                                  cyan-alt-other))))
+   `(sallet-recentf-buffer-name ((,class :foreground ,blue-nuanced)))
+   `(sallet-recentf-file-path ((,class :foreground ,fg-special-mild)))
+   `(sallet-regexp-match ((,class ,@(modus-vivendi-theme-extra-completions
+                                     'modus-theme-subtle-magenta
+                                     'modus-theme-refine-magenta
+                                     'modus-theme-nuanced-magenta
+                                     magenta-alt-other))))
+   `(sallet-source-header ((,class :inherit bold :foreground ,red-alt
+                                   ,@(modus-vivendi-theme-scale 
modus-vivendi-theme-scale-4))))
+   `(sallet-substring-match ((,class ,@(modus-vivendi-theme-extra-completions
+                                        'modus-theme-subtle-blue
+                                        'modus-theme-refine-blue
+                                        'modus-theme-nuanced-blue
+                                        blue-alt-other))))
+;;;;; selectrum
+   `(selectrum-current-candidate ((,class 
,@(modus-vivendi-theme-extra-completions
+                                             'modus-theme-refine-magenta
+                                             'modus-theme-intense-magenta
+                                             'modus-theme-nuanced-magenta
+                                             magenta
+                                             'bold))))
+   `(selectrum-primary-highlight ((,class 
,@(modus-vivendi-theme-extra-completions
+                                             'modus-theme-refine-blue
+                                             'modus-theme-intense-blue
+                                             'modus-theme-nuanced-blue
+                                             blue
+                                             'bold))))
+   `(selectrum-secondary-highlight ((,class 
,@(modus-vivendi-theme-extra-completions
+                                               'modus-theme-refine-cyan
+                                               'modus-theme-intense-cyan
+                                               'modus-theme-nuanced-cyan
+                                               cyan
+                                               'bold))))
+;;;;; semantic
+   `(semantic-complete-inline-face ((,class :foreground ,fg-special-warm 
:underline t)))
+   `(semantic-decoration-on-private-members-face ((,class :inherit 
modus-theme-refine-cyan)))
+   `(semantic-decoration-on-protected-members-face ((,class :background 
,bg-dim)))
+   `(semantic-highlight-edits-face ((,class :background ,bg-alt)))
+   `(semantic-highlight-func-current-tag-face ((,class :background ,bg-alt)))
+   `(semantic-idle-symbol-highlight ((,class :inherit 
modus-theme-special-mild)))
+   `(semantic-tag-boundary-face ((,class :overline ,blue-intense)))
+   `(semantic-unmatched-syntax-face ((,class :underline ,fg-lang-error)))
+;;;;; sesman
+   `(sesman-browser-button-face ((,class :foreground ,blue-alt-other 
:underline t)))
+   `(sesman-browser-highligh-face ((,class :inherit modus-theme-subtle-blue)))
+   `(sesman-buffer-face ((,class :foreground ,magenta)))
+   `(sesman-directory-face ((,class :inherit bold :foreground ,blue)))
+   `(sesman-project-face ((,class :inherit bold :foreground 
,magenta-alt-other)))
+;;;;; shell-script-mode
+   `(sh-heredoc ((,class :foreground ,blue-alt)))
+   `(sh-quoted-exec ((,class ,@(modus-vivendi-theme-bold-weight) :foreground 
,magenta-alt)))
+;;;;; show-paren-mode
+   `(show-paren-match ((,class ,@(modus-vivendi-theme-paren bg-paren-match
+                                                            
bg-paren-match-intense)
+                               :foreground ,fg-main)))
+   `(show-paren-match-expression ((,class :inherit modus-theme-special-calm)))
+   `(show-paren-mismatch ((,class :inherit modus-theme-intense-red)))
+;;;;; side-notes
+   `(side-notes ((,class :background ,bg-dim :foreground ,fg-dim)))
+;;;;; skewer-mode
+   `(skewer-error-face ((,class :foreground ,red :underline t)))
+;;;;; smart-mode-line
+   `(sml/charging ((,class :foreground ,green-active)))
+   `(sml/discharging ((,class :foreground ,red-active)))
+   `(sml/filename ((,class :inherit bold :foreground ,blue-active)))
+   `(sml/folder ((,class :foreground ,fg-active)))
+   `(sml/git ((,class :inherit bold :foreground ,green-active)))
+   `(sml/global ((,class :foreground ,fg-active)))
+   `(sml/line-number ((,class :inherit sml/global)))
+   `(sml/minor-modes ((,class :inherit sml/global)))
+   `(sml/modes ((,class :inherit bold :foreground ,fg-active)))
+   `(sml/modified ((,class :inherit bold :foreground ,magenta-active)))
+   `(sml/mule-info ((,class :inherit sml/global)))
+   `(sml/name-filling ((,class :foreground ,yellow-active)))
+   `(sml/not-modified ((,class :inherit sml/global)))
+   `(sml/numbers-separator ((,class :inherit sml/global)))
+   `(sml/outside-modified ((,class :inherit modus-theme-intense-red)))
+   `(sml/position-percentage ((,class :inherit sml/global)))
+   `(sml/prefix ((,class :foreground ,green-active)))
+   `(sml/process ((,class :inherit sml/prefix)))
+   `(sml/projectile ((,class :inherit sml/git)))
+   `(sml/read-only ((,class :inherit bold :foreground ,cyan-active)))
+   `(sml/remote ((,class :inherit sml/global)))
+   `(sml/sudo ((,class :inherit modus-theme-subtle-red)))
+   `(sml/time ((,class :inherit sml/global)))
+   `(sml/vc ((,class :inherit sml/git)))
+   `(sml/vc-edited ((,class :inherit bold :foreground ,yellow-active)))
+;;;;; smartparens
+   `(sp-pair-overlay-face ((,class :inherit modus-theme-special-warm)))
+   `(sp-show-pair-enclosing ((,class :inherit modus-theme-special-mild)))
+   `(sp-show-pair-match-face ((,class ,@(modus-vivendi-theme-paren 
bg-paren-match
+                                                                   
bg-paren-match-intense)
+                                      :foreground ,fg-main)))
+   `(sp-show-pair-mismatch-face ((,class :inherit modus-theme-intense-red)))
+   `(sp-wrap-overlay-closing-pair ((,class :inherit sp-pair-overlay-face)))
+   `(sp-wrap-overlay-face ((,class :inherit sp-pair-overlay-face)))
+   `(sp-wrap-overlay-opening-pair ((,class :inherit sp-pair-overlay-face)))
+   `(sp-wrap-tag-overlay-face ((,class :inherit sp-pair-overlay-face)))
+;;;;; smerge
+   `(smerge-base ((,class ,@(modus-vivendi-theme-diffs
+                             bg-main yellow
+                             bg-diff-focus-changed fg-diff-focus-changed))))
+   `(smerge-lower ((,class ,@(modus-vivendi-theme-diffs
+                              bg-main green
+                              bg-diff-focus-added fg-diff-focus-added))))
+   `(smerge-markers ((,class :background ,bg-diff-neutral-2 :foreground 
,fg-diff-neutral-2)))
+   `(smerge-refined-added ((,class ,@(modus-vivendi-theme-diffs
+                                      bg-diff-added fg-diff-added
+                                      bg-diff-refine-added 
fg-diff-refine-added))))
+   `(smerge-refined-changed ((,class)))
+   `(smerge-refined-removed ((,class ,@(modus-vivendi-theme-diffs
+                                        bg-diff-removed fg-diff-removed
+                                        bg-diff-refine-removed 
fg-diff-refine-removed))))
+   `(smerge-upper ((,class ,@(modus-vivendi-theme-diffs
+                              bg-main red
+                              bg-diff-focus-removed fg-diff-focus-removed))))
+;;;;; spaceline
+   `(spaceline-evil-emacs ((,class :inherit modus-theme-active-magenta)))
+   `(spaceline-evil-insert ((,class :inherit modus-theme-active-green)))
+   `(spaceline-evil-motion ((,class :inherit modus-theme-active-blue)))
+   `(spaceline-evil-normal ((,class :background ,fg-alt :foreground ,bg-alt)))
+   `(spaceline-evil-replace ((,class :inherit modus-theme-active-red)))
+   `(spaceline-evil-visual ((,class :inherit modus-theme-active-cyan)))
+   `(spaceline-flycheck-error ((,class :foreground ,red-active)))
+   `(spaceline-flycheck-info ((,class :foreground ,cyan-active)))
+   `(spaceline-flycheck-warning ((,class :foreground ,yellow-active)))
+   `(spaceline-highlight-face ((,class :inherit modus-theme-fringe-blue)))
+   `(spaceline-modified ((,class :inherit modus-theme-fringe-magenta)))
+   `(spaceline-python-venv ((,class :foreground ,magenta-active)))
+   `(spaceline-read-only ((,class :inherit modus-theme-fringe-red)))
+   `(spaceline-unmodified ((,class :inherit modus-theme-fringe-cyan)))
+;;;;; speedbar
+   `(speedbar-button-face ((,class :inherit link)))
+   `(speedbar-directory-face ((,class :inherit bold :foreground ,blue)))
+   `(speedbar-file-face ((,class :foreground ,fg-main)))
+   `(speedbar-highlight-face ((,class :inherit modus-theme-subtle-blue)))
+   `(speedbar-selected-face ((,class :inherit bold :foreground ,cyan)))
+   `(speedbar-separator-face ((,class :inherit modus-theme-intense-neutral)))
+   `(speedbar-tag-face ((,class :foreground ,yellow-alt-other)))
+;;;;; spell-fu
+   `(spell-fu-incorrect-face
+     ((,(append '((supports :underline (:style wave))) class)
+       :foreground ,fg-lang-error :underline (:style wave))
+      (,class :foreground ,fg-lang-error :underline t)))
+;;;;; stripes
+   `(stripes ((,class :inherit modus-theme-hl-line)))
+;;;;; success
+   `(suggest-heading ((,class :inherit bold :foreground ,yellow-alt-other)))
+;;;;; switch-window
+   `(switch-window-background ((,class :background ,bg-dim)))
+   `(switch-window-label ((,class :height 3.0 :foreground ,blue-intense)))
+;;;;; swiper
+   `(swiper-background-match-face-1 ((,class :inherit 
modus-theme-subtle-neutral)))
+   `(swiper-background-match-face-2 ((,class :inherit 
modus-theme-subtle-cyan)))
+   `(swiper-background-match-face-3 ((,class :inherit 
modus-theme-subtle-magenta)))
+   `(swiper-background-match-face-4 ((,class :inherit 
modus-theme-subtle-green)))
+   `(swiper-line-face ((,class ,@(and (>= emacs-major-version 27) '(:extend t))
+                               :inherit modus-theme-special-cold)))
+   `(swiper-match-face-1 ((,class :inherit swiper-line-face)))
+   `(swiper-match-face-2 ((,class :inherit swiper-line-face)))
+   `(swiper-match-face-3 ((,class :inherit swiper-line-face)))
+   `(swiper-match-face-4 ((,class :inherit swiper-line-face)))
+;;;;; swoop
+   `(swoop-face-header-format-line ((,class :inherit bold :foreground ,red-alt
+                                            ,@(modus-vivendi-theme-scale 
modus-vivendi-theme-scale-3))))
+   `(swoop-face-line-buffer-name ((,class :inherit bold :foreground ,blue-alt
+                                          ,@(modus-vivendi-theme-scale 
modus-vivendi-theme-scale-4))))
+   `(swoop-face-line-number ((,class :foreground ,fg-special-warm)))
+   `(swoop-face-target-line ((,class :inherit modus-theme-intense-blue
+                                     ,@(and (>= emacs-major-version 27) 
'(:extend t)))))
+   `(swoop-face-target-words ((,class :inherit modus-theme-refine-cyan)))
+;;;;; sx
+   `(sx-inbox-item-type ((,class :foreground ,magenta-alt-other)))
+   `(sx-inbox-item-type-unread ((,class :inherit (sx-inbox-item-type bold))))
+   `(sx-question-list-answers ((,class :foreground ,green)))
+   `(sx-question-list-answers-accepted ((,class :box t :foreground ,green)))
+   `(sx-question-list-bounty ((,class :inherit bold :background ,bg-alt 
:foreground ,yellow)))
+   `(sx-question-list-date ((,class :foreground ,fg-special-cold)))
+   `(sx-question-list-favorite ((,class :inherit bold :foreground 
,fg-special-warm)))
+   `(sx-question-list-parent ((,class :foreground ,fg-main)))
+   `(sx-question-list-read-question ((,class :foreground ,fg-alt)))
+   `(sx-question-list-score ((,class :foreground ,fg-special-mild)))
+   `(sx-question-list-score-upvoted ((,class :inherit (sx-question-list-score 
bold))))
+   `(sx-question-list-unread-question ((,class :inherit bold :foreground 
,fg-main)))
+   `(sx-question-mode-accepted ((,class :inherit bold :height 1.3 :foreground 
,green)))
+   `(sx-question-mode-closed ((,class :inherit modus-theme-active-yellow :box 
(:line-width 2 :color nil))))
+   `(sx-question-mode-closed-reason ((,class :box (:line-width 2 :color nil) 
:foreground ,fg-main)))
+   `(sx-question-mode-content-face ((,class :background ,bg-dim)))
+   `(sx-question-mode-date ((,class :foreground ,blue)))
+   `(sx-question-mode-header ((,class :inherit bold :foreground ,cyan)))
+   `(sx-question-mode-kbd-tag ((,class :inherit bold :height 0.9 :box 
(:line-width 3 :color ,fg-main :style released-button) :foreground ,fg-main)))
+   `(sx-question-mode-score ((,class :foreground ,fg-dim)))
+   `(sx-question-mode-score-downvoted ((,class :foreground ,yellow)))
+   `(sx-question-mode-score-upvoted ((,class :inherit bold :foreground 
,magenta)))
+   `(sx-question-mode-title ((,class :inherit bold :foreground ,fg-main)))
+   `(sx-question-mode-title-comments ((,class :inherit bold :foreground 
,fg-alt)))
+   `(sx-tag ((,class :foreground ,magenta-alt)))
+   `(sx-user-name ((,class :foreground ,blue-alt)))
+   `(sx-user-reputation ((,class :foreground ,fg-alt)))
+;;;;; symbol-overlay
+   `(symbol-overlay-default-face ((,class :inherit modus-theme-special-warm)))
+   `(symbol-overlay-face-1 ((,class :inherit modus-theme-intense-blue)))
+   `(symbol-overlay-face-2 ((,class :inherit modus-theme-refine-magenta)))
+   `(symbol-overlay-face-3 ((,class :inherit modus-theme-intense-yellow)))
+   `(symbol-overlay-face-4 ((,class :inherit modus-theme-intense-magenta)))
+   `(symbol-overlay-face-5 ((,class :inherit modus-theme-intense-red)))
+   `(symbol-overlay-face-6 ((,class :inherit modus-theme-refine-red)))
+   `(symbol-overlay-face-7 ((,class :inherit modus-theme-intense-cyan)))
+   `(symbol-overlay-face-8 ((,class :inherit modus-theme-refine-cyan)))
+;;;;; syslog-mode
+   `(syslog-debug ((,class :inherit bold :foreground ,cyan-alt-other)))
+   `(syslog-error ((,class :inherit bold :foreground ,red)))
+   `(syslog-file ((,class :inherit bold :foreground ,fg-special-cold)))
+   `(syslog-hide ((,class :background ,bg-main :foreground ,fg-main)))
+   `(syslog-hour ((,class :inherit bold :foreground ,magenta-alt-other)))
+   `(syslog-info ((,class :inherit bold :foreground ,blue-alt-other)))
+   `(syslog-ip ((,class :inherit bold :foreground ,fg-special-mild :underline 
t)))
+   `(syslog-su ((,class :inherit bold :foreground ,red-alt)))
+   `(syslog-warn ((,class :inherit bold :foreground ,yellow)))
+;;;;; table (built-in table.el)
+   `(table-cell ((,class :background ,blue-nuanced-bg)))
+;;;;; telephone-line
+   `(telephone-line-accent-active ((,class :background ,fg-inactive 
:foreground ,bg-inactive)))
+   `(telephone-line-accent-inactive ((,class :background ,bg-active 
:foreground ,fg-active)))
+   `(telephone-line-error ((,class :inherit bold :foreground ,red-active)))
+   `(telephone-line-evil ((,class :foreground ,fg-main)))
+   `(telephone-line-evil-emacs ((,class :inherit telephone-line-evil 
:background ,magenta-intense-bg)))
+   `(telephone-line-evil-insert ((,class :inherit telephone-line-evil 
:background ,green-intense-bg)))
+   `(telephone-line-evil-motion ((,class :inherit telephone-line-evil 
:background ,yellow-intense-bg)))
+   `(telephone-line-evil-normal ((,class :inherit telephone-line-evil 
:background ,bg-alt)))
+   `(telephone-line-evil-operator ((,class :inherit telephone-line-evil 
:background ,yellow-subtle-bg)))
+   `(telephone-line-evil-replace ((,class :inherit telephone-line-evil 
:background ,red-intense-bg)))
+   `(telephone-line-evil-visual ((,class :inherit telephone-line-evil 
:background ,cyan-intense-bg)))
+   `(telephone-line-projectile ((,class :foreground ,cyan-active)))
+   `(telephone-line-unimportant ((,class :foreground ,fg-inactive)))
+   `(telephone-line-warning ((,class :inherit bold :foreground 
,yellow-active)))
+;;;;; term
+   `(term ((,class :background ,bg-main :foreground ,fg-main)))
+   `(term-bold ((,class :inherit bold)))
+   `(term-color-blue ((,class :background ,blue :foreground ,blue)))
+   `(term-color-cyan ((,class :background ,cyan :foreground ,cyan)))
+   `(term-color-green ((,class :background ,green :foreground ,green)))
+   `(term-color-magenta ((,class :background ,magenta :foreground ,magenta)))
+   `(term-color-red ((,class :background ,red :foreground ,red)))
+   `(term-color-yellow ((,class :background ,yellow :foreground ,yellow)))
+   `(term-underline ((,class :underline t)))
+;;;;; tomatinho
+   `(tomatinho-ok-face ((,class :foreground ,blue-intense)))
+   `(tomatinho-pause-face ((,class :foreground ,yellow-intense)))
+   `(tomatinho-reset-face ((,class :foreground ,fg-alt)))
+;;;;; transient
+   `(transient-active-infix ((,class :inherit modus-theme-special-mild)))
+   `(transient-amaranth ((,class :inherit bold :foreground ,yellow)))
+   `(transient-argument ((,class :inherit bold :foreground ,red-alt)))
+   `(transient-blue ((,class :inherit bold :foreground ,blue)))
+   `(transient-disabled-suffix ((,class :inherit modus-theme-intense-red)))
+   `(transient-enabled-suffix ((,class :inherit modus-theme-intense-green)))
+   `(transient-heading ((,class :inherit bold :foreground ,fg-main)))
+   `(transient-inactive-argument ((,class :foreground ,fg-alt)))
+   `(transient-inactive-value ((,class :foreground ,fg-alt)))
+   `(transient-key ((,class :inherit bold :foreground ,blue)))
+   `(transient-mismatched-key ((,class :underline t)))
+   `(transient-nonstandard-key ((,class :underline t)))
+   `(transient-pink ((,class :inherit bold :foreground ,magenta)))
+   `(transient-red ((,class :inherit bold :foreground ,red-intense)))
+   `(transient-teal ((,class :inherit bold :foreground ,cyan-alt-other)))
+   `(transient-unreachable ((,class :foreground ,fg-unfocused)))
+   `(transient-unreachable-key ((,class :foreground ,fg-unfocused)))
+   `(transient-value ((,class :foreground ,magenta-alt)))
+;;;;; trashed
+   `(trashed-deleted ((,class :inherit modus-theme-mark-del)))
+   `(trashed-directory ((,class :foreground ,blue)))
+   `(trashed-mark ((,class :inherit modus-theme-mark-symbol)))
+   `(trashed-marked ((,class :inherit modus-theme-mark-alt)))
+   `(trashed-restored ((,class :inherit modus-theme-mark-sel)))
+   `(trashed-symlink ((,class :foreground ,cyan-alt :underline t)))
+;;;;; treemacs
+   `(treemacs-directory-collapsed-face ((,class :foreground ,magenta-alt)))
+   `(treemacs-directory-face ((,class :inherit dired-directory)))
+   `(treemacs-file-face ((,class :foreground ,fg-main)))
+   `(treemacs-fringe-indicator-face ((,class :foreground ,fg-main)))
+   `(treemacs-git-added-face ((,class :foreground ,green-intense)))
+   `(treemacs-git-conflict-face ((,class :inherit (modus-theme-intense-red 
bold))))
+   `(treemacs-git-ignored-face ((,class :foreground ,fg-alt)))
+   `(treemacs-git-modified-face ((,class :foreground ,yellow-alt-other)))
+   `(treemacs-git-renamed-face ((,class :foreground ,cyan-alt-other)))
+   `(treemacs-git-unmodified-face ((,class :foreground ,fg-main)))
+   `(treemacs-git-untracked-face ((,class :foreground ,red-alt-other)))
+   `(treemacs-help-column-face ((,class ,@(modus-vivendi-theme-bold-weight) 
:foreground ,magenta-alt-other :underline t)))
+   `(treemacs-help-title-face ((,class :foreground ,blue-alt-other)))
+   `(treemacs-on-failure-pulse-face ((,class :inherit 
modus-theme-intense-red)))
+   `(treemacs-on-success-pulse-face ((,class :inherit 
modus-theme-intense-green)))
+   `(treemacs-root-face ((,class :inherit bold :foreground ,blue-alt-other 
:height 1.2 :underline t)))
+   `(treemacs-root-remote-disconnected-face ((,class :inherit 
treemacs-root-remote-face :foreground ,yellow)))
+   `(treemacs-root-remote-face ((,class :inherit treemacs-root-face 
:foreground ,magenta)))
+   `(treemacs-root-remote-unreadable-face ((,class :inherit 
treemacs-root-unreadable-face)))
+   `(treemacs-root-unreadable-face ((,class :inherit treemacs-root-face 
:strike-through t)))
+   `(treemacs-tags-face ((,class :foreground ,blue-alt)))
+   `(treemacs-tags-face ((,class :foreground ,magenta-alt)))
+;;;;; tty-menu
+   `(tty-menu-disabled-face ((,class :background ,bg-alt :foreground ,fg-alt)))
+   `(tty-menu-enabled-face ((,class :inherit bold :background ,bg-alt 
:foreground ,fg-main)))
+   `(tty-menu-selected-face ((,class :inherit modus-theme-intense-blue)))
+;;;;; tuareg
+   `(caml-types-def-face ((,class :inherit modus-theme-subtle-red)))
+   `(caml-types-expr-face ((,class :inherit modus-theme-subtle-green)))
+   `(caml-types-occ-face ((,class :inherit modus-theme-subtle-green)))
+   `(caml-types-scope-face ((,class :inherit modus-theme-subtle-blue)))
+   `(caml-types-typed-face ((,class :inherit modus-theme-subtle-magenta)))
+   `(tuareg-font-double-semicolon-face ((,class 
,@(modus-vivendi-theme-syntax-foreground
+                                                   red-alt red-alt-faint))))
+   `(tuareg-font-lock-attribute-face ((,class 
,@(modus-vivendi-theme-syntax-foreground
+                                                 magenta magenta-faint))))
+   `(tuareg-font-lock-constructor-face ((,class :foreground ,fg-main)))
+   `(tuareg-font-lock-error-face ((,class :inherit (modus-theme-intense-red 
bold))))
+   `(tuareg-font-lock-extension-node-face ((,class :background ,bg-alt 
:foreground ,magenta)))
+   `(tuareg-font-lock-governing-face ((,class :inherit bold :foreground 
,fg-main)))
+   `(tuareg-font-lock-infix-extension-node-face ((,class 
,@(modus-vivendi-theme-syntax-foreground
+                                                            magenta 
magenta-faint))))
+   `(tuareg-font-lock-interactive-directive-face ((,class :foreground 
,fg-special-cold)))
+   `(tuareg-font-lock-interactive-error-face ((,class :inherit bold
+                                                      
,@(modus-vivendi-theme-syntax-foreground
+                                                         red red-faint))))
+   `(tuareg-font-lock-interactive-output-face ((,class 
,@(modus-vivendi-theme-syntax-foreground
+                                                          blue-alt-other 
blue-alt-other-faint))))
+   `(tuareg-font-lock-label-face ((,class 
,@(modus-vivendi-theme-syntax-foreground
+                                             cyan-alt-other 
cyan-alt-other-faint))))
+   `(tuareg-font-lock-line-number-face ((,class :foreground ,fg-special-warm)))
+   `(tuareg-font-lock-module-face ((,class 
,@(modus-vivendi-theme-syntax-foreground
+                                              magenta-alt magenta-alt-faint))))
+   `(tuareg-font-lock-multistage-face ((,class :inherit bold :background 
,bg-alt
+                                               
,@(modus-vivendi-theme-syntax-foreground
+                                                  blue blue-faint))))
+   `(tuareg-font-lock-operator-face ((,class 
,@(modus-vivendi-theme-syntax-foreground
+                                                red-alt red-alt-faint))))
+   `(tuareg-opam-error-face ((,class :inherit bold
+                                     ,@(modus-vivendi-theme-syntax-foreground
+                                        red red-faint))))
+   `(tuareg-opam-pkg-variable-name-face ((,class 
,@(modus-vivendi-theme-syntax-foreground
+                                                    cyan cyan-faint)
+                                                 :slant ,modus-theme-slant)))
+;;;;; undo-tree
+   `(undo-tree-visualizer-active-branch-face ((,class :inherit bold 
:foreground ,fg-main)))
+   `(undo-tree-visualizer-current-face ((,class :foreground ,blue-intense)))
+   `(undo-tree-visualizer-default-face ((,class :foreground ,fg-alt)))
+   `(undo-tree-visualizer-register-face ((,class :foreground 
,magenta-intense)))
+   `(undo-tree-visualizer-unmodified-face ((,class :foreground 
,green-intense)))
+;;;;; vc
+   `(vc-conflict-state ((,class ,@(modus-vivendi-theme-bold-weight) 
:foreground ,red-active)))
+   `(vc-edited-state ((,class :foreground ,fg-special-warm)))
+   `(vc-locally-added-state ((,class :foreground ,cyan-active)))
+   `(vc-locked-state ((,class ,@(modus-vivendi-theme-bold-weight) :foreground 
,magenta-active)))
+   `(vc-missing-state ((,class ,@(modus-vivendi-theme-bold-weight) :foreground 
,yellow-active)))
+   `(vc-needs-update-state ((,class ,@(modus-vivendi-theme-bold-weight) 
:foreground ,fg-special-mild)))
+   `(vc-removed-state ((,class :foreground ,red-active)))
+   `(vc-state-base ((,class :foreground ,fg-active)))
+   `(vc-up-to-date-state ((,class :foreground ,fg-special-cold)))
+;;;;; vdiff
+   `(vdiff-addition-face ((,class ,@(modus-vivendi-theme-diffs
+                                     bg-main green
+                                     bg-diff-focus-added 
fg-diff-focus-added))))
+   `(vdiff-change-face ((,class ,@(modus-vivendi-theme-diffs
+                                   bg-main yellow
+                                   bg-diff-focus-changed 
fg-diff-focus-changed))))
+   `(vdiff-closed-fold-face ((,class :background ,bg-diff-neutral-1 
:foreground ,fg-diff-neutral-1)))
+   `(vdiff-refine-added ((,class ,@(modus-vivendi-theme-diffs
+                                    bg-diff-added fg-diff-added
+                                    bg-diff-refine-added 
fg-diff-refine-added))))
+   `(vdiff-refine-changed ((,class ,@(modus-vivendi-theme-diffs
+                                      bg-diff-changed fg-diff-changed
+                                      bg-diff-refine-changed 
fg-diff-refine-changed))))
+   `(vdiff-subtraction-face ((,class ,@(modus-vivendi-theme-diffs
+                                        bg-main red
+                                        bg-diff-focus-removed 
fg-diff-focus-removed))))
+   `(vdiff-target-face ((,class :inherit modus-theme-intense-blue)))
+;;;;; vimish-fold
+   `(vimish-fold-fringe ((,class :foreground ,cyan-active)))
+   `(vimish-fold-mouse-face ((,class :inherit modus-theme-intense-blue)))
+   `(vimish-fold-overlay ((,class :background ,bg-alt :foreground 
,fg-special-cold)))
+;;;;; visible-mark
+   `(visible-mark-active ((,class :background ,blue-intense-bg)))
+   `(visible-mark-face1 ((,class :background ,cyan-intense-bg)))
+   `(visible-mark-face2 ((,class :background ,yellow-intense-bg)))
+   `(visible-mark-forward-face1 ((,class :background ,magenta-intense-bg)))
+   `(visible-mark-forward-face2 ((,class :background ,green-intense-bg)))
+;;;;; visual-regexp
+   `(vr/group-0 ((,class :inherit modus-theme-intense-blue)))
+   `(vr/group-1 ((,class :inherit modus-theme-intense-magenta)))
+   `(vr/group-2 ((,class :inherit modus-theme-intense-green)))
+   `(vr/match-0 ((,class :inherit modus-theme-refine-yellow)))
+   `(vr/match-1 ((,class :inherit modus-theme-refine-yellow)))
+   `(vr/match-separator-face ((,class :inherit (modus-theme-intense-neutral 
bold))))
+;;;;; volatile-highlights
+   `(vhl/default-face ((,class ,@(and (>= emacs-major-version 27) '(:extend t))
+                               :background ,bg-alt :foreground ,blue-nuanced)))
+;;;;; vterm
+   `(vterm-color-black ((,class :background "black" :foreground "black")))
+   `(vterm-color-blue ((,class :background ,blue :foreground ,blue)))
+   `(vterm-color-cyan ((,class :background ,cyan :foreground ,cyan)))
+   `(vterm-color-default ((,class :background ,bg-main :foreground ,fg-main)))
+   `(vterm-color-green ((,class :background ,green :foreground ,green)))
+   `(vterm-color-inverse-video ((,class :background ,bg-main :inverse-video 
t)))
+   `(vterm-color-magenta ((,class :background ,magenta :foreground ,magenta)))
+   `(vterm-color-red ((,class :background ,red :foreground ,red)))
+   `(vterm-color-underline ((,class :foreground ,fg-special-warm :underline 
t)))
+   `(vterm-color-white ((,class :background "white" :foreground "white")))
+   `(vterm-color-yellow ((,class :background ,yellow :foreground ,yellow)))
+;;;;; wcheck-mode
+   `(wcheck-default-face ((,class :foreground ,red :underline t)))
+;;;;; web-mode
+   `(web-mode-annotation-face ((,class :inherit web-mode-comment-face)))
+   `(web-mode-annotation-html-face ((,class :inherit web-mode-comment-face)))
+   `(web-mode-annotation-tag-face ((,class :inherit web-mode-comment-face 
:underline t)))
+   `(web-mode-block-attr-name-face ((,class 
,@(modus-vivendi-theme-syntax-foreground
+                                               blue blue-faint))))
+   `(web-mode-block-attr-value-face ((,class 
,@(modus-vivendi-theme-syntax-foreground
+                                                cyan-alt-other 
cyan-alt-other-faint))))
+   `(web-mode-block-comment-face ((,class :inherit web-mode-comment-face)))
+   `(web-mode-block-control-face ((,class 
,@(modus-vivendi-theme-syntax-foreground
+                                             magenta-alt magenta-alt-faint)
+                                          
,@(modus-vivendi-theme-bold-weight))))
+   `(web-mode-block-delimiter-face ((,class :foreground ,fg-main)))
+   `(web-mode-block-face ((,class :background ,bg-dim)))
+   `(web-mode-block-string-face ((,class :inherit web-mode-string-face)))
+   `(web-mode-bold-face ((,class :inherit bold)))
+   `(web-mode-builtin-face ((,class ,@(modus-vivendi-theme-syntax-foreground
+                                       magenta-alt magenta-alt-faint)
+                                    ,@(modus-vivendi-theme-bold-weight))))
+   `(web-mode-comment-face ((,class :foreground ,fg-alt :slant 
,modus-theme-slant)))
+   `(web-mode-comment-keyword-face ((,class :inherit bold :background ,bg-dim
+                                            
,@(modus-vivendi-theme-syntax-foreground
+                                               yellow yellow-faint))))
+   `(web-mode-constant-face ((,class ,@(modus-vivendi-theme-syntax-foreground
+                                        blue-alt-other blue-alt-other-faint))))
+   `(web-mode-css-at-rule-face ((,class 
,@(modus-vivendi-theme-syntax-foreground
+                                           blue-alt-other 
blue-alt-other-faint))))
+   `(web-mode-css-color-face ((,class ,@(modus-vivendi-theme-syntax-foreground
+                                         magenta-alt magenta-alt-faint)
+                                      ,@(modus-vivendi-theme-bold-weight))))
+   `(web-mode-css-comment-face ((,class :inherit web-mode-comment-face)))
+   `(web-mode-css-function-face ((,class 
,@(modus-vivendi-theme-syntax-foreground
+                                            magenta-alt magenta-alt-faint)
+                                         ,@(modus-vivendi-theme-bold-weight))))
+   `(web-mode-css-priority-face ((,class 
,@(modus-vivendi-theme-syntax-foreground
+                                            yellow-alt yellow-alt-faint)
+                                         ,@(modus-vivendi-theme-bold-weight))))
+   `(web-mode-css-property-name-face ((,class 
,@(modus-vivendi-theme-syntax-foreground
+                                                 cyan cyan-faint))))
+   `(web-mode-css-pseudo-class-face ((,class 
,@(modus-vivendi-theme-syntax-foreground
+                                                cyan-alt-other 
cyan-alt-other-faint))))
+   `(web-mode-css-selector-face ((,class 
,@(modus-vivendi-theme-syntax-foreground
+                                            magenta-alt-other 
magenta-alt-other-faint)
+                                         ,@(modus-vivendi-theme-bold-weight))))
+   `(web-mode-css-string-face ((,class :inherit web-mode-string-face)))
+   `(web-mode-css-variable-face ((,class :foreground ,fg-special-warm)))
+   `(web-mode-current-column-highlight-face ((,class :background ,bg-alt)))
+   `(web-mode-current-element-highlight-face ((,class :inherit 
modus-theme-special-mild)))
+   `(web-mode-doctype-face ((,class :foreground ,fg-special-cold :slant 
,modus-theme-slant)))
+   `(web-mode-error-face ((,class :inherit modus-theme-intense-red)))
+   `(web-mode-filter-face ((,class ,@(modus-vivendi-theme-syntax-foreground
+                                      magenta magenta-faint))))
+   `(web-mode-folded-face ((,class :underline t)))
+   `(web-mode-function-call-face ((,class 
,@(modus-vivendi-theme-syntax-foreground
+                                             magenta magenta-faint))))
+   `(web-mode-function-name-face ((,class 
,@(modus-vivendi-theme-syntax-foreground
+                                             magenta magenta-faint))))
+   `(web-mode-html-attr-custom-face ((,class 
,@(modus-vivendi-theme-syntax-foreground
+                                                cyan cyan-faint))))
+   `(web-mode-html-attr-engine-face ((,class :foreground ,fg-main)))
+   `(web-mode-html-attr-equal-face ((,class :foreground ,fg-main)))
+   `(web-mode-html-attr-name-face ((,class 
,@(modus-vivendi-theme-syntax-foreground
+                                              cyan cyan-faint))))
+   `(web-mode-html-attr-value-face ((,class 
,@(modus-vivendi-theme-syntax-foreground
+                                               blue-alt-other 
blue-alt-other-faint))))
+   `(web-mode-html-entity-face ((,class 
,@(modus-vivendi-theme-syntax-foreground
+                                           yellow-alt-other 
yellow-alt-other-faint)
+                                        :slant ,modus-theme-slant)))
+   `(web-mode-html-tag-bracket-face ((,class :foreground ,fg-dim)))
+   `(web-mode-html-tag-custom-face ((,class 
,@(modus-vivendi-theme-syntax-foreground
+                                               magenta magenta-faint))))
+   `(web-mode-html-tag-face ((,class ,@(modus-vivendi-theme-syntax-foreground
+                                        magenta magenta-faint))))
+   `(web-mode-html-tag-namespaced-face ((,class 
,@(modus-vivendi-theme-syntax-foreground
+                                                   magenta-alt 
magenta-alt-faint)
+                                                
,@(modus-vivendi-theme-bold-weight))))
+   `(web-mode-html-tag-unclosed-face ((,class 
,@(modus-vivendi-theme-syntax-foreground
+                                                 red red-faint)
+                                              :underline t)))
+   `(web-mode-inlay-face ((,class :background ,bg-alt)))
+   `(web-mode-italic-face ((,class :slant italic)))
+   `(web-mode-javascript-comment-face ((,class :inherit 
web-mode-comment-face)))
+   `(web-mode-javascript-string-face ((,class :inherit web-mode-string-face)))
+   `(web-mode-json-comment-face ((,class :inherit web-mode-comment-face)))
+   `(web-mode-json-context-face ((,class 
,@(modus-vivendi-theme-syntax-foreground
+                                            magenta-alt magenta-alt-faint))))
+   `(web-mode-json-key-face ((,class :foreground ,blue-nuanced)))
+   `(web-mode-json-string-face ((,class :inherit web-mode-string-face)))
+   `(web-mode-jsx-depth-1-face ((,class :background ,blue-intense-bg 
:foreground ,fg-main)))
+   `(web-mode-jsx-depth-2-face ((,class :background ,blue-subtle-bg 
:foreground ,fg-main)))
+   `(web-mode-jsx-depth-3-face ((,class :background ,bg-special-cold 
:foreground ,fg-special-cold)))
+   `(web-mode-jsx-depth-4-face ((,class :background ,bg-alt :foreground 
,blue-refine-fg)))
+   `(web-mode-jsx-depth-5-face ((,class :background ,bg-alt :foreground 
,blue-nuanced)))
+   `(web-mode-keyword-face ((,class ,@(modus-vivendi-theme-syntax-foreground
+                                       magenta-alt-other 
magenta-alt-other-faint)
+                                    ,@(modus-vivendi-theme-bold-weight))))
+   `(web-mode-param-name-face ((,class ,@(modus-vivendi-theme-syntax-foreground
+                                          magenta magenta-faint))))
+   `(web-mode-part-comment-face ((,class :inherit web-mode-comment-face)))
+   `(web-mode-part-face ((,class :inherit web-mode-block-face)))
+   `(web-mode-part-string-face ((,class :inherit web-mode-string-face)))
+   `(web-mode-preprocessor-face ((,class 
,@(modus-vivendi-theme-syntax-foreground
+                                            red-alt-other 
red-alt-other-faint))))
+   `(web-mode-script-face ((,class :inherit web-mode-part-face)))
+   `(web-mode-sql-keyword-face ((,class :inherit bold
+                                        
,@(modus-vivendi-theme-syntax-foreground
+                                           yellow yellow-faint))))
+   `(web-mode-string-face ((,class ,@(modus-vivendi-theme-syntax-foreground
+                                      blue-alt blue-alt-faint))))
+   `(web-mode-style-face ((,class :inherit web-mode-part-face)))
+   `(web-mode-symbol-face ((,class ,@(modus-vivendi-theme-syntax-foreground
+                                      blue-alt-other blue-alt-other-faint))))
+   `(web-mode-type-face ((,class ,@(modus-vivendi-theme-syntax-foreground
+                                    magenta-alt magenta-alt-faint))))
+   `(web-mode-underline-face ((,class :underline t)))
+   `(web-mode-variable-name-face ((,class 
,@(modus-vivendi-theme-syntax-foreground
+                                             cyan cyan-faint))))
+   `(web-mode-warning-face ((,class :inherit bold :background ,bg-alt
+                                    ,@(modus-vivendi-theme-syntax-foreground
+                                       yellow-alt-other 
yellow-alt-other-faint))))
+   `(web-mode-whitespace-face ((,class :background ,bg-whitespace :foreground 
,fg-whitespace)))
+;;;;; wgrep
+   `(wgrep-delete-face ((,class :inherit modus-theme-refine-yellow)))
+   `(wgrep-done-face ((,class :inherit modus-theme-refine-blue)))
+   `(wgrep-face ((,class :inherit modus-theme-refine-green)))
+   `(wgrep-file-face ((,class :foreground ,fg-special-warm)))
+   `(wgrep-reject-face ((,class :inherit (modus-theme-intense-red bold))))
+;;;;; which-function-mode
+   `(which-func ((,class :foreground ,magenta-active)))
+;;;;; which-key
+   `(which-key-command-description-face ((,class :foreground ,cyan)))
+   `(which-key-group-description-face ((,class :foreground ,magenta-alt)))
+   `(which-key-highlighted-command-face ((,class :foreground ,cyan-alt 
:underline t)))
+   `(which-key-key-face ((,class :inherit bold :foreground ,blue-intense)))
+   `(which-key-local-map-description-face ((,class :foreground ,fg-main)))
+   `(which-key-note-face ((,class :background ,bg-dim :foreground 
,fg-special-mild)))
+   `(which-key-separator-face ((,class :foreground ,fg-alt)))
+   `(which-key-special-key-face ((,class :inherit bold :foreground 
,yellow-intense)))
+;;;;; whitespace-mode
+   `(whitespace-big-indent ((,class :inherit modus-theme-subtle-red)))
+   `(whitespace-empty ((,class :inherit modus-theme-intense-magenta)))
+   `(whitespace-hspace ((,class :background ,bg-whitespace :foreground 
,fg-whitespace)))
+   `(whitespace-indentation ((,class :background ,bg-whitespace :foreground 
,fg-whitespace)))
+   `(whitespace-line ((,class :inherit modus-theme-special-warm)))
+   `(whitespace-newline ((,class :background ,bg-whitespace :foreground 
,fg-whitespace)))
+   `(whitespace-space ((,class :background ,bg-whitespace :foreground 
,fg-whitespace)))
+   `(whitespace-space-after-tab ((,class :inherit modus-theme-subtle-magenta)))
+   `(whitespace-space-before-tab ((,class :inherit modus-theme-subtle-cyan)))
+   `(whitespace-tab ((,class :background ,bg-whitespace :foreground 
,fg-whitespace)))
+   `(whitespace-trailing ((,class :inherit modus-theme-intense-red)))
+;;;;; window-divider-mode
+   `(window-divider ((,class :foreground ,fg-window-divider-inner)))
+   `(window-divider-first-pixel ((,class :foreground 
,fg-window-divider-outer)))
+   `(window-divider-last-pixel ((,class :foreground ,fg-window-divider-outer)))
+;;;;; winum
+   `(winum-face ((,class ,@(modus-vivendi-theme-bold-weight) :foreground 
,cyan-active)))
+;;;;; writegood-mode
+   `(writegood-duplicates-face ((,class :background ,bg-alt :foreground 
,red-alt :underline t)))
+   `(writegood-passive-voice-face ((,class :foreground ,yellow-nuanced 
:underline ,fg-lang-warning)))
+   `(writegood-weasels-face ((,class :foreground ,red-nuanced :underline 
,fg-lang-error)))
+;;;;; woman
+   `(woman-addition ((,class :foreground ,magenta-alt-other)))
+   `(woman-bold ((,class :inherit bold :foreground ,magenta)))
+   `(woman-italic ((,class :foreground ,cyan :slant italic)))
+   `(woman-unknown ((,class :foreground ,yellow :slant italic)))
+;;;;; xah-elisp-mode
+   `(xah-elisp-at-symbol ((,class :inherit bold
+                                  ,@(modus-vivendi-theme-syntax-foreground
+                                     red-alt red-alt-faint))))
+   `(xah-elisp-cap-variable ((,class ,@(modus-vivendi-theme-syntax-foreground
+                                        red-alt-other red-alt-other-faint))))
+   `(xah-elisp-command-face ((,class ,@(modus-vivendi-theme-syntax-foreground
+                                        cyan-alt-other cyan-alt-other-faint))))
+   `(xah-elisp-dollar-symbol ((,class ,@(modus-vivendi-theme-syntax-foreground
+                                         green green-faint))))
+;;;;; xref
+   `(xref-file-header ((,class :inherit bold :foreground ,fg-special-cold)))
+   `(xref-line-number ((,class :foreground ,fg-alt)))
+   `(xref-match ((,class :inherit match)))
+;;;;; yaml-mode
+   `(yaml-tab-face ((,class :inherit modus-theme-intense-red)))
+;;;;; yasnippet
+   `(yas-field-highlight-face ((,class :background ,bg-alt :foreground 
,fg-main)))
+;;;;; ztree
+   `(ztreep-arrow-face ((,class :foreground ,fg-inactive)))
+   `(ztreep-diff-header-face ((,class :inherit bold :height 1.2 :foreground 
,fg-special-cold)))
+   `(ztreep-diff-header-small-face ((,class :inherit bold :foreground 
,fg-special-mild)))
+   `(ztreep-diff-model-add-face ((,class :foreground ,green)))
+   `(ztreep-diff-model-diff-face ((,class :foreground ,red)))
+   `(ztreep-diff-model-ignored-face ((,class :foreground ,fg-alt 
:strike-through t)))
+   `(ztreep-diff-model-normal-face ((,class :foreground ,fg-alt)))
+   `(ztreep-expand-sign-face ((,class :foreground ,blue)))
+   `(ztreep-header-face ((,class :inherit bold :height 1.2 :foreground 
,fg-special-cold)))
+   `(ztreep-leaf-face ((,class :foreground ,cyan)))
+   `(ztreep-node-count-children-face ((,class :foreground ,fg-special-warm)))
+   `(ztreep-node-face ((,class :foreground ,fg-main))))
+;;;; Emacs 27+
+  ;; EXPERIMENTAL this form is subject to review
+  (when (>= emacs-major-version 27)
+    (custom-theme-set-faces
+     'modus-vivendi
+;;;;; line numbers (`display-line-numbers-mode' and global variant)
+     ;; NOTE that this is specifically for the faces that were
+     ;; introduced in Emacs 27, as the other faces are already
+     ;; supported.
+     `(line-number-major-tick ((,class (:background ,yellow-nuanced-bg 
:foreground ,yellow-nuanced))))
+     `(line-number-minor-tick ((,class (:background ,cyan-nuanced-bg 
:foreground ,cyan-nuanced))))
+;;;;; tab-bar-mode
+     `(tab-bar ((,class :background ,bg-tab-bar :foreground ,fg-main)))
+     `(tab-bar-tab ((,class :inherit bold :box (:line-width 2 :color 
,bg-tab-active)
+                            :background ,bg-tab-active :foreground ,fg-main)))
+     `(tab-bar-tab-inactive ((,class :box (:line-width 2 :color 
,bg-tab-inactive)
+                                     :background ,bg-tab-inactive :foreground 
,fg-dim)))
+;;;;; tab-line-mode
+     `(tab-line ((,class :height 0.95 :background ,bg-tab-bar :foreground 
,fg-main)))
+     `(tab-line-close-highlight ((,class :foreground ,red)))
+     `(tab-line-highlight ((,class :background ,blue-subtle-bg :foreground 
,fg-dim)))
+     `(tab-line-tab ((,class :inherit bold :box (:line-width 2 :color 
,bg-tab-active)
+                             :background ,bg-tab-active :foreground ,fg-main)))
+     `(tab-line-tab-current ((,class :inherit tab-line-tab)))
+     `(tab-line-tab-inactive ((,class :box (:line-width 2 :color 
,bg-tab-inactive)
+                                      :background ,bg-tab-inactive :foreground 
,fg-dim)))))
+;;; variables
+  (custom-theme-set-variables
+   'modus-vivendi
+;;;; ansi-colors
+   `(ansi-color-faces-vector [default bold shadow italic underline success 
warning error])
+   `(ansi-color-names-vector [,bg-main ,red ,green ,yellow ,blue ,magenta 
,cyan ,fg-main])
+;;;; flymake fringe indicators
+   `(flymake-error-bitmap '(flymake-double-exclamation-mark 
modus-theme-fringe-red))
+   `(flymake-warning-bitmap '(exclamation-mark modus-theme-fringe-yellow))
+   `(flymake-note-bitmap '(exclamation-mark modus-theme-fringe-cyan))
+;;;; ibuffer
+   `(ibuffer-deletion-face 'modus-theme-mark-del)
+   `(ibuffer-filter-group-name-face 'modus-theme-mark-symbol)
+   `(ibuffer-marked-face 'modus-theme-mark-sel)
+   `(ibuffer-title-face 'modus-theme-header)
+;;;; highlight-tail
+   `(highlight-tail-colors
+     '((,green-subtle-bg . 0)
+       (,cyan-subtle-bg . 20)))
+;;;; hl-todo
+   `(hl-todo-keyword-faces
+     '(("HOLD" . ,yellow-alt)
+       ("TODO" . ,magenta)
+       ("NEXT" . ,magenta-alt-other)
+       ("THEM" . ,magenta-alt)
+       ("PROG" . ,cyan)
+       ("OKAY" . ,cyan-alt)
+       ("DONT" . ,green-alt)
+       ("FAIL" . ,red)
+       ("BUG" . ,red)
+       ("DONE" . ,green)
+       ("NOTE" . ,yellow-alt-other)
+       ("KLUDGE" . ,yellow)
+       ("HACK" . ,yellow)
+       ("TEMP" . ,red-nuanced)
+       ("FIXME" . ,red-alt-other)
+       ("XXX+" . ,red-alt)
+       ("REVIEW" . ,cyan-alt-other)
+       ("DEPRECATED" . ,blue-nuanced)))
+;;;; vc-annotate (C-x v g)
+   `(vc-annotate-background nil)
+   `(vc-annotate-background-mode nil)
+   `(vc-annotate-color-map
+     '((20 . ,red)
+       (40 . ,magenta)
+       (60 . ,magenta-alt)
+       (80 . ,red-alt)
+       (100 . ,yellow)
+       (120 . ,yellow-alt)
+       (140 . ,fg-special-warm)
+       (160 . ,fg-special-mild)
+       (180 . ,green)
+       (200 . ,green-alt)
+       (220 . ,cyan-alt-other)
+       (240 . ,cyan-alt)
+       (260 . ,cyan)
+       (280 . ,fg-special-cold)
+       (300 . ,blue)
+       (320 . ,blue-alt)
+       (340 . ,blue-alt-other)
+       (360 . ,magenta-alt-other)))
+   `(vc-annotate-very-old-color nil)
+;;;; xterm-color
+   `(xterm-color-names [,bg-main ,red ,green ,yellow ,blue ,magenta ,cyan 
,fg-alt])
+   `(xterm-color-names-bright [,bg-alt ,red-alt ,green-alt ,yellow-alt 
,blue-alt ,magenta-alt ,cyan-alt ,fg-main]))
+;;; Conditional theme variables
+;;;; org-src-block-faces
+  ;; this is a user option to add a colour-coded background to source
+  ;; blocks for various programming languages
+  (when (eq modus-vivendi-theme-org-blocks 'rainbow)
+    (custom-theme-set-variables
+     'modus-vivendi
+     `(org-src-block-faces              ; TODO this list should be expanded
+       `(("emacs-lisp" modus-theme-nuanced-magenta)
+         ("elisp" modus-theme-nuanced-magenta)
+         ("clojure" modus-theme-nuanced-magenta)
+         ("clojurescript" modus-theme-nuanced-magenta)
+         ("c" modus-theme-nuanced-blue)
+         ("c++" modus-theme-nuanced-blue)
+         ("sh" modus-theme-nuanced-green)
+         ("shell" modus-theme-nuanced-green)
+         ("html" modus-theme-nuanced-yellow)
+         ("xml" modus-theme-nuanced-yellow)
+         ("css" modus-theme-nuanced-red)
+         ("scss" modus-theme-nuanced-red)
+         ("python" modus-theme-nuanced-green)
+         ("ipython" modus-theme-nuanced-magenta)
+         ("r" modus-theme-nuanced-cyan)
+         ("yaml" modus-theme-nuanced-cyan)
+         ("conf" modus-theme-nuanced-cyan)
+         ("docker" modus-theme-nuanced-cyan)
+         ("json" modus-theme-nuanced-cyan))))))
+
+;;; library provides
+;;;###autoload
+(when load-file-name
+  (add-to-list 'custom-theme-load-path
+               (file-name-as-directory (file-name-directory load-file-name))))
+
+(provide-theme 'modus-vivendi)
+
+(provide 'modus-vivendi-theme)
+
+;;; modus-vivendi-theme.el ends here
diff --git a/etc/w32-feature.el b/etc/w32-feature.el
new file mode 100644
index 0000000..3c0f741
--- /dev/null
+++ b/etc/w32-feature.el
@@ -0,0 +1,87 @@
+;;; w32-feature.el --- Check Availability of Emacs Features  -*- 
lexical-binding: t -*-
+
+;; Copyright (C) 2020 Free Software Foundation, Inc.
+
+;; Author: Phillip Lord <phillip.lord@russet.org.uk>
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; This file provides tests for various features of Emacs. It is
+;; designed to check whether bundled binary distributions of Emacs on
+;; windows are fully functional.
+
+;;; Code:
+(require 'ert)
+
+(ert-deftest feature-optimization ()
+  (should
+   (string-match-p "CFLAGS=-O2" system-configuration-options)))
+
+(ert-deftest feature-harfbuzz ()
+  (should
+   (eq
+    'harfbuzz
+    (car (frame-parameter nil 'font-backend)))))
+
+(ert-deftest feature-gnutls ()
+  (should (gnutls-available-p)))
+
+(ert-deftest feature-zlib ()
+  (should (zlib-available-p)))
+
+(ert-deftest feature-thread ()
+  (should (fboundp 'make-thread)))
+
+(ert-deftest feature-json ()
+  (should
+   (fboundp 'json-serialize)))
+
+(ert-deftest feature-gmp ()
+  (should
+   (string-match-p "GMP" system-configuration-features)))
+
+(ert-deftest feature-module ()
+  (should (fboundp 'module-load)))
+
+(ert-deftest feature-libxml ()
+  (should (libxml-available-p)))
+
+(ert-deftest feature-lcms2 ()
+  (should (lcms2-available-p)))
+
+(ert-deftest feature-xpm ()
+  (should (image-type-available-p 'xpm)))
+
+(ert-deftest feature-gif ()
+  (should (image-type-available-p 'gif)))
+
+(ert-deftest feature-png ()
+  (should (image-type-available-p 'png)))
+
+(ert-deftest feature-xpm ()
+  (should (image-type-available-p 'xpm)))
+
+(ert-deftest feature-jpeg ()
+  (should (image-type-available-p 'jpeg)))
+
+(ert-deftest feature-tiff ()
+  (should (image-type-available-p 'tiff)))
+
+(ert-deftest feature-svg ()
+  (should (image-type-available-p 'svg)))
+;;; feature.el ends here
diff --git a/leim/SKK-DIC/SKK-JISYO.L b/leim/SKK-DIC/SKK-JISYO.L
index 6b024e3..9098868 100644
--- a/leim/SKK-DIC/SKK-JISYO.L
+++ b/leim/SKK-DIC/SKK-JISYO.L
@@ -22978,6 +22978,7 @@ covering /
 coverstory /���С����ȡ��꡼/
 coverup /���С����å�/
 coverversion /�����������/
+covid-19 /��������ʥ����륹������;Coronavirus disease 2019/
 cow /����/
 cowbell /�����٥�/
 cowboy /�����ܡ���/
@@ -38107,6 +38108,9 @@ sardine /
 sari /���꡼/����/
 sarin /�����/
 sarod /������/����å�/
+sars /severe acute respiratory syndrome/�žɵ����Ƶ۴�ɸ���/
+sars-cov /severe acute respiratory syndrome coronavirus/SARS����ʥ����륹
+sars-cov-2 /severe acute respiratory syndrome coronavirus 2/2019��������ʥ����륹
 sartre /����ȥ�/
 saruman /����ޥ�/
 sasa /����/
diff --git a/lib/cdefs.h b/lib/cdefs.h
index b1870fd..ff7c628 100644
--- a/lib/cdefs.h
+++ b/lib/cdefs.h
@@ -148,7 +148,11 @@
 # define __warnattr(msg) __attribute__((__warning__ (msg)))
 # define __errordecl(name, msg) \
   extern void name (void) __attribute__((__error__ (msg)))
-#elif __glibc_clang_has_attribute (__diagnose_if__) && 0 /* fails on Fedora 31 
with Clang 9.  */
+#elif __glibc_clang_has_attribute (__diagnose_if__) && 0
+/* These definitions are not enabled, because they produce bogus warnings
+   in the glibc Fortify functions.  These functions are written in a style
+   that works with GCC.  In order to work with clang, these functions would
+   need to be modified.  */
 # define __warndecl(name, msg) \
   extern void name (void) __attribute__((__diagnose_if__ (1, msg, "warning")))
 # define __warnattr(msg) __attribute__((__diagnose_if__ (1, msg, "warning")))
diff --git a/lib/diffseq.h b/lib/diffseq.h
index c89363a..26e10bd 100644
--- a/lib/diffseq.h
+++ b/lib/diffseq.h
@@ -51,10 +51,14 @@
      EXTRA_CONTEXT_FIELDS    Declarations of fields for 'struct context'.
      NOTE_DELETE(ctxt, xoff) Record the removal of the object xvec[xoff].
      NOTE_INSERT(ctxt, yoff) Record the insertion of the object yvec[yoff].
+     NOTE_ORDERED            (Optional) A boolean expression saying that
+                             NOTE_DELETE and NOTE_INSERT calls must be
+                             issued in offset order.
      EARLY_ABORT(ctxt)       (Optional) A boolean expression that triggers an
                              early abort of the computation.
      USE_HEURISTIC           (Optional) Define if you want to support the
                              heuristic for large vectors.
+
    It is also possible to use this file with abstract arrays.  In this case,
    xvec and yvec are not represented in memory.  They only exist conceptually.
    In this case, the list of defines above is amended as follows:
@@ -63,6 +67,7 @@
      XVECREF_YVECREF_EQUAL(ctxt, xoff, yoff)
                              A three-argument macro: References xvec[xoff] and
                              yvec[yoff] and tests these elements for equality.
+
    Before including this file, you also need to include:
      #include <limits.h>
      #include <stdbool.h>
@@ -78,6 +83,10 @@
 # define EARLY_ABORT(ctxt) false
 #endif
 
+#ifndef NOTE_ORDERED
+# define NOTE_ORDERED false
+#endif
+
 /* Use this to suppress gcc's "...may be used before initialized" warnings.
    Beware: The Code argument must not contain commas.  */
 #ifndef IF_LINT
@@ -88,15 +97,6 @@
 # endif
 #endif
 
-/* As above, but when Code must contain one comma. */
-#ifndef IF_LINT2
-# if defined GCC_LINT || defined lint
-#  define IF_LINT2(Code1, Code2) Code1, Code2
-# else
-#  define IF_LINT2(Code1, Code2) /* empty */
-# endif
-#endif
-
 /*
  * Context of comparison operation.
  */
@@ -468,49 +468,89 @@ compareseq (OFFSET xoff, OFFSET xlim, OFFSET yoff, OFFSET 
ylim,
   #define XREF_YREF_EQUAL(x,y)  XVECREF_YVECREF_EQUAL (ctxt, x, y)
 #endif
 
-  /* Slide down the bottom initial diagonal.  */
-  while (xoff < xlim && yoff < ylim && XREF_YREF_EQUAL (xoff, yoff))
+  while (true)
     {
-      xoff++;
-      yoff++;
-    }
+      /* Slide down the bottom initial diagonal.  */
+      while (xoff < xlim && yoff < ylim && XREF_YREF_EQUAL (xoff, yoff))
+        {
+          xoff++;
+          yoff++;
+        }
 
-  /* Slide up the top initial diagonal. */
-  while (xoff < xlim && yoff < ylim && XREF_YREF_EQUAL (xlim - 1, ylim - 1))
-    {
-      xlim--;
-      ylim--;
-    }
+      /* Slide up the top initial diagonal. */
+      while (xoff < xlim && yoff < ylim && XREF_YREF_EQUAL (xlim - 1, ylim - 
1))
+        {
+          xlim--;
+          ylim--;
+        }
 
-  /* Handle simple cases. */
-  if (xoff == xlim)
-    while (yoff < ylim)
-      {
-        NOTE_INSERT (ctxt, yoff);
-        if (EARLY_ABORT (ctxt))
-          return true;
-        yoff++;
-      }
-  else if (yoff == ylim)
-    while (xoff < xlim)
-      {
-        NOTE_DELETE (ctxt, xoff);
-        if (EARLY_ABORT (ctxt))
-          return true;
-        xoff++;
-      }
-  else
-    {
-      struct partition part IF_LINT2 (= { .xmid = 0, .ymid = 0 });
+      /* Handle simple cases. */
+      if (xoff == xlim)
+        {
+          while (yoff < ylim)
+            {
+              NOTE_INSERT (ctxt, yoff);
+              if (EARLY_ABORT (ctxt))
+                return true;
+              yoff++;
+            }
+          break;
+        }
+      if (yoff == ylim)
+        {
+          while (xoff < xlim)
+            {
+              NOTE_DELETE (ctxt, xoff);
+              if (EARLY_ABORT (ctxt))
+                return true;
+              xoff++;
+            }
+          break;
+        }
+
+      struct partition part;
 
       /* Find a point of correspondence in the middle of the vectors.  */
       diag (xoff, xlim, yoff, ylim, find_minimal, &part, ctxt);
 
       /* Use the partitions to split this problem into subproblems.  */
-      if (compareseq (xoff, part.xmid, yoff, part.ymid, part.lo_minimal, ctxt))
-        return true;
-      if (compareseq (part.xmid, xlim, part.ymid, ylim, part.hi_minimal, ctxt))
-        return true;
+      OFFSET xoff1, xlim1, yoff1, ylim1, xoff2, xlim2, yoff2, ylim2;
+      bool find_minimal1, find_minimal2;
+      if (!NOTE_ORDERED
+          && ((xlim + ylim) - (part.xmid + part.ymid)
+              < (part.xmid + part.ymid) - (xoff + yoff)))
+        {
+          /* The second problem is smaller and the caller doesn't
+             care about order, so do the second problem first to
+             lessen recursion.  */
+          xoff1 = part.xmid; xlim1 = xlim;
+          yoff1 = part.ymid; ylim1 = ylim;
+          find_minimal1 = part.hi_minimal;
+
+          xoff2 = xoff; xlim2 = part.xmid;
+          yoff2 = yoff; ylim2 = part.ymid;
+          find_minimal2 = part.lo_minimal;
+        }
+      else
+        {
+          xoff1 = xoff; xlim1 = part.xmid;
+          yoff1 = yoff; ylim1 = part.ymid;
+          find_minimal1 = part.lo_minimal;
+
+          xoff2 = part.xmid; xlim2 = xlim;
+          yoff2 = part.ymid; ylim2 = ylim;
+          find_minimal2 = part.hi_minimal;
+        }
+
+      /* Recurse to do one subproblem.  */
+      bool early = compareseq (xoff1, xlim1, yoff1, ylim1, find_minimal1, 
ctxt);
+      if (early)
+        return early;
+
+      /* Iterate to do the other subproblem.  */
+      xoff = xoff2; xlim = xlim2;
+      yoff = yoff2; ylim = ylim2;
+      find_minimal = find_minimal2;
     }
 
   return false;
diff --git a/lib/gnulib.mk.in b/lib/gnulib.mk.in
index 78b4542..f564d50 100644
--- a/lib/gnulib.mk.in
+++ b/lib/gnulib.mk.in
@@ -136,6 +136,7 @@
 #  readlinkat \
 #  regex \
 #  sig2str \
+#  sigdescr_np \
 #  socklen \
 #  stat-time \
 #  std-gnu11 \
@@ -426,6 +427,7 @@ GNULIB_SETENV = @GNULIB_SETENV@
 GNULIB_SETHOSTNAME = @GNULIB_SETHOSTNAME@
 GNULIB_SIGABBREV_NP = @GNULIB_SIGABBREV_NP@
 GNULIB_SIGACTION = @GNULIB_SIGACTION@
+GNULIB_SIGDESCR_NP = @GNULIB_SIGDESCR_NP@
 GNULIB_SIGNAL_H_SIGPIPE = @GNULIB_SIGNAL_H_SIGPIPE@
 GNULIB_SIGPROCMASK = @GNULIB_SIGPROCMASK@
 GNULIB_SLEEP = @GNULIB_SLEEP@
@@ -647,6 +649,7 @@ HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@
 HAVE_SETSTATE = @HAVE_SETSTATE@
 HAVE_SIGABBREV_NP = @HAVE_SIGABBREV_NP@
 HAVE_SIGACTION = @HAVE_SIGACTION@
+HAVE_SIGDESCR_NP = @HAVE_SIGDESCR_NP@
 HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@
 HAVE_SIGINFO_T = @HAVE_SIGINFO_T@
 HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@
@@ -2312,6 +2315,17 @@ EXTRA_libgnu_a_SOURCES += sig2str.c
 endif
 ## end   gnulib module sig2str
 
+## begin gnulib module sigdescr_np
+ifeq (,$(OMIT_GNULIB_MODULE_sigdescr_np))
+
+
+EXTRA_DIST += sigdescr_np.c
+
+EXTRA_libgnu_a_SOURCES += sigdescr_np.c
+
+endif
+## end   gnulib module sigdescr_np
+
 ## begin gnulib module signal-h
 ifeq (,$(OMIT_GNULIB_MODULE_signal-h))
 
@@ -2846,6 +2860,7 @@ string.h: string.in.h $(top_builddir)/config.status 
$(CXXDEFS_H) $(ARG_NONNULL_H
              -e 's/@''GNULIB_STRERROR''@/$(GNULIB_STRERROR)/g' \
              -e 's/@''GNULIB_STRERROR_R''@/$(GNULIB_STRERROR_R)/g' \
              -e 's/@''GNULIB_SIGABBREV_NP''@/$(GNULIB_SIGABBREV_NP)/g' \
+             -e 's/@''GNULIB_SIGDESCR_NP''@/$(GNULIB_SIGDESCR_NP)/g' \
              -e 's/@''GNULIB_STRSIGNAL''@/$(GNULIB_STRSIGNAL)/g' \
              -e 's/@''GNULIB_STRVERSCMP''@/$(GNULIB_STRVERSCMP)/g' \
              < $(srcdir)/string.in.h | \
@@ -2869,6 +2884,7 @@ string.h: string.in.h $(top_builddir)/config.status 
$(CXXDEFS_H) $(ARG_NONNULL_H
              -e 's|@''HAVE_DECL_STRTOK_R''@|$(HAVE_DECL_STRTOK_R)|g' \
              -e 's|@''HAVE_DECL_STRERROR_R''@|$(HAVE_DECL_STRERROR_R)|g' \
              -e 's|@''HAVE_SIGABBREV_NP''@|$(HAVE_SIGABBREV_NP)|g' \
+             -e 's|@''HAVE_SIGDESCR_NP''@|$(HAVE_SIGDESCR_NP)|g' \
              -e 's|@''HAVE_DECL_STRSIGNAL''@|$(HAVE_DECL_STRSIGNAL)|g' \
              -e 's|@''HAVE_STRVERSCMP''@|$(HAVE_STRVERSCMP)|g' \
              -e 's|@''REPLACE_MEMCHR''@|$(REPLACE_MEMCHR)|g' \
diff --git a/lib/intprops.h b/lib/intprops.h
index f2f70b3..b27f2ee 100644
--- a/lib/intprops.h
+++ b/lib/intprops.h
@@ -48,7 +48,7 @@
 /* Minimum and maximum values for integer types and expressions.  */
 
 /* The width in bits of the integer type or expression T.
-   Do not evaluate T.
+   Do not evaluate T.  T must not be a bit-field expression.
    Padding bits are not supported; this is checked at compile-time below.  */
 #define TYPE_WIDTH(t) (sizeof (t) * CHAR_BIT)
 
@@ -70,7 +70,7 @@
    ? _GL_SIGNED_INT_MAXIMUM (e)                                         \
    : _GL_INT_NEGATE_CONVERT (e, 1))
 #define _GL_SIGNED_INT_MAXIMUM(e)                                       \
-  (((_GL_INT_CONVERT (e, 1) << (TYPE_WIDTH ((e) + 0) - 2)) - 1) * 2 + 1)
+  (((_GL_INT_CONVERT (e, 1) << (TYPE_WIDTH (+ (e)) - 2)) - 1) * 2 + 1)
 
 /* Work around OpenVMS incompatibility with C99.  */
 #if !defined LLONG_MAX && defined __INT64_MAX
@@ -95,8 +95,9 @@
 #endif
 
 /* Return 1 if the integer type or expression T might be signed.  Return 0
-   if it is definitely unsigned.  This macro does not evaluate its argument,
-   and expands to an integer constant expression.  */
+   if it is definitely unsigned.  T must not be a bit-field expression.
+   This macro does not evaluate its argument, and expands to an
+   integer constant expression.  */
 #if _GL_HAVE___TYPEOF__
 # define _GL_SIGNED_TYPE_OR_EXPR(t) TYPE_SIGNED (__typeof__ (t))
 #else
@@ -109,6 +110,8 @@
 #define INT_BITS_STRLEN_BOUND(b) (((b) * 146 + 484) / 485)
 
 /* Bound on length of the string representing an integer type or expression T.
+   T must not be a bit-field expression.
+
    Subtract 1 for the sign bit if T is signed, and then add 1 more for
    a minus sign if needed.
 
@@ -120,7 +123,7 @@
    + _GL_SIGNED_TYPE_OR_EXPR (t))
 
 /* Bound on buffer size needed to represent an integer type or expression T,
-   including the terminating null.  */
+   including the terminating null.  T must not be a bit-field expression.  */
 #define INT_BUFSIZE_BOUND(t) (INT_STRLEN_BOUND (t) + 1)
 
 
@@ -566,7 +569,7 @@
       ? (EXPR_SIGNED (_GL_INT_CONVERT (tmax, b)) \
          ? (a) < (tmax) / (b) \
          : ((INT_NEGATE_OVERFLOW (b) \
-             ? _GL_INT_CONVERT (b, tmax) >> (TYPE_WIDTH (b) - 1) \
+             ? _GL_INT_CONVERT (b, tmax) >> (TYPE_WIDTH (+ (b)) - 1) \
              : (tmax) / -(b)) \
             <= -1 - (a))) \
       : INT_NEGATE_OVERFLOW (_GL_INT_CONVERT (b, tmin)) && (b) == -1 \
diff --git a/lib/sig2str.c b/lib/sig2str.c
index 905daea..cf7c3bb 100644
--- a/lib/sig2str.c
+++ b/lib/sig2str.c
@@ -189,6 +189,11 @@ static struct numname { int num; char const name[8]; } 
numname_table[] =
     NUMNAME (STKFLT),
 #endif
 
+    /* AIX 7.  */
+#ifdef SIGCPUFAIL
+    NUMNAME (CPUFAIL),
+#endif
+
     /* AIX 5L.  */
 #ifdef SIGDANGER
     NUMNAME (DANGER),
@@ -229,7 +234,12 @@ static struct numname { int num; char const name[8]; } 
numname_table[] =
     NUMNAME (WINDOW),   /* Older name for SIGWINCH.  */
 #endif
 
-    /* BeOS */
+    /* OpenBSD.  */
+#ifdef SIGTHR
+    NUMNAME (THR),
+#endif
+
+    /* BeOS, Haiku */
 #ifdef SIGKILLTHR
     NUMNAME (KILLTHR),
 #endif
@@ -239,6 +249,11 @@ static struct numname { int num; char const name[8]; } 
numname_table[] =
     NUMNAME (DIL),
 #endif
 
+    /* native Windows */
+#ifdef SIGBREAK
+    NUMNAME (BREAK),
+#endif
+
     /* Korn shell and Bash, of uncertain vintage.  */
     { 0, "EXIT" }
   };
diff --git a/lib/sigdescr_np.c b/lib/sigdescr_np.c
new file mode 100644
index 0000000..fc9cd3c
--- /dev/null
+++ b/lib/sigdescr_np.c
@@ -0,0 +1,376 @@
+/* English descriptions of signals.
+   Copyright (C) 2020 Free Software Foundation, Inc.
+
+   This program is free software: you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
+
+/* Written by Bruno Haible <bruno@clisp.org>, 2020.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include <string.h>
+
+#include <signal.h>
+
+const char *
+sigdescr_np (int sig)
+{
+  /* Note: Some platforms (glibc, FreeBSD, NetBSD, OpenBSD, AIX, IRIX, Haiku,
+     Android) have an array 'sys_siglist'.  (On AIX, you need to declare it
+     yourself, and it has fewer than NSIG elements.)  Its contents varies
+     depending on the OS.
+     On other OSes, you can invoke strsignal (sig) in the C locale.
+     In the code below, we show the differences.
+     You can see how cryptic some of these strings are.  We try to pick more
+     understandable wordings.  */
+
+  switch (sig)
+    {
+    /* Signals specified by ISO C.  */
+    case SIGABRT:
+      /* glibc: "Aborted".  *BSD: "Abort trap".  Solaris: "Abort".  */
+      return "Aborted";
+    case SIGFPE:
+      /* glibc, *BSD: "Floating point exception".  Solaris: "Arithmetic 
exception".
+         The latter is more correct, because of integer division by 0 or -1.  
*/
+      return "Arithmetic exception";
+    case SIGILL:
+      return "Illegal instruction";
+    case SIGINT:
+      return "Interrupt";
+    case SIGSEGV:
+      return "Segmentation fault";
+    case SIGTERM:
+      return "Terminated";
+
+    /* Signals specified by POSIX.
+       
<https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/signal.h.html>  */
+    #if defined SIGALRM
+    case SIGALRM:
+      return "Alarm clock";
+    #endif
+    #if defined SIGBUS
+    case SIGBUS:
+      return "Bus error";
+    #endif
+    #if defined SIGCHLD
+    case SIGCHLD:
+      /* glibc, *BSD: "Child exited".  Solaris: "Child status changed".  */
+      return "Child stopped or exited";
+    #endif
+    #if defined SIGCONT
+    case SIGCONT:
+      return "Continued";
+    #endif
+    #if defined SIGHUP
+    case SIGHUP:
+      return "Hangup";
+    #endif
+    #if defined SIGKILL
+    case SIGKILL:
+      return "Killed";
+    #endif
+    #if defined SIGPIPE
+    case SIGPIPE:
+      return "Broken pipe";
+    #endif
+    #if defined SIGQUIT
+    case SIGQUIT:
+      return "Quit";
+    #endif
+    #if defined SIGSTOP
+    case SIGSTOP:
+      /* glibc, Solaris: "Stopped (signal)".  *BSD: "Suspended (signal)".  */
+      return "Stopped (signal)";
+    #endif
+    #if defined SIGTSTP
+    case SIGTSTP:
+      /* glibc: "Stopped".  *BSD: "Suspended".  Solaris: "Stopped (user)".  */
+      return "Stopped";
+    #endif
+    #if defined SIGTTIN
+    case SIGTTIN:
+      return "Stopped (tty input)";
+    #endif
+    #if defined SIGTTOU
+    case SIGTTOU:
+      return "Stopped (tty output)";
+    #endif
+    #if defined SIGUSR1
+    case SIGUSR1:
+      /* glibc, *BSD: "User defined signal 1".  Solaris: "User signal 1".  */
+      return "User defined signal 1";
+    #endif
+    #if defined SIGUSR2
+    case SIGUSR2:
+      /* glibc, *BSD: "User defined signal 2".  Solaris: "User signal 2".  */
+      return "User defined signal 2";
+    #endif
+    #if defined SIGPOLL
+    case SIGPOLL:
+      /* glibc: "I/O possible".  Solaris: "Pollable event".  */
+      return "I/O possible";
+    #endif
+    #if defined SIGPROF
+    case SIGPROF:
+      return "Profiling timer expired";
+    #endif
+    #if defined SIGSYS
+    case SIGSYS:
+      return "Bad system call";
+    #endif
+    #if defined SIGTRAP
+    case SIGTRAP:
+      /* glibc, Solaris: "Trace/breakpoint trap".  *BSD: "Trace/BPT trap".  */
+      return "Trace/breakpoint trap";
+    #endif
+    #if defined SIGURG
+    case SIGURG:
+      /* glibc, *BSD: "Urgent I/O condition".  Solaris: "Urgent socket 
condition".  */
+      return "Urgent I/O condition";
+    #endif
+    #if defined SIGVTALRM
+    case SIGVTALRM:
+      return "Virtual timer expired";
+    #endif
+    #if defined SIGXCPU
+    case SIGXCPU:
+      /* glibc, *BSD: "CPU time limit exceeded".  Solaris: "Cpu limit 
exceeded".  */
+      return "CPU time limit exceeded";
+    #endif
+    #if defined SIGXFSZ
+    case SIGXFSZ:
+      return "File size limit exceeded";
+    #endif
+
+    /* Other signals on other systems.  */
+    /* native Windows */
+    #if defined SIGBREAK
+    case SIGBREAK:
+      return "Ctrl-Break";
+    #endif
+    /* IRIX */
+    #if defined SIGCKPT
+    case SIGCKPT:
+      return "Checkpoint"; /* See man 1 cpr, man 3C atcheckpoint */
+    #endif
+    /* Linux, IRIX, Cygwin */
+    #if defined SIGCLD && SIGCLD != SIGCHLD
+    case SIGCLD:
+      return "Child stopped or exited";
+    #endif
+    /* AIX */
+    #if defined SIGCPUFAIL
+    case SIGCPUFAIL:
+      /* AIX: "CPU failure predicted".  */
+      return "CPU going down"; /* See man bindprocessor */
+    #endif
+    /* AIX */
+    #if defined SIGDANGER
+    case SIGDANGER:
+      /* AIX: "Paging space low".  */
+      return "Swap space nearly exhausted";
+    #endif
+    /* Mac OS X, FreeBSD, NetBSD, OpenBSD, Minix, AIX, IRIX, Cygwin, mingw */
+    #if defined SIGEMT
+    case SIGEMT:
+      /* glibc/Hurd, *BSD: "EMT trap".  Solaris: "Emulation trap".  */
+      return "Instruction emulation needed";
+    #endif
+    /* Mac OS X, FreeBSD, NetBSD, OpenBSD, Minix */
+    #if defined SIGINFO
+    case SIGINFO:
+      return "Information request";
+    #endif
+    /* Linux, Mac OS X, FreeBSD, NetBSD, OpenBSD, Minix, AIX, IRIX, Cygwin */
+    #if defined SIGIO && SIGIO != SIGPOLL
+    case SIGIO:
+      return "I/O possible";
+    #endif
+    /* Linux, IRIX, Cygwin, mingw */
+    #if defined SIGIOT && SIGIOT != SIGABRT
+    case SIGIOT:
+      return "IOT instruction"; /* a PDP-11 instruction */
+    #endif
+    /* AIX */
+    #if defined SIGKAP
+    case SIGKAP:
+      /* Process must issue a KSKAPACK ioctl, or will be killed in 30 seconds. 
 */
+      /* AIX: "Monitor mode granted".  */
+      return "Keep Alive Poll";
+    #endif
+    /* Haiku */
+    #if defined SIGKILLTHR
+    case SIGKILLTHR:
+      return "Kill thread";
+    #endif
+    /* Minix */
+    #if defined SIGKMEM
+    case SIGKMEM:
+      return "Kernel memory request";
+    #endif
+    /* Minix */
+    #if defined SIGKMESS
+    case SIGKMESS:
+      return "Kernel message";
+    #endif
+    /* Minix */
+    #if defined SIGKSIG
+    case SIGKSIG:
+      return "Kernel signal";
+    #endif
+    /* Minix */
+    #if defined SIGKSIGSM
+    case SIGKSIGSM:
+      return "Kernel signal for signal manager";
+    #endif
+    /* FreeBSD */
+    #if defined SIGLIBRT
+    case SIGLIBRT:
+      return "Real-time library interrupt";
+    #endif
+    /* Cygwin */
+    #if defined SIGLOST && SIGLOST != SIGABRT && SIGLOST != SIGPWR
+    case SIGLOST:
+      /* Solaris: "Resource lost".  */
+      return "File lock lost";
+    #endif
+    /* AIX */
+    #if defined SIGMIGRATE
+    case SIGMIGRATE:
+      return "Process migration";
+    #endif
+    /* AIX */
+    #if defined SIGMSG
+    case SIGMSG:
+      /* AIX: "Input device data".  */
+      return "Message in the ring";
+    #endif
+    /* ACM */
+    #if defined SIGPLAN
+    case SIGPLAN:
+      return "Programming language anomaly";
+    #endif
+    /* AIX */
+    #if defined SIGPRE
+    case SIGPRE:
+      return "Programmed exception";
+    #endif
+    /* IRIX */
+    #if defined SIGPTINTR
+    case SIGPTINTR:
+      return "Pthread interrupt";
+    #endif
+    /* IRIX */
+    #if defined SIGPTRESCHED
+    case SIGPTRESCHED:
+      return "Pthread rescheduling";
+    #endif
+    /* Linux, NetBSD, Minix, AIX, IRIX, Cygwin */
+    #if defined SIGPWR
+    case SIGPWR:
+      /* glibc: "Power failure".  NetBSD: "Power fail/restart".  */
+      return "Power failure";
+    #endif
+    /* AIX */
+    #if defined SIGRECONFIG
+    case SIGRECONFIG:
+      return "Dynamic logical partitioning changed";
+    #endif
+    /* AIX */
+    #if defined SIGRECOVERY
+    case SIGRECOVERY:
+      return "Kernel recovery";
+    #endif
+    /* IRIX */
+    #if defined SIGRESTART
+    case SIGRESTART:
+      return "Checkpoint restart"; /* See man 1 cpr, man 3C atrestart */
+    #endif
+    /* AIX */
+    #if defined SIGRETRACT
+    case SIGRETRACT:
+      /* AIX: "Monitor mode retracted".  */
+      return "Retracting Keep Alive Poll";
+    #endif
+    /* AIX */
+    #if defined SIGSAK
+    case SIGSAK:
+      /* AIX: "Secure attention".  */
+      return "Secure Attention Key";
+    #endif
+    /* ACM */
+    #if defined SIGSAM
+    case SIGSAM:
+      return "Symbolic computation failed";
+    #endif
+    /* Minix */
+    #if defined SIGSNDELAY
+    case SIGSNDELAY:
+      return "Done sending message";
+    #endif
+    /* AIX */
+    #if defined SIGSOUND
+    case SIGSOUND:
+      /* AIX: "Sound completed".  */
+      return "Sound configuration changed";
+    #endif
+    /* Linux */
+    #if defined SIGSTKFLT
+    case SIGSTKFLT:
+      return "Stack fault";
+    #endif
+    /* AIX */
+    #if defined SIGSYSERROR
+    case SIGSYSERROR:
+      return "Kernel error";
+    #endif
+    /* AIX */
+    #if defined SIGTALRM
+    case SIGTALRM:
+      return "Thread alarm clock";
+    #endif
+    /* FreeBSD, OpenBSD */
+    #if defined SIGTHR
+    case SIGTHR:
+      /* OpenBSD: "Thread AST".  */
+      return "Thread library interrupt";
+    #endif
+    /* IRIX */
+    #if defined SIGUME
+    case SIGUME:
+      return "Uncorrectable memory error";
+    #endif
+    /* AIX */
+    #if defined SIGVIRT
+    case SIGVIRT:
+      return "Virtual time alarm clock";
+    #endif
+    /* AIX */
+    #if defined SIGWAITING
+    case SIGWAITING:
+      /* AIX: "No runnable lwp".  */
+      return "Thread waiting";
+    #endif
+    /* Linux, Mac OS X, FreeBSD, NetBSD, OpenBSD, Minix, AIX, IRIX, Cygwin, 
Haiku */
+    #if defined SIGWINCH
+    case SIGWINCH:
+      /* glibc: "Window changed".  *BSD: "Window size changed" or "Window size 
changes".  */
+      return "Window size changed";
+    #endif
+
+    default:
+      return NULL;
+    }
+}
diff --git a/lib/string.in.h b/lib/string.in.h
index 5134e11..776133c 100644
--- a/lib/string.in.h
+++ b/lib/string.in.h
@@ -1060,6 +1060,21 @@ _GL_WARN_ON_USE (sigabbrev_np, "sigabbrev_np is 
unportable - "
 # endif
 #endif
 
+/* Return an English description string for the signal number SIG.  */
+#if @GNULIB_SIGDESCR_NP@
+# if ! @HAVE_SIGDESCR_NP@
+_GL_FUNCDECL_SYS (sigdescr_np, const char *, (int sig));
+# endif
+_GL_CXXALIAS_SYS (sigdescr_np, const char *, (int sig));
+_GL_CXXALIASWARN (sigdescr_np);
+#elif defined GNULIB_POSIXCHECK
+# undef sigdescr_np
+# if HAVE_RAW_DECL_SIGDESCR_NP
+_GL_WARN_ON_USE (sigdescr_np, "sigdescr_np is unportable - "
+                 "use gnulib module sigdescr_np for portability");
+# endif
+#endif
+
 #if @GNULIB_STRSIGNAL@
 # if @REPLACE_STRSIGNAL@
 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
diff --git a/lib/verify.h b/lib/verify.h
index d485a02..ca2a154 100644
--- a/lib/verify.h
+++ b/lib/verify.h
@@ -246,6 +246,13 @@ template <int w>
 
 /* @assert.h omit start@  */
 
+#if defined __has_builtin
+/* <https://clang.llvm.org/docs/LanguageExtensions.html#builtin-functions> */
+# define _GL_HAS_BUILTIN_ASSUME __has_builtin (__builtin_assume)
+#else
+# define _GL_HAS_BUILTIN_ASSUME 0
+#endif
+
 #if 3 < __GNUC__ + (3 < __GNUC_MINOR__ + (4 <= __GNUC_PATCHLEVEL__))
 # define _GL_HAS_BUILTIN_TRAP 1
 #elif defined __has_builtin
@@ -305,14 +312,36 @@ template <int w>
 
    Although assuming R can help a compiler generate better code or
    diagnostics, performance can suffer if R uses hard-to-optimize
-   features such as function calls not inlined by the compiler.
-
-   Avoid Clang’s __builtin_assume, as clang 9.0.1 -Wassume can
-   generate a bogus diagnostic "the argument to '__builtin_assume' has
-   side effects that will be discarded" even when the argument has no
-   side effects.  */
-
-#if _GL_HAS_BUILTIN_UNREACHABLE
+   features such as function calls not inlined by the compiler.  */
+
+/* Use __builtin_assume in preference to __builtin_unreachable, because
+   in clang versions 8.0.x and older, the definition based on
+   __builtin_assume has an effect on optimizations, whereas the definition
+   based on __builtin_unreachable does not.  (GCC so far has only
+   __builtin_unreachable.)  */
+#if _GL_HAS_BUILTIN_ASSUME
+/* Use __builtin_constant_p to help clang's data-flow analysis for the case
+   assume (0).
+   Use a temporary variable, to avoid a clang warning
+   "the argument to '__builtin_assume' has side effects that will be discarded"
+   if R contains invocations of functions not marked as 'const'.
+   The type of the temporary variable can't be __typeof__ (R), because that
+   does not work on bit field expressions.  Use '_Bool' or 'bool' as type
+   instead.  */
+# if defined __cplusplus
+#  define assume(R) \
+     (__builtin_constant_p (R) && !(R) \
+      ? (void) __builtin_unreachable () \
+      : (void) ({ bool _gl_verify_temp = (R); \
+                  __builtin_assume (_gl_verify_temp); }))
+# else
+#  define assume(R) \
+     (__builtin_constant_p (R) && !(R) \
+      ? (void) __builtin_unreachable () \
+      : (void) ({ _Bool _gl_verify_temp = (R); \
+                  __builtin_assume (_gl_verify_temp); }))
+# endif
+#elif _GL_HAS_BUILTIN_UNREACHABLE
 # define assume(R) ((R) ? (void) 0 : __builtin_unreachable ())
 #elif 1200 <= _MSC_VER
 # define assume(R) __assume (R)
diff --git a/lisp/allout.el b/lisp/allout.el
index 05d9153..955b700 100644
--- a/lisp/allout.el
+++ b/lisp/allout.el
@@ -62,8 +62,7 @@
 ;; The outline menubar additions provide quick reference to many of the
 ;; features.  See the docstring of the variables `allout-layout' and
 ;; `allout-auto-activation' for details on automatic activation of
-;; `allout-mode' as a minor mode.  (`allout-init' is deprecated in favor of
-;; a purely customization-based method.)
+;; `allout-mode' as a minor mode.
 ;;
 ;; Note -- the lines beginning with `;;;_' are outline topic headers.
 ;;        Customize `allout-auto-activation' to enable, then revisit this
@@ -1627,18 +1626,6 @@ non-nil in a lasting way.")
   "If t, `allout-mode's last deactivation was deliberate.
 So `allout-post-command-business' should not reactivate it...")
 (make-variable-buffer-local 'allout-explicitly-deactivated)
-;;;_  > allout-init (mode)
-(defun allout-init (mode)
-  "DEPRECATED - configure allout activation by customizing
-`allout-auto-activation'.  This function remains around, limited
-from what it did before, for backwards compatibility.
-
-MODE is the activation mode - see `allout-auto-activation' for
-valid values."
-  (declare (obsolete allout-auto-activation "23.3"))
-  (customize-set-variable 'allout-auto-activation (format "%s" mode))
-  (format "%s" mode))
-
 ;;;_  > allout-setup-menubar ()
 (defun allout-setup-menubar ()
   "Populate the current buffer's menubar with `allout-mode' stuff."
diff --git a/lisp/auth-source.el b/lisp/auth-source.el
index 7a0e09b..50795ce 100644
--- a/lisp/auth-source.el
+++ b/lisp/auth-source.el
@@ -2073,7 +2073,9 @@ entries for git.gnus.org:
                                 (setcar
                                  (cdr secret)
                                  (let ((v (car (cdr secret))))
-                                   (lambda () v))))
+                                   (if (functionp v)
+                                       (lambda () (funcall v plist))
+                                   (lambda () v)))))
                             plist))
                         items))
          ;; ensure each item has each key in `returned-keys'
diff --git a/lisp/calendar/todo-mode.el b/lisp/calendar/todo-mode.el
index 4f513d3..0e4446f 100644
--- a/lisp/calendar/todo-mode.el
+++ b/lisp/calendar/todo-mode.el
@@ -6440,8 +6440,7 @@ Filtered Items mode following todo (not done) items."
     ("i"            todo-insert-item)
     ("k"            todo-delete-item)
     ("m"            todo-move-item)
-    ("u"            todo-item-undone)
-    ([remap newline] newline-and-indent))
+    ("u"            todo-item-undone))
   "List of key bindings for Todo mode only.")
 
 (defvar todo-key-bindings-t+a+f
@@ -6507,7 +6506,6 @@ Filtered Items mode following todo (not done) items."
 (defvar todo-edit-mode-map
   (let ((map (make-sparse-keymap)))
     (define-key map "\C-x\C-q" 'todo-edit-quit)
-    (define-key map [remap newline] 'newline-and-indent)
     map)
   "Todo Edit mode keymap.")
 
@@ -6666,7 +6664,6 @@ Added to `window-configuration-change-hook' in Todo mode."
   (setq-local font-lock-defaults '(todo-font-lock-keywords t))
   (setq-local revert-buffer-function #'todo-revert-buffer)
   (setq-local tab-width todo-indent-to-here)
-  (setq-local indent-line-function #'todo-indent)
   (when todo-wrap-lines
     (visual-line-mode)
     (setq wrap-prefix (make-string todo-indent-to-here 32))))
@@ -6741,6 +6738,7 @@ Added to `window-configuration-change-hook' in Todo mode."
 
 \\{todo-edit-mode-map}"
   (todo-modes-set-1)
+  (setq-local indent-line-function #'todo-indent)
   (if (> (buffer-size) (- (point-max) (point-min)))
       ;; Editing one item in an indirect buffer, so buffer-file-name is nil.
       (setq-local todo-current-todo-file todo-global-current-todo-file)
diff --git a/lisp/cedet/data-debug.el b/lisp/cedet/data-debug.el
index 604fc40..44cce38 100644
--- a/lisp/cedet/data-debug.el
+++ b/lisp/cedet/data-debug.el
@@ -38,7 +38,7 @@
 ;;   "Calculate something complicated at point, and return it."
 ;;   (interactive) ;; function not normally interactive
 ;;   (let ((stuff (do-stuff)))
-;;     (when (interactive-p)
+;;     (when (called-interactively-p 'interactive)
 ;;       (data-debug-show-stuff stuff "myStuff"))
 ;;     stuff))
 
diff --git a/lisp/comint.el b/lisp/comint.el
index 092902d..be0e32b 100644
--- a/lisp/comint.el
+++ b/lisp/comint.el
@@ -3450,7 +3450,7 @@ the completions."
                 (eq (window-buffer (posn-window (event-start first)))
                     (get-buffer "*Completions*"))
                 (memq (key-binding key)
-                       '(mouse-choose-completion choose-completion))))
+                       '(choose-completion))))
          ;; If the user does choose-completion with the mouse,
          ;; execute the command, then delete the completion window.
          (progn
diff --git a/lisp/custom.el b/lisp/custom.el
index db7f6a0..7581457 100644
--- a/lisp/custom.el
+++ b/lisp/custom.el
@@ -758,6 +758,9 @@ Return non-nil if the `customized-value' property actually 
changed."
        (progn (put symbol 'customized-value (list (custom-quote value)))
               (custom-push-theme 'theme-value symbol 'user 'set
                                  (custom-quote value)))
+      (custom-push-theme 'theme-value symbol 'user
+                         (if (get symbol 'saved-value) 'set 'reset)
+                         (custom-quote value))
       (put symbol 'customized-value nil))
     ;; Changed?
     (not (equal customized (get symbol 'customized-value)))))
diff --git a/lisp/dired-aux.el b/lisp/dired-aux.el
index c197ed0..ab13b3e 100644
--- a/lisp/dired-aux.el
+++ b/lisp/dired-aux.el
@@ -134,7 +134,20 @@ the string of command switches used as the third argument 
of `diff'."
                               (file-name-directory default)
                             (dired-current-directory))
                        (dired-dwim-target-directory)))
-         (defaults (dired-dwim-target-defaults (list current) target-dir)))
+         (defaults (append
+                     (if (backup-file-name-p current)
+                         ;; This is a backup file -- put the other
+                         ;; main file, and the other backup files into
+                         ;; the `M-n' list.
+                         (delete (expand-file-name current)
+                                 (cons (expand-file-name
+                                        (file-name-sans-versions current))
+                                       (file-backup-file-names
+                                        (file-name-sans-versions current))))
+                       ;; Non-backup file -- use the backup files as
+                       ;; `M-n' candidates.
+                       (file-backup-file-names current))
+                     (dired-dwim-target-defaults (list current) target-dir))))
      (list
       (minibuffer-with-setup-hook
          (lambda ()
diff --git a/lisp/dired.el b/lisp/dired.el
index 94d3bef..d122869 100644
--- a/lisp/dired.el
+++ b/lisp/dired.el
@@ -534,6 +534,14 @@ Subexpression 2 must end right before the \\n.")
 (defvar dired-symlink-face 'dired-symlink
   "Face name used for symbolic links.")
 
+(defface dired-broken-symlink
+  '((((class color))
+     :foreground "yellow1" :background "red1" :weight bold)
+    (t :weight bold :slant italic :underline t))
+  "Face used for broken symbolic links."
+  :group 'dired-faces
+  :version "28.1")
+
 (defface dired-special
   '((t (:inherit font-lock-variable-name-face)))
   "Face used for sockets, pipes, block devices and char devices."
@@ -597,6 +605,20 @@ Subexpression 2 must end right before the \\n.")
    (list dired-re-dir
         '(".+" (dired-move-to-filename) nil (0 dired-directory-face)))
    ;;
+   ;; Broken Symbolic link.
+   (list dired-re-sym
+         (list (lambda (end)
+                 (let* ((file (dired-file-name-at-point))
+                        (truename (ignore-errors (file-truename file))))
+                   ;; either not existent target or circular link
+                   (and (not (and truename (file-exists-p truename)))
+                        (search-forward-regexp "\\(.+\\) \\(->\\) ?\\(.+\\)" 
end t))))
+               '(dired-move-to-filename)
+               nil
+               '(1 'dired-broken-symlink)
+               '(2 dired-symlink-face)
+               '(3 'dired-broken-symlink)))
+   ;;
    ;; Symbolic link to a directory.
    (list dired-re-sym
          (list (lambda (end)
@@ -2244,8 +2266,15 @@ Do so according to the former subdir alist 
OLD-SUBDIR-ALIST."
       '(menu-item "Shell Command..." dired-do-shell-command
                  :help "Run a shell command on current or marked files"))
     (define-key map [menu-bar operate delete]
-      '(menu-item "Delete" dired-do-delete
-                 :help "Delete current file or all marked files"))
+      `(menu-item "Delete"
+                  ,(let ((menu (make-sparse-keymap "Delete")))
+                     (define-key menu [delete-flagged]
+                       '(menu-item "Delete Flagged Files" 
dired-do-flagged-delete
+                                   :help "Delete all files flagged for 
deletion (D)"))
+                     (define-key menu [delete-marked]
+                       '(menu-item "Delete Marked (Not Flagged) Files" 
dired-do-delete
+                                   :help "Delete current file or all marked 
files (excluding flagged files)"))
+                     menu)))
     (define-key map [menu-bar operate rename]
       '(menu-item "Rename to..." dired-do-rename
                  :help "Rename current file or move marked files"))
diff --git a/lisp/doc-view.el b/lisp/doc-view.el
index 77c06a8..60f6d63 100644
--- a/lisp/doc-view.el
+++ b/lisp/doc-view.el
@@ -1320,26 +1320,31 @@ dragging it to its bottom-right corner.  See also
 
 (defun doc-view-get-bounding-box ()
   "Get the BoundingBox information of the current page."
-  (let* ((page (doc-view-current-page))
-        (doc (let ((cache-doc (doc-view-current-cache-doc-pdf)))
-               (if (file-exists-p cache-doc)
-                   cache-doc
-                 doc-view--buffer-file-name)))
-        (o (shell-command-to-string
-            (concat doc-view-ghostscript-program
-                    " -dSAFER -dBATCH -dNOPAUSE -q -sDEVICE=bbox "
-                    (format "-dFirstPage=%s -dLastPage=%s %s"
-                            page page doc)))))
-    (save-match-data
-      (when (string-match (concat "%%BoundingBox: "
-                                 "\\([[:digit:]]+\\) \\([[:digit:]]+\\) "
-                                 "\\([[:digit:]]+\\) \\([[:digit:]]+\\)")
-                          o)
-       (mapcar #'string-to-number
-               (list (match-string 1 o)
-                     (match-string 2 o)
-                     (match-string 3 o)
-                     (match-string 4 o)))))))
+  (let ((page (doc-view-current-page))
+       (doc (let ((cache-doc (doc-view-current-cache-doc-pdf)))
+              (if (file-exists-p cache-doc)
+                  cache-doc
+                doc-view--buffer-file-name))))
+    (with-temp-buffer
+      (when (eq 0 (ignore-errors
+                   (process-file doc-view-ghostscript-program nil t
+                                 nil "-dSAFER" "-dBATCH" "-dNOPAUSE" "-q"
+                                 "-sDEVICE=bbox"
+                                 (format "-dFirstPage=%s" page)
+                                 (format "-dLastPage=%s" page)
+                                 doc)))
+       (goto-char (point-min))
+       (save-match-data
+         (when (re-search-forward
+                (concat "%%BoundingBox: "
+                        "\\([[:digit:]]+\\) \\([[:digit:]]+\\) "
+                        "\\([[:digit:]]+\\) \\([[:digit:]]+\\)")
+                 nil t)
+           (mapcar #'string-to-number
+                   (list (match-string 1)
+                         (match-string 2)
+                         (match-string 3)
+                         (match-string 4)))))))))
 
 (defvar doc-view-paper-sizes
   '((a4 595 842)
diff --git a/lisp/emacs-lisp/bytecomp.el b/lisp/emacs-lisp/bytecomp.el
index 507cfe7..4a2a8c6 100644
--- a/lisp/emacs-lisp/bytecomp.el
+++ b/lisp/emacs-lisp/bytecomp.el
@@ -4213,40 +4213,44 @@ Return (TAIL VAR TEST CASES), where:
         (switch-var nil)
         (switch-test 'eq))
     (while (pcase (car clauses)
-             (`((,fn ,expr1 ,expr2) . ,body)
+             (`((,(and fn (or 'eq 'eql 'equal)) ,expr1 ,expr2) . ,body)
               (let* ((vars (byte-compile--cond-vars expr1 expr2))
                      (var (car vars))
                      (value (cdr vars)))
                 (and var (or (eq var switch-var) (not switch-var))
-                     (cond
-                      ((memq fn '(eq eql equal))
+                     (progn
                        (setq switch-var var)
                        (setq switch-test
                              (byte-compile--common-test switch-test fn))
                        (unless (member value keys)
                          (push value keys)
                          (push (cons (list value) (or body '(t))) cases))
-                       t)
-                      ((and (memq fn '(memq memql member))
-                            (listp value)
-                            ;; Require a non-empty body, since the member
-                            ;; function value depends on the switch
-                            ;; argument.
-                            body)
-                       (setq switch-var var)
-                       (setq switch-test
-                             (byte-compile--common-test
-                              switch-test (cdr (assq fn '((memq   . eq)
-                                                          (memql  . eql)
-                                                          (member . equal))))))
-                       (let ((vals nil))
-                         (dolist (elem value)
-                           (unless (funcall fn elem keys)
-                             (push elem vals)))
-                         (when vals
-                           (setq keys (append vals keys))
-                           (push (cons (nreverse vals) body) cases)))
-                       t))))))
+                       t))))
+             (`((,(and fn (or 'memq 'memql 'member)) ,var ,expr) . ,body)
+              (and (symbolp var)
+                   (or (eq var switch-var) (not switch-var))
+                   (macroexp-const-p expr)
+                   ;; Require a non-empty body, since the member
+                   ;; function value depends on the switch argument.
+                   body
+                   (let ((value (eval expr)))
+                     (and (proper-list-p value)
+                          (progn
+                            (setq switch-var var)
+                            (setq switch-test
+                                  (byte-compile--common-test
+                                   switch-test
+                                   (cdr (assq fn '((memq   . eq)
+                                                   (memql  . eql)
+                                                   (member . equal))))))
+                            (let ((vals nil))
+                              (dolist (elem value)
+                                (unless (funcall fn elem keys)
+                                  (push elem vals)))
+                              (when vals
+                                (setq keys (append vals keys))
+                                (push (cons (nreverse vals) body) cases)))
+                            t))))))
       (setq clauses (cdr clauses)))
     ;; Assume that a single switch is cheaper than two or more discrete
     ;; compare clauses.  This could be tuned, possibly taking into
diff --git a/lisp/emacs-lisp/cl-lib.el b/lisp/emacs-lisp/cl-lib.el
index 7a26d9a..7a4d3c9 100644
--- a/lisp/emacs-lisp/cl-lib.el
+++ b/lisp/emacs-lisp/cl-lib.el
@@ -619,8 +619,11 @@ If ALIST is non-nil, the new pairs are prepended to it."
       (macroexp-let2* nil ((start from) (end to))
         (funcall do `(substring ,getter ,start ,end)
                  (lambda (v)
-                   (funcall setter `(cl--set-substring
-                                     ,getter ,start ,end ,v))))))))
+                   (macroexp-let2 nil v v
+                     `(progn
+                        ,(funcall setter `(cl--set-substring
+                                           ,getter ,start ,end ,v))
+                        ,v))))))))
 
 ;;; Miscellaneous.
 
diff --git a/lisp/emacs-lisp/edebug.el b/lisp/emacs-lisp/edebug.el
index d9bbf61..7ff6d68 100644
--- a/lisp/emacs-lisp/edebug.el
+++ b/lisp/emacs-lisp/edebug.el
@@ -1229,7 +1229,7 @@ purpose by adding an entry to this alist, and setting
   "Wrap the FORMS of a definition body."
   (if edebug-def-interactive
       `(let ((,(edebug-interactive-p-name)
-             (interactive-p)))
+             (called-interactively-p 'interactive)))
         ,(edebug-make-enter-wrapper forms))
     (edebug-make-enter-wrapper forms)))
 
diff --git a/lisp/emacs-lisp/eieio-base.el b/lisp/emacs-lisp/eieio-base.el
index 2cb1f61..39ad30a 100644
--- a/lisp/emacs-lisp/eieio-base.el
+++ b/lisp/emacs-lisp/eieio-base.el
@@ -252,119 +252,87 @@ being pedantic."
            (error
              "Invalid object: %s is not an object of class %s nor a subclass"
              (car ret) class))
-         (setq ret (eieio-persistent-convert-list-to-object ret))
+          (setq ret (eieio-persistent-make-instance (car ret) (cdr ret)))
          (oset ret file filename))
       (kill-buffer " *tmp eieio read*"))
     ret))
 
-(defun eieio-persistent-convert-list-to-object (inputlist)
-  "Convert the INPUTLIST, representing object creation to an object.
-While it is possible to just `eval' the INPUTLIST, this code instead
-validates the existing list, and explicitly creates objects instead of
-calling eval.  This avoids the possibility of accidentally running
-malicious code.
-
-Note: This function recurses when a slot of :type of some object is
-identified, and needing more object creation."
-  (let* ((objclass (nth 0 inputlist))
-         ;; Earlier versions of `object-write' added a string name for
-         ;; the object, now obsolete.
-         (slots (nthcdr
-                 (if (stringp (nth 1 inputlist)) 2 1)
-                 inputlist))
-        (createslots nil)
-        (class
-         (progn
-           ;; If OBJCLASS is an eieio autoload object, then we need to
-           ;; load it.
-           (eieio--full-class-object objclass))))
-
-    (while slots
-      (let ((initarg (car slots))
-           (value (car (cdr slots))))
-
-       ;; Make sure that the value proposed for SLOT is valid.
-       ;; In addition, strip out quotes, list functions, and update
-       ;; object constructors as needed.
-       (setq value (eieio-persistent-validate/fix-slot-value
-                    class (eieio--initarg-to-attribute class initarg) value))
-
-       (push initarg createslots)
-       (push value createslots)
-       )
-
-      (setq slots (cdr (cdr slots))))
-
-    (apply #'make-instance objclass (nreverse createslots))
-
-    ;;(eval inputlist)
-    ))
-
-(defun eieio-persistent-validate/fix-slot-value (class slot proposed-value)
-  "Validate that in CLASS, the SLOT with PROPOSED-VALUE is good, then fix.
-A limited number of functions, such as quote, list, and valid object
-constructor functions are considered valid.
-Second, any text properties will be stripped from strings."
+(cl-defgeneric eieio-persistent-make-instance (objclass inputlist)
+  "Convert INPUTLIST, representing slot values, to an instance of OBJCLASS.
+Clean slot values, and possibly recursively create additional
+objects found there."
+  (:method
+   ((objclass (subclass eieio-default-superclass)) inputlist)
+
+   (let ((slots (if (stringp (car inputlist))
+                    ;; Earlier versions of `object-write' added a
+                    ;; string name for the object, now obsolete.
+                    (cdr inputlist)
+                  inputlist))
+         (createslots nil))
+     ;; If OBJCLASS is an eieio autoload object, then we need to
+     ;; load it (we don't need the return value).
+     (eieio--full-class-object objclass)
+     (while slots
+       (let ((initarg (car slots))
+            (value (car (cdr slots))))
+
+        ;; Strip out quotes, list functions, and update object
+        ;; constructors as needed.
+        (setq value (eieio-persistent-fix-value value))
+
+        (push initarg createslots)
+        (push value createslots))
+
+       (setq slots (cdr (cdr slots))))
+
+     (apply #'make-instance objclass (nreverse createslots)))))
+
+(defun eieio-persistent-fix-value (proposed-value)
+  "Fix PROPOSED-VALUE.
+Remove leading quotes from lists, and the symbol `list' from the
+head of lists.  Explicitly construct any objects found, and strip
+any text properties from string values.
+
+This function will descend into the contents of lists, hash
+tables, and vectors."
   (cond ((consp proposed-value)
         ;; Lists with something in them need special treatment.
-        (let* ((slot-idx (- (eieio--slot-name-index class slot)
-                             (eval-when-compile eieio--object-num-slots)))
-                (type (cl--slot-descriptor-type (aref (eieio--class-slots 
class)
-                                                      slot-idx)))
-                (classtype (eieio-persistent-slot-type-is-class-p type)))
-
-          (cond ((eq (car proposed-value) 'quote)
-                 (car (cdr proposed-value)))
-
-                ;; An empty list sometimes shows up as (list), which is dumb, 
but
-                ;; we need to support it for backward compat.
-                ((and (eq (car proposed-value) 'list)
-                      (= (length proposed-value) 1))
-                 nil)
-
-                ;; List of object constructors.
-                ((and (eq (car proposed-value) 'list)
-                      ;; 2nd item is a list.
-                      (consp (car (cdr proposed-value)))
-                      ;; 1st elt of 2nd item is a class name.
-                      (class-p (car (car (cdr proposed-value))))
-                      )
-
-                 ;; Check the value against the input class type.
-                 ;; If something goes wrong, issue a smart warning
-                 ;; about how a :type is needed for this to work.
-                 (unless (and
-                          ;; Do we have a type?
-                          (consp classtype) (class-p (car classtype)))
-                   (error "In save file, list of object constructors found, 
but no :type specified for slot %S of type %S"
-                          slot classtype))
-
-                 ;; We have a predicate, but it doesn't satisfy the predicate?
-                 (dolist (PV (cdr proposed-value))
-                   (unless (child-of-class-p (car PV) (car classtype))
-                     (error "Invalid object: slot member %s does not match 
class %s"
-                             (car PV) (car classtype))))
-
-                 ;; We have a list of objects here.  Lets load them
-                 ;; in.
-                 (let ((objlist nil))
-                   (dolist (subobj (cdr proposed-value))
-                     (push (eieio-persistent-convert-list-to-object subobj)
-                           objlist))
-                   ;; return the list of objects ... reversed.
-                   (nreverse objlist)))
-                ;; We have a slot with a single object that can be
-                ;; saved here.  Recurse and evaluate that
-                ;; sub-object.
-                ((and classtype
-                       (seq-some
-                        (lambda (elt)
-                          (child-of-class-p (car proposed-value) elt))
-                        (if (listp classtype) classtype (list classtype))))
-                 (eieio-persistent-convert-list-to-object
-                  proposed-value))
-                (t
-                 proposed-value))))
+        (cond ((eq (car proposed-value) 'quote)
+                (while (eq (car-safe proposed-value) 'quote)
+                 (setq proposed-value (car (cdr proposed-value))))
+                proposed-value)
+
+              ;; An empty list sometimes shows up as (list), which is dumb, but
+              ;; we need to support it for backward compar.
+              ((and (eq (car proposed-value) 'list)
+                    (= (length proposed-value) 1))
+               nil)
+
+              ;; List of object constructors.
+              ((and (eq (car proposed-value) 'list)
+                    ;; 2nd item is a list.
+                    (consp (car (cdr proposed-value)))
+                    ;; 1st elt of 2nd item is a class name.
+                    (class-p (car (car (cdr proposed-value)))))
+
+               ;; We have a list of objects here.  Lets load them
+               ;; in.
+               (let ((objlist nil))
+                 (dolist (subobj (cdr proposed-value))
+                   (push (eieio-persistent-make-instance
+                           (car subobj) (cdr subobj))
+                         objlist))
+                 ;; return the list of objects ... reversed.
+                 (nreverse objlist)))
+              ;; We have a slot with a single object that can be
+              ;; saved here.  Recurse and evaluate that
+              ;; sub-object.
+              ((class-p (car proposed-value))
+               (eieio-persistent-make-instance
+                (car proposed-value) (cdr proposed-value)))
+              (t
+               proposed-value)))
         ;; For hash-tables and vectors, the top-level `read' will not
         ;; "look inside" member values, so we need to do that
         ;; explicitly.  Because `eieio-override-prin1' is recursive in
@@ -375,10 +343,9 @@ Second, any text properties will be stripped from strings."
           (lambda (key value)
             (setf (gethash key proposed-value)
                   (if (class-p (car-safe value))
-                      (eieio-persistent-convert-list-to-object
-                       value)
-                    (eieio-persistent-validate/fix-slot-value
-                     class slot value))))
+                      (eieio-persistent-make-instance
+                       (car value) (cdr value))
+                    (eieio-persistent-fix-value value))))
           proposed-value)
          proposed-value)
 
@@ -387,72 +354,18 @@ Second, any text properties will be stripped from 
strings."
            (let ((val (aref proposed-value i)))
              (aset proposed-value i
                    (if (class-p (car-safe val))
-                       (eieio-persistent-convert-list-to-object
-                        val)
-                     (eieio-persistent-validate/fix-slot-value
-                      class slot val)))))
+                       (eieio-persistent-make-instance
+                        (car val) (cdr val))
+                     (eieio-persistent-fix-value val)))))
          proposed-value)
 
-        ((stringp proposed-value)
-         ;; Else, check for strings, remove properties.
-         (substring-no-properties proposed-value))
-
-        (t
-         ;; Else, just return whatever the constant was.
-         proposed-value))
-  )
-
-(defun eieio-persistent-slot-type-is-class-p (type)
-  "Return the class referred to in TYPE.
-If no class is referenced there, then return nil."
-  (cond ((class-p type)
-        ;; If the type is a class, then return it.
-        type)
-       ((and (eq 'list-of (car-safe type)) (class-p (cadr type)))
-        ;; If it is the type of a list of a class, then return that class and
-        ;; the type.
-        (cons (cadr type) type))
-
-        ((and (symbolp type) (get type 'cl-deftype-handler))
-         ;; Macro-expand the type according to cl-deftype definitions.
-         (eieio-persistent-slot-type-is-class-p
-          (funcall (get type 'cl-deftype-handler))))
-
-        ;; FIXME: foo-child should not be a valid type!
-       ((and (symbolp type) (string-match "-child\\'" (symbol-name type))
-             (class-p (intern-soft (substring (symbol-name type) 0
-                                              (match-beginning 0)))))
-         (unless eieio-backward-compatibility
-           (error "Use of bogus %S type instead of %S"
-                  type (intern-soft (substring (symbol-name type) 0
-                                              (match-beginning 0)))))
-        ;; If it is the predicate ending with -child, then return
-        ;; that class.  Unfortunately, in EIEIO, typep of just the
-        ;; class is the same as if we used -child, so no further work needed.
-        (intern-soft (substring (symbol-name type) 0
-                                (match-beginning 0))))
-        ;; FIXME: foo-list should not be a valid type!
-       ((and (symbolp type) (string-match "-list\\'" (symbol-name type))
-             (class-p (intern-soft (substring (symbol-name type) 0
-                                              (match-beginning 0)))))
-         (unless eieio-backward-compatibility
-           (error "Use of bogus %S type instead of (list-of %S)"
-                  type (intern-soft (substring (symbol-name type) 0
-                                              (match-beginning 0)))))
-        ;; If it is the predicate ending with -list, then return
-        ;; that class and the predicate to use.
-        (cons (intern-soft (substring (symbol-name type) 0
-                                      (match-beginning 0)))
-              type))
-
-       ((eq (car-safe type) 'or)
-        ;; If type is a list, and is an `or', return all valid class
-        ;; types within the `or' statement.
-        (seq-filter #'eieio-persistent-slot-type-is-class-p (cdr type)))
+       ((stringp proposed-value)
+        ;; Else, check for strings, remove properties.
+        (substring-no-properties proposed-value))
 
        (t
-        ;; No match, not a class.
-        nil)))
+        ;; Else, just return whatever the constant was.
+        proposed-value)))
 
 (cl-defmethod object-write ((this eieio-persistent) &optional comment)
   "Write persistent object THIS out to the current stream.
diff --git a/lisp/emacs-lisp/gv.el b/lisp/emacs-lisp/gv.el
index 513bd32..78d86b9 100644
--- a/lisp/emacs-lisp/gv.el
+++ b/lisp/emacs-lisp/gv.el
@@ -527,9 +527,12 @@ This macro only makes sense when used in a place."
          (gv-letplace (dgetter dsetter) d
            (funcall do
                     `(cons ,agetter ,dgetter)
-                    (lambda (v) `(progn
-                              ,(funcall asetter `(car ,v))
-                              ,(funcall dsetter `(cdr ,v)))))))))
+                    (lambda (v)
+                      (macroexp-let2 nil v v
+                        `(progn
+                           ,(funcall asetter `(car ,v))
+                           ,(funcall dsetter `(cdr ,v))
+                           ,v))))))))
 
 (put 'logand 'gv-expander
      (lambda (do place &rest masks)
@@ -539,9 +542,12 @@ This macro only makes sense when used in a place."
            (funcall
             do `(logand ,getter ,mask)
             (lambda (v)
-              (funcall setter
-                       `(logior (logand ,v ,mask)
-                                (logand ,getter (lognot ,mask))))))))))
+              (macroexp-let2 nil v v
+                `(progn
+                   ,(funcall setter
+                             `(logior (logand ,v ,mask)
+                                      (logand ,getter (lognot ,mask))))
+                   ,v))))))))
 
 ;;; References
 
diff --git a/lisp/emacs-lisp/lisp-mode.el b/lisp/emacs-lisp/lisp-mode.el
index 584ed8c..352210f 100644
--- a/lisp/emacs-lisp/lisp-mode.el
+++ b/lisp/emacs-lisp/lisp-mode.el
@@ -506,9 +506,7 @@ This will generate compile-time constants from BINDINGS."
           (1 font-lock-constant-face prepend))
          ;; Uninterned symbols, e.g., (defpackage #:my-package ...)
          ;; must come before keywords below to have effect
-         (,(concat "\\(#:\\)\\(" lisp-mode-symbol-regexp "\\)")
-           (1 font-lock-comment-delimiter-face)
-           (2 font-lock-doc-face))
+         (,(concat "#:" lisp-mode-symbol-regexp "") 0 font-lock-builtin-face)
          ;; Constant values.
          (,(concat "\\_<:" lisp-mode-symbol-regexp "\\_>")
           (0 font-lock-builtin-face))
diff --git a/lisp/emacs-lisp/nadvice.el b/lisp/emacs-lisp/nadvice.el
index 85a15c9..b779aa2 100644
--- a/lisp/emacs-lisp/nadvice.el
+++ b/lisp/emacs-lisp/nadvice.el
@@ -5,18 +5,20 @@
 ;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
 ;; Keywords: extensions, lisp, tools
 
-;; This program is free software; you can redistribute it and/or modify
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
 ;; the Free Software Foundation, either version 3 of the License, or
 ;; (at your option) any later version.
 
-;; This program is distributed in the hope that it will be useful,
+;; GNU Emacs is distributed in the hope that it will be useful,
 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with this program.  If not, see <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.
 
 ;;; Commentary:
 
diff --git a/lisp/emacs-lisp/seq.el b/lisp/emacs-lisp/seq.el
index 1cc68e1..d60f974 100644
--- a/lisp/emacs-lisp/seq.el
+++ b/lisp/emacs-lisp/seq.el
@@ -4,7 +4,7 @@
 
 ;; Author: Nicolas Petton <nicolas@petton.fr>
 ;; Keywords: sequences
-;; Version: 2.21
+;; Version: 2.22
 ;; Package: seq
 
 ;; Maintainer: emacs-devel@gnu.org
diff --git a/lisp/emacs-lisp/shadow.el b/lisp/emacs-lisp/shadow.el
index 4ff129e..dd614dd 100644
--- a/lisp/emacs-lisp/shadow.el
+++ b/lisp/emacs-lisp/shadow.el
@@ -55,9 +55,6 @@
   :prefix "load-path-shadows-"
   :group 'lisp)
 
-(define-obsolete-variable-alias 'shadows-compare-text-p
-  'load-path-shadows-compare-text "23.3")
-
 (defcustom load-path-shadows-compare-text nil
   "If non-nil, then shadowing files are reported only if their text differs.
 This is slower, but filters out some innocuous shadowing."
diff --git a/lisp/emacs-lisp/warnings.el b/lisp/emacs-lisp/warnings.el
index cd96061..b1fd6ed 100644
--- a/lisp/emacs-lisp/warnings.el
+++ b/lisp/emacs-lisp/warnings.el
@@ -1,4 +1,4 @@
-;;; warnings.el --- log and display warnings
+;;; warnings.el --- log and display warnings  -*- lexical-binding:t -*-
 
 ;; Copyright (C) 2002-2020 Free Software Foundation, Inc.
 
@@ -68,25 +68,25 @@ Each element looks like (ALIAS . LEVEL) and defines ALIAS as
 equivalent to LEVEL.  LEVEL must be defined in `warning-levels';
 it may not itself be an alias.")
 
-(defvaralias 'display-warning-minimum-level 'warning-minimum-level)
+(define-obsolete-variable-alias 'display-warning-minimum-level
+  'warning-minimum-level "28.1")
 (defcustom warning-minimum-level :warning
   "Minimum severity level for displaying the warning buffer.
 If a warning's severity level is lower than this,
 the warning is logged in the warnings buffer, but the buffer
 is not immediately displayed.  See also `warning-minimum-log-level'."
-  :group 'warnings
   :type '(choice (const :emergency) (const :error)
                  (const :warning) (const :debug))
   :version "22.1")
 
-(defvaralias 'log-warning-minimum-level 'warning-minimum-log-level)
+(define-obsolete-variable-alias 'log-warning-minimum-level
+  'warning-minimum-log-level "28.1")
 (defcustom warning-minimum-log-level :warning
   "Minimum severity level for logging a warning.
 If a warning severity level is lower than this,
 the warning is completely ignored.
 Value must be lower or equal than `warning-minimum-level',
 because warnings not logged aren't displayed either."
-  :group 'warnings
   :type '(choice (const :emergency) (const :error)
                  (const :warning) (const :debug))
   :version "22.1")
@@ -100,7 +100,6 @@ Thus, (foo bar) as an element matches (foo bar)
 or (foo bar ANYTHING...) as TYPE.
 If TYPE is a symbol FOO, that is equivalent to the list (FOO),
 so only the element (FOO) will match it."
-  :group 'warnings
   :type '(repeat (repeat symbol))
   :version "22.1")
 
@@ -115,7 +114,6 @@ or (foo bar ANYTHING...) as TYPE.
 If TYPE is a symbol FOO, that is equivalent to the list (FOO),
 so only the element (FOO) will match it.
 See also `warning-suppress-log-types'."
-  :group 'warnings
   :type '(repeat (repeat symbol))
   :version "22.1")
 
diff --git a/lisp/epa-file.el b/lisp/epa-file.el
index 3b0cc84..bb027b9 100644
--- a/lisp/epa-file.el
+++ b/lisp/epa-file.el
@@ -175,9 +175,9 @@ encryption is used."
                   (setq-local epa-file-error error)
                   (add-hook 'find-file-not-found-functions
                             'epa-file--find-file-not-found-function
-                            nil t)
-                  (signal (if exists 'file-error 'file-missing)
-                          (cons "Opening input file" (cdr error))))))))
+                            nil t)))
+              (signal (if exists 'file-error 'file-missing)
+                      (cons "Opening input file" (cdr error))))))
           (set-buffer buf) ;In case timer/filter changed/killed it (bug#16029)!
          (setq-local epa-file-encrypt-to
                       (mapcar #'car (epg-context-result-for
diff --git a/lisp/epa.el b/lisp/epa.el
index 5140d3f..b065887 100644
--- a/lisp/epa.el
+++ b/lisp/epa.el
@@ -25,10 +25,7 @@
 
 (require 'epg)
 (require 'font-lock)
-(require 'widget)
-(eval-when-compile
-  (require 'subr-x)
-  (require 'wid-edit))
+(eval-when-compile (require 'subr-x))
 (require 'derived)
 
 ;;; Options
@@ -153,14 +150,6 @@ The command `epa-mail-encrypt' uses this."
 
 ;;; Variables
 
-(defvar epa-font-lock-keywords
-  '(("^\\*"
-     (0 'epa-mark))
-    ("^\t\\([^\t:]+:\\)[ \t]*\\(.*\\)$"
-     (1 'epa-field-name)
-     (2 'epa-field-body)))
-  "Default expressions to addon in epa-mode.")
-
 (defconst epa-pubkey-algorithm-letter-alist
   '((1 . ?R)
     (2 . ?r)
@@ -197,8 +186,9 @@ You should bind this variable with `let', but do not set it 
globally.")
 (defvar epa-key-list-mode-map
   (let ((keymap (make-sparse-keymap))
        (menu-map (make-sparse-keymap)))
-    (set-keymap-parent keymap widget-keymap)
     (define-key keymap "\C-m" 'epa-show-key)
+    (define-key keymap [?\t] 'forward-button)
+    (define-key keymap [backtab] 'backward-button)
     (define-key keymap "m" 'epa-mark-key)
     (define-key keymap "u" 'epa-unmark-key)
     (define-key keymap "d" 'epa-decrypt-file)
@@ -259,48 +249,35 @@ You should bind this variable with `let', but do not set 
it globally.")
 
 (defvar epa-exit-buffer-function #'quit-window)
 
-;;; Key Widget
-
-(define-widget 'epa-key 'push-button
-  "Button for representing an epg-key object."
-  :format "%[%v%]"
-  :button-face-get 'epa--key-widget-button-face-get
-  :value-create 'epa--key-widget-value-create
-  :action 'epa--key-widget-action
-  :help-echo 'epa--key-widget-help-echo)
-
-(defun epa--key-widget-action (widget &optional _event)
-  (save-selected-window
-    (epa--show-key (widget-get widget :value))))
-
-(defun epa--key-widget-value-create (widget)
-  (let* ((key (widget-get widget :value))
-        (primary-sub-key (car (epg-key-sub-key-list key)))
-        (primary-user-id (car (epg-key-user-id-list key))))
-    (insert (format "%c "
-                   (if (epg-sub-key-validity primary-sub-key)
-                       (car (rassq (epg-sub-key-validity primary-sub-key)
-                                   epg-key-validity-alist))
-                     ? ))
-           (epg-sub-key-id primary-sub-key)
-           " "
-           (if primary-user-id
-               (if (stringp (epg-user-id-string primary-user-id))
-                   (epg-user-id-string primary-user-id)
-                 (epg-decode-dn (epg-user-id-string primary-user-id)))
-             ""))))
-
-(defun epa--key-widget-button-face-get (widget)
-  (let ((validity (epg-sub-key-validity (car (epg-key-sub-key-list
-                                             (widget-get widget :value))))))
-    (if validity
-       (cdr (assq validity epa-validity-face-alist))
-      'default)))
-
-(defun epa--key-widget-help-echo (widget)
-  (format "Show %s"
-         (epg-sub-key-id (car (epg-key-sub-key-list
-                               (widget-get widget :value))))))
+(defun epa--button-key-text (key)
+  (let ((primary-sub-key (car (epg-key-sub-key-list key)))
+       (primary-user-id (car (epg-key-user-id-list key)))
+        (validity (epg-sub-key-validity (car (epg-key-sub-key-list key)))))
+    (propertize
+     (concat
+      (propertize
+       (format "%c "
+              (if (epg-sub-key-validity primary-sub-key)
+                  (car (rassq (epg-sub-key-validity primary-sub-key)
+                              epg-key-validity-alist))
+                ? ))
+       'help-echo (format "Validity: %s"
+                          (epg-sub-key-validity primary-sub-key)))
+      (propertize
+       (concat
+        (epg-sub-key-id primary-sub-key)
+        " "
+        (if primary-user-id
+           (if (stringp (epg-user-id-string primary-user-id))
+               (epg-user-id-string primary-user-id)
+             (epg-decode-dn (epg-user-id-string primary-user-id)))
+          ""))
+       'help-echo (format "Show %s"
+                         (epg-sub-key-id (car (epg-key-sub-key-list key))))))
+     'face
+     (if validity
+         (cdr (assq validity epa-validity-face-alist))
+       'default))))
 
 ;;; Modes
 
@@ -309,7 +286,6 @@ You should bind this variable with `let', but do not set it 
globally.")
   (buffer-disable-undo)
   (setq truncate-lines t
        buffer-read-only t)
-  (setq-local font-lock-defaults '(epa-font-lock-keywords t))
   (make-local-variable 'epa-exit-buffer-function)
   (setq-local revert-buffer-function #'epa--key-list-revert-buffer))
 
@@ -318,7 +294,6 @@ You should bind this variable with `let', but do not set it 
globally.")
   (buffer-disable-undo)
   (setq truncate-lines t
        buffer-read-only t)
-  (setq-local font-lock-defaults '(epa-font-lock-keywords t))
   (make-local-variable 'epa-exit-buffer-function))
 
 (define-derived-mode epa-info-mode special-mode "EPA Info"
@@ -362,28 +337,12 @@ If ARG is non-nil, mark the key."
 ;;;; Listing and Selecting
 
 (defun epa--insert-keys (keys)
-  (save-excursion
-    (save-restriction
-      (narrow-to-region (point) (point))
-      (let (point)
-       (while keys
-         (setq point (point))
-         (insert "  ")
-         (add-text-properties point (point)
-                              (list 'epa-key (car keys)
-                                    'front-sticky nil
-                                    'rear-nonsticky t
-                                    'start-open t
-                                    'end-open t))
-         (widget-create 'epa-key :value (car keys))
-         (insert "\n")
-         (setq keys (cdr keys))))
-      (add-text-properties (point-min) (point-max)
-                          (list 'epa-list-keys t
-                                'front-sticky nil
-                                'rear-nonsticky t
-                                'start-open t
-                                'end-open t)))))
+  (dolist (key keys)
+    (insert
+     (propertize
+      (concat "  " (epa--button-key-text key))
+      'epa-key key))
+    (insert "\n")))
 
 (defun epa--list-keys (name secret &optional doc)
   "NAME specifies which key to list.
@@ -420,8 +379,7 @@ DOC is documentation text to insert at the start."
                         (point-max)))
       (goto-char point))
 
-    (epa--insert-keys (epg-list-keys context name secret))
-    (widget-setup))
+    (epa--insert-keys (epg-list-keys context name secret)))
   (make-local-variable 'epa-list-keys-arguments)
   (setq epa-list-keys-arguments (list name secret))
   (goto-char (point-min))
@@ -488,20 +446,13 @@ q  trust status questionable.  -  trust status 
unspecified.
              (substitute-command-keys "\
 - `\\[epa-mark-key]' to mark a key on the line
 - `\\[epa-unmark-key]' to unmark a key on the line\n"))
-      (widget-create 'push-button
-                    :notify (lambda (&rest _ignore) (abort-recursive-edit))
-                    :help-echo
-                    "Click here or \\[abort-recursive-edit] to cancel"
-                    "Cancel")
-      (widget-create 'push-button
-                    :notify (lambda (&rest _ignore) (exit-recursive-edit))
-                    :help-echo
-                    "Click here or \\[exit-recursive-edit] to finish"
-                    "OK")
+      (insert-button "[Cancel]"
+                     'action (lambda (_button) (abort-recursive-edit)))
+      (insert " ")
+      (insert-button "[OK]"
+                     'action (lambda (_button) (exit-recursive-edit)))
       (insert "\n\n")
       (epa--insert-keys keys)
-      (widget-setup)
-      (set-keymap-parent (current-local-map) widget-keymap)
       (setq epa-exit-buffer-function #'abort-recursive-edit)
       (goto-char (point-min))
       (let ((display-buffer-mark-dedicated 'soft))
diff --git a/lisp/eshell/em-hist.el b/lisp/eshell/em-hist.el
index 2679365..5cee1ba 100644
--- a/lisp/eshell/em-hist.el
+++ b/lisp/eshell/em-hist.el
@@ -862,7 +862,7 @@ Moves relative to START, or `eshell-history-index'."
       (setq prev n
            n (mod (+ n motion) len))
       ;; If we haven't reached a match, step some more.
-      (while (and (< n len) (not tried-each-ring-item)
+      (while (and (not tried-each-ring-item)
                  (not (string-match regexp (eshell-get-history n))))
        (setq n (mod (+ n motion) len)
              ;; If we have gone all the way around in this search.
diff --git a/lisp/ffap.el b/lisp/ffap.el
index 28f566d..af7d84c 100644
--- a/lisp/ffap.el
+++ b/lisp/ffap.el
@@ -110,8 +110,6 @@
 (require 'url-parse)
 (require 'thingatpt)
 
-(define-obsolete-variable-alias 'ffap-version 'emacs-version "23.2")
-
 (defgroup ffap nil
   "Find file or URL at point."
   :group 'matching
diff --git a/lisp/filecache.el b/lisp/filecache.el
index 3c07a49..113d28c 100644
--- a/lisp/filecache.el
+++ b/lisp/filecache.el
@@ -614,9 +614,6 @@ the name is considered already unique; only the second 
substitution
     (select-window (active-minibuffer-window))
     (file-cache-minibuffer-complete nil)))
 
-(define-obsolete-function-alias 'file-cache-mouse-choose-completion
-  #'file-cache-choose-completion "23.2")
-
 (defun file-cache-complete  ()
   "Complete the word at point, using the filecache."
   (interactive)
diff --git a/lisp/fileloop.el b/lisp/fileloop.el
index d52e35d..458c25a 100644
--- a/lisp/fileloop.el
+++ b/lisp/fileloop.el
@@ -4,18 +4,20 @@
 
 ;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
 
-;; This program is free software; you can redistribute it and/or modify
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
 ;; the Free Software Foundation, either version 3 of the License, or
 ;; (at your option) any later version.
 
-;; This program is distributed in the hope that it will be useful,
+;; GNU Emacs is distributed in the hope that it will be useful,
 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with this program.  If not, see <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.
 
 ;;; Commentary:
 
diff --git a/lisp/files.el b/lisp/files.el
index 975f78e..ab93104 100644
--- a/lisp/files.el
+++ b/lisp/files.el
@@ -5569,10 +5569,28 @@ change the additional actions you can take on files."
                             t
                           (setq queried t)
                           (if (buffer-file-name buffer)
-                              (format "Save file %s? "
-                                      (buffer-file-name buffer))
-                            (format "Save buffer %s? "
-                                    (buffer-name buffer))))))
+                              (if (or
+                                   (equal (buffer-name buffer)
+                                          (file-name-nondirectory
+                                           (buffer-file-name buffer)))
+                                   (string-match
+                                    (concat "\\<"
+                                            (regexp-quote
+                                             (file-name-nondirectory
+                                              buffer-file-name))
+                                            "<[^>]*>\\'")
+                                    (buffer-name buffer)))
+                                  ;; The buffer name is similar to the
+                                  ;; file name.
+                                  (format "Save file %s? "
+                                          (buffer-file-name buffer))
+                                ;; The buffer and file names are
+                                ;; dissimilar; display both.
+                                (format "Save file %s (buffer %s)? "
+                                        (buffer-file-name buffer)
+                                        (buffer-name buffer)))
+                            ;; No file name
+                            (format "Save buffer %s? " (buffer-name 
buffer))))))
                  (lambda (buffer)
                    (with-current-buffer buffer
                      (save-buffer)))
@@ -5658,25 +5676,28 @@ like `write-region' does."
 
 (defun file-newest-backup (filename)
   "Return most recent backup file for FILENAME or nil if no backups exist."
+  (car (file-backup-file-names filename)))
+
+(defun file-backup-file-names (filename)
+  "Return a list of backup files for FILENAME.
+The list will be sorted by modification time so that the most
+recent files are first."
   ;; `make-backup-file-name' will get us the right directory for
   ;; ordinary or numeric backups.  It might create a directory for
   ;; backups as a side-effect, according to `backup-directory-alist'.
   (let* ((filename (file-name-sans-versions
                    (make-backup-file-name (expand-file-name filename))))
-        (file (file-name-nondirectory filename))
-        (dir  (file-name-directory    filename))
-        (comp (file-name-all-completions file dir))
-         (newest nil)
-         tem)
-    (while comp
-      (setq tem (pop comp))
-      (cond ((and (backup-file-name-p tem)
-                  (string= (file-name-sans-versions tem) file))
-             (setq tem (concat dir tem))
-             (if (or (null newest)
-                     (file-newer-than-file-p tem newest))
-                 (setq newest tem)))))
-    newest))
+         (dir (file-name-directory filename)))
+    (sort
+     (seq-filter
+      (lambda (candidate)
+        (and (backup-file-name-p candidate)
+             (string= (file-name-sans-versions candidate) filename)))
+      (mapcar
+       (lambda (file)
+         (concat dir file))
+       (file-name-all-completions (file-name-nondirectory filename) dir)))
+     #'file-newer-than-file-p)))
 
 (defun rename-uniquely ()
   "Rename current buffer to a similar name not already taken.
@@ -5897,9 +5918,9 @@ last-modified time as the old ones.  (This works on only 
some systems.)
 
 A prefix arg makes KEEP-TIME non-nil.
 
-Noninteractively, the last argument PARENTS says whether to
-create parent directories if they don't exist.  Interactively,
-this happens by default.
+Noninteractively, the PARENTS argument says whether to create
+parent directories if they don't exist.  Interactively, this
+happens by default.
 
 If NEWNAME is a directory name, copy DIRECTORY as a subdirectory
 there.  However, if called from Lisp with a non-nil optional
@@ -6465,7 +6486,7 @@ Also rename any existing auto save file, if it was made 
in this session."
 (defun make-auto-save-file-name ()
   "Return file name to use for auto-saves of current buffer.
 Does not consider `auto-save-visited-file-name' as that variable is checked
-before calling this function.  You can redefine this for customization.
+before calling this function.
 See also `auto-save-file-name-p'."
   (if buffer-file-name
       (let ((handler (find-file-name-handler buffer-file-name
@@ -6572,7 +6593,8 @@ See also `auto-save-file-name-p'."
 
 (defun auto-save-file-name-p (filename)
   "Return non-nil if FILENAME can be yielded by `make-auto-save-file-name'.
-FILENAME should lack slashes.  You can redefine this for customization."
+FILENAME should lack slashes.
+See also `make-auto-save-file-name'."
   (string-match "\\`#.*#\\'" filename))
 
 (defun wildcard-to-regexp (wildcard)
@@ -7051,6 +7073,8 @@ normally equivalent short `-D' option is just passed on to
                              ((stringp switches) (concat switches " -d"))
                              ((member "-d" switches) switches)
                              (t (append switches '("-d"))))))
+                   (if (string-match "\\`~" file)
+                       (setq file (expand-file-name file)))
                    (apply 'call-process
                           insert-directory-program nil t nil
                           (append
@@ -7061,14 +7085,7 @@ normally equivalent short `-D' option is just passed on 
to
                                (split-string-and-unquote switches)))
                            ;; Avoid lossage if FILE starts with `-'.
                            '("--")
-                           (progn
-                             (if (string-match "\\`~" file)
-                                 (setq file (expand-file-name file)))
-                             (list
-                              (if full-directory-p
-                                  ;; (concat (file-name-as-directory file) ".")
-                                   file
-                                file))))))))
+                           (list file))))))
 
          ;; If we got "//DIRED//" in the output, it means we got a real
          ;; directory listing, even if `ls' returned nonzero.
diff --git a/lisp/gnus/gnus-dbus.el b/lisp/gnus/gnus-dbus.el
new file mode 100644
index 0000000..8fbeffb
--- /dev/null
+++ b/lisp/gnus/gnus-dbus.el
@@ -0,0 +1,70 @@
+;;; gnus-dbus.el --- DBUS integration for Gnus       -*- lexical-binding: t; 
-*-
+
+;; Copyright (C) 2020  Free Software Foundation, Inc.
+
+;; Author: Eric Abrahamsen <eric@ericabrahamsen.net>
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; This library contains some Gnus integration for systems using DBUS.
+;; At present it registers a signal to close all Gnus servers before
+;; system sleep or hibernation.
+
+;;; Code:
+
+(require 'gnus)
+(require 'dbus)
+(declare-function gnus-close-all-servers "gnus-start")
+
+(defcustom gnus-dbus-close-on-sleep nil
+  "When non-nil, close Gnus servers on system sleep."
+  :group 'gnus-dbus
+  :type 'boolean)
+
+(defvar gnus-dbus-sleep-registration-object nil
+  "Object returned from `dbus-register-signal'.
+Used to unregister the signal.")
+
+(defun gnus-dbus-register-sleep-signal ()
+  "Use `dbus-register-signal' to close servers on sleep."
+  (when (featurep 'dbusbind)
+    (setq gnus-dbus-sleep-registration-object
+         (dbus-register-signal :system
+                               "org.freedesktop.login1"
+                               "/org/freedesktop/login1"
+                               "org.freedesktop.login1.Manager"
+                               "PrepareForSleep"
+                               #'gnus-dbus-sleep-handler))
+    (gnus-add-shutdown #'gnus-dbus-unregister-sleep-signal 'gnus)))
+
+(defun gnus-dbus-sleep-handler (sleep-start)
+  ;; Sleep-start is t before sleeping.
+  (when (and sleep-start
+            (gnus-alive-p))
+    (condition-case nil
+       (gnus-close-all-servers)
+      (error nil))))
+
+(defun gnus-dbus-unregister-sleep-signal ()
+  (condition-case nil
+      (dbus-unregister-object
+       gnus-dbus-sleep-registration-object)
+    (wrong-type-argument nil)))
+
+(provide 'gnus-dbus)
+;;; gnus-dbus.el ends here
diff --git a/lisp/gnus/gnus-group.el b/lisp/gnus/gnus-group.el
index 97e10a3..d613bc8 100644
--- a/lisp/gnus/gnus-group.el
+++ b/lisp/gnus/gnus-group.el
@@ -4300,8 +4300,7 @@ The hook `gnus-suspend-gnus-hook' is called before 
actually suspending."
     ;; Closing all the backends is useful (for instance) when when the
     ;; IP addresses have changed and you need to reconnect.
     (dolist (elem gnus-opened-servers)
-      (gnus-close-server (car elem))
-      (setcar (cdr elem) 'closed))
+      (gnus-close-server (car elem)))
     (when group-buf
       (bury-buffer group-buf)
       (delete-windows-on group-buf t))))
diff --git a/lisp/gnus/gnus-icalendar.el b/lisp/gnus/gnus-icalendar.el
index f13d4de..f624b9d 100644
--- a/lisp/gnus/gnus-icalendar.el
+++ b/lisp/gnus/gnus-icalendar.el
@@ -5,18 +5,20 @@
 ;; Author: Jan Tatarik <Jan.Tatarik@gmail.com>
 ;; Keywords: mail, icalendar, org
 
-;; This program is free software; you can redistribute it and/or modify
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
 ;; the Free Software Foundation, either version 3 of the License, or
 ;; (at your option) any later version.
 
-;; This program is distributed in the hope that it will be useful,
+;; GNU Emacs is distributed in the hope that it will be useful,
 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with this program.  If not, see <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.
 
 ;;; Commentary:
 
@@ -148,7 +150,7 @@
                        ("TH" . 4)
                        ("FR" . 5)
                        ("SA" . 6))))
-    (when (string-match "BYDAY=\\([^;]+\\)" rrule)
+    (when (and rrule (string-match "BYDAY=\\([^;]+\\)" rrule))
       (let ((bydays (split-string (match-string 1 rrule) ",")))
         (seq-map
          (lambda (x) (cdr (assoc x weekday-map)))
diff --git a/lisp/gnus/gnus-int.el b/lisp/gnus/gnus-int.el
index 60ebc07..da385a1 100644
--- a/lisp/gnus/gnus-int.el
+++ b/lisp/gnus/gnus-int.el
@@ -351,9 +351,12 @@ If it is down, start it up (again)."
   "Close the connection to GNUS-COMMAND-METHOD."
   (when (stringp gnus-command-method)
     (setq gnus-command-method (gnus-server-to-method gnus-command-method)))
-  (funcall (gnus-get-function gnus-command-method 'close-server)
-          (nth 1 gnus-command-method)
-          (nthcdr 2 gnus-command-method)))
+  (prog1
+      (funcall (gnus-get-function gnus-command-method 'close-server)
+              (nth 1 gnus-command-method)
+              (nthcdr 2 gnus-command-method))
+    (when-let ((elem (assoc gnus-command-method gnus-opened-servers)))
+      (setf (nth 1 elem) 'closed))))
 
 (defun gnus-request-list (gnus-command-method)
   "Request the active file from GNUS-COMMAND-METHOD."
diff --git a/lisp/gnus/gnus-msg.el b/lisp/gnus/gnus-msg.el
index cdfbf16..e770abc 100644
--- a/lisp/gnus/gnus-msg.el
+++ b/lisp/gnus/gnus-msg.el
@@ -1598,7 +1598,7 @@ this is a reply."
          (message-remove-header "gcc")
          (widen)
          (setq groups (message-unquote-tokens
-                       (message-tokenize-header gcc " ,")))
+                       (message-tokenize-header gcc " ,\n\t")))
          ;; Copy the article over to some group(s).
          (while (setq group (pop groups))
            (setq method (gnus-inews-group-method group)
diff --git a/lisp/gnus/gnus-start.el b/lisp/gnus/gnus-start.el
index ba8b91b..fe600f1 100644
--- a/lisp/gnus/gnus-start.el
+++ b/lisp/gnus/gnus-start.el
@@ -31,6 +31,7 @@
 (require 'gnus-range)
 (require 'gnus-util)
 (require 'gnus-cloud)
+(require 'gnus-dbus)
 (autoload 'message-make-date "message")
 (autoload 'gnus-agent-read-servers-validate "gnus-agent")
 (autoload 'gnus-agent-save-local "gnus-agent")
@@ -798,6 +799,8 @@ prompt the user for the name of an NNTP server to use."
          (gnus-run-hooks 'gnus-setup-news-hook)
          (when gnus-agent
            (gnus-request-create-group "queue" '(nndraft "")))
+         (when gnus-dbus-close-on-sleep
+           (gnus-dbus-register-sleep-signal))
          (gnus-start-draft-setup)
          ;; Generate the group buffer.
          (gnus-group-list-groups level)
diff --git a/lisp/gnus/gnus.el b/lisp/gnus/gnus.el
index b416094..ebf2d72 100644
--- a/lisp/gnus/gnus.el
+++ b/lisp/gnus/gnus.el
@@ -292,6 +292,10 @@ is restarted, and sometimes reloaded."
   :link '(custom-manual "(gnus)Exiting Gnus")
   :group 'gnus)
 
+(defgroup gnus-dbus nil
+  "D-Bus integration for Gnus."
+  :group 'gnus)
+
 (defconst gnus-version-number "5.13"
   "Version number for this version of Gnus.")
 
diff --git a/lisp/gnus/mml.el b/lisp/gnus/mml.el
index ef8aa6a..067396f 100644
--- a/lisp/gnus/mml.el
+++ b/lisp/gnus/mml.el
@@ -1360,7 +1360,7 @@ If not set, `default-directory' will be used."
          (value (pop plist)))
       (when value
        ;; Quote VALUE if it contains suspicious characters.
-       (when (string-match "[\"'\\~/*;() \t\n[:multibyte:]]" value)
+       (when (string-match "[][\"'\\~/*;()<>= \t\n[:multibyte:]]" value)
          (setq value (with-output-to-string
                        (let (print-escape-nonascii)
                          (prin1 value)))))
diff --git a/lisp/help-at-pt.el b/lisp/help-at-pt.el
index e184c78..1d9e051 100644
--- a/lisp/help-at-pt.el
+++ b/lisp/help-at-pt.el
@@ -92,13 +92,16 @@ the `kbd-help' property at point.  If `kbd-help' does not 
produce
 a string, but the `help-echo' property does, then that string is
 printed instead.
 
+The string is passed through `substitute-command-keys' before it
+is displayed.
+
 A numeric argument ARG prevents display of a message in case
 there is no help.  While ARG can be used interactively, it is
 mainly meant for use from Lisp."
   (interactive "P")
   (let ((help (help-at-pt-kbd-string)))
     (if help
-       (message "%s" help)
+       (message "%s" (substitute-command-keys help))
       (if (not arg) (message "No local help at point")))))
 
 (defvar help-at-pt-timer nil
diff --git a/lisp/help-fns.el b/lisp/help-fns.el
index 49cdb4e..a5241f2 100644
--- a/lisp/help-fns.el
+++ b/lisp/help-fns.el
@@ -152,7 +152,7 @@ When called from lisp, FUNCTION may also be a function 
object."
           (enable-recursive-minibuffers t)
           (val (completing-read
                 (if fn
-                    (format "Describe function (default %s): " fn)
+                    (format-prompt "Describe function" fn)
                   "Describe function: ")
                 #'help--symbol-completion-table
                 (lambda (f) (or (fboundp f) (get f 'function-documentation)))
diff --git a/lisp/help.el b/lisp/help.el
index b7d867e..1b01496 100644
--- a/lisp/help.el
+++ b/lisp/help.el
@@ -131,7 +131,6 @@ This is a list
  (WINDOW . quit-window)    do quit-window, then select WINDOW.
  (WINDOW BUF START POINT)  display BUF at START, POINT, then select WINDOW.")
 
-(define-obsolete-function-alias 'print-help-return-message 
'help-print-return-message "23.2")
 (defun help-print-return-message (&optional function)
   "Display or return message saying how to restore windows after help command.
 This function assumes that `standard-output' is the help buffer.
diff --git a/lisp/image-mode.el b/lisp/image-mode.el
index 4c719f7..032ebf3 100644
--- a/lisp/image-mode.el
+++ b/lisp/image-mode.el
@@ -718,7 +718,7 @@ A non-mage major mode found from `auto-mode-alist' or 
fundamental mode
 displays an image file as text."
   ;; image-mode-as-text = normal-mode + image-minor-mode
   (let ((previous-image-type image-type)) ; preserve `image-type'
-    (major-mode-restore '(image-mode image-mode-maybe image-mode-as-text))
+    (major-mode-restore '(image-mode image-mode-as-text))
     ;; Restore `image-type' after `kill-all-local-variables' in `normal-mode'.
     (setq image-type previous-image-type)
     ;; Enable image minor mode with `C-c C-c'.
@@ -768,8 +768,6 @@ on these modes."
                  (if (image-get-display-property)
                      "text" "an image or hex") ".")))
 
-(define-obsolete-function-alias 'image-mode-maybe 'image-mode "23.2")
-
 (defun image-toggle-display-text ()
   "Show the image file as text.
 Remove text properties that display the image."
diff --git a/lisp/imenu.el b/lisp/imenu.el
index 1949f2f..3a16dcb 100644
--- a/lisp/imenu.el
+++ b/lisp/imenu.el
@@ -316,28 +316,6 @@ PREVPOS is the variable in which we store the last 
position displayed."
 )
 
 
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;;;
-;;;; Some examples of functions utilizing the framework of this
-;;;; package.
-;;;;
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-;; FIXME: This was the only imenu-example-* definition actually used,
-;; by cperl-mode.el.  Now cperl-mode has its own copy, so these can
-;; all be removed.
-(defun imenu-example--name-and-position ()
-  "Return the current/previous sexp and its (beginning) location.
-Don't move point."
-  (declare (obsolete "use your own function instead." "23.2"))
-  (save-excursion
-    (forward-sexp -1)
-    ;; [ydi] modified for imenu-use-markers
-    (let ((beg (if imenu-use-markers (point-marker) (point)))
-         (end (progn (forward-sexp) (point))))
-      (cons (buffer-substring beg end)
-           beg))))
-
 ;;;
 ;;; Lisp
 ;;;
diff --git a/lisp/info.el b/lisp/info.el
index 78f8894..ab678c2 100644
--- a/lisp/info.el
+++ b/lisp/info.el
@@ -2308,7 +2308,11 @@ If SAME-FILE is non-nil, do not move to a different Info 
file."
                nil t))
          (progn (beginning-of-line) (if (looking-at "^\\* ") (forward-char 2)))
        (goto-char p)
-       (Info-restore-point Info-history)))))
+       (Info-restore-point Info-history))))
+  ;; If scroll-conservatively is non-zero and less than 101, display
+  ;; as much of the superior node above the target line as possible.
+  (when (< 0 scroll-conservatively 101)
+    (recenter)))
 
 (defun Info-history-back ()
   "Go back in the history to the last node visited."
@@ -2771,6 +2775,8 @@ Because of ambiguities, this should be concatenated with 
something like
               ;; Go back to the start node (for the next completion).
               (unless (equal Info-current-node orignode)
                 (Info-goto-node orignode))
+              ;; Arrange list to be in order found in node.
+              (setq completions (nreverse completions))
               ;; Update the cache.
               (setq Info-complete-cache
                   (list Info-current-file Info-current-node
diff --git a/lisp/international/mule-cmds.el b/lisp/international/mule-cmds.el
index 5fe931d..02dacaf 100644
--- a/lisp/international/mule-cmds.el
+++ b/lisp/international/mule-cmds.el
@@ -2070,12 +2070,6 @@ See `set-language-info-alist' for use in programs."
   "Do various unibyte-mode setups for language environment LANGUAGE-NAME."
   (set-display-table-and-terminal-coding-system language-name))
 
-(defun princ-list (&rest args)
-  "Print all arguments with `princ', then print \"\\n\"."
-  (declare (obsolete "use mapc and princ instead." "23.3"))
-  (mapc #'princ args)
-  (princ "\n"))
-
 (put 'describe-specified-language-support 'apropos-inhibit t)
 
 ;; Print language-specific information such as input methods,
diff --git a/lisp/jsonrpc.el b/lisp/jsonrpc.el
index ff8f250..2d50df7 100644
--- a/lisp/jsonrpc.el
+++ b/lisp/jsonrpc.el
@@ -329,7 +329,10 @@ ignored."
                            :method method
                            :params params))
 
-(defconst jrpc-default-request-timeout 10
+(define-obsolete-variable-alias 'jrpc-default-request-timeout
+  'jsonrpc-default-request-timeout "28.1")
+
+(defconst jsonrpc-default-request-timeout 10
   "Time in seconds before timing out a JSONRPC request.")
 
 
@@ -617,7 +620,7 @@ With optional CLEANUP, kill any associated buffers."
                                     params
                                     &rest args
                                     &key success-fn error-fn timeout-fn
-                                    (timeout jrpc-default-request-timeout)
+                                    (timeout jsonrpc-default-request-timeout)
                                     (deferred nil))
   "Does actual work for `jsonrpc-async-request'.
 
diff --git a/lisp/mail/rmail.el b/lisp/mail/rmail.el
index 312baff..f14025a 100644
--- a/lisp/mail/rmail.el
+++ b/lisp/mail/rmail.el
@@ -417,20 +417,6 @@ The variable `rmail-highlighted-headers' specifies which 
headers."
   :group 'rmail-headers
   :version "22.1")
 
-;; This was removed in Emacs 23.1 with no notification, an unnecessary
-;; incompatible change.
-(defcustom rmail-highlight-face 'rmail-highlight
-  "Face used by Rmail for highlighting headers."
-  ;; Note that nil doesn't actually mean use the default face, it
-  ;; means use either bold or highlight. It's not worth fixing this
-  ;; now that this is obsolete.
-  :type '(choice (const :tag "Default" nil)
-                face)
-  :group 'rmail-headers)
-(make-obsolete-variable 'rmail-highlight-face
-                       "customize the face `rmail-highlight' instead."
-                       "23.2")
-
 (defface rmail-header-name
   '((t (:inherit font-lock-function-name-face)))
   "Face to use for highlighting the header names.
@@ -3012,7 +2998,7 @@ using the coding system CODING."
 
 (defun rmail-highlight-headers ()
   "Highlight the headers specified by `rmail-highlighted-headers'.
-Uses the face specified by `rmail-highlight-face'."
+Uses the face `rmail-highlight'."
   (if rmail-highlighted-headers
       (save-excursion
        (search-forward "\n\n" nil 'move)
@@ -3020,11 +3006,7 @@ Uses the face specified by `rmail-highlight-face'."
          (narrow-to-region (point-min) (point))
          (let ((case-fold-search t)
                (inhibit-read-only t)
-               ;; When rmail-highlight-face is removed, just
-               ;; use 'rmail-highlight here.
-               (face (or rmail-highlight-face
-                         (if (face-differs-from-default-p 'bold)
-                             'bold 'highlight)))
+               (face 'rmail-highlight)
                ;; List of overlays to reuse.
                (overlays rmail-overlay-list))
            (goto-char (point-min))
diff --git a/lisp/mail/smtpmail.el b/lisp/mail/smtpmail.el
index 666395e..1786608 100644
--- a/lisp/mail/smtpmail.el
+++ b/lisp/mail/smtpmail.el
@@ -512,8 +512,9 @@ for `smtpmail-try-auth-method'.")
        (if port
            (format "%s" port)
          "smtp"))
-  (let* ((mechs (cdr-safe (assoc 'auth supported-extensions)))
-        (mech (car (smtpmail-intersection mechs smtpmail-auth-supported)))
+  (let* ((mechs (smtpmail-intersection
+                 (cdr-safe (assoc 'auth supported-extensions))
+                 smtpmail-auth-supported))
         (auth-source-creation-prompts
           '((user  . "SMTP user name for %h: ")
             (secret . "SMTP password for %u@%h: ")))
@@ -526,6 +527,7 @@ for `smtpmail-try-auth-method'.")
                      :require (and ask-for-password
                                    '(:user :secret))
                      :create ask-for-password)))
+         (mech (or (plist-get auth-info :smtp-auth) (car mechs)))
          (user (plist-get auth-info :user))
          (password (plist-get auth-info :secret))
         (save-function (and ask-for-password
diff --git a/lisp/minibuf-eldef.el b/lisp/minibuf-eldef.el
index 01672c0..a32d21a 100644
--- a/lisp/minibuf-eldef.el
+++ b/lisp/minibuf-eldef.el
@@ -36,10 +36,24 @@
 (defvar minibuffer-eldef-shorten-default)
 
 (defun minibuffer-default--in-prompt-regexps ()
-  `(("\\( (default\\(?: is\\)? \\(.*\\))\\):? \\'"
-     1 ,(if minibuffer-eldef-shorten-default " [\\2]"))
-    ("([^(]+?\\(, default\\(?: is\\)? \\(.*\\)\\)):? \\'" 1)
-    ("\\( \\[.*\\]\\):? *\\'" 1)))
+  (cons
+   (list
+    (concat
+     "\\("
+     (if (string-match "%s" minibuffer-default-prompt-format)
+         (concat
+          (regexp-quote (substring minibuffer-default-prompt-format
+                                   0 (match-beginning 0)))
+          ".*"
+          (regexp-quote (substring minibuffer-default-prompt-format
+                                   (match-end 0))))
+       (regexp-quote minibuffer-default-prompt-format))
+     ": *\\)")
+    1)
+   `(("\\( (default\\(?: is\\)? \\(.*\\))\\):? \\'"
+      1 ,(if minibuffer-eldef-shorten-default " [\\2]"))
+     ("([^(]+?\\(, default\\(?: is\\)? \\(.*\\)\\)):? \\'" 1)
+     ("\\( \\[.*\\]\\):? *\\'" 1))))
 
 (defcustom minibuffer-eldef-shorten-default nil
   "If non-nil, shorten \"(default ...)\" to \"[...]\" in minibuffer prompts."
diff --git a/lisp/minibuffer.el b/lisp/minibuffer.el
index 641a2e5..47f28d0 100644
--- a/lisp/minibuffer.el
+++ b/lisp/minibuffer.el
@@ -2539,11 +2539,6 @@ same as `substitute-in-file-name'."
               all))))))
     (file-error nil)))               ;PCM often calls with invalid directories.
 
-(defvar read-file-name-predicate nil
-  "Current predicate used by `read-file-name-internal'.")
-(make-obsolete-variable 'read-file-name-predicate
-                        "use the regular PRED argument" "23.2")
-
 (defun completion--sifn-requote (upos qstr)
   ;; We're looking for `qpos' such that:
   ;; (equal (substring (substitute-in-file-name qstr) 0 upos)
@@ -3033,6 +3028,19 @@ the commands start with a \"-\" or a SPC."
   :version "24.1"
   :type 'boolean)
 
+(defcustom minibuffer-default-prompt-format " (default %s)"
+  "Format string used to output \"default\" values.
+When prompting for input, there will often be a default value,
+leading to prompts like \"Number of articles (default 50): \".
+The \"default\" part of that prompt is controlled by this
+variable, and can be set to, for instance, \" [%s]\" if you want
+a shorter displayed prompt, or \"\", if you don't want to display
+the default at all.
+
+This variable is used by the `format-prompt' function."
+  :version "28.1"
+  :type 'string)
+
 (defun completion-pcm--pattern-trivial-p (pattern)
   (and (stringp (car pattern))
        ;; It can be followed by `point' and "" and still be trivial.
@@ -3850,6 +3858,19 @@ the minibuffer was activated, and execute the forms."
   (with-minibuffer-selected-window
     (scroll-other-window-down arg)))
 
+(defun format-prompt (prompt default &rest format-args)
+  "Format PROMPT with DEFAULT according to `minibuffer-default-prompt-format'.
+If FORMAT-ARGS is nil, PROMPT is used as a plain string.  If
+FORMAT-ARGS is non-nil, PROMPT is used as a format control
+string, and FORMAT-ARGS are the arguments to be substituted into
+it.  See `format' for details."
+  (concat
+   (if (null format-args)
+       prompt
+     (apply #'format prompt format-args))
+   (format minibuffer-default-prompt-format default)
+   ": "))
+
 (provide 'minibuffer)
 
 ;;; minibuffer.el ends here
diff --git a/lisp/mouse.el b/lisp/mouse.el
index a06ca2a..06fdca1 100644
--- a/lisp/mouse.el
+++ b/lisp/mouse.el
@@ -2303,9 +2303,6 @@ and selects that window."
     ;; Few buffers--put them all in one pane.
     (list (cons title alist))))
 
-(define-obsolete-function-alias
-  'mouse-choose-completion 'choose-completion "23.2")
-
 ;; Font selection.
 
 (defun font-menu-add-default ()
diff --git a/lisp/mwheel.el b/lisp/mwheel.el
index c385fdf..d5172ba 100644
--- a/lisp/mwheel.el
+++ b/lisp/mwheel.el
@@ -25,8 +25,8 @@
 ;; Under X11/X.Org, the wheel events are sent as button4/button5
 ;; events.
 
-;; It is already enabled by default on most graphical displays.  You
-;; can toggle it with M-x mouse-wheel-mode.
+;; Mouse wheel support is already enabled by default on most graphical
+;; displays.  You can toggle it using `M-x mouse-wheel-mode'.
 
 ;;; Code:
 
diff --git a/lisp/net/shr.el b/lisp/net/shr.el
index ddd8112..8fdc758 100644
--- a/lisp/net/shr.el
+++ b/lisp/net/shr.el
@@ -1209,25 +1209,8 @@ Return a string with image data."
             ;; that are non-ASCII.
            (shr-dom-to-xml
             (libxml-parse-xml-region (point) (point-max)) 'utf-8)))
-    ;; SVG images often do not have a specified foreground/background
-    ;; color, so wrap them in styles.
-    (when (and (display-images-p)
-               (eq content-type 'image/svg+xml))
-      (setq data (svg--wrap-svg data)))
     (list data content-type)))
 
-(defun svg--wrap-svg (data)
-  "Add a default foreground colour to SVG images."
-  (let ((size (image-size (create-image data nil t :scaling 1) t)))
-    (with-temp-buffer
-      (insert
-       (format
-        "<svg xmlns:xlink=\"http://www.w3.org/1999/xlink\"; 
xmlns:xi=\"http://www.w3.org/2001/XInclude\"; style=\"color: %s;\" viewBox=\"0 0 
%d %d\"> <xi:include href=\"data:image/svg+xml;base64,%s\"></xi:include></svg>"
-        (face-foreground 'default)
-        (car size) (cdr size)
-        (base64-encode-string data t)))
-      (buffer-string))))
-
 (defun shr-image-displayer (content-function)
   "Return a function to display an image.
 CONTENT-FUNCTION is a function to retrieve an image for a cid url that
@@ -1332,7 +1315,7 @@ ones, in case fg and bg are nil."
                                  t))
        (when bg
          (add-face-text-property start end
-                                 (list :background (car new-colors))
+                                 (list :background (car new-colors) :extend t)
                                  t)))
       new-colors)))
 
@@ -2267,7 +2250,7 @@ flags that control whether to collect or render objects."
                           (not background))
                  (setq background (cadr elem))))
              (and background
-                  (list :background background))))))
+                  (list :background background :extend t))))))
 
 (defun shr-expand-alignments (start end)
   (while (< (setq start (next-single-property-change
diff --git a/lisp/net/tramp-sh.el b/lisp/net/tramp-sh.el
index fae15fe..7a3f3fe 100644
--- a/lisp/net/tramp-sh.el
+++ b/lisp/net/tramp-sh.el
@@ -3025,6 +3025,10 @@ implementation will be used."
       (setq signals
            (append
             '(0) (split-string (shell-command-to-string "kill -l") nil 'omit)))
+      ;; Sanity check.  Sometimes, the first entry is "0", although we
+      ;; don't expect it.  Remove it.
+      (when (and (stringp (cadr signals)) (string-equal "0" (cadr signals)))
+       (setcdr signals (cddr signals)))
       ;; Sanity check.  "kill -l" shall have returned just the signal
       ;; names.  Some shells don't, like the one in "docker alpine".
       (let (signal-hook-function)
diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el
index 83ade66..28067fa 100644
--- a/lisp/net/tramp.el
+++ b/lisp/net/tramp.el
@@ -248,6 +248,10 @@ pair of the form (KEY VALUE).  The following KEYs are 
defined:
     parameters to suppress diagnostic messages, in order not to
     tamper the process output.
 
+  * `tramp-direct-async-args'
+    An additional argument when a direct asynchronous process is
+    started.  Used so far only in the \"mock\" method of tramp-tests.el.
+
   * `tramp-copy-program'
     This specifies the name of the program to use for remotely copying
     the file; this might be the absolute filename of scp or the name of
@@ -3733,26 +3737,29 @@ User is always nil."
 
 (defun tramp-direct-async-process-p (&rest args)
   "Whether direct async `make-process' can be called."
-  (let ((v (tramp-dissect-file-name default-directory)))
-    (and (tramp-get-connection-property v "direct-async-process" nil)
-        (= (length (tramp-compute-multi-hops v)) 1)
-        (not (plist-get args :stderr)))))
-
-;; We use BUFFER also as connection buffer during setup. Because of
-;; this, its original contents must be saved, and restored once
-;; connection has been setup.
+  (let ((v (tramp-dissect-file-name default-directory))
+       (buffer (plist-get args :buffer))
+       (stderr (plist-get args :stderr)))
+    (and ;; It has been indicated.
+         (tramp-get-connection-property v "direct-async-process" nil)
+        ;; There's no multi-hop.
+        (or (not (tramp-multi-hop-p v))
+            (= (length (tramp-compute-multi-hops v)) 1))
+        ;; There's no remote stdout or stderr file.
+        (or (not (stringp buffer)) (not (tramp-tramp-file-p buffer)))
+        (or (not (stringp stderr)) (not (tramp-tramp-file-p stderr))))))
+
 (defun tramp-handle-make-process (&rest args)
   "An alternative `make-process' implementation for Tramp files.
 It does not support `:stderr'."
   (when args
     (with-parsed-tramp-file-name (expand-file-name default-directory) nil
-      (let ((name (plist-get args :name))
+      (let ((default-directory (tramp-compat-temporary-file-directory))
+           (name (plist-get args :name))
            (buffer (plist-get args :buffer))
            (command (plist-get args :command))
-           ;; FIXME: `:coding' shall be used.
            (coding (plist-get args :coding))
            (noquery (plist-get args :noquery))
-           ;; FIXME: `:connection-type' shall be used.
            (connection-type (plist-get args :connection-type))
            (filter (plist-get args :filter))
            (sentinel (plist-get args :sentinel))
@@ -3775,122 +3782,77 @@ It does not support `:stderr'."
          (signal 'wrong-type-argument (list #'functionp filter)))
        (unless (or (null sentinel) (functionp sentinel))
          (signal 'wrong-type-argument (list #'functionp sentinel)))
-       (when stderr
-         (signal
-          'user-error
-          (list
-           "Stderr not supported for direct remote asynchronous processes"
-           stderr)))
+       (unless (or (null stderr) (bufferp stderr))
+         (signal 'wrong-type-argument (list #'stringp stderr)))
 
        (let* ((buffer
                (if buffer
                    (get-buffer-create buffer)
                  ;; BUFFER can be nil.  We use a temporary buffer.
                  (generate-new-buffer tramp-temp-buffer-name)))
-              (command (append `("cd" ,localname "&&")
-                               (mapcar #'tramp-shell-quote-argument command)))
-              (bmp (and (buffer-live-p buffer) (buffer-modified-p buffer)))
-              (name1 name)
-              (i 0)
-              ;; We do not want to raise an error when `make-process'
-              ;; has been started several times in `eshell' and
-              ;; friends.
-              tramp-current-connection
-              p)
-
-         (while (get-process name1)
-           ;; NAME must be unique as process name.
-           (setq i (1+ i)
-                 name1 (format "%s<%d>" name i)))
-         (setq name name1)
-         ;; Set the new process properties.
-         (tramp-set-connection-property v "process-name" name)
-         (tramp-set-connection-property v "process-buffer" buffer)
+              (command
+               (mapconcat
+                #'identity (append `("cd" ,localname "&&") command) " ")))
 
          ;; Check for `tramp-sh-file-name-handler', because something
          ;; is different between tramp-adb.el and tramp-sh.el.
-         (with-current-buffer (tramp-get-connection-buffer v)
-           (unwind-protect
-               (let* ((sh-file-name-handler-p (tramp-sh-file-name-handler-p v))
-                      (login-program
-                       (tramp-get-method-parameter v 'tramp-login-program))
-                      (login-args
-                       (tramp-get-method-parameter v 'tramp-login-args))
-                      (async-args
-                       (tramp-get-method-parameter v 'tramp-async-args))
-                      ;; We don't create the temporary file.  In
-                      ;; fact, it is just a prefix for the
-                      ;; ControlPath option of ssh; the real
-                      ;; temporary file has another name, and it is
-                      ;; created and protected by ssh.  It is also
-                      ;; removed by ssh when the connection is
-                      ;; closed.  The temporary file name is cached
-                      ;; in the main connection process, therefore
-                      ;; we cannot use `tramp-get-connection-process'.
-                      (tmpfile
-                       (when sh-file-name-handler-p
-                         (with-tramp-connection-property
-                             (tramp-get-process v) "temp-file"
-                           (tramp-compat-make-temp-name))))
-                      (options
-                       (when sh-file-name-handler-p
-                         (tramp-compat-funcall
-                          'tramp-ssh-controlmaster-options v)))
-                      spec)
-
-                 ;; Replace `login-args' place holders.
-                 (setq
-                  spec (format-spec-make ?t tmpfile)
-                  options (format-spec (or options "") spec)
-                  spec (format-spec-make
-                        ?h (or host "") ?u (or user "") ?p (or port "")
-                        ?c options ?l "")
-                  ;; Add arguments for asynchronous processes.
-                  login-args (append async-args login-args)
-                  ;; Expand format spec.
-                  login-args
-                  (tramp-compat-flatten-tree
-                   (mapcar
-                    (lambda (x)
-                      (setq x (mapcar (lambda (y) (format-spec y spec)) x))
-                      (unless (member "" x) x))
-                    login-args))
-                  ;; Split ControlMaster options.
-                  login-args
-                  (tramp-compat-flatten-tree
-                   (mapcar (lambda (x) (split-string x " ")) login-args))
-                  p (apply
-                     #'start-process
-                     name buffer login-program (append login-args command)))
-
-                 (tramp-message v 6 "%s" (string-join (process-command p) " "))
-                 ;; Set sentinel and filter.
-                 (when sentinel
-                   (set-process-sentinel p sentinel))
-                 (when filter
-                   (set-process-filter p filter))
-                 ;; Set query flag and process marker for this
-                 ;; process.  We ignore errors, because the
-                 ;; process could have finished already.
-                 (ignore-errors
-                   (set-process-query-on-exit-flag p (null noquery))
-                   (set-marker (process-mark p) (point)))
-                 ;; We must flush them here already; otherwise
-                 ;; `rename-file', `delete-file' or
-                 ;; `insert-file-contents' will fail.
-                 (tramp-flush-connection-property v "process-name")
-                 (tramp-flush-connection-property v "process-buffer")
-                 ;; Return process.
-                 p)
-
-             ;; Save exit.
-             (if (string-match-p tramp-temp-buffer-name (buffer-name))
-                 (ignore-errors
-                   (set-process-buffer p nil)
-                   (kill-buffer (current-buffer)))
-               (set-buffer-modified-p bmp))
-             (tramp-flush-connection-property v "process-name")
-             (tramp-flush-connection-property v "process-buffer"))))))))
+         (let* ((sh-file-name-handler-p (tramp-sh-file-name-handler-p v))
+                (login-program
+                 (tramp-get-method-parameter v 'tramp-login-program))
+                (login-args
+                 (tramp-get-method-parameter v 'tramp-login-args))
+                (async-args
+                 (tramp-get-method-parameter v 'tramp-async-args))
+                (direct-async-args
+                 (tramp-get-method-parameter v 'tramp-direct-async-args))
+                ;; We don't create the temporary file.  In fact, it
+                ;; is just a prefix for the ControlPath option of
+                ;; ssh; the real temporary file has another name, and
+                ;; it is created and protected by ssh.  It is also
+                ;; removed by ssh when the connection is closed.  The
+                ;; temporary file name is cached in the main
+                ;; connection process, therefore we cannot use
+                ;; `tramp-get-connection-process'.
+                (tmpfile
+                 (when sh-file-name-handler-p
+                   (with-tramp-connection-property
+                       (tramp-get-process v) "temp-file"
+                     (tramp-compat-make-temp-name))))
+                (options
+                 (when sh-file-name-handler-p
+                   (tramp-compat-funcall
+                    'tramp-ssh-controlmaster-options v)))
+                spec p)
+
+           ;; Replace `login-args' place holders.
+           (setq
+            spec (format-spec-make ?t tmpfile)
+            options (format-spec (or options "") spec)
+            spec (format-spec-make
+                  ?h (or host "") ?u (or user "") ?p (or port "")
+                  ?c options ?l "")
+            ;; Add arguments for asynchronous processes.
+            login-args (append async-args direct-async-args login-args)
+            ;; Expand format spec.
+            login-args
+            (tramp-compat-flatten-tree
+             (mapcar
+              (lambda (x)
+                (setq x (mapcar (lambda (y) (format-spec y spec)) x))
+                (unless (member "" x) x))
+              login-args))
+            ;; Split ControlMaster options.
+            login-args
+            (tramp-compat-flatten-tree
+             (mapcar (lambda (x) (split-string x " ")) login-args))
+            p (make-process
+               :name name :buffer buffer
+               :command (append `(,login-program) login-args `(,command))
+               :coding coding :noquery noquery :connection-type connection-type
+               :filter filter :sentinel sentinel :stderr stderr))
+
+           (tramp-message v 6 "%s" (string-join (process-command p) " "))
+           p))))))
 
 (defun tramp-handle-make-symbolic-link
   (target linkname &optional ok-if-already-exists)
diff --git a/lisp/progmodes/antlr-mode.el b/lisp/progmodes/antlr-mode.el
index bf56a7e..24e1f88 100644
--- a/lisp/progmodes/antlr-mode.el
+++ b/lisp/progmodes/antlr-mode.el
@@ -695,7 +695,7 @@ imenu."
     (define-key map "\e\C-e" 'antlr-end-of-rule)
     (define-key map "\C-c\C-a" 'antlr-beginning-of-body)
     (define-key map "\C-c\C-e" 'antlr-end-of-body)
-    (define-key map "\C-c\C-f" 'c-forward-into-nomenclature)
+    (define-key map "\C-c\C-f" 'subword-forward)
     (define-key map "\C-c\C-b" 'c-backward-into-nomenclature)
     (define-key map "\C-c\C-c" 'comment-region)
     (define-key map "\C-c\C-v" 'antlr-hide-actions)
@@ -745,7 +745,7 @@ imenu."
      ["Backward Statement" c-beginning-of-statement t]
      ["Forward Statement" c-end-of-statement t]
      ["Backward Into Nomencl." c-backward-into-nomenclature t]
-     ["Forward Into Nomencl." c-forward-into-nomenclature t])
+     ["Forward Into Nomencl." subword-forward t])
     ["Indent Region" indent-region
      :active (and (not buffer-read-only) (c-region-is-active-p))]
     ["Comment Out Region" comment-region
diff --git a/lisp/progmodes/cc-cmds.el b/lisp/progmodes/cc-cmds.el
index 1b557c4..4425e27 100644
--- a/lisp/progmodes/cc-cmds.el
+++ b/lisp/progmodes/cc-cmds.el
@@ -1554,19 +1554,6 @@ left out."
 (declare-function c-backward-subword "ext:cc-subword" (&optional arg))
 
 ;; "nomenclature" functions + c-scope-operator.
-(defun c-forward-into-nomenclature (&optional arg)
-  "Compatibility alias for `c-forward-subword'."
-  (interactive "p")
-  (if (fboundp 'subword-mode)
-      (progn
-        (require 'subword)
-        (subword-forward arg))
-    (require 'cc-subword)
-    (c-forward-subword arg)))
-(make-obsolete 'c-forward-into-nomenclature
-               (if (fboundp 'subword-mode) 'subword-forward 'c-forward-subword)
-               "23.2")
-
 (defun c-backward-into-nomenclature (&optional arg)
   "Compatibility alias for `c-backward-subword'."
   (interactive "p")
diff --git a/lisp/progmodes/compile.el b/lisp/progmodes/compile.el
index a043bbc..731db0f 100644
--- a/lisp/progmodes/compile.el
+++ b/lisp/progmodes/compile.el
@@ -221,9 +221,9 @@ of[ \t]+\"?\\([a-zA-Z]?:?[^\":\n]+\\)\"?:" 3 2 nil (1))
      ;; considered before EDG.
      ;; The message may be a "warning", "error", or "fatal error" with
      ;; an error code, or "see declaration of" without an error code.
-     "^ *\\([0-9]+>\\)?\\(\\(?:[a-zA-Z]:\\)?[^ 
:(\t\n][^:(\t\n]*\\)(\\([0-9]+\\)) ?\
+     "^ *\\([0-9]+>\\)?\\(\\(?:[a-zA-Z]:\\)?[^ 
:(\t\n][^:(\t\n]*\\)(\\([0-9]+\\)\\(?:,\\([0-9]+\\)\\)?) ?\
 : \\(?:see declaration\\|\\(?:warnin\\(g\\)\\|[a-z ]+\\) C[0-9]+:\\)"
-     2 3 nil (4))
+     2 3 4 (5))
 
     (edg-1
      "^\\([^ \n]+\\)(\\([0-9]+\\)): 
\\(?:error\\|warnin\\(g\\)\\|remar\\(k\\)\\)"
diff --git a/lisp/progmodes/cperl-mode.el b/lisp/progmodes/cperl-mode.el
index c47aa2e..44579cf 100644
--- a/lisp/progmodes/cperl-mode.el
+++ b/lisp/progmodes/cperl-mode.el
@@ -4876,7 +4876,7 @@ Returns some position at the last line."
       ;;  }? continue
       ;;  blah; }
       (if (not
-          (or (looking-at "[ 
\t]*\\(els\\(e\\|if\\)\\|continue\\|if\\|while\\|for\\(each\\)?\\|until\\)")
+          (or (looking-at "[ 
\t]*\\(els\\(e\\|if\\)\\|continue\\|if\\|while\\|for\\(each\\)?\\|unless\\|until\\)\\_>")
               (setq have-brace (save-excursion (search-forward "}" ee t)))))
          nil                           ; Do not need to do anything
        ;; Looking at:
@@ -4884,7 +4884,7 @@ Returns some position at the last line."
        ;; else
        (if cperl-merge-trailing-else
            (if (looking-at
-                "[ \t]*}[ \t]*\n[ \t\n]*\\(els\\(e\\|if\\)\\|continue\\)\\>")
+                "[ \t]*}[ \t]*\n[ \t\n]*\\(els\\(e\\|if\\)\\|continue\\)\\_>")
                (progn
                  (search-forward "}")
                  (setq p (point))
@@ -4892,7 +4892,7 @@ Returns some position at the last line."
                  (delete-region p (point))
              (insert (make-string cperl-indent-region-fix-constructs ?\s))
                  (beginning-of-line)))
-         (if (looking-at "[ \t]*}[ \t]*\\(els\\(e\\|if\\)\\|continue\\)\\>")
+         (if (looking-at "[ \t]*}[ \t]*\\(els\\(e\\|if\\)\\|continue\\)\\_>")
              (save-excursion
                  (search-forward "}")
                  (delete-horizontal-space)
@@ -4904,7 +4904,7 @@ Returns some position at the last line."
                        (setq ret (point)))))))
        ;; Looking at:
        ;; }     else
-       (if (looking-at "[ \t]*}\\(\t*\\|[ \t][ 
\t]+\\)\\<\\(els\\(e\\|if\\)\\|continue\\)\\>")
+       (if (looking-at "[ \t]*}\\(\t*\\|[ \t][ 
\t]+\\)\\<\\(els\\(e\\|if\\)\\|continue\\)\\_>")
            (progn
              (search-forward "}")
              (delete-horizontal-space)
diff --git a/lisp/progmodes/flymake-cc.el b/lisp/progmodes/flymake-cc.el
index bddd1a3..19565ef 100644
--- a/lisp/progmodes/flymake-cc.el
+++ b/lisp/progmodes/flymake-cc.el
@@ -5,18 +5,20 @@
 ;; Author: João Távora <joaotavora@gmail.com>
 ;; Keywords: languages, c
 
-;; This program is free software; you can redistribute it and/or modify
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
 ;; the Free Software Foundation, either version 3 of the License, or
 ;; (at your option) any later version.
 
-;; This program is distributed in the hope that it will be useful,
+;; GNU Emacs is distributed in the hope that it will be useful,
 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with this program.  If not, see <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.
 
 ;;; Commentary:
 
diff --git a/lisp/progmodes/hideshow.el b/lisp/progmodes/hideshow.el
index c5b9cfc..625e08e 100644
--- a/lisp/progmodes/hideshow.el
+++ b/lisp/progmodes/hideshow.el
@@ -225,8 +225,6 @@
 ;;---------------------------------------------------------------------------
 ;; user-configurable variables
 
-(require 'cl-lib)
-
 (defgroup hideshow nil
   "Minor mode for hiding and showing program and comment blocks."
   :prefix "hs-"
@@ -654,9 +652,7 @@ Otherwise, guess start, end and `comment-start' regexps; 
`forward-sexp'
 function; and adjust-block-beginning function."
   (if (and (bound-and-true-p comment-start)
            (bound-and-true-p comment-end))
-      (let* ((lookup (cl-assoc-if (lambda (mode)
-                                   (derived-mode-p major-mode mode))
-                                 hs-special-modes-alist))
+      (let* ((lookup (assoc major-mode hs-special-modes-alist))
              (start-elem (or (nth 1 lookup) "\\s(")))
         (if (listp start-elem)
             ;; handle (START-REGEXP MDATA-SELECT)
diff --git a/lisp/progmodes/idlwave.el b/lisp/progmodes/idlwave.el
index 153f257..90e5694 100644
--- a/lisp/progmodes/idlwave.el
+++ b/lisp/progmodes/idlwave.el
@@ -7042,12 +7042,10 @@ If these don't exist, a letter in the string is 
automatically selected."
   #'idlwave-make-modified-completion-map "28.1")
 
 (defun idlwave-make-modified-completion-map (old-map)
-  "Replace `choose-completion' and `mouse-choose-completion' in OLD-MAP."
+  "Replace `choose-completion' in OLD-MAP."
   (let ((new-map (copy-keymap old-map)))
     (substitute-key-definition
      'choose-completion 'idlwave-choose-completion new-map)
-    (substitute-key-definition
-     'mouse-choose-completion 'idlwave-mouse-choose-completion new-map)
     (define-key new-map [mouse-3] 'idlwave-mouse-completion-help)
     new-map))
 
@@ -7056,10 +7054,8 @@ If these don't exist, a letter in the string is 
automatically selected."
   (interactive (list last-nonmenu-event))
   (apply 'idlwave-choose 'choose-completion args))
 
-(defun idlwave-mouse-choose-completion (&rest args)
-  "Click on an alternative in the `*Completions*' buffer to choose it."
-  (interactive "e")
-  (apply 'idlwave-choose 'mouse-choose-completion args))
+(define-obsolete-function-alias 'idlwave-mouse-choose-completion
+  #'idlwave-choose-completion "28.1")
 
 ;;----------------------------------------------------------------------
 ;;----------------------------------------------------------------------
diff --git a/lisp/progmodes/make-mode.el b/lisp/progmodes/make-mode.el
index ec246d6..235279e 100644
--- a/lisp/progmodes/make-mode.el
+++ b/lisp/progmodes/make-mode.el
@@ -316,7 +316,7 @@ not be enclosed in { } or ( )."
 (defconst makefile-gmake-statements
   `("-sinclude" "sinclude"             ; makefile-makepp-statements takes rest
     "ifdef" "ifndef" "ifeq" "ifneq" "-include" "define" "endef" "export"
-    "override define" "override" "unexport" "vpath"
+    "override define" "override" "unexport" "vpath" "undefine"
     ,@(cdr makefile-automake-statements))
   "List of keywords understood by gmake.")
 
diff --git a/lisp/progmodes/octave.el b/lisp/progmodes/octave.el
index e07f818..3dd9b8d 100644
--- a/lisp/progmodes/octave.el
+++ b/lisp/progmodes/octave.el
@@ -165,7 +165,7 @@ parenthetical grouping.")
     (modify-syntax-entry ?| "."   table)
     (modify-syntax-entry ?! "."   table)
     (modify-syntax-entry ?\\ "."  table)
-    (modify-syntax-entry ?\' "."  table)
+    (modify-syntax-entry ?\' "\""  table)
     (modify-syntax-entry ?\` "."  table)
     (modify-syntax-entry ?. "."   table)
     (modify-syntax-entry ?\" "\"" table)
diff --git a/lisp/progmodes/project.el b/lisp/progmodes/project.el
index 8afd5ce..4fae3e9 100644
--- a/lisp/progmodes/project.el
+++ b/lisp/progmodes/project.el
@@ -581,6 +581,8 @@ DIRS must contain directory names."
 ;;;###autoload
 (defvar project-prefix-map
   (let ((map (make-sparse-keymap)))
+    (define-key map "!" 'project-shell-command)
+    (define-key map "&" 'project-async-shell-command)
     (define-key map "f" 'project-find-file)
     (define-key map "F" 'project-or-external-find-file)
     (define-key map "b" 'project-switch-to-buffer)
@@ -882,6 +884,20 @@ if one already exists."
         (pop-to-buffer eshell-buffer)
       (eshell t))))
 
+;;;###autoload
+(defun project-async-shell-command ()
+  "Run `async-shell-command' in the current project's root directory."
+  (interactive)
+  (let ((default-directory (project-root (project-current t))))
+    (call-interactively #'async-shell-command)))
+
+;;;###autoload
+(defun project-shell-command ()
+  "Run `shell-command' in the current project's root directory."
+  (interactive)
+  (let ((default-directory (project-root (project-current t))))
+    (call-interactively #'shell-command)))
+
 (declare-function fileloop-continue "fileloop" ())
 
 ;;;###autoload
diff --git a/lisp/progmodes/vhdl-mode.el b/lisp/progmodes/vhdl-mode.el
index 9cd84cf..3d66483 100644
--- a/lisp/progmodes/vhdl-mode.el
+++ b/lisp/progmodes/vhdl-mode.el
@@ -2304,10 +2304,6 @@ Ignore byte-compiler warnings you might see."
     (defvaralias 'vhdl-last-input-event 'last-input-char)
   (defvaralias 'vhdl-last-input-event 'last-input-event))
 
-;; `help-print-return-message' changed to `print-help-return-message' in Emacs
-;;;(unless (fboundp 'help-print-return-message)
-;;;  (defalias 'help-print-return-message 'print-help-return-message))
-
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; Compatibility with older VHDL Mode versions
 
diff --git a/lisp/progmodes/xref.el b/lisp/progmodes/xref.el
index bbf899e..de2053c 100644
--- a/lisp/progmodes/xref.el
+++ b/lisp/progmodes/xref.el
@@ -1,7 +1,7 @@
 ;;; xref.el --- Cross-referencing commands              -*-lexical-binding:t-*-
 
 ;; Copyright (C) 2014-2020 Free Software Foundation, Inc.
-;; Version: 1.0.2
+;; Version: 1.0.3
 ;; Package-Requires: ((emacs "26.3"))
 
 ;; This is a GNU ELPA :core package.  Avoid functionality that is not
@@ -608,7 +608,10 @@ buffer."
                    (user-error "No reference at point")))
          (xref--current-item xref))
     (xref--show-location (xref-item-location xref) (if quit 'quit t))
-    (next-error-found buffer (current-buffer))))
+    (if (fboundp 'next-error-found)
+        (next-error-found buffer (current-buffer))
+      ;; Emacs < 27
+      (setq next-error-last-buffer buffer))))
 
 (defun xref-quit-and-goto-xref ()
   "Quit *xref* buffer, then jump to xref on current line."
@@ -958,8 +961,18 @@ Accepts the same arguments as `xref-show-xrefs-function'."
 
 (defvar xref--read-pattern-history nil)
 
-(defun xref--show-xrefs (fetcher display-action)
+(defun xref--show-xrefs (fetcher display-action &optional _always-show-list)
   (xref--push-markers)
+  (unless (functionp fetcher)
+    ;; Old convention.
+    (let ((xrefs fetcher))
+      (setq fetcher
+            (lambda ()
+              (if (eq xrefs 'called-already)
+                  (user-error "Refresh is not supported")
+                (prog1
+                    xrefs
+                  (setq xrefs 'called-already)))))))
   (funcall xref-show-xrefs-function fetcher
            `((window . ,(selected-window))
              (display-action . ,display-action))))
diff --git a/lisp/progmodes/xscheme.el b/lisp/progmodes/xscheme.el
index 8dfb3a4..c699786 100644
--- a/lisp/progmodes/xscheme.el
+++ b/lisp/progmodes/xscheme.el
@@ -446,8 +446,6 @@ Entry to this mode runs `scheme-mode-hook' and then
            (scheme-interaction-mode-initialize)
            (scheme-interaction-mode t)))))
 
-(define-obsolete-function-alias 'advertised-xscheme-send-previous-expression
-  'xscheme-send-previous-expression "23.2")
 
 ;;;; Debugger Mode
 
diff --git a/lisp/ps-print.el b/lisp/ps-print.el
index 1ca4a23..67ee4d2 100644
--- a/lisp/ps-print.el
+++ b/lisp/ps-print.el
@@ -4523,7 +4523,7 @@ page-height == ((floor print-height ((th + ls) * zh)) * 
((th + ls) * zh)) - th
        (let* ((name   (concat (file-name-nondirectory (or (buffer-file-name)
                                                          (buffer-name)))
                              ".ps"))
-             (prompt (format "Save PostScript to file (default %s): " name))
+             (prompt (format-prompt "Save PostScript to file" name))
              (res    (read-file-name prompt default-directory name nil)))
         (while (cond ((file-directory-p res)
                       (ding)
diff --git a/lisp/simple.el b/lisp/simple.el
index fa6e154..eedbff2 100644
--- a/lisp/simple.el
+++ b/lisp/simple.el
@@ -6122,8 +6122,6 @@ Does not set point.  Does nothing if mark ring is empty."
     (pop mark-ring))
   (deactivate-mark))
 
-(define-obsolete-function-alias
-  'exchange-dot-and-mark 'exchange-point-and-mark "23.3")
 (defun exchange-point-and-mark (&optional arg)
   "Put the mark where point is now, and point where the mark is now.
 This command works even when the mark is not active,
@@ -8409,18 +8407,6 @@ Called with three arguments (BEG END TEXT), it should 
replace the text
 between BEG and END with TEXT.  Expected to be set buffer-locally
 in the *Completions* buffer.")
 
-(defvar completion-base-size nil
-  "Number of chars before point not involved in completion.
-This is a local variable in the completion list buffer.
-It refers to the chars in the minibuffer if completing in the
-minibuffer, or in `completion-reference-buffer' otherwise.
-Only characters in the field at point are included.
-
-If nil, Emacs determines which part of the tail end of the
-buffer's text is involved in completion by comparing the text
-directly.")
-(make-obsolete-variable 'completion-base-size 'completion-base-position "23.2")
-
 (defun delete-completion-window ()
   "Delete the completion list window.
 Go to the window from which completion was requested."
@@ -8474,7 +8460,6 @@ If EVENT, use EVENT's position to determine the starting 
position."
   (run-hooks 'mouse-leave-buffer-hook)
   (with-current-buffer (window-buffer (posn-window (event-start event)))
     (let ((buffer completion-reference-buffer)
-          (base-size completion-base-size)
           (base-position completion-base-position)
           (insert-function completion-list-insert-choice-function)
           (choice
@@ -8501,10 +8486,6 @@ If EVENT, use EVENT's position to determine the starting 
position."
         (choose-completion-string
          choice buffer
          (or base-position
-             (when base-size
-               ;; Someone's using old completion code that doesn't know
-               ;; about base-position yet.
-               (list (+ base-size (field-beginning))))
              ;; If all else fails, just guess.
              (list (choose-completion-guess-base-position choice)))
          insert-function)))))
@@ -8532,10 +8513,6 @@ If EVENT, use EVENT's position to determine the starting 
position."
         (forward-char 1))
       (point))))
 
-(defun choose-completion-delete-max-match (string)
-  (declare (obsolete choose-completion-guess-base-position "23.2"))
-  (delete-region (choose-completion-guess-base-position string) (point)))
-
 (defvar choose-completion-string-functions nil
   "Functions that may override the normal insertion of a completion choice.
 These functions are called in order with three arguments:
@@ -8564,13 +8541,6 @@ back on `completion-list-insert-choice-function' when 
nil."
   ;; unless it is reading a file name and CHOICE is a directory,
   ;; or completion-no-auto-exit is non-nil.
 
-  ;; Some older code may call us passing `base-size' instead of
-  ;; `base-position'.  It's difficult to make any use of `base-size',
-  ;; so we just ignore it.
-  (unless (consp base-position)
-    (message "Obsolete `base-size' passed to choose-completion-string")
-    (setq base-position nil))
-
   (let* ((buffer (or buffer completion-reference-buffer))
         (mini-p (minibufferp buffer)))
     ;; If BUFFER is a minibuffer, barf unless it's the currently
@@ -8626,8 +8596,7 @@ Type \\<completion-list-mode-map>\\[choose-completion] in 
the completion list\
  to select the completion near point.
 Or click to select one with the mouse.
 
-\\{completion-list-mode-map}"
-  (set (make-local-variable 'completion-base-size) nil))
+\\{completion-list-mode-map}")
 
 (defun completion-list-mode-finish ()
   "Finish setup of the completions buffer.
@@ -8664,14 +8633,11 @@ Called from `temp-buffer-show-hook'."
           (if minibuffer-completing-file-name
               (file-name-as-directory
                (expand-file-name
-                (buffer-substring (minibuffer-prompt-end)
-                                  (- (point) (or completion-base-size 0))))))))
+                (buffer-substring (minibuffer-prompt-end) (point)))))))
     (with-current-buffer standard-output
-      (let ((base-size completion-base-size) ;Read before killing localvars.
-            (base-position completion-base-position)
+      (let ((base-position completion-base-position)
             (insert-fun completion-list-insert-choice-function))
         (completion-list-mode)
-        (set (make-local-variable 'completion-base-size) base-size)
         (set (make-local-variable 'completion-base-position) base-position)
         (set (make-local-variable 'completion-list-insert-choice-function)
             insert-fun))
diff --git a/lisp/startup.el b/lisp/startup.el
index 536a3de..0a81c87 100644
--- a/lisp/startup.el
+++ b/lisp/startup.el
@@ -463,9 +463,6 @@ or `CVS', and any subdirectory that contains a file named 
`.nosearch'."
            (and (string-match "\\`[[:alnum:]]" file)
                 ;; The lower-case variants of RCS and CVS are for DOS/Windows.
                 (not (member file '("RCS" "CVS" "rcs" "cvs")))
-                ;; Avoid doing a `stat' when it isn't necessary because
-                ;; that can cause trouble when an NFS server is down.
-                (not (string-match "\\.elc?\\'" file))
                 (file-directory-p file)
                 (let ((expanded (expand-file-name file)))
                   (or (file-exists-p (expand-file-name ".nosearch" expanded))
@@ -648,16 +645,13 @@ It is the default value of the variable `top-level'."
         (list (default-value 'user-full-name)))
     ;; If the PWD environment variable isn't accurate, delete it.
     (let ((pwd (getenv "PWD")))
-      (and (stringp pwd)
-          ;; Use FOO/., so that if FOO is a symlink, file-attributes
-          ;; describes the directory linked to, not FOO itself.
+      (and pwd
           (or (and default-directory
                    (ignore-errors
                      (equal (file-attributes
-                             (concat (file-name-as-directory pwd) "."))
+                             (file-name-as-directory pwd))
                             (file-attributes
-                             (concat (file-name-as-directory default-directory)
-                                     ".")))))
+                             (file-name-as-directory default-directory)))))
               (setq process-environment
                     (delete (concat "PWD=" pwd)
                             process-environment)))))
diff --git a/lisp/subr.el b/lisp/subr.el
index 093cacc..6e86601 100644
--- a/lisp/subr.el
+++ b/lisp/subr.el
@@ -771,7 +771,6 @@ If that is non-nil, the element matches; then 
`assoc-default'
 
 If no element matches, the value is nil.
 If TEST is omitted or nil, `equal' is used."
-  (declare (side-effect-free t))
   (let (found (tail alist) value)
     (while (and tail (not found))
       (let ((elt (car tail)))
@@ -3076,9 +3075,17 @@ If MESSAGE is nil, instructions to type EXIT-CHAR are 
displayed there."
     o1))
 
 (defun remove-overlays (&optional beg end name val)
-  "Clear BEG and END of overlays whose property NAME has value VAL.
-Overlays might be moved and/or split.
-BEG and END default respectively to the beginning and end of buffer."
+  "Remove overlays between BEG and END that have property NAME with value VAL.
+Overlays might be moved and/or split.  If any targeted overlays
+start before BEG, the overlays will be altered so that they end
+at BEG.  Likewise, if the targeted overlays end after END, they
+will be altered so that they start at END.  Overlays that start
+at or after BEG and end before END will be removed completely.
+
+BEG and END default respectively to the beginning and end of the
+buffer.
+Values are compared with `eq'.
+If either NAME or VAL are specified, both should be specified."
   ;; This speeds up the loops over overlays.
   (unless beg (setq beg (point-min)))
   (unless end (setq end (point-max)))
@@ -4675,13 +4682,6 @@ This function is called directly from the C code."
   ;; Finally, run any other hook.
   (run-hook-with-args 'after-load-functions abs-file))
 
-(defun eval-next-after-load (file)
-  "Read the following input sexp, and run it whenever FILE is loaded.
-This makes or adds to an entry on `after-load-alist'.
-FILE should be the name of a library, with no directory name."
-  (declare (obsolete eval-after-load "23.2"))
-  (eval-after-load file (read)))
-
 
 (defun display-delayed-warnings ()
   "Display delayed warnings from `delayed-warnings-list'.
diff --git a/lisp/term.el b/lisp/term.el
index 99f1bf4..e77c2c1 100644
--- a/lisp/term.el
+++ b/lisp/term.el
@@ -241,9 +241,9 @@
 ;;             printf '\033AnSiTu %s\n' "$USER"
 ;;             printf '\033AnSiTc %s\n' "$PWD"
 ;;
-;;             cd()    { command cd    "$@"; printf '\033AnSiTc %s\n' "$PWD"; }
-;;             pushd() { command pushd "$@"; printf '\033AnSiTc %s\n' "$PWD"; }
-;;             popd()  { command popd  "$@"; printf '\033AnSiTc %s\n' "$PWD"; }
+;;             cd()    { command cd    "$@" && printf '\033AnSiTc %s\n' 
"$PWD"; }
+;;             pushd() { command pushd "$@" && printf '\033AnSiTc %s\n' 
"$PWD"; }
+;;             popd()  { command popd  "$@" && printf '\033AnSiTc %s\n' 
"$PWD"; }
 ;;
 ;;             # Use custom dircolors in term buffers.
 ;;             # eval $(dircolors $HOME/.emacs_dircolors)
@@ -4110,53 +4110,6 @@ see `expand-file-name' and `substitute-in-file-name'.  
For completion see
   (term-dynamic-complete-filename))
 
 
-(defun term-dynamic-simple-complete (stub candidates)
-  "Dynamically complete STUB from CANDIDATES list.
-This function inserts completion characters at point by completing STUB from
-the strings in CANDIDATES.  A completions listing may be shown in a help buffer
-if completion is ambiguous.
-
-Returns nil if no completion was inserted.
-Returns `sole' if completed with the only completion match.
-Returns `shortest' if completed with the shortest of the completion matches.
-Returns `partial' if completed as far as possible with the completion matches.
-Returns `listed' if a completion listing was shown.
-
-See also `term-dynamic-complete-filename'."
-  (declare (obsolete completion-in-region "23.2"))
-  (let* ((completion-ignore-case nil)
-        (completions (all-completions stub candidates)))
-    (cond ((null completions)
-          (message "No completions of %s" stub)
-          nil)
-         ((= 1 (length completions))   ; Gotcha!
-          (let ((completion (car completions)))
-            (if (string-equal completion stub)
-                (message "Sole completion")
-              (insert (substring completion (length stub)))
-              (message "Completed"))
-            (when term-completion-addsuffix (insert " "))
-            'sole))
-         (t                            ; There's no unique completion.
-          (let ((completion (try-completion stub candidates)))
-            ;; Insert the longest substring.
-            (insert (substring completion (length stub)))
-            (cond ((and term-completion-recexact term-completion-addsuffix
-                        (string-equal stub completion)
-                        (member completion completions))
-                   ;; It's not unique, but user wants shortest match.
-                   (insert " ")
-                   (message "Completed shortest")
-                   'shortest)
-                  ((or term-completion-autolist
-                       (string-equal stub completion))
-                   ;; It's not unique, list possible completions.
-                   (term-dynamic-list-completions completions)
-                   'listed)
-                  (t
-                   (message "Partially completed")
-                   'partial)))))))
-
 (defun term-dynamic-list-filename-completions ()
   "List in help buffer possible completions of the filename at point."
   (interactive)
@@ -4186,7 +4139,7 @@ Typing SPC flushes the help buffer."
                 (eq (window-buffer (posn-window (event-start first)))
                     (get-buffer "*Completions*"))
                 (memq (key-binding key)
-                       '(mouse-choose-completion choose-completion))))
+                       '(choose-completion))))
          ;; If the user does choose-completion with the mouse,
          ;; execute the command, then delete the completion window.
          (progn
diff --git a/lisp/textmodes/flyspell.el b/lisp/textmodes/flyspell.el
index 23f96d7..9805928 100644
--- a/lisp/textmodes/flyspell.el
+++ b/lisp/textmodes/flyspell.el
@@ -398,8 +398,8 @@ like <img alt=\"Some thing.\">."
     (let ((f (get-text-property (1- (point)) 'face)))
       (memq f flyspell-prog-text-faces))))
 
-;; Records the binding of M-TAB in effect before flyspell was activated.
-(defvar flyspell--prev-meta-tab-binding)
+(defvar flyspell--prev-meta-tab-binding nil
+  "Records the binding of M-TAB in effect before flyspell was activated.")
 
 ;;;###autoload
 (defun flyspell-prog-mode ()
@@ -533,7 +533,7 @@ in your init file.
           (progn
             (when flyspell-use-mouse-3-for-menu
               (flyspell--set-use-mouse-3-for-menu 
'flyspell-use-mouse-3-for-menu t))
-           (flyspell-mode-on))
+            (flyspell-mode-on (called-interactively-p 'interactive)))
        (error (message "Error enabling Flyspell mode:\n%s" (cdr err))
               (flyspell-mode -1)))
     (flyspell-mode-off)))
@@ -550,12 +550,9 @@ in your init file.
 
 (custom-add-option 'text-mode-hook 'turn-on-flyspell)
 
-;;*---------------------------------------------------------------------*/
-;;*    flyspell-buffers ...                                             */
-;;*    -------------------------------------------------------------    */
-;;*    For remembering buffers running flyspell                         */
-;;*---------------------------------------------------------------------*/
-(defvar flyspell-buffers nil)
+(defvar flyspell-buffers nil
+  "For remembering buffers running flyspell")
+(make-obsolete-variable 'flyspell-buffers "not used." "28.1")
 
 ;;*---------------------------------------------------------------------*/
 ;;*    flyspell-minibuffer-p ...                                        */
@@ -611,8 +608,12 @@ in your init file.
 ;;*---------------------------------------------------------------------*/
 ;;*    flyspell-mode-on ...                                             */
 ;;*---------------------------------------------------------------------*/
-(defun flyspell-mode-on ()
-  "Turn Flyspell mode on.  Do not use this; use `flyspell-mode' instead."
+(defun flyspell-mode-on (&optional show-msg)
+  "Turn Flyspell mode on.  Do not use this; use `flyspell-mode' instead.
+
+If optional argument SHOW-MSG is non-nil, show a welcome message
+if `flyspell-issue-message-flag' and `flyspell-issue-welcome-flag'
+are both non-nil."
   (ispell-set-spellchecker-params) ; Initialize variables and dicts alists
   (setq ispell-highlight-face 'flyspell-incorrect)
   ;; local dictionaries setup
@@ -644,15 +645,17 @@ in your init file.
        (setq flyspell-generic-check-word-predicate mode-predicate)))
   ;; the welcome message
   (if (and flyspell-issue-message-flag
-          flyspell-issue-welcome-flag
-          (called-interactively-p 'interactive))
-      (let ((binding (where-is-internal 'flyspell-auto-correct-word
-                                       nil 'non-ascii)))
-       (message "%s"
-        (if binding
-            (format "Welcome to flyspell. Use %s or Mouse-2 to correct words."
-                    (key-description binding))
-          "Welcome to flyspell. Use Mouse-2 to correct words.")))))
+           flyspell-issue-welcome-flag
+           show-msg)
+      (let* ((binding (where-is-internal 'flyspell-auto-correct-word
+                                         nil 'non-ascii))
+             (mouse-button (if flyspell-use-mouse-3-for-menu
+                               "Mouse-3" "Mouse-2")))
+        (message (format-message
+                  "Welcome to Flyspell. Use %s to correct words."
+                  (if binding
+                      (format "`%s' or `%s'" (key-description binding) 
mouse-button)
+                    (format "`%s'" mouse-button)))))))
 
 ;;*---------------------------------------------------------------------*/
 ;;*    flyspell-delay-commands ...                                      */
@@ -1802,7 +1805,9 @@ for the overlay."
     (overlay-put overlay 'mouse-face mouse-face)
     (overlay-put overlay 'flyspell-overlay t)
     (overlay-put overlay 'evaporate t)
-    (overlay-put overlay 'help-echo "mouse-2: correct word at point")
+    (overlay-put overlay 'help-echo (concat (if flyspell-use-mouse-3-for-menu
+                                                "mouse-3"
+                                              "mouse-2") ": correct word at 
point"))
     ;; If misspelled text has a 'keymap' property, let that remain in
     ;; effect for the bindings that flyspell-mouse-map doesn't override.
     (set-keymap-parent flyspell-mouse-map (get-char-property beg 'keymap))
diff --git a/lisp/textmodes/ispell.el b/lisp/textmodes/ispell.el
index 8252da6..86452ff 100644
--- a/lisp/textmodes/ispell.el
+++ b/lisp/textmodes/ispell.el
@@ -44,6 +44,7 @@
 ;;   ispell-buffer
 ;;   ispell-message
 ;;   ispell-comments-and-strings
+;;   ispell-comment-or-string-at-point
 ;;   ispell-continue
 ;;   ispell-complete-word
 ;;   ispell-complete-word-interior-frag
@@ -1095,28 +1096,38 @@ to dictionaries found, and will remove aliases from the 
list
 in `ispell-dicts-name2locale-equivs-alist' if an explicit
 dictionary from that list was found."
   (let ((hunspell-found-dicts
-        (split-string
-         (with-temp-buffer
-           (ispell-call-process ispell-program-name
-                                null-device
-                                t
-                                nil
-                                 "-D"
-                                 ;; Use -a to prevent Hunspell from
-                                 ;; trying to initialize its
-                                 ;; curses/termcap UI, which causes it
-                                 ;; to crash or fail to start in some
-                                 ;; MS-Windows ports.
-                                 "-a"
-                                 ;; Hunspell 1.7.0 (and later?) won't
-                                 ;; show LOADED DICTIONARY unless
-                                 ;; there's at least one file argument
-                                 ;; on the command line.  So we feed
-                                 ;; it with the null device.
-                                null-device)
-           (buffer-string))
-         "[\n\r]+"
-         t))
+         (seq-filter
+          (lambda (str)
+            (when (string-match
+                   ;; Hunspell gives this error when there is some
+                   ;; installation problem, for example if $LANG is unset.
+                   (concat "^Can't open affix or dictionary files "
+                           "for dictionary named \"default\".$")
+                   str)
+              (user-error "Hunspell error (is $LANG unset?): %s" str))
+            (file-name-absolute-p str))
+          (split-string
+           (with-temp-buffer
+             (ispell-call-process ispell-program-name
+                            null-device
+                            t
+                            nil
+                            "-D"
+                            ;; Use -a to prevent Hunspell from
+                            ;; trying to initialize its
+                            ;; curses/termcap UI, which causes it
+                            ;; to crash or fail to start in some
+                            ;; MS-Windows ports.
+                            "-a"
+                            ;; Hunspell 1.7.0 (and later?) won't
+                            ;; show LOADED DICTIONARY unless
+                            ;; there's at least one file argument
+                            ;; on the command line.  So we feed
+                            ;; it with the null device.
+                            null-device)
+             (buffer-string))
+           "[\n\r]+"
+           t)))
        hunspell-default-dict
        hunspell-default-dict-entry
        hunspell-multi-dict)
@@ -3580,24 +3591,40 @@ Returns the sum SHIFT due to changes in word 
replacements."
 
 
 ;;;###autoload
-(defun ispell-comments-and-strings ()
-  "Check comments and strings in the current buffer for spelling errors."
-  (interactive)
-  (goto-char (point-min))
+(defun ispell-comments-and-strings (&optional start end)
+  "Check comments and strings in the current buffer for spelling errors.
+If called interactively with an active region, check only comments and
+strings in the region.
+When called from Lisp, START and END buffer positions can be provided
+to limit the check."
+  (interactive (when (use-region-p) (list (region-beginning) (region-end))))
+  (unless end (setq end (point-max)))
+  (goto-char (or start (point-min)))
   (let (state done)
     (while (not done)
       (setq done t)
-      (setq state (parse-partial-sexp (point) (point-max)
-                                     nil nil state 'syntax-table))
+      (setq state (parse-partial-sexp (point) end nil nil state 'syntax-table))
       (if (or (nth 3 state) (nth 4 state))
          (let ((start (point)))
-           (setq state (parse-partial-sexp start (point-max)
+           (setq state (parse-partial-sexp start end
                                            nil nil state 'syntax-table))
            (if (or (nth 3 state) (nth 4 state))
                (error "Unterminated string or comment"))
            (save-excursion
              (setq done (not (ispell-region start (point))))))))))
 
+;;;###autoload
+(defun ispell-comment-or-string-at-point ()
+  "Check the comment or string containing point for spelling errors."
+  (interactive)
+  (save-excursion
+    (let ((state (syntax-ppss)))
+      (if (or (nth 3 state) (nth 4 state))
+          (ispell-region (nth 8 state)
+                         (progn (parse-partial-sexp (point) (point-max)
+                                                    nil nil state 
'syntax-table)
+                                (point)))
+        (user-error "Not inside a string or comment")))))
 
 ;;;###autoload
 (defun ispell-buffer ()
diff --git a/m4/gnulib-comp.m4 b/m4/gnulib-comp.m4
index 5bfa147..d2fdbd8 100644
--- a/m4/gnulib-comp.m4
+++ b/m4/gnulib-comp.m4
@@ -145,6 +145,7 @@ AC_DEFUN([gl_EARLY],
   # Code from module regex:
   # Code from module root-uid:
   # Code from module sig2str:
+  # Code from module sigdescr_np:
   # Code from module signal-h:
   # Code from module snippet/_Noreturn:
   # Code from module snippet/arg-nonnull:
@@ -424,6 +425,11 @@ AC_DEFUN([gl_INIT],
     AC_LIBOBJ([sig2str])
     gl_PREREQ_SIG2STR
   fi
+  gl_FUNC_SIGDESCR_NP
+  if test $HAVE_SIGDESCR_NP = 0; then
+    AC_LIBOBJ([sigdescr_np])
+  fi
+  gl_STRING_MODULE_INDICATOR([sigdescr_np])
   gl_SIGNAL_H
   gl_TYPE_SOCKLEN_T
   gt_TYPE_SSIZE_T
@@ -1059,6 +1065,7 @@ AC_DEFUN([gl_FILE_LIST], [
   lib/sha512.h
   lib/sig2str.c
   lib/sig2str.h
+  lib/sigdescr_np.c
   lib/signal.in.h
   lib/stat-time.c
   lib/stat-time.h
@@ -1181,6 +1188,7 @@ AC_DEFUN([gl_FILE_LIST], [
   m4/open-slash.m4
   m4/open.m4
   m4/pathmax.m4
+  m4/pid_t.m4
   m4/pipe2.m4
   m4/pselect.m4
   m4/pthread_sigmask.m4
@@ -1191,6 +1199,7 @@ AC_DEFUN([gl_FILE_LIST], [
   m4/sha256.m4
   m4/sha512.m4
   m4/sig2str.m4
+  m4/sigdescr_np.m4
   m4/signal_h.m4
   m4/socklen.m4
   m4/ssize_t.m4
diff --git a/m4/inttypes.m4 b/m4/inttypes.m4
index 28bac81..84b1654 100644
--- a/m4/inttypes.m4
+++ b/m4/inttypes.m4
@@ -1,4 +1,4 @@
-# inttypes.m4 serial 31
+# inttypes.m4 serial 32
 dnl Copyright (C) 2006-2020 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -44,7 +44,7 @@ AC_DEFUN([gl_INTTYPES_PRI_SCN],
          #ifdef _WIN64
          LLP64
          #endif
-         ]]),
+         ]])
       ],
       [PRIPTR_PREFIX='"l"'],
       [PRIPTR_PREFIX='"ll"'])
diff --git a/m4/sigdescr_np.m4 b/m4/sigdescr_np.m4
new file mode 100644
index 0000000..f0f3f97
--- /dev/null
+++ b/m4/sigdescr_np.m4
@@ -0,0 +1,17 @@
+# sigdescr_np.m4 serial 1
+dnl Copyright (C) 2020 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_SIGDESCR_NP],
+[
+  dnl Persuade glibc <string.h> to declare sigdescr_np().
+  AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
+
+  AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS])
+  AC_CHECK_FUNCS([sigdescr_np])
+  if test $ac_cv_func_sigdescr_np = no; then
+    HAVE_SIGDESCR_NP=0
+  fi
+])
diff --git a/m4/string_h.m4 b/m4/string_h.m4
index d519bea..d7c12aa 100644
--- a/m4/string_h.m4
+++ b/m4/string_h.m4
@@ -5,7 +5,7 @@
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 25
+# serial 26
 
 # Written by Paul Eggert.
 
@@ -28,7 +28,7 @@ AC_DEFUN([gl_HEADER_STRING_H_BODY],
     ]],
     [ffsl ffsll memmem mempcpy memrchr rawmemchr stpcpy stpncpy strchrnul
      strdup strncat strndup strnlen strpbrk strsep strcasestr strtok_r
-     strerror_r sigabbrev_np strsignal strverscmp])
+     strerror_r sigabbrev_np sigdescr_np strsignal strverscmp])
 
   AC_REQUIRE([AC_C_RESTRICT])
 ])
@@ -81,6 +81,7 @@ AC_DEFUN([gl_HEADER_STRING_H_DEFAULTS],
   GNULIB_STRERROR=0;    AC_SUBST([GNULIB_STRERROR])
   GNULIB_STRERROR_R=0;  AC_SUBST([GNULIB_STRERROR_R])
   GNULIB_SIGABBREV_NP=0;AC_SUBST([GNULIB_SIGABBREV_NP])
+  GNULIB_SIGDESCR_NP=0; AC_SUBST([GNULIB_SIGDESCR_NP])
   GNULIB_STRSIGNAL=0;   AC_SUBST([GNULIB_STRSIGNAL])
   GNULIB_STRVERSCMP=0;  AC_SUBST([GNULIB_STRVERSCMP])
   HAVE_MBSLEN=0;        AC_SUBST([HAVE_MBSLEN])
@@ -104,6 +105,7 @@ AC_DEFUN([gl_HEADER_STRING_H_DEFAULTS],
   HAVE_DECL_STRTOK_R=1;         AC_SUBST([HAVE_DECL_STRTOK_R])
   HAVE_DECL_STRERROR_R=1;       AC_SUBST([HAVE_DECL_STRERROR_R])
   HAVE_SIGABBREV_NP=1;          AC_SUBST([HAVE_SIGABBREV_NP])
+  HAVE_SIGDESCR_NP=1;           AC_SUBST([HAVE_SIGDESCR_NP])
   HAVE_DECL_STRSIGNAL=1;        AC_SUBST([HAVE_DECL_STRSIGNAL])
   HAVE_STRVERSCMP=1;            AC_SUBST([HAVE_STRVERSCMP])
   REPLACE_MEMCHR=0;             AC_SUBST([REPLACE_MEMCHR])
diff --git a/src/character.c b/src/character.c
index 4902e56..5860f6a 100644
--- a/src/character.c
+++ b/src/character.c
@@ -495,9 +495,9 @@ parse_str_as_multibyte (const unsigned char *str, ptrdiff_t 
len,
 
 /* Arrange unibyte text at STR of NBYTES bytes as a multibyte text.
    It actually converts only such 8-bit characters that don't construct
-   a multibyte sequence to multibyte forms of Latin-1 characters.  If
-   NCHARS is nonzero, set *NCHARS to the number of characters in the
-   text.  It is assured that we can use LEN bytes at STR as a work
+   a multibyte sequence to multibyte forms of raw bytes.  If NCHARS
+   is nonzero, set *NCHARS to the number of characters in the text.
+   It is assured that we can use LEN bytes at STR as a work
    area and that is enough.  Return the number of bytes of the
    resulting text.  */
 
diff --git a/src/coding.c b/src/coding.c
index 51bd441..221a9ca 100644
--- a/src/coding.c
+++ b/src/coding.c
@@ -10895,7 +10895,10 @@ usage: (define-coding-system-internal ...)  */)
   ASET (attrs, coding_attr_base_name, name);
 
   Lisp_Object val = args[coding_arg_mnemonic];
-  if (! STRINGP (val))
+  /* decode_mode_spec_coding assumes the mnemonic is a single character.  */
+  if (STRINGP (val))
+    val = make_fixnum (STRING_CHAR (SDATA (val)));
+  else
     CHECK_CHARACTER (val);
   ASET (attrs, coding_attr_mnemonic, val);
 
@@ -11408,7 +11411,10 @@ DEFUN ("coding-system-put", Fcoding_system_put, 
Scoding_system_put,
   attrs = AREF (spec, 0);
   if (EQ (prop, QCmnemonic))
     {
-      if (! STRINGP (val))
+      /* decode_mode_spec_coding assumes the mnemonic is a single character.  
*/
+      if (STRINGP (val))
+       val = make_fixnum (STRING_CHAR (SDATA (val)));
+      else
        CHECK_CHARACTER (val);
       ASET (attrs, coding_attr_mnemonic, val);
     }
diff --git a/src/dispextern.h b/src/dispextern.h
index 311867a..956ca96 100644
--- a/src/dispextern.h
+++ b/src/dispextern.h
@@ -3056,9 +3056,9 @@ struct image
      if necessary.  */
   unsigned long background;
 
-  /* Foreground and background colors of the frame on which the image
+  /* Foreground and background colors of the face on which the image
      is created.  */
-  unsigned long frame_foreground, frame_background;
+  unsigned long face_foreground, face_background;
 
   /* True if this image has a `transparent' background -- that is, is
      uses an image mask.  The accessor macro for this is
@@ -3475,7 +3475,7 @@ void clear_image_caches (Lisp_Object);
 void mark_image_cache (struct image_cache *);
 bool valid_image_p (Lisp_Object);
 void prepare_image_for_display (struct frame *, struct image *);
-ptrdiff_t lookup_image (struct frame *, Lisp_Object);
+ptrdiff_t lookup_image (struct frame *, Lisp_Object, int);
 
 #if defined HAVE_X_WINDOWS || defined USE_CAIRO || defined HAVE_NS
 #define RGB_PIXEL_COLOR unsigned long
diff --git a/src/editfns.c b/src/editfns.c
index 949f382..7e1e24e 100644
--- a/src/editfns.c
+++ b/src/editfns.c
@@ -1877,9 +1877,6 @@ determines whether case is significant or ignored.  */)
 #undef EQUAL
 #define USE_HEURISTIC
 
-/* Counter used to rarely_quit in replace-buffer-contents.  */
-static unsigned short rbc_quitcounter;
-
 #define XVECREF_YVECREF_EQUAL(ctx, xoff, yoff)  \
   buffer_chars_equal ((ctx), (xoff), (yoff))
 
@@ -1900,10 +1897,11 @@ static unsigned short rbc_quitcounter;
   unsigned char *deletions;                     \
   unsigned char *insertions;                   \
   struct timespec time_limit;                  \
-  unsigned int early_abort_tests;
+  sys_jmp_buf jmp;                             \
+  unsigned short quitcounter;
 
-#define NOTE_DELETE(ctx, xoff) set_bit ((ctx)->deletions, (xoff))
-#define NOTE_INSERT(ctx, yoff) set_bit ((ctx)->insertions, (yoff))
+#define NOTE_DELETE(ctx, xoff) set_bit ((ctx)->deletions, xoff)
+#define NOTE_INSERT(ctx, yoff) set_bit ((ctx)->insertions, yoff)
 #define EARLY_ABORT(ctx) compareseq_early_abort (ctx)
 
 struct context;
@@ -1956,6 +1954,28 @@ nil.  */)
   if (a == b)
     error ("Cannot replace a buffer with itself");
 
+  ptrdiff_t too_expensive;
+  if (NILP (max_costs))
+    too_expensive = 1000000;
+  else if (FIXNUMP (max_costs))
+    too_expensive = clip_to_bounds (0, XFIXNUM (max_costs), PTRDIFF_MAX);
+  else
+    {
+      CHECK_INTEGER (max_costs);
+      too_expensive = NILP (Fnatnump (max_costs)) ? 0 : PTRDIFF_MAX;
+    }
+
+  struct timespec time_limit = make_timespec (0, -1);
+  if (!NILP (max_secs))
+    {
+      struct timespec
+       tlim = timespec_add (current_timespec (),
+                            lisp_time_argument (max_secs)),
+       tmax = make_timespec (TYPE_MAXIMUM (time_t), TIMESPEC_HZ - 1);
+      if (timespec_cmp (tlim, tmax) < 0)
+       time_limit = tlim;
+    }
+
   ptrdiff_t min_a = BEGV;
   ptrdiff_t min_b = BUF_BEGV (b);
   ptrdiff_t size_a = ZV - min_a;
@@ -1985,36 +2005,24 @@ nil.  */)
 
   ptrdiff_t count = SPECPDL_INDEX ();
 
-  /* FIXME: It is not documented how to initialize the contents of the
-     context structure.  This code cargo-cults from the existing
-     caller in src/analyze.c of GNU Diffutils, which appears to
-     work.  */
 
   ptrdiff_t diags = size_a + size_b + 3;
+  ptrdiff_t del_bytes = size_a / CHAR_BIT + 1;
+  ptrdiff_t ins_bytes = size_b / CHAR_BIT + 1;
   ptrdiff_t *buffer;
+  ptrdiff_t bytes_needed;
+  if (INT_MULTIPLY_WRAPV (diags, 2 * sizeof *buffer, &bytes_needed)
+      || INT_ADD_WRAPV (del_bytes + ins_bytes, bytes_needed, &bytes_needed))
+    memory_full (SIZE_MAX);
   USE_SAFE_ALLOCA;
-  SAFE_NALLOCA (buffer, 2, diags);
-
-  if (NILP (max_costs))
-    XSETFASTINT (max_costs, 1000000);
-  else
-    CHECK_FIXNUM (max_costs);
-
-  struct timespec time_limit = make_timespec (0, -1);
-  if (!NILP (max_secs))
-    {
-      struct timespec
-       tlim = timespec_add (current_timespec (),
-                            lisp_time_argument (max_secs)),
-       tmax = make_timespec (TYPE_MAXIMUM (time_t), TIMESPEC_HZ - 1);
-      if (timespec_cmp (tlim, tmax) < 0)
-       time_limit = tlim;
-    }
+  buffer = SAFE_ALLOCA (bytes_needed);
+  unsigned char *deletions_insertions = memset (buffer + 2 * diags, 0,
+                                               del_bytes + ins_bytes);
 
-  /* Micro-optimization: Casting to size_t generates much better
-     code.  */
-  ptrdiff_t del_bytes = (size_t) size_a / CHAR_BIT + 1;
-  ptrdiff_t ins_bytes = (size_t) size_b / CHAR_BIT + 1;
+  /* FIXME: It is not documented how to initialize the contents of the
+     context structure.  This code cargo-cults from the existing
+     caller in src/analyze.c of GNU Diffutils, which appears to
+     work.  */
   struct context ctx = {
     .buffer_a = a,
     .buffer_b = b,
@@ -2022,21 +2030,22 @@ nil.  */)
     .beg_b = min_b,
     .a_unibyte = BUF_ZV (a) == BUF_ZV_BYTE (a),
     .b_unibyte = BUF_ZV (b) == BUF_ZV_BYTE (b),
-    .deletions = SAFE_ALLOCA (del_bytes),
-    .insertions = SAFE_ALLOCA (ins_bytes),
+    .deletions = deletions_insertions,
+    .insertions = deletions_insertions + del_bytes,
     .fdiag = buffer + size_b + 1,
     .bdiag = buffer + diags + size_b + 1,
     .heuristic = true,
-    .too_expensive = XFIXNUM (max_costs),
+    .too_expensive = too_expensive,
     .time_limit = time_limit,
-    .early_abort_tests = 0
   };
-  memclear (ctx.deletions, del_bytes);
-  memclear (ctx.insertions, ins_bytes);
 
   /* compareseq requires indices to be zero-based.  We add BEGV back
      later.  */
-  bool early_abort = compareseq (0, size_a, 0, size_b, false, &ctx);
+  bool early_abort;
+  if (! sys_setjmp (ctx.jmp))
+    early_abort = compareseq (0, size_a, 0, size_b, false, &ctx);
+  else
+    early_abort = true;
 
   if (early_abort)
     {
@@ -2046,8 +2055,6 @@ nil.  */)
       return Qnil;
     }
 
-  rbc_quitcounter = 0;
-
   Fundo_boundary ();
   bool modification_hooks_inhibited = false;
   record_unwind_protect_excursion ();
@@ -2071,13 +2078,12 @@ nil.  */)
      walk backwards, we don’t have to keep the positions in sync.  */
   while (i >= 0 || j >= 0)
     {
-      /* Allow the user to quit if this gets too slow.  */
-      rarely_quit (++rbc_quitcounter);
+      rarely_quit (++ctx.quitcounter);
 
       /* Check whether there is a change (insertion or deletion)
          before the current position.  */
-      if ((i > 0 && bit_is_set (ctx.deletions, i - 1)) ||
-          (j > 0 && bit_is_set (ctx.insertions, j - 1)))
+      if ((i > 0 && bit_is_set (ctx.deletions, i - 1))
+         || (j > 0 && bit_is_set (ctx.insertions, j - 1)))
        {
           ptrdiff_t end_a = min_a + i;
           ptrdiff_t end_b = min_b + j;
@@ -2087,8 +2093,6 @@ nil.  */)
          while (j > 0 && bit_is_set (ctx.insertions, j - 1))
             --j;
 
-         rarely_quit (rbc_quitcounter++);
-
           ptrdiff_t beg_a = min_a + i;
           ptrdiff_t beg_b = min_b + j;
           eassert (beg_a <= end_a);
@@ -2108,7 +2112,6 @@ nil.  */)
     }
 
   SAFE_FREE_UNBIND_TO (count, Qnil);
-  rbc_quitcounter = 0;
 
   if (modification_hooks_inhibited)
     {
@@ -2122,21 +2125,15 @@ nil.  */)
 static void
 set_bit (unsigned char *a, ptrdiff_t i)
 {
-  eassert (i >= 0);
-  /* Micro-optimization: Casting to size_t generates much better
-     code.  */
-  size_t j = i;
-  a[j / CHAR_BIT] |= (1 << (j % CHAR_BIT));
+  eassume (0 <= i);
+  a[i / CHAR_BIT] |= (1 << (i % CHAR_BIT));
 }
 
 static bool
 bit_is_set (const unsigned char *a, ptrdiff_t i)
 {
-  eassert (i >= 0);
-  /* Micro-optimization: Casting to size_t generates much better
-     code.  */
-  size_t j = i;
-  return a[j / CHAR_BIT] & (1 << (j % CHAR_BIT));
+  eassume (0 <= i);
+  return a[i / CHAR_BIT] & (1 << (i % CHAR_BIT));
 }
 
 /* Return true if the characters at position POS_A of buffer
@@ -2155,12 +2152,16 @@ static bool
 buffer_chars_equal (struct context *ctx,
                     ptrdiff_t pos_a, ptrdiff_t pos_b)
 {
+  if (!++ctx->quitcounter)
+    {
+      maybe_quit ();
+      if (compareseq_early_abort (ctx))
+       sys_longjmp (ctx->jmp, 1);
+    }
+
   pos_a += ctx->beg_a;
   pos_b += ctx->beg_b;
 
-  /* Allow the user to escape out of a slow compareseq call.  */
-  rarely_quit (++rbc_quitcounter);
-
   ptrdiff_t bpos_a =
     ctx->a_unibyte ? pos_a : buf_charpos_to_bytepos (ctx->buffer_a, pos_a);
   ptrdiff_t bpos_b =
diff --git a/src/fileio.c b/src/fileio.c
index 37072d9..c91af36 100644
--- a/src/fileio.c
+++ b/src/fileio.c
@@ -827,9 +827,9 @@ the root directory.  */)
   ptrdiff_t tlen;
 #ifdef DOS_NT
   int drive = 0;
-  bool collapse_newdir = true;
   bool is_escaped = 0;
 #endif /* DOS_NT */
+  bool collapse_newdir = true;
   ptrdiff_t length, nbytes;
   Lisp_Object handler, result, handled_name;
   bool multibyte;
@@ -1065,7 +1065,7 @@ the root directory.  */)
 #endif /* WINDOWSNT */
 #endif /* DOS_NT */
 
-  /* If nm is absolute, look for `/./' or `/../' or `//''sequences; if
+  /* If nm is absolute, look for "/./" or "/../" or "//" sequences; if
      none are found, we can probably return right away.  We will avoid
      allocating a new string if name is already fully expanded.  */
   if (
@@ -1183,9 +1183,7 @@ the root directory.  */)
              newdir = SSDATA (hdir);
              newdirlim = newdir + SBYTES (hdir);
            }
-#ifdef DOS_NT
          collapse_newdir = false;
-#endif
        }
       else                     /* ~user/filename */
        {
@@ -1205,9 +1203,7 @@ the root directory.  */)
 
              while (*++nm && !IS_DIRECTORY_SEP (*nm))
                continue;
-#ifdef DOS_NT
              collapse_newdir = false;
-#endif
            }
 
          /* If we don't find a user of that name, leave the name
@@ -1374,12 +1370,15 @@ the root directory.  */)
     }
 #endif /* DOS_NT */
 
+  length = newdirlim - newdir;
+
+#ifdef DOS_NT
   /* Ignore any slash at the end of newdir, unless newdir is
      just "/" or "//".  */
-  length = newdirlim - newdir;
   while (length > 1 && IS_DIRECTORY_SEP (newdir[length - 1])
         && ! (length == 2 && IS_DIRECTORY_SEP (newdir[0])))
     length--;
+#endif
 
   /* Now concatenate the directory and name to new space in the stack frame.  
*/
   tlen = length + file_name_as_directory_slop + (nmlim - nm) + 1;
@@ -1393,12 +1392,16 @@ the root directory.  */)
 #else  /* not DOS_NT */
   target = SAFE_ALLOCA (tlen);
 #endif /* not DOS_NT */
-  *target = 0;
   nbytes = 0;
 
   if (newdir)
     {
-      if (nm[0] == 0 || IS_DIRECTORY_SEP (nm[0]))
+#ifndef DOS_NT
+      bool treat_as_absolute = !collapse_newdir;
+#else
+      bool treat_as_absolute = !nm[0] || IS_DIRECTORY_SEP (nm[0]);
+#endif
+      if (treat_as_absolute)
        {
 #ifdef DOS_NT
          /* If newdir is effectively "C:/", then the drive letter will have
@@ -1410,13 +1413,23 @@ the root directory.  */)
                && newdir[1] == '\0'))
 #endif
            {
+             /* With ~ or ~user, leave NEWDIR as-is to avoid transforming
+                it from a symlink (or a regular file!) into a directory.  */
              memcpy (target, newdir, length);
-             target[length] = 0;
              nbytes = length;
            }
        }
       else
        nbytes = file_name_as_directory (target, newdir, length, multibyte);
+
+#ifndef DOS_NT
+      /* If TARGET ends in a directory separator, omit leading
+        directory separators from NM so that concatenating a TARGET "/"
+        to an NM "/foo" does not result in the incorrect "//foo".  */
+      if (nbytes && IS_DIRECTORY_SEP (target[nbytes - 1]))
+       while (IS_DIRECTORY_SEP (nm[0]))
+         nm++;
+#endif
     }
 
   memcpy (target + nbytes, nm, nmlim - nm + 1);
@@ -1433,6 +1446,20 @@ the root directory.  */)
          {
            *o++ = *p++;
          }
+#ifndef DOS_NT
+       else if (p[1] == '.' && IS_DIRECTORY_SEP (p[2]))
+         {
+           /* Replace "/./" with "/".  */
+           p += 2;
+         }
+       else if (p[1] == '.' && !p[2])
+         {
+           /* At the end of the file name, replace "/." with "/".
+              The trailing "/" is for symlinks.  */
+           *o++ = *p;
+           p += 2;
+         }
+#else
        else if (p[1] == '.'
                 && (IS_DIRECTORY_SEP (p[2])
                     || p[2] == 0))
@@ -1443,6 +1470,7 @@ the root directory.  */)
              *o++ = *p;
            p += 2;
          }
+#endif
        else if (p[1] == '.' && p[2] == '.'
                 /* `/../' is the "superroot" on certain file systems.
                    Turned off on DOS_NT systems because they have no
@@ -1456,21 +1484,35 @@ the root directory.  */)
 #endif
                 && (IS_DIRECTORY_SEP (p[3]) || p[3] == 0))
          {
-#ifdef WINDOWSNT
+#ifndef DOS_NT
+           while (o != target)
+             {
+               o--;
+               if (IS_DIRECTORY_SEP (*o))
+                 {
+                   /* Keep "/" at the end of the name, for symlinks.  */
+                   o += p[3] == 0;
+
+                   break;
+                 }
+             }
+#else
+# ifdef WINDOWSNT
            char *prev_o = o;
-#endif
+# endif
            while (o != target && (--o, !IS_DIRECTORY_SEP (*o)))
              continue;
-#ifdef WINDOWSNT
+# ifdef WINDOWSNT
            /* Don't go below server level in UNC filenames.  */
            if (o == target + 1 && IS_DIRECTORY_SEP (*o)
                && IS_DIRECTORY_SEP (*target))
              o = prev_o;
            else
-#endif
+# endif
            /* Keep initial / only if this is the whole name.  */
            if (o == target && IS_ANY_SEP (*o) && p[3] == 0)
              ++o;
+#endif
            p += 3;
          }
        else if (IS_DIRECTORY_SEP (p[1])
diff --git a/src/font.c b/src/font.c
index 5c01c7f..2786a77 100644
--- a/src/font.c
+++ b/src/font.c
@@ -5521,11 +5521,11 @@ footprint in sessions that use lots of different fonts. 
 */);
 #endif
 
   DEFVAR_BOOL ("xft-ignore-color-fonts",
-              Vxft_ignore_color_fonts,
+              xft_ignore_color_fonts,
               doc: /*
 Non-nil means don't query fontconfig for color fonts, since they often
 cause Xft crashes.  Only has an effect in Xft builds.  */);
-  Vxft_ignore_color_fonts = 1;
+  xft_ignore_color_fonts = true;
 
 #ifdef HAVE_WINDOW_SYSTEM
 #ifdef HAVE_FREETYPE
diff --git a/src/ftfont.c b/src/ftfont.c
index a904007..6fca9c8 100644
--- a/src/ftfont.c
+++ b/src/ftfont.c
@@ -768,7 +768,7 @@ ftfont_spec_pattern (Lisp_Object spec, char *otlayout, 
struct OpenTypeSpec **ots
 #if defined HAVE_XFT && defined FC_COLOR
   /* We really don't like color fonts, they cause Xft crashes.  See
      Bug#30874.  */
-  if (Vxft_ignore_color_fonts
+  if (xft_ignore_color_fonts
       && ! FcPatternAddBool (pattern, FC_COLOR, FcFalse))
     goto err;
 #endif
@@ -911,7 +911,7 @@ ftfont_list (struct frame *f, Lisp_Object spec)
            returns them even when it shouldn't really do so, so we
            need to manually skip them here (Bug#37786).  */
         FcBool b;
-        if (Vxft_ignore_color_fonts
+        if (xft_ignore_color_fonts
             && FcPatternGetBool (fontset->fonts[i], FC_COLOR, 0, &b)
             == FcResultMatch && b != FcFalse)
             continue;
diff --git a/src/gnutls.c b/src/gnutls.c
index 416fb15..0010553 100644
--- a/src/gnutls.c
+++ b/src/gnutls.c
@@ -2298,6 +2298,8 @@ gnutls_symmetric_aead (bool encrypting, 
gnutls_cipher_algorithm_t gca,
 # endif
 }
 
+static Lisp_Object cipher_cache;
+
 static Lisp_Object
 gnutls_symmetric (bool encrypting, Lisp_Object cipher,
                   Lisp_Object key, Lisp_Object iv,
@@ -2329,7 +2331,9 @@ gnutls_symmetric (bool encrypting, Lisp_Object cipher,
 
   if (SYMBOLP (cipher))
     {
-      info = Fassq (cipher, Fgnutls_ciphers ());
+      if (NILP (cipher_cache))
+       cipher_cache = Fgnutls_ciphers ();
+      info = Fassq (cipher, cipher_cache);
       if (!CONSP (info))
        xsignal2 (Qerror,
                  build_string ("GnuTLS cipher is invalid or not found"),
@@ -2914,6 +2918,9 @@ level in the ones.  For builds without libgnutls, the 
value is -1.  */);
   defsubr (&Sgnutls_hash_digest);
   defsubr (&Sgnutls_symmetric_encrypt);
   defsubr (&Sgnutls_symmetric_decrypt);
+
+  cipher_cache = Qnil;
+  staticpro (&cipher_cache);
 #endif
 
   DEFVAR_INT ("gnutls-log-level", global_gnutls_log_level,
diff --git a/src/gtkutil.c b/src/gtkutil.c
index 1fe160a..fafd94c 100644
--- a/src/gtkutil.c
+++ b/src/gtkutil.c
@@ -5113,7 +5113,7 @@ update_frame_tool_bar (struct frame *f)
           else
             idx = -1;
 
-          img_id = lookup_image (f, image);
+          img_id = lookup_image (f, image, -1);
           img = IMAGE_FROM_ID (f, img_id);
           prepare_image_for_display (f, img);
 
diff --git a/src/image.c b/src/image.c
index 123de54..35c5946 100644
--- a/src/image.c
+++ b/src/image.c
@@ -758,10 +758,10 @@ struct image_type
 
   /* Load IMG which is used on frame F from information contained in
      IMG->spec.  Value is true if successful.  */
-  bool (*load) (struct frame *f, struct image *img);
+  bool (*load_img) (struct frame *f, struct image *img);
 
   /* Free resources of image IMG which is used on frame F.  */
-  void (*free) (struct frame *f, struct image *img);
+  void (*free_img) (struct frame *f, struct image *img);
 
 #ifdef WINDOWSNT
   /* Initialization function (used for dynamic loading of image
@@ -1081,7 +1081,7 @@ calling this function.  */)
   if (valid_image_p (spec))
     {
       struct frame *f = decode_window_system_frame (frame);
-      ptrdiff_t id = lookup_image (f, spec);
+      ptrdiff_t id = lookup_image (f, spec, -1);
       struct image *img = IMAGE_FROM_ID (f, id);
       int width = img->width + 2 * img->hmargin;
       int height = img->height + 2 * img->vmargin;
@@ -1111,7 +1111,7 @@ or omitted means use the selected frame.  */)
   if (valid_image_p (spec))
     {
       struct frame *f = decode_window_system_frame (frame);
-      ptrdiff_t id = lookup_image (f, spec);
+      ptrdiff_t id = lookup_image (f, spec, -1);
       struct image *img = IMAGE_FROM_ID (f, id);
       if (img->mask)
        mask = Qt;
@@ -1134,7 +1134,7 @@ or omitted means use the selected frame.  */)
   if (valid_image_p (spec))
     {
       struct frame *f = decode_window_system_frame (frame);
-      ptrdiff_t id = lookup_image (f, spec);
+      ptrdiff_t id = lookup_image (f, spec, -1);
       struct image *img = IMAGE_FROM_ID (f, id);
       ext = img->lisp_data;
     }
@@ -1197,13 +1197,8 @@ free_image (struct frame *f, struct image *img)
         XRenderFreePicture (FRAME_X_DISPLAY (f), img->mask_picture);
 #endif
 
-      /* Windows NT redefines 'free', but in this file, we need to
-         avoid the redefinition.  */
-#ifdef WINDOWSNT
-#undef free
-#endif
       /* Free resources, then free IMG.  */
-      img->type->free (f, img);
+      img->type->free_img (f, img);
       xfree (img);
     }
 }
@@ -1249,7 +1244,7 @@ prepare_image_for_display (struct frame *f, struct image 
*img)
   /* If IMG doesn't have a pixmap yet, load it now, using the image
      type dependent loader function.  */
   if (img->pixmap == NO_PIXMAP && !img->load_failed_p)
-    img->load_failed_p = ! img->type->load (f, img);
+    img->load_failed_p = ! img->type->load_img (f, img);
 
 #ifdef USE_CAIRO
   if (!img->load_failed_p)
@@ -1266,7 +1261,7 @@ prepare_image_for_display (struct frame *f, struct image 
*img)
          if (img->cr_data == NULL)
            {
              img->load_failed_p = 1;
-             img->type->free (f, img);
+             img->type->free_img (f, img);
            }
        }
       unblock_input ();
@@ -1611,7 +1606,9 @@ equal_lists (Lisp_Object a, Lisp_Object b)
 /* Find an image matching SPEC in the cache, and return it.  If no
    image is found, return NULL.  */
 static struct image *
-search_image_cache (struct frame *f, Lisp_Object spec, EMACS_UINT hash)
+search_image_cache (struct frame *f, Lisp_Object spec, EMACS_UINT hash,
+                    unsigned long foreground, unsigned long background,
+                    bool ignore_colors)
 {
   struct image *img;
   struct image_cache *c = FRAME_IMAGE_CACHE (f);
@@ -1634,8 +1631,8 @@ search_image_cache (struct frame *f, Lisp_Object spec, 
EMACS_UINT hash)
   for (img = c->buckets[i]; img; img = img->next)
     if (img->hash == hash
        && equal_lists (img->spec, spec)
-       && img->frame_foreground == FRAME_FOREGROUND_PIXEL (f)
-       && img->frame_background == FRAME_BACKGROUND_PIXEL (f))
+       && (ignore_colors || (img->face_foreground == foreground
+                              && img->face_background == background)))
       break;
   return img;
 }
@@ -1646,8 +1643,13 @@ search_image_cache (struct frame *f, Lisp_Object spec, 
EMACS_UINT hash)
 static void
 uncache_image (struct frame *f, Lisp_Object spec)
 {
-  struct image *img = search_image_cache (f, spec, sxhash (spec));
-  if (img)
+  struct image *img;
+
+  /* Because the background colors are based on the current face, we
+     can have multiple copies of an image with the same spec. We want
+     to remove them all to ensure the user doesn't see an old version
+     of the image when the face changes.  */
+  while ((img = search_image_cache (f, spec, sxhash (spec), 0, 0, true)))
     {
       free_image (f, img);
       /* As display glyphs may still be referring to the image ID, we
@@ -2133,7 +2135,17 @@ image_set_transform (struct frame *f, struct image *img)
 
   /* Determine size.  */
   int width, height;
-  compute_image_size (img->width, img->height, img->spec, &width, &height);
+
+#ifdef HAVE_RSVG
+  /* SVGs are pre-scaled to the correct size.  */
+  if (EQ (image_spec_value (img->spec, QCtype, NULL), Qsvg))
+    {
+      width = img->width;
+      height = img->height;
+    }
+  else
+#endif
+    compute_image_size (img->width, img->height, img->spec, &width, &height);
 
   /* Determine rotation.  */
   double rotation = 0.0;
@@ -2312,11 +2324,16 @@ image_set_transform (struct frame *f, struct image *img)
    SPEC must be a valid Lisp image specification (see valid_image_p).  */
 
 ptrdiff_t
-lookup_image (struct frame *f, Lisp_Object spec)
+lookup_image (struct frame *f, Lisp_Object spec, int face_id)
 {
   struct image *img;
   EMACS_UINT hash;
 
+  struct face *face = (face_id >= 0) ? FACE_FROM_ID (f, face_id)
+    : FACE_FROM_ID (f, DEFAULT_FACE_ID);
+  unsigned long foreground = FACE_COLOR_TO_PIXEL (face->foreground, f);
+  unsigned long background = FACE_COLOR_TO_PIXEL (face->background, f);
+
   /* F must be a window-system frame, and SPEC must be a valid image
      specification.  */
   eassert (FRAME_WINDOW_P (f));
@@ -2324,7 +2341,7 @@ lookup_image (struct frame *f, Lisp_Object spec)
 
   /* Look up SPEC in the hash table of the image cache.  */
   hash = sxhash (spec);
-  img = search_image_cache (f, spec, hash);
+  img = search_image_cache (f, spec, hash, foreground, background, true);
   if (img && img->load_failed_p)
     {
       free_image (f, img);
@@ -2337,9 +2354,9 @@ lookup_image (struct frame *f, Lisp_Object spec)
       block_input ();
       img = make_image (spec, hash);
       cache_image (f, img);
-      img->load_failed_p = ! img->type->load (f, img);
-      img->frame_foreground = FRAME_FOREGROUND_PIXEL (f);
-      img->frame_background = FRAME_BACKGROUND_PIXEL (f);
+      img->face_foreground = foreground;
+      img->face_background = background;
+      img->load_failed_p = ! img->type->load_img (f, img);
 
       /* If we can't load the image, and we don't have a width and
         height, use some arbitrary width and height so that we can
@@ -2393,8 +2410,7 @@ lookup_image (struct frame *f, Lisp_Object spec)
              if (!NILP (bg))
                {
                  img->background
-                   = image_alloc_image_color (f, img, bg,
-                                               FRAME_BACKGROUND_PIXEL (f));
+                   = image_alloc_image_color (f, img, bg, background);
                  img->background_valid = 1;
                }
            }
@@ -3667,8 +3683,8 @@ xbm_load_image (struct frame *f, struct image *img, char 
*contents, char *end)
                             &data, 0);
   if (rc)
     {
-      unsigned long foreground = FRAME_FOREGROUND_PIXEL (f);
-      unsigned long background = FRAME_BACKGROUND_PIXEL (f);
+      unsigned long foreground = img->face_foreground;
+      unsigned long background = img->face_background;
       bool non_default_colors = 0;
       Lisp_Object value;
 
@@ -3764,8 +3780,8 @@ xbm_load (struct frame *f, struct image *img)
     {
       struct image_keyword fmt[XBM_LAST];
       Lisp_Object data;
-      unsigned long foreground = FRAME_FOREGROUND_PIXEL (f);
-      unsigned long background = FRAME_BACKGROUND_PIXEL (f);
+      unsigned long foreground = img->face_foreground;
+      unsigned long background = img->face_background;
       bool non_default_colors = 0;
       char *bits;
       bool parsed_p;
@@ -6125,8 +6141,8 @@ pbm_load (struct frame *f, struct image *img)
       unsigned char c = 0;
       int g;
       struct image_keyword fmt[PBM_LAST];
-      unsigned long fg = FRAME_FOREGROUND_PIXEL (f);
-      unsigned long bg = FRAME_BACKGROUND_PIXEL (f);
+      unsigned long fg = img->face_foreground;
+      unsigned long bg = img->face_background;
       /* Parse the image specification.  */
       memcpy (fmt, pbm_format, sizeof fmt);
       parse_image_spec (img->spec, fmt, PBM_LAST, Qpbm);
@@ -9433,6 +9449,7 @@ enum svg_keyword_index
   SVG_ALGORITHM,
   SVG_HEURISTIC_MASK,
   SVG_MASK,
+  SVG_FOREGROUND,
   SVG_BACKGROUND,
   SVG_LAST
 };
@@ -9451,6 +9468,7 @@ static const struct image_keyword svg_format[SVG_LAST] =
   {":conversion",      IMAGE_DONT_CHECK_VALUE_TYPE,            0},
   {":heuristic-mask",  IMAGE_DONT_CHECK_VALUE_TYPE,            0},
   {":mask",            IMAGE_DONT_CHECK_VALUE_TYPE,            0},
+  {":foreground",      IMAGE_STRING_OR_NIL_VALUE,              0},
   {":background",      IMAGE_STRING_OR_NIL_VALUE,              0}
 };
 
@@ -9715,6 +9733,8 @@ svg_load_image (struct frame *f, struct image *img, char 
*contents,
   int height;
   const guint8 *pixels;
   int rowstride;
+  char *wrapped_contents = NULL;
+  ptrdiff_t wrapped_size;
 
 #if ! GLIB_CHECK_VERSION (2, 36, 0)
   /* g_type_init is a glib function that must be called prior to
@@ -9722,6 +9742,8 @@ svg_load_image (struct frame *f, struct image *img, char 
*contents,
   g_type_init ();
 #endif
 
+  /* Parse the unmodified SVG data so we can get its initial size.  */
+
 #if LIBRSVG_CHECK_VERSION (2, 32, 0)
   GInputStream *input_stream
     = g_memory_input_stream_new_from_data (contents, size, NULL);
@@ -9750,6 +9772,105 @@ svg_load_image (struct frame *f, struct image *img, 
char *contents,
   rsvg_handle_write (rsvg_handle, (unsigned char *) contents, size, &err);
   if (err) goto rsvg_error;
 
+  /* The parsing is complete, rsvg_handle is ready to be used, close
+     it for further writes.  */
+  rsvg_handle_close (rsvg_handle, &err);
+  if (err) goto rsvg_error;
+#endif
+
+  /* Get the image dimensions.  */
+  rsvg_handle_get_dimensions (rsvg_handle, &dimension_data);
+
+  /* We are now done with the unmodified data.  */
+  g_object_unref (rsvg_handle);
+
+  /* Calculate the final image size.  */
+  compute_image_size (dimension_data.width, dimension_data.height,
+                      img->spec, &width, &height);
+
+  /* Wrap the SVG data in another SVG.  This allows us to set the
+     width and height, as well as modify the foreground and background
+     colors.  */
+  {
+    Lisp_Object value;
+    unsigned long foreground = img->face_foreground;
+    unsigned long background = img->face_background;
+
+    Lisp_Object encoded_contents
+      = Fbase64_encode_string (make_unibyte_string (contents, size), Qt);
+
+    /* The wrapper sets the foreground color, width and height, and
+       viewBox must contain the dimensions of the original image.  It
+       also draws a rectangle over the whole space, set to the
+       background color, before including the original image.  This
+       acts to set the background color, instead of leaving it
+       transparent.  */
+    const char *wrapper =
+      "<svg xmlns:xlink=\"http://www.w3.org/1999/xlink\"; "
+      "xmlns:xi=\"http://www.w3.org/2001/XInclude\"; "
+      "style=\"color: #%06X; fill: currentColor;\" "
+      "width=\"%d\" height=\"%d\" preserveAspectRatio=\"none\" "
+      "viewBox=\"0 0 %d %d\">"
+      "<rect width=\"100%%\" height=\"100%%\" fill=\"#%06X\"/>"
+      "<xi:include href=\"data:image/svg+xml;base64,%s\"></xi:include>"
+      "</svg>";
+
+    /* FIXME: I've added 64 in the hope it will cover the size of the
+       width and height strings and things.  */
+    int buffer_size = SBYTES (encoded_contents) + strlen (wrapper) + 64;
+
+    value = image_spec_value (img->spec, QCforeground, NULL);
+    if (!NILP (value))
+      foreground = image_alloc_image_color (f, img, value, 
img->face_foreground);
+    value = image_spec_value (img->spec, QCbackground, NULL);
+    if (!NILP (value))
+      {
+        background = image_alloc_image_color (f, img, value, 
img->face_background);
+        img->background = background;
+        img->background_valid = 1;
+      }
+
+    wrapped_contents = malloc (buffer_size);
+
+    if (!wrapped_contents
+        || buffer_size <= snprintf (wrapped_contents, buffer_size, wrapper,
+                                    foreground & 0xFFFFFF, width, height,
+                                    dimension_data.width, 
dimension_data.height,
+                                    background & 0xFFFFFF, SSDATA 
(encoded_contents)))
+      goto rsvg_error;
+
+    wrapped_size = strlen (wrapped_contents);
+  }
+
+  /* Now we parse the wrapped version.  */
+
+#if LIBRSVG_CHECK_VERSION (2, 32, 0)
+  input_stream = g_memory_input_stream_new_from_data (wrapped_contents, 
wrapped_size, NULL);
+  base_file = filename ? g_file_new_for_path (filename) : NULL;
+  rsvg_handle = rsvg_handle_new_from_stream_sync (input_stream, base_file,
+                                                 RSVG_HANDLE_FLAGS_NONE,
+                                                 NULL, &err);
+  if (base_file)
+    g_object_unref (base_file);
+  g_object_unref (input_stream);
+
+  /* Check rsvg_handle too, to avoid librsvg 2.40.13 bug (Bug#36773#26).  */
+  if (!rsvg_handle || err) goto rsvg_error;
+#else
+  /* Make a handle to a new rsvg object.  */
+  rsvg_handle = rsvg_handle_new ();
+  eassume (rsvg_handle);
+
+  /* Set base_uri for properly handling referenced images (via 'href').
+     See rsvg bug 596114 - "image refs are relative to curdir, not .svg file"
+     <https://gitlab.gnome.org/GNOME/librsvg/issues/33>. */
+  if (filename)
+    rsvg_handle_set_base_uri (rsvg_handle, filename);
+
+  /* Parse the contents argument and fill in the rsvg_handle.  */
+  rsvg_handle_write (rsvg_handle, (unsigned char *) wrapped_contents, 
wrapped_size, &err);
+  if (err) goto rsvg_error;
+
   /* The parsing is complete, rsvg_handle is ready to used, close it
      for further writes.  */
   rsvg_handle_close (rsvg_handle, &err);
@@ -9768,6 +9889,7 @@ svg_load_image (struct frame *f, struct image *img, char 
*contents,
   pixbuf = rsvg_handle_get_pixbuf (rsvg_handle);
   if (!pixbuf) goto rsvg_error;
   g_object_unref (rsvg_handle);
+  free (wrapped_contents);
 
   /* Extract some meta data from the svg handle.  */
   width     = gdk_pixbuf_get_width (pixbuf);
@@ -9792,25 +9914,6 @@ svg_load_image (struct frame *f, struct image *img, char 
*contents,
 
     init_color_table ();
 
-    /* Handle alpha channel by combining the image with a background
-       color.  */
-    Emacs_Color background;
-    Lisp_Object specified_bg = image_spec_value (img->spec, QCbackground, 
NULL);
-    if (!STRINGP (specified_bg)
-       || !FRAME_TERMINAL (f)->defined_color_hook (f,
-                                                    SSDATA (specified_bg),
-                                                    &background,
-                                                    false,
-                                                    false))
-      FRAME_TERMINAL (f)->query_frame_background_color (f, &background);
-
-    /* SVG pixmaps specify transparency in the last byte, so right
-       shift 8 bits to get rid of it, since emacs doesn't support
-       transparency.  */
-    background.red   >>= 8;
-    background.green >>= 8;
-    background.blue  >>= 8;
-
     /* This loop handles opacity values, since Emacs assumes
        non-transparent images.  Each pixel must be "flattened" by
        calculating the resulting color, given the transparency of the
@@ -9822,16 +9925,11 @@ svg_load_image (struct frame *f, struct image *img, 
char *contents,
            int red     = *pixels++;
            int green   = *pixels++;
            int blue    = *pixels++;
-           int opacity = *pixels++;
 
-           red   = ((red * opacity)
-                    + (background.red * ((1 << 8) - opacity)));
-           green = ((green * opacity)
-                    + (background.green * ((1 << 8) - opacity)));
-           blue  = ((blue * opacity)
-                    + (background.blue * ((1 << 8) - opacity)));
+            /* Skip opacity.  */
+           pixels++;
 
-           PUT_PIXEL (ximg, x, y, lookup_rgb_color (f, red, green, blue));
+           PUT_PIXEL (ximg, x, y, lookup_rgb_color (f, red << 8, green << 8, 
blue << 8));
          }
 
        pixels += rowstride - 4 * width;
@@ -9861,6 +9959,8 @@ svg_load_image (struct frame *f, struct image *img, char 
*contents,
  rsvg_error:
   if (rsvg_handle)
     g_object_unref (rsvg_handle);
+  if (wrapped_contents)
+    free (wrapped_contents);
   /* FIXME: Use error->message so the user knows what is the actual
      problem with the image.  */
   image_error ("Error parsing SVG image `%s'", img->spec);
@@ -10159,7 +10259,7 @@ DEFUN ("lookup-image", Flookup_image, Slookup_image, 1, 
1, 0,
   ptrdiff_t id = -1;
 
   if (valid_image_p (spec))
-    id = lookup_image (SELECTED_FRAME (), spec);
+    id = lookup_image (SELECTED_FRAME (), spec, -1);
 
   debug_print (spec);
   return make_fixnum (id);
diff --git a/src/keymap.c b/src/keymap.c
index d98b27b..0608bdd 100644
--- a/src/keymap.c
+++ b/src/keymap.c
@@ -3277,7 +3277,7 @@ describe_map (Lisp_Object map, Lisp_Object prefix,
          ptrdiff_t pt = max (PT - 1, BEG);
 
          SET_PT (pt);
-         insert_string ("\n  (that binding is currently shadowed by another 
mode)");
+         insert_string ("\n  (this binding is currently shadowed)");
          pt = min (PT + 1, Z);
          SET_PT (pt);
        }
diff --git a/src/nsmenu.m b/src/nsmenu.m
index b7e4cbd..e313fc03 100644
--- a/src/nsmenu.m
+++ b/src/nsmenu.m
@@ -1092,7 +1092,7 @@ update_frame_tool_bar (struct frame *f)
           continue;
         }
 
-      img_id = lookup_image (f, image);
+      img_id = lookup_image (f, image, -1);
       img = IMAGE_FROM_ID (f, img_id);
       prepare_image_for_display (f, img);
 
diff --git a/src/regex-emacs.c b/src/regex-emacs.c
index c44cce9..971a5f6 100644
--- a/src/regex-emacs.c
+++ b/src/regex-emacs.c
@@ -929,7 +929,7 @@ typedef struct
    ? 0                                                                 \
    : ((fail_stack).stack                                               \
       = REGEX_REALLOCATE ((fail_stack).stack,                          \
-         (fail_stack).size * sizeof (fail_stack_elt_t),                \
+         (fail_stack).avail * sizeof (fail_stack_elt_t),               \
           min (emacs_re_max_failures * TYPICAL_FAILURE_SIZE,                  \
                ((fail_stack).size * FAIL_STACK_GROWTH_FACTOR))          \
           * sizeof (fail_stack_elt_t)),                                 \
@@ -969,7 +969,11 @@ typedef struct
 #define ENSURE_FAIL_STACK(space)                                       \
 while (REMAINING_AVAIL_SLOTS <= space) {                               \
   if (!GROW_FAIL_STACK (fail_stack))                                   \
-    return -2;                                                         \
+    {                                                                  \
+      unbind_to (count, Qnil);                                         \
+      SAFE_FREE ();                                                    \
+      return -2;                                                       \
+    }                                                                  \
   DEBUG_PRINT ("\n  Doubled stack; size now: %td\n", fail_stack.size); \
   DEBUG_PRINT ("        slots available: %td\n", REMAINING_AVAIL_SLOTS);\
 }
@@ -979,6 +983,8 @@ while (REMAINING_AVAIL_SLOTS <= space) {                    
        \
 do {                                                                   \
   char *destination;                                                   \
   intptr_t n = num;                                                    \
+  eassert (0 < n && n < num_regs);                                     \
+  eassert (REG_UNSET (regstart[n]) <= REG_UNSET (regend[n]));          \
   ENSURE_FAIL_STACK(3);                                                        
\
   DEBUG_PRINT ("    Push reg %"PRIdPTR" (spanning %p -> %p)\n",                
\
               n, regstart[n], regend[n]);                              \
@@ -1017,8 +1023,10 @@ do {                                                     
                \
     }                                                                  \
   else                                                                 \
     {                                                                  \
+      eassert (0 < pfreg && pfreg < num_regs);                         \
       regend[pfreg] = POP_FAILURE_POINTER ();                          \
       regstart[pfreg] = POP_FAILURE_POINTER ();                                
\
+      eassert (REG_UNSET (regstart[pfreg]) <= REG_UNSET (regend[pfreg])); \
       DEBUG_PRINT ("     Pop reg %ld (spanning %p -> %p)\n",           \
                   pfreg, regstart[pfreg], regend[pfreg]);              \
     }                                                                  \
@@ -3864,6 +3872,10 @@ re_match_2_internal (struct re_pattern_buffer *bufp,
                     re_char *string2, ptrdiff_t size2,
                     ptrdiff_t pos, struct re_registers *regs, ptrdiff_t stop)
 {
+  eassume (0 <= size1);
+  eassume (0 <= size2);
+  eassume (0 <= pos && pos <= stop && stop <= size1 + size2);
+
   /* General temporaries.  */
   int mcnt;
 
@@ -3919,8 +3931,7 @@ re_match_2_internal (struct re_pattern_buffer *bufp,
      attempt) by a subexpression part of the pattern, that is, the
      regnum-th regstart pointer points to where in the pattern we began
      matching and the regnum-th regend points to right after where we
-     stopped matching the regnum-th subexpression.  (The zeroth register
-     keeps track of what the whole pattern matches.)  */
+     stopped matching the regnum-th subexpression.  */
   re_char **regstart UNINIT, **regend UNINIT;
 
   /* The following record the register info as found in the above
@@ -3969,29 +3980,22 @@ re_match_2_internal (struct re_pattern_buffer *bufp,
   /* Do not bother to initialize all the register variables if there are
      no groups in the pattern, as it takes a fair amount of time.  If
      there are groups, we include space for register 0 (the whole
-     pattern), even though we never use it, since it simplifies the
-     array indexing.  We should fix this.  */
-  if (bufp->re_nsub)
+     pattern) in REGSTART[0], even though we never use it, to avoid
+     the undefined behavior of subtracting 1 from REGSTART.  */
+  ptrdiff_t re_nsub = num_regs - 1;
+  if (0 < re_nsub)
     {
-      regstart = SAFE_ALLOCA (num_regs * 4 * sizeof *regstart);
+      regstart = SAFE_ALLOCA ((re_nsub * 4 + 1) * sizeof *regstart);
       regend = regstart + num_regs;
-      best_regstart = regend + num_regs;
-      best_regend = best_regstart + num_regs;
-    }
+      best_regstart = regend + re_nsub;
+      best_regend = best_regstart + re_nsub;
 
-  /* The starting position is bogus.  */
-  if (pos < 0 || pos > size1 + size2)
-    {
-      unbind_to (count, Qnil);
-      SAFE_FREE ();
-      return -1;
+      /* Initialize subexpression text positions to unset, to mark ones
+        that no start_memory/stop_memory has been seen for.  */
+      for (re_char **apos = regstart + 1; apos < best_regstart + 1; apos++)
+       *apos = NULL;
     }
 
-  /* Initialize subexpression text positions to -1 to mark ones that no
-     start_memory/stop_memory has been seen for.  */
-  for (ptrdiff_t reg = 1; reg < num_regs; reg++)
-    regstart[reg] = regend[reg] = NULL;
-
   /* We move 'string1' into 'string2' if the latter's empty -- but not if
      'string1' is null.  */
   if (size2 == 0 && string1 != NULL)
@@ -4126,6 +4130,8 @@ re_match_2_internal (struct re_pattern_buffer *bufp,
                    {
                      regstart[reg] = best_regstart[reg];
                      regend[reg] = best_regend[reg];
+                     eassert (REG_UNSET (regstart[reg])
+                              <= REG_UNSET (regend[reg]));
                    }
                }
            } /* d != end_match_2 */
@@ -4173,7 +4179,9 @@ re_match_2_internal (struct re_pattern_buffer *bufp,
 
              for (ptrdiff_t reg = 1; reg < num_regs; reg++)
                {
-                 if (REG_UNSET (regstart[reg]) || REG_UNSET (regend[reg]))
+                 eassert (REG_UNSET (regstart[reg])
+                          <= REG_UNSET (regend[reg]));
+                 if (REG_UNSET (regend[reg]))
                    regs->start[reg] = regs->end[reg] = -1;
                  else
                    {
@@ -4373,12 +4381,12 @@ re_match_2_internal (struct re_pattern_buffer *bufp,
           registers data structure) under the register number.  */
        case start_memory:
          DEBUG_PRINT ("EXECUTING start_memory %d:\n", *p);
+         eassert (0 < *p && *p < num_regs);
 
          /* In case we need to undo this operation (via backtracking).  */
          PUSH_FAILURE_REG (*p);
 
          regstart[*p] = d;
-         regend[*p] = NULL;    /* probably unnecessary.  -sm  */
          DEBUG_PRINT ("  regstart: %td\n", POINTER_TO_OFFSET (regstart[*p]));
 
          /* Move past the register number and inner group count.  */
@@ -4391,6 +4399,7 @@ re_match_2_internal (struct re_pattern_buffer *bufp,
        case stop_memory:
          DEBUG_PRINT ("EXECUTING stop_memory %d:\n", *p);
 
+         eassert (0 < *p && *p < num_regs);
          eassert (!REG_UNSET (regstart[*p]));
          /* Strictly speaking, there should be code such as:
 
@@ -4423,7 +4432,9 @@ re_match_2_internal (struct re_pattern_buffer *bufp,
            DEBUG_PRINT ("EXECUTING duplicate %d.\n", regno);
 
            /* Can't back reference a group which we've never matched.  */
-           if (REG_UNSET (regstart[regno]) || REG_UNSET (regend[regno]))
+           eassert (0 < regno && regno < num_regs);
+           eassert (REG_UNSET (regstart[regno]) <= REG_UNSET (regend[regno]));
+           if (REG_UNSET (regend[regno]))
              goto fail;
 
            /* Where in input to try to start matching.  */
diff --git a/src/syntax.c b/src/syntax.c
index 9f77ea5..7f0fc34 100644
--- a/src/syntax.c
+++ b/src/syntax.c
@@ -807,7 +807,7 @@ back_comment (ptrdiff_t from, ptrdiff_t from_byte, 
ptrdiff_t stop,
 
       /* Ignore escaped characters, except comment-enders which cannot
          be escaped.  */
-      if ((Vcomment_end_can_be_escaped || code != Sendcomment)
+      if ((comment_end_can_be_escaped || code != Sendcomment)
           && char_quoted (from, from_byte))
        continue;
 
@@ -2336,7 +2336,7 @@ forw_comment (ptrdiff_t from, ptrdiff_t from_byte, 
ptrdiff_t stop,
          && SYNTAX_FLAGS_COMMENT_STYLE (syntax, 0) == style
          && (SYNTAX_FLAGS_COMMENT_NESTED (syntax) ?
              (nesting > 0 && --nesting == 0) : nesting < 0)
-          && !(Vcomment_end_can_be_escaped && char_quoted (from, from_byte)))
+          && !(comment_end_can_be_escaped && char_quoted (from, from_byte)))
        /* We have encountered a comment end of the same style
           as the comment sequence which began this comment
           section.  */
@@ -2569,7 +2569,7 @@ between them, return t; otherwise return nil.  */)
            }
          else if (code == Sendcomment)
            {
-              found = (!quoted || !Vcomment_end_can_be_escaped)
+              found = (!quoted || !comment_end_can_be_escaped)
                 && back_comment (from, from_byte, stop, comnested, comstyle,
                                  &out_charpos, &out_bytepos);
              if (!found)
@@ -3760,9 +3760,9 @@ character of that word.
 In both cases, LIMIT bounds the search. */);
   Vfind_word_boundary_function_table = Fmake_char_table (Qnil, Qnil);
 
-  DEFVAR_BOOL ("comment-end-can-be-escaped", Vcomment_end_can_be_escaped,
+  DEFVAR_BOOL ("comment-end-can-be-escaped", comment_end_can_be_escaped,
                doc: /* Non-nil means an escaped ender inside a comment doesn't 
end the comment.  */);
-  Vcomment_end_can_be_escaped = 0;
+  comment_end_can_be_escaped = false;
   DEFSYM (Qcomment_end_can_be_escaped, "comment-end-can-be-escaped");
   Fmake_variable_buffer_local (Qcomment_end_can_be_escaped);
 
diff --git a/src/sysdep.c b/src/sysdep.c
index a1050c4..e161172 100644
--- a/src/sysdep.c
+++ b/src/sysdep.c
@@ -1761,24 +1761,6 @@ deliver_thread_signal (int sig, signal_handler_t handler)
   errno = old_errno;
 }
 
-#if !HAVE_DECL_SYS_SIGLIST
-# undef sys_siglist
-# ifdef _sys_siglist
-#  define sys_siglist _sys_siglist
-# elif HAVE_DECL___SYS_SIGLIST
-#  define sys_siglist __sys_siglist
-# else
-#  define sys_siglist my_sys_siglist
-static char const *sys_siglist[NSIG];
-# endif
-#endif
-
-#ifdef _sys_nsig
-# define sys_siglist_entries _sys_nsig
-#else
-# define sys_siglist_entries NSIG
-#endif
-
 /* Handle bus errors, invalid instruction, etc.  */
 static void
 handle_fatal_signal (int sig)
@@ -1970,143 +1952,6 @@ init_signals (void)
   main_thread_id = pthread_self ();
 #endif
 
-#if !HAVE_DECL_SYS_SIGLIST && !defined _sys_siglist
-  if (! initialized)
-    {
-      sys_siglist[SIGABRT] = "Aborted";
-# ifdef SIGAIO
-      sys_siglist[SIGAIO] = "LAN I/O interrupt";
-# endif
-      sys_siglist[SIGALRM] = "Alarm clock";
-# ifdef SIGBUS
-      sys_siglist[SIGBUS] = "Bus error";
-# endif
-# ifdef SIGCHLD
-      sys_siglist[SIGCHLD] = "Child status changed";
-# endif
-# ifdef SIGCONT
-      sys_siglist[SIGCONT] = "Continued";
-# endif
-# ifdef SIGDANGER
-      sys_siglist[SIGDANGER] = "Swap space dangerously low";
-# endif
-# ifdef SIGDGNOTIFY
-      sys_siglist[SIGDGNOTIFY] = "Notification message in queue";
-# endif
-# ifdef SIGEMT
-      sys_siglist[SIGEMT] = "Emulation trap";
-# endif
-      sys_siglist[SIGFPE] = "Arithmetic exception";
-# ifdef SIGFREEZE
-      sys_siglist[SIGFREEZE] = "SIGFREEZE";
-# endif
-# ifdef SIGGRANT
-      sys_siglist[SIGGRANT] = "Monitor mode granted";
-# endif
-      sys_siglist[SIGHUP] = "Hangup";
-      sys_siglist[SIGILL] = "Illegal instruction";
-      sys_siglist[SIGINT] = "Interrupt";
-# ifdef SIGIO
-      sys_siglist[SIGIO] = "I/O possible";
-# endif
-# ifdef SIGIOINT
-      sys_siglist[SIGIOINT] = "I/O intervention required";
-# endif
-# ifdef SIGIOT
-      sys_siglist[SIGIOT] = "IOT trap";
-# endif
-      sys_siglist[SIGKILL] = "Killed";
-# ifdef SIGLOST
-      sys_siglist[SIGLOST] = "Resource lost";
-# endif
-# ifdef SIGLWP
-      sys_siglist[SIGLWP] = "SIGLWP";
-# endif
-# ifdef SIGMSG
-      sys_siglist[SIGMSG] = "Monitor mode data available";
-# endif
-# ifdef SIGPHONE
-      sys_siglist[SIGWIND] = "SIGPHONE";
-# endif
-      sys_siglist[SIGPIPE] = "Broken pipe";
-# ifdef SIGPOLL
-      sys_siglist[SIGPOLL] = "Pollable event occurred";
-# endif
-# ifdef SIGPROF
-      sys_siglist[SIGPROF] = "Profiling timer expired";
-# endif
-# ifdef SIGPTY
-      sys_siglist[SIGPTY] = "PTY I/O interrupt";
-# endif
-# ifdef SIGPWR
-      sys_siglist[SIGPWR] = "Power-fail restart";
-# endif
-      sys_siglist[SIGQUIT] = "Quit";
-# ifdef SIGRETRACT
-      sys_siglist[SIGRETRACT] = "Need to relinquish monitor mode";
-# endif
-# ifdef SIGSAK
-      sys_siglist[SIGSAK] = "Secure attention";
-# endif
-      sys_siglist[SIGSEGV] = "Segmentation violation";
-# ifdef SIGSOUND
-      sys_siglist[SIGSOUND] = "Sound completed";
-# endif
-# ifdef SIGSTOP
-      sys_siglist[SIGSTOP] = "Stopped (signal)";
-# endif
-# ifdef SIGSTP
-      sys_siglist[SIGSTP] = "Stopped (user)";
-# endif
-# ifdef SIGSYS
-      sys_siglist[SIGSYS] = "Bad argument to system call";
-# endif
-      sys_siglist[SIGTERM] = "Terminated";
-# ifdef SIGTHAW
-      sys_siglist[SIGTHAW] = "SIGTHAW";
-# endif
-# ifdef SIGTRAP
-      sys_siglist[SIGTRAP] = "Trace/breakpoint trap";
-# endif
-# ifdef SIGTSTP
-      sys_siglist[SIGTSTP] = "Stopped (user)";
-# endif
-# ifdef SIGTTIN
-      sys_siglist[SIGTTIN] = "Stopped (tty input)";
-# endif
-# ifdef SIGTTOU
-      sys_siglist[SIGTTOU] = "Stopped (tty output)";
-# endif
-# ifdef SIGURG
-      sys_siglist[SIGURG] = "Urgent I/O condition";
-# endif
-# ifdef SIGUSR1
-      sys_siglist[SIGUSR1] = "User defined signal 1";
-# endif
-# ifdef SIGUSR2
-      sys_siglist[SIGUSR2] = "User defined signal 2";
-# endif
-# ifdef SIGVTALRM
-      sys_siglist[SIGVTALRM] = "Virtual timer expired";
-# endif
-# ifdef SIGWAITING
-      sys_siglist[SIGWAITING] = "Process's LWPs are blocked";
-# endif
-# ifdef SIGWINCH
-      sys_siglist[SIGWINCH] = "Window size changed";
-# endif
-# ifdef SIGWIND
-      sys_siglist[SIGWIND] = "SIGWIND";
-# endif
-# ifdef SIGXCPU
-      sys_siglist[SIGXCPU] = "CPU time limit exceeded";
-# endif
-# ifdef SIGXFSZ
-      sys_siglist[SIGXFSZ] = "File size limit exceeded";
-# endif
-    }
-#endif /* !HAVE_DECL_SYS_SIGLIST && !_sys_siglist */
-
   /* Don't alter signal handlers if dumping.  On some machines,
      changing signal handlers sets static data that would make signals
      fail to work right when the dumped Emacs is run.  */
@@ -2762,15 +2607,13 @@ renameat_noreplace (int srcfd, char const *src, int 
dstfd, char const *dst)
 #endif
 }
 
-/* Like strsignal, except async-signal-safe, and this function typically
+/* Like strsignal, except async-signal-safe, and this function
    returns a string in the C locale rather than the current locale.  */
 char const *
 safe_strsignal (int code)
 {
-  char const *signame = 0;
+  char const *signame = sigdescr_np (code);
 
-  if (0 <= code && code < sys_siglist_entries)
-    signame = sys_siglist[code];
   if (! signame)
     signame = "Unknown signal";
 
diff --git a/src/window.c b/src/window.c
index ef58f43..e743396 100644
--- a/src/window.c
+++ b/src/window.c
@@ -5462,7 +5462,7 @@ window_scroll (Lisp_Object window, EMACS_INT n, bool 
whole, bool noerror)
 
   wset_redisplay (XWINDOW (window));
 
-  if (whole && Vfast_but_imprecise_scrolling)
+  if (whole && fast_but_imprecise_scrolling)
     specbind (Qfontification_functions, Qnil);
 
   /* On GUI frames, use the pixel-based version which is much slower
@@ -8398,7 +8398,7 @@ pixelwise even if this option is nil.  */);
   window_resize_pixelwise = false;
 
   DEFVAR_BOOL ("fast-but-imprecise-scrolling",
-               Vfast_but_imprecise_scrolling,
+               fast_but_imprecise_scrolling,
                doc: /* When non-nil, accelerate scrolling operations.
 This comes into play when scrolling rapidly over previously
 unfontified buffer regions.  Only those portions of the buffer which
@@ -8406,7 +8406,7 @@ are actually going to be displayed get fontified.
 
 Note that this optimization can cause the portion of the buffer
 displayed after a scrolling operation to be somewhat inaccurate.  */);
-  Vfast_but_imprecise_scrolling = false;
+  fast_but_imprecise_scrolling = false;
 
   defsubr (&Sselected_window);
   defsubr (&Sold_selected_window);
diff --git a/src/xdisp.c b/src/xdisp.c
index a1f7706..dd73758 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -538,7 +538,7 @@ it_char_has_category(struct it *it, int cat)
 static bool
 char_can_wrap_before (struct it *it)
 {
-  if (!Vword_wrap_by_category)
+  if (!word_wrap_by_category)
     return !IT_DISPLAYING_WHITESPACE (it);
 
   /* For CJK (LTR) text in RTL paragraph, EOL and BOL are flipped.
@@ -560,7 +560,7 @@ char_can_wrap_before (struct it *it)
 static bool
 char_can_wrap_after (struct it *it)
 {
-  if (!Vword_wrap_by_category)
+  if (!word_wrap_by_category)
     return IT_DISPLAYING_WHITESPACE (it);
 
   /* For CJK (LTR) text in RTL paragraph, EOL and BOL are flipped.
@@ -589,7 +589,7 @@ char_can_wrap_after (struct it *it)
 static int
 fill_column_indicator_column (struct it *it, int char_width)
 {
-  if (Vdisplay_fill_column_indicator
+  if (display_fill_column_indicator
       && !it->w->pseudo_window_p
       && it->continuation_lines_width == 0
       && CHARACTERP (Vdisplay_fill_column_indicator_character))
@@ -5771,7 +5771,7 @@ handle_single_display_spec (struct it *it, Lisp_Object 
spec, Lisp_Object object,
       else
        {
          it->what = IT_IMAGE;
-         it->image_id = lookup_image (it->f, value);
+         it->image_id = lookup_image (it->f, value, it->face_id);
          it->position = start_pos;
          it->object = NILP (object) ? it->w->contents : object;
          it->method = GET_FROM_IMAGE;
@@ -12565,6 +12565,11 @@ gui_consider_frame_title (Lisp_Object frame)
       display_mode_element (&it, 0, -1, -1, fmt, Qnil, false);
       len = MODE_LINE_NOPROP_LEN (title_start);
       title = mode_line_noprop_buf + title_start;
+      /* Make sure that any raw bytes in the title are properly
+         represented by their multibyte sequences.  */
+      ptrdiff_t nchars = 0;
+      len = str_as_multibyte ((unsigned char *)title,
+                             mode_line_noprop_buf_end - title, len, &nchars);
       unbind_to (count, Qnil);
 
       /* Set the title only if it's changed.  This avoids consing in
@@ -12576,9 +12581,10 @@ gui_consider_frame_title (Lisp_Object frame)
            || SBYTES (f->name) != len
            || memcmp (title, SDATA (f->name), len) != 0)
           && FRAME_TERMINAL (f)->implicit_set_name_hook)
-       FRAME_TERMINAL (f)->implicit_set_name_hook (f,
-                                                    make_string (title, len),
-                                                    Qnil);
+        {
+          Lisp_Object title_string = make_multibyte_string (title, nchars, 
len);
+          FRAME_TERMINAL (f)->implicit_set_name_hook (f, title_string, Qnil);
+        }
     }
 }
 
@@ -21923,7 +21929,7 @@ extend_face_to_end_of_line (struct it *it)
       && !face->stipple
 #endif
       && !it->glyph_row->reversed_p
-      && !Vdisplay_fill_column_indicator)
+      && !display_fill_column_indicator)
     return;
 
   /* Set the glyph row flag indicating that the face of the last glyph
@@ -22517,7 +22523,7 @@ push_prefix_prop (struct it *it, Lisp_Object prop)
   else if (IMAGEP (prop))
     {
       it->what = IT_IMAGE;
-      it->image_id = lookup_image (it->f, prop);
+      it->image_id = lookup_image (it->f, prop, it->face_id);
       it->method = GET_FROM_IMAGE;
     }
 #endif /* HAVE_WINDOW_SYSTEM */
@@ -25631,6 +25637,12 @@ display_mode_element (struct it *it, int depth, int 
field_width, int precision,
                    spec = decode_mode_spec (it->w, c, field, &string);
                    eassert (NILP (string) || STRINGP (string));
                    multibyte = !NILP (string) && STRING_MULTIBYTE (string);
+                   /* Non-ASCII characters in SPEC should cause mode-line
+                      element be displayed as a multibyte string.  */
+                   ptrdiff_t nbytes = strlen (spec);
+                   if (multibyte_chars_in_text ((const unsigned char *)spec,
+                                                nbytes) != nbytes)
+                     multibyte = true;
 
                    switch (mode_line_target)
                      {
@@ -26249,9 +26261,11 @@ decode_mode_spec_coding (Lisp_Object coding_system, 
char *buf, bool eol_flag)
       attrs = AREF (val, 0);
       eolvalue = AREF (val, 2);
 
-      *buf++ = multibyte
-       ? XFIXNAT (CODING_ATTR_MNEMONIC (attrs))
-       : ' ';
+      if (multibyte)
+       buf += CHAR_STRING (XFIXNAT (CODING_ATTR_MNEMONIC (attrs)),
+                           (unsigned char *) buf);
+      else
+       *buf++ = ' ';
 
       if (eol_flag)
        {
@@ -27431,7 +27445,7 @@ calc_pixel_width_or_height (double *res, struct it *it, 
Lisp_Object prop,
          if (FRAME_WINDOW_P (it->f)
              && valid_image_p (prop))
            {
-             ptrdiff_t id = lookup_image (it->f, prop);
+             ptrdiff_t id = lookup_image (it->f, prop, it->face_id);
              struct image *img = IMAGE_FROM_ID (it->f, id);
 
              return OK_PIXELS (width_p ? img->width : img->height);
@@ -34758,7 +34772,7 @@ A value of nil means to respect the value of 
`truncate-lines'.
 If `word-wrap' is enabled, you might want to reduce this.  */);
   Vtruncate_partial_width_windows = make_fixnum (50);
 
-  DEFVAR_BOOL("word-wrap-by-category", Vword_wrap_by_category, doc: /*
+  DEFVAR_BOOL("word-wrap-by-category", word_wrap_by_category, doc: /*
     Non-nil means also wrap after characters of a certain category.
 Normally when `word-wrap' is on, Emacs only breaks lines after
 whitespace characters.  When this option is turned on, Emacs also
@@ -34773,7 +34787,7 @@ when breaking lines.  That means characters with the 
">" category
 don't appear at the beginning of a line (e.g., FULLWIDTH COMMA), and
 characters with the "<" category don't appear at the end of a line
 (e.g., LEFT DOUBLE ANGLE BRACKET).  */);
-  Vword_wrap_by_category = false;
+  word_wrap_by_category = false;
 
   DEFVAR_LISP ("line-number-display-limit", Vline_number_display_limit,
     doc: /* Maximum buffer size for which line number should be displayed.
@@ -35170,10 +35184,10 @@ It has no effect when set to 0, or when line numbers 
are not absolute.  */);
   DEFSYM (Qdisplay_line_numbers_offset, "display-line-numbers-offset");
   Fmake_variable_buffer_local (Qdisplay_line_numbers_offset);
 
-  DEFVAR_BOOL ("display-fill-column-indicator", Vdisplay_fill_column_indicator,
+  DEFVAR_BOOL ("display-fill-column-indicator", display_fill_column_indicator,
     doc: /* Non-nil means display the fill column indicator.
 See Info node `Displaying Boundaries' for details.  */);
-  Vdisplay_fill_column_indicator = false;
+  display_fill_column_indicator = false;
   DEFSYM (Qdisplay_fill_column_indicator, "display-fill-column-indicator");
   Fmake_variable_buffer_local (Qdisplay_fill_column_indicator);
 
diff --git a/test/data/themes/faces-test-dark-theme.el 
b/test/data/themes/faces-test-dark-theme.el
index 2eb72d6..a5e2ca4 100644
--- a/test/data/themes/faces-test-dark-theme.el
+++ b/test/data/themes/faces-test-dark-theme.el
@@ -2,18 +2,20 @@
 
 ;; Copyright (C) 2019-2020 Free Software Foundation, Inc.
 
-;; This program is free software; you can redistribute it and/or modify
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
 ;; the Free Software Foundation, either version 3 of the License, or
 ;; (at your option) any later version.
 
-;; This program is distributed in the hope that it will be useful,
+;; GNU Emacs is distributed in the hope that it will be useful,
 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with this program.  If not, see <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.
 
 ;;; Commentary:
 
diff --git a/test/data/themes/faces-test-light-theme.el 
b/test/data/themes/faces-test-light-theme.el
index 4a7c7f68..b2f7ec6 100644
--- a/test/data/themes/faces-test-light-theme.el
+++ b/test/data/themes/faces-test-light-theme.el
@@ -2,18 +2,20 @@
 
 ;; Copyright (C) 2019-2020 Free Software Foundation, Inc.
 
-;; This program is free software; you can redistribute it and/or modify
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
 ;; the Free Software Foundation, either version 3 of the License, or
 ;; (at your option) any later version.
 
-;; This program is distributed in the hope that it will be useful,
+;; GNU Emacs is distributed in the hope that it will be useful,
 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with this program.  If not, see <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.
 
 ;;; Commentary:
 
diff --git a/test/lisp/calendar/todo-mode-resources/todo-test-1.todo 
b/test/lisp/calendar/todo-mode-resources/todo-test-1.todo
index 557134f..2375772 100644
--- a/test/lisp/calendar/todo-mode-resources/todo-test-1.todo
+++ b/test/lisp/calendar/todo-mode-resources/todo-test-1.todo
@@ -1,8 +1,8 @@
 (("testcat1" . [2 0 2 1]) ("testcat2" . [3 0 1 1]) ("testcat3" . [0 0 0 0]) 
("testcat4" . [1 0 0 0]))
 --==-- testcat1
 [May 29, 2017] testcat1 item3
-               has more than one line
-               to test item highlighting
+       has more than one line
+       to test item highlighting
 [Jul 3, 2017] testcat1 item4
 
 ==--== DONE 
diff --git a/test/lisp/calendar/todo-mode-tests.el 
b/test/lisp/calendar/todo-mode-tests.el
index a19612e..1fbd394 100644
--- a/test/lisp/calendar/todo-mode-tests.el
+++ b/test/lisp/calendar/todo-mode-tests.el
@@ -414,8 +414,15 @@ the top done item should be the first done item."
      (should (todo-done-item-p))
      (forward-line -1)
      (should (looking-at todo-category-done))
-     ;; Make sure marked items are no longer in first category.
-     (todo-backward-category)
+     ;; Make sure marked items are no longer in first category.  Since
+     ;; cat1 now contains no todo or done items but does have archived
+     ;; items, todo-backward-category would skip it by default, so
+     ;; prevent this. (FIXME: Without this let-binding,
+     ;; todo-backward-category selects the nonempty cat4 and this test
+     ;; fails as expected when run interactively but not in a batch
+     ;; run -- why?)
+     (let (todo-skip-archived-categories)
+       (todo-backward-category))
      (should (eq (point-min) (point-max))) ; All todo items were moved.
      ;; This passes when run interactively but fails in a batch run:
      ;; the message is displayed but (current-message) evaluates to
@@ -848,7 +855,7 @@ should display the previously current (or default) todo 
file."
      (should (equal todo-current-todo-file todo-test-file-1))
      (delete-file (concat file "~")))))
 
-(ert-deftest todo-test-edit-item-date-month ()
+(ert-deftest todo-test-edit-item-date-month () ; bug#42976 #3 and #4
   "Test incrementing and decrementing the month of an item's date.
 If the change in month crosses a year boundary, the year of the
 item's date should be adjusted accordingly."
@@ -892,8 +899,50 @@ item's date should be adjusted accordingly."
      (todo-edit-item--header 'month 25)
      (should (equal (funcall get-date) "Feb 1, 2022"))
      (todo-edit-item--header 'month -25)
-     (should (equal (funcall get-date) "Jan 1, 2020"))
-     )))
+     (should (equal (funcall get-date) "Jan 1, 2020")))))
+
+(ert-deftest todo-test-multiline-item-indentation-1 ()
+  "Test inserting a multine item containing a hard line break.
+After insertion the second line of the item should begin with a
+tab character."
+  (with-todo-test
+   (let* ((item0 "Test inserting a multine item")
+          (item1 "containing a hard line break.")
+          (item (concat item0 "\n" item1)))
+     (todo-test--show 1)
+     (todo-test--insert-item item 1)
+     (re-search-forward (concat todo-date-string-start todo-date-pattern
+                               (regexp-quote todo-nondiary-end) " ")
+                       (line-end-position) t)
+     (should (looking-at (regexp-quote (concat item0 "\n\t" item1)))))))
+
+(ert-deftest todo-test-multiline-item-indentation-2 () ; bug#43068
+  "Test editing an item by adding text on a new line.
+After quitting todo-edit-mode the second line of the item should
+begin with a tab character."
+  (with-todo-test
+   (todo-test--show 2)
+   (let* ((item0 (todo-item-string))
+          (item1 "Second line."))
+     (todo-edit-item--text 'multiline)
+     (insert (concat "\n" item1))
+     (todo-edit-quit)
+     (goto-char (line-beginning-position))
+     (should (looking-at (regexp-quote (concat item0 "\n\t" item1)))))))
+
+(ert-deftest todo-test-multiline-item-indentation-3 ()
+  "Test adding an unindented new line to an item using todo-edit-file.
+Attempting to quit todo-edit-mode should signal a user-error,
+since all non-initial item lines must begin with whitespace."
+  (with-todo-test
+   (todo-test--show 2)
+   (let* ((item0 (todo-item-string))
+          (item1 "Second line."))
+     (todo-edit-file)
+     (should (looking-at (regexp-quote item0)))
+     (goto-char (line-end-position))
+     (insert (concat "\n" item1))
+     (should-error (todo-edit-quit) :type 'user-error))))
 
 (provide 'todo-mode-tests)
 ;;; todo-mode-tests.el ends here
diff --git a/test/lisp/char-fold-tests.el b/test/lisp/char-fold-tests.el
index 0e55dfb..599d9d6 100644
--- a/test/lisp/char-fold-tests.el
+++ b/test/lisp/char-fold-tests.el
@@ -4,18 +4,20 @@
 
 ;; Author: Artur Malabarba <bruce.connor.am@gmail.com>
 
-;; This program is free software; you can redistribute it and/or modify
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
 ;; the Free Software Foundation, either version 3 of the License, or
 ;; (at your option) any later version.
 
-;; This program is distributed in the hope that it will be useful,
+;; GNU Emacs is distributed in the hope that it will be useful,
 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with this program.  If not, see <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.
 
 ;;; Code:
 
diff --git a/test/lisp/electric-tests.el b/test/lisp/electric-tests.el
index 67f474c..8b9c1c5 100644
--- a/test/lisp/electric-tests.el
+++ b/test/lisp/electric-tests.el
@@ -5,18 +5,20 @@
 ;; Author: João Távora <joaotavora@gmail.com>
 ;; Keywords:
 
-;; This program is free software; you can redistribute it and/or modify
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
 ;; the Free Software Foundation, either version 3 of the License, or
 ;; (at your option) any later version.
 
-;; This program is distributed in the hope that it will be useful,
+;; GNU Emacs is distributed in the hope that it will be useful,
 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with this program.  If not, see <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.
 
 ;;; Commentary:
 
diff --git a/test/lisp/emacs-lisp/bytecomp-tests.el 
b/test/lisp/emacs-lisp/bytecomp-tests.el
index 834e3b6..a9dcf15 100644
--- a/test/lisp/emacs-lisp/bytecomp-tests.el
+++ b/test/lisp/emacs-lisp/bytecomp-tests.el
@@ -354,10 +354,18 @@
             '((a c) (b c) (7 c) (-3 c) (nil nil) (t c) (q c) (r c) (s c)
               (t c) (x "a") (x "c") (x c) (x d) (x e)))
 
-    ;; `substring' bytecode generation (bug#39709).
-    (substring "abcdef")
-    (substring "abcdef" 2)
-    (substring "abcdef" 3 2))
+    (mapcar (lambda (x) (cond ((member '(a . b) x) 1)
+                              ((equal x '(c)) 2)))
+            '(((a . b)) a b (c) (d)))
+    (mapcar (lambda (x) (cond ((memq '(a . b) x) 1)
+                              ((equal x '(c)) 2)))
+            '(((a . b)) a b (c) (d)))
+    (mapcar (lambda (x) (cond ((member '(a b) x) 1)
+                              ((equal x '(c)) 2)))
+            '(((a b)) a b (c) (d)))
+    (mapcar (lambda (x) (cond ((memq '(a b) x) 1)
+                              ((equal x '(c)) 2)))
+            '(((a b)) a b (c) (d))))
   "List of expression for test.
 Each element will be executed by interpreter and with
 bytecompiled code, and their results compared.")
diff --git a/test/lisp/emacs-lisp/rmc-tests.el 
b/test/lisp/emacs-lisp/rmc-tests.el
index 5dee206..5add24c 100644
--- a/test/lisp/emacs-lisp/rmc-tests.el
+++ b/test/lisp/emacs-lisp/rmc-tests.el
@@ -5,18 +5,20 @@
 ;; Author: Tino Calancha <tino.calancha@gmail.com>
 ;; Keywords:
 
-;; This program is free software; you can redistribute it and/or modify
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
 ;; the Free Software Foundation, either version 3 of the License, or
 ;; (at your option) any later version.
 
-;; This program is distributed in the hope that it will be useful,
+;; GNU Emacs is distributed in the hope that it will be useful,
 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with this program.  If not, see <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.
 
 ;;; Commentary:
 
diff --git a/test/lisp/emacs-lisp/subr-x-tests.el 
b/test/lisp/emacs-lisp/subr-x-tests.el
index c702fdf..9d14a5a 100644
--- a/test/lisp/emacs-lisp/subr-x-tests.el
+++ b/test/lisp/emacs-lisp/subr-x-tests.el
@@ -5,18 +5,20 @@
 ;; Author: Fabián E. Gallina <fgallina@gnu.org>
 ;; Keywords:
 
-;; This program is free software; you can redistribute it and/or modify
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
 ;; the Free Software Foundation, either version 3 of the License, or
 ;; (at your option) any later version.
 
-;; This program is distributed in the hope that it will be useful,
+;; GNU Emacs is distributed in the hope that it will be useful,
 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with this program.  If not, see <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.
 
 ;;; Commentary:
 
diff --git a/test/lisp/emacs-lisp/text-property-search-tests.el 
b/test/lisp/emacs-lisp/text-property-search-tests.el
index 549c90d..83d4b95 100644
--- a/test/lisp/emacs-lisp/text-property-search-tests.el
+++ b/test/lisp/emacs-lisp/text-property-search-tests.el
@@ -5,18 +5,20 @@
 ;; Author: Lars Ingebrigtsen <larsi@gnus.org>
 ;; Keywords:
 
-;; This program is free software; you can redistribute it and/or modify
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
 ;; the Free Software Foundation, either version 3 of the License, or
 ;; (at your option) any later version.
 
-;; This program is distributed in the hope that it will be useful,
+;; GNU Emacs is distributed in the hope that it will be useful,
 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with this program.  If not, see <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.
 
 ;;; Commentary:
 
diff --git a/test/lisp/emacs-lisp/warnings-tests.el 
b/test/lisp/emacs-lisp/warnings-tests.el
new file mode 100644
index 0000000..02c09b4
--- /dev/null
+++ b/test/lisp/emacs-lisp/warnings-tests.el
@@ -0,0 +1,60 @@
+;;; warnings-tests.el --- tests for warnings.el  -*- lexical-binding: t; -*-
+
+;; Author: Stefan Kangas <stefankangas@gmail.com>
+
+;; Copyright (C) 2020 Free Software Foundation, Inc.
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.
+
+;;; Code:
+
+(require 'ert)
+(require 'warnings)
+
+(ert-deftest test-warning-suppress-p ()
+  (should (warning-suppress-p 'foo '((foo))))
+  (should (warning-suppress-p '(foo bar) '((foo bar))))
+  (should (warning-suppress-p '(foo bar baz) '((foo bar))))
+  (should-not (warning-suppress-p '(foo bar baz) '((foo bax))))
+  (should-not (warning-suppress-p 'foobar nil)))
+
+(ert-deftest test-display-warning ()
+  (dolist (level '(:emergency :error :warning))
+    (with-temp-buffer
+      (display-warning '(foo) "Hello123" level (current-buffer))
+      (should (string-match "foo" (buffer-string)))
+      (should (string-match "Hello123" (buffer-string))))
+    (with-current-buffer "*Messages*"
+      (should (string-match "Hello123" (buffer-string))))))
+
+(ert-deftest test-display-warning/warning-minimum-level ()
+  ;; This test only works interactively:
+  :expected-result :failed
+  (let ((warning-minimum-level :emergency))
+    (with-temp-buffer
+      (display-warning '(foo) "baz" :warning (current-buffer)))
+    (with-current-buffer "*Messages*"
+      (should-not (string-match "baz" (buffer-string))))))
+
+(ert-deftest test-display-warning/warning-minimum-log-level ()
+  (let ((warning-minimum-log-level :error))
+    (with-temp-buffer
+      (display-warning '(foo) "hello" :warning (current-buffer))
+      (should-not (string-match "hello" (buffer-string))))))
+
+(provide 'warnings-tests)
+
+;;; warnings-tests.el ends here
diff --git a/test/lisp/faces-tests.el b/test/lisp/faces-tests.el
index d5dc193..32dc1ee 100644
--- a/test/lisp/faces-tests.el
+++ b/test/lisp/faces-tests.el
@@ -5,18 +5,20 @@
 ;; Author: Artur Malabarba <bruce.connor.am@gmail.com>
 ;; Keywords:
 
-;; This program is free software; you can redistribute it and/or modify
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
 ;; the Free Software Foundation, either version 3 of the License, or
 ;; (at your option) any later version.
 
-;; This program is distributed in the hope that it will be useful,
+;; GNU Emacs is distributed in the hope that it will be useful,
 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with this program.  If not, see <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.
 
 ;;; Code:
 
diff --git a/test/lisp/gnus/gnus-icalendar-tests.el 
b/test/lisp/gnus/gnus-icalendar-tests.el
index 48a9996..be23c90 100644
--- a/test/lisp/gnus/gnus-icalendar-tests.el
+++ b/test/lisp/gnus/gnus-icalendar-tests.el
@@ -38,18 +38,10 @@
       (setq event (gnus-icalendar-event-from-buffer (buffer-name) 
participant)))
     event))
 
-(defun icalendar-tests--get-ical-event (ical-string)
-  "Return iCalendar event for ICAL-STRING."
-  (save-excursion
-    (with-temp-buffer
-      (insert ical-string)
-      (goto-char (point-min))
-      (car (icalendar--read-element nil nil)))))
-
 (ert-deftest gnus-icalendar-parse ()
   "test"
   (let ((tz (getenv "TZ"))
-        (event (gnus-icalendar-tests--get-ical-event "
+        (event (gnus-icalendar-tests--get-ical-event "\
 BEGIN:VCALENDAR
 PRODID:-//Google Inc//Google Calendar 70.9054//EN
 VERSION:2.0
@@ -83,7 +75,7 @@ UID:iipdt88slddpeu7hheuu09sfmd@google.com
 X-MICROSOFT-CDO-OWNERAPPTID:-362490173
 RECURRENCE-ID;TZID=America/New_York:20201208T091500
 CREATED:20200309T134939Z
-DESCRIPTION:In this meeting\, we will cover topics from product and enginee
+DESCRIPTION:In this meeting\\, we will cover topics from product and enginee
  ring presentations and demos to new hire announcements to watching the late
 LAST-MODIFIED:20200728T182852Z
 LOCATION:New York-22-Town Hall Space (250) [Chrome Box]
@@ -106,7 +98,7 @@ END:VCALENDAR
           (with-slots (organizer summary description location end-time uid 
rsvp participation-type) event
                       (should (string= organizer 
"liveintent.com_3bm6fh805bme9uoeliqcle1sag@group.calendar.google.com"))
                       (should (string= summary "Townhall | All Company 
Meeting"))
-                      (should (string= description "In this meeting\, we will 
cover topics from product and engineering presentations and demos to new hire 
announcements to watching the late"))
+                      (should (string= description "In this meeting, we will 
cover topics from product and engineering presentations and demos to new hire 
announcements to watching the late"))
                       (should (string= location "New York-22-Town Hall Space 
(250) [Chrome Box]"))
                       (should (string= (format-time-string "%Y-%m-%d %H:%M" 
end-time) "2020-12-08 16:00"))
                       (should (string= uid 
"iipdt88slddpeu7hheuu09sfmd@google.com"))
@@ -117,7 +109,7 @@ END:VCALENDAR
 (ert-deftest gnus-icalendary-byday ()
   ""
   (let ((tz (getenv "TZ"))
-        (event (gnus-icalendar-tests--get-ical-event "
+        (event (gnus-icalendar-tests--get-ical-event "\
 BEGIN:VCALENDAR
 PRODID:Zimbra-Calendar-Provider
 VERSION:2.0
@@ -142,7 +134,7 @@ END:VTIMEZONE
 BEGIN:VEVENT
 UID:903a5415-9067-4f63-b499-1b6205f49c88
 RRULE:FREQ=DAILY;UNTIL=20200825T035959Z;INTERVAL=1;BYDAY=MO,TU,WE,TH,FR
-SUMMARY:appointment every weekday\, start jul 24\, 2020\, end aug 24\, 2020
+SUMMARY:appointment every weekday\\, start jul 24\\, 2020\\, end aug 24\\, 2020
 ATTENDEE;CN=Mark Hershberger;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP
  =TRUE:mailto:hexmode <at> gmail.com
 ORGANIZER;CN=Mark A. Hershberger:mailto:mah <at> nichework.com
@@ -175,7 +167,7 @@ END:VCALENDAR" (list "Mark Hershberger"))))
     (should (string= (gnus-icalendar-event:start event) "2020-07-24 15:00"))
     (with-slots (organizer summary description location end-time uid rsvp 
participation-type) event
       (should (string= organizer "mah <at> nichework.com"))
-      (should (string= summary "appointment every weekday\, start jul 24\, 
2020\, end aug 24\, 2020"))
+      (should (string= summary "appointment every weekday, start jul 24, 2020, 
end aug 24, 2020"))
       (should (string= description "The following is a new meeting request:"))
       (should (null location))
       (should (string= (format-time-string "%Y-%m-%d %H:%M" end-time) 
"2020-07-24 15:30"))
diff --git a/test/lisp/gnus/mml-sec-tests.el b/test/lisp/gnus/mml-sec-tests.el
index 07da4bf..673fa69 100644
--- a/test/lisp/gnus/mml-sec-tests.el
+++ b/test/lisp/gnus/mml-sec-tests.el
@@ -37,7 +37,7 @@ Mostly, the empty passphrase is used.  However, the keys for
  as S/MIME).")
 
 (defun test-conf ()
-  (ignore-errors (epg-configuration)))
+  (ignore-errors (epg-find-configuration 'OpenPGP)))
 
 (defun enc-standards ()
   (if with-smime '(enc-pgp enc-pgp-mime enc-smime)
@@ -647,6 +647,7 @@ In this test, just multiple encryption and signing keys may 
be available."
 (ert-deftest mml-secure-en-decrypt-sign-1-2-double ()
   "Sign and encrypt message; then decrypt and test for expected result.
 In this test, just multiple encryption and signing keys may be available."
+  :tags '(:unstable)
   (skip-unless (test-conf))
   (mml-secure-test-key-fixture
    (lambda ()
@@ -842,7 +843,8 @@ So the second decryption fails."
 (ert-deftest mml-secure-en-decrypt-passphrase-no-cache-openpgp-todo ()
   "Passphrase caching with OpenPGP only for GnuPG 1.x."
   (skip-unless (test-conf))
-  (skip-unless (string< (cdr (assq 'version (epg-configuration))) "2"))
+  (skip-unless (string< (cdr (assq 'version (epg-find-configuration 'OpenPGP)))
+                       "2"))
   (mml-secure-en-decrypt-passphrase-no-cache 'enc-pgp)
   (mml-secure-en-decrypt-passphrase-no-cache 'enc-pgp-mime))
 
@@ -884,7 +886,7 @@ So the second decryption fails."
 (defun mml-secure-run-tests-with-gpg2 ()
   "Run all tests with gpg2 instead of gpg."
   (let* ((epg-gpg-program "gpg2"); ~/local/gnupg-2.1.9/PLAY/inst/bin/gpg2
-        (gpg-version (cdr (assq 'version (epg-configuration))))
+        (gpg-version (cdr (assq 'version (epg-find-configuration 'OpenPGP))))
         ;; Empty passphrases do not seem to work with gpgsm in 2.1.x:
         ;; 
https://lists.gnupg.org/pipermail/gnupg-users/2015-October/054575.html
         (with-smime (string< gpg-version "2.1")))
diff --git a/test/lisp/hi-lock-tests.el b/test/lisp/hi-lock-tests.el
index 59f3e73..d30a6d0 100644
--- a/test/lisp/hi-lock-tests.el
+++ b/test/lisp/hi-lock-tests.el
@@ -5,18 +5,20 @@
 ;; Author: Tino Calancha <tino.calancha@gmail.com>
 ;; Keywords:
 
-;; This program is free software; you can redistribute it and/or modify
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
 ;; the Free Software Foundation, either version 3 of the License, or
 ;; (at your option) any later version.
 
-;; This program is distributed in the hope that it will be useful,
+;; GNU Emacs is distributed in the hope that it will be useful,
 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with this program.  If not, see <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.
 
 ;;; Code:
 
diff --git a/test/lisp/isearch-tests.el b/test/lisp/isearch-tests.el
index 3f430ab..516077a 100644
--- a/test/lisp/isearch-tests.el
+++ b/test/lisp/isearch-tests.el
@@ -4,18 +4,20 @@
 
 ;; Author: Artur Malabarba <bruce.connor.am@gmail.com>
 
-;; This program is free software; you can redistribute it and/or modify
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
 ;; the Free Software Foundation, either version 3 of the License, or
 ;; (at your option) any later version.
 
-;; This program is distributed in the hope that it will be useful,
+;; GNU Emacs is distributed in the hope that it will be useful,
 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with this program.  If not, see <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.
 
 ;;; Code:
 
diff --git a/test/lisp/json-tests.el b/test/lisp/json-tests.el
index a0e8c87..8ac4544 100644
--- a/test/lisp/json-tests.el
+++ b/test/lisp/json-tests.el
@@ -4,18 +4,20 @@
 
 ;; Author: Dmitry Gutov <dgutov@yandex.ru>
 
-;; This program is free software; you can redistribute it and/or modify
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
 ;; the Free Software Foundation, either version 3 of the License, or
 ;; (at your option) any later version.
 
-;; This program is distributed in the hope that it will be useful,
+;; GNU Emacs is distributed in the hope that it will be useful,
 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with this program.  If not, see <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.
 
 ;;; Code:
 
diff --git a/test/lisp/jsonrpc-tests.el b/test/lisp/jsonrpc-tests.el
index 6c08023..168a2c9 100644
--- a/test/lisp/jsonrpc-tests.el
+++ b/test/lisp/jsonrpc-tests.el
@@ -5,18 +5,20 @@
 ;; Author: João Távora <joaotavora@gmail.com>
 ;; Keywords: tests
 
-;; This program is free software; you can redistribute it and/or modify
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
 ;; the Free Software Foundation, either version 3 of the License, or
 ;; (at your option) any later version.
 
-;; This program is distributed in the hope that it will be useful,
+;; GNU Emacs is distributed in the hope that it will be useful,
 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with this program.  If not, see <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.
 
 ;;; Commentary:
 
diff --git a/test/lisp/mail/footnote-tests.el b/test/lisp/mail/footnote-tests.el
index 79f4807..6594aa2 100644
--- a/test/lisp/mail/footnote-tests.el
+++ b/test/lisp/mail/footnote-tests.el
@@ -5,18 +5,20 @@
 ;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
 ;; Keywords:
 
-;; This program is free software; you can redistribute it and/or modify
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
 ;; the Free Software Foundation, either version 3 of the License, or
 ;; (at your option) any later version.
 
-;; This program is distributed in the hope that it will be useful,
+;; GNU Emacs is distributed in the hope that it will be useful,
 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with this program.  If not, see <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.
 
 ;;; Code:
 
diff --git a/test/lisp/minibuffer-tests.el b/test/lisp/minibuffer-tests.el
index f4c840c..5da86f3 100644
--- a/test/lisp/minibuffer-tests.el
+++ b/test/lisp/minibuffer-tests.el
@@ -5,18 +5,20 @@
 ;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
 ;; Keywords:
 
-;; This program is free software; you can redistribute it and/or modify
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
 ;; the Free Software Foundation, either version 3 of the License, or
 ;; (at your option) any later version.
 
-;; This program is distributed in the hope that it will be useful,
+;; GNU Emacs is distributed in the hope that it will be useful,
 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with this program.  If not, see <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.
 
 ;;; Commentary:
 
diff --git a/test/lisp/net/tramp-tests.el b/test/lisp/net/tramp-tests.el
index 05196e7..71c6302 100644
--- a/test/lisp/net/tramp-tests.el
+++ b/test/lisp/net/tramp-tests.el
@@ -98,6 +98,7 @@
        '("mock"
         (tramp-login-program        "sh")
         (tramp-login-args           (("-i")))
+        (tramp-direct-async-args    (("-c")))
         (tramp-remote-shell         "/bin/sh")
         (tramp-remote-shell-args    ("-c"))
         (tramp-connection-timeout   10)))
@@ -2023,8 +2024,12 @@ is greater than 10.
   "Check `substitute-in-file-name'."
   (skip-unless (eq tramp-syntax 'default))
 
-  ;; Suppress method name check.
-  (let ((tramp-methods (cons '("method") tramp-methods)))
+  ;; Suppress method name check.  We cannot use the string "foo" as
+  ;; user name, because (substitute-in-string "/~foo") returns
+  ;; different values depending on the existence of user "foo" (see
+  ;; Bug#43052).
+  (let ((tramp-methods (cons '("method") tramp-methods))
+        (foo (downcase (md5 (current-time-string)))))
     (should
      (string-equal (substitute-in-file-name "/method:host:///foo") "/foo"))
     (should
@@ -2056,36 +2061,40 @@ is greater than 10.
     ;; Emacs 25, occasionally. No idea what's up.
     (when (tramp--test-emacs26-p)
       (should
-       (string-equal (substitute-in-file-name "/method:host://~foo") "/~foo"))
+       (string-equal
+       (substitute-in-file-name (concat "/method:host://~" foo))
+       (concat "/~" foo)))
       (should
        (string-equal
-       (substitute-in-file-name "/method:host:/~foo") "/method:host:/~foo"))
+       (substitute-in-file-name (concat "/method:host:/~" foo))
+       (concat "/method:host:/~" foo)))
       (should
        (string-equal
-       (substitute-in-file-name "/method:host:/path//~foo") "/~foo"))
+       (substitute-in-file-name (concat "/method:host:/path//~" foo))
+       (concat "/~" foo)))
       ;; (substitute-in-file-name "/path/~foo") expands only for a local
       ;; user "foo" to "/~foo"".  Otherwise, it doesn't expand.
       (should
        (string-equal
-       (substitute-in-file-name
-        "/method:host:/path/~foo") "/method:host:/path/~foo"))
+       (substitute-in-file-name (concat "/method:host:/path/~" foo))
+       (concat "/method:host:/path/~" foo)))
       ;; Quoting local part.
       (should
        (string-equal
-       (substitute-in-file-name "/method:host:/://~foo")
-       "/method:host:/://~foo"))
+       (substitute-in-file-name (concat "/method:host:/://~" foo))
+       (concat "/method:host:/://~" foo)))
       (should
        (string-equal
-       (substitute-in-file-name
-        "/method:host:/:/~foo") "/method:host:/:/~foo"))
+       (substitute-in-file-name (concat "/method:host:/:/~" foo))
+       (concat "/method:host:/:/~" foo)))
       (should
        (string-equal
-       (substitute-in-file-name
-        "/method:host:/:/path//~foo") "/method:host:/:/path//~foo"))
+       (substitute-in-file-name (concat "/method:host:/:/path//~" foo))
+       (concat "/method:host:/:/path//~" foo)))
       (should
        (string-equal
-       (substitute-in-file-name
-        "/method:host:/:/path/~foo") "/method:host:/:/path/~foo")))
+       (substitute-in-file-name (concat "/method:host:/:/path/~" foo))
+       (concat "/method:host:/:/path/~" foo))))
 
     (let (process-environment)
       (should
@@ -2130,16 +2139,19 @@ is greater than 10.
       (expand-file-name "/method:host:/path/../file") "/method:host:/file"))
     (should
      (string-equal
-      (expand-file-name "/method:host:/path/.") "/method:host:/path"))
+      (expand-file-name "/method:host:/path/.")
+      (if (tramp--test-emacs28-p) "/method:host:/path/" "/method:host:/path")))
     (should
      (string-equal
       (expand-file-name "/method:host:/path/..") "/method:host:/"))
     (should
      (string-equal
-      (expand-file-name "." "/method:host:/path/") "/method:host:/path"))
+      (expand-file-name "." "/method:host:/path/")
+      (if (tramp--test-emacs28-p) "/method:host:/path/" "/method:host:/path")))
     (should
      (string-equal
-      (expand-file-name "" "/method:host:/path/") "/method:host:/path"))
+      (expand-file-name "" "/method:host:/path/")
+      (if (tramp--test-emacs28-p) "/method:host:/path/" "/method:host:/path")))
     ;; Quoting local part.
     (should
      (string-equal
@@ -2154,21 +2166,12 @@ is greater than 10.
       "/method:host:/:/~/path/file"))))
 
 ;; The following test is inspired by Bug#26911 and Bug#34834.  They
-;; are rather bugs in `expand-file-name', and it fails for all Emacs
-;; versions.  Test added for later, when they are fixed.
+;; were bugs in `expand-file-name'.
 (ert-deftest tramp-test05-expand-file-name-relative ()
   "Check `expand-file-name'."
-  ;; Mark as failed until bug has been fixed.
-  :expected-result :failed
   (skip-unless (tramp--test-enabled))
-
-  ;; These are the methods the test doesn't fail.
-  (when (or (tramp--test-adb-p) (tramp--test-ange-ftp-p) (tramp--test-gvfs-p)
-           (tramp--test-rclone-p)
-           (tramp--test-smb-p))
-    (setf (ert-test-expected-result-type
-          (ert-get-test 'tramp-test05-expand-file-name-relative))
-         :passed))
+  ;; The bugs are fixed in Emacs 28.1.
+  (skip-unless (tramp--test-emacs28-p))
 
   (should
    (string-equal
@@ -3556,7 +3559,7 @@ This tests also `make-symbolic-link', `file-truename' and 
`add-name-to-file'."
            ;; `tmp-name3' is a local file name.  Therefore, the link
            ;; target remains unchanged, even if quoted.
            ;; `make-symbolic-link' might not be permitted on w32 systems.
-           (unless (tramp--test-windows-nt)
+           (unless (tramp--test-windows-nt-p)
              (make-symbolic-link tmp-name1 tmp-name3)
              (should
               (string-equal tmp-name1 (file-symlink-p tmp-name3))))
@@ -3670,7 +3673,7 @@ This tests also `make-symbolic-link', `file-truename' and 
`add-name-to-file'."
                 (concat (file-remote-p tmp-name2) penguin)))))
            ;; `tmp-name3' is a local file name.
            ;; `make-symbolic-link' might not be permitted on w32 systems.
-           (unless (tramp--test-windows-nt)
+           (unless (tramp--test-windows-nt-p)
              (make-symbolic-link tmp-name1 tmp-name3)
              (should (file-symlink-p tmp-name3))
               (should-not (string-equal tmp-name3 (file-truename tmp-name3)))
@@ -4325,9 +4328,7 @@ This tests also `make-symbolic-link', `file-truename' and 
`add-name-to-file'."
            (with-timeout (10 (tramp--test-timeout-handler))
              (while (< (- (point-max) (point-min)) (length "foo"))
                (while (accept-process-output proc 0 nil t))))
-           ;; We cannot use `string-equal', because tramp-adb.el
-           ;; echoes also the sent string.
-           (should (string-match "\\`foo" (buffer-string))))
+           (should (string-match "foo" (buffer-string))))
 
        ;; Cleanup.
        (ignore-errors (delete-process proc)))
@@ -4346,7 +4347,7 @@ This tests also `make-symbolic-link', `file-truename' and 
`add-name-to-file'."
            (with-timeout (10 (tramp--test-timeout-handler))
              (while (< (- (point-max) (point-min)) (length "foo"))
                (while (accept-process-output proc 0 nil t))))
-           (should (string-equal (buffer-string) "foo")))
+           (should (string-match "foo" (buffer-string))))
 
        ;; Cleanup.
        (ignore-errors
@@ -4368,13 +4369,35 @@ This tests also `make-symbolic-link', `file-truename' 
and `add-name-to-file'."
            (with-timeout (10 (tramp--test-timeout-handler))
              (while (< (- (point-max) (point-min)) (length "foo"))
                (while (accept-process-output proc 0 nil t))))
-           ;; We cannot use `string-equal', because tramp-adb.el
-           ;; echoes also the sent string.
-           (should (string-match "\\`foo" (buffer-string))))
+           (should (string-match "foo" (buffer-string))))
 
        ;; Cleanup.
        (ignore-errors (delete-process proc))))))
 
+(defmacro tramp--test--deftest-direct-async-process
+    (test docstring &optional unstable)
+  "Define ert test `TEST-direct-async' for direct async processes.
+If UNSTABLE is non-nil, the test is tagged as `:unstable'."
+  (declare (indent 1))
+  `(ert-deftest ,(intern (concat (symbol-name test) "-direct-async")) ()
+     ,docstring
+     :tags (if ,unstable '(:expensive-test :unstable) '(:expensive-test))
+     (skip-unless (tramp--test-enabled))
+     (let ((default-directory  tramp-test-temporary-file-directory)
+          (ert-test (ert-get-test ',test))
+          (tramp-connection-properties
+           (cons '(nil "direct-async-process" t) tramp-connection-properties)))
+       (skip-unless (tramp-direct-async-process-p))
+       ;; We do expect an established connection already,
+       ;; `file-truename' does it by side-effect.  Suppress
+       ;; `tramp--test-enabled', in order to keep the connection.
+       (cl-letf (((symbol-function #'tramp--test-enabled) (lambda nil t)))
+        (file-truename tramp-test-temporary-file-directory)
+        (funcall (ert-test-body ert-test))))))
+
+(tramp--test--deftest-direct-async-process tramp-test29-start-file-process
+  "Check direct async `start-file-process'.")
+
 (ert-deftest tramp-test30-make-process ()
   "Check `make-process'."
   :tags '(:expensive-test)
@@ -4407,9 +4430,7 @@ This tests also `make-symbolic-link', `file-truename' and 
`add-name-to-file'."
            (with-timeout (10 (tramp--test-timeout-handler))
              (while (< (- (point-max) (point-min)) (length "foo"))
                (while (accept-process-output proc 0 nil t))))
-           ;; We cannot use `string-equal', because tramp-adb.el
-           ;; echoes also the sent string.
-           (should (string-match "\\`foo" (buffer-string))))
+           (should (string-match "foo" (buffer-string))))
 
        ;; Cleanup.
        (ignore-errors (delete-process proc)))
@@ -4430,7 +4451,7 @@ This tests also `make-symbolic-link', `file-truename' and 
`add-name-to-file'."
            (with-timeout (10 (tramp--test-timeout-handler))
              (while (< (- (point-max) (point-min)) (length "foo"))
                (while (accept-process-output proc 0 nil t))))
-           (should (string-equal (buffer-string) "foo")))
+           (should (string-match "foo" (buffer-string))))
 
        ;; Cleanup.
        (ignore-errors
@@ -4456,9 +4477,7 @@ This tests also `make-symbolic-link', `file-truename' and 
`add-name-to-file'."
            (with-timeout (10 (tramp--test-timeout-handler))
              (while (not (string-match "foo" (buffer-string)))
                (while (accept-process-output proc 0 nil t))))
-           ;; We cannot use `string-equal', because tramp-adb.el
-           ;; echoes also the sent string.
-           (should (string-match "\\`foo" (buffer-string))))
+           (should (string-match "foo" (buffer-string))))
 
        ;; Cleanup.
        (ignore-errors (delete-process proc)))
@@ -4482,10 +4501,6 @@ This tests also `make-symbolic-link', `file-truename' 
and `add-name-to-file'."
            ;; Read output.
            (with-timeout (10 (tramp--test-timeout-handler))
              (while (accept-process-output proc 0 nil t)))
-           ;; We cannot use `string-equal', because tramp-adb.el
-           ;; echoes also the sent string.  And a remote macOS sends
-           ;; a slightly modified string.  On MS Windows,
-           ;; `delete-process' sends an unknown signal.
            (should
             (string-match
              (if (eq system-type 'windows-nt)
@@ -4496,55 +4511,60 @@ This tests also `make-symbolic-link', `file-truename' 
and `add-name-to-file'."
        (ignore-errors (delete-process proc)))
 
       ;; Process with stderr buffer.
-      (let ((stderr (generate-new-buffer "*stderr*")))
-       (unwind-protect
-           (with-temp-buffer
-             (setq proc
-                   (with-no-warnings
-                     (make-process
-                      :name "test5" :buffer (current-buffer)
-                      :command '("cat" "/does-not-exist")
-                      :stderr stderr
-                      :file-handler t)))
-             (should (processp proc))
-             ;; Read stderr.
-             (with-timeout (10 (tramp--test-timeout-handler))
-               (while (accept-process-output proc 0 nil t)))
-             (delete-process proc)
-             (with-current-buffer stderr
-               (should
-                (string-match
-                 "cat:.* No such file or directory" (buffer-string)))))
+      (unless (tramp-direct-async-process-p)
+       (let ((stderr (generate-new-buffer "*stderr*")))
+         (unwind-protect
+             (with-temp-buffer
+               (setq proc
+                     (with-no-warnings
+                       (make-process
+                        :name "test5" :buffer (current-buffer)
+                        :command '("cat" "/does-not-exist")
+                        :stderr stderr
+                        :file-handler t)))
+               (should (processp proc))
+               ;; Read stderr.
+               (with-timeout (10 (tramp--test-timeout-handler))
+                 (while (accept-process-output proc 0 nil t)))
+               (delete-process proc)
+               (with-current-buffer stderr
+                 (should
+                  (string-match
+                   "cat:.* No such file or directory" (buffer-string)))))
 
-         ;; Cleanup.
-         (ignore-errors (delete-process proc))
-         (ignore-errors (kill-buffer stderr))))
+           ;; Cleanup.
+           (ignore-errors (delete-process proc))
+           (ignore-errors (kill-buffer stderr)))))
 
       ;; Process with stderr file.
-      (dolist (tmpfile `(,tmp-name1 ,tmp-name2))
-       (unwind-protect
-           (with-temp-buffer
-             (setq proc
-                   (with-no-warnings
-                     (make-process
-                      :name "test6" :buffer (current-buffer)
-                      :command '("cat" "/does-not-exist")
-                      :stderr tmpfile
-                      :file-handler t)))
-             (should (processp proc))
-             ;; Read stderr.
-             (with-timeout (10 (tramp--test-timeout-handler))
-               (while (accept-process-output proc nil nil t)))
-             (delete-process proc)
+      (unless (tramp-direct-async-process-p)
+       (dolist (tmpfile `(,tmp-name1 ,tmp-name2))
+         (unwind-protect
              (with-temp-buffer
-               (insert-file-contents tmpfile)
-               (should
-                (string-match
-                 "cat:.* No such file or directory" (buffer-string)))))
+               (setq proc
+                     (with-no-warnings
+                       (make-process
+                        :name "test6" :buffer (current-buffer)
+                        :command '("cat" "/does-not-exist")
+                        :stderr tmpfile
+                        :file-handler t)))
+               (should (processp proc))
+               ;; Read stderr.
+               (with-timeout (10 (tramp--test-timeout-handler))
+                 (while (accept-process-output proc nil nil t)))
+               (delete-process proc)
+               (with-temp-buffer
+                 (insert-file-contents tmpfile)
+                 (should
+                  (string-match
+                   "cat:.* No such file or directory" (buffer-string)))))
 
-         ;; Cleanup.
-         (ignore-errors (delete-process proc))
-         (ignore-errors (delete-file tmpfile)))))))
+           ;; Cleanup.
+           (ignore-errors (delete-process proc))
+           (ignore-errors (delete-file tmpfile))))))))
+
+(tramp--test--deftest-direct-async-process tramp-test30-make-process
+  "Check direct async `make-process'.")
 
 (ert-deftest tramp-test31-interrupt-process ()
   "Check `interrupt-process'."
@@ -5689,11 +5709,11 @@ This does not support special file names."
   "Check, whether the sudoedit method is used."
   (tramp-sudoedit-file-name-p tramp-test-temporary-file-directory))
 
-(defun tramp--test-windows-nt ()
+(defun tramp--test-windows-nt-p ()
   "Check, whether the locale host runs MS Windows."
   (eq system-type 'windows-nt))
 
-(defun tramp--test-windows-nt-and-batch ()
+(defun tramp--test-windows-nt-and-batch-p ()
   "Check, whether the locale host runs MS Windows in batch mode.
 This does not support special characters."
   (and (eq system-type 'windows-nt) noninteractive))
@@ -6000,7 +6020,7 @@ Use the `ls' command."
   (skip-unless (tramp--test-enabled))
   (skip-unless (tramp--test-sh-p))
   (skip-unless (not (tramp--test-rsync-p)))
-  (skip-unless (not (tramp--test-windows-nt-and-batch)))
+  (skip-unless (not (tramp--test-windows-nt-and-batch-p)))
   (skip-unless (not (tramp--test-windows-nt-and-pscp-psftp-p)))
 
   (let ((tramp-connection-properties
@@ -6066,7 +6086,7 @@ Use the `ls' command."
   (skip-unless (tramp--test-enabled))
   (skip-unless (not (tramp--test-docker-p)))
   (skip-unless (not (tramp--test-rsync-p)))
-  (skip-unless (not (tramp--test-windows-nt-and-batch)))
+  (skip-unless (not (tramp--test-windows-nt-and-batch-p)))
   (skip-unless (not (tramp--test-windows-nt-and-pscp-psftp-p)))
   (skip-unless (not (tramp--test-ksh-p)))
   (skip-unless (not (tramp--test-crypt-p)))
@@ -6081,7 +6101,7 @@ Use the `stat' command."
   (skip-unless (tramp--test-sh-p))
   (skip-unless (not (tramp--test-docker-p)))
   (skip-unless (not (tramp--test-rsync-p)))
-  (skip-unless (not (tramp--test-windows-nt-and-batch)))
+  (skip-unless (not (tramp--test-windows-nt-and-batch-p)))
   (skip-unless (not (tramp--test-windows-nt-and-pscp-psftp-p)))
   (skip-unless (not (tramp--test-ksh-p)))
   (skip-unless (not (tramp--test-crypt-p)))
@@ -6103,7 +6123,7 @@ Use the `perl' command."
   (skip-unless (tramp--test-sh-p))
   (skip-unless (not (tramp--test-docker-p)))
   (skip-unless (not (tramp--test-rsync-p)))
-  (skip-unless (not (tramp--test-windows-nt-and-batch)))
+  (skip-unless (not (tramp--test-windows-nt-and-batch-p)))
   (skip-unless (not (tramp--test-windows-nt-and-pscp-psftp-p)))
   (skip-unless (not (tramp--test-ksh-p)))
   (skip-unless (not (tramp--test-crypt-p)))
@@ -6128,7 +6148,7 @@ Use the `ls' command."
   (skip-unless (tramp--test-sh-p))
   (skip-unless (not (tramp--test-docker-p)))
   (skip-unless (not (tramp--test-rsync-p)))
-  (skip-unless (not (tramp--test-windows-nt-and-batch)))
+  (skip-unless (not (tramp--test-windows-nt-and-batch-p)))
   (skip-unless (not (tramp--test-windows-nt-and-pscp-psftp-p)))
   (skip-unless (not (tramp--test-ksh-p)))
   (skip-unless (not (tramp--test-crypt-p)))
@@ -6223,7 +6243,7 @@ process sentinels.  They shall not disturb each other."
           (shell-file-name (if (tramp--test-adb-p) "/system/bin/sh" "/bin/sh"))
           ;; It doesn't work on w32 systems.
           (watchdog
-           (unless (tramp--test-windows-nt)
+           (unless (tramp--test-windows-nt-p)
               (start-process-shell-command
                "*watchdog*" nil
                (format
@@ -6591,7 +6611,8 @@ If INTERACTIVE is non-nil, the tests are run 
interactively."
 ;; * Fix `tramp-test06-directory-file-name' for `ftp'.
 ;; * Investigate, why `tramp-test11-copy-file' and `tramp-test12-rename-file'
 ;;   do not work properly for `nextcloud'.
-;; * Implement `tramp-test31-interrupt-process' for `adb'.
+;; * Implement `tramp-test31-interrupt-process' for `adb' and for
+;;   direct async processes.
 ;; * Fix Bug#16928 in `tramp-test43-asynchronous-requests'.  A remote
 ;;   file name operation cannot run in the timer.  Remove `:unstable' tag?
 
diff --git a/test/lisp/progmodes/compile-tests.el 
b/test/lisp/progmodes/compile-tests.el
index d566e7d..819f2e7 100644
--- a/test/lisp/progmodes/compile-tests.el
+++ b/test/lisp/progmodes/compile-tests.el
@@ -267,6 +267,8 @@
      3 nil 29 "test_main.cpp")
     ("1>test_main.cpp(29): error C4430: missing type specifier - int assumed. 
Note: C++ does not support default-int"
      3 nil 29 "test_main.cpp")
+    ("C:\\tmp\\test.cpp(101,11): error C4101: 'bias0123': unreferenced local 
variable [C:\\tmp\\project.vcxproj]"
+     1 11 101 "C:\\tmp\\test.cpp")
     ;; watcom
     ("..\\src\\ctrl\\lister.c(109): Error! E1009: Expecting ';' but found '{'"
      1 nil 109 "..\\src\\ctrl\\lister.c")
@@ -434,7 +436,7 @@ The test data is in `compile-tests--test-regexps-data'."
           (compilation-num-warnings-found 0)
           (compilation-num-infos-found 0))
       (mapc #'compile--test-error-line compile-tests--test-regexps-data)
-      (should (eq compilation-num-errors-found 94))
+      (should (eq compilation-num-errors-found 95))
       (should (eq compilation-num-warnings-found 35))
       (should (eq compilation-num-infos-found 28)))))
 
diff --git a/test/lisp/progmodes/subword-tests.el 
b/test/lisp/progmodes/subword-tests.el
index 86e905c..6aeee76 100644
--- a/test/lisp/progmodes/subword-tests.el
+++ b/test/lisp/progmodes/subword-tests.el
@@ -5,18 +5,20 @@
 ;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
 ;; Keywords:
 
-;; This program is free software; you can redistribute it and/or modify
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
 ;; the Free Software Foundation, either version 3 of the License, or
 ;; (at your option) any later version.
 
-;; This program is distributed in the hope that it will be useful,
+;; GNU Emacs is distributed in the hope that it will be useful,
 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with this program.  If not, see <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.
 
 ;;; Commentary:
 
diff --git a/test/lisp/simple-tests.el b/test/lisp/simple-tests.el
index 63e504b..457de91 100644
--- a/test/lisp/simple-tests.el
+++ b/test/lisp/simple-tests.el
@@ -4,18 +4,20 @@
 
 ;; Author: Artur Malabarba <bruce.connor.am@gmail.com>
 
-;; This program is free software; you can redistribute it and/or modify
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
 ;; the Free Software Foundation, either version 3 of the License, or
 ;; (at your option) any later version.
 
-;; This program is distributed in the hope that it will be useful,
+;; GNU Emacs is distributed in the hope that it will be useful,
 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with this program.  If not, see <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.
 
 ;;; Code:
 
diff --git a/test/lisp/sort-tests.el b/test/lisp/sort-tests.el
index 21f483a..9033745 100644
--- a/test/lisp/sort-tests.el
+++ b/test/lisp/sort-tests.el
@@ -4,18 +4,20 @@
 
 ;; Author: Artur Malabarba <bruce.connor.am@gmail.com>
 
-;; This program is free software; you can redistribute it and/or modify
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
 ;; the Free Software Foundation, either version 3 of the License, or
 ;; (at your option) any later version.
 
-;; This program is distributed in the hope that it will be useful,
+;; GNU Emacs is distributed in the hope that it will be useful,
 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with this program.  If not, see <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.
 
 ;;; Code:
 
diff --git a/test/lisp/textmodes/conf-mode-tests.el 
b/test/lisp/textmodes/conf-mode-tests.el
index 7e87026..7e094e8 100644
--- a/test/lisp/textmodes/conf-mode-tests.el
+++ b/test/lisp/textmodes/conf-mode-tests.el
@@ -7,18 +7,18 @@
 
 ;; This file is part of GNU Emacs.
 
-;; This program is free software; you can redistribute it and/or modify
+;; GNU Emacs is free software: you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
 ;; the Free Software Foundation, either version 3 of the License, or
 ;; (at your option) any later version.
 
-;; This program is distributed in the hope that it will be useful,
+;; GNU Emacs is distributed in the hope that it will be useful,
 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with this program.  If not, see <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.
 
 ;;; Commentary:
 
diff --git a/test/lisp/textmodes/css-mode-tests.el 
b/test/lisp/textmodes/css-mode-tests.el
index b57bbd8..38cb73b 100644
--- a/test/lisp/textmodes/css-mode-tests.el
+++ b/test/lisp/textmodes/css-mode-tests.el
@@ -7,18 +7,20 @@
 
 ;; This file is part of GNU Emacs.
 
-;; This program is free software; you can redistribute it and/or modify
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
 ;; the Free Software Foundation, either version 3 of the License, or
 ;; (at your option) any later version.
 
-;; This program is distributed in the hope that it will be useful,
+;; GNU Emacs is distributed in the hope that it will be useful,
 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with this program.  If not, see <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.
 
 ;;; Commentary:
 
diff --git a/test/lisp/url/url-handlers-test.el 
b/test/lisp/url/url-handlers-test.el
index bf574fc..57692e5 100644
--- a/test/lisp/url/url-handlers-test.el
+++ b/test/lisp/url/url-handlers-test.el
@@ -4,18 +4,20 @@
 
 ;; Author: Nicolas Petton <nicolas@petton.fr>
 
-;; This program is free software; you can redistribute it and/or modify
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
 ;; the Free Software Foundation, either version 3 of the License, or
 ;; (at your option) any later version.
 
-;; This program is distributed in the hope that it will be useful,
+;; GNU Emacs is distributed in the hope that it will be useful,
 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with this program.  If not, see <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.
 
 ;;; Commentary:
 
diff --git a/test/lisp/wdired-tests.el b/test/lisp/wdired-tests.el
index 2cfabd1..96e88f6 100644
--- a/test/lisp/wdired-tests.el
+++ b/test/lisp/wdired-tests.el
@@ -4,18 +4,18 @@
 
 ;; This file is part of GNU Emacs.
 
-;; This program is free software; you can redistribute it and/or modify
+;; GNU Emacs is free software: you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
 ;; the Free Software Foundation, either version 3 of the License, or
 ;; (at your option) any later version.
 
-;; This program is distributed in the hope that it will be useful,
+;; GNU Emacs is distributed in the hope that it will be useful,
 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with this program.  If not, see <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.
 
 ;;; Code:
 
diff --git a/test/manual/cedet/cedet-utests.el 
b/test/manual/cedet/cedet-utests.el
index 124b499..ee6be43 100644
--- a/test/manual/cedet/cedet-utests.el
+++ b/test/manual/cedet/cedet-utests.el
@@ -150,7 +150,7 @@ of just logging the error."
       ;; Cleanup stray input and events that are in the way.
       ;; Not doing this causes sit-for to not refresh the screen.
       ;; Doing this causes the user to need to press keys more frequently.
-      (when (and (interactive-p) (input-pending-p))
+      (when (and (called-interactively-p 'interactive) (input-pending-p))
        (if (fboundp 'read-event)
            (read-event)
          (read-char)))
@@ -497,11 +497,11 @@ When optional NO-ERROR don't throw an error if we can't 
run tests."
        (error (concat "Pulse test only works on versions of Emacs"
                       " that support pulsing")))
     ;; Run the tests
-    (when (interactive-p)
+    (when (called-interactively-p 'interactive)
       (message "<Press a key> Pulse one line.")
       (read-char))
     (pulse-momentary-highlight-one-line (point))
-    (when (interactive-p)
+    (when (called-interactively-p 'interactive)
       (message "<Press a key> Pulse a region.")
       (read-char))
     (pulse-momentary-highlight-region (point)
@@ -510,11 +510,11 @@ When optional NO-ERROR don't throw an error if we can't 
run tests."
                                            (forward-char 30)
                                          (error nil))
                                        (point)))
-    (when (interactive-p)
+    (when (called-interactively-p 'interactive)
       (message "<Press a key> Pulse line a specific color.")
       (read-char))
     (pulse-momentary-highlight-one-line (point) 'mode-line)
-    (when (interactive-p)
+    (when (called-interactively-p 'interactive)
       (message "<Press a key> Pulse a pre-existing overlay.")
       (read-char))
     (let* ((start (point-at-bol))
@@ -530,7 +530,7 @@ When optional NO-ERROR don't throw an error if we can't run 
tests."
          (delete-overlay o)
        (error "Non-temporary overlay was deleted!"))
       )
-    (when (interactive-p)
+    (when (called-interactively-p 'interactive)
       (message "Done!"))))
 
 (provide 'cedet-utests)
diff --git a/test/manual/cedet/semantic-tests.el 
b/test/manual/cedet/semantic-tests.el
index 53552be..a0899cb 100644
--- a/test/manual/cedet/semantic-tests.el
+++ b/test/manual/cedet/semantic-tests.el
@@ -235,7 +235,7 @@ Analyze the area between BEG and END."
       (set-buffer buff)
       (semantic-lex-spp-write-test)
       (kill-buffer buff)
-      (when (not (interactive-p))
+      (when (not (called-interactively-p 'interactive))
         (kill-buffer "*SPP Write Test*"))
       )))
 
@@ -276,7 +276,7 @@ tag that contains point, and return that."
        target (lambda (start end prefix) (setq Lcount (1+ Lcount)))
        (semantic-tag-start tag)
        (semantic-tag-end tag))
-      (when (interactive-p)
+      (when (called-interactively-p 'interactive)
        (message "Found %d occurrences of %s in %.2f seconds"
                 Lcount (semantic-tag-name target)
                 (semantic-elapsed-time start nil)))
diff --git a/test/manual/image-size-tests.el b/test/manual/image-size-tests.el
index 67d8f78..159e902 100644
--- a/test/manual/image-size-tests.el
+++ b/test/manual/image-size-tests.el
@@ -4,18 +4,18 @@
 
 ;; This file is part of GNU Emacs.
 
-;; This program is free software; you can redistribute it and/or modify
+;; GNU Emacs is free software: you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
 ;; the Free Software Foundation, either version 3 of the License, or
 ;; (at your option) any later version.
 
-;; This program is distributed in the hope that it will be useful,
+;; GNU Emacs is distributed in the hope that it will be useful,
 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with this program.  If not, see <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.
 
 ;; To test: Load the file and eval (image-size-tests).
 ;; A non-erroring result is a success.
diff --git a/test/manual/image-transforms-tests.el 
b/test/manual/image-transforms-tests.el
index 0ebd5c7..02607e6 100644
--- a/test/manual/image-transforms-tests.el
+++ b/test/manual/image-transforms-tests.el
@@ -48,24 +48,24 @@
   (let ((image "<svg height='30' width='30'>
                   <rect x='0' y='0' width='10' height='10'/>
                   <rect x='10' y='10' width='10' height='10'
-                        style='fill:none;stroke-width:1;stroke:#000'/>
-                  <line x1='10' y1='10' x2='20' y2='20' style='stroke:#000'/>
-                  <line x1='20' y1='10' x2='10' y2='20' style='stroke:#000'/>
+                        style='fill:none;stroke-width:1;stroke:currentColor'/>
+                  <line x1='10' y1='10' x2='20' y2='20' 
style='stroke:currentColor'/>
+                  <line x1='20' y1='10' x2='10' y2='20' 
style='stroke:currentColor'/>
                   <rect x='20' y='20' width='10' height='10'
-                        style='fill:none;stroke-width:1;stroke:#000'/>
+                        style='fill:none;stroke-width:1;stroke:currentColor'/>
                 </svg>")
         (top-left "<svg height='10' width='10'>
                      <rect x='0' y='0' width='10' height='10'/>
                    </svg>")
         (middle "<svg height='10' width='10'>
                    <rect x='0' y='0' width='10' height='10'
-                         style='fill:none;stroke-width:1;stroke:#000'/>
-                   <line x1='0' y1='0' x2='10' y2='10' style='stroke:#000'/>
-                   <line x1='10' y1='0' x2='0' y2='10' style='stroke:#000'/>
+                         style='fill:none;stroke-width:1;stroke:currentColor'/>
+                   <line x1='0' y1='0' x2='10' y2='10' 
style='stroke:currentColor'/>
+                   <line x1='10' y1='0' x2='0' y2='10' 
style='stroke:currentColor'/>
                  </svg>")
         (bottom-right "<svg height='10' width='10'>
                          <rect x='0' y='0' width='10' height='10'
-                               style='fill:none;stroke-width:1;stroke:#000'/>
+                               
style='fill:none;stroke-width:1;stroke:currentColor'/>
                        </svg>"))
     (insert-header "Test Crop: cropping an image (only works with 
ImageMagick)")
     (insert-test "all params" top-left image '(:crop (10 10 0 0)))
@@ -77,23 +77,23 @@
 (defun test-scaling ()
   (let ((image "<svg height='10' width='10'>
                   <rect x='0' y='0' width='10' height='10'
-                        style='fill:none;stroke-width:1;stroke:#000'/>
-                  <line x1='0' y1='0' x2='10' y2='10' style='stroke:#000'/>
-                  <line x1='10' y1='0' x2='0' y2='10' style='stroke:#000'/>
+                        style='fill:none;stroke-width:1;stroke:currentColor'/>
+                  <line x1='0' y1='0' x2='10' y2='10' 
style='stroke:currentColor'/>
+                  <line x1='10' y1='0' x2='0' y2='10' 
style='stroke:currentColor'/>
                 </svg>")
         (large "<svg height='20' width='20'>
                   <rect x='0' y='0' width='20' height='20'
-                        style='fill:none;stroke-width:2;stroke:#000'/>
+                        style='fill:none;stroke-width:2;stroke:currentColor'/>
                   <line x1='0' y1='0' x2='20' y2='20'
-                        style='stroke-width:2;stroke:#000'/>
+                        style='stroke-width:2;stroke:currentColor'/>
                   <line x1='20' y1='0' x2='0' y2='20'
-                        style='stroke-width:2;stroke:#000'/>
+                        style='stroke-width:2;stroke:currentColor'/>
                 </svg>")
         (small "<svg height='5' width='5'>
                   <rect x='0' y='0' width='4' height='4'
-                        style='fill:none;stroke-width:1;stroke:#000'/>
-                  <line x1='0' y1='0' x2='4' y2='4' style='stroke:#000'/>
-                  <line x1='4' y1='0' x2='0' y2='4' style='stroke:#000'/>
+                        style='fill:none;stroke-width:1;stroke:currentColor'/>
+                  <line x1='0' y1='0' x2='4' y2='4' 
style='stroke:currentColor'/>
+                  <line x1='4' y1='0' x2='0' y2='4' 
style='stroke:currentColor'/>
                 </svg>"))
     (insert-header "Test Scaling: resize an image (pixelization may occur)")
     (insert-test "1x" image image '(:scale 1))
@@ -107,27 +107,27 @@
 (defun test-scaling-rotation ()
   (let ((image "<svg height='20' width='20'>
                   <rect x='0' y='0' width='20' height='20'
-                        style='fill:none;stroke-width:1;stroke:#000'/>
+                        style='fill:none;stroke-width:1;stroke:currentColor'/>
                   <rect x='0' y='0' width='10' height='10'
-                        style='fill:#000'/>
+                        style='fill:currentColor'/>
                 </svg>")
         (x2-90 "<svg height='40' width='40'>
                   <rect x='0' y='0' width='40' height='40'
-                        style='fill:none;stroke-width:1;stroke:#000'/>
+                        style='fill:none;stroke-width:1;stroke:currentColor'/>
                   <rect x='20' y='0' width='20' height='20'
-                        style='fill:#000'/>
+                        style='fill:currentColor'/>
                 </svg>")
         (x2--90 "<svg height='40' width='40'>
                    <rect x='0' y='0' width='40' height='40'
-                         style='fill:none;stroke-width:1;stroke:#000'/>
+                         style='fill:none;stroke-width:1;stroke:currentColor'/>
                    <rect x='0' y='20' width='20' height='20'
-                         style='fill:#000'/>
+                         style='fill:currentColor'/>
                  </svg>")
         (x0.5-180 "<svg height='10' width='10'>
                      <rect x='0' y='0' width='10' height='10'
-                           style='fill:none;stroke-width:1;stroke:#000'/>
+                           
style='fill:none;stroke-width:1;stroke:currentColor'/>
                      <rect x='5' y='5' width='5' height='5'
-                           style='fill:#000'/>
+                           style='fill:currentColor'/>
                    </svg>"))
     (insert-header "Test Scaling and Rotation: resize and rotate an image 
(pixelization may occur)")
     (insert-test "1x, 0 degrees" image image '(:scale 1 :rotation 0))
diff --git a/test/manual/scroll-tests.el b/test/manual/scroll-tests.el
index 96a419a..937e0b1 100644
--- a/test/manual/scroll-tests.el
+++ b/test/manual/scroll-tests.el
@@ -4,18 +4,18 @@
 
 ;; This file is part of GNU Emacs.
 
-;; This program is free software; you can redistribute it and/or modify
+;; GNU Emacs is free software: you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
 ;; the Free Software Foundation, either version 3 of the License, or
 ;; (at your option) any later version.
 
-;; This program is distributed in the hope that it will be useful,
+;; GNU Emacs is distributed in the hope that it will be useful,
 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with this program.  If not, see <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.
 
 ;;; Commentary:
 
diff --git a/test/src/charset-tests.el b/test/src/charset-tests.el
index 9a1d0a4..86a0d6f 100644
--- a/test/src/charset-tests.el
+++ b/test/src/charset-tests.el
@@ -2,18 +2,20 @@
 
 ;; Copyright 2017-2020 Free Software Foundation, Inc.
 
-;; This program is free software; you can redistribute it and/or modify
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
 ;; the Free Software Foundation, either version 3 of the License, or
 ;; (at your option) any later version.
 
-;; This program is distributed in the hope that it will be useful,
+;; GNU Emacs is distributed in the hope that it will be useful,
 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with this program.  If not, see <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.
 
 ;;; Code:
 
diff --git a/test/src/chartab-tests.el b/test/src/chartab-tests.el
index 0ddea2b..4d52dc3 100644
--- a/test/src/chartab-tests.el
+++ b/test/src/chartab-tests.el
@@ -4,18 +4,20 @@
 
 ;; Author: Eli Zaretskii <eliz@gnu.org>
 
-;; This program is free software; you can redistribute it and/or modify
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
 ;; the Free Software Foundation, either version 3 of the License, or
 ;; (at your option) any later version.
 
-;; This program is distributed in the hope that it will be useful,
+;; GNU Emacs is distributed in the hope that it will be useful,
 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with this program.  If not, see <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.
 
 ;;; Code:
 
diff --git a/test/src/cmds-tests.el b/test/src/cmds-tests.el
index e98e578..302b00c 100644
--- a/test/src/cmds-tests.el
+++ b/test/src/cmds-tests.el
@@ -5,18 +5,20 @@
 ;; Author: Nicolas Richard <youngfrog@members.fsf.org>
 ;; Keywords:
 
-;; This program is free software; you can redistribute it and/or modify
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
 ;; the Free Software Foundation, either version 3 of the License, or
 ;; (at your option) any later version.
 
-;; This program is distributed in the hope that it will be useful,
+;; GNU Emacs is distributed in the hope that it will be useful,
 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with this program.  If not, see <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.
 
 ;;; Commentary:
 
diff --git a/test/src/doc-tests.el b/test/src/doc-tests.el
index 50cf014..797b9ba 100644
--- a/test/src/doc-tests.el
+++ b/test/src/doc-tests.el
@@ -4,18 +4,20 @@
 
 ;; Author: Eli Zaretskii <eliz@gnu.org>
 
-;; This program is free software; you can redistribute it and/or modify
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
 ;; the Free Software Foundation, either version 3 of the License, or
 ;; (at your option) any later version.
 
-;; This program is distributed in the hope that it will be useful,
+;; GNU Emacs is distributed in the hope that it will be useful,
 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with this program.  If not, see <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.
 
 ;;; Code:
 
diff --git a/test/src/editfns-tests.el b/test/src/editfns-tests.el
index 18f76af..d7c7aec 100644
--- a/test/src/editfns-tests.el
+++ b/test/src/editfns-tests.el
@@ -4,18 +4,18 @@
 
 ;; This file is part of GNU Emacs.
 
-;; This program is free software; you can redistribute it and/or modify
+;; GNU Emacs is free software: you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
 ;; the Free Software Foundation, either version 3 of the License, or
 ;; (at your option) any later version.
 
-;; This program is distributed in the hope that it will be useful,
+;; GNU Emacs is distributed in the hope that it will be useful,
 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with this program.  If not, see <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.
 
 ;;; Code:
 
diff --git a/test/src/fileio-tests.el b/test/src/fileio-tests.el
index 96b03a0..7baa4c7 100644
--- a/test/src/fileio-tests.el
+++ b/test/src/fileio-tests.el
@@ -98,15 +98,48 @@ Also check that an encoding error can appear in a symlink."
 
 (ert-deftest fileio-tests--relative-HOME ()
   "Test that expand-file-name works even when HOME is relative."
-  (let ((old-home (getenv "HOME")))
+  (let ((process-environment (copy-sequence process-environment)))
     (setenv "HOME" "a/b/c")
     (should (equal (expand-file-name "~/foo")
                    (expand-file-name "a/b/c/foo")))
     (when (memq system-type '(ms-dos windows-nt))
       ;; Test expansion of drive-relative file names.
       (setenv "HOME" "x:foo")
-      (should (equal (expand-file-name "~/bar") "x:/foo/bar")))
-    (setenv "HOME" old-home)))
+      (should (equal (expand-file-name "~/bar") "x:/foo/bar")))))
+
+(ert-deftest fileio-tests--HOME-trailing-slash ()
+  "Test that expand-file-name of \"~\" respects trailing slash."
+  (let ((process-environment (copy-sequence process-environment)))
+    (dolist (home
+             (if (memq system-type '(windows-nt ms-dos))
+                 '("c:/a/b/c" "c:/a/b/c/")
+               '("/a/b/c" "/a/b/c/")))
+      (setenv "HOME" home)
+      (should (equal (expand-file-name "~") (expand-file-name home))))))
+
+(ert-deftest fileio-tests--expand-file-name-trailing-slash ()
+  (dolist (fooslashalias '("foo/" "foo//" "foo/." "foo//." "foo///././."
+                           "foo/a/.."))
+    (if (memq system-type '(windows-nt ms-dos))
+        (progn
+          (should (equal (expand-file-name fooslashalias "c:/") "c:/foo/"))
+          (should (equal (expand-file-name (concat "c:/" fooslashalias))
+                         "c:/foo/"))
+          (should (equal (expand-file-name "." "c:/usr/spool/")
+                         "c:/usr/spool/"))
+          (should (equal (expand-file-name "" "c:/usr/spool/")
+                         "c:/usr/spool/")))
+      (should (equal (expand-file-name fooslashalias "/") "/foo/"))
+      (should (equal (expand-file-name (concat "/" fooslashalias)) "/foo/"))
+      (should (equal (expand-file-name "." "/usr/spool/") "/usr/spool/"))
+      (should (equal (expand-file-name "" "/usr/spool/") "/usr/spool/"))))
+  ;; Trailing "B/C/.." means B must be a directory.
+  (if (memq system-type '(windows-nt ms-dos))
+      (progn
+        (should (equal (expand-file-name "c:/a/b/c/..") "c:/a/b/"))
+        (should (equal (expand-file-name "c:/a/b/c/../") "c:/a/b/")))
+    (should (equal (expand-file-name "/a/b/c/..") "/a/b/"))
+    (should (equal (expand-file-name "/a/b/c/../") "/a/b/"))))
 
 (ert-deftest fileio-tests--insert-file-interrupt ()
   (let ((text "-*- coding: binary -*-\n\xc3\xc3help")
diff --git a/test/src/lread-tests.el b/test/src/lread-tests.el
index 6efd8be..26fd6aa 100644
--- a/test/src/lread-tests.el
+++ b/test/src/lread-tests.el
@@ -6,18 +6,18 @@
 
 ;; This file is part of GNU Emacs.
 
-;; This program is free software; you can redistribute it and/or modify
+;; GNU Emacs is free software: you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
 ;; the Free Software Foundation, either version 3 of the License, or
 ;; (at your option) any later version.
 
-;; This program is distributed in the hope that it will be useful,
+;; GNU Emacs is distributed in the hope that it will be useful,
 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with this program.  If not, see <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.
 
 ;;; Commentary:
 
diff --git a/test/src/print-tests.el b/test/src/print-tests.el
index 0f72996..42e5962 100644
--- a/test/src/print-tests.el
+++ b/test/src/print-tests.el
@@ -4,18 +4,18 @@
 
 ;; This file is part of GNU Emacs.
 
-;; This program is free software; you can redistribute it and/or modify
+;; GNU Emacs is free software: you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
 ;; the Free Software Foundation, either version 3 of the License, or
 ;; (at your option) any later version.
 
-;; This program is distributed in the hope that it will be useful,
+;; GNU Emacs is distributed in the hope that it will be useful,
 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with this program.  If not, see <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.
 
 ;;; Code:
 
diff --git a/test/src/process-tests.el b/test/src/process-tests.el
index 748afe4..e15ad47 100644
--- a/test/src/process-tests.el
+++ b/test/src/process-tests.el
@@ -2,18 +2,20 @@
 
 ;; Copyright (C) 2013-2020 Free Software Foundation, Inc.
 
-;; This program is free software; you can redistribute it and/or modify
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
 ;; the Free Software Foundation, either version 3 of the License, or
 ;; (at your option) any later version.
 
-;; This program is distributed in the hope that it will be useful,
+;; GNU Emacs is distributed in the hope that it will be useful,
 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with this program.  If not, see <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.
 
 ;;; Commentary:
 
diff --git a/test/src/timefns-tests.el b/test/src/timefns-tests.el
index 51dd1d1..b35a528 100644
--- a/test/src/timefns-tests.el
+++ b/test/src/timefns-tests.el
@@ -4,18 +4,20 @@
 
 ;; This file is part of GNU Emacs.
 
-;; This program is free software; you can redistribute it and/or modify
+;; GNU Emacs is free software: you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
 ;; the Free Software Foundation, either version 3 of the License, or
 ;; (at your option) any later version.
 
-;; This program is distributed in the hope that it will be useful,
+;; GNU Emacs is distributed in the hope that it will be useful,
 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with this program.  If not, see <https://www.gnu.org/licenses/>.
+;; along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.
+
+;;; Code:
 
 (require 'ert)
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]