This commit is contained in:
Your Name
2026-05-10 01:05:57 +02:00
commit f3cb5a6e26
19 changed files with 2741 additions and 0 deletions
+394
View File
@@ -0,0 +1,394 @@
;;; config.el -*- lexical-binding: t; -*-
;; ============================================================
;; Custom
;; ============================================================
(let ((custom-dir (expand-file-name "custom/" user-emacs-directory)))
(when (file-directory-p custom-dir)
(mapc #'load (directory-files custom-dir t "\\.el$"))))
(add-to-list 'custom-theme-load-path (expand-file-name "themes/" user-emacs-directory))
;; ============================================================
;; Keybindings
;; ============================================================
(use-package general
:config
(general-def
:keymaps 'global
"C-S-c" #'my/system-copy
"C-S-x" #'my/system-cut
"C-S-v" #'my/system-paste
"C-z" #'undo
"C-S-z" #'undo-redo
)
(general-def
:keymaps 'override
"C-k" #'avy-kill-whole-line
"C-s C-f" #'avy-goto-char-timer
"C-s C-s C-f" #'my/avy-char-region
"C-s C-S-s" #'my/avy-line-region
"C-s C-l" #'consult-line
"C-s C-e" #'er/expand-region
"C-x C-b" #'buffer-table
"M-g g" #'avy-goto-line
"C-r" #'recenter-top-bottom
"C-s w" #'my/vterm-sync-here
"C-b" #'scroll-down-command
"C-<backspace>" #'my/delete-word-backward)
(general-define-key
:keymaps 'global
"C-w" nil)
;; If you want certain keys to ONLY work in Meow Normal state, use :states.
)
;; ============================================================
;; Settings, UI
;; ============================================================
(setq kill-ring-max 1
select-enable-clipboard nil
select-enable-primary nil
save-interprogram-paste-before-kill nil
xterm-extra-capabilities '(getSelection setSelection modifyOtherKeys)
mouse-drag-copy-region nil
truncate-lines nil
display-line-numbers-type t
cursor-type 'bar
savehist-additional-variables '(kill-ring search-ring)
recentf-max-saved-items 75
)
;; Modes
(global-hl-line-mode t )
(global-display-line-numbers-mode 1)
(hl-line-mode 1)
(savehist-mode 1)
(global-clipetty-mode)
;; Fonts
(set-face-attribute 'default nil :family "Fira Code" :height 120)
(set-face-attribute 'variable-pitch nil :family "Noto Sans" :height 140)
;; Apply variable pitch to specific modes
(dolist (hook '(markdown-mode-hook org-mode-hook json-mode-hook))
(add-hook hook (lambda () (buffer-face-set '(:family "Noto Sans" :height 140)))))
(add-to-list 'auto-mode-alist '("\\.qd$" . markdown-mode))
(add-to-list 'term-file-aliases '("xterm-256" . "xterm"))
;; Recentf cleanup
(with-eval-after-load 'recentf
(run-at-time nil 600 #'recentf-cleanup)
(setq recentf-exclude '(".*/$"))) ;; don't include dirs
;; ============================================================
;; packages
;; ============================================================
(use-package emacs
:ensure nil
:custom
(tab-always-indent 'complete)
(TEXT-mode-ispell-word-completion nil)
(read-extended-command-predicate #'command-completion-default-include-p)
)
(use-package corfu
:init
(global-corfu-mode)
(corfu-popupinfo-mode)
:custom
(corfu-auto t)
(corfu-auto-delay 0.2)
(corfu-auto-prefix 2)
(corfu-popupinfo-delay '(0.5 . 0.3)))
(use-package vertico
:config
:init
(vertico-mode))
(use-package mason
:config
:init
(mason-ensure))
(use-package marginalia
:config
:init
(marginalia-mode))
(use-package orderless
:custom
(completion-styles '(orderless basic))
(completion-category-overrides '((file (styles partial-completion))))
(completion-pcm-leading-wildcard t)) ;; Emacs 31: partial-completion behaves like substring
(use-package meow
:init (setq meow--kbd-kill-region "C-S-x")
:config
(setq meow-use-clipboard nil)
(meow-setup)
(meow-global-mode 1)
(setq meow-use-clipboard t))
(use-package avy
:config
(setq avy-timeout-seconds 0.25
avy-style 'at-full
avy-keys (number-sequence ?a ?z)))
(use-package treesit-auto
:custom
(treesit-auto-install 'prompt)
:config
(treesit-auto-add-to-auto-mode-alist 'all)
(global-treesit-auto-mode)
)
(use-package treesit-fold
:commands (treesit-fold-close
treesit-fold-close-all
treesit-fold-open
treesit-fold-toggle
treesit-fold-open-all
treesit-fold-mode
global-treesit-fold-mode
treesit-fold-open-recursively
treesit-fold-line-comment-mode)
:custom
(treesit-fold-line-count-show t)
(treesit-fold-line-count-format "")
:config
(set-face-attribute 'treesit-fold-replacement-face nil
:foreground "#808080"
:box nil
:weight 'bold))
;; Systems and General Purpose
(add-hook 'c-ts-mode-hook #'treesit-fold-mode)
(add-hook 'c++-ts-mode-hook #'treesit-fold-mode)
(add-hook 'java-ts-mode-hook #'treesit-fold-mode)
(add-hook 'rust-ts-mode-hook #'treesit-fold-mode)
(add-hook 'go-ts-mode-hook #'treesit-fold-mode)
(add-hook 'ruby-ts-mode-hook #'treesit-fold-mode)
;; Web and Frontend
(add-hook 'js-ts-mode-hook #'treesit-fold-mode)
(add-hook 'typescript-ts-mode-hook #'treesit-fold-mode)
(add-hook 'tsx-ts-mode-hook #'treesit-fold-mode)
(add-hook 'css-ts-mode-hook #'treesit-fold-mode)
(add-hook 'html-ts-mode-hook #'treesit-fold-mode)
;; Scripting and Infrastructure
(add-hook 'bash-ts-mode-hook #'treesit-fold-mode)
(add-hook 'cmake-ts-mode-hook #'treesit-fold-mode)
(add-hook 'dockerfile-ts-mode-hook #'treesit-fold-mode)
;; Data and Configuration
(add-hook 'json-ts-mode-hook #'treesit-fold-mode)
(add-hook 'toml-ts-mode-hook #'treesit-fold-mode)
(add-hook 'emacs-lisp-mode-hook #'outline-minor-mode)
(add-hook 'lisp-interaction-mode-hook #'hs-minor-mode) ; scratch
(add-hook 'lisp-mode-hook #'outline-minor-mode)
(add-hook 'conf-mode-hook #'outline-minor-mode)
(add-hook 'markdown-mode-hook #'outline-minor-mode)
(add-hook 'diff-mode-hook #'outline-minor-mode)
(use-package highlight-quoted
:hook (emacs-lisp-mode . highlight-quoted-mode))
(use-package highlight-defined
:hook (emacs-lisp-mode . highlight-defined-mode))
(use-package color-identifiers-mode
:hook (emacs-lisp-mode . color-identifiers-mode))
(use-package rainbow-delimiters
:hook
(prog-mode . rainbow-delimiters-mode)
(inferior-ess-mode . rainbow-delimiters-mode))
(use-package nerd-icons-completion
:after marginalia
:config
(nerd-icons-completion-mode)
(add-hook 'marginalia-mode-hook #'nerd-icons-completion-marginalia-setup))
(use-package nerd-icons-corfu)
(use-package nerd-icons-dired
:hook
(dired-mode . nerd-icons-dired-mode))
(use-package smartparens
:init (smartparens-global-mode 1)
:config
(sp-pair "\"" "\"" :wrap "C-c \"")
(sp-pair "'" "'" :wrap "C-c '")
(sp-pair "<<" ">>" :wrap "C-c <"))
(use-package indent-bars
:config
(setq indent-bars-prefer-character ?.
indent-bars-pattern "true"
indent-bars-width-frac 1
indent-bars-pad-frac 0.2
indent-bars-color-by-depth '(:regexp "outline-\\([0-9]+\\)" :blend 0.9)
indent-bars-highlight-current-depth '(:face default :blend 0.4)
)
:init
(add-hook 'prog-mode-hook #'indent-bars-mode))
(use-package kirigami
:commands (kirigami-open-fold kirigami-open-fold-rec kirigami-close-fold
kirigami-toggle-fold kirigami-open-folds
kirigami-close-folds-except-current
kirigami-close-folds))
(use-package clipetty
:hook (after-init . global-clipetty-mode))
(use-package denote
:config
(setq denote-directory (list (expand-file-name "~/lyfi/SOR/Notes/"))
denote-file-type 'markdown-yaml
denote-prompts '(title subdirectory keywords)))
(use-package colorful-mode
:init (setq colorful-allow-mouse-clicks nil))
;; Tree-sitter & LSP tweaks
(with-eval-after-load 'treesit
(setq treesit-font-lock-level 4))
(with-eval-after-load 'typescript-ts-mode
(setq typescript-ts-mode-indent-offset 2)
(defvaralias 'typescript-indent-level 'typescript-ts-mode-indent-offset))
(with-eval-after-load 'lsp-mode
(setq lsp-completion-provider :none))
;; ============================================================
;; Functions
;; ============================================================
(defun my/system-copy (beg end)
"Copy region directly to system clipboard, bypassing Emacs' kill ring.
Uses wl-copy on Wayland GUI, and Clipetty (OSC 52) in TUI/SSH."
(interactive "r")
(unless (region-active-p)
(user-error "No active region to copy"))
(let ((text (buffer-substring-no-properties beg end)))
(if (display-graphic-p)
;; GUI: Pipe text directly to Wayland clipboard
(let ((process-connection-type nil))
(let ((proc (start-process "wl-copy" nil "wl-copy")))
(process-send-string proc text)
(process-send-eof proc)))
;; TUI/SSH: Use clipetty to send OSC 52 sequence to kitty
(if (fboundp 'clipetty-set-selection)
(clipetty-set-selection text)
(error "Clipetty not loaded. Ensure (global-clipetty-mode) is active")))
(deactivate-mark)
(message "Copied to system clipboard")))
(defun my/system-cut (beg end)
"Cut region directly to system clipboard, bypassing the kill ring."
(interactive "r")
(my/system-copy beg end)
;; delete-region deletes without adding to the kill ring
(delete-region beg end))
(defun my/system-paste ()
"Paste from system clipboard directly to point, bypassing the kill ring."
(interactive)
(if (display-graphic-p)
;; GUI: Read directly from Wayland clipboard and insert
(let ((text (shell-command-to-string "wl-paste -n")))
(insert text))
;; TUI/SSH: Warn the user to use the terminal's native paste
(message "In a terminal, use your terminal emulator's native paste shortcut (e.g., Ctrl-Shift-V).")))
(defun dired-follow-symlink ()
"In dired, visit the file or directory at point by its true physical path."
(interactive)
(let ((filename (dired-get-file-for-visit)))
(if filename
(find-file (file-truename filename))
(message "No file at point"))))
(defun my/vterm-sync-here ()
"Switch to vterm and instantly 'cd' to the current buffer's directory."
(interactive)
(let ((cwd default-directory))
(vterm-toggle)
(vterm-send-string (format "cd %s" (shell-quote-argument cwd)))
(vterm-send-return)))
(defun my/delete-word-backward ()
"Delete the word and any preceding whitespace without affecting the kill ring."
(interactive)
(let ((start (point)))
(skip-chars-backward "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789")
(skip-chars-backward " \t")
(delete-region (point) start)))
(defun my-modern-delete-word-backward ()
"Delete a block of similar characters backward without using the kill ring.
Similar characters are grouped as:
1. Whitespace (including newlines)
2. Alphanumerics
3. Special characters/symbols"
(interactive)
(let ((end (point))
(start (1- (point))))
(when (>= start 1)
(let* ((first-char (char-before end))
(first-type (my-get-char-type first-char)))
;; Move start point backward as long as the character type matches
(while (and (>= start 1)
(string= first-type (my-get-char-type (char-before start))))
(setq start (1- start)))
;; Delete the range without adding to the kill ring
(delete-region start end)))))
(defun my-get-char-type (char)
"Helper to categorize characters into three groups."
(let ((cat (char-category char)))
(cond
((member cat '("space" "newline")) "whitespace")
((member cat '("letter" "number")) "alphanum")
(t "special"))))
;; Bind it to Ctrl-Backspace
;; Note: In many terminals, C-Backspace is sent as C-h or C-Delete.
;; This binding works in GUI Emacs.
(global-set-key (kbd "C-<backspace>") 'my-modern-delete-word-backward)
;; ============================================================
;; Theming, ui
;; ============================================================
;;
(my/apply-theme (selected-frame))
;; Apply to all future frames (important for emacsclient users)
(add-hook 'after-make-frame-functions 'my/apply-theme)
;;fonts
(setq doom-font "Fira Code 12")
(setq doom-variable-pitch-font "Noto Sans 14")
(setq nerd-icons-font-family "Symbols Nerd Font Mono")
(defun my-set-buffer-font ()
"Set a specific font for the current buffer only."
(buffer-face-set '(:family "Noto Sans" :height 140)))
(add-hook 'after-make-frame-functions #'my/apply-theme)
+29
View File
@@ -0,0 +1,29 @@
;;; ../../lyfi/configs/apps/doom/custom/avy-region.el -*- lexical-binding: t; -*-
(defun my/avy-region (jump-fn &optional inclusive)
"Select region between two points chosen with JUMP-FN.
JUMP-FN is a command like `avy-goto-char-timer' or `avy-goto-line'.
When INCLUSIVE is non-nil, include the character at the end point."
(interactive)
(let (p1 p2)
(cl-labels ((do-jump () (call-interactively jump-fn) (point)))
(setq p1 (do-jump))
(setq p2 (do-jump)))
(when (and p1 p2)
(let ((beg (min p1 p2))
(end (max p1 p2)))
(push-mark beg nil t)
(goto-char end)
(when inclusive
(unless (eobp) (forward-char 1)))))))
(defun my/avy-char-region ()
"mark region between 2 chars using avy-char"
(interactive)
(my/avy-region 'avy-goto-char-timer t))
(defun my/avy-line-region ()
"mark region between 2 lines using avy-line"
(interactive)
(my/avy-region 'avy-goto-line)
(forward-line 1))
+199
View File
@@ -0,0 +1,199 @@
;;; buffer-table.el --- Tabular view of buffers and recent files -*- lexical-binding: t; -*-
(require 'cl-lib)
(require 'recentf)
(defgroup buffer-table nil
"Tabular view of buffers and recent files."
:group 'convenience)
;; Faces for distinction
(defface buffer-table-open '((t :inherit font-lock-keyword-face :bold t)) "Face for open files.")
(defface buffer-table-recent '((t :inherit shadow)) "Face for recent closed files.")
(defface buffer-table-special '((t :inherit font-lock-comment-face)) "Face for internal buffers.")
(defface buffer-table-modified '((t :inherit error :bold t)) "Face for modified flag.")
(defface buffer-table-marked '((t :inherit warning :bold t)) "Face for marked entries.")
;; Mark tracking - set of entry IDs currently marked
(defvar buffer-table--marked nil
"Set of marked entry IDs (buffer objects or file paths).")
(defun buffer-table--get-entries ()
"Collect all items and format them for tabulated-list-entries."
(let ((file-entries nil)
(recent-entries nil)
(special-entries nil)
(processed-files (make-hash-table :test 'equal)))
;; 1. Open File-visiting Buffers
(dolist (buf (buffer-list))
(let ((file (buffer-file-name buf)))
(when (and file (not (string-prefix-p " " (buffer-name buf))))
(puthash file t processed-files)
(push (list buf
(vector
(if (buffer-modified-p buf) (propertize "*" 'face 'buffer-table-modified) " ")
(propertize "File" 'face 'buffer-table-open)
(propertize (buffer-name buf) 'face 'buffer-table-open)
(abbreviate-file-name (file-name-directory file))
(if (gethash buf buffer-table--marked)
(propertize "" 'face 'buffer-table-marked)
"")))
file-entries))))
;; 2. Recent Files (Closed)
(recentf-mode 1)
(dolist (file recentf-list)
(unless (gethash file processed-files)
(push (list file
(vector
" "
(propertize "Recent" 'face 'buffer-table-recent)
(propertize (file-name-nondirectory file) 'face 'buffer-table-recent)
(abbreviate-file-name (file-name-directory file))
(if (gethash file buffer-table--marked)
(propertize "" 'face 'buffer-table-marked)
"")))
recent-entries)))
;; 3. Special Buffers
(dolist (buf (buffer-list))
(unless (or (buffer-file-name buf) (string-prefix-p " " (buffer-name buf)))
(push (list buf
(vector
(if (buffer-modified-p buf) (propertize "*" 'face 'buffer-table-modified) " ")
(propertize "Special" 'face 'buffer-table-special)
(propertize (buffer-name buf) 'face 'buffer-table-special)
""
(if (gethash buf buffer-table--marked)
(propertize "" 'face 'buffer-table-marked)
"")))
special-entries)))
;; Return in requested order: Special, then File, then Recent
(append (nreverse special-entries)
(nreverse file-entries)
(nreverse recent-entries))))
(defun buffer-table--refresh ()
"Refresh the list."
(setq tabulated-list-entries (buffer-table--get-entries))
(tabulated-list-print t))
(defun buffer-table-mark ()
"Mark the entry at point."
(interactive)
(let ((id (tabulated-list-get-id)))
(when id
(puthash id t buffer-table--marked)
(buffer-table--refresh))))
(defun buffer-table-unmark ()
"Unmark the entry at point."
(interactive)
(let ((id (tabulated-list-get-id)))
(when id
(remhash id buffer-table--marked)
(buffer-table--refresh))))
(defun buffer-table-mark-all ()
"Mark all entries."
(interactive)
(dolist (entry tabulated-list-entries)
(puthash (car entry) t buffer-table--marked))
(buffer-table--refresh))
(defun buffer-table-unmark-all ()
"Unmark all entries."
(interactive)
(setq buffer-table--marked (make-hash-table))
(buffer-table--refresh))
(defun buffer-table-kill-marked ()
"Kill all marked buffers. For recent files, remove from recentf list."
(interactive)
(unless (hash-table-p buffer-table--marked)
(user-error "No entries marked"))
(when (or (null (buffer-table--marked-count))
(zerop (buffer-table--marked-count)))
(user-error "No entries marked"))
(let ((buffers-to-kill nil)
(recent-to-remove nil))
(maphash (lambda (id _)
(if (bufferp id)
(push id buffers-to-kill)
(push id recent-to-remove)))
buffer-table--marked)
;; Kill buffers
(when buffers-to-kill
(let ((count (length buffers-to-kill)))
(dolist (buf buffers-to-kill)
(when (buffer-live-p buf)
(kill-buffer buf)))
(message "Killed %d buffer%s" count (if (> count 1) "s" ""))))
;; Remove from recentf
(when recent-to-remove
(let ((count (length recent-to-remove)))
(dolist (file recent-to-remove)
(setq recentf-list (delq file recentf-list)))
(recentf-save-list)
(message "Removed %d file%s from recentf" count (if (> count 1) "s" ""))))
(setq buffer-table--marked (make-hash-table))
(buffer-table--refresh)))
(defun buffer-table--marked-count ()
"Return the number of marked entries."
(hash-table-count buffer-table--marked))
(defun buffer-table-visit ()
"Visit the buffer or file at point."
(interactive)
(let ((id (tabulated-list-get-id)))
(cond
((bufferp id) (switch-to-buffer id))
((stringp id) (find-file id))
(t (user-error "Nothing to visit here")))))
(defun buffer-table-revert ()
"Revert the table, clearing marks."
(interactive)
(setq buffer-table--marked (make-hash-table))
(buffer-table--refresh))
(define-derived-mode buffer-table-mode tabulated-list-mode "Buffer-Table"
"Major mode for a unified buffer and file list."
(setq buffer-table--marked (make-hash-table))
(setq tabulated-list-format
[("S" 1 t) ; Status (Modified)
("Type" 8 t) ; File, Recent, or Special
("Name" 35 t) ; File/Buffer name
("Path" 0 t) ; Directory path (flexible width)
("M" 3 t)]) ; Mark column
(setq tabulated-list-padding 2)
(setq tabulated-list-sort-key '("Type" . nil))
(add-hook 'tabulated-list-revert-hook #'buffer-table--refresh nil t)
(tabulated-list-init-header))
(define-key buffer-table-mode-map (kbd "RET") #'buffer-table-visit)
(define-key buffer-table-mode-map (kbd "g") #'buffer-table-revert)
(define-key buffer-table-mode-map (kbd "m") #'buffer-table-mark)
(define-key buffer-table-mode-map (kbd "M") #'buffer-table-mark-all)
(define-key buffer-table-mode-map (kbd "u") #'buffer-table-unmark-all)
(define-key buffer-table-mode-map (kbd "U") #'buffer-table-unmark)
(define-key buffer-table-mode-map (kbd "D") #'buffer-table-kill-marked)
;;;###autoload
(defun buffer-table ()
"Display the unified buffer and file table."
(interactive)
(let ((buf (get-buffer-create "*Buffer Table*")))
(with-current-buffer buf
(buffer-table-mode)
(buffer-table--refresh))
(switch-to-buffer buf)))
(provide 'buffer-table)
+129
View File
@@ -0,0 +1,129 @@
;;; ../../lyfi/configs/apps/doom/custom/meow.el -*- lexical-binding: t; -*-
;;Custom Meow Cheatsheet Renderer
(defvar my-meow-board-grid
'(("1" "2" "3" "4" "5" "6" "7" "8" "9" "0")
("q" "w" "e" "r" "t" "y" "u" "i" "o" "p")
("a" "s" "d" "f" "g" "h" "j" "k" "l" ";")
("z" "x" "c" "v" "b" "n" "m" "," "." "/" "'"))
"The physical layout of the board as a 2D array.")
(defun my-meow-get-cmd-name (key)
"Helper to get the short name of a command for a given key, or a placeholder."
(let ((cmd (key-binding key)))
(if cmd
(meow--short-command-name cmd)
(if (member key '("TAB" "SFT" "CTL" "CAPS" "GUI" "ALT" "MO1" "SPC" "ENT" "BKSL" "LMB" "RMB" "UP" "DN" "N2"))
key
"<not bound>"))))
(defun my-meow-render-grid ()
"Generates a clean table of Meow commands with base and shift layers."
(let ((output ""))
(dolist (row my-meow-board-grid)
(let ((row-lower "")
(row-upper ""))
(dolist (key row)
(let* ((low-name (my-meow-get-cmd-name key))
(up-key (upcase key))
(up-name (my-meow-get-cmd-name up-key)))
;; Build the lower layer string
(setq row-lower (concat row-lower
(format "[%s = %-12s] " key low-name)))
;; Build the upper layer string
(setq row-upper (concat row-upper
(format "[%s = %-12s] " up-key up-name)))))
;; Append both layers, then a newline for a gap between physical rows
(setq output (concat output row-lower "\n" row-upper "\n\n"))))
output))
(defun my-meow-cheatsheet ()
"Custom cheatsheet that uses a grid instead of fragile ASCII art."
(interactive)
(let ((buf (get-buffer-create "*Meow Cheatsheet*")))
(with-current-buffer buf
(text-mode)
(setq buffer-read-only nil)
(erase-buffer)
(insert "Meow Custom Layout Cheatsheet\n")
(insert "====================================================================================================\n\n")
(insert (my-meow-render-grid))
(insert "\n====================================================================================================\n")
(insert meow--cheatsheet-note)
(insert (meow--render-cheatsheet-thing-table))
(add-face-text-property (point-min) (point-max) 'meow-cheatsheet-command)
(setq buffer-read-only t))
(switch-to-buffer buf)))
(defun meow-setup ()
;; We no longer need the physical-layout strings because we use my-meow-board-grid
(meow-motion-overwrite-define-key
'("j" . meow-next)
'("k" . meow-prev)
'("<escape>" . mode-line-other-buffer))
(meow-leader-define-key
'("/" . meow-keypad-describe-key)
'("?" . my-meow-cheatsheet)) ;; Use our new custom renderer here
(meow-normal-define-key
'("0" . meow-expand-0)
'("9" . meow-expand-9)
'("8" . meow-expand-8)
'("7" . meow-expand-7)
'("6" . meow-expand-6)
'("5" . meow-expand-5)
'("4" . meow-expand-4)
'("3" . meow-expand-3)
'("2" . meow-expand-2)
'("1" . meow-expand-1)
'("-" . negative-argument)
'(";" . meow-reverse)
'("," . meow-inner-of-thing)
'("." . meow-bounds-of-thing)
'("[" . meow-beginning-of-thing)
'("]" . meow-end-of-thing)
'("a" . meow-append)
'("A" . meow-open-below)
'("b" . meow-back-word)
'("B" . meow-back-symbol)
'("c" . meow-change)
'("d" . meow-delete)
'("D" . meow-backward-delete)
'("e" . meow-next-word)
'("E" . meow-next-symbol)
'("f" . meow-find)
'("g" . meow-cancel-selection)
'("G" . meow-grab)
'("h" . meow-left)
'("H" . meow-left-expand)
'("i" . meow-insert)
'("I" . meow-open-above)
'("j" . meow-next)
'("J" . meow-next-expand)
'("k" . meow-prev)
'("K" . meow-prev-expand)
'("l" . meow-right)
'("L" . meow-right-expand)
'("m" . meow-join)
'("n" . meow-search)
'("o" . meow-block)
'("O" . meow-to-block)
'("p" . meow-yank)
'("q" . meow-quit)
'("Q" . meow-goto-line)
'("r" . meow-replace)
'("R" . meow-swap-grab)
'("s" . meow-kill)
'("t" . meow-till)
'("u" . meow-undo)
'("U" . meow-undo-in-selection)
'("v" . meow-visit)
'("w" . meow-mark-word)
'("W" . meow-mark-symbol)
'("x" . meow-line)
'("X" . meow-goto-line)
'("y" . meow-save)
'("Y" . meow-sync-grab)
'("z" . meow-pop-selection)
'("'" . repeat)))
+13
View File
@@ -0,0 +1,13 @@
;;; ../../lyfi/configs/apps/doom/custom/ui.el -*- lexical-binding: t; -*-
(defun my/apply-theme (frame)
"Apply a specific theme based on whether the FRAME is graphic or TUI."
(select-frame frame)
(if (display-graphic-p frame)
(progn
(mapc #'disable-theme custom-enabled-themes)
(load-theme 'cutarv32 t)) ;; Your GUI theme
(progn
(mapc #'disable-theme custom-enabled-themes)
(load-theme 'cutarv32_dark t)))) ;; Your TUI theme
+28
View File
@@ -0,0 +1,28 @@
;;; ../../lyfi/configs/apps/doom/custom/unifiedlist.el -*- lexical-binding: t; -*-
(defun my/get-unified-list ()
"Combine buffers and recentf into a list for tabulated-list-mode."
(let ((items '()))
;; Add Live Buffers
(dolist (buf (buffer-list))
(with-current-buffer buf
(push (list buf (vector (buffer-name) "Live" (format-mode-line mode-name) (or (buffer-file-name) ""))) items)))
;; Add Recent Files (if not already open)
(dolist (file recentf-list)
(unless (get-file-buffer file)
(push (list file (vector (file-name-nondirectory file) "Recent" "File" file)) items)))
(nreverse items)))
(define-derived-mode my-unified-list-mode tabulated-list-mode "Unified-List"
(setq tabulated-list-format [("Name" 30 t)
("Status" 10 t)
("Mode" 15 t)
("Path" 0 t)])
(setq tabulated-list-entries #'my/get-unified-list)
(tabulated-list-init-header))
(defun my/open-unified-list ()
(interactive)
(pop-to-buffer "*Unified Switcher*")
(my-unified-list-mode)
(tabulated-list-print))
+20
View File
@@ -0,0 +1,20 @@
;;; early-init.el -*- lexical-binding: t; -*-
;; Prevent package.el from loading at startup (elpaca handles it)
(setq package-enable-at-startup nil)
;; Disable UI elements early for faster frame rendering
(setq inhibit-startup-screen t
inhibit-startup-echo-area-message user-login-name
initial-scratch-message nil
initial-major-mode 'fundamental-mode
frame-inhibit-implied-resize t
garbage-collection-messages t)
;; Temporarily raise GC threshold during startup
(setq gc-cons-threshold most-positive-fixnum
gc-cons-percentage 0.6)
;; Disable UI chrome
(dolist (mode '(menu-bar-mode tool-bar-mode scroll-bar-mode))
(when (fboundp mode) (funcall mode -1)))
+148
View File
@@ -0,0 +1,148 @@
;;; init.el -*- lexical-binding: t; -*-
;;elpaca
(defvar elpaca-installer-version 0.12)
(defvar elpaca-directory (expand-file-name "elpaca/" user-emacs-directory))
(defvar elpaca-builds-directory (expand-file-name "builds/" elpaca-directory))
(defvar elpaca-sources-directory (expand-file-name "sources/" elpaca-directory))
(defvar elpaca-order '(elpaca :repo "https://github.com/progfolio/elpaca.git"
:ref nil :depth 1 :inherit ignore
:files (:defaults "elpaca-test.el" (:exclude "extensions"))
:build (:not elpaca-activate)))
(let* ((repo (expand-file-name "elpaca/" elpaca-sources-directory))
(build (expand-file-name "elpaca/" elpaca-builds-directory))
(order (cdr elpaca-order))
(default-directory repo))
(add-to-list 'load-path (if (file-exists-p build) build repo))
(unless (file-exists-p repo)
(make-directory repo t)
(when (<= emacs-major-version 28) (require 'subr-x))
(condition-case-unless-debug err
(if-let* ((buffer (pop-to-buffer-same-window "*elpaca-bootstrap*"))
((zerop (apply #'call-process `("git" nil ,buffer t "clone"
,@(when-let* ((depth (plist-get order :depth)))
(list (format "--depth=%d" depth) "--no-single-branch"))
,(plist-get order :repo) ,repo))))
((zerop (call-process "git" nil buffer t "checkout"
(or (plist-get order :ref) "--"))))
(emacs (concat invocation-directory invocation-name))
((zerop (call-process emacs nil buffer nil "-Q" "-L" "." "--batch"
"--eval" "(byte-recompile-directory \".\" 0 'force)")))
((require 'elpaca))
((elpaca-generate-autoloads "elpaca" repo)))
(progn (message "%s" (buffer-string)) (kill-buffer buffer))
(error "%s" (with-current-buffer buffer (buffer-string))))
((error) (warn "%s" err) (delete-directory repo 'recursive))))
(unless (require 'elpaca-autoloads nil t)
(require 'elpaca)
(elpaca-generate-autoloads "elpaca" repo)
(let ((load-source-file-function nil)) (load "./elpaca-autoloads"))))
(add-hook 'after-init-hook #'elpaca-process-queues)
(elpaca `(,@elpaca-order))
(elpaca-wait)
;; emacs 30 fix
;;(add-to-list 'elpaca-ignored-dependencies 'compat)
;; ==============================================================================
;; CORE UI & INTERFACE
;; ==============================================================================
(elpaca compat)
(elpaca general) ;; Keybindings
(elpaca vertico) ;; Vertical completion
(elpaca orderless) ;; Filtering for Consult/Vertico
(elpaca marginalia) ;; Annotations in the minibuffer
(elpaca corfu) ;; In-buffer completion
(elpaca nerd-icons)
(elpaca nerd-icons-completion)
(elpaca nerd-icons-dired)
(elpaca nerd-icons-corfu)
(elpaca-wait) ;; Ensure UI is ready before loading tools
;; ==============================================================================
;; EDITING & NAVIGATION
;; ==============================================================================
(elpaca meow) ;; Modal editing
(elpaca avy) ;; Fast jumping
(elpaca smartparens)
(elpaca expand-region)
(elpaca undo-fu)
(elpaca vundo) ;; Visual undo tree
(elpaca xclip)
(elpaca clipetty)
(elpaca embark) ;; Contextual actions
(elpaca kirigami) ;; Selection/Editing
(elpaca jinx) ;; Fast duplicate lines
;; ==============================================================================
;; CODE ANALYSIS & VISUALS
;; ==============================================================================
(elpaca treesit-auto)
(elpaca treesit-fold)
(elpaca highlight-quoted)
(elpaca highlight-defined)
(elpaca color-identifiers-mode)
(elpaca rainbow-delimiters)
(elpaca indent-bars)
(elpaca outline-indent)
;; ==============================================================================
;; LSP & DEVELOPMENT
;; ==============================================================================
(elpaca mason) ;; LSP server manager
(elpaca lsp-mode)
(elpaca lsp-ui)
(elpaca consult-lsp)
;; ==============================================================================
;; LANGUAGE MODES
;; ==============================================================================
(elpaca kdl-mode)
(elpaca csv-mode)
;; ==============================================================================
;; UTILITIES
;; ==============================================================================
(elpaca consult) ;; Enhanced search/navigation
(elpaca vterm)
(elpaca vterm-toggle)
(elpaca colorful-mode)
;;(elpaca dirvish) ;;broken on emacs 30
(elpaca transient)
(elpaca magit)
(elpaca casual)
;; ==============================================================================
;; KNOWLEDGE MANAGEMENT (ZK/DENOTE)
;; ==============================================================================
(elpaca denote)
(elpaca consult-denote)
(elpaca denote-menu)
(elpaca zk)
(elpaca zk-index)
(elpaca-wait)
;; ==============================================================================
;; ELPACA CONFIGURATION
;; ==============================================================================
(elpaca elpaca-use-package
;; Automatically adds :ensure t and :defer t to use-package declarations
(elpaca-use-package-mode)
(setq elpaca-use-package-by-default t))
(elpaca-wait)
(load (expand-file-name "config.el" user-emacs-directory))
(custom-set-variables
;; custom-set-variables was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
'(custom-safe-themes
'("faaccacbb368285948d610df3814315fa5f7727358ddb77ad8dd16d15cd58d9f"
default)))
(custom-set-faces
;; custom-set-faces was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
)
+142
View File
@@ -0,0 +1,142 @@
;;; themes/MTF4-extended-theme.el -*- lexical-binding: t; -*-
;; MTF4-extended-theme.el
;; A brighter, high-contrast light theme based on MTF4 with extended color palette
(deftheme MTF4-extended
"A brighter, high-contrast light theme with extended color palette based on MTF4.")
(let (
;; Core colors - Bright high-contrast palette
(bg-primary "#FFFFFF")
(bg-secondary "#F8F9FA")
(bg-tertiary "#F0F0F0")
(bg-highlight "#E0E0FF")
(bg-region "#C0C0FF")
(fg-primary "#202020")
(fg-secondary "#444444")
(fg-tertiary "#666666")
(fg-comment "#8D8D84")
;; Syntax colors - Bright and distinct
(syntax-magenta "#EF89DF")
(syntax-blue "#508AE0")
(syntax-purple "#6434A3")
(syntax-green "#88D26E")
(syntax-teal "#008080")
(syntax-red "#FF6B6B")
(syntax-orange "#FFB347")
(syntax-cyan "#89DAFF")
;; UI colors
(ui-cursor "#6434A3") ; Purple cursor for visibility
(ui-fringe "#F8F9FA") ; Subtle fringe
(ui-mode-line "#508AE0") ; Bright blue mode line
(ui-mode-line-inactive "#C0C0C0")
(ui-search "#C0FFC0") ; Bright green search
(ui-search-fail "#FFC0C0") ; Bright red for failed search
)
(custom-theme-set-faces
'MTF4-extended
;; Basic faces - High contrast foundation
`(default ((t (:background ,bg-primary :foreground ,fg-primary))))
`(cursor ((t (:background ,ui-cursor))))
`(fringe ((t (:background ,ui-fringe))))
`(hl-line ((t (:background ,bg-highlight))))
`(highlight ((t (:background ,bg-highlight))))
`(region ((t (:background ,bg-region :foreground ,fg-primary))))
`(secondary-selection ((t (:background ,syntax-cyan :foreground ,fg-primary))))
`(lazy-highlight ((t (:background ,ui-search :foreground ,fg-primary))))
;; Mode line - Bright and clear
`(mode-line ((t (:foreground "white" :background ,ui-mode-line :box nil))))
`(mode-line-inactive ((t (:foreground ,fg-primary :background ,ui-mode-line-inactive :box nil))))
`(mode-line-buffer-id ((t (:foreground "white" :weight bold))))
`(mode-line-emphasis ((t (:foreground "white" :weight bold))))
`(mode-line-highlight ((t (:foreground "white"))))
;; Syntax highlighting - Bright, distinct colors
`(font-lock-builtin-face ((t (:foreground ,syntax-purple))))
`(font-lock-comment-face ((t (:foreground ,fg-comment :slant italic))))
`(font-lock-comment-delimiter-face ((t (:foreground ,fg-comment))))
`(font-lock-constant-face ((t (:foreground ,syntax-magenta))))
`(font-lock-doc-face ((t (:foreground ,syntax-green))))
`(font-lock-function-name-face ((t (:foreground ,syntax-blue))))
`(font-lock-keyword-face ((t (:foreground ,syntax-purple :weight bold))))
`(font-lock-string-face ((t (:foreground ,syntax-teal))))
`(font-lock-type-face ((t (:foreground ,syntax-green))))
`(font-lock-variable-name-face ((t (:foreground ,syntax-orange))))
`(font-lock-preprocessor-face ((t (:foreground ,syntax-purple))))
`(font-lock-warning-face ((t (:foreground ,syntax-red :weight bold))))
`(font-lock-error-face ((t (:foreground ,syntax-red :weight bold))))
;; Search and matching
`(isearch ((t (:background ,ui-search :foreground ,fg-primary))))
`(isearch-fail ((t (:background ,ui-search-fail :foreground ,fg-primary))))
`(match ((t (:background ,syntax-green :foreground ,bg-primary))))
;; Minibuffer
`(minibuffer-prompt ((t (:foreground ,syntax-blue :weight bold))))
;; Line numbers
`(line-number ((t (:foreground ,fg-comment :background ,bg-secondary))))
`(line-number-current-line ((t (:foreground ,syntax-blue :background ,bg-tertiary :weight bold))))
;; Diff
`(diff-added ((t (:background "#E0FFE0" :foreground ,syntax-green))))
`(diff-removed ((t (:background "#FFE0E0" :foreground ,syntax-red))))
`(diff-changed ((t (:background "#FFFFE0" :foreground ,syntax-orange))))
;; Whitespace
`(whitespace-line ((t (:foreground ,syntax-red :background "#FFFF88"))))
`(whitespace-tab ((t (:foreground "#E0E0E0" :background "white"))))
`(whitespace-hspace ((t (:foreground "#E0E0E0"))))
;; Links
`(link ((t (:foreground ,syntax-blue :underline t))))
`(link-visited ((t (:foreground ,syntax-purple :underline t))))
;; Org-mode
`(org-level-1 ((t (:foreground ,syntax-purple :weight bold :height 1.2))))
`(org-level-2 ((t (:foreground ,syntax-blue :weight bold))))
`(org-level-3 ((t (:foreground ,syntax-magenta :weight bold))))
`(org-done ((t (:foreground ,syntax-green :weight bold))))
`(org-todo ((t (:foreground ,syntax-red :weight bold))))
`(org-date ((t (:foreground ,syntax-teal))))
`(org-block ((t (:background ,bg-secondary :foreground ,fg-primary))))
`(org-code ((t (:foreground ,syntax-orange))))
;; Terminal compatibility
`(term-color-black ((t (:foreground ,fg-primary :background ,fg-primary))))
`(term-color-red ((t (:foreground ,syntax-red :background ,syntax-red))))
`(term-color-green ((t (:foreground ,syntax-green :background ,syntax-green))))
`(term-color-yellow ((t (:foreground ,syntax-orange :background ,syntax-orange))))
`(term-color-blue ((t (:foreground ,syntax-blue :background ,syntax-blue))))
`(term-color-magenta ((t (:foreground ,syntax-magenta :background ,syntax-magenta))))
`(term-color-cyan ((t (:foreground ,syntax-teal :background ,syntax-teal))))
`(term-color-white ((t (:foreground ,bg-primary :background ,bg-primary))))
;; Company (autocompletion)
`(company-tooltip ((t (:background ,bg-secondary :foreground ,fg-primary))))
`(company-tooltip-selection ((t (:background ,syntax-blue :foreground "white"))))
`(company-tooltip-common ((t (:foreground ,syntax-purple))))
`(company-scrollbar-bg ((t (:background ,bg-tertiary))))
`(company-scrollbar-fg ((t (:background ,fg-comment))))
;; Ivy/Helm
`(ivy-current-match ((t (:background ,syntax-blue :foreground "white"))))
`(ivy-minibuffer-match-face-1 ((t (:foreground ,fg-tertiary))))
`(ivy-minibuffer-match-face-2 ((t (:foreground ,syntax-purple :weight bold))))
`(ivy-minibuffer-match-face-3 ((t (:foreground ,syntax-magenta))))
`(ivy-minibuffer-match-face-4 ((t (:foreground ,syntax-green))))
;; Dired
`(dired-directory ((t (:foreground ,syntax-blue :weight bold))))
`(dired-flagged ((t (:foreground ,syntax-red))))
`(dired-symlink ((t (:foreground ,syntax-magenta))))
))
(provide-theme 'MTF4-extended)
+142
View File
@@ -0,0 +1,142 @@
;;; themes/MTF4-extended-theme.el -*- lexical-binding: t; -*-
;; MTF4-extended-theme.el
;; A brighter, high-contrast light theme based on MTF4 with extended color palette
(deftheme MTF4-extended
"A brighter, high-contrast light theme with extended color palette based on MTF4.")
(let (
;; Core colors - Bright high-contrast palette
(bg-primary "#FFFFFF")
(bg-secondary "#F8F9FA")
(bg-tertiary "#F0F0F0")
(bg-highlight "#E0E0FF")
(bg-region "#C0C0FF")
(fg-primary "#202020")
(fg-secondary "#444444")
(fg-tertiary "#666666")
(fg-comment "#8D8D84")
;; Syntax colors - Bright and distinct
(syntax-magenta "#EF89DF")
(syntax-blue "#508AE0")
(syntax-purple "#6434A3")
(syntax-green "#88D26E")
(syntax-teal "#008080")
(syntax-red "#FF6B6B")
(syntax-orange "#FFB347")
(syntax-cyan "#89DAFF")
;; UI colors
(ui-cursor "#6434A3") ; Purple cursor for visibility
(ui-fringe "#F8F9FA") ; Subtle fringe
(ui-mode-line "#508AE0") ; Bright blue mode line
(ui-mode-line-inactive "#C0C0C0")
(ui-search "#C0FFC0") ; Bright green search
(ui-search-fail "#FFC0C0") ; Bright red for failed search
)
(custom-theme-set-faces
'MTF4-extended
;; Basic faces - High contrast foundation
`(default ((t (:background ,bg-primary :foreground ,fg-primary))))
`(cursor ((t (:background ,ui-cursor))))
`(fringe ((t (:background ,ui-fringe))))
`(hl-line ((t (:background ,bg-highlight))))
`(highlight ((t (:background ,bg-highlight))))
`(region ((t (:background ,bg-region :foreground ,fg-primary))))
`(secondary-selection ((t (:background ,syntax-cyan :foreground ,fg-primary))))
`(lazy-highlight ((t (:background ,ui-search :foreground ,fg-primary))))
;; Mode line - Bright and clear
`(mode-line ((t (:foreground "white" :background ,ui-mode-line :box nil))))
`(mode-line-inactive ((t (:foreground ,fg-primary :background ,ui-mode-line-inactive :box nil))))
`(mode-line-buffer-id ((t (:foreground "white" :weight bold))))
`(mode-line-emphasis ((t (:foreground "white" :weight bold))))
`(mode-line-highlight ((t (:foreground "white"))))
;; Syntax highlighting - Bright, distinct colors
`(font-lock-builtin-face ((t (:foreground ,syntax-purple))))
`(font-lock-comment-face ((t (:foreground ,fg-comment :slant italic))))
`(font-lock-comment-delimiter-face ((t (:foreground ,fg-comment))))
`(font-lock-constant-face ((t (:foreground ,syntax-magenta))))
`(font-lock-doc-face ((t (:foreground ,syntax-green))))
`(font-lock-function-name-face ((t (:foreground ,syntax-blue))))
`(font-lock-keyword-face ((t (:foreground ,syntax-purple :weight bold))))
`(font-lock-string-face ((t (:foreground ,syntax-teal))))
`(font-lock-type-face ((t (:foreground ,syntax-green))))
`(font-lock-variable-name-face ((t (:foreground ,syntax-orange))))
`(font-lock-preprocessor-face ((t (:foreground ,syntax-purple))))
`(font-lock-warning-face ((t (:foreground ,syntax-red :weight bold))))
`(font-lock-error-face ((t (:foreground ,syntax-red :weight bold))))
;; Search and matching
`(isearch ((t (:background ,ui-search :foreground ,fg-primary))))
`(isearch-fail ((t (:background ,ui-search-fail :foreground ,fg-primary))))
`(match ((t (:background ,syntax-green :foreground ,bg-primary))))
;; Minibuffer
`(minibuffer-prompt ((t (:foreground ,syntax-blue :weight bold))))
;; Line numbers
`(line-number ((t (:foreground ,fg-comment :background ,bg-secondary))))
`(line-number-current-line ((t (:foreground ,syntax-blue :background ,bg-tertiary :weight bold))))
;; Diff
`(diff-added ((t (:background "#E0FFE0" :foreground ,syntax-green))))
`(diff-removed ((t (:background "#FFE0E0" :foreground ,syntax-red))))
`(diff-changed ((t (:background "#FFFFE0" :foreground ,syntax-orange))))
;; Whitespace
`(whitespace-line ((t (:foreground ,syntax-red :background "#FFFF88"))))
`(whitespace-tab ((t (:foreground "#E0E0E0" :background "white"))))
`(whitespace-hspace ((t (:foreground "#E0E0E0"))))
;; Links
`(link ((t (:foreground ,syntax-blue :underline t))))
`(link-visited ((t (:foreground ,syntax-purple :underline t))))
;; Org-mode
`(org-level-1 ((t (:foreground ,syntax-purple :weight bold :height 1.2))))
`(org-level-2 ((t (:foreground ,syntax-blue :weight bold))))
`(org-level-3 ((t (:foreground ,syntax-magenta :weight bold))))
`(org-done ((t (:foreground ,syntax-green :weight bold))))
`(org-todo ((t (:foreground ,syntax-red :weight bold))))
`(org-date ((t (:foreground ,syntax-teal))))
`(org-block ((t (:background ,bg-secondary :foreground ,fg-primary))))
`(org-code ((t (:foreground ,syntax-orange))))
;; Terminal compatibility
`(term-color-black ((t (:foreground ,fg-primary :background ,fg-primary))))
`(term-color-red ((t (:foreground ,syntax-red :background ,syntax-red))))
`(term-color-green ((t (:foreground ,syntax-green :background ,syntax-green))))
`(term-color-yellow ((t (:foreground ,syntax-orange :background ,syntax-orange))))
`(term-color-blue ((t (:foreground ,syntax-blue :background ,syntax-blue))))
`(term-color-magenta ((t (:foreground ,syntax-magenta :background ,syntax-magenta))))
`(term-color-cyan ((t (:foreground ,syntax-teal :background ,syntax-teal))))
`(term-color-white ((t (:foreground ,bg-primary :background ,bg-primary))))
;; Company (autocompletion)
`(company-tooltip ((t (:background ,bg-secondary :foreground ,fg-primary))))
`(company-tooltip-selection ((t (:background ,syntax-blue :foreground "white"))))
`(company-tooltip-common ((t (:foreground ,syntax-purple))))
`(company-scrollbar-bg ((t (:background ,bg-tertiary))))
`(company-scrollbar-fg ((t (:background ,fg-comment))))
;; Ivy/Helm
`(ivy-current-match ((t (:background ,syntax-blue :foreground "white"))))
`(ivy-minibuffer-match-face-1 ((t (:foreground ,fg-tertiary))))
`(ivy-minibuffer-match-face-2 ((t (:foreground ,syntax-purple :weight bold))))
`(ivy-minibuffer-match-face-3 ((t (:foreground ,syntax-magenta))))
`(ivy-minibuffer-match-face-4 ((t (:foreground ,syntax-green))))
;; Dired
`(dired-directory ((t (:foreground ,syntax-blue :weight bold))))
`(dired-flagged ((t (:foreground ,syntax-red))))
`(dired-symlink ((t (:foreground ,syntax-magenta))))
))
(provide-theme 'MTF4-extended)
+129
View File
@@ -0,0 +1,129 @@
;;; themes/MTX16.el -*- lexical-binding: t; -*-
;; my-extended-theme.el
;; A high-contrast Emacs theme based on the extended color palette
(deftheme MTX16 "A high-contrast theme with extended color palette")
(let (
;; Base colors - High contrast neutrals
(base00 "#eef0f0") ; Background
(base01 "#F8F9FA") ; Lighter background (status bars, line numbers)
(base02 "#F0F0F0") ; Selection background, current line
(base03 "#BBBBBB") ; Comments, invisible
(base04 "#8D8D84") ; Dark foreground (disabled)
(base05 "#666666") ; Default foreground (less important)
(base06 "#444444") ; Default foreground
(base07 "#333333") ; Strong foreground (important text)
(base08 "#FF6B6B") ; Red: errors, deleted
(base09 "#FFB347") ; Orange: warnings
(base0A "#88D26E") ; Green: success, strings
(base0B "#9EBD6E") ; Light green: strings alt
(base0C "#508AE0") ; Blue: functions, info
(base0D "#6434A3") ; Purple: keywords, variables
(base0E "#EF89DF") ; Magenta: constants, special
(base0F "#A080CA") ; Light purple: operators
;; Additional GUI-specific enhancements
(highlight "#CEF")
(region "#7DF")
(accent-strong "#508AE0")
(accent-subtle "#BEEFFF")
)
(custom-theme-set-faces
'MTX16
;; Basic faces
`(default ((t (:background ,base00 :foreground ,base07))))
`(cursor ((t (:background ,base07))))
`(fringe ((t (:background ,base01))))
`(highlight ((t (:background ,highlight))))
`(region ((t (:background ,region :foreground ,base07))))
`(secondary-selection ((t (:background ,accent-subtle))))
;; Mode line
`(mode-line ((t (:background ,base02 :foreground ,base07 :box nil))))
`(mode-line-inactive ((t (:background ,base01 :foreground ,base04 :box nil))))
`(mode-line-buffer-id ((t (:foreground ,base0D :weight bold))))
;; Font lock - syntax highlighting
`(font-lock-comment-face ((t (:foreground ,base03 :slant italic))))
`(font-lock-comment-delimiter-face ((t (:foreground ,base03))))
`(font-lock-doc-face ((t (:foreground ,base04))))
`(font-lock-string-face ((t (:foreground ,base0A))))
`(font-lock-constant-face ((t (:foreground ,base0E))))
`(font-lock-builtin-face ((t (:foreground ,base0F))))
`(font-lock-type-face ((t (:foreground ,base0D))))
`(font-lock-function-name-face ((t (:foreground ,base0C))))
`(font-lock-variable-name-face ((t (:foreground ,base06))))
`(font-lock-keyword-face ((t (:foreground ,base0D :weight bold))))
`(font-lock-preprocessor-face ((t (:foreground ,base0F))))
`(font-lock-warning-face ((t (:foreground ,base09 :weight bold))))
;; UI elements
`(minibuffer-prompt ((t (:foreground ,base0C :weight bold))))
`(link ((t (:foreground ,base0C :underline t))))
`(link-visited ((t (:foreground ,base0E :underline t))))
`(button ((t (:foreground ,base0C :underline t))))
`(header-line ((t (:background ,base01 :foreground ,base07))))
`(vertical-border ((t (:foreground ,base02))))
;; Search and matching
`(isearch ((t (:background ,base0E :foreground ,base00 :weight bold))))
`(isearch-fail ((t (:background ,base08))))
`(lazy-highlight ((t (:background ,accent-subtle :foreground ,base07))))
`(match ((t (:background ,base0A :foreground ,base00))))
;; Line numbers
`(line-number ((t (:foreground ,base03 :background ,base01))))
`(line-number-current-line ((t (:foreground ,base07 :background ,base02 :weight bold))))
;; Company (autocompletion)
`(company-tooltip ((t (:background ,base01 :foreground ,base07))))
`(company-tooltip-selection ((t (:background ,base0C :foreground ,base00))))
`(company-tooltip-common ((t (:foreground ,base0D))))
`(company-scrollbar-bg ((t (:background ,base02))))
`(company-scrollbar-fg ((t (:background ,base04))))
;; Org-mode
`(org-level-1 ((t (:foreground ,base0D :weight bold :height 1.2))))
`(org-level-2 ((t (:foreground ,base0C :weight bold))))
`(org-level-3 ((t (:foreground ,base0F :weight bold))))
`(org-done ((t (:foreground ,base0A :weight bold))))
`(org-todo ((t (:foreground ,base08 :weight bold))))
`(org-date ((t (:foreground ,base0E))))
`(org-special-keyword ((t (:foreground ,base03))))
`(org-block ((t (:background ,base01 :foreground ,base06))))
`(org-code ((t (:foreground ,base0B))))
;; Terminal specific adjustments
`(term-color-black ((t (:foreground ,base00 :background ,base00))))
`(term-color-red ((t (:foreground ,base08 :background ,base08))))
`(term-color-green ((t (:foreground ,base0A :background ,base0A))))
`(term-color-yellow ((t (:foreground ,base09 :background ,base09))))
`(term-color-blue ((t (:foreground ,base0C :background ,base0C))))
`(term-color-magenta ((t (:foreground ,base0E :background ,base0E))))
`(term-color-cyan ((t (:foreground ,base0B :background ,base0B))))
`(term-color-white ((t (:foreground ,base07 :background ,base07))))
;; Error and warning faces
`(error ((t (:foreground ,base08 :weight bold))))
`(warning ((t (:foreground ,base09 :weight bold))))
`(success ((t (:foreground ,base0A :weight bold))))
;; Dired
`(dired-directory ((t (:foreground ,base0C :weight bold))))
`(dired-flagged ((t (:foreground ,base08))))
`(dired-symlink ((t (:foreground ,base0E))))
;; Ivy/Helm (completion frameworks)
`(ivy-current-match ((t (:background ,base0C :foreground ,base00))))
`(ivy-minibuffer-match-face-1 ((t (:foreground ,base05))))
`(ivy-minibuffer-match-face-2 ((t (:foreground ,base0D :weight bold))))
`(ivy-minibuffer-match-face-3 ((t (:foreground ,base0E))))
`(ivy-minibuffer-match-face-4 ((t (:foreground ,base0A))))
))
;; Provide the theme
(provide-theme 'MTX16)
+222
View File
@@ -0,0 +1,222 @@
;;; camm1-theme.el --- Theme
;; Copyright (C) 2026 , Lvy
;; Author: Lvy
;; Version: 0.1
;; Package-Requires: ((emacs "24.1"))
;; Created with ThemeCreator, https://github.com/mswift42/themecreator.
;; 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 <http://www.gnu.org/licenses/>.
;; This file is not part of Emacs.
;;; Commentary:
;;; camm1 theme created by Lvy in 2026
;;; Code:
(deftheme camm1)
(let ((class '((class color) (min-colors 89)))
(fg1 "#111")
(fg2 "#242424")
(fg3 "#373737")
(fg4 "#4a4a4a")
(fg6 "#0d0d0d")
(bg1 "#f9fbfb")
(bg2 "#e5e7e7")
(bg3 "#d1d3d3")
(bg4 "#bdbfbf")
(builtin "#eb4747")
(keyword "#55b0f6")
(const "#ffa200")
(comment "#b2b6b8")
(func "#40b7bf")
(str "#abce1c")
(type "#ae58e4")
(var "#f04ceb")
(selection "#005fdb")
(warning "#C82829")
(warning2 "#f48925")
(unspec (when (>= emacs-major-version 29) 'unspecified)))
(custom-theme-set-faces
'camm1
`(default ((,class (:background ,bg1 :foreground ,fg1))))
;; syntax
`(font-lock-builtin-face ((,class (:foreground ,builtin))))
`(font-lock-comment-face ((,class (:foreground ,comment))))
`(font-lock-negation-char-face ((,class (:foreground ,const))))
`(font-lock-reference-face ((,class (:foreground ,const))))
`(font-lock-constant-face ((,class (:foreground ,const))))
`(font-lock-doc-face ((,class (:foreground ,comment))))
`(font-lock-function-name-face ((,class (:foreground ,func ))))
`(font-lock-keyword-face ((,class (:bold ,class :foreground ,keyword))))
`(font-lock-string-face ((,class (:foreground ,str))))
`(font-lock-type-face ((,class (:foreground ,type ))))
`(font-lock-variable-name-face ((,class (:foreground ,var))))
`(font-lock-warning-face ((,class (:foreground ,warning :background ,bg2))))
`(term-color-black ((,class (:foreground ,fg2 :background ,unspec))))
;; `(region ((,class (:background ,fg1 :foreground ,bg1))))
`(region ((,class (:background ,selection))))
`(highlight ((,class (:foreground ,fg3 :background ,bg3))))
`(hl-line ((,class (:background ,bg2))))
`(fringe ((,class (:background ,bg2 :foreground ,fg4))))
`(cursor ((,class (:background ,fg4))))
`(isearch ((,class (:bold t :foreground ,warning :background ,bg3))))
;;mode
`(mode-line ((,class (:box (:line-width 1 :color nil) :bold t :foreground ,fg4 :background ,bg2))))
`(mode-line-inactive ((,class (:box (:line-width 1 :color nil :style pressed-button) :foreground ,var :background ,bg1 :weight normal))))
`(mode-line-buffer-id ((,class (:bold t :foreground ,func :background ,unspec))))
`(mode-line-highlight ((,class (:foreground ,keyword :box nil :weight bold))))
`(mode-line-emphasis ((,class (:foreground ,fg1))))
`(vertical-border ((,class (:foreground ,fg3))))
`(minibuffer-prompt ((,class (:bold t :foreground ,keyword))))
`(default-italic ((,class (:italic t))))
`(link ((,class (:foreground ,const :underline t))))
`(font-latex-bold-face ((,class (:foreground ,type))))
`(font-latex-italic-face ((,class (:foreground ,var :italic t))))
`(font-latex-string-face ((,class (:foreground ,str))))
`(font-latex-match-reference-keywords ((,class (:foreground ,const))))
`(font-latex-match-variable-keywords ((,class (:foreground ,var))))
`(ido-only-match ((,class (:foreground ,warning))))
`(org-sexp-date ((,class (:foreground ,fg4))))
`(ido-first-match ((,class (:foreground ,keyword :bold t))))
`(ivy-current-match ((,class (:foreground ,fg3 :inherit highlight :underline t))))
`(gnus-header-content ((,class (:foreground ,keyword))))
`(gnus-header-from ((,class (:foreground ,var))))
`(gnus-header-name ((,class (:foreground ,type))))
`(gnus-header-subject ((,class (:foreground ,func :bold t))))
`(mu4e-view-url-number-face ((,class (:foreground ,type))))
`(mu4e-cited-1-face ((,class (:foreground ,fg2))))
`(mu4e-cited-7-face ((,class (:foreground ,fg3))))
`(mu4e-header-marks-face ((,class (:foreground ,type))))
`(ffap ((,class (:foreground ,fg4))))
`(js2-private-function-call ((,class (:foreground ,const))))
`(js2-jsdoc-html-tag-delimiter ((,class (:foreground ,str))))
`(js2-jsdoc-html-tag-name ((,class (:foreground ,var))))
`(js2-external-variable ((,class (:foreground ,type ))))
`(js2-function-param ((,class (:foreground ,const))))
`(js2-jsdoc-value ((,class (:foreground ,str))))
`(js2-private-member ((,class (:foreground ,fg3))))
`(js3-warning-face ((,class (:underline ,keyword))))
`(js3-error-face ((,class (:underline ,warning))))
`(js3-external-variable-face ((,class (:foreground ,var))))
`(js3-function-param-face ((,class (:foreground ,fg2))))
`(js3-jsdoc-tag-face ((,class (:foreground ,keyword))))
`(js3-instance-member-face ((,class (:foreground ,const))))
`(warning ((,class (:foreground ,warning))))
`(ac-completion-face ((,class (:underline t :foreground ,keyword))))
`(info-quoted-name ((,class (:foreground ,builtin))))
`(info-string ((,class (:foreground ,str))))
`(icompletep-determined ((,class :foreground ,builtin)))
`(undo-tree-visualizer-current-face ((,class :foreground ,builtin)))
`(undo-tree-visualizer-default-face ((,class :foreground ,fg2)))
`(undo-tree-visualizer-unmodified-face ((,class :foreground ,var)))
`(undo-tree-visualizer-register-face ((,class :foreground ,type)))
`(slime-repl-inputed-output-face ((,class (:foreground ,type))))
`(trailing-whitespace ((,class :foreground ,unspec :background ,warning)))
`(rainbow-delimiters-depth-1-face ((,class :foreground ,fg1)))
`(rainbow-delimiters-depth-2-face ((,class :foreground ,type)))
`(rainbow-delimiters-depth-3-face ((,class :foreground ,var)))
`(rainbow-delimiters-depth-4-face ((,class :foreground ,const)))
`(rainbow-delimiters-depth-5-face ((,class :foreground ,keyword)))
`(rainbow-delimiters-depth-6-face ((,class :foreground ,fg1)))
`(rainbow-delimiters-depth-7-face ((,class :foreground ,type)))
`(rainbow-delimiters-depth-8-face ((,class :foreground ,var)))
`(magit-item-highlight ((,class :background ,bg3)))
`(magit-section-heading ((,class (:foreground ,keyword :weight bold))))
`(magit-hunk-heading ((,class (:background ,bg3))))
`(magit-section-highlight ((,class (:background ,bg2))))
`(magit-hunk-heading-highlight ((,class (:background ,bg3))))
`(magit-diff-context-highlight ((,class (:background ,bg3 :foreground ,fg3))))
`(magit-diffstat-added ((,class (:foreground ,type))))
`(magit-diffstat-removed ((,class (:foreground ,var))))
`(magit-process-ok ((,class (:foreground ,func :weight bold))))
`(magit-process-ng ((,class (:foreground ,warning :weight bold))))
`(magit-branch ((,class (:foreground ,const :weight bold))))
`(magit-log-author ((,class (:foreground ,fg3))))
`(magit-hash ((,class (:foreground ,fg2))))
`(magit-diff-file-header ((,class (:foreground ,fg2 :background ,bg3))))
`(lazy-highlight ((,class (:foreground ,fg2 :background ,bg3))))
`(term ((,class (:foreground ,fg1 :background ,bg1))))
`(term-color-black ((,class (:foreground ,bg3 :background ,bg3))))
`(term-color-blue ((,class (:foreground ,func :background ,func))))
`(term-color-red ((,class (:foreground ,keyword :background ,bg3))))
`(term-color-green ((,class (:foreground ,type :background ,bg3))))
`(term-color-yellow ((,class (:foreground ,var :background ,var))))
`(term-color-magenta ((,class (:foreground ,builtin :background ,builtin))))
`(term-color-cyan ((,class (:foreground ,str :background ,str))))
`(term-color-white ((,class (:foreground ,fg2 :background ,fg2))))
`(rainbow-delimiters-unmatched-face ((,class :foreground ,warning))))
;; Legacy
(if (< emacs-major-version 22)
(custom-theme-set-faces
'camm1
`(show-paren-match-face ((,class (:background ,warning))))) ;; obsoleted in 22.1, removed 2016
(custom-theme-set-faces
'camm1
`(show-paren-match ((,class (:foreground ,bg1 :background ,str))))
`(show-paren-mismatch ((,class (:foreground ,bg1 :background ,warning))))))
;; emacs >= 26.1
(when (>= emacs-major-version 26)
(custom-theme-set-faces
'camm1
`(line-number ((t (:inherit fringe))))
`(line-number-current-line ((t (:inherit fringe :foreground ,fg6 :weight bold))))))
;; emacs >= 27.1
(when (>= emacs-major-version 27)
(custom-theme-set-faces
'camm1
`(tab-line ((,class (:background ,bg2 :foreground ,fg4))))
`(tab-line-tab ((,class (:inherit tab-line))))
`(tab-line-tab-inactive ((,class (:background ,bg2 :foreground ,fg4))))
`(tab-line-tab-current ((,class (:background ,bg1 :foreground ,fg1))))
`(tab-line-highlight ((,class (:background ,bg1 :foreground ,fg2))))))
(when (>= emacs-major-version 28)
(custom-theme-set-faces
'camm1
`(line-number ((t (:inherit fringe))))
`(line-number-current-line ((t (:inherit fringe :foreground ,fg6 :weight bold))))))
;; emacs >= 27.1
(when (>= emacs-major-version 27)
(custom-theme-set-faces
'camm1
`(tab-line ((,class (:background ,bg2 :foreground ,fg4))))
`(tab-line-tab ((,class (:inherit tab-line))))
`(tab-line-tab-inactive ((,class (:background ,bg2 :foreground ,fg4))))
`(tab-line-tab-current ((,class (:background ,bg1 :foreground ,fg1))))
`(tab-line-highlight ((,class (:background ,bg1 :foreground ,fg2))))))
(when (>= emacs-major-version 28)
(custom-theme-set-faces
'camm1
`(tab-line-tab-modified ((,class (:foreground ,warning2 :weight bold))))))
(when (boundp 'font-lock-regexp-face)
(custom-theme-set-faces
'camm1
`(font-lock-regexp-face ((,class (:inherit font-lock-string-face :underline t)))))))
;;;###autoload
(when load-file-name
(add-to-list 'custom-theme-load-path
(file-name-as-directory (file-name-directory load-file-name))))
(provide-theme 'camm1)
;; Local Variables:
;; no-byte-compile: t
;; End:
;;; camm1-theme.el ends here
+118
View File
@@ -0,0 +1,118 @@
;;; camm2-theme.el --- A custom light theme based on provided colors -*- lexical-binding: t; -*-
(deftheme camm2
"Custom light theme created from user-supplied colors.")
;; Helper to reference colors by name (makes the theme cleaner)
(defun my-color (name)
(cl-case name
(fg1 "#111")
(fg2 "#242424")
(fg3 "#373737")
(fg4 "#4a4a4a")
(fg6 "#0d0d0d")
(bg1 "#f9fbfb")
(bg2 "#e5e7e7")
(bg3 "#d1d3d3")
(bg4 "#bdbfbf")
(builtin "#40b7bf")
(keyword "#55b0f6")
(const "#ffa200")
(comment "#b2b6b8")
(func "#eb4747")
(str "#a8dc19")
(type "#ae58e4")
(var "#f04ceb")
(selection "#005fdb")
(warning "#C82829")
(warning2 "#f48925")))
(custom-theme-set-faces
'camm2
;; Basic faces
`(default ((t (:background ,(my-color 'bg1) :foreground ,(my-color 'fg1)))))
`(cursor ((t (:background ,(my-color 'fg4)))))
`(fringe ((t (:background ,(my-color 'bg2) :foreground ,(my-color 'fg3)))))
`(vertical-border ((t (:foreground ,(my-color 'bg3)))))
`(linum ((t (:background ,(my-color 'bg1) :foreground ,(my-color 'fg3))))) ; legacy
`(line-number ((t (:background ,(my-color 'bg1) :foreground ,(my-color 'fg3)))))
`(line-number-current-line ((t (:background ,(my-color 'bg1) :foreground ,(my-color 'fg1) :weight bold))))
;; Font lock faces (syntax highlighting)
`(font-lock-builtin-face ((t (:foreground ,(my-color 'builtin)))))
`(font-lock-keyword-face ((t (:foreground ,(my-color 'keyword)))))
`(font-lock-constant-face ((t (:foreground ,(my-color 'const)))))
`(font-lock-comment-face ((t (:foreground ,(my-color 'comment) :slant italic))))
`(font-lock-comment-delimiter-face ((t (:foreground ,(my-color 'comment) :slant italic))))
`(font-lock-function-name-face ((t (:foreground ,(my-color 'func)))))
`(font-lock-string-face ((t (:foreground ,(my-color 'str)))))
`(font-lock-type-face ((t (:foreground ,(my-color 'type)))))
`(font-lock-variable-name-face ((t (:foreground ,(my-color 'var)))))
`(font-lock-doc-face ((t (:foreground ,(my-color 'comment) :slant italic))))
`(font-lock-preprocessor-face ((t (:foreground ,(my-color 'builtin)))))
`(font-lock-warning-face ((t (:foreground ,(my-color 'warning) :weight bold))))
;; Region and selection
`(region ((t (:background ,(my-color 'selection) :foreground ,(my-color 'bg1)))))
`(secondary-selection ((t (:background ,(my-color 'bg3)))))
;; Mode line
`(mode-line ((t (:background ,(my-color 'bg2) :foreground ,(my-color 'fg1) :box (:line-width 1 :color ,(my-color 'bg4))))))
`(mode-line-inactive ((t (:background ,(my-color 'bg1) :foreground ,(my-color 'fg3) :box (:line-width 1 :color ,(my-color 'bg3))))))
;; Minibuffer and prompts
`(minibuffer-prompt ((t (:foreground ,(my-color 'keyword) :weight bold))))
;; Highlighting
`(highlight ((t (:background ,(my-color 'bg3)))))
`(hl-line ((t (:background ,(my-color 'bg2)))))
`(isearch ((t (:background ,(my-color 'warning2) :foreground ,(my-color 'bg1)))))
`(lazy-highlight ((t (:background ,(my-color 'bg4)))))
;; Matching parentheses
`(show-paren-match ((t (:background ,(my-color 'bg3) :foreground ,(my-color 'fg1) :weight bold))))
`(show-paren-mismatch ((t (:background ,(my-color 'warning) :foreground ,(my-color 'bg1)))))
;; Error / warning / success
`(error ((t (:foreground ,(my-color 'warning) :weight bold))))
`(warning ((t (:foreground ,(my-color 'warning2) :weight bold))))
`(success ((t (:foreground ,(my-color 'str)))))
;; Button and link
`(link ((t (:foreground ,(my-color 'keyword) :underline t))))
`(link-visited ((t (:foreground ,(my-color 'type) :underline t))))
;; Tooltip
`(tooltip ((t (:background ,(my-color 'bg2) :foreground ,(my-color 'fg1) :box (:line-width 1 :color ,(my-color 'bg4))))))
;; Dired
`(dired-directory ((t (:foreground ,(my-color 'keyword) :weight bold))))
`(dired-symlink ((t (:foreground ,(my-color 'func)))))
`(dired-ignored ((t (:foreground ,(my-color 'comment)))))
;; Custom faces used by Doom modules (modeline, dashboard, etc.)
`(doom-modeline-bar ((t (:background ,(my-color 'keyword)))))
`(doom-modeline-buffer-file ((t (:foreground ,(my-color 'func)))))
`(doom-modeline-buffer-modified ((t (:foreground ,(my-color 'warning2)))))
`(doom-modeline-project-dir ((t (:foreground ,(my-color 'type)))))
;; Company / autocomplete
`(company-tooltip ((t (:background ,(my-color 'bg2) :foreground ,(my-color 'fg1)))))
`(company-tooltip-selection ((t (:background ,(my-color 'selection) :foreground ,(my-color 'bg1)))))
`(company-tooltip-common ((t (:foreground ,(my-color 'func)))))
`(company-scrollbar-fg ((t (:background ,(my-color 'fg4)))))
`(company-scrollbar-bg ((t (:background ,(my-color 'bg3)))))
;; Outline / Org headings (simple, can be extended)
`(outline-1 ((t (:foreground ,(my-color 'type) :weight bold))))
`(outline-2 ((t (:foreground ,(my-color 'func) :weight bold))))
`(outline-3 ((t (:foreground ,(my-color 'keyword) :weight bold))))
`(org-level-1 ((t (:inherit outline-1 :height 1.1))))
`(org-level-2 ((t (:inherit outline-2 :height 1.05))))
`(org-level-3 ((t (:inherit outline-3))))
)
;; Provide the theme
(provide-theme 'camm2)
;;; camm2-theme.el ends here
+223
View File
@@ -0,0 +1,223 @@
;;; camm3-theme.el --- Custom theme based on user palette -*- lexical-binding: t; -*-
(deftheme camm3 "Custom theme with neutrals, syntax highlighting, and UI feedback.")
(let ((class '((class color) (min-colors 89)))
;; Neutrals & surfaces
(bg-base "#f9fbfb")
(bg-panel "#f2f4f4")
(bg-surface-2 "#e5e7e7")
(bg-surface-3 "#d1d3d3")
(border "#bdbfbf")
(border-focus "#005fdb")
;; Text scale
(text-primary "#0d0d0d")
(text-secondary "#111111")
(text-tertiary "#242424")
(text-muted "#373737")
(text-faint "#4a4a4a")
(text-faint-2 "#5d5d5d")
(text-inverse "#ffffff")
;; Syntax highlighting
(code-comment "#b2b6b8")
(code-builtin "#40b7bf")
(code-keyword "#55b0f6")
(code-constant "#ffa200")
(code-function "#c42020")
(code-string "#a8dc19")
(code-type "#8a35b8")
(code-variable "#f04ceb")
(code-number "#f48925")
(code-operator "#4a4a4a")
;; UI & feedback
(ui-selection "#005fdb")
(ui-selection-bg "#e6eeff")
(ui-cursor "#005fdb")
(ui-active-line "#f0f4ff")
(status-error "#c82829")
(status-warning "#f48925")
(status-success "#22a653")
(status-info "#3b82f6"))
(custom-theme-set-faces
'camm3
;; Basic faces
`(default ((,class (:background ,bg-base :foreground ,text-primary))))
`(cursor ((,class (:background ,ui-cursor))))
`(region ((,class (:background ,ui-selection-bg :foreground ,ui-selection))))
`(fringe ((,class (:background ,bg-panel :foreground ,text-faint))))
`(highlight ((,class (:background ,ui-active-line))))
`(hl-line ((,class (:background ,ui-active-line))))
`(vertical-border ((,class (:foreground ,border))))
`(window-divider ((,class (:foreground ,border))))
`(window-divider-first-pixel ((,class (:foreground ,border))))
`(window-divider-last-pixel ((,class (:foreground ,border))))
`(minibuffer-prompt ((,class (:foreground ,status-info :weight bold))))
`(link ((,class (:foreground ,status-info :underline t))))
`(link-visited ((,class (:foreground ,code-type :underline t))))
`(shadow ((,class (:foreground ,text-faint))))
`(success ((,class (:foreground ,status-success :weight bold))))
`(warning ((,class (:foreground ,status-warning :weight bold))))
`(error ((,class (:foreground ,status-error :weight bold))))
;; Mode line
`(mode-line ((,class (:background ,bg-surface-2 :foreground ,text-primary
:box (:line-width 1 :color ,border)))))
`(mode-line-inactive ((,class (:background ,bg-panel :foreground ,text-faint
:box (:line-width 1 :color ,border)))))
`(mode-line-buffer-id ((,class (:weight bold :foreground ,ui-selection))))
;; Line numbers
`(line-number ((,class (:background ,bg-base :foreground ,text-faint-2))))
`(line-number-current-line ((,class (:background ,ui-active-line :foreground ,text-primary :weight bold))))
;; Font lock (syntax highlighting)
`(font-lock-builtin-face ((,class (:foreground ,code-builtin))))
`(font-lock-comment-face ((,class (:foreground ,code-comment :slant italic))))
`(font-lock-comment-delimiter-face ((,class (:foreground ,code-comment :slant italic))))
`(font-lock-constant-face ((,class (:foreground ,code-constant))))
`(font-lock-doc-face ((,class (:foreground ,code-comment :slant italic))))
`(font-lock-function-name-face ((,class (:foreground ,code-function))))
`(font-lock-keyword-face ((,class (:foreground ,code-keyword))))
`(font-lock-number-face ((,class (:foreground ,code-number))))
`(font-lock-operator-face ((,class (:foreground ,code-operator))))
`(font-lock-string-face ((,class (:foreground ,code-string))))
`(font-lock-type-face ((,class (:foreground ,code-type))))
`(font-lock-variable-name-face ((,class (:foreground ,code-variable))))
`(font-lock-warning-face ((,class (:foreground ,status-warning :weight bold))))
;; Search & match
`(isearch ((,class (:background ,ui-selection :foreground ,text-inverse))))
`(isearch-fail ((,class (:background ,status-error :foreground ,text-inverse))))
`(lazy-highlight ((,class (:background ,ui-selection-bg :foreground ,ui-selection :underline t))))
`(match ((,class (:background ,ui-selection-bg :foreground ,ui-selection))))
;; Secondary selection (e.g., multiple-cursors)
`(secondary-selection ((,class (:background ,bg-surface-3))))
;; Trailing whitespace
`(trailing-whitespace ((,class (:background ,status-error :foreground ,text-inverse))))
;; Diff (vc-gutter, magit)
`(diff-added ((,class (:foreground ,status-success))))
`(diff-removed ((,class (:foreground ,status-error))))
`(diff-refine-added ((,class (:background ,status-success :foreground ,text-inverse))))
`(diff-refine-removed ((,class (:background ,status-error :foreground ,text-inverse))))
`(diff-header ((,class (:background ,bg-panel :foreground ,text-tertiary))))
`(diff-file-header ((,class (:background ,bg-surface-2 :foreground ,text-primary :weight bold))))
;; Org mode
`(org-level-1 ((,class (:foreground ,ui-selection :weight bold :height 1.2))))
`(org-level-2 ((,class (:foreground ,code-function :weight bold :height 1.1))))
`(org-level-3 ((,class (:foreground ,code-type :weight bold))))
`(org-level-4 ((,class (:foreground ,code-variable :weight bold))))
`(org-level-5 ((,class (:foreground ,code-builtin :weight bold))))
`(org-level-6 ((,class (:foreground ,code-constant :weight bold))))
`(org-level-7 ((,class (:foreground ,code-keyword :weight bold))))
`(org-level-8 ((,class (:foreground ,code-string :weight bold))))
`(org-todo ((,class (:foreground ,status-error :weight bold))))
`(org-done ((,class (:foreground ,status-success :weight bold))))
`(org-date ((,class (:foreground ,code-number :underline t))))
`(org-link ((,class (:foreground ,status-info :underline t))))
`(org-block ((,class (:background ,bg-surface-2 :extend t))))
`(org-block-begin-line ((,class (:background ,bg-panel :foreground ,text-faint))))
`(org-block-end-line ((,class (:background ,bg-panel :foreground ,text-faint))))
;; Doom modeline specific (if using doom-modeline)
`(doom-modeline-bar ((,class (:background ,ui-selection))))
`(doom-modeline-buffer-modified ((,class (:foreground ,status-warning))))
`(doom-modeline-buffer-major-mode ((,class (:foreground ,code-type :weight bold))))
`(doom-modeline-project-root-dir ((,class (:foreground ,code-builtin))))
`(doom-modeline-evil-normal-state ((,class (:background ,ui-selection :foreground ,text-inverse))))
`(doom-modeline-evil-insert-state ((,class (:background ,status-success :foreground ,text-inverse))))
`(doom-modeline-evil-visual-state ((,class (:background ,code-variable :foreground ,text-inverse))))
;; Tree-sitter (if you use tree-sitter modes)
`(tree-sitter-hl-face:function.call ((,class (:foreground ,code-function))))
`(tree-sitter-hl-face:function.builtin ((,class (:foreground ,code-builtin))))
`(tree-sitter-hl-face:function ((,class (:foreground ,code-function))))
`(tree-sitter-hl-face:type ((,class (:foreground ,code-type))))
`(tree-sitter-hl-face:constant ((,class (:foreground ,code-constant))))
`(tree-sitter-hl-face:keyword ((,class (:foreground ,code-keyword))))
`(tree-sitter-hl-face:string ((,class (:foreground ,code-string))))
`(tree-sitter-hl-face:comment ((,class (:foreground ,code-comment :slant italic))))
`(tree-sitter-hl-face:variable ((,class (:foreground ,code-variable))))
`(tree-sitter-hl-face:number ((,class (:foreground ,code-number))))
`(tree-sitter-hl-face:operator ((,class (:foreground ,code-operator))))
`(tree-sitter-hl-face:property ((,class (:foreground ,text-secondary))))
;; Company / Corfu completion
`(company-tooltip ((,class (:background ,bg-panel :foreground ,text-primary))))
`(company-tooltip-selection ((,class (:background ,ui-selection-bg :foreground ,ui-selection))))
`(company-tooltip-common ((,class (:foreground ,code-keyword))))
`(company-tooltip-annotation ((,class (:foreground ,text-faint))))
`(company-scrollbar-bg ((,class (:background ,bg-surface-3))))
`(company-scrollbar-fg ((,class (:background ,border))))
`(corfu-current ((,class (:background ,ui-selection-bg :foreground ,ui-selection))))
;; LSP / Flycheck
`(flycheck-error ((,class (:underline (:style wave :color ,status-error)))))
`(flycheck-warning ((,class (:underline (:style wave :color ,status-warning)))))
`(flycheck-info ((,class (:underline (:style wave :color ,status-info)))))
`(lsp-face-highlight-textual ((,class (:background ,ui-active-line :underline t))))
`(lsp-face-highlight-read ((,class (:background ,ui-selection-bg :underline t))))
`(lsp-face-highlight-write ((,class (:background ,ui-selection-bg :underline t))))
;; Whitespace mode
`(whitespace-space ((,class (:foreground ,bg-surface-3))))
`(whitespace-tab ((,class (:foreground ,bg-surface-3))))
`(whitespace-newline ((,class (:foreground ,bg-surface-3))))
`(whitespace-indentation ((,class (:foreground ,bg-surface-3))))
`(whitespace-line ((,class (:background ,ui-active-line :foreground ,text-primary))))
`(whitespace-empty ((,class (:background ,status-error :foreground ,text-inverse))))
;; Highlight indentation guides (indent-guides)
`(highlight-indent-guides-character-face ((,class (:foreground ,border))))
`(highlight-indent-guides-stack-character-face ((,class (:foreground ,bg-surface-3))))
`(highlight-indent-guides-odd-face ((,class (:background ,bg-panel))))
`(highlight-indent-guides-even-face ((,class (:background ,bg-base))))
;; IMenu / Outline
`(imenu-list-entry-face-0 ((,class (:foreground ,code-keyword))))
`(imenu-list-entry-face-1 ((,class (:foreground ,code-function))))
`(imenu-list-entry-face-2 ((,class (:foreground ,code-type))))
`(imenu-list-entry-face-3 ((,class (:foreground ,code-constant))))
;; Avy (jump hints)
`(avy-lead-face ((,class (:background ,ui-selection :foreground ,text-inverse :weight bold))))
`(avy-lead-face-0 ((,class (:background ,status-success :foreground ,text-inverse :weight bold))))
`(avy-lead-face-1 ((,class (:background ,status-warning :foreground ,text-inverse :weight bold))))
`(avy-lead-face-2 ((,class (:background ,code-variable :foreground ,text-inverse :weight bold))))
`(avy-background-face ((,class (:background ,bg-panel :foreground ,text-faint))))
;; Denote (notes)
`(denote-faces-link ((,class (:foreground ,status-info :underline t))))
`(denote-faces-date ((,class (:foreground ,code-number))))
`(denote-faces-keyword ((,class (:foreground ,code-keyword :weight bold))))
`(denote-faces-title ((,class (:foreground ,text-primary :weight bold :height 1.2))))
;; Extra: markdown, json, etc.
`(markdown-header-face-1 ((,class (:inherit org-level-1))))
`(markdown-header-face-2 ((,class (:inherit org-level-2))))
`(markdown-header-face-3 ((,class (:inherit org-level-3))))
`(markdown-header-face-4 ((,class (:inherit org-level-4))))
`(markdown-header-face-5 ((,class (:inherit org-level-5))))
`(markdown-header-face-6 ((,class (:inherit org-level-6))))
`(markdown-link-face ((,class (:inherit link))))
`(markdown-url-face ((,class (:foreground ,code-number))))
`(json-key-face ((,class (:foreground ,code-keyword))))
`(json-number-face ((,class (:foreground ,code-number))))
`(json-string-face ((,class (:foreground ,code-string))))
`(json-boolean-face ((,class (:foreground ,code-constant))))
`(json-null-face ((,class (:foreground ,code-constant))))
;; Custom faces used in user config (e.g., my-set-buffer-font buffer-face)
`(buffer-face ((,class (:family "Noto Sans" :height 140))))))
;; Provide the theme
(provide-theme 'camm3)
;;; camm3-theme.el ends here
+152
View File
@@ -0,0 +1,152 @@
;;; camm4-theme.el --- A light theme based on the camm4 palette -*- lexical-binding: t; no-byte-compile: t; -*-
(deftheme camm4
"Light theme with a calm, readable palette.
Core colours: blues (005FDB, 3B82F6, 007A8A, 40B7BF) and magenta (8A35B8, D33682).")
(let ((class '((class color) (min-colors 89)))
;; Basic palette
(camm4-bg "#fefcff")
(camm4-fg "#101010")
(camm4-cursor "#f04ceb")
;; ANSI colours (index 01-16)
(camm4-black "#E6EEFF") ; 01 very light blueish grey
(camm4-red "#C82829") ; 02
(camm4-green "#419722") ; 03
(camm4-yellow "#F48925") ; 04
(camm4-blue "#005FDB") ; 05 core blue
(camm4-magenta "#EF89DF") ; 06 core purple
(camm4-cyan "#007A8A") ; 07 core teal/blue
(camm4-white "#4D4D4C") ; 08 dark grey
(camm4-brblack "#e2ecff") ; 09
(camm4-brred "#E53935") ; 10
(camm4-brgreen "#22A653") ; 11
(camm4-bryellow "#FFA200") ; 12
(camm4-brblue "#3B82F6") ; 13 core bright blue
(camm4-brmagenta "#D33682") ; 14 core bright magenta
(camm4-brcyan "#40B7BF") ; 15 core bright teal
(camm4-brwhite "#1D1F21")) ; 16 near black
(custom-theme-set-faces
'camm4
;; Basic faces
`(default ((,class (:background ,camm4-bg :foreground ,camm4-fg))))
`(cursor ((,class (:background ,camm4-cursor))))
`(fringe ((,class (:background ,camm4-bg :foreground ,camm4-white))))
`(region ((,class (:background ,camm4-brblack :foreground ,camm4-fg))))
`(highlight ((,class (:background ,camm4-brblack))))
`(hl-line ((,class (:background ,camm4-brblack))))
`(success ((,class (:foreground ,camm4-brgreen))))
`(warning ((,class (:foreground ,camm4-bryellow))))
`(error ((,class (:foreground ,camm4-brred :weight bold))))
`(link ((,class (:foreground ,camm4-blue :underline t))))
`(link-visited ((,class (:foreground ,camm4-magenta :underline t))))
;; Font lock (syntax highlighting)
`(font-lock-builtin-face ((,class (:foreground ,camm4-cyan))))
`(font-lock-comment-face ((,class (:foreground ,camm4-white :slant italic))))
`(font-lock-comment-delimiter-face ((,class (:inherit font-lock-comment-face))))
`(font-lock-constant-face ((,class (:foreground ,camm4-brblue))))
`(font-lock-doc-face ((,class (:inherit font-lock-comment-face :foreground ,camm4-green))))
`(font-lock-function-name-face ((,class (:foreground ,camm4-brmagenta :weight bold))))
`(font-lock-keyword-face ((,class (:foreground ,camm4-blue :weight bold))))
`(font-lock-negation-char-face ((,class (:foreground ,camm4-red))))
`(font-lock-preprocessor-face ((,class (:foreground ,camm4-cyan))))
`(font-lock-regexp-grouping-backslash ((,class (:foreground ,camm4-yellow))))
`(font-lock-regexp-grouping-construct ((,class (:foreground ,camm4-red))))
`(font-lock-string-face ((,class (:foreground ,camm4-red :weight semi-light))))
`(font-lock-type-face ((,class (:foreground ,camm4-brcyan :weight normal))))
`(font-lock-variable-name-face ((,class (:foreground ,camm4-magenta))))
`(font-lock-warning-face ((,class (:foreground ,camm4-brred :weight bold))))
;; Mode line
`(mode-line ((,class (:background ,camm4-black :foreground ,camm4-fg :box (:line-width 1 :color ,camm4-white)))))
`(mode-line-inactive ((,class (:background ,camm4-brblack :foreground ,camm4-white :box (:line-width 1 :color ,camm4-brblack)))))
`(mode-line-buffer-id ((,class (:weight bold :foreground ,camm4-brblue))))
`(mode-line-emphasis ((,class (:weight bold))))
`(mode-line-highlight ((,class (:box (:line-width 1 :color ,camm4-brblue)))))
;; Minibuffer, completion, etc.
`(minibuffer-prompt ((,class (:foreground ,camm4-blue :weight bold))))
`(completions-common-part ((,class (:foreground ,camm4-fg))))
`(completions-first-difference ((,class (:foreground ,camm4-brred :weight bold))))
;; Search
`(isearch ((,class (:background ,camm4-bryellow :foreground ,camm4-fg))))
`(isearch-fail ((,class (:background ,camm4-red :foreground ,camm4-bg))))
`(lazy-highlight ((,class (:background ,camm4-yellow :foreground ,camm4-fg :underline t))))
;; Line numbers
`(line-number ((,class (:foreground ,camm4-white :background ,camm4-bg))))
`(line-number-current-line ((,class (:foreground ,camm4-blue :weight bold :background ,camm4-brblack))))
;; Dired
`(dired-header ((,class (:foreground ,camm4-blue :weight bold))))
`(dired-directory ((,class (:foreground ,camm4-brblue :weight bold))))
`(dired-symlink ((,class (:foreground ,camm4-cyan :slant italic))))
;; Org mode
`(org-level-1 ((,class (:foreground ,camm4-brblue :weight bold :height 1.2))))
`(org-level-2 ((,class (:foreground ,camm4-blue :weight bold :height 1.1))))
`(org-level-3 ((,class (:foreground ,camm4-cyan :weight bold))))
`(org-level-4 ((,class (:foreground ,camm4-magenta :weight bold))))
`(org-level-5 ((,class (:foreground ,camm4-brcyan :weight bold))))
`(org-level-6 ((,class (:foreground ,camm4-brmagenta :weight bold))))
`(org-todo ((,class (:foreground ,camm4-brred :weight bold :box t))))
`(org-done ((,class (:foreground ,camm4-brgreen :weight bold :box t))))
`(org-date ((,class (:foreground ,camm4-brblue :underline t))))
`(org-link ((,class (:foreground ,camm4-blue :underline t))))
`(org-tag ((,class (:foreground ,camm4-white :weight normal))))
;; Markdown
`(markdown-header-face-1 ((,class (:inherit org-level-1))))
`(markdown-header-face-2 ((,class (:inherit org-level-2))))
`(markdown-header-face-3 ((,class (:inherit org-level-3))))
`(markdown-link-face ((,class (:inherit link))))
`(markdown-url-face ((,class (:inherit link))))
;; Magit
`(magit-branch-local ((,class (:foreground ,camm4-brblue :weight bold))))
`(magit-branch-remote ((,class (:foreground ,camm4-cyan :weight bold))))
`(magit-tag ((,class (:foreground ,camm4-bryellow :weight bold))))
`(magit-hash ((,class (:foreground ,camm4-white))))
`(magit-diff-added ((,class (:foreground ,camm4-brgreen))))
`(magit-diff-removed ((,class (:foreground ,camm4-brred))))
`(magit-diff-context ((,class (:foreground ,camm4-white))))
`(magit-section-heading ((,class (:foreground ,camm4-blue :weight bold :background ,camm4-brblack))))
`(magit-section-highlight ((,class (:background ,camm4-brblack))))
;; Treesitter (if you use it)
`(tree-sitter-hl-face:function.call ((,class (:foreground ,camm4-brmagenta))))
`(tree-sitter-hl-face:function.builtin ((,class (:foreground ,camm4-cyan))))
`(tree-sitter-hl-face:variable.builtin ((,class (:foreground ,camm4-magenta))))
`(tree-sitter-hl-face:type ((,class (:foreground ,camm4-brcyan))))
`(tree-sitter-hl-face:constant.builtin ((,class (:foreground ,camm4-brblue))))
;; LSP / Flycheck
`(flycheck-error ((,class (:underline (:style wave :color ,camm4-brred)))))
`(flycheck-warning ((,class (:underline (:style wave :color ,camm4-bryellow)))))
`(flycheck-info ((,class (:underline (:style wave :color ,camm4-brblue)))))
`(lsp-face-highlight-textual ((,class (:background ,camm4-brblack :underline t))))
;; Extra
`(show-paren-match ((,class (:background ,camm4-brcyan :foreground ,camm4-bg :weight bold))))
`(show-paren-mismatch ((,class (:background ,camm4-brred :foreground ,camm4-bg :weight bold))))
`(match ((,class (:background ,camm4-yellow :foreground ,camm4-fg))))
`(shadow ((,class (:foreground ,camm4-white))))
`(secondary-selection ((,class (:background ,camm4-brblack))))
`(trailing-whitespace ((,class (:background ,camm4-brred))))
`(vertical-border ((,class (:foreground ,camm4-white))))
`(widget-button ((,class (:foreground ,camm4-blue :weight bold))))
`(widget-field ((,class (:background ,camm4-brblack))))
))
;;;###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 'camm4)
;;; camm4-theme.el ends here
+152
View File
@@ -0,0 +1,152 @@
;;; camm4-theme.el --- A light theme based on the camm4 palette -*- lexical-binding: t; no-byte-compile: t; -*-
(deftheme camm4
"Light theme with a calm, readable palette.
Core colours: blues (005FDB, 3B82F6, 007A8A, 40B7BF) and magenta (8A35B8, D33682).")
(let ((class '((class color) (min-colors 89)))
;; Basic palette
(camm4-bg "#fefcff")
(camm4-fg "#101010")
(camm4-cursor "#f04ceb")
;; ANSI colours (index 01-16)
(camm4-black "#E6EEFF") ; 01 very light blueish grey
(camm4-red "#C82829") ; 02
(camm4-green "#419722") ; 03
(camm4-yellow "#F48925") ; 04
(camm4-blue "#005FDB") ; 05 core blue
(camm4-magenta "#EF89DF") ; 06 core purple
(camm4-cyan "#007A8A") ; 07 core teal/blue
(camm4-white "#4D4D4C") ; 08 dark grey
(camm4-brblack "#e2ecff") ; 09
(camm4-brred "#E53935") ; 10
(camm4-brgreen "#22A653") ; 11
(camm4-bryellow "#FFA200") ; 12
(camm4-brblue "#3B82F6") ; 13 core bright blue
(camm4-brmagenta "#D33682") ; 14 core bright magenta
(camm4-brcyan "#40B7BF") ; 15 core bright teal
(camm4-brwhite "#1D1F21")) ; 16 near black
(custom-theme-set-faces
'camm4
;; Basic faces
`(default ((,class (:background ,camm4-bg :foreground ,camm4-fg))))
`(cursor ((,class (:background ,camm4-cursor))))
`(fringe ((,class (:background ,camm4-bg :foreground ,camm4-white))))
`(region ((,class (:background ,camm4-brblack :foreground ,camm4-fg))))
`(highlight ((,class (:background ,camm4-brblack))))
`(hl-line ((,class (:background ,camm4-brblack))))
`(success ((,class (:foreground ,camm4-brgreen))))
`(warning ((,class (:foreground ,camm4-bryellow))))
`(error ((,class (:foreground ,camm4-brred :weight bold))))
`(link ((,class (:foreground ,camm4-blue :underline t))))
`(link-visited ((,class (:foreground ,camm4-magenta :underline t))))
;; Font lock (syntax highlighting)
`(font-lock-builtin-face ((,class (:foreground ,camm4-cyan))))
`(font-lock-comment-face ((,class (:foreground ,camm4-white :slant italic))))
`(font-lock-comment-delimiter-face ((,class (:inherit font-lock-comment-face))))
`(font-lock-constant-face ((,class (:foreground ,camm4-brblue))))
`(font-lock-doc-face ((,class (:inherit font-lock-comment-face :foreground ,camm4-green))))
`(font-lock-function-name-face ((,class (:foreground ,camm4-brmagenta :weight bold))))
`(font-lock-keyword-face ((,class (:foreground ,camm4-blue :weight bold))))
`(font-lock-negation-char-face ((,class (:foreground ,camm4-red))))
`(font-lock-preprocessor-face ((,class (:foreground ,camm4-cyan))))
`(font-lock-regexp-grouping-backslash ((,class (:foreground ,camm4-yellow))))
`(font-lock-regexp-grouping-construct ((,class (:foreground ,camm4-red))))
`(font-lock-string-face ((,class (:foreground ,camm4-red :weight semi-light))))
`(font-lock-type-face ((,class (:foreground ,camm4-brcyan :weight normal))))
`(font-lock-variable-name-face ((,class (:foreground ,camm4-magenta))))
`(font-lock-warning-face ((,class (:foreground ,camm4-brred :weight bold))))
;; Mode line
`(mode-line ((,class (:background ,camm4-black :foreground ,camm4-fg :box (:line-width 1 :color ,camm4-white)))))
`(mode-line-inactive ((,class (:background ,camm4-brblack :foreground ,camm4-white :box (:line-width 1 :color ,camm4-brblack)))))
`(mode-line-buffer-id ((,class (:weight bold :foreground ,camm4-brblue))))
`(mode-line-emphasis ((,class (:weight bold))))
`(mode-line-highlight ((,class (:box (:line-width 1 :color ,camm4-brblue)))))
;; Minibuffer, completion, etc.
`(minibuffer-prompt ((,class (:foreground ,camm4-blue :weight bold))))
`(completions-common-part ((,class (:foreground ,camm4-fg))))
`(completions-first-difference ((,class (:foreground ,camm4-brred :weight bold))))
;; Search
`(isearch ((,class (:background ,camm4-bryellow :foreground ,camm4-fg))))
`(isearch-fail ((,class (:background ,camm4-red :foreground ,camm4-bg))))
`(lazy-highlight ((,class (:background ,camm4-yellow :foreground ,camm4-fg :underline t))))
;; Line numbers
`(line-number ((,class (:foreground ,camm4-white :background ,camm4-bg))))
`(line-number-current-line ((,class (:foreground ,camm4-blue :weight bold :background ,camm4-brblack))))
;; Dired
`(dired-header ((,class (:foreground ,camm4-blue :weight bold))))
`(dired-directory ((,class (:foreground ,camm4-brblue :weight bold))))
`(dired-symlink ((,class (:foreground ,camm4-cyan :slant italic))))
;; Org mode
`(org-level-1 ((,class (:foreground ,camm4-brblue :weight bold :height 1.2))))
`(org-level-2 ((,class (:foreground ,camm4-blue :weight bold :height 1.1))))
`(org-level-3 ((,class (:foreground ,camm4-cyan :weight bold))))
`(org-level-4 ((,class (:foreground ,camm4-magenta :weight bold))))
`(org-level-5 ((,class (:foreground ,camm4-brcyan :weight bold))))
`(org-level-6 ((,class (:foreground ,camm4-brmagenta :weight bold))))
`(org-todo ((,class (:foreground ,camm4-brred :weight bold :box t))))
`(org-done ((,class (:foreground ,camm4-brgreen :weight bold :box t))))
`(org-date ((,class (:foreground ,camm4-brblue :underline t))))
`(org-link ((,class (:foreground ,camm4-blue :underline t))))
`(org-tag ((,class (:foreground ,camm4-white :weight normal))))
;; Markdown
`(markdown-header-face-1 ((,class (:inherit org-level-1))))
`(markdown-header-face-2 ((,class (:inherit org-level-2))))
`(markdown-header-face-3 ((,class (:inherit org-level-3))))
`(markdown-link-face ((,class (:inherit link))))
`(markdown-url-face ((,class (:inherit link))))
;; Magit
`(magit-branch-local ((,class (:foreground ,camm4-brblue :weight bold))))
`(magit-branch-remote ((,class (:foreground ,camm4-cyan :weight bold))))
`(magit-tag ((,class (:foreground ,camm4-bryellow :weight bold))))
`(magit-hash ((,class (:foreground ,camm4-white))))
`(magit-diff-added ((,class (:foreground ,camm4-brgreen))))
`(magit-diff-removed ((,class (:foreground ,camm4-brred))))
`(magit-diff-context ((,class (:foreground ,camm4-white))))
`(magit-section-heading ((,class (:foreground ,camm4-blue :weight bold :background ,camm4-brblack))))
`(magit-section-highlight ((,class (:background ,camm4-brblack))))
;; Treesitter (if you use it)
`(tree-sitter-hl-face:function.call ((,class (:foreground ,camm4-brmagenta))))
`(tree-sitter-hl-face:function.builtin ((,class (:foreground ,camm4-cyan))))
`(tree-sitter-hl-face:variable.builtin ((,class (:foreground ,camm4-magenta))))
`(tree-sitter-hl-face:type ((,class (:foreground ,camm4-brcyan))))
`(tree-sitter-hl-face:constant.builtin ((,class (:foreground ,camm4-brblue))))
;; LSP / Flycheck
`(flycheck-error ((,class (:underline (:style wave :color ,camm4-brred)))))
`(flycheck-warning ((,class (:underline (:style wave :color ,camm4-bryellow)))))
`(flycheck-info ((,class (:underline (:style wave :color ,camm4-brblue)))))
`(lsp-face-highlight-textual ((,class (:background ,camm4-brblack :underline t))))
;; Extra
`(show-paren-match ((,class (:background ,camm4-brcyan :foreground ,camm4-bg :weight bold))))
`(show-paren-mismatch ((,class (:background ,camm4-brred :foreground ,camm4-bg :weight bold))))
`(match ((,class (:background ,camm4-yellow :foreground ,camm4-fg))))
`(shadow ((,class (:foreground ,camm4-white))))
`(secondary-selection ((,class (:background ,camm4-brblack))))
`(trailing-whitespace ((,class (:background ,camm4-brred))))
`(vertical-border ((,class (:foreground ,camm4-white))))
`(widget-button ((,class (:foreground ,camm4-blue :weight bold))))
`(widget-field ((,class (:background ,camm4-brblack))))
))
;;;###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 'camm4)
;;; camm4-theme.el ends here
+167
View File
@@ -0,0 +1,167 @@
;;; cutar-theme.el --- A high-contrast dark theme with blue/pink accents -*- lexical-binding: t; no-byte-compile: t; -*-
(deftheme cutar
"High-contrast dark theme with blue/pink accents.
Optimized for syntax highlighting and UI clarity based on the Custom Terminal palette.")
(let ((class '((class color) (min-colors 89)))
;; --- BASE UI ---
(bg "#fefcff") ;; Default background
(fg "#101010") ;; Default foreground
(cursor "#fefcff") ;; Cursor bg (matches `bg`; visibility depends on `cursor-type`)
(selection "#6ECFD5") ;; Region/selected text background
(selection-fg "#101010") ;; Region/selected text foreground
;; --- ANSI NORMAL ---
(dark_blue "#0094E7") ;; Fringe, minibuffer prompts, function names, line numbers, inactive tab borders
(red "#C82829") ;; Errors, negation chars, failed search (`isearch-fail`)
(medium_blue "#005FDB") ;; Keywords, active hyperlinks
(orange "#DD7050") ;; Constants, lazy search highlights, debug indicators
(magenta "#D536AD") ;; Strings, variables, UI dividers (`vertical-border`)
(green "#419722") ;; Docstrings, comment delimiters, info/status indicators
(cyan "#409FAF") ;; Types/Classes
(purple "#8a35b8") ;; Built-ins, visited links
;; --- ANSI BRIGHT ---
(light_blue "#82D3FF") ;; Inactive mode-line/tabs background (shares hex with `selection`)
(light_red "#FC7070") ;; Warnings, builtin, regex constructs
(accent_blue "#71A1F3") ;; (Currently unused in faces)
(yellow "#FFB633") ;; Active search (`isearch`), regex backslashes, modified buffer status, warnings
(accent_pink "#EF89DF") ;; Active mode-line/tabs, modeline accent bar
(bright_green "#19BD56") ;; (Currently unused in faces)
(bright_cyan "#9EDEEE") ;; hl-line hl-tab
(light_purple "#B197FC")) ;; (Currently unused in faces)
(custom-theme-set-faces
'cutar
;; --- CORE UI ---
`(default ((,class (:background ,bg :foreground ,fg))))
`(cursor ((,class (:background ,bg :foreground ,bg))))
`(fringe ((,class (:background ,bg :foreground ,dark_blue))))
`(region ((,class (:background ,selection :foreground ,selection-fg))))
`(highlight ((,class (:background ,light_blue :foreground ,bg))))
`(hl-line ((,class (:background ,bright_cyan :extend t)))) ;; Using dark_blue for line highlight dimness
`(link ((,class (:foreground ,medium_blue :underline t))))
`(link-visited ((,class (:foreground ,purple :underline t))))
`(minibuffer-prompt ((,class (:foreground ,dark_blue :weight bold))))
`(vertical-border ((,class (:foreground ,magenta)))) ;; "UI dividers"
;; --- SYNTAX HIGHLIGHTING (Font Lock) ---
;; Comments: ansi_0 (Dark Blue)
`(font-lock-comment-face ((,class (:foreground ,green :slant italic))))
`(font-lock-comment-delimiter-face ((,class (:foreground ,bright_green :slant italic))))
;; Keywords: ansi_7 (Purple)
`(font-lock-keyword-face ((,class (:foreground ,medium_blue :weight bold))))
;; Strings: ansi_4 (Magenta)
`(font-lock-string-face ((,class (:foreground ,magenta))))
`(font-lock-regexp-grouping-backslash ((,class (:foreground ,yellow))))
`(font-lock-regexp-grouping-construct ((,class (:foreground ,light_red))))
;; Functions: Using Accent Pink (ansi_12) for better visibility as "Primary Accent"
`(font-lock-function-name-face ((,class (:foreground ,dark_blue :weight bold))))
;; Variables: Default foreground or slightly dimmed
`(font-lock-variable-name-face ((,class (:foreground ,medium_blue))))
;; Types: ansi_6 (Cyan)
`(font-lock-type-face ((,class (:foreground ,cyan))))
;; Constants: ansi_3 (Orange)
`(font-lock-constant-face ((,class (:foreground ,orange))))
`(font-lock-builtin-face ((,class (:foreground ,light_red)))) ;; Same as keywords usually
;; Doc & Warnings
`(font-lock-doc-face ((,class (:inherit font-lock-comment-face :foreground ,green))))
`(font-lock-warning-face ((,class (:foreground ,light_red :weight bold))))
`(font-lock-negation-char-face ((,class (:foreground ,red))))
;; --- MODELINE (Tabs UI Mapping) ---
;; Active Tab: Accent Pink
`(mode-line ((,class (:background ,accent_pink :foreground ,bg))))
;; Inactive Tab: Light Blue
`(mode-line-inactive ((,class (:background ,light_blue :foreground ,fg :box (:line-width 1 :color ,accent_blue)))))
`(mode-line-buffer-id ((,class (:weight bold))))
`(mode-line-highlight ((,class (:box (:line-width 2 :color ,fg)))))
;; --- SEARCH & ISEARCH ---
;; Search Matches: Yellow (ansi_11)
`(isearch ((,class (:background ,yellow :foreground ,bg :weight bold))))
`(isearch-fail ((,class (:background ,red :foreground ,fg))))
`(lazy-highlight ((,class (:background ,orange :foreground ,bg))))
;; --- LINE NUMBERS ---
`(line-number ((,class (:foreground ,light_blue :background ,fg))))
`(line-number-current-line ((,class (:foreground ,bg :background ,accent_pink :weight bold))))
;; --- DIY (Doom Emacs Specifics) ---
`(doom-modeline-bar ((,class (:background ,accent_pink :foreground ,fg))))
`(doom-modeline-buffer-file ((,class (:foreground ,fg :weight bold))))
`(doom-modeline-buffer-path ((,class (:foreground ,fg :weight bold))))
`(doom-modeline-buffer-modified ((,class (:foreground ,yellow :weight bold))))
`(doom-modeline-debug ((,class (:foreground ,orange))))
`(doom-modeline-info ((,class (:foreground ,green))))
`(doom-modeline-warning ((,class (:foreground ,yellow))))
`(doom-modeline-error ((,class (:foreground ,red))))
;; --- ORG MODE ---
`(org-level-1 ((,class (:foreground ,accent_pink :weight bold :height 1.2))))
`(org-level-2 ((,class (:foreground ,accent_blue :weight bold :height 1.1))))
`(org-level-3 ((,class (:foreground ,bright_green :weight bold))))
`(org-level-4 ((,class (:foreground ,bright_cyan :weight bold))))
`(org-level-5 ((,class (:foreground ,light_purple :weight bold))))
`(org-todo ((,class (:foreground ,light_red :weight bold :box t))))
`(org-done ((,class (:foreground ,bright_green :weight bold :box t))))
`(org-date ((,class (:foreground ,medium_blue))))
`(org-link ((,class (:foreground ,light_purple :underline t)))) ;; "markdown links" -> light_purple
`(org-code ((,class (:foreground ,orange :background ,bg))))
`(org-block ((,class (:background ,bg :foreground ,fg :extend t))))
`(org-block-begin-line ((,class (:foreground ,dark_blue :background ,bg :extend t))))
;; --- MAGIT / GIT ---
`(magit-branch-local ((,class (:foreground ,cyan :weight bold))))
`(magit-branch-remote ((,class (:foreground ,green :weight bold))))
`(magit-hash ((,class (:foreground ,dark_blue))))
`(magit-item-highlight ((,class (:background ,selection :foreground ,selection-fg))))
`(magit-diff-added ((,class (:foreground ,bright_green :background unspecified))))
`(magit-diff-removed ((,class (:foreground ,light_red :background unspecified))))
`(magit-diff-context-highlight ((,class (:background ,dark_blue :foreground ,fg))))
`(magit-section-heading ((,class (:foreground ,bright_cyan :weight bold :underline t))))
;; --- TREE-SITTER ---
`(tree-sitter-hl-face:function.call ((,class (:foreground ,accent_pink))))
`(tree-sitter-hl-face:method.call ((,class (:foreground ,accent_pink))))
`(tree-sitter-hl-face:type ((,class (:foreground ,cyan))))
`(tree-sitter-hl-face:property ((,class (:foreground ,light_blue))))
`(tree-sitter-hl-face:parameter ((,class (:foreground ,orange))))
`(tree-sitter-hl-face:escape ((,class (:foreground ,light_red))))
;; --- FLYCHECK / LSP ---
`(flycheck-error ((,class (:underline (:style wave :color ,red)))))
`(flycheck-warning ((,class (:underline (:style wave :color ,orange)))))
`(flycheck-info ((,class (:underline (:style wave :color ,medium_blue)))))
`(lsp-face-highlight-textual ((,class (:background ,selection :foreground ,selection-fg))))
;; --- DASHBOARD ---
`(doom-dashboard-menu-desc ((,class (:foreground ,accent_blue))))
`(doom-dashboard-banner ((,class (:foreground ,accent_pink))))
;; --- MISC ---
`(show-paren-match ((,class (:background ,accent_blue :foreground ,bg :weight bold))))
`(show-paren-mismatch ((,class (:background ,red :foreground ,fg :weight bold))))
`(success ((,class (:foreground ,green))))
`(error ((,class (:foreground ,red :weight bold))))
`(warning ((,class (:foreground ,orange))))
`(header-line ((,class (:background ,dark_blue :foreground ,fg))))))
;;;###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 'cutar)
;;; cutar-theme.el ends here
+167
View File
@@ -0,0 +1,167 @@
;;; cutar-theme.el --- A high-contrast dark theme with blue/pink accents -*- lexical-binding: t; no-byte-compile: t; -*-
(deftheme cutarv32
"High-contrast dark theme with blue/pink accents.
Optimized for syntax highlighting and UI clarity based on the Custom Terminal palette.")
(let ((class '((class color) (min-colors 89)))
;; --- BASE UI ---
(bg "#f8f8ff") ;; Default background
(fg "#000000") ;; Default foreground
(cursor "#f8f8ff") ;; Cursor bg (matches `bg`; visibility depends on `cursor-type`)
(selection "#f0b94a") ;; Region/selected text background
;;(selection-fg "#000000") ;; Region/selected text foreground
;; --- ANSI NORMAL ---
(dark_blue "#007cbf" ) ;; Fringe, minibuffer prompts, function names, line numbers, inactive tab borders
(red "#cf3f29" ) ;; Errors, negation chars, failed search (`isearch-fail`)
(medium_blue "#2374de" ) ;; Keywords, active hyperlinks
(orange "#c76e2a" ) ;; Constants, lazy search highlights, debug indicators
(magenta "#b05197" ) ;; Strings, variables, UI dividers (`vertical-border`)
(green "#429e66" ) ;; Docstrings, comment delimiters, info/status indicators
(cyan "#129cc9" ) ;; Types/Classes
(purple "#a64dd6" ) ;; Built-ins, visited links
;; --- ANSI BRIGHT ---
(light_blue "#7cc9f2") ;; Inactive mode-line/tabs background (shares hex with `selection`)
(light_red "#f07b69") ;; Warnings, builtin, regex constructs
(accent_blue "#6f9ff2") ;; (Currently unused in faces)
(yellow "#f0b94a") ;; Active search (`isearch`), regex backslashes, modified buffer status, warnings
(accent_pink "#EF89DF") ;; Active mode-line/tabs, modeline accent bar
(bright_green "#2cd45c") ;; (Currently unused in faces)
(bright_cyan "#17dbe6") ;; hl-line hl-tab
(light_purple "#c8a0f2")) ;; (Currently unused in faces)
(custom-theme-set-faces
'cutarv32
;; --- CORE UI ---
`(default ((,class (:background ,bg :foreground ,fg))))
`(cursor ((,class (:background ,bg :foreground ,bg))))
`(fringe ((,class (:background ,bg :foreground ,dark_blue))))
`(region ((,class (:background ,selection))))
`(highlight ((,class (:background ,light_blue :foreground ,bg))))
`(hl-line ((,class (:background ,light_purple :extend t)))) ;; Using dark_blue for line highlight dimness
`(link ((,class (:foreground ,medium_blue :underline t))))
`(link-visited ((,class (:foreground ,purple :underline t))))
`(minibuffer-prompt ((,class (:foreground ,dark_blue :weight bold))))
`(vertical-border ((,class (:foreground ,magenta)))) ;; "UI dividers"
;; --- SYNTAX HIGHLIGHTING (Font Lock) ---
;; Comments: ansi_0 (Dark Blue)
`(font-lock-comment-face ((,class (:foreground ,green :slant italic))))
`(font-lock-comment-delimiter-face ((,class (:foreground ,bright_green :slant italic))))
;; Keywords: ansi_7 (Purple)
`(font-lock-keyword-face ((,class (:foreground ,medium_blue :weight bold))))
;; Strings: ansi_4 (Magenta)
`(font-lock-string-face ((,class (:foreground ,magenta))))
`(font-lock-regexp-grouping-backslash ((,class (:foreground ,yellow))))
`(font-lock-regexp-grouping-construct ((,class (:foreground ,light_red))))
;; Functions: Using Accent Pink (ansi_12) for better visibility as "Primary Accent"
`(font-lock-function-name-face ((,class (:foreground ,dark_blue :weight bold))))
;; Variables: Default foreground or slightly dimmed
`(font-lock-variable-name-face ((,class (:foreground ,medium_blue))))
;; Types: ansi_6 (Cyan)
`(font-lock-type-face ((,class (:foreground ,purple))))
;; Constants: ansi_3 (Orange)
`(font-lock-constant-face ((,class (:foreground ,orange))))
`(font-lock-builtin-face ((,class (:foreground ,light_red)))) ;; Same as keywords usually
;; Doc & Warnings
`(font-lock-doc-face ((,class (:inherit font-lock-comment-face :foreground ,green))))
`(font-lock-warning-face ((,class (:foreground ,light_red :weight bold))))
`(font-lock-negation-char-face ((,class (:foreground ,red))))
;; --- MODELINE (Tabs UI Mapping) ---
;; Active Tab: Accent Pink
`(mode-line ((,class (:background ,accent_pink :foreground ,bg))))
;; Inactive Tab: Light Blue
`(mode-line-inactive ((,class (:background ,light_blue :foreground ,fg :box (:line-width 1 :color ,accent_blue)))))
`(mode-line-buffer-id ((,class (:weight bold))))
`(mode-line-highlight ((,class (:box (:line-width 2 :color ,fg)))))
;; --- SEARCH & ISEARCH ---
;; Search Matches: Yellow (ansi_11)
`(isearch ((,class (:background ,yellow :foreground ,bg :weight bold))))
`(isearch-fail ((,class (:background ,red :foreground ,fg))))
`(lazy-highlight ((,class (:background ,orange :foreground ,bg))))
;; --- LINE NUMBERS ---
`(line-number ((,class (:foreground ,light_blue :background ,fg))))
`(line-number-current-line ((,class (:foreground ,bg :background ,accent_pink :weight bold))))
;; --- DIY (Doom Emacs Specifics) ---
`(doom-modeline-bar ((,class (:background ,accent_pink :foreground ,fg))))
`(doom-modeline-buffer-file ((,class (:foreground ,fg :weight bold))))
`(doom-modeline-buffer-path ((,class (:foreground ,fg :weight bold))))
`(doom-modeline-buffer-modified ((,class (:foreground ,yellow :weight bold))))
`(doom-modeline-debug ((,class (:foreground ,orange))))
`(doom-modeline-info ((,class (:foreground ,green))))
`(doom-modeline-warning ((,class (:foreground ,yellow))))
`(doom-modeline-error ((,class (:foreground ,red))))
;; --- ORG MODE ---
`(org-level-1 ((,class (:foreground ,accent_pink :weight bold :height 1.2))))
`(org-level-2 ((,class (:foreground ,accent_blue :weight bold :height 1.1))))
`(org-level-3 ((,class (:foreground ,bright_green :weight bold))))
`(org-level-4 ((,class (:foreground ,bright_cyan :weight bold))))
`(org-level-5 ((,class (:foreground ,light_purple :weight bold))))
`(org-todo ((,class (:foreground ,light_red :weight bold :box t))))
`(org-done ((,class (:foreground ,bright_green :weight bold :box t))))
`(org-date ((,class (:foreground ,medium_blue))))
`(org-link ((,class (:foreground ,light_purple :underline t)))) ;; "markdown links" -> light_purple
`(org-code ((,class (:foreground ,orange :background ,bg))))
`(org-block ((,class (:background ,bg :foreground ,fg :extend t))))
`(org-block-begin-line ((,class (:foreground ,dark_blue :background ,bg :extend t))))
;; --- MAGIT / GIT ---
`(magit-branch-local ((,class (:foreground ,cyan :weight bold))))
`(magit-branch-remote ((,class (:foreground ,green :weight bold))))
`(magit-hash ((,class (:foreground ,dark_blue))))
`(magit-item-highlight ((,class (:background ,selection))))
`(magit-diff-added ((,class (:foreground ,bright_green :background unspecified))))
`(magit-diff-removed ((,class (:foreground ,light_red :background unspecified))))
`(magit-diff-context-highlight ((,class (:background ,dark_blue :foreground ,fg))))
`(magit-section-heading ((,class (:foreground ,bright_cyan :weight bold :underline t))))
;; --- TREE-SITTER ---
`(tree-sitter-hl-face:function.call ((,class (:foreground ,accent_pink))))
`(tree-sitter-hl-face:method.call ((,class (:foreground ,accent_pink))))
`(tree-sitter-hl-face:type ((,class (:foreground ,cyan))))
`(tree-sitter-hl-face:property ((,class (:foreground ,light_blue))))
`(tree-sitter-hl-face:parameter ((,class (:foreground ,orange))))
`(tree-sitter-hl-face:escape ((,class (:foreground ,light_red))))
;; --- FLYCHECK / LSP ---
`(flycheck-error ((,class (:underline (:style wave :color ,red)))))
`(flycheck-warning ((,class (:underline (:style wave :color ,orange)))))
`(flycheck-info ((,class (:underline (:style wave :color ,medium_blue)))))
`(lsp-face-highlight-textual ((,class (:background ,selection))))
;; --- DASHBOARD ---
`(doom-dashboard-menu-desc ((,class (:foreground ,accent_blue))))
`(doom-dashboard-banner ((,class (:foreground ,accent_pink))))
;; --- MISC ---
`(show-paren-match ((,class (:background ,accent_blue :foreground ,bg :weight bold))))
`(show-paren-mismatch ((,class (:background ,red :foreground ,fg :weight bold))))
`(success ((,class (:foreground ,green))))
`(error ((,class (:foreground ,red :weight bold))))
`(warning ((,class (:foreground ,orange))))
`(header-line ((,class (:background ,dark_blue :foreground ,fg))))))
;;;###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 'cutarv32)
;;; cutarv32-theme.el ends here
+167
View File
@@ -0,0 +1,167 @@
;;; cutarv32_dark-theme.el --- A high-contrast dark theme with blue/pink accents -*- lexical-binding: t; no-byte-compile: t; -*-
(deftheme cutarv32_dark
"High-contrast dark theme with blue/pink accents.
Optimized for syntax highlighting and UI clarity based on the Custom Terminal palette.")
(let ((class '((class color) (min-colors 89)))
;; --- BASE UI ---
(bg "#0d0d0d") ;; Default background
(fg "#f8f8ff") ;; Default foreground
(cursor "#f8f8ff") ;; Cursor bg (matches `bg`; visibility depends on `cursor-type`)
(selection "#f0b94a") ;; Region/selected text background
;;(selection-fg "#000000") ;; Region/selected text foreground
;; --- ANSI NORMAL ---
(dark_blue "#007cbf" ) ;; Fringe, minibuffer prompts, function names, line numbers, inactive tab borders
(red "#cf3f29" ) ;; Errors, negation chars, failed search (`isearch-fail`)
(medium_blue "#2374de" ) ;; Keywords, active hyperlinks
(orange "#c76e2a" ) ;; Constants, lazy search highlights, debug indicators
(magenta "#b05197" ) ;; Strings, variables, UI dividers (`vertical-border`)
(green "#429e66" ) ;; Docstrings, comment delimiters, info/status indicators
(cyan "#129cc9" ) ;; Types/Classes
(purple "#a64dd6" ) ;; Built-ins, visited links
;; --- ANSI BRIGHT ---
(light_blue "#7cc9f2") ;; Inactive mode-line/tabs background (shares hex with `selection`)
(light_red "#f07b69") ;; Warnings, builtin, regex constructs
(accent_blue "#6f9ff2") ;; (Currently unused in faces)
(yellow "#f0b94a") ;; Active search (`isearch`), regex backslashes, modified buffer status, warnings
(accent_pink "#EF89DF") ;; Active mode-line/tabs, modeline accent bar
(bright_green "#2cd45c") ;; (Currently unused in faces)
(bright_cyan "#17dbe6") ;; hl-line hl-tab
(light_purple "#c8a0f2")) ;; (Currently unused in faces)
(custom-theme-set-faces
'cutarv32_dark
;; --- CORE UI ---
`(default ((,class (:background ,bg :foreground ,fg))))
`(cursor ((,class (:background ,bg :foreground ,bg))))
`(fringe ((,class (:background ,bg :foreground ,dark_blue))))
`(region ((,class (:background ,selection))))
`(highlight ((,class (:background ,light_blue :foreground ,bg))))
`(hl-line ((,class (:background ,light_purple :extend t)))) ;; Using dark_blue for line highlight dimness
`(link ((,class (:foreground ,medium_blue :underline t))))
`(link-visited ((,class (:foreground ,purple :underline t))))
`(minibuffer-prompt ((,class (:foreground ,dark_blue :weight bold))))
`(vertical-border ((,class (:foreground ,magenta)))) ;; "UI dividers"
;; --- SYNTAX HIGHLIGHTING (Font Lock) ---
;; Comments: ansi_0 (Dark Blue)
`(font-lock-comment-face ((,class (:foreground ,green :slant italic))))
`(font-lock-comment-delimiter-face ((,class (:foreground ,bright_green :slant italic))))
;; Keywords: ansi_7 (Purple)
`(font-lock-keyword-face ((,class (:foreground ,medium_blue :weight bold))))
;; Strings: ansi_4 (Magenta)
`(font-lock-string-face ((,class (:foreground ,magenta))))
`(font-lock-regexp-grouping-backslash ((,class (:foreground ,yellow))))
`(font-lock-regexp-grouping-construct ((,class (:foreground ,light_red))))
;; Functions: Using Accent Pink (ansi_12) for better visibility as "Primary Accent"
`(font-lock-function-name-face ((,class (:foreground ,dark_blue :weight bold))))
;; Variables: Default foreground or slightly dimmed
`(font-lock-variable-name-face ((,class (:foreground ,medium_blue))))
;; Types: ansi_6 (Cyan)
`(font-lock-type-face ((,class (:foreground ,purple))))
;; Constants: ansi_3 (Orange)
`(font-lock-constant-face ((,class (:foreground ,orange))))
`(font-lock-builtin-face ((,class (:foreground ,light_red)))) ;; Same as keywords usually
;; Doc & Warnings
`(font-lock-doc-face ((,class (:inherit font-lock-comment-face :foreground ,green))))
`(font-lock-warning-face ((,class (:foreground ,light_red :weight bold))))
`(font-lock-negation-char-face ((,class (:foreground ,red))))
;; --- MODELINE (Tabs UI Mapping) ---
;; Active Tab: Accent Pink
`(mode-line ((,class (:background ,accent_pink :foreground ,bg))))
;; Inactive Tab: Light Blue
`(mode-line-inactive ((,class (:background ,light_blue :foreground ,fg :box (:line-width 1 :color ,accent_blue)))))
`(mode-line-buffer-id ((,class (:weight bold))))
`(mode-line-highlight ((,class (:box (:line-width 2 :color ,fg)))))
;; --- SEARCH & ISEARCH ---
;; Search Matches: Yellow (ansi_11)
`(isearch ((,class (:background ,yellow :foreground ,bg :weight bold))))
`(isearch-fail ((,class (:background ,red :foreground ,fg))))
`(lazy-highlight ((,class (:background ,orange :foreground ,bg))))
;; --- LINE NUMBERS ---
`(line-number ((,class (:foreground ,light_blue :background ,fg))))
`(line-number-current-line ((,class (:foreground ,bg :background ,accent_pink :weight bold))))
;; --- DIY (Doom Emacs Specifics) ---
`(doom-modeline-bar ((,class (:background ,accent_pink :foreground ,fg))))
`(doom-modeline-buffer-file ((,class (:foreground ,fg :weight bold))))
`(doom-modeline-buffer-path ((,class (:foreground ,fg :weight bold))))
`(doom-modeline-buffer-modified ((,class (:foreground ,yellow :weight bold))))
`(doom-modeline-debug ((,class (:foreground ,orange))))
`(doom-modeline-info ((,class (:foreground ,green))))
`(doom-modeline-warning ((,class (:foreground ,yellow))))
`(doom-modeline-error ((,class (:foreground ,red))))
;; --- ORG MODE ---
`(org-level-1 ((,class (:foreground ,accent_pink :weight bold :height 1.2))))
`(org-level-2 ((,class (:foreground ,accent_blue :weight bold :height 1.1))))
`(org-level-3 ((,class (:foreground ,bright_green :weight bold))))
`(org-level-4 ((,class (:foreground ,bright_cyan :weight bold))))
`(org-level-5 ((,class (:foreground ,light_purple :weight bold))))
`(org-todo ((,class (:foreground ,light_red :weight bold :box t))))
`(org-done ((,class (:foreground ,bright_green :weight bold :box t))))
`(org-date ((,class (:foreground ,medium_blue))))
`(org-link ((,class (:foreground ,light_purple :underline t)))) ;; "markdown links" -> light_purple
`(org-code ((,class (:foreground ,orange :background ,bg))))
`(org-block ((,class (:background ,bg :foreground ,fg :extend t))))
`(org-block-begin-line ((,class (:foreground ,dark_blue :background ,bg :extend t))))
;; --- MAGIT / GIT ---
`(magit-branch-local ((,class (:foreground ,cyan :weight bold))))
`(magit-branch-remote ((,class (:foreground ,green :weight bold))))
`(magit-hash ((,class (:foreground ,dark_blue))))
`(magit-item-highlight ((,class (:background ,selection))))
`(magit-diff-added ((,class (:foreground ,bright_green :background unspecified))))
`(magit-diff-removed ((,class (:foreground ,light_red :background unspecified))))
`(magit-diff-context-highlight ((,class (:background ,dark_blue :foreground ,fg))))
`(magit-section-heading ((,class (:foreground ,bright_cyan :weight bold :underline t))))
;; --- TREE-SITTER ---
`(tree-sitter-hl-face:function.call ((,class (:foreground ,accent_pink))))
`(tree-sitter-hl-face:method.call ((,class (:foreground ,accent_pink))))
`(tree-sitter-hl-face:type ((,class (:foreground ,cyan))))
`(tree-sitter-hl-face:property ((,class (:foreground ,light_blue))))
`(tree-sitter-hl-face:parameter ((,class (:foreground ,orange))))
`(tree-sitter-hl-face:escape ((,class (:foreground ,light_red))))
;; --- FLYCHECK / LSP ---
`(flycheck-error ((,class (:underline (:style wave :color ,red)))))
`(flycheck-warning ((,class (:underline (:style wave :color ,orange)))))
`(flycheck-info ((,class (:underline (:style wave :color ,medium_blue)))))
`(lsp-face-highlight-textual ((,class (:background ,selection))))
;; --- DASHBOARD ---
`(doom-dashboard-menu-desc ((,class (:foreground ,accent_blue))))
`(doom-dashboard-banner ((,class (:foreground ,accent_pink))))
;; --- MISC ---
`(show-paren-match ((,class (:background ,accent_blue :foreground ,bg :weight bold))))
`(show-paren-mismatch ((,class (:background ,red :foreground ,fg :weight bold))))
`(success ((,class (:foreground ,green))))
`(error ((,class (:foreground ,red :weight bold))))
`(warning ((,class (:foreground ,orange))))
`(header-line ((,class (:background ,dark_blue :foreground ,fg))))))
;;;###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 'cutarv32_dark)
;;; cutarv32_dark-theme.el ends here