;;; doom-bluloco-light-theme.el --- ported from VSCode's Bluloco Light Theme -*- lexical-binding: t; no-byte-compile: t; -*-
;;
;; Author: RazikSF <https://github.com/RazikSF>
;; Maintainer:
;; Source: https://github.com/uloco/theme-bluloco-light
;;
;;; Commentary:
;;; Code:

(require 'doom-themes)

;;
;;; Variables

(defgroup doom-bluloco-light-theme nil
  "Options for the `doom-bluloco' themes."
  :group 'doom-themes)

(defcustom doom-bluloco-light-padded-modeline doom-themes-padded-modeline
  "If non-nil, adds a 4px padding to the mode-line. Can be an integer to determine the exact padding."
  :group 'doom-bluloco-light-theme
  :type '(choice integer boolean))

;;
;;; Theme definition

(def-doom-theme doom-bluloco-light
  "A light theme inspired by bluloco light theme"
  :family 'doom-bluloco
  :background-mode 'light

  ;; name        default     256       16
  ((bg           '("#f9f9f9" "white"   "white"        ))
   (fg           '("#383a42" "#424242" "black"        ))

   (bg-alt       '("#e7e7e7" "white"   "white"        ))
   (fg-alt       '("#c6c7c7" "#c7c7c7" "brightblack"  ))

   (base0        '("#f1f1f1" "#f0f0f0" "white"        ))
   (base1        '("#e7e7e7" "#e7e7e7" "brightblack"  ))
   (base2        '("#dfdfdf" "#dfdfdf" "brightblack"  ))
   (base3        '("#c6c7c7" "#c6c7c7" "brightblack"  ))
   (base4        '("#9ca0a4" "#9ca0a4" "brightblack"  ))
   (base5        '("#383a42" "#424242" "brightblack"  ))
   (base6        '("#202328" "#2e2e2e" "brightblack"  ))
   (base7        '("#1c1f24" "#1e1e1e" "brightblack"  ))
   (base8        '("#1b2229" "black"   "black"        ))

   (grey         '("#a0a1a7" "#a0a1a7" "brightblack"  ))
   (red          '("#d52753" "#d7005f" "red"          ))
   (orange       '("#df631c" "#d75f00" "brightred"    ))
   (brown        '("#a05a48" "#af5f5f" "brown"        ))
   (green        '("#23974a" "#00875f" "green"        ))
   (teal         '("#40B8C5" "#5fafd7" "brightgreen"  ))
   (yellow       '("#c5a332" "#d7af5f" "yellow"       ))
   (blue         '("#0098dd" "#0087d7" "brightblue"   ))
   (dark-blue    '("#275fe4" "#005fd7" "blue"         ))
   (magenta      '("#ce33c0" "#d75faf" "magenta"      ))
   (violet       '("#823ff1" "#875fff" "brightmagenta"))
   (dark-violet  '("#7a82da" "#8787d7" "brightmagenta"))
   (cyan         '("#33c0ce" "#5fafd7" "brightcyan"   ))
   (dark-cyan    '("#217b84" "#008080" "brightcyan"   ))

   ;; custom colours
   (rainbow-red       '("#f067f0"))
   (rainbow-yellow    '("#B3BA00"))
   (rainbow-blue      '("#0ab6ff"))
   (rainbow-orange    '("#ffa023"))
   (rainbow-green     '("#1fc255"))
   (rainbow-violet    '("#a557ff"))
   (rainbow-cyan      '("#0e91a8"))
   (rainbow-indigo    '("#383A42"))

   (highlight      blue)
   (vertical-bar   (doom-darken base1 0.1))
   (selection      dark-blue)
   (builtin        green)
   (comments       grey)
   (doc-comments   yellow)
   (constants      violet)
   (functions      green)
   (keywords       blue)
   (methods        green)
   (operators      dark-violet)
   (type           red)
   (strings        yellow)
   (variables      teal)
   (numbers        magenta)
   (region         `(,(doom-darken (car bg-alt) 0.075) ,@(doom-darken (cdr base0) 0.075)))
   (error          red)
   (warning        orange)
   (success        green)
   (vc-modified    orange)
   (vc-added       green)
   (vc-deleted     red)

   ;; custom categories

   (modeline-fg               fg)
   (modeline-fg-alt           (doom-blend violet base4 0.2))
   (modeline-bg               base1)
   (modeline-bg-alt           base2)
   (modeline-bg-inactive      (doom-darken bg 0.1))
   (modeline-bg-alt-inactive  `(,(doom-darken (car bg-alt) 0.05) ,@(cdr base1)))

   (-modeline-pad
    (when doom-bluloco-light-padded-modeline
      (if (integerp doom-bluloco-light-padded-modeline) doom-bluloco-light-padded-modeline 4))))

;;;; Base theme face overrides

(((font-lock-operator-face &override) :foreground dark-violet)

   ;; line-number
   (line-number :foreground comments)
   (line-number-current-line :foreground comments)

   ;; mode-line
   (mode-line
    :background modeline-bg :foreground modeline-fg
    :box (if -modeline-pad `(:line-width ,-modeline-pad :color ,modeline-bg)))
   (mode-line-inactive
    :background modeline-bg-inactive :foreground modeline-fg-alt
    :box (if -modeline-pad `(:line-width ,-modeline-pad :color ,modeline-bg-inactive)))
   (mode-line-emphasis :foreground highlight)

   ;; css-mode / scss-mode
   (css-proprietary-property :foreground brown :background base2)
   (css-property             :foreground brown)
   (css-selector             :foreground dark-blue)

   ;; diredfl
   (diredfl-date-time :foreground cyan :weight 'normal)

   ;; posframe
   (ivy-posframe :background base2)

   ;; js2-mode
   (js2-object-property :foreground brown)
   (js2-object-property-access :foreground brown)

   ;; latex
   ((font-latex-math-face &override) :foreground yellow)

   ;; magit
   (magit-blame-heading :foreground orange :background bg-alt)
   (magit-diff-removed :foreground (doom-darken red 0.2) :background (doom-blend red bg 0.1))
   (magit-diff-removed-highlight :foreground red :background (doom-blend red bg 0.2) :bold bold)

   ;; markdown
   ((markdown-blockquote-face &override) :foreground violet)
   ((markdown-bold-face &override) :foreground red :weight 'bold)
   ((markdown-code-face &override) :foreground brown :background (doom-lighten base1 0.3))
   ((markdown-header-face &override) :inherit 'bold :foreground yellow)
   ((markdown-italic-face &override) :foreground orange :slant 'italic)
   ((markdown-link-face &override) :foreground dark-blue :underline t)
   ((markdown-markup-face &override) :foreground dark-violet)
   ((markdown-metadata-key-face &override) :foreground brown)
   ((markdown-pre-face &override) :foreground brown)
   ((markdown-url-face &override) :foreground blue)
   (markdown-footnote-marker-face :foreground dark-blue)
   (markdown-language-keyword-face :foreground brown)
   (markdown-strike-through-face :foreground grey :strike-through t)

   ;; outline
   ((outline-1 &override) :foreground rainbow-red)
   ((outline-2 &override) :foreground rainbow-yellow)
   ((outline-3 &override) :foreground rainbow-blue)
   ((outline-4 &override) :foreground rainbow-orange)
   ((outline-5 &override) :foreground rainbow-green)
   ((outline-6 &override) :foreground rainbow-violet)
   ((outline-7 &override) :foreground rainbow-cyan)
   ((outline-8 &override) :foreground rainbow-indigo)

   ;; org-mode
   ((org-block &override) :background (doom-lighten base1 0.3))
   ((org-code &override) :foreground brown :background bg)
   ((org-document-title &override) :inherit 'bold :foreground green :height 1.25)
   ((org-link &override) :foreground dark-blue :weight 'normal)
   ((org-meta-line &override) :foreground yellow)
   ((org-quote &override) :foreground violet :background bg-alt)
   ((org-table &override) :foreground brown)
   ((org-verbatim &override) :foreground brown :background bg)
   (org-ellipsis :underline nil :background bg)
   (org-level-1 :inherit 'bold :foreground rainbow-red :height 1.2)
   (org-level-2 :inherit 'bold :foreground rainbow-yellow :height 1.15)
   (org-level-3 :inherit 'bold :foreground rainbow-blue :height 1.1)
   (org-level-4 :inherit 'bold :foreground rainbow-orange :height 1.05)
   (org-level-5 :inherit 'bold :foreground rainbow-green)
   (org-level-6 :inherit 'bold :foreground rainbow-violet)
   (org-level-7 :inherit 'bold :foreground rainbow-cyan)
   (org-level-8 :inherit 'bold :foreground rainbow-indigo)

   ;; org-modern-indent
   (org-modern-indent-line :inherit 'org-block-begin-line)

   ;; rainbow delimiters
   (rainbow-delimiters-depth-1-face :foreground rainbow-red)
   (rainbow-delimiters-depth-2-face :foreground rainbow-yellow)
   (rainbow-delimiters-depth-3-face :foreground rainbow-blue)
   (rainbow-delimiters-depth-4-face :foreground rainbow-orange)
   (rainbow-delimiters-depth-5-face :foreground rainbow-green)
   (rainbow-delimiters-depth-6-face :foreground rainbow-violet)
   (rainbow-delimiters-depth-7-face :foreground rainbow-cyan)
   (rainbow-delimiters-depth-8-face :foreground rainbow-indigo)

   ;; selectrum
   (selectrum-current-candidate :background base2)

   ;; solaire-mode
   (solaire-mode-line-face
    :inherit 'mode-line
    :background modeline-bg-alt
    :box (if -modeline-pad `(:line-width ,-modeline-pad :color ,modeline-bg-alt)))
   (solaire-mode-line-inactive-face
    :inherit 'mode-line-inactive
    :background modeline-bg-alt-inactive
    :box (if -modeline-pad `(:line-width ,-modeline-pad :color ,modeline-bg-alt-inactive)))

   ;; tree-sitter
   (tree-sitter-hl-face:constant.builtin :foreground violet)
   (tree-sitter-hl-face:escape :foreground orange)
   (tree-sitter-hl-face:function.call :foreground functions)
   (tree-sitter-hl-face:function.special :foreground operators)
   (tree-sitter-hl-face:label :foreground variables)
   (tree-sitter-hl-face:number :foreground numbers)
   (tree-sitter-hl-face:operator :foreground operators)
   (tree-sitter-hl-face:property :foreground brown :slant 'italic)
   (tree-sitter-hl-face:punctution :foreground operators)
   (tree-sitter-hl-face:tag :foreground keywords)
   (tree-sitter-hl-face:type :foreground type)

   ;;vertico
   (vertico-current :background base2)

   ;; web-mode
   (web-mode-html-entity-face :foreground violet)
   (web-mode-html-attr-name-face :foreground orange)
   (web-mode-html-tag-bracket-face :foreground dark-blue)
   (web-mode-html-tag-face :foreground dark-blue))

;;;; Base theme variable overrides-
())

;;; doom-bluloco-light-theme.el ends here
