;;; sludge-theme.el --- Sludge theme -*- lexical-binding: t -*- ;; Copyright (C) 2025 Tyler Triplett ;; License: GNU GPL 3.0 or later <https://www.gnu.org/licenses/gpl-3.0.html> ;; This 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. ;;; Commentary: ;; Sludge, a Low-contrast Ugly Desaturated Green Emacs ;; Inspired by my website's colorscheme ;;; Code: (deftheme sludge "A theme for Emacs.") (let ((sludge-bg "#090909") ;; background ;; (sludge-fg "#768e75") ;; foreground ;; (sludge-bg-alt "#151515") ;; for ui against bg ;; (sludge-alt-alt "#212121") ;; for ui against alt ;; new (sludge-slime "#4b604a") ;; green ;; (sludge-mucus "#6f806e") ;; light green ;; new (sludge-mire "#074212") ;; dark green ;; (sludge-lucent "#6FB07C") ;; bright green ;; (sludge-warn "#3C0000") ;; dark red ;; (sludge-dull "#8D8D8D") ;; grey ;; (sludge-geiger "#a8aa61") ;; muddy yellow ;; new (sludge-siren "#632424") ;; medium red ;; new (sludge-rust "#4b4b3d") ;; brownish color ;; new (sludge-runoff "#4b6a83") ;; medium blue-grey ;; new (sludge-slurry "#2f4e66") ;; dark blue-grey ;; new (sludge-decay "#3c316c") ;; dark purple ;; new (sludge-ooze "#473f6c") ;; medium purple ;; new (sludge-foam "#52726d") ;; medium green-grey ;; new (sludge-fumes "#85a09c")) ;; light green-grey ;; new (custom-theme-set-faces 'sludge ;;; Basic `(default ((t (:foreground ,sludge-fg :background ,sludge-bg)))) `(cursor ((t (:background ,sludge-dull :foreground ,sludge-bg)))) `(highlight ((t (:background ,sludge-bg-alt :foreground ,sludge-fg)))) `(vertical-border ((t (:foreground ,sludge-fg)))) `(line-number ((t (:foreground ,sludge-slime :background ,sludge-bg-alt)))) `(line-number-current-line ((t (:foreground ,sludge-mucus :background ,sludge-alt-alt)))) '(bold ((t (:weight semibold)))) '(italic ((t (:slant italic)))) '(bold-italic ((t (:weight semibold :slant italic)))) `(region ((t (:background ,sludge-bg-alt :foreground ,sludge-lucent)))) `(fringe ((t (:background ,sludge-bg)))) `(hl-line ((t (:foreground ,sludge-mucus :background ,sludge-bg-alt)))) `(link ((t (:underline t :foreground ,sludge-fumes :slant italic)))) `(shadow ((t (:foreground ,sludge-slime)))) `(success ((t (:foreground ,sludge-lucent)))) `(warning ((t (:foreground ,sludge-geiger)))) `(error ((t (:foreground ,sludge-warn)))) `(preview-face ((t (:foreground ,sludge-fg)))) `(match ((t (:background ,sludge-lucent)))) `(mode-line ((t (:background ,sludge-bg-alt :foreground ,sludge-fg)))) `(mode-line-inactive ((t (:background ,sludge-bg-alt :foreground ,sludge-mire)))) `(mode-line-emphasis ((t (:background ,sludge-bg :foreground ,sludge-fg)))) `(mode-line-highlight ((t (:background ,sludge-lucent :foreground ,sludge-bg)))) `(header-line ((t (:background ,sludge-bg :foreground ,sludge-fg)))) `(header-line-highlight ((t (:foreground ,sludge-slime :background ,sludge-bg :weight bold)))) `(completions-annotations ((t (:foreground ,sludge-fg)))) `(completions-common-part ((t (:foreground ,sludge-lucent :weight bold :underline t)))) `(completions-first-difference ((t (:foreground ,sludge-dull)))) `(trailing-whitespace ((t (:background ,sludge-warn)))) `(isearch ((t (:foreground ,sludge-lucent)))) `(isearch-fail ((t (:foreground ,sludge-warn)))) `(isearch-group-1 ((t (:foreground ,sludge-lucent :underline t)))) `(buffer-menu-buffer ((t (:foreground ,sludge-fg)))) `(minibuffer-prompt ((t (:foreground ,sludge-fg)))) `(show-paren-match ((t (:foreground ,sludge-slime :background ,sludge-mire)))) `(show-paren-mismatch ((t (:foreground ,sludge-warn :weight bold)))) `(lazy-highlight ((t (:foreground ,sludge-lucent :underline t)))) `(secondary-selection ((t (:foreground ,sludge-fg :underline t)))) `(tooltip ((t (:foreground ,sludge-fg :background ,sludge-bg-alt)))) `(read-multiple-choice-face ((t (:foreground ,sludge-lucent :weight bold)))) `(nobreak-hyphen ((t (:foreground ,sludge-lucent)))) `(nobreak-space ((t (:foreground ,sludge-lucent)))) `(help-argument-name ((t (:foreground ,sludge-lucent)))) `(help-key-binding ((t (:foreground ,sludge-lucent :underline t)))) `(tabulated-list-fake-header ((t (:foreground ,sludge-lucent :weight bold)))) `(tool-bar ((t (:foreground ,sludge-fg :background ,sludge-dull)))) `(escape-glyph ((t (:foreground ,sludge-dull)))) ;;; Font Lock `(font-lock-builtin-face ((t (:foreground ,sludge-mucus)))) `(font-lock-comment-face ((t (:foreground ,sludge-mire :slant italic)))) `(font-lock-comment-delimiter-face ((t (:foreground ,sludge-mire :slant italic)))) `(font-lock-constant-face ((t (:foreground ,sludge-fg)))) `(font-lock-doc-face ((t (:foreground ,sludge-mire)))) `(font-lock-function-name-face ((t (:foreground ,sludge-mucus)))) `(font-lock-keyword-face ((t (:foreground ,sludge-slime)))) `(font-lock-preprocessor-face ((t (:foreground ,sludge-warn)))) `(font-lock-reference-face ((t (:foreground ,sludge-fg)))) `(font-lock-string-face ((t (:foreground ,sludge-dull)))) `(font-lock-type-face ((t (:foreground ,sludge-fg)))) `(font-lock-variable-name-face ((t (:foreground ,sludge-fg)))) `(font-lock-warning-face ((t (:foreground ,sludge-warn)))) ;;; Electric `(show-paren-match ((t (:foreground ,sludge-dull :background ,sludge-mire)))) `(show-paren-match-expression ((t (:foreground ,sludge-bg :background ,sludge-fg)))) `(show-paren-mismatch ((t (:foreground ,sludge-warn :background ,sludge-bg :weight bold)))) ;;; Treemacs `(treemacs-root-face ((t (:foreground ,sludge-dull :weight bold)))) `(treemacs-directory-face ((t (:foreground ,sludge-dull)))) ;;; Dired `(dired-directory ((t (:foreground ,sludge-mucus)))) `(dired-symlink ((t (:foreground ,sludge-mire :slant italic)))) `(dired-header ((t (:foreground ,sludge-lucent :weight bold)))) `(dired-marked ((t (:foreground ,sludge-runoff)))) `(dired-flagged ((t (:foreground ,sludge-fumes)))) `(dired-broken-symlink ((t (:slant italic :strike-through ,sludge-warn)))) ;;; Ivy `(ivy-current-match ((t (:foreground ,sludge-lucent :weight bold :underline t)))) `(ivy-minibuffer-match-face-1 ((t (:foreground ,sludge-fg)))) `(ivy-minibuffer-match-face-2 ((t (:foreground ,sludge-lucent :weight bold)))) `(ivy-minibuffer-match-face-3 ((t (:foreground ,sludge-fumes :weight bold)))) `(ivy-minibuffer-match-face-4 ((t (:foreground ,sludge-runoff :weight bold)))) ;;; Swiper `(swiper-match-face-1 ((t (:foreground ,sludge-fg :weight bold :underline t)))) `(swiper-match-face-2 ((t (:foreground ,sludge-lucent :weight bold :underline t)))) `(swiper-match-face-3 ((t (:foreground ,sludge-fumes :weight bold :underline t)))) `(swiper-match-face-4 ((t (:foreground ,sludge-runoff :weight bold :underline t)))) ;;; Company `(company-tooltip ((t (:background ,sludge-bg :foreground ,sludge-slime)))) `(company-tooltip-mouse ((t (:background ,sludge-bg-alt :foreground ,sludge-lucent)))) `(company-tooltip-selection ((t (:background ,sludge-bg-alt :foreground ,sludge-lucent)))) `(company-scrollbar-fg ((t (:background ,sludge-fg :foreground ,sludge-fg)))) `(company-scrollbar-bg ((t (:background ,sludge-fg :foreground ,sludge-fg)))) `(company-tooltip-common ((t (:foreground ,sludge-fg)))) `(company-tooltip-common-selection ((t (:foreground ,sludge-lucent :underline t)))) `(company-tooltip-annotation ((t (:foreground ,sludge-fg)))) `(company-tooltip-annotation-selection ((t (:foreground ,sludge-dull)))) `(company-tooltip-scrollbar-thumb ((t (:foreground ,sludge-dull :background ,sludge-dull)))) `(company-tooltip-scrollbar-track ((t (:foreground ,sludge-dull :background ,sludge-dull)))) `(company-tooltip-annotation-selection ((t (:foreground ,sludge-lucent)))) `(company-preview ((t (:foreground ,sludge-slime)))) `(company-preview-common ((t (:foreground ,sludge-slime :weight bold)))) ;;; Flycheck `(flycheck-error ((t (:underline (:style wave :color ,sludge-siren))))) `(flycheck-warning ((t (:underline (:style wave :color ,sludge-geiger))))) `(flycheck-info ((t (:underline (:style wave :color ,sludge-lucent))))) ;; ;;; Term `(ansi-color-black ((t (:foreground ,sludge-bg :background ,sludge-bg)))) `(ansi-color-bright-black ((t (:foreground ,sludge-bg-alt :background ,sludge-bg-alt)))) `(ansi-color-red ((t (:foreground ,sludge-warn :background ,sludge-warn)))) `(ansi-color-bright-red ((t (:foreground ,sludge-siren :background ,sludge-siren)))) `(ansi-color-green ((t (:foreground ,sludge-slime :background ,sludge-slime)))) `(ansi-color-bright-green ((t (:foreground ,sludge-lucent :background ,sludge-lucent)))) `(ansi-color-yellow ((t (:foreground ,sludge-rust :background ,sludge-rust)))) `(ansi-color-bright-yellow ((t (:foreground ,sludge-geiger :background ,sludge-geiger)))) `(ansi-color-blue ((t (:foreground ,sludge-slurry :background ,sludge-runoff)))) `(ansi-color-bright-blue ((t (:foreground ,sludge-runoff :background ,sludge-runoff)))) `(ansi-color-magenta ((t (:foreground ,sludge-decay :background ,sludge-decay)))) `(ansi-color-bright-magenta ((t (:foreground ,sludge-ooze :background ,sludge-ooze)))) `(ansi-color-cyan ((t (:foreground ,sludge-foam :background ,sludge-foam)))) `(ansi-color-bright-cyan ((t (:foreground ,sludge-fumes :background ,sludge-fumes)))) `(ansi-color-white ((t (:foreground ,sludge-fg :background ,sludge-fg)))) `(ansi-color-bright-white ((t (:foreground ,sludge-dull :background ,sludge-dull)))))) ;;;###autoload (when (and (boundp 'custom-theme-load-path) load-file-name) (add-to-list 'custom-theme-load-path (file-name-as-directory (file-name-directory load-file-name)))) (provide 'sludge) ;;; sludge-theme.el ends here