5.4 Per-theme customization settings

If you prefer to maintain different customization options between the two themes, it is best you write your own functions that first set those options and then load the relevant theme. The following code does exactly that by simply differentiating the two themes on the choice of bold constructs in code syntax (enabled for one, disabled for the other).

(defun my-demo-modus-operandi ()
  (interactive)
  (setq modus-themes-bold-constructs t) ; ENABLE bold
  (modus-themes-load-operandi))

(defun my-demo-modus-vivendi ()
  (interactive)
  (setq modus-themes-bold-constructs nil) ; DISABLE bold
  (modus-themes-load-vivendi))

(defun my-demo-modus-themes-toggle ()
  (if (eq (car custom-enabled-themes) 'modus-operandi)
      (my-demo-modus-vivendi)
    (my-demo-modus-operandi)))

Then assign my-demo-modus-themes-toggle to a key instead of the equivalent the themes provide.

For a more elaborate design, it is better to inspect the source code of modus-themes-toggle and relevant functions.