aboutsummaryrefslogtreecommitdiff
path: root/extra-themes
diff options
context:
space:
mode:
Diffstat (limited to 'extra-themes')
-rw-r--r--extra-themes/2026-09-18-213348_1916x1052_scrot.pngbin0 -> 166487 bytes
-rw-r--r--extra-themes/evergarden-common.el338
-rw-r--r--extra-themes/evergarden-fall-theme.el187
-rw-r--r--extra-themes/evergarden-spring-theme.el187
-rw-r--r--extra-themes/evergarden-summer-theme.el187
-rw-r--r--extra-themes/evergarden-theme.el445
-rw-r--r--extra-themes/evergarden-winter-theme.el187
-rw-r--r--extra-themes/evergarden.el45
8 files changed, 1531 insertions, 45 deletions
diff --git a/extra-themes/2026-09-18-213348_1916x1052_scrot.png b/extra-themes/2026-09-18-213348_1916x1052_scrot.png
new file mode 100644
index 0000000..32b4a29
--- /dev/null
+++ b/extra-themes/2026-09-18-213348_1916x1052_scrot.png
Binary files differ
diff --git a/extra-themes/evergarden-common.el b/extra-themes/evergarden-common.el
new file mode 100644
index 0000000..749bcda
--- /dev/null
+++ b/extra-themes/evergarden-common.el
@@ -0,0 +1,338 @@
+;;; evergarden-common.el --- Shared engine for the evergarden theme family -*- lexical-binding: t; -*-
+
+;; Author: expansion of the original evergarden theme by @koi.rip
+;; Version: 0.2.0
+;; Package-Requires: ((emacs "28.1") (modus-themes "5.0.0") (ef-themes "2.0.0"))
+;; Keywords: faces, theme
+
+;;; Commentary:
+;; this is NOT a theme in itself
+
+;;; Code:
+
+(require 'modus-themes)
+(require 'ef-themes)
+
+(defgroup evergarden-theme nil
+ "Cozy evergarden theme family built on Modus and Ef."
+ :group 'faces
+ :group 'ef-themes
+ :prefix "evergarden-")
+
+(defconst evergarden-theme-family 'evergarden-theme
+ "Shared theme family symbol for every evergarden flavor.")
+
+(defconst evergarden--term-mappings-dark
+ '((bg-term-black bg-main)
+ (fg-term-black bg-main)
+ (bg-term-black-bright overlay0)
+ (fg-term-black-bright overlay0)
+ (bg-term-white fg-dim)
+ (fg-term-white fg-dim)
+ (bg-term-white-bright fg-main)
+ (fg-term-white-bright fg-main))
+ "ANSI black/white terminal mapping for dark-background flavors.
+Anchors \"black\" to the darkest neutrals and \"white\" to the lightest,
+the same relationship a light theme uses just inverted.")
+
+(defconst evergarden--term-mappings-light
+ '((bg-term-black fg-main)
+ (fg-term-black fg-main)
+ (bg-term-black-bright fg-dim)
+ (fg-term-black-bright fg-dim)
+ (bg-term-white border)
+ (fg-term-white border)
+ (bg-term-white-bright bg-main)
+ (fg-term-white-bright bg-main))
+ "ANSI black/white terminal mapping for the light-background flavor (summer).
+Matches fortune-gold-theme.el's light-theme convention.")
+
+(defconst evergarden--term-mappings-color
+ '((bg-term-red red) (fg-term-red red)
+ (bg-term-red-bright red-warmer) (fg-term-red-bright red-warmer)
+ (bg-term-green green) (fg-term-green green)
+ (bg-term-green-bright green-warmer) (fg-term-green-bright green-warmer)
+ (bg-term-yellow yellow) (fg-term-yellow yellow)
+ (bg-term-yellow-bright yellow-warmer) (fg-term-yellow-bright yellow-warmer)
+ (bg-term-blue blue) (fg-term-blue blue)
+ (bg-term-blue-bright blue-warmer) (fg-term-blue-bright blue-warmer)
+ (bg-term-magenta magenta) (fg-term-magenta magenta)
+ (bg-term-magenta-bright magenta-warmer) (fg-term-magenta-bright magenta-warmer)
+ (bg-term-cyan cyan) (fg-term-cyan cyan)
+ (bg-term-cyan-bright cyan-warmer) (fg-term-cyan-bright cyan-warmer))
+ "ANSI colored-slot terminal mapping, identical for every flavor.
+Left as true family colors (not the green signature) since ANSI red should
+stay red, ANSI blue should stay blue, etc., regardless of flavor.")
+
+(defconst evergarden-palette-mappings-partial
+ (append
+ '(
+ (err red)
+ (warning orange)
+ (info cyan)
+ (underline-err red)
+ (underline-warning orange)
+ (underline-note cyan)
+ (modeline-err red)
+ (modeline-warning yellow)
+ (modeline-info cyan)
+ (bg-prominent-warning bg-warning)
+ (fg-prominent-warning fg-main)
+ (bg-prominent-note bg-info)
+ (fg-prominent-note fg-main)
+
+ (fg-link blue)
+ (fg-link-visited magenta)
+ (fg-link-symbolic cyan)
+ (bg-link unspecified)
+ (bg-link-symbolic unspecified)
+ (bg-link-visited unspecified)
+ (underline-link blue)
+ (underline-link-visited magenta)
+ (underline-link-symbolic cyan)
+
+ (name cyan)
+ (keybind green)
+ (identifier fg-main)
+ (fg-prompt green)
+ (bg-prompt unspecified)
+
+ (builtin cyan-cooler)
+ (comment fg-dim)
+ (constant magenta-cooler)
+ (fnname cyan)
+ (fnname-call cyan-warmer)
+ (keyword red)
+ (preprocessor green)
+ (property fg-main)
+ (docstring fg-dim)
+ (docmarkup green-cooler)
+ (string green-warmer)
+ (type yellow)
+ (variable blue)
+ (variable-use blue)
+ (rx-backslash orange)
+ (rx-construct magenta)
+
+ (accent-0 green)
+ (accent-1 cyan)
+ (accent-2 magenta-warmer)
+ (accent-3 orange)
+
+ (fg-button-active fg-main)
+ (fg-button-inactive fg-dim)
+ (bg-button-active bg-main)
+ (bg-button-inactive bg-dim)
+ (fg-region fg-main)
+ (bg-mark-delete bg-red-subtle)
+ (fg-mark-delete red)
+ (bg-mark-select bg-green-subtle)
+ (fg-mark-select green)
+ (bg-mark-other bg-cyan-subtle)
+ (fg-mark-other cyan)
+
+ (date-common cyan)
+ (date-deadline red)
+ (date-deadline-subtle red-faint)
+ (date-event fg-alt)
+ (date-holiday red-warmer)
+ (date-holiday-other magenta-warmer)
+ (date-now fg-main)
+ (date-range fg-alt)
+ (date-scheduled green)
+ (date-scheduled-subtle green-faint)
+ (date-weekday blue)
+ (date-weekend red-faint)
+
+ (fg-prose-code green-cooler)
+ (prose-done green)
+ (fg-prose-macro green)
+ (prose-metadata fg-dim)
+ (prose-metadata-value fg-alt)
+ (prose-table fg-alt)
+ (prose-table-formula cyan)
+ (prose-tag yellow-faint)
+ (prose-todo red)
+ (fg-prose-verbatim magenta-warmer)
+
+ (mail-cite-0 green)
+ (mail-cite-1 cyan)
+ (mail-cite-2 magenta-warmer)
+ (mail-cite-3 red-warmer)
+ (mail-part cyan)
+ (mail-recipient blue)
+ (mail-subject green)
+ (mail-other fg-alt)
+
+ (bg-search-static bg-cyan-subtle)
+ (bg-search-current bg-green-intense)
+ (bg-search-lazy bg-green-subtle)
+ (bg-search-replace bg-red-intense)
+
+ (bg-search-rx-group-0 bg-green-intense)
+ (bg-search-rx-group-1 bg-magenta-intense)
+ (bg-search-rx-group-2 bg-cyan-intense)
+ (bg-search-rx-group-3 bg-red-intense)
+
+ (bg-space-err bg-red-intense)
+ (bg-space bg-main)
+ (fg-space border)
+
+ (fringe bg-main)
+ (fg-line-number-active green)
+ (fg-line-number-inactive overlay1)
+ (bg-line-number-active bg-hl-line)
+ (bg-line-number-inactive bg-main)
+
+ (bg-tab-bar bg-dim)
+ (bg-tab-current bg-main)
+ (bg-tab-other bg-dim)
+
+ (bg-prominent-err bg-err)
+ (fg-prominent-err err)
+ (fg-paren-match fg-main)
+ (underline-paren-match unspecified)
+ (bg-active-argument bg-active)
+ (fg-active-argument green)
+ (bg-active-value bg-green-subtle)
+ (fg-active-value green)
+
+ (bg-prose-block-delimiter bg-prose-block)
+ (fg-prose-block-delimiter fg-dim)
+ (bg-prose-block-contents bg-prose-block)
+ (bg-prose-code unspecified)
+ (bg-prose-macro unspecified)
+ (bg-prose-verbatim unspecified)
+
+ (fg-completion-match-0 green)
+ (fg-completion-match-1 cyan)
+ (fg-completion-match-2 magenta-warmer)
+ (fg-completion-match-3 orange)
+ (bg-completion-match-0 unspecified)
+ (bg-completion-match-1 unspecified)
+ (bg-completion-match-2 unspecified)
+ (bg-completion-match-3 unspecified)
+ (bg-completion bg-dim)
+ (fg-search-current fg-main)
+
+ (rainbow-0 green)
+ (rainbow-1 cyan)
+ (rainbow-2 magenta)
+ (rainbow-3 blue)
+ (rainbow-4 orange)
+ (rainbow-5 red)
+ (rainbow-6 yellow)
+ (rainbow-7 fg-alt)
+ (rainbow-8 fg-dim)
+
+ (fg-heading-0 green)
+ (fg-heading-1 green)
+ (fg-heading-2 cyan)
+ (fg-heading-3 magenta)
+ (fg-heading-4 blue)
+ (fg-heading-5 orange)
+ (fg-heading-6 red)
+ (fg-heading-7 fg-alt)
+ (fg-heading-8 fg-dim)
+ (bg-heading-0 unspecified)
+ (bg-heading-1 bg-green-nuanced)
+ (bg-heading-2 unspecified)
+ (bg-heading-3 bg-magenta-nuanced)
+ (bg-heading-4 bg-blue-nuanced)
+ (bg-heading-5 unspecified)
+ (bg-heading-6 bg-red-nuanced)
+ (bg-heading-7 unspecified)
+ (bg-heading-8 unspecified)
+ (overline-heading-0 green)
+ (overline-heading-1 green)
+ (overline-heading-2 cyan)
+ (overline-heading-3 magenta)
+ (overline-heading-4 blue)
+ (overline-heading-5 orange)
+ (overline-heading-6 red)
+ (overline-heading-7 unspecified)
+ (overline-heading-8 unspecified))
+ evergarden--term-mappings-color)
+ "Semantic color mappings shared by every evergarden flavor.
+Only references palette symbol names, never literal hex, so the exact same
+list works whether the active flavor's palette is dark or light.")
+(defconst evergarden-custom-faces
+ '(`(corfu-default ((,c :inherit modus-themes-fixed-pitch
+ :background ,bg-dim
+ :foreground ,fg-main)))
+ `(corfu-current ((,c :background ,bg-green-intense
+ :foreground ,fg-main
+ :extend t
+ :box (:line-width -1 :color ,green)
+ :weight semi-bold)))
+ `(corfu-border ((,c :background ,border
+ :foreground ,border)))
+ `(corfu-bar ((,c :background ,green)))
+ `(corfu-popupinfo ((,c :background ,bg-dim
+ :foreground ,fg-main)))))
+(defun evergarden--ensure-modus-theme-metadata (name family description mode palette-sym overrides-sym)
+ "Declare NAME as a Modus-derived theme when reloading in-session.
+
+FAMILY, DESCRIPTION, MODE, PALETTE-SYM and OVERRIDES-SYM are forwarded to
+`modus-themes-declare', matching what `modus-themes-theme' expects to find
+if the theme object already exists in the current session."
+ (unless (plist-get (get name 'theme-properties) :modus-core-palette)
+ (modus-themes-declare name family description mode palette-sym nil overrides-sym)
+ (modus-themes-register name)))
+
+(defun evergarden-build-theme (flavor-name palette-partial mode)
+ "Register and define one evergarden flavor.
+
+FLAVOR-NAME is a symbol like `evergarden-fall'. PALETTE-PARTIAL is that
+flavor's base palette (its own analogue of one spring.lua/summer.lua/
+fall.lua/winter.lua table, plus the warmer/cooler/faint/intense/subtle/
+nuanced variants Modus needs). MODE is `dark' or `light' and selects which
+of `evergarden--term-mappings-dark'/`-light' gets appended."
+ (let* ((flavor-str (symbol-name flavor-name))
+ (description (format "Cozy evergarden dark theme, %s flavor."
+ (capitalize (substring flavor-str (length "evergarden-")))))
+ (palette-sym (intern (concat flavor-str "-palette")))
+ (overrides-sym (intern (concat flavor-str "-palette-overrides")))
+ (term-mappings (if (eq mode 'dark)
+ evergarden--term-mappings-dark
+ evergarden--term-mappings-light)))
+ (eval
+ `(progn
+ (defcustom ,overrides-sym nil
+ ,(format "Overrides for `%s'.
+
+Each element should have the form (NAME VALUE), where NAME is a palette
+entry from `%s' and VALUE is either another palette symbol or a color
+string."
+ palette-sym palette-sym)
+ :group 'evergarden-theme
+ :package-version '(evergarden-theme . "0.2.0")
+ :type '(repeat (list symbol (choice symbol string))))
+
+ (defconst ,palette-sym
+ (modus-themes-generate-palette
+ ',palette-partial
+ ',(if (eq mode 'dark) 'cool 'warm)
+ nil
+ (append evergarden-palette-mappings-partial
+ ',term-mappings
+ ef-themes-palette-common))
+ ,(format "Full palette for `%s'." flavor-name))
+
+ (evergarden--ensure-modus-theme-metadata
+ ',flavor-name 'evergarden-theme ,description ',mode ',palette-sym ',overrides-sym)
+
+ (modus-themes-theme
+ ',flavor-name 'evergarden-theme ,description ',mode
+ ',palette-sym nil ',overrides-sym 'evergarden-custom-faces))
+ t)))
+
+;;;###autoload
+(when load-file-name
+ (add-to-list 'custom-theme-load-path
+ (file-name-as-directory
+ (file-name-directory load-file-name))))
+
+(provide 'evergarden-common)
+
+;;; evergarden-common.el ends here
diff --git a/extra-themes/evergarden-fall-theme.el b/extra-themes/evergarden-fall-theme.el
new file mode 100644
index 0000000..e0903c2
--- /dev/null
+++ b/extra-themes/evergarden-fall-theme.el
@@ -0,0 +1,187 @@
+;;; evergarden-fall-theme.el --- Evergarden, Fall flavor -*- lexical-binding: t; -*-
+
+;; Author: expansion of the original evergarden theme by @koi.rip
+;; Version: 0.2.0
+;; Package-Requires: ((emacs "28.1") (modus-themes "5.0.0") (ef-themes "2.0.0"))
+;; Keywords: faces, theme
+
+;;; Commentary:
+;;
+;; The Fall flavor of evergarden -- generated by whiskers from
+;; the shared color table, same as lua/evergarden/palettes/fall.lua.
+;; All the actual face wiring lives in evergarden-common.el; this file only
+;; supplies Fall's own colors. DO NOT EDIT BY HAND -- edit the
+;; .tera template and re-run whiskers instead.
+
+;;; Code:
+
+;; Not `(file-name-directory (or load-file-name buffer-file-name))' --
+;; both can be nil depending on how the loader gets here (byte-compile
+;; caches, `eval-buffer', some straight.el paths), which signals
+;; `(wrong-type-argument stringp nil)'. `custom-theme-load-path' is
+;; reliably populated by the time any theme file loads (it's how this
+;; file was found in the first place), so search that instead.
+(unless (featurep 'evergarden-common)
+ (let ((common (locate-file "evergarden-common"
+ (append (seq-filter #'stringp custom-theme-load-path)
+ load-path)
+ '(".el" ".elc" ""))))
+ (if common
+ (load common)
+ (error "evergarden-common.el not found; add its directory to `custom-theme-load-path'"))))
+
+(defconst evergarden-fall-palette-partial
+ '(
+ ;; Core backgrounds / foregrounds
+ (cursor "#fae6ef")
+ (bg-main "#232a2e")
+ (bg-dim "#2b3337")
+ (bg-alt "#374145")
+ (fg-main "#f8f9e8")
+ (fg-dim "#adc9bc")
+ (fg-alt "#96b4aa")
+ (bg-active "#4a585c")
+ (bg-inactive "#2b3337")
+ (border "#58686d")
+
+ ;; Fall's own named palette (from the whiskers color table)
+ (bg-hl "#4a585c")
+ (bg-prose-block "#2a3338")
+ (red "#f57f82")
+ (orange "#f7a182")
+ (yellow "#f5d098")
+ (lime "#dbe6af")
+ (green "#cbe3b3")
+ (aqua "#b3e3ca")
+ (skye "#b3e6db")
+ (snow "#afd9e6")
+ (blue "#b2caed")
+ (purple "#d2bdf3")
+ (pink "#f3c0e5")
+ (cherry "#fae6ef")
+ (text "#f8f9e8")
+ (subtext1 "#adc9bc")
+ (subtext0 "#96b4aa")
+ (overlay2 "#839e9a")
+ (overlay1 "#6f8788")
+ (overlay0 "#58686d")
+ (surface2 "#4a585c")
+ (surface1 "#374145")
+ (surface0 "#2b3337")
+ (base "#232a2e")
+ (mantle "#1c2225")
+ (crust "#171c1f")
+
+ ;; Red family
+ (red-warmer "#f6788f")
+ (red-cooler "#f48f76")
+ (red-faint "#d07073")
+
+ ;; Green family
+ (green-warmer "#dbe6af")
+ (green-cooler "#bae1af")
+ (green-faint "#b1c999")
+
+ ;; Yellow family
+ (yellow-warmer "#f6c498")
+ (yellow-cooler "#f1dc97")
+ (yellow-faint "#d5b585")
+
+ ;; Blue family
+ (blue-warmer "#afd9e6")
+ (blue-cooler "#aeb8ec")
+ (blue-faint "#98aed0")
+
+ ;; Magenta/purple family
+ (magenta "#d2bdf3")
+ (magenta-warmer "#f3c0e5")
+ (magenta-cooler "#dcb8f2")
+ (magenta-faint "#b5a0d8")
+
+ ;; Cyan family
+ (cyan "#b3e3ca")
+ (cyan-warmer "#b3e3bf")
+ (cyan-cooler "#b3e6db")
+ (cyan-faint "#97c7ae")
+
+ ;; Intense/Subtle/Nuanced backgrounds
+ (bg-red-intense "#d79d9f")
+ (bg-red-subtle "#cca8a9")
+ (bg-red-nuanced "#c5afb0")
+ (bg-green-intense "#cbe1b5")
+ (bg-green-subtle "#cbd8be")
+ (bg-green-nuanced "#cbd3c3")
+ (bg-yellow-intense "#deccb0")
+ (bg-yellow-subtle "#d5cab9")
+ (bg-yellow-nuanced "#d0c9be")
+ (bg-blue-intense "#bccce4")
+ (bg-blue-subtle "#c4cedc")
+ (bg-blue-nuanced "#c8ced8")
+ (bg-magenta-intense "#d4c8e8")
+ (bg-magenta-subtle "#d6cee2")
+ (bg-magenta-nuanced "#d7d2de")
+ (bg-cyan-intense "#b5e1ca")
+ (bg-cyan-subtle "#bed8cb")
+ (bg-cyan-nuanced "#c3d3cb")
+
+ ;; Graph colors
+ (bg-graph-red-0 "#e09497")
+ (bg-graph-red-1 "#d69ea0")
+ (bg-graph-green-0 "#cbe8ae")
+ (bg-graph-green-1 "#cbe0b6")
+ (bg-graph-yellow-0 "#e6cda8")
+ (bg-graph-yellow-1 "#ddcbb1")
+ (bg-graph-blue-0 "#b6cbea")
+ (bg-graph-blue-1 "#bdcce3")
+ (bg-graph-magenta-0 "#d3c3ed")
+ (bg-graph-magenta-1 "#d4c8e8")
+ (bg-graph-cyan-0 "#aee8ca")
+ (bg-graph-cyan-1 "#b6e0ca")
+
+ ;; Diff
+ (bg-added "#cbe1b5")
+ (bg-added-faint "#cbd8be")
+ (bg-added-refine "#cbdcba")
+ (bg-added-fringe "#cbe8ae")
+ (fg-added "#cbe3b3")
+ (fg-added-intense "#8bcd49")
+
+ (bg-changed "#deccb0")
+ (bg-changed-faint "#d5cab9")
+ (bg-changed-refine "#d9cbb5")
+ (bg-changed-fringe "#e6cda8")
+ (fg-changed "#f1dc97")
+ (fg-changed-intense "#efbd19")
+
+ (bg-removed "#d79d9f")
+ (bg-removed-faint "#cca8a9")
+ (bg-removed-refine "#d0a4a5")
+ (bg-removed-fringe "#e09497")
+ (fg-removed "#f57f82")
+ (fg-removed-intense "#ef050d")
+
+ (bg-diff-context "#4a585c")
+
+ ;; UI chrome
+ (bg-mode-line-active "#435053")
+ (fg-mode-line-active "#f8f9e8")
+ (bg-mode-line-inactive "#2b3337")
+ (fg-mode-line-inactive "#adc9bc")
+ (border-mode-line-active "#cbe3b3")
+ (border-mode-line-inactive "#58686d")
+ (bg-completion "#2b3337")
+ (bg-hover "#4a585c")
+ (bg-hover-secondary "#c4cedc")
+ (bg-hl-line "#4a585c")
+ (bg-paren-match "#deccb0")
+ (bg-err "#d79d9f")
+ (bg-warning "#deccb0")
+ (bg-info "#b5e1ca")
+ (bg-region "#cbe1b5"))
+ "Base palette entries for `evergarden-fall', generated by whiskers.")
+
+(evergarden-build-theme 'evergarden-fall evergarden-fall-palette-partial 'dark)
+
+(provide 'evergarden-fall-theme)
+
+;;; evergarden-fall-theme.el ends here
diff --git a/extra-themes/evergarden-spring-theme.el b/extra-themes/evergarden-spring-theme.el
new file mode 100644
index 0000000..4ce3f85
--- /dev/null
+++ b/extra-themes/evergarden-spring-theme.el
@@ -0,0 +1,187 @@
+;;; evergarden-spring-theme.el --- Evergarden, Spring flavor -*- lexical-binding: t; -*-
+
+;; Author: expansion of the original evergarden theme by @koi.rip
+;; Version: 0.2.0
+;; Package-Requires: ((emacs "28.1") (modus-themes "5.0.0") (ef-themes "2.0.0"))
+;; Keywords: faces, theme
+
+;;; Commentary:
+;;
+;; The Spring flavor of evergarden -- generated by whiskers from
+;; the shared color table, same as lua/evergarden/palettes/spring.lua.
+;; All the actual face wiring lives in evergarden-common.el; this file only
+;; supplies Spring's own colors. DO NOT EDIT BY HAND -- edit the
+;; .tera template and re-run whiskers instead.
+
+;;; Code:
+
+;; Not `(file-name-directory (or load-file-name buffer-file-name))' --
+;; both can be nil depending on how the loader gets here (byte-compile
+;; caches, `eval-buffer', some straight.el paths), which signals
+;; `(wrong-type-argument stringp nil)'. `custom-theme-load-path' is
+;; reliably populated by the time any theme file loads (it's how this
+;; file was found in the first place), so search that instead.
+(unless (featurep 'evergarden-common)
+ (let ((common (locate-file "evergarden-common"
+ (append (seq-filter #'stringp custom-theme-load-path)
+ load-path)
+ '(".el" ".elc" ""))))
+ (if common
+ (load common)
+ (error "evergarden-common.el not found; add its directory to `custom-theme-load-path'"))))
+
+(defconst evergarden-spring-palette-partial
+ '(
+ ;; Core backgrounds / foregrounds
+ (cursor "#fae6ef")
+ (bg-main "#2b3438")
+ (bg-dim "#343e43")
+ (bg-alt "#3e4a4f")
+ (fg-main "#f8f9e8")
+ (fg-dim "#adc9bc")
+ (fg-alt "#96b4aa")
+ (bg-active "#4a585c")
+ (bg-inactive "#343e43")
+ (border "#58686d")
+
+ ;; Spring's own named palette (from the whiskers color table)
+ (bg-hl "#4a585c")
+ (bg-prose-block "#323d42")
+ (red "#f57f82")
+ (orange "#f7a182")
+ (yellow "#f5d098")
+ (lime "#dbe6af")
+ (green "#cbe3b3")
+ (aqua "#b3e3ca")
+ (skye "#b3e6db")
+ (snow "#afd9e6")
+ (blue "#b2caed")
+ (purple "#d2bdf3")
+ (pink "#f3c0e5")
+ (cherry "#fae6ef")
+ (text "#f8f9e8")
+ (subtext1 "#adc9bc")
+ (subtext0 "#96b4aa")
+ (overlay2 "#839e9a")
+ (overlay1 "#6f8788")
+ (overlay0 "#58686d")
+ (surface2 "#4a585c")
+ (surface1 "#3e4a4f")
+ (surface0 "#343e43")
+ (base "#2b3438")
+ (mantle "#232a2e")
+ (crust "#1c2225")
+
+ ;; Red family
+ (red-warmer "#f6788f")
+ (red-cooler "#f48f76")
+ (red-faint "#d07073")
+
+ ;; Green family
+ (green-warmer "#dbe6af")
+ (green-cooler "#bae1af")
+ (green-faint "#b1c999")
+
+ ;; Yellow family
+ (yellow-warmer "#f6c498")
+ (yellow-cooler "#f1dc97")
+ (yellow-faint "#d5b585")
+
+ ;; Blue family
+ (blue-warmer "#afd9e6")
+ (blue-cooler "#aeb8ec")
+ (blue-faint "#98aed0")
+
+ ;; Magenta/purple family
+ (magenta "#d2bdf3")
+ (magenta-warmer "#f3c0e5")
+ (magenta-cooler "#dcb8f2")
+ (magenta-faint "#b5a0d8")
+
+ ;; Cyan family
+ (cyan "#b3e3ca")
+ (cyan-warmer "#b3e3bf")
+ (cyan-cooler "#b3e6db")
+ (cyan-faint "#97c7ae")
+
+ ;; Intense/Subtle/Nuanced backgrounds
+ (bg-red-intense "#d79d9f")
+ (bg-red-subtle "#cca8a9")
+ (bg-red-nuanced "#c5afb0")
+ (bg-green-intense "#cbe1b5")
+ (bg-green-subtle "#cbd8be")
+ (bg-green-nuanced "#cbd3c3")
+ (bg-yellow-intense "#deccb0")
+ (bg-yellow-subtle "#d5cab9")
+ (bg-yellow-nuanced "#d0c9be")
+ (bg-blue-intense "#bccce4")
+ (bg-blue-subtle "#c4cedc")
+ (bg-blue-nuanced "#c8ced8")
+ (bg-magenta-intense "#d4c8e8")
+ (bg-magenta-subtle "#d6cee2")
+ (bg-magenta-nuanced "#d7d2de")
+ (bg-cyan-intense "#b5e1ca")
+ (bg-cyan-subtle "#bed8cb")
+ (bg-cyan-nuanced "#c3d3cb")
+
+ ;; Graph colors
+ (bg-graph-red-0 "#e09497")
+ (bg-graph-red-1 "#d69ea0")
+ (bg-graph-green-0 "#cbe8ae")
+ (bg-graph-green-1 "#cbe0b6")
+ (bg-graph-yellow-0 "#e6cda8")
+ (bg-graph-yellow-1 "#ddcbb1")
+ (bg-graph-blue-0 "#b6cbea")
+ (bg-graph-blue-1 "#bdcce3")
+ (bg-graph-magenta-0 "#d3c3ed")
+ (bg-graph-magenta-1 "#d4c8e8")
+ (bg-graph-cyan-0 "#aee8ca")
+ (bg-graph-cyan-1 "#b6e0ca")
+
+ ;; Diff
+ (bg-added "#cbe1b5")
+ (bg-added-faint "#cbd8be")
+ (bg-added-refine "#cbdcba")
+ (bg-added-fringe "#cbe8ae")
+ (fg-added "#cbe3b3")
+ (fg-added-intense "#8bcd49")
+
+ (bg-changed "#deccb0")
+ (bg-changed-faint "#d5cab9")
+ (bg-changed-refine "#d9cbb5")
+ (bg-changed-fringe "#e6cda8")
+ (fg-changed "#f1dc97")
+ (fg-changed-intense "#efbd19")
+
+ (bg-removed "#d79d9f")
+ (bg-removed-faint "#cca8a9")
+ (bg-removed-refine "#d0a4a5")
+ (bg-removed-fringe "#e09497")
+ (fg-removed "#f57f82")
+ (fg-removed-intense "#ef050d")
+
+ (bg-diff-context "#4a585c")
+
+ ;; UI chrome
+ (bg-mode-line-active "#435053")
+ (fg-mode-line-active "#f8f9e8")
+ (bg-mode-line-inactive "#343e43")
+ (fg-mode-line-inactive "#adc9bc")
+ (border-mode-line-active "#cbe3b3")
+ (border-mode-line-inactive "#58686d")
+ (bg-completion "#343e43")
+ (bg-hover "#4a585c")
+ (bg-hover-secondary "#c4cedc")
+ (bg-hl-line "#4a585c")
+ (bg-paren-match "#deccb0")
+ (bg-err "#d79d9f")
+ (bg-warning "#deccb0")
+ (bg-info "#b5e1ca")
+ (bg-region "#cbe1b5"))
+ "Base palette entries for `evergarden-spring', generated by whiskers.")
+
+(evergarden-build-theme 'evergarden-spring evergarden-spring-palette-partial 'dark)
+
+(provide 'evergarden-spring-theme)
+
+;;; evergarden-spring-theme.el ends here
diff --git a/extra-themes/evergarden-summer-theme.el b/extra-themes/evergarden-summer-theme.el
new file mode 100644
index 0000000..0557283
--- /dev/null
+++ b/extra-themes/evergarden-summer-theme.el
@@ -0,0 +1,187 @@
+;;; evergarden-summer-theme.el --- Evergarden, Summer flavor -*- lexical-binding: t; -*-
+
+;; Author: expansion of the original evergarden theme by @koi.rip
+;; Version: 0.2.0
+;; Package-Requires: ((emacs "28.1") (modus-themes "5.0.0") (ef-themes "2.0.0"))
+;; Keywords: faces, theme
+
+;;; Commentary:
+;;
+;; The Summer flavor of evergarden -- generated by whiskers from
+;; the shared color table, same as lua/evergarden/palettes/summer.lua.
+;; All the actual face wiring lives in evergarden-common.el; this file only
+;; supplies Summer's own colors. DO NOT EDIT BY HAND -- edit the
+;; .tera template and re-run whiskers instead.
+
+;;; Code:
+
+;; Not `(file-name-directory (or load-file-name buffer-file-name))' --
+;; both can be nil depending on how the loader gets here (byte-compile
+;; caches, `eval-buffer', some straight.el paths), which signals
+;; `(wrong-type-argument stringp nil)'. `custom-theme-load-path' is
+;; reliably populated by the time any theme file loads (it's how this
+;; file was found in the first place), so search that instead.
+(unless (featurep 'evergarden-common)
+ (let ((common (locate-file "evergarden-common"
+ (append (seq-filter #'stringp custom-theme-load-path)
+ load-path)
+ '(".el" ".elc" ""))))
+ (if common
+ (load common)
+ (error "evergarden-common.el not found; add its directory to `custom-theme-load-path'"))))
+
+(defconst evergarden-summer-palette-partial
+ '(
+ ;; Core backgrounds / foregrounds
+ (cursor "#c29fb2")
+ (bg-main "#f5efe6")
+ (bg-dim "#ede8dd")
+ (bg-alt "#e6e1d3")
+ (fg-main "#2b3034")
+ (fg-dim "#455355")
+ (fg-alt "#576869")
+ (bg-active "#ceccbd")
+ (bg-inactive "#ede8dd")
+ (border "#acb5a4")
+
+ ;; Summer's own named palette (from the whiskers color table)
+ (bg-hl "#ceccbd")
+ (bg-prose-block "#f2ebe0")
+ (red "#c58687")
+ (orange "#c69883")
+ (yellow "#c4aa80")
+ (lime "#abb182")
+ (green "#91a77a")
+ (aqua "#74a48b")
+ (skye "#719f96")
+ (snow "#7799a3")
+ (blue "#8294ad")
+ (purple "#a897b8")
+ (pink "#c499b8")
+ (cherry "#c29fb2")
+ (text "#2b3034")
+ (subtext1 "#455355")
+ (subtext0 "#576869")
+ (overlay2 "#707d76")
+ (overlay1 "#829084")
+ (overlay0 "#acb5a4")
+ (surface2 "#ceccbd")
+ (surface1 "#e6e1d3")
+ (surface0 "#ede8dd")
+ (base "#f5efe6")
+ (mantle "#f2eae1")
+ (crust "#e8ded5")
+
+ ;; Red family
+ (red-warmer "#c5818c")
+ (red-cooler "#c28e80")
+ (red-faint "#cdb3b3")
+
+ ;; Green family
+ (green-warmer "#abb182")
+ (green-cooler "#89aa7e")
+ (green-faint "#abb6a0")
+
+ ;; Yellow family
+ (yellow-warmer "#c6a17e")
+ (yellow-cooler "#c2b588")
+ (yellow-faint "#cbbfad")
+
+ ;; Blue family
+ (blue-warmer "#7799a3")
+ (blue-cooler "#868eb0")
+ (blue-faint "#abb2bd")
+
+ ;; Magenta/purple family
+ (magenta "#a897b8")
+ (magenta-warmer "#c499b8")
+ (magenta-cooler "#b39bbb")
+ (magenta-faint "#c4beca")
+
+ ;; Cyan family
+ (cyan "#74a48b")
+ (cyan-warmer "#74a480")
+ (cyan-cooler "#719f96")
+ (cyan-faint "#9cb4a8")
+
+ ;; Intense/Subtle/Nuanced backgrounds
+ (bg-red-intense "#d3797b")
+ (bg-red-subtle "#ca8284")
+ (bg-red-nuanced "#c58788")
+ (bg-green-intense "#93c85a")
+ (bg-green-subtle "#92bd65")
+ (bg-green-nuanced "#92b76b")
+ (bg-yellow-intense "#d1ad73")
+ (bg-yellow-subtle "#c7ab7d")
+ (bg-yellow-nuanced "#c2aa82")
+ (bg-blue-intense "#648fcc")
+ (bg-blue-subtle "#6f91c1")
+ (bg-blue-nuanced "#7492bc")
+ (bg-magenta-intense "#a97cd4")
+ (bg-magenta-subtle "#a985cb")
+ (bg-magenta-nuanced "#a98ac6")
+ (bg-cyan-intense "#52c68a")
+ (bg-cyan-subtle "#5eba8a")
+ (bg-cyan-nuanced "#64b48b")
+
+ ;; Graph colors
+ (bg-graph-red-0 "#c58788")
+ (bg-graph-red-1 "#c58788")
+ (bg-graph-green-0 "#92b76b")
+ (bg-graph-green-1 "#92b76b")
+ (bg-graph-yellow-0 "#c2aa82")
+ (bg-graph-yellow-1 "#c2aa82")
+ (bg-graph-blue-0 "#7492bc")
+ (bg-graph-blue-1 "#7492bc")
+ (bg-graph-magenta-0 "#a98ac6")
+ (bg-graph-magenta-1 "#a98ac6")
+ (bg-graph-cyan-0 "#64b48b")
+ (bg-graph-cyan-1 "#64b48b")
+
+ ;; Diff
+ (bg-added "#93c85a")
+ (bg-added-faint "#92bd65")
+ (bg-added-refine "#93c161")
+ (bg-added-fringe "#92b76b")
+ (fg-added "#91a77a")
+ (fg-added-intense "#6c894d")
+
+ (bg-changed "#d1ad73")
+ (bg-changed-faint "#c7ab7d")
+ (bg-changed-refine "#cbac79")
+ (bg-changed-fringe "#c2aa82")
+ (fg-changed "#c2b588")
+ (fg-changed-intense "#b29c4c")
+
+ (bg-removed "#d3797b")
+ (bg-removed-faint "#ca8284")
+ (bg-removed-refine "#cd7e80")
+ (bg-removed-fringe "#c58788")
+ (fg-removed "#c58687")
+ (fg-removed-intense "#b7494b")
+
+ (bg-diff-context "#ceccbd")
+
+ ;; UI chrome
+ (bg-mode-line-active "#c8c5b4")
+ (fg-mode-line-active "#2b3034")
+ (bg-mode-line-inactive "#ede8dd")
+ (fg-mode-line-inactive "#455355")
+ (border-mode-line-active "#91a77a")
+ (border-mode-line-inactive "#acb5a4")
+ (bg-completion "#ede8dd")
+ (bg-hover "#ceccbd")
+ (bg-hover-secondary "#6f91c1")
+ (bg-hl-line "#ceccbd")
+ (bg-paren-match "#d1ad73")
+ (bg-err "#d3797b")
+ (bg-warning "#d1ad73")
+ (bg-info "#52c68a")
+ (bg-region "#93c85a"))
+ "Base palette entries for `evergarden-summer', generated by whiskers.")
+
+(evergarden-build-theme 'evergarden-summer evergarden-summer-palette-partial 'light)
+
+(provide 'evergarden-summer-theme)
+
+;;; evergarden-summer-theme.el ends here
diff --git a/extra-themes/evergarden-theme.el b/extra-themes/evergarden-theme.el
new file mode 100644
index 0000000..1cd0824
--- /dev/null
+++ b/extra-themes/evergarden-theme.el
@@ -0,0 +1,445 @@
+;;; evergarden-theme.el --- Cozy evergarden dark theme -*- lexical-binding: t; -*-
+
+;; Author: expansion of the original evergarden theme by @koi.rip
+;; Version: 0.1.0
+;; Package-Requires: ((emacs "28.1") (modus-themes "5.0.0") (ef-themes "2.0.0"))
+;; Keywords: faces, theme
+
+;;; Commentary:
+;; The evergarden theme (https://evergarden.moe), ported to Emacs and based on ef/modus themes
+
+;;; Code:
+
+(require 'modus-themes)
+(require 'ef-themes)
+
+(defgroup evergarden-theme nil
+ "Cozy evergarden dark theme built on Modus and Ef."
+ :group 'faces
+ :group 'ef-themes
+ :prefix "evergarden-")
+
+(defconst evergarden-theme-description
+ "Cozy evergarden dark theme with forest-green accents."
+ "Documentation string for the `evergarden' theme.")
+
+(defconst evergarden-theme-name 'evergarden
+ "Theme symbol for `evergarden'.")
+
+(defconst evergarden-theme-family 'evergarden-theme
+ "Theme family symbol for `evergarden'.")
+
+(defconst evergarden-theme-background-mode 'dark
+ "Background mode for `evergarden'.")
+
+(defconst evergarden-palette-partial
+ '(
+ (cursor "#FAE6EF")
+ (bg-main "#232A2E")
+ (bg-dim "#2B3337")
+ (bg-alt "#374145")
+ (fg-main "#F8F9E8")
+ (fg-dim "#ADC9BC")
+ (fg-alt "#96B4AA")
+ (bg-active "#4A585C")
+ (bg-inactive "#2B3337")
+ (border "#58686D")
+
+ (bg-hl "#4A585C")
+ (bg-prose-block "#2A3237")
+ (red "#F57F82")
+ (orange "#F7A182")
+ (yellow "#F5D098")
+ (lime "#DBE6AF")
+ (green "#CBE3B3")
+ (aqua "#B3E3CA")
+ (skye "#B3E6DB")
+ (snow "#AFD9E6")
+ (blue "#B2CAED")
+ (purple "#D2BDF3")
+ (pink "#F3C0E5")
+ (cherry "#FAE6EF")
+ (subtext1 "#ADC9BC")
+ (subtext0 "#96B4AA")
+ (overlay2 "#839E9A")
+ (overlay1 "#6F8788")
+ (overlay0 "#58686D")
+ (surface2 "#4A585C")
+ (surface1 "#374145")
+ (surface0 "#2B3337")
+ (mantle "#1C2225")
+ (crust "#171C1F")
+
+ (red-warmer "#F6798F")
+ (red-cooler "#F68F74")
+ (red-faint "#D07173")
+
+ (green-warmer "#DBE6AF")
+ (green-cooler "#BBE2AF")
+ (green-faint "#B2C49F")
+
+ (yellow-warmer "#F6C497")
+ (yellow-cooler "#F2DC96")
+ (yellow-faint "#D4B586")
+
+ (blue-warmer "#AFD9E6")
+ (blue-cooler "#AEB9EC")
+ (blue-faint "#9AAFCD")
+
+ (magenta "#D2BDF3")
+ (magenta-warmer "#F3C0E5")
+ (magenta-cooler "#DCB9F2")
+ (magenta-faint "#B6A0D8")
+
+ (cyan "#B3E3CA")
+ (cyan-warmer "#B3E3BF")
+ (cyan-cooler "#B3E6DB")
+ (cyan-faint "#9DC1AE")
+
+ (bg-red-intense "#6D2C2E")
+ (bg-green-intense "#4D6D2C")
+ (bg-yellow-intense "#6D532C")
+ (bg-blue-intense "#2C476D")
+ (bg-magenta-intense "#452C6D")
+ (bg-cyan-intense "#2C6D4B")
+
+ (bg-red-subtle "#482A2B")
+ (bg-green-subtle "#39482A")
+ (bg-yellow-subtle "#483C2A")
+ (bg-blue-subtle "#2A3748")
+ (bg-magenta-subtle "#362A48")
+ (bg-cyan-subtle "#2A4839")
+
+ (bg-red-nuanced "#372828")
+ (bg-green-nuanced "#2F3728")
+ (bg-yellow-nuanced "#373128")
+ (bg-blue-nuanced "#282E37")
+ (bg-magenta-nuanced "#2D2837")
+ (bg-cyan-nuanced "#28372F")
+
+ (bg-graph-red-0 "#A63033")
+ (bg-graph-red-1 "#6B2E2F")
+ (bg-graph-green-0 "#6BA630")
+ (bg-graph-green-1 "#4D6B2E")
+ (bg-graph-yellow-0 "#A67730")
+ (bg-graph-yellow-1 "#6B532E")
+ (bg-graph-blue-0 "#3060A6")
+ (bg-graph-blue-1 "#2E476B")
+ (bg-graph-magenta-0 "#5E30A6")
+ (bg-graph-magenta-1 "#462E6B")
+ (bg-graph-cyan-0 "#30A669")
+ (bg-graph-cyan-1 "#2E6B4B")
+ (bg-added "#4D6D2C")
+ (bg-added-faint "#39482A")
+ (bg-added-refine "#577B32")
+ (bg-added-fringe "#4D6B2E")
+ (fg-added "#CBE3B3")
+ (fg-added-intense "#8BCC4A")
+ (bg-changed "#6D532C")
+ (bg-changed-faint "#483C2A")
+ (bg-changed-refine "#7B5E32")
+ (bg-changed-fringe "#6B532E")
+ (fg-changed "#F2DC96")
+ (fg-changed-intense "#F69D18")
+ (bg-removed "#6D2C2E")
+ (bg-removed-faint "#482A2B")
+ (bg-removed-refine "#7B3234")
+ (bg-removed-fringe "#6B2E2F")
+ (fg-removed "#F57F82")
+ (fg-removed-intense "#F41A20")
+ (bg-diff-context "#4A585C")
+ (bg-mode-line-active "#455356")
+ (fg-mode-line-active "#F8F9E8")
+ (bg-mode-line-inactive "#2B3337")
+ (fg-mode-line-inactive "#ADC9BC")
+ (border-mode-line-active "#CBE3B3")
+ (border-mode-line-inactive "#58686D")
+ (bg-completion "#374145")
+ (bg-hover "#4A585C")
+ (bg-hover-secondary "#2B3646")
+ (bg-hl-line "#4A585C")
+ (bg-paren-match "#604D2E")
+ (bg-err "#6D2C2E")
+ (bg-warning "#6D532C")
+ (bg-info "#2C6D4B")
+ (bg-region "#4A585C"))
+ "Base palette entries for `evergarden'.")
+
+(defconst evergarden-palette-mappings-partial
+ '(
+ (err red)
+ (warning orange)
+ (info cyan)
+ (underline-err red)
+ (underline-warning orange)
+ (underline-note cyan)
+ (modeline-err red)
+ (modeline-warning yellow)
+ (modeline-info cyan)
+ (bg-prominent-warning bg-warning)
+ (fg-prominent-warning fg-main)
+ (bg-prominent-note bg-info)
+ (fg-prominent-note fg-main)
+ (fg-link blue)
+ (fg-link-visited magenta)
+ (fg-link-symbolic cyan)
+ (bg-link unspecified)
+ (bg-link-symbolic unspecified)
+ (bg-link-visited unspecified)
+ (underline-link blue)
+ (underline-link-visited magenta)
+ (underline-link-symbolic cyan)
+ (name cyan)
+ (keybind green)
+ (identifier fg-main)
+ (fg-prompt green)
+ (bg-prompt unspecified)
+ (builtin cyan-cooler)
+ (comment fg-dim)
+ (constant magenta-cooler)
+ (fnname cyan)
+ (fnname-call cyan-warmer)
+ (keyword red)
+ (preprocessor green)
+ (property fg-main)
+ (docstring fg-dim)
+ (docmarkup green-cooler)
+ (string green-warmer)
+ (type yellow)
+ (variable blue)
+ (variable-use blue)
+ (rx-backslash orange)
+ (rx-construct magenta)
+ (accent-0 green)
+ (accent-1 cyan)
+ (accent-2 magenta-warmer)
+ (accent-3 orange)
+ (fg-button-active fg-main)
+ (fg-button-inactive fg-dim)
+ (bg-button-active bg-main)
+ (bg-button-inactive bg-dim)
+ (fg-region fg-main)
+ (bg-mark-delete bg-red-subtle)
+ (fg-mark-delete red)
+ (bg-mark-select bg-green-subtle)
+ (fg-mark-select green)
+ (bg-mark-other bg-cyan-subtle)
+ (fg-mark-other cyan)
+ (date-common cyan)
+ (date-deadline red)
+ (date-deadline-subtle red-faint)
+ (date-event fg-alt)
+ (date-holiday red-warmer)
+ (date-holiday-other magenta-warmer)
+ (date-now fg-main)
+ (date-range fg-alt)
+ (date-scheduled green)
+ (date-scheduled-subtle green-faint)
+ (date-weekday blue)
+ (date-weekend red-faint)
+ (fg-prose-code green-cooler)
+ (prose-done green)
+ (fg-prose-macro green)
+ (prose-metadata fg-dim)
+ (prose-metadata-value fg-alt)
+ (prose-table fg-alt)
+ (prose-table-formula cyan)
+ (prose-tag yellow-faint)
+ (prose-todo red)
+ (fg-prose-verbatim magenta-warmer)
+ (mail-cite-0 green)
+ (mail-cite-1 cyan)
+ (mail-cite-2 magenta-warmer)
+ (mail-cite-3 red-warmer)
+ (mail-part cyan)
+ (mail-recipient blue)
+ (mail-subject green)
+ (mail-other fg-alt)
+ (bg-search-static bg-cyan-subtle)
+ (bg-search-current bg-green-intense)
+ (bg-search-lazy bg-green-subtle)
+ (bg-search-replace bg-red-intense)
+ (bg-search-rx-group-0 bg-green-intense)
+ (bg-search-rx-group-1 bg-magenta-intense)
+ (bg-search-rx-group-2 bg-cyan-intense)
+ (bg-search-rx-group-3 bg-red-intense)
+ (bg-space-err bg-red-intense)
+ (bg-space bg-main)
+ (fg-space border)
+ (fringe bg-main)
+ (fg-line-number-active green)
+ (fg-line-number-inactive overlay1)
+ (bg-line-number-active bg-hl-line)
+ (bg-line-number-inactive bg-main)
+ (bg-tab-bar bg-dim)
+ (bg-tab-current bg-main)
+ (bg-tab-other bg-dim)
+ (bg-prominent-err bg-err)
+ (fg-prominent-err err)
+ (fg-paren-match fg-main)
+ (underline-paren-match unspecified)
+ (bg-active-argument bg-active)
+ (fg-active-argument green)
+ (bg-active-value bg-green-subtle)
+ (fg-active-value green)
+ (bg-prose-block-delimiter bg-prose-block)
+ (fg-prose-block-delimiter fg-dim)
+ (bg-prose-block-contents bg-prose-block)
+ (bg-prose-code unspecified)
+ (bg-prose-macro unspecified)
+ (bg-prose-verbatim unspecified)
+ (fg-completion-match-0 green)
+ (fg-completion-match-1 cyan)
+ (fg-completion-match-2 magenta-warmer)
+ (fg-completion-match-3 orange)
+ (bg-completion-match-0 unspecified)
+ (bg-completion-match-1 unspecified)
+ (bg-completion-match-2 unspecified)
+ (bg-completion-match-3 unspecified)
+ (bg-completion bg-dim)
+ (fg-search-current fg-main)
+ (bg-term-black bg-main)
+ (fg-term-black bg-main)
+ (bg-term-black-bright overlay0)
+ (fg-term-black-bright overlay0)
+ (bg-term-red red)
+ (fg-term-red red)
+ (bg-term-red-bright red-warmer)
+ (fg-term-red-bright red-warmer)
+ (bg-term-green green)
+ (fg-term-green green)
+ (bg-term-green-bright green-warmer)
+ (fg-term-green-bright green-warmer)
+ (bg-term-yellow yellow)
+ (fg-term-yellow yellow)
+ (bg-term-yellow-bright yellow-warmer)
+ (fg-term-yellow-bright yellow-warmer)
+ (bg-term-blue blue)
+ (fg-term-blue blue)
+ (bg-term-blue-bright blue-warmer)
+ (fg-term-blue-bright blue-warmer)
+ (bg-term-magenta magenta)
+ (fg-term-magenta magenta)
+ (bg-term-magenta-bright magenta-warmer)
+ (fg-term-magenta-bright magenta-warmer)
+ (bg-term-cyan cyan)
+ (fg-term-cyan cyan)
+ (bg-term-cyan-bright cyan-warmer)
+ (fg-term-cyan-bright cyan-warmer)
+ (bg-term-white fg-dim)
+ (fg-term-white fg-dim)
+ (bg-term-white-bright fg-main)
+ (fg-term-white-bright fg-main)
+ (rainbow-0 green)
+ (rainbow-1 cyan)
+ (rainbow-2 magenta)
+ (rainbow-3 blue)
+ (rainbow-4 orange)
+ (rainbow-5 red)
+ (rainbow-6 yellow)
+ (rainbow-7 fg-alt)
+ (rainbow-8 fg-dim)
+ (fg-heading-0 green)
+ (fg-heading-1 green)
+ (fg-heading-2 cyan)
+ (fg-heading-3 magenta)
+ (fg-heading-4 blue)
+ (fg-heading-5 orange)
+ (fg-heading-6 red)
+ (fg-heading-7 fg-alt)
+ (fg-heading-8 fg-dim)
+ (bg-heading-0 unspecified)
+ (bg-heading-1 bg-green-nuanced)
+ (bg-heading-2 unspecified)
+ (bg-heading-3 bg-magenta-nuanced)
+ (bg-heading-4 bg-blue-nuanced)
+ (bg-heading-5 unspecified)
+ (bg-heading-6 bg-red-nuanced)
+ (bg-heading-7 unspecified)
+ (bg-heading-8 unspecified)
+ (overline-heading-0 green)
+ (overline-heading-1 green)
+ (overline-heading-2 cyan)
+ (overline-heading-3 magenta)
+ (overline-heading-4 blue)
+ (overline-heading-5 orange)
+ (overline-heading-6 red)
+ (overline-heading-7 unspecified)
+ (overline-heading-8 unspecified))
+ "Semantic color mappings for `evergarden'.")
+
+(defcustom evergarden-palette-overrides nil
+ "Overrides for `evergarden-palette'.
+
+Each element should have the form (NAME VALUE), where NAME is a palette
+entry from `evergarden-palette' and VALUE is either another palette symbol
+or a color string."
+ :group 'evergarden-theme
+ :package-version '(evergarden-theme . "0.1.0")
+ :type '(repeat (list symbol (choice symbol string))))
+
+(defconst evergarden-palette
+ (modus-themes-generate-palette
+ evergarden-palette-partial
+ 'cool
+ nil
+ (append evergarden-palette-mappings-partial ef-themes-palette-common))
+ "Full palette for `evergarden'.")
+
+(defconst evergarden-custom-faces
+ '(`(corfu-default ((,c :inherit modus-themes-fixed-pitch
+ :background ,bg-dim
+ :foreground ,fg-main)))
+ `(corfu-current ((,c :background ,bg-green-intense
+ :foreground ,fg-main
+ :extend t
+ :box (:line-width -1 :color ,green)
+ :weight semi-bold)))
+ `(corfu-border ((,c :background ,border
+ :foreground ,border)))
+ `(corfu-bar ((,c :background ,green)))
+ `(corfu-popupinfo ((,c :background ,bg-dim
+ :foreground ,fg-main))))
+ "Additional face overrides for `evergarden'.
+
+Prefer palette entries and semantic mappings first.
+Use direct face overrides only for targeted package cases where the
+inherited mapping does not provide enough contrast.")
+
+(defun evergarden--ensure-modus-theme-metadata ()
+ "Declare `evergarden' as a Modus-derived theme when reloading in-session.
+
+If an `evergarden' theme object already exists in the session, ensure it
+still has the theme properties that `modus-themes-theme' expects."
+ (unless (plist-get (get evergarden-theme-name 'theme-properties) :modus-core-palette)
+ (modus-themes-declare
+ evergarden-theme-name
+ evergarden-theme-family
+ evergarden-theme-description
+ evergarden-theme-background-mode
+ 'evergarden-palette
+ nil
+ 'evergarden-palette-overrides)
+ (modus-themes-register evergarden-theme-name)))
+
+(evergarden--ensure-modus-theme-metadata)
+
+(modus-themes-theme
+ evergarden-theme-name
+ evergarden-theme-family
+ evergarden-theme-description
+ evergarden-theme-background-mode
+ 'evergarden-palette
+ nil
+ 'evergarden-palette-overrides
+ 'evergarden-custom-faces)
+
+;;;###autoload
+(when load-file-name
+ (add-to-list 'custom-theme-load-path
+ (file-name-as-directory
+ (file-name-directory load-file-name))))
+
+(provide 'evergarden-theme)
+
+;;; evergarden-theme.el ends here
diff --git a/extra-themes/evergarden-winter-theme.el b/extra-themes/evergarden-winter-theme.el
new file mode 100644
index 0000000..e353f3a
--- /dev/null
+++ b/extra-themes/evergarden-winter-theme.el
@@ -0,0 +1,187 @@
+;;; evergarden-winter-theme.el --- Evergarden, Winter flavor -*- lexical-binding: t; -*-
+
+;; Author: expansion of the original evergarden theme by @koi.rip
+;; Version: 0.2.0
+;; Package-Requires: ((emacs "28.1") (modus-themes "5.0.0") (ef-themes "2.0.0"))
+;; Keywords: faces, theme
+
+;;; Commentary:
+;;
+;; The Winter flavor of evergarden -- generated by whiskers from
+;; the shared color table, same as lua/evergarden/palettes/winter.lua.
+;; All the actual face wiring lives in evergarden-common.el; this file only
+;; supplies Winter's own colors. DO NOT EDIT BY HAND -- edit the
+;; .tera template and re-run whiskers instead.
+
+;;; Code:
+
+;; Not `(file-name-directory (or load-file-name buffer-file-name))' --
+;; both can be nil depending on how the loader gets here (byte-compile
+;; caches, `eval-buffer', some straight.el paths), which signals
+;; `(wrong-type-argument stringp nil)'. `custom-theme-load-path' is
+;; reliably populated by the time any theme file loads (it's how this
+;; file was found in the first place), so search that instead.
+(unless (featurep 'evergarden-common)
+ (let ((common (locate-file "evergarden-common"
+ (append (seq-filter #'stringp custom-theme-load-path)
+ load-path)
+ '(".el" ".elc" ""))))
+ (if common
+ (load common)
+ (error "evergarden-common.el not found; add its directory to `custom-theme-load-path'"))))
+
+(defconst evergarden-winter-palette-partial
+ '(
+ ;; Core backgrounds / foregrounds
+ (cursor "#fae6ef")
+ (bg-main "#1e2528")
+ (bg-dim "#262f33")
+ (bg-alt "#374145")
+ (fg-main "#f8f9e8")
+ (fg-dim "#adc9bc")
+ (fg-alt "#96b4aa")
+ (bg-active "#4a585c")
+ (bg-inactive "#262f33")
+ (border "#58686d")
+
+ ;; Winter's own named palette (from the whiskers color table)
+ (bg-hl "#4a585c")
+ (bg-prose-block "#252d31")
+ (red "#f57f82")
+ (orange "#f7a182")
+ (yellow "#f5d098")
+ (lime "#dbe6af")
+ (green "#cbe3b3")
+ (aqua "#b3e3ca")
+ (skye "#b3e6db")
+ (snow "#afd9e6")
+ (blue "#b2caed")
+ (purple "#d2bdf3")
+ (pink "#f3c0e5")
+ (cherry "#fae6ef")
+ (text "#f8f9e8")
+ (subtext1 "#adc9bc")
+ (subtext0 "#96b4aa")
+ (overlay2 "#839e9a")
+ (overlay1 "#6f8788")
+ (overlay0 "#58686d")
+ (surface2 "#4a585c")
+ (surface1 "#374145")
+ (surface0 "#262f33")
+ (base "#1e2528")
+ (mantle "#191e21")
+ (crust "#171c1f")
+
+ ;; Red family
+ (red-warmer "#f6788f")
+ (red-cooler "#f48f76")
+ (red-faint "#d07073")
+
+ ;; Green family
+ (green-warmer "#dbe6af")
+ (green-cooler "#bae1af")
+ (green-faint "#b1c999")
+
+ ;; Yellow family
+ (yellow-warmer "#f6c498")
+ (yellow-cooler "#f1dc97")
+ (yellow-faint "#d5b585")
+
+ ;; Blue family
+ (blue-warmer "#afd9e6")
+ (blue-cooler "#aeb8ec")
+ (blue-faint "#98aed0")
+
+ ;; Magenta/purple family
+ (magenta "#d2bdf3")
+ (magenta-warmer "#f3c0e5")
+ (magenta-cooler "#dcb8f2")
+ (magenta-faint "#b5a0d8")
+
+ ;; Cyan family
+ (cyan "#b3e3ca")
+ (cyan-warmer "#b3e3bf")
+ (cyan-cooler "#b3e6db")
+ (cyan-faint "#97c7ae")
+
+ ;; Intense/Subtle/Nuanced backgrounds
+ (bg-red-intense "#d79d9f")
+ (bg-red-subtle "#cca8a9")
+ (bg-red-nuanced "#c5afb0")
+ (bg-green-intense "#cbe1b5")
+ (bg-green-subtle "#cbd8be")
+ (bg-green-nuanced "#cbd3c3")
+ (bg-yellow-intense "#deccb0")
+ (bg-yellow-subtle "#d5cab9")
+ (bg-yellow-nuanced "#d0c9be")
+ (bg-blue-intense "#bccce4")
+ (bg-blue-subtle "#c4cedc")
+ (bg-blue-nuanced "#c8ced8")
+ (bg-magenta-intense "#d4c8e8")
+ (bg-magenta-subtle "#d6cee2")
+ (bg-magenta-nuanced "#d7d2de")
+ (bg-cyan-intense "#b5e1ca")
+ (bg-cyan-subtle "#bed8cb")
+ (bg-cyan-nuanced "#c3d3cb")
+
+ ;; Graph colors
+ (bg-graph-red-0 "#e09497")
+ (bg-graph-red-1 "#d69ea0")
+ (bg-graph-green-0 "#cbe8ae")
+ (bg-graph-green-1 "#cbe0b6")
+ (bg-graph-yellow-0 "#e6cda8")
+ (bg-graph-yellow-1 "#ddcbb1")
+ (bg-graph-blue-0 "#b6cbea")
+ (bg-graph-blue-1 "#bdcce3")
+ (bg-graph-magenta-0 "#d3c3ed")
+ (bg-graph-magenta-1 "#d4c8e8")
+ (bg-graph-cyan-0 "#aee8ca")
+ (bg-graph-cyan-1 "#b6e0ca")
+
+ ;; Diff
+ (bg-added "#cbe1b5")
+ (bg-added-faint "#cbd8be")
+ (bg-added-refine "#cbdcba")
+ (bg-added-fringe "#cbe8ae")
+ (fg-added "#cbe3b3")
+ (fg-added-intense "#8bcd49")
+
+ (bg-changed "#deccb0")
+ (bg-changed-faint "#d5cab9")
+ (bg-changed-refine "#d9cbb5")
+ (bg-changed-fringe "#e6cda8")
+ (fg-changed "#f1dc97")
+ (fg-changed-intense "#efbd19")
+
+ (bg-removed "#d79d9f")
+ (bg-removed-faint "#cca8a9")
+ (bg-removed-refine "#d0a4a5")
+ (bg-removed-fringe "#e09497")
+ (fg-removed "#f57f82")
+ (fg-removed-intense "#ef050d")
+
+ (bg-diff-context "#4a585c")
+
+ ;; UI chrome
+ (bg-mode-line-active "#435053")
+ (fg-mode-line-active "#f8f9e8")
+ (bg-mode-line-inactive "#262f33")
+ (fg-mode-line-inactive "#adc9bc")
+ (border-mode-line-active "#cbe3b3")
+ (border-mode-line-inactive "#58686d")
+ (bg-completion "#262f33")
+ (bg-hover "#4a585c")
+ (bg-hover-secondary "#c4cedc")
+ (bg-hl-line "#4a585c")
+ (bg-paren-match "#deccb0")
+ (bg-err "#d79d9f")
+ (bg-warning "#deccb0")
+ (bg-info "#b5e1ca")
+ (bg-region "#cbe1b5"))
+ "Base palette entries for `evergarden-winter', generated by whiskers.")
+
+(evergarden-build-theme 'evergarden-winter evergarden-winter-palette-partial 'dark)
+
+(provide 'evergarden-winter-theme)
+
+;;; evergarden-winter-theme.el ends here
diff --git a/extra-themes/evergarden.el b/extra-themes/evergarden.el
deleted file mode 100644
index eb7db9a..0000000
--- a/extra-themes/evergarden.el
+++ /dev/null
@@ -1,45 +0,0 @@
-;;; evergarden.el -- emacs theme for evergarden -*- lexical-binding: t; -*-
-;;; Commentary:
-
-;; this is an expansion for @koi.rip 's evergarden theme
-;; heavily W.I.P
-
-;;; Code:
-(deftheme evergarden "Cozy evergarden theme for Emacs.")
-(let ((class '((class color) (min-colors 24)))
- (red "#F57F82")
- (orange "#F7A182")
- (yellow "#F5D098")
- (lime "#DBE6AF")
- (green "#CBE3B3")
- (aqua "#B3E3CA")
- (skye "#B3E6DB")
- (snow "#AFD9E6")
- (blue "#B2CAED")
- (purple "#D2BDF3")
- (pink "#F3C0E5")
- (cherry "#FAE6EF")
- (text "#F8F9E8")
- (subtext1 "#ADC9BC")
- (subtext0 "#96B4AA")
- (overlay2 "#839E9A")
- (overlay1 "#6F8788")
- (overlay0 "#58686D")
- (surface2 "#4A585C")
- (surface1 "#374145")
- (surface0 "#2B3337")
- (base "#232A2E")
- (mantle "#1C2225")
- (crust "#171C1F"))
- (custom-theme-set-faces
- 'evergarden
- `(default ((,class :background ,base :foreground ,text)))
- `(cursor ((,class :background ,cherry)))
- `(font-lock-keyword-face ((,class :foreground ,red)))
- `(font-lock-builtin-face ((,class :foreground ,skye)))
- `(font-lock-string-face ((,class :foreground ,lime)))))
-
-(provide-theme 'evergarden)
-
-(provide 'evergarden)
-;;; evergarden.el ends here