diff --git a/config.el b/config.el index 6101417..3380c02 100644 --- a/config.el +++ b/config.el @@ -1,75 +1,101 @@ ;;; config.el -*- lexical-binding: t; -*- ;; ============================================================ -;; Custom +;; Custom & Packages Loading ;; ============================================================ (let ((custom-dir (expand-file-name "custom/" user-emacs-directory))) (when (file-directory-p custom-dir) (mapc #'load (directory-files custom-dir t "\\.el$")))) +;; (let ((pkg-dir (expand-file-name "packages/" user-emacs-directory))) +;; (when (file-directory-p pkg-dir) +;; (mapc #'load (directory-files pkg-dir t "\\.el$")))) + +(add-to-list 'load-path (expand-file-name "packages/" user-emacs-directory)) +;;(add-to-list 'load-path (expand-file-name "custom/" user-emacs-directory)) (add-to-list 'custom-theme-load-path (expand-file-name "themes/" user-emacs-directory)) -;; ============================================================ -;; Keybindings -;; ============================================================ +(require 'visuals-packages) ;;ui, eye candy +(require 'editing-packages) ;;text editing +(require 'system-packages) ;; emacs itself +(require 'tutilities-packages) ;; tertiary utilities +(require 'completion-packages) ;; ui, functional + (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 - ) + "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 + "C-k" #'avy-kill-whole-line + "C-r" #'recenter-top-bottom + "C-b" #'scroll-down-command + "C-" #'my/delete-word-backward + "M-w" #'clipetty-kill-ring-save + ) (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-" #'my/delete-word-backward) + "M-g g" #'avy-goto-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 w" #'my/vterm-sync-here + "C-x C-b" #'buffer-table + "C-s C-l" #'consult-line + "C-s C-e" #'expreg-expand + ) (general-define-key :keymaps 'global - "C-w" nil) - ;; If you want certain keys to ONLY work in Meow Normal state, use :states. - ) + "C-w" #'delete-window)) ;; ============================================================ -;; Settings, UI +;; Core 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) + ;;xterm-extra-capabilities '(getSelection setSelection modifyOtherKeys) mouse-drag-copy-region nil - truncate-lines nil - + + tab-width 4 + truncate-lines nil display-line-numbers-type t cursor-type 'bar savehist-additional-variables '(kill-ring search-ring) recentf-max-saved-items 75 + + global-auto-revert-non-file-buffers t + + undo-limit 60000000 + undo-strong-limit 90000000 + undo-outer-limit 120000000 ) + +(setq-default + tab-width 4 + js-indent-level 4 + typescript-indent-level 4 + typescript-ts-mode-indent-offset 4 + typescript-ts-mode-indent-offset 4) + ;; Modes (global-hl-line-mode t ) (global-display-line-numbers-mode 1) (hl-line-mode 1) (savehist-mode 1) (global-clipetty-mode) +(global-auto-revert-mode) +(yas-global-mode t) ;; Fonts -(set-face-attribute 'default nil :family "Fira Code" :height 120) +(set-face-attribute 'default nil :family "Noto Sans Mono" :height 120) (set-face-attribute 'variable-pitch nil :family "Noto Sans" :height 140) ;; Apply variable pitch to specific modes @@ -77,318 +103,63 @@ (add-hook hook (lambda () (buffer-face-set '(:family "Noto Sans" :height 140))))) (add-to-list 'auto-mode-alist '("\\.qd$" . markdown-mode)) +(add-to-list 'auto-mode-alist '("\\.ino$" . c++-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 + (setq recentf-exclude '(".*/$"))) ;; ============================================================ -;; packages +;; Native Emacs Configuration ;; ============================================================ - (use-package emacs :ensure nil :custom + (mason-setup) (tab-always-indent 'complete) - (TEXT-mode-ispell-word-completion nil) - (read-extended-command-predicate #'command-completion-default-include-p) + (completion-ignore-case t) + (read-file-name-completion-ignore-case t) + (read-buffer-completion-ignore-case t) + (text-mode-ispell-word-completion nil) + (backup-directory-alist '(("." . "~/MyEmacsBackups"))) + (backup-by-copying t) ) -(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)) +;; Tree-sitter & LSP tweaks (Core transformative changes) +(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)) (use-package mason :config - :init - (mason-ensure)) + (mason-setup)) -(use-package marginalia +(use-package lsp-mode + :hook ((prog-mode . lsp-deferred) ;try to automatically start lsp-mode when prog-mode + (typescript-ts-mode . lsp-deferred) + (js-ts-mode . lsp-deferred) + (tsx-ts-mode . lsp-deferred) + (arduino-mode . lsp-deferred) + (lsp-mode . lsp-enable-which-key-integration)) + :commands lsp :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)) + (add-to-list 'lsp-language-id-configuration '(arduino-mode . "cpp")) + (lsp-register-client + (make-lsp-client + :new-connection (lsp-stdio-connection '("clangd" "--header-insertion=never")) + :activation-fn (lsp-activate-on "arduino") + :server-id 'lsp-arduino-clangd + ))) ;; ============================================================ -;; Functions +;; Theming ;; ============================================================ - -(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-") 'my-modern-delete-word-backward) - - -;; ============================================================ -;; Theming, ui -;; ============================================================ -;; - (my/apply-theme (selected-frame)) -;; Apply to all future frames (important for emacsclient users) +;;(add-hook 'window-setup-hook (lambda () (my/apply-theme (selected-frame)))) (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) +(setq nerd-icons-font-family "Symbols Nerd Font Mono") diff --git a/early-init.el b/early-init.el index ff8ae7b..2e0fc0a 100644 --- a/early-init.el +++ b/early-init.el @@ -12,8 +12,9 @@ garbage-collection-messages t) ;; Temporarily raise GC threshold during startup -(setq gc-cons-threshold most-positive-fixnum +(setq gc-cons-threshold 8000000000 gc-cons-percentage 0.6) +(add-hook 'after-init-hook (lambda () (setq gc-cons-threshold 80000000))) ;; Disable UI chrome (dolist (mode '(menu-bar-mode tool-bar-mode scroll-bar-mode)) diff --git a/init.el b/init.el index 5a49d34..5b8cf28 100644 --- a/init.el +++ b/init.el @@ -38,44 +38,57 @@ (let ((load-source-file-function nil)) (load "./elpaca-autoloads")))) (add-hook 'after-init-hook #'elpaca-process-queues) (elpaca `(,@elpaca-order)) +;;(elpaca-wait) +(elpaca benchmark-init) (elpaca-wait) +(benchmark-init/activate) + ;; 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 general) ;Keybindings +(elpaca vertico) ;Vertical completion +(elpaca orderless) ;Filtering for Consult/Vertico +(elpaca marginalia) ;Annotations in the minibuffer +(elpaca corfu) ;In-buffer completion +(elpaca corfu-terminal) ;necessary for popup on emacs <31 +(elpaca-wait) ;Ensure UI is ready before loading tools (elpaca nerd-icons) (elpaca nerd-icons-completion) (elpaca nerd-icons-dired) (elpaca nerd-icons-corfu) -(elpaca-wait) ;; Ensure UI is ready before loading tools +(elpaca doom-modeline) +(elpaca base16-theme) ;; ============================================================================== ;; EDITING & NAVIGATION ;; ============================================================================== -(elpaca meow) ;; Modal editing -(elpaca avy) ;; Fast jumping + +(elpaca meow) ; Modal editing +(elpaca avy) ; Fast jumping (elpaca smartparens) -(elpaca expand-region) +;;(elpaca expand-region) ; replaced by expreg +(elpaca expreg) ;expand selection (elpaca undo-fu) -(elpaca vundo) ;; Visual undo tree +(elpaca vundo) ; Visual undo tree (elpaca xclip) (elpaca clipetty) -(elpaca embark) ;; Contextual actions -(elpaca kirigami) ;; Selection/Editing -(elpaca jinx) ;; Fast duplicate lines +(elpaca embark) ; Contextual actions +(elpaca embark-consult) +(elpaca lsp-embark) +(elpaca kirigami) ; Selection/Editing +(elpaca jinx) ; Fast duplicate lines ;; ============================================================================== ;; CODE ANALYSIS & VISUALS ;; ============================================================================== + (elpaca treesit-auto) (elpaca treesit-fold) (elpaca highlight-quoted) @@ -88,49 +101,55 @@ ;; ============================================================================== ;; LSP & DEVELOPMENT ;; ============================================================================== -(elpaca mason) ;; LSP server manager + +(elpaca mason) ; LSP server manager (elpaca lsp-mode) (elpaca lsp-ui) (elpaca consult-lsp) +(elpaca flycheck) +(elpaca yasnippet) +(elpaca yasnippet-snippets) ;; ============================================================================== ;; LANGUAGE MODES ;; ============================================================================== + (elpaca kdl-mode) (elpaca csv-mode) - +(elpaca arduino-mode) +(elpaca nix-mode) ;; ============================================================================== ;; UTILITIES ;; ============================================================================== -(elpaca consult) ;; Enhanced search/navigation + +(elpaca consult) ; Enhanced search/navigation (elpaca vterm) (elpaca vterm-toggle) (elpaca colorful-mode) -;;(elpaca dirvish) ;;broken on emacs 30 +(elpaca (dirvish :repo "latiagertrutis/dirvish" + :host github)) ; broken on emacs 30, fixed by using fork (elpaca transient) (elpaca magit) -(elpaca casual) +(elpaca transpose-frame) ;; ============================================================================== ;; 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. @@ -138,11 +157,21 @@ ;; 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))) + '("c9afaac8aedf1bb721d21053a79a65969fd8f44314d22ff29c8981709ee4245f" + "0672d7fbe7fa24344bbe98461a8db26cb52a074354f9a4529cea4ba1af456044" + "664111db1521fe3351061dc87aea95fa98b3f244f4b830fbc048d39c3a8bc125" + "df7b90a88131500ce9e5a911c815ce96eb7855d88747830f298c6914d80be48e" + "4fa3b7b09062f707a4770804dda9dda4807aa5c86623076b9741897df2e7acdd" + "5bfc7c010e3ee71396e421c2e8a5a561c305da812eba9e0e48742896d8e45d97" + "48cebeaf733cae05b5265eceafea44c042f2fc65906ccd999f652d230be25b6f" + "1b4f5bebc7f47257997a8d56e797e2e8d85581bbd824a275bb1ebc7aea7c1399" + "a7dab7ccf5c97be13a1d957e8847cfda7cf768554595429a43f6b6393459c45e" + "ca223796522e77b1813111ad2994b8e579df1000d1e3c34b604fe0a18ad45dec" + 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. - ) + '(meow-insert-cursor ((t (:inherit unspecified :background "#c75e10")))) + '(meow-normal-cursor ((t (:foreground "#7cc9f2" :background "#f8f8ff"))))) diff --git a/packages/completion-packages.el b/packages/completion-packages.el new file mode 100644 index 0000000..75c1c18 --- /dev/null +++ b/packages/completion-packages.el @@ -0,0 +1,29 @@ +;;; completion-packages.el --- Completion stack configuration -*- lexical-binding: t; -*- + +(use-package corfu + :config + (global-corfu-mode) + (corfu-popupinfo-mode) + (setq corfu-quit-at-boundary 'seperator + corfu-quit-no-match 'seperator) + :custom + (corfu-auto t) + (corfu-auto-delay 0.2) + (corfu-auto-prefix 2) + (corfu-popupinfo-delay '(0.5 . 0.3))) + +(use-package vertico + :init + (vertico-mode)) + +(use-package marginalia + :init + (marginalia-mode)) + +(use-package orderless + :custom + (completion-styles '(orderless basic)) + (completion-category-overrides '((file (styles partial-completion)))) + (completion-pcm-leading-wildcard t)) + +(provide 'completion-packages) diff --git a/packages/editing-packages.el b/packages/editing-packages.el new file mode 100644 index 0000000..343e4ac --- /dev/null +++ b/packages/editing-packages.el @@ -0,0 +1,27 @@ +;;; editing-packages.el --- Editing and navigation configuration -*- lexical-binding: t; -*- + +(use-package meow + :config + (setq meow-use-clipboard nil + meow--kbd-kill-region "C-S-x") + (meow-setup) + (meow-global-mode 1) + ) + +(use-package avy + :config + (setq avy-timeout-seconds 0.25 + avy-style 'at-full + avy-keys (number-sequence ?a ?z))) + +(use-package smartparens + :config + (smartparens-global-mode 1)) + +(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)) + +(provide 'editing-packages) diff --git a/packages/system-packages.el b/packages/system-packages.el new file mode 100644 index 0000000..d085f10 --- /dev/null +++ b/packages/system-packages.el @@ -0,0 +1,32 @@ +;;; system-packages.el --- System and utility package configuration -*- lexical-binding: t; -*- + +(use-package clipetty + :hook (after-init . global-clipetty-mode)) + + +(use-package dirvish + :defer t + :config + (dirvish-peek-mode) + (dirvish-side-follow-mode) + (add-hook 'dirvish-directory-view-mode 'diredfl-mode)) + +(use-package embark + + :bind + (("C-." . embark-act) + ("C-h B" . embark-bindings) + ) + :config + (add-to-list 'display-buffer-alist + '("\\`\\*Embark Collect \\(Live\\|Completions\\)\\*" + nil + (window-parameters (mode-line-format . none)))) + ) + +(use-package benchmark-init + :hook + (after-init . benchmark-init/deactivate)) + + +(provide 'system-packages) diff --git a/packages/tutilities-packages.el b/packages/tutilities-packages.el new file mode 100644 index 0000000..bed135a --- /dev/null +++ b/packages/tutilities-packages.el @@ -0,0 +1,12 @@ + +(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 jinx + :hook (emacs-startup . global-jinx-mode) + :custom (jinx-languages "en_US nl_NL")) + +(provide 'tutilities-packages) diff --git a/packages/visuals-packages.el b/packages/visuals-packages.el new file mode 100644 index 0000000..dc03ba6 --- /dev/null +++ b/packages/visuals-packages.el @@ -0,0 +1,99 @@ +;;; visuals-packages.el --- Visual and structural configuration -*- lexical-binding: t; -*- + +(use-package treesit-auto + :functions global-treesit-auto-mode + :config + (treesit-auto-add-to-auto-mode-alist 'all) + :hook (after-init . global-treesit-auto-mode) + :custom + (treesit-auto-install 'prompt) + ) + +(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)) + +;; Tree-sitter hooks +(dolist (hook '(c-ts-mode-hook c++-ts-mode-hook java-ts-mode-hook rust-ts-mode-hook + go-ts-mode-hook ruby-ts-mode-hook js-ts-mode-hook typescript-ts-mode-hook + tsx-ts-mode-hook css-ts-mode-hook html-ts-mode-hook bash-ts-mode-hook + cmake-ts-mode-hook dockerfile-ts-mode-hook json-ts-mode-hook toml-ts-mode-hook)) + (add-hook hook #'treesit-fold-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 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)) + (add-hook 'prog-mode-hook #'indent-bars-mode) + :hook (prog-mode . indent-bars-mode)) + + +(use-package colorful-mode + :config (setq colorful-allow-mouse-clicks nil)) + +(use-package doom-modeline + :defer t + :hook + (window-setup . doom-modeline-mode) + :config + (setq + doom-modeline-minor-modes t + doom-modeline-indent-info t) + ) + +;;--- +;; icons +;;--- + +(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 + :after corfu + :config + (add-to-list 'corfu-margin-formatters #'nerd-icons-corfu-formatter)) + +(use-package nerd-icons-dired + :config + (nerd-icons-dired-mode) + (add-hook 'dired-mode-hook #'nerd-icons-dired-mode)) + + +(provide 'visuals-packages) + diff --git a/themes/base16.el b/themes/base16.el new file mode 100644 index 0000000..fe5cd8c --- /dev/null +++ b/themes/base16.el @@ -0,0 +1,31 @@ +(require 'base16-theme) + +(defvar base16-my-custom-theme-colors + '(:base00 "#f8f8ff" ;; bg + :base01 "#7cc9f2" ;; light-blue + :base02 "#aaafff" ;; selection + :base03 "#cca0ff" ;; light-purple + :base04 "#666666" ;; font-lock-comment-face + :base05 "#010101" ;; fg + :base06 "#007cbf" ;; dark-blue + :base07 "#b05197" ;; magenta + :base08 "#cf3f29" ;; red + :base09 "#c75e10" ;; orange + :base0A "#f0b94a" ;; yellow + :base0B "#429e66" ;; green + :base0C "#129cc9" ;; cyan + :base0D "#2374de" ;; medium-blue + :base0E "#EF89DF" ;; accent-pink + :base0F "#a64dd6" ;; purple + )) + + + +(deftheme base16-my-custom-theme) +(use-package base16-theme + :config + ;; Define the theme and its faces in one shot + (base16-theme-define 'base16-my-custom-theme base16-my-custom-theme-colors) + + ;; Explicitly enable it since we aren't using load-theme + (enable-theme 'base16-my-custom-theme)) diff --git a/themes/cutar/#cutarv41-theme.el# b/themes/cutar/#cutarv41-theme.el# new file mode 100644 index 0000000..05e01b9 --- /dev/null +++ b/themes/cutar/#cutarv41-theme.el# @@ -0,0 +1,149 @@ +;;; cutarv41-theme.el --- A high-contrast light theme with blue/pink accents -*- lexical-binding: t; no-byte-compile: t; -*- + +(deftheme cutarv41 + "A high-contrast light theme with blue/pink accents, optimized for clarity and syntax highlighting.") + +(let ((class '((class color) (min-colors 256))) + ;; --- Palette --- + ;; Base UI + (bg "#f8f8ff") ;; Default background + (fg "#010101") ;; Default foreground + (cursor "#f8f8ff") ;; Cursor bg + (selection "#aaafff") ;; Region/selected text background + + ;; ANSI Normal + (dark-blue "#007cbf") ;; Fringe, minibuffer prompts, function names, line numbers + (red "#cf3f29") ;; Errors, negation chars + (medium-blue "#2374de") ;; Keywords, active hyperlinks + (orange "#c75e10") ;; Constants, debug indicators + (magenta "#b05197") ;; Strings, variables, UI dividers + (green "#429e66") ;; Docstrings, comment delimiters + (cyan "#129cc9") ;; Types/Classes + (purple "#a64dd6") ;; Built-ins, visited links + + ;; ANSI Bright + (light-blue "#7cc9f2") ;; Inactive mode-line/tabs background + (light-red "#f07b69") ;; Warnings, regex constructs + (accent-blue "#6f9ff2") ;; Accents + (yellow "#f0b94a") ;; Active search, warnings + (accent-pink "#EF89DF") ;; Active mode-line/tabs + (bright-green "#2cd45c") ;; Status indicators + (bright-cyan "#11ddee") ;; hl-line hl-tab + (light-purple "#cca0ff")) ;; Accents + + (custom-theme-set-faces + 'cutarv41 + + ;; --- 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)))) + `(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)))) + + ;; --- Syntax Highlighting (Font Lock) --- + `(font-lock-comment-face ((,class (:foreground ,"#666666" :slant italic)))) + `(font-lock-comment-delimiter-face ((,class (:foreground ,bright-green :slant italic)))) + `(font-lock-keyword-face ((,class (:foreground ,medium-blue :weight bold)))) + `(font-lock-string-face ((,class (:foreground ,green)))) + `(font-lock-regexp-grouping-backslash ((,class (:foreground ,yellow)))) + `(font-lock-regexp-grouping-construct ((,class (:foreground ,light-red)))) + `(font-lock-function-name-face ((,class (:foreground ,cyan :weight bold)))) + `(font-lock-variable-name-face ((,class (:foreground ,medium-blue)))) + `(font-lock-type-face ((,class (:foreground ,purple)))) + `(font-lock-constant-face ((,class (:foreground ,light-red)))) + `(font-lock-builtin-face ((,class (:foreground ,orange)))) + `(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)))) + + ;; --- Mode-line --- + `(mode-line ((,class (:background ,accent-pink :foreground ,bg)))) + `(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 --- + `(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)))) + + ;; --- Package Specifics --- + ;; Doom Modeline + `(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)))) + `(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 + `(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 'cutarv41) + +;;; cutarv41-theme.el ends here diff --git a/themes/cutar-theme.el b/themes/cutar/cutar-theme.el similarity index 100% rename from themes/cutar-theme.el rename to themes/cutar/cutar-theme.el diff --git a/themes/cutarv32-theme.el b/themes/cutar/cutarv32-theme.el similarity index 99% rename from themes/cutarv32-theme.el rename to themes/cutar/cutarv32-theme.el index f0e6f5e..0b9e3fc 100644 --- a/themes/cutarv32-theme.el +++ b/themes/cutar/cutarv32-theme.el @@ -16,7 +16,7 @@ Optimized for syntax highlighting and UI clarity based on the Custom Terminal pa (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 + (orange "#c75e10" ) ;; 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 diff --git a/themes/cutarv32_dark-theme.el b/themes/cutar/cutarv32_dark-theme.el similarity index 100% rename from themes/cutarv32_dark-theme.el rename to themes/cutar/cutarv32_dark-theme.el diff --git a/themes/cutar/cutarv33-theme.el b/themes/cutar/cutarv33-theme.el new file mode 100644 index 0000000..2d9cc21 --- /dev/null +++ b/themes/cutar/cutarv33-theme.el @@ -0,0 +1,167 @@ +;;; cutarv33-theme.el --- A high-contrast dark theme with blue/pink accents -*- lexical-binding: t; no-byte-compile: t; -*- +(deftheme cutarv33 + "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 "#aaafff") ;; 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 "#c75e10" ) ;; 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 "#11ddee") ;; hl-line hl-tab + (light_purple "#c8a0f2")) ;; (Currently unused in faces) + + (custom-theme-set-faces + 'cutarv33 + + ;; --- 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 ,cyan :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 ,light_red)))) + `(font-lock-builtin-face ((,class (:foreground ,orange)))) ;; 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 'cutarv33) + +;;; cutarv33-theme.el ends here diff --git a/themes/cutar/cutarv33-theme.el~ b/themes/cutar/cutarv33-theme.el~ new file mode 100644 index 0000000..a01aa83 --- /dev/null +++ b/themes/cutar/cutarv33-theme.el~ @@ -0,0 +1,167 @@ +;;; cutarv33-theme.el --- A high-contrast dark theme with blue/pink accents -*- lexical-binding: t; no-byte-compile: t; -*- +(deftheme cutarv33 + "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 "#c75e10" ) ;; 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 + 'cutarv33 + + ;; --- 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 ,light_red)))) + `(font-lock-builtin-face ((,class (:foreground ,medium_blue)))) ;; 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 'cutarv33) + +;;; cutarv33-theme.el ends here diff --git a/themes/cutar/cutarv41-dark-theme.el b/themes/cutar/cutarv41-dark-theme.el new file mode 100644 index 0000000..488f22f --- /dev/null +++ b/themes/cutar/cutarv41-dark-theme.el @@ -0,0 +1,149 @@ +;;; cutarv41-dark-theme.el --- A high-contrast dark theme for TUI Emacs -*- lexical-binding: t; no-byte-compile: t; -*- + +(deftheme cutarv41-dark + "Inverted high-contrast dark theme optimized for TUI/Terminal Emacs.") + +(let ((class '((class color) (min-colors 89))) + ;; --- Palette (Inverted from cutarv41) --- + ;; Base UI + (bg "#000000") ;; Deep dark background (Inverted from #f8f8ff) + (fg "#ffffff") ;; Ghost white foreground (Inverted from #000000) + (cursor "#ffffff") ;; Cursor bg + (selection "#3e4481") ;; Muted blue selection (Adjusted from #aaafff for dark contrast) + + ;; ANSI Normal (Lightened for visibility on dark bg) + (dark-blue "#4da6ff") ;; Lighter blue (Adjusted from #007cbf) + (red "#ff6b6b") ;; Lighter red (Adjusted from #cf3f29) + (medium-blue "#6da6ff") ;; Lighter blue (Adjusted from #2374de) + (orange "#ffb347") ;; Lighter orange (Adjusted from #c75e10) + (magenta "#d18ecb") ;; Lighter magenta (Adjusted from #b05197) + (green "#8fbc8f") ;; Lighter green (Adjusted from #429e66) + (cyan "#80daeb") ;; Lighter cyan (Adjusted from #129cc9) + (purple "#c8a0f2") ;; Lighter purple (Adjusted from #a64dd6) + + ;; ANSI Bright (Retained from base as they are already light) + (light-blue "#7cc9f2") + (light-red "#f07b69") + (accent-blue "#6f9ff2") + (yellow "#f0b94a") + (accent-pink "#EF89DF") + (bright-green "#2cd45c") + (bright-cyan "#11ddee") + (light-purple "#c8a0f2")) + + (custom-theme-set-faces + 'cutarv41-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 ,dark-blue :extend t)))) + `(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)))) + + ;; --- Syntax Highlighting (Font Lock) --- + `(font-lock-comment-face ((,class (:foreground ,"#eef" :slant italic)))) + `(font-lock-comment-delimiter-face ((,class (:foreground ,bright-green :slant italic)))) + `(font-lock-keyword-face ((,class (:foreground ,medium-blue :weight bold)))) + `(font-lock-string-face ((,class (:foreground ,green)))) + `(font-lock-regexp-grouping-backslash ((,class (:foreground ,yellow)))) + `(font-lock-regexp-grouping-construct ((,class (:foreground ,light-red)))) + `(font-lock-function-name-face ((,class (:foreground ,cyan :weight bold)))) + `(font-lock-variable-name-face ((,class (:foreground ,medium-blue)))) + `(font-lock-type-face ((,class (:foreground ,purple)))) + `(font-lock-constant-face ((,class (:foreground ,light-red)))) + `(font-lock-builtin-face ((,class (:foreground ,orange)))) + `(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)))) + + ;; --- Mode-line --- + `(mode-line ((,class (:background ,accent-pink :foreground ,bg)))) + `(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 --- + `(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)))) + + ;; --- Package Specifics --- + ;; Doom Modeline + `(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)))) + `(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 + `(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 'cutarv41-dark) + +;;; cutarv41-dark-theme.el ends here diff --git a/themes/cutar/cutarv41-dark-theme.el~ b/themes/cutar/cutarv41-dark-theme.el~ new file mode 100644 index 0000000..17e54c2 --- /dev/null +++ b/themes/cutar/cutarv41-dark-theme.el~ @@ -0,0 +1,149 @@ +;;; cutarv41-dark-theme.el --- A high-contrast dark theme for TUI Emacs -*- lexical-binding: t; no-byte-compile: t; -*- + +(deftheme cutarv41-dark + "Inverted high-contrast dark theme optimized for TUI/Terminal Emacs.") + +(let ((class '((class color) (min-colors 89))) + ;; --- Palette (Inverted from cutarv41) --- + ;; Base UI + (bg "#0d0d0d") ;; Deep dark background (Inverted from #f8f8ff) + (fg "#f8f8ff") ;; Ghost white foreground (Inverted from #000000) + (cursor "#0d0d0d") ;; Cursor bg + (selection "#3e4481") ;; Muted blue selection (Adjusted from #aaafff for dark contrast) + + ;; ANSI Normal (Lightened for visibility on dark bg) + (dark-blue "#4da6ff") ;; Lighter blue (Adjusted from #007cbf) + (red "#ff6b6b") ;; Lighter red (Adjusted from #cf3f29) + (medium-blue "#6da6ff") ;; Lighter blue (Adjusted from #2374de) + (orange "#ffb347") ;; Lighter orange (Adjusted from #c75e10) + (magenta "#d18ecb") ;; Lighter magenta (Adjusted from #b05197) + (green "#8fbc8f") ;; Lighter green (Adjusted from #429e66) + (cyan "#80daeb") ;; Lighter cyan (Adjusted from #129cc9) + (purple "#c8a0f2") ;; Lighter purple (Adjusted from #a64dd6) + + ;; ANSI Bright (Retained from base as they are already light) + (light-blue "#7cc9f2") + (light-red "#f07b69") + (accent-blue "#6f9ff2") + (yellow "#f0b94a") + (accent-pink "#EF89DF") + (bright-green "#2cd45c") + (bright-cyan "#11ddee") + (light-purple "#c8a0f2")) + + (custom-theme-set-faces + 'cutarv41-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 ,dark-blue :extend t)))) + `(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)))) + + ;; --- Syntax Highlighting (Font Lock) --- + `(font-lock-comment-face ((,class (:foreground ,"#eef" :slant italic)))) + `(font-lock-comment-delimiter-face ((,class (:foreground ,bright-green :slant italic)))) + `(font-lock-keyword-face ((,class (:foreground ,medium-blue :weight bold)))) + `(font-lock-string-face ((,class (:foreground ,green)))) + `(font-lock-regexp-grouping-backslash ((,class (:foreground ,yellow)))) + `(font-lock-regexp-grouping-construct ((,class (:foreground ,light-red)))) + `(font-lock-function-name-face ((,class (:foreground ,cyan :weight bold)))) + `(font-lock-variable-name-face ((,class (:foreground ,medium-blue)))) + `(font-lock-type-face ((,class (:foreground ,purple)))) + `(font-lock-constant-face ((,class (:foreground ,light-red)))) + `(font-lock-builtin-face ((,class (:foreground ,orange)))) + `(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)))) + + ;; --- Mode-line --- + `(mode-line ((,class (:background ,accent-pink :foreground ,bg)))) + `(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 --- + `(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)))) + + ;; --- Package Specifics --- + ;; Doom Modeline + `(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)))) + `(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 + `(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 'cutarv41-dark) + +;;; cutarv41-dark-theme.el ends here diff --git a/themes/cutar/cutarv41-theme.el~ b/themes/cutar/cutarv41-theme.el~ new file mode 100644 index 0000000..fd6661f --- /dev/null +++ b/themes/cutar/cutarv41-theme.el~ @@ -0,0 +1,149 @@ +;;; cutarv41-theme.el --- A high-contrast light theme with blue/pink accents -*- lexical-binding: t; no-byte-compile: t; -*- + +(deftheme cutarv41 + "A high-contrast light theme with blue/pink accents, optimized for clarity and syntax highlighting.") + +(let ((class '((class color) (min-colors 89))) + ;; --- Palette --- + ;; Base UI + (bg "#f8f8ff") ;; Default background + (fg "#000000") ;; Default foreground + (cursor "#f8f8ff") ;; Cursor bg + (selection "#aaafff") ;; Region/selected text background + + ;; ANSI Normal + (dark-blue "#007cbf") ;; Fringe, minibuffer prompts, function names, line numbers + (red "#cf3f29") ;; Errors, negation chars + (medium-blue "#2374de") ;; Keywords, active hyperlinks + (orange "#c75e10") ;; Constants, debug indicators + (magenta "#b05197") ;; Strings, variables, UI dividers + (green "#429e66") ;; Docstrings, comment delimiters + (cyan "#129cc9") ;; Types/Classes + (purple "#a64dd6") ;; Built-ins, visited links + + ;; ANSI Bright + (light-blue "#7cc9f2") ;; Inactive mode-line/tabs background + (light-red "#f07b69") ;; Warnings, regex constructs + (accent-blue "#6f9ff2") ;; Accents + (yellow "#f0b94a") ;; Active search, warnings + (accent-pink "#EF89DF") ;; Active mode-line/tabs + (bright-green "#2cd45c") ;; Status indicators + (bright-cyan "#11ddee") ;; hl-line hl-tab + (light-purple "#cca0ff")) ;; Accents + + (custom-theme-set-faces + 'cutarv41 + + ;; --- 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)))) + `(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)))) + + ;; --- Syntax Highlighting (Font Lock) --- + `(font-lock-comment-face ((,class (:foreground ,"#666666" :slant italic)))) + `(font-lock-comment-delimiter-face ((,class (:foreground ,bright-green :slant italic)))) + `(font-lock-keyword-face ((,class (:foreground ,medium-blue :weight bold)))) + `(font-lock-string-face ((,class (:foreground ,green)))) + `(font-lock-regexp-grouping-backslash ((,class (:foreground ,yellow)))) + `(font-lock-regexp-grouping-construct ((,class (:foreground ,light-red)))) + `(font-lock-function-name-face ((,class (:foreground ,cyan :weight bold)))) + `(font-lock-variable-name-face ((,class (:foreground ,medium-blue)))) + `(font-lock-type-face ((,class (:foreground ,purple)))) + `(font-lock-constant-face ((,class (:foreground ,light-red)))) + `(font-lock-builtin-face ((,class (:foreground ,orange)))) + `(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)))) + + ;; --- Mode-line --- + `(mode-line ((,class (:background ,accent-pink :foreground ,bg)))) + `(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 --- + `(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)))) + + ;; --- Package Specifics --- + ;; Doom Modeline + `(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)))) + `(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 + `(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 'cutarv41) + +;;; cutarv41-theme.el ends here diff --git a/themes/cutarv41-theme.el b/themes/cutarv41-theme.el new file mode 100644 index 0000000..0a3e0da --- /dev/null +++ b/themes/cutarv41-theme.el @@ -0,0 +1,149 @@ +;;; cutarv41-theme.el --- A high-contrast light theme with blue/pink accents -*- lexical-binding: t; no-byte-compile: t; -*- + +(deftheme cutarv41 + "A high-contrast light theme with blue/pink accents, optimized for clarity and syntax highlighting.") + +(let ((class '((class color) (min-colors 256))) + ;; --- Palette --- + ;; Base UI + (bg "#f8f8ff") ;; Default background + (fg "#010101") ;; Default foreground + (cursor "#ef89df") ;; Cursor bg + (selection "#aaafff") ;; Region/selected text background + + ;; ANSI Normal + (dark-blue "#007cbf") ;; Fringe, minibuffer prompts, function names, line numbers + (red "#cf3f29") ;; Errors, negation chars + (medium-blue "#2374de") ;; Keywords, active hyperlinks + (orange "#c75e10") ;; Constants, debug indicators + (magenta "#b05197") ;; Strings, variables, UI dividers + (green "#429e66") ;; Docstrings, comment delimiters + (cyan "#129cc9") ;; Types/Classes + (purple "#a64dd6") ;; Built-ins, visited links + + ;; ANSI Bright + (light-blue "#7cc9f2") ;; Inactive mode-line/tabs background + (light-red "#f07b69") ;; Warnings, regex constructs + (accent-blue "#6f9ff2") ;; Accents + (yellow "#f0b94a") ;; Active search, warnings + (accent-pink "#EF89DF") ;; Active mode-line/tabs + (bright-green "#2cd45c") ;; Status indicators + (bright-cyan "#11ddee") ;; hl-line hl-tab + (light-purple "#cca0ff")) ;; Accents + + (custom-theme-set-faces + 'cutarv41 + + ;; --- 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)))) + `(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)))) + + ;; --- Syntax Highlighting (Font Lock) --- + `(font-lock-comment-face ((,class (:foreground ,"#666666" :slant italic)))) + `(font-lock-comment-delimiter-face ((,class (:foreground ,bright-green :slant italic)))) + `(font-lock-keyword-face ((,class (:foreground ,medium-blue :weight bold)))) + `(font-lock-string-face ((,class (:foreground ,green)))) + `(font-lock-regexp-grouping-backslash ((,class (:foreground ,yellow)))) + `(font-lock-regexp-grouping-construct ((,class (:foreground ,light-red)))) + `(font-lock-function-name-face ((,class (:foreground ,cyan :weight bold)))) + `(font-lock-variable-name-face ((,class (:foreground ,medium-blue)))) + `(font-lock-type-face ((,class (:foreground ,purple)))) + `(font-lock-constant-face ((,class (:foreground ,light-red)))) + `(font-lock-builtin-face ((,class (:foreground ,orange)))) + `(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)))) + + ;; --- Mode-line --- + `(mode-line ((,class (:background ,accent-pink :foreground ,bg)))) + `(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 --- + `(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)))) + + ;; --- Package Specifics --- + ;; Doom Modeline + `(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)))) + `(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 + `(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 'cutarv41) + +;;; cutarv41-theme.el ends here