;;; cutarv42-theme.el --- A high-contrast light theme with blue/pink accents -*- lexical-binding: t; no-byte-compile: t; -*- (deftheme cutarv42 "A high-contrast light theme with blue/pink accents, optimized for clarity and syntax highlighting.") (let* (;; --- 1. Primitive Palette (Raw Colors) --- (pure-white "#f8f8ff") (pure-black "#010101") (deep-blue "#007cbf") (mid-blue "#2374de") (soft-pink "#ef89df") (deep-purple "#a64dd6") (raw-magenta "#b05197") (burnt-amber "#e58e40") (duck-blue "#007a94") (forest-green "#429e66") (bright-green "#2cd45c") (crimson-red "#cf3f29") (soft-red "#f07b69") (deep-orange "#ee7722") (light-blue "#7cc9f2") (light-grey "#f9f9f9") (mid-grey "#888888") (dark-grey "#444444") (faint-purple "#eeccee") ;; --- 2. Semantic Palette (Functional Roles) --- ;; Base UI (bg-main pure-white) (fg-main pure-black) (ui-accent soft-pink) (ui-hl-line faint-purple) (ui-selection light-blue) (ui-border raw-magenta) (ui-muted mid-grey) ;; Syntax Roles (syntax-keyword duck-blue) (syntax-string forest-green) (syntax-variable mid-blue) (syntax-type deep-purple) (syntax-constant burnt-amber) (syntax-builtin deep-orange) (syntax-comment "#666666") ;; Standard grey for comments (syntax-comment-d bright-green) ;; Delimiter color (syntax-function deep-blue) ;; Status / Feedback (status-error crimson-red) (status-warning soft-red) (status-info deep-orange) (status-success bright-green) (status-highlight deep-blue) ;; Theme Class (class '((class color) (min-colors 256)))) (custom-theme-set-faces 'cutarv42 ;; --- Core UI --- `(default ((,class (:background ,bg-main :foreground ,fg-main)))) `(cursor ((,class (:background ,bg-main :foreground ,bg-main)))) `(fringe ((,class (:background ,bg-main :foreground ,status-highlight)))) `(region ((,class (:background ,ui-accent)))) `(highlight ((,class (:background ,ui-selection :foreground ,bg-main)))) `(hl-line ((,class (:background ,ui-hl-line :extend t)))) `(link ((,class (:foreground ,syntax-keyword :underline t)))) `(link-visited ((,class (:foreground ,syntax-type :underline t)))) `(minibuffer-prompt ((,class (:foreground ,status-highlight :weight bold)))) `(vertical-border ((,class (:foreground ,ui-border)))) ;; --- Syntax Highlighting (Font Lock) --- `(font-lock-comment-face ((,class (:foreground ,syntax-comment :slant italic)))) `(font-lock-doc-face ((,class (:inherit font-lock-comment-face)))) `(font-lock-comment-delimiter-face ((,class (:foreground ,syntax-comment-d :slant italic)))) `(font-lock-string-face ((,class (:foreground ,syntax-string)))) `(font-lock-type-face ((,class (:foreground ,syntax-type)))) `(font-lock-keyword-face ((,class (:foreground ,syntax-keyword :weight bold)))) `(font-lock-function-name-face ((,class (:foreground ,syntax-function :weight bold)))) `(font-lock-variable-name-face ((,class (:foreground ,syntax-variable)))) `(font-lock-constant-face ((,class (:foreground ,syntax-constant)))) `(font-lock-builtin-face ((,class (:foreground ,syntax-builtin)))) `(font-lock-warning-face ((,class (:foreground ,status-warning :weight bold)))) `(font-lock-negation-char-face ((,class (:foreground ,status-error)))) `(font-lock-regexp-grouping-backslash ((,class (:foreground ,status-info)))) `(font-lock-regexp-grouping-construct ((,class (:inherit font-lock-constant-face)))) ;; --- Mode-line --- `(mode-line ((,class (:background ,ui-accent :foreground ,bg-main)))) `(mode-line-inactive ((,class (:background ,ui-selection :foreground ,fg-main)))) ;:box (:line-width 1 :color ,syntax-keyword) ;; --- Search & Isearch --- `(isearch ((,class (:inherit hl-line)))) `(isearch-fail ((,class (:inherit show-paren-mismatch)))) `(lazy-highlight ((,class (:background ,status-info :foreground ,bg-main)))) ;; --- Line Numbers --- `(line-number ((,class (:foreground ,fg-main :background ,ui-selection)))) `(line-number-current-line ((,class (:inherit mode-line :weight bold)))) ;; --- Package Specifics --- ;; Doom Modeline `(doom-modeline-bar ((,class (:background ,ui-accent :foreground ,fg-main)))) `(doom-modeline-buffer-file ((,class (:foreground ,fg-main :weight bold)))) `(doom-modeline-buffer-path ((,class (:foreground ,fg-main :weight bold)))) `(doom-modeline-buffer-modified ((,class (:foreground ,status-info :weight bold)))) `(doom-modeline-debug ((,class (:inherit font-lock-warning-face)))) `(doom-modeline-info ((,class (:inherit font-lock-delimiter-face)))) `(doom-modeline-warning ((,class (:inherit font-lock-warning-face)))) `(doom-modeline-error ((,class (:inherit error)))) ;; Vertico / Marginalia `(vertico-current ((,class (:inherit line-number-current-line)))) `(marginalia-documentation ((,class (:inherit font-lock-comment-face)))) ;; Magit `(magit-branch-local ((,class (:foreground ,syntax-function :weight bold)))) `(magit-branch-remote ((,class (:foreground ,syntax-string :weight bold)))) `(magit-hash ((,class (:foreground ,status-highlight)))) `(magit-item-highlight ((,class (:background ,ui-selection)))) `(magit-diff-added ((,class (:foreground ,status-success :background unspecified)))) `(magit-diff-removed ((,class (:foreground ,status-error :background unspecified)))) `(magit-diff-context-highlight ((,class (:background ,status-highlight :foreground ,fg-main)))) `(magit-section-heading ((,class (:foreground ,ui-selection :weight bold :underline t)))) ;; Tree-sitter `(tree-sitter-hl-face:function.call ((,class (:foreground ,ui-accent)))) `(tree-sitter-hl-face:method.call ((,class (:foreground ,ui-accent)))) `(tree-sitter-hl-face:type ((,class (:foreground ,syntax-function)))) `(tree-sitter-hl-face:property ((,class (:foreground ,ui-selection)))) `(tree-sitter-hl-face:parameter ((,class (:foreground ,status-info)))) `(tree-sitter-hl-face:escape ((,class (:foreground ,status-warning)))) ;; Flycheck / LSP `(flycheck-error ((,class (:underline (:style wave :color ,status-error))))) `(flycheck-warning ((,class (:underline (:style wave :color ,status-info))))) `(flycheck-info ((,class (:underline (:style wave :color ,syntax-keyword))))) `(lsp-face-highlight-textual ((,class (:background ,ui-selection)))) ;; Misc `(show-paren-match ((,class (:background ,syntax-keyword :foreground ,bg-main :weight bold)))) `(show-paren-mismatch ((,class (:background ,status-error :foreground ,fg-main :weight bold)))) `(success ((,class (:foreground ,status-success)))) `(error ((,class (:foreground ,status-error :weight bold)))) `(warning ((,class (:foreground ,status-warning)))) `(header-line ((,class (:background ,status-highlight :foreground ,fg-main)))) ;; Whitespace mode `(whitespace-indentation ((,class (:background ,ui-muted :foreground ,status-warning )))) `(whitespace-tab ((,class (:background ,light-grey :foreground ,syntax-constant)))) `(whitespace-space ((,class (:background ,light-grey :foreground ,status-info)))) `(whitespace-trailing ((,class (:background ,status-error :foreground ,status-info)))) `(whitespace-line ((,class (:background ,light-grey)))) ;; Org Mode `(org-level-1 ((,class (:foreground ,ui-accent :weight bold :height 1.2)))) `(org-level-2 ((,class (:foreground ,syntax-keyword :weight bold :height 1.1)))) `(org-level-3 ((,class (:foreground ,status-success :weight bold)))) `(org-level-4 ((,class (:foreground ,ui-selection :weight bold)))) `(org-level-5 ((,class (:foreground ,syntax-type :weight bold)))) `(org-todo ((,class (:foreground ,status-warning :weight bold :box t)))) `(org-done ((,class (:foreground ,status-success :weight bold :box t)))) `(org-date ((,class (:foreground ,syntax-keyword)))) `(org-link ((,class (:foreground ,syntax-type :underline t)))) `(org-code ((,class (:foreground ,status-info :background ,bg-main)))) `(org-block ((,class (:background ,bg-main :foreground ,fg-main :extend t)))) `(org-block-begin-line ((,class (:foreground ,status-highlight :background ,bg-main :extend t)))) )) ;;;###autoload (and load-file-name (boundp 'custom-theme-load-path) (add-to-list 'custom-theme-load-path (file-name-as-directory (file-name-directory load-file-name)))) (provide-theme 'cutarv42) ;;; cutarv41-theme.el ends here