aboutsummaryrefslogtreecommitdiff
path: root/nvim/dot-config/nvim-final/colors
diff options
context:
space:
mode:
authorMohammad Reza Karimi <m.r.karimi.j@gmail.com>2026-01-04 21:28:36 -0500
committerMohammad Reza Karimi <m.r.karimi.j@gmail.com>2026-01-04 21:28:36 -0500
commit06d1242317f7159ccf3014f0a1480e7c56236ebb (patch)
tree89863b3287ae2c7cc88cd532220f18c38e8d8657 /nvim/dot-config/nvim-final/colors
parent5a41da5881a11ba3fdc3890c342aa3b7eb53e0cf (diff)
add all sorts of things
Diffstat (limited to 'nvim/dot-config/nvim-final/colors')
-rw-r--r--nvim/dot-config/nvim-final/colors/solarized.lua490
1 files changed, 490 insertions, 0 deletions
diff --git a/nvim/dot-config/nvim-final/colors/solarized.lua b/nvim/dot-config/nvim-final/colors/solarized.lua
new file mode 100644
index 0000000..090090b
--- /dev/null
+++ b/nvim/dot-config/nvim-final/colors/solarized.lua
@@ -0,0 +1,490 @@
+local function oklab_to_linear_rgb(L, a, b)
+ -- Oklab to LMS conversion
+ -- Reference: Björn Ottosson, "A perceptual color space for image processing"
+ local l = L + 0.3963377774 * a + 0.2158037573 * b
+ local m = L - 0.1055613458 * a - 0.0638541728 * b
+ local s = L - 0.0894841775 * a - 1.2914855480 * b
+
+ -- LMS to linear RGB
+ -- Cube the LMS values (inverse of cube root)
+ local l3, m3, s3 = l * l * l, m * m * m, s * s * s
+
+ -- Linear RGB transformation matrix
+ local r = 4.0767416621 * l3 - 3.3077115913 * m3 + 0.2309699292 * s3
+ local g = -1.2684380046 * l3 + 2.6097574011 * m3 - 0.3413193965 * s3
+ local b_out = -0.0041960863 * l3 - 0.7034186147 * m3 + 1.7076147010 * s3
+
+ return r, g, b_out
+end
+
+local function linear_to_srgb_component(c)
+ -- sRGB gamma correction (companding)
+ -- Reference: IEC 61966-2-1:1999
+ if c <= 0.0031308 then
+ return c * 12.92 -- Linear segment
+ else
+ return 1.055 * (c ^ (1 / 2.4)) - 0.055 -- Power function (gamma ≈ 2.2)
+ end
+end
+
+local function oklab_to_srgb(L, a, b)
+ local r, g, b_comp = oklab_to_linear_rgb(L, a, b)
+
+ r = linear_to_srgb_component(r)
+ g = linear_to_srgb_component(g)
+ b_comp = linear_to_srgb_component(b_comp)
+
+ -- Clamp and convert to 8-bit
+ r = math.floor(math.max(0, math.min(1, r)) * 255 + 0.5)
+ g = math.floor(math.max(0, math.min(1, g)) * 255 + 0.5)
+ b_comp = math.floor(math.max(0, math.min(1, b_comp)) * 255 + 0.5)
+
+ return string.format('#%02x%02x%02x', r, g, b_comp)
+end
+
+-- ═══════════════════════════════════════════════════════════════════════════
+-- MONOTONE COLORS
+-- ═══════════════════════════════════════════════════════════════════════════
+local base03 = oklab_to_srgb(0.267337, -0.037339, -0.031128)
+local base02 = oklab_to_srgb(0.309207, -0.039852, -0.033029)
+local base01 = oklab_to_srgb(0.523013, -0.021953, -0.017864)
+local base00 = oklab_to_srgb(0.568165, -0.021219, -0.019038)
+
+local base0 = oklab_to_srgb(0.709236, -0.023223, -0.013451)
+local base1 = oklab_to_srgb(0.697899, -0.015223, -0.004594)
+local base2 = oklab_to_srgb(0.930609, -0.001091, 0.026010)
+local base3 = oklab_to_srgb(0.973528, -0.000043, 0.026053)
+
+-- ═══════════════════════════════════════════════════════════════════════════
+-- ACCENT COLORS
+-- ═══════════════════════════════════════════════════════════════════════════
+local yellow = oklab_to_srgb(0.654479, 0.010005, 0.133641)
+local orange = oklab_to_srgb(0.63, 0.133661 * 0.69, 0.110183 * 0.69)
+local red = oklab_to_srgb(0.63, 0.183749 * 0.72, 0.094099 * 0.72)
+local magenta = oklab_to_srgb(0.592363, 0.201958, -0.014497)
+local violet = oklab_to_srgb(0.582316, 0.019953, -0.124557)
+local blue = oklab_to_srgb(0.614879, -0.059069, -0.126255)
+local cyan = oklab_to_srgb(0.643664, -0.101063, -0.013097)
+local green = oklab_to_srgb(0.644391, -0.072203, 0.132448)
+
+-- ═══════════════════════════════════════════════════════════════════════════
+-- MODE SELECTION
+-- ═══════════════════════════════════════════════════════════════════════════
+
+-- Set to 'dark' or 'light'
+local mode = vim.o.background or 'dark'
+
+local colors = {}
+
+if mode == 'dark' then
+ -- Dark mode: dark background, light text
+ colors.bg = base03
+ colors.bg_highlight = base02
+ colors.fg_comment = base01
+ colors.fg = base0
+ colors.fg_emphasis = base1
+else
+ colors.bg = base3
+ colors.bg_highlight = base2
+ colors.fg_comment = base1
+ colors.fg = base00
+ colors.fg_emphasis = base01
+end
+
+-- Accent colors are the same in both modes
+colors.yellow = yellow
+colors.orange = orange
+colors.red = red
+colors.magenta = magenta
+colors.violet = violet
+colors.blue = blue
+colors.cyan = cyan
+colors.green = green
+
+colors.cursorline_bg = colors.bg_highlight
+colors.selection_bg = base02
+colors.visual_bg = base02
+
+vim.g.colors_name = 'dicom'
+
+local function h(group, properties)
+ vim.api.nvim_set_hl(0, group, properties)
+end
+
+local function hex_to_rgb(hex)
+ hex = hex:gsub('#', '')
+ return {
+ tonumber(hex:sub(1, 2), 16),
+ tonumber(hex:sub(3, 4), 16),
+ tonumber(hex:sub(5, 6), 16),
+ }
+end
+
+local function rgb_to_hex(c)
+ return string.format('#%02x%02x%02x', c[1], c[2], c[3])
+end
+
+local function blend(fg, t, target_bg)
+ local a, b = hex_to_rgb(fg), hex_to_rgb(target_bg or colors.bg)
+ local c = {
+ math.floor(a[1] * (1 - t) + b[1] * t + 0.5),
+ math.floor(a[2] * (1 - t) + b[2] * t + 0.5),
+ math.floor(a[3] * (1 - t) + b[3] * t + 0.5),
+ }
+ return rgb_to_hex(c)
+end
+
+-- =============================================================================
+-- Research-Driven Syntax Highlighting Strategy
+-- Based on: Hannebauer et al. (2018), Tonsky (2025), Schloss (2023)
+-- =============================================================================
+
+-- 1. Core Editor Surface
+h('Normal', { fg = colors.fg, bg = colors.bg })
+h('EndOfBuffer', { fg = colors.bg })
+h('CursorLine', { bg = colors.cursorline_bg })
+h('CursorLineNr', { fg = colors.yellow, bold = true })
+h('LineNr', { fg = colors.fg_comment })
+h('WinSeparator', { fg = colors.bg_highlight, bg = colors.bg })
+
+-- 2. Visual & Search (High Arousal)
+h('Visual', { bg = colors.selection_bg })
+h('Search', { fg = colors.bg, bg = colors.yellow })
+h('IncSearch', { fg = colors.bg, bg = colors.orange })
+
+h('Keyword', { fg = colors.green })
+h('Statement', { fg = colors.green })
+h('Conditional', { fg = colors.green })
+h('Repeat', { fg = colors.green })
+
+h('Function', { fg = colors.blue })
+
+-- Types
+h('Type', { fg = colors.yellow })
+h('StorageClass', { fg = colors.yellow })
+h('Structure', { fg = colors.yellow })
+h('Typedef', { fg = colors.yellow })
+
+-- Constants
+h('Constant', { fg = colors.cyan })
+h('String', { fg = colors.cyan })
+h('Character', { fg = colors.cyan })
+h('Number', { fg = colors.cyan })
+h('Boolean', { fg = colors.cyan })
+h('Float', { fg = colors.cyan })
+
+-- PreProc
+h('PreProc', { fg = colors.orange })
+h('Include', { fg = colors.orange })
+h('Define', { fg = colors.orange })
+h('Macro', { fg = colors.orange })
+h('PreCondit', { fg = colors.orange })
+
+-- Special Characters - Cyan (escape/special)
+h('Special', { fg = colors.cyan })
+
+h('Identifier', { fg = colors.fg })
+h('Variable', { fg = colors.fg })
+h('Operator', { fg = colors.fg })
+
+h('Delimiter', { fg = colors.fg })
+h('NonText', { fg = colors.bg_highlight })
+
+-- -----------------------------------------------------------------------------
+-- Layer 6: COMMENTS
+-- Luminance: L=comment (dimmest)
+-- -----------------------------------------------------------------------------
+
+h('Comment', { fg = colors.fg_comment, italic = true })
+
+-- =============================================================================
+-- 4. UI Components
+-- =============================================================================
+
+h('StatusLine', { bg = colors.fg, fg = colors.bg_highlight })
+h('StatusLineNC', { bg = colors.fg_comment, fg = colors.bg_highlight })
+h('WildMenu', { fg = colors.bg, bg = colors.blue })
+h('ColorColumn', { bg = colors.bg_highlight })
+
+-- Popup Menu
+h('Pmenu', { fg = colors.fg, bg = colors.bg_highlight })
+h('PmenuSel', { fg = colors.fg_emphasis, bg = colors.selection, reverse = true })
+h('PmenuSbar', { bg = colors.bg_highlight })
+h('PmenuThumb', { bg = colors.fg_comment })
+h('PmenuMatch', { fg = colors.cyan, bold = true })
+h('PmenuMatchSel', { bg = colors.selection, bold = true, fg = colors.fg_emphasis })
+
+-- Float & Borders
+h('NormalFloat', { bg = colors.bg_highlight })
+h('FloatBorder', { fg = colors.comment })
+h('Title', { fg = colors.bg_highlight, bold = true })
+
+-- =============================================================================
+-- 5. Diagnostics - Semantic Consistency
+-- =============================================================================
+--
+-- Research basis (Schloss 2023):
+-- Color-concept associations are universal:
+-- Red → danger/anger (cross-cultural consistency)
+-- Orange → warning/caution
+-- Blue → information/calm
+-- Cyan → hint/auxiliary
+--
+-- This mapping perfectly aligns with research! ✓
+--
+
+h('ErrorMsg', { fg = colors.red, bold = true })
+h('WarningMsg', { fg = colors.orange })
+h('ModeMsg', { fg = colors.cyan, bold = true })
+h('Todo', { fg = colors.violet, bold = true, reverse = true })
+h('MatchParen', { bg = colors.selection_bg, bold = true })
+
+-- QuickFix & List
+h('qfFileName', { fg = colors.blue })
+h('qfLineNr', { fg = colors.cyan })
+h('qfSeparator', { fg = colors.bg_highlight })
+h('QuickFixLine', { bg = colors.cursorline_bg, bold = true })
+h('qfText', { link = 'Normal' })
+
+-- Underlined/Directory
+h('Underlined', { fg = colors.violet, underline = true })
+h('Directory', { fg = colors.blue })
+
+-- sync to terminal
+h('Magenta', { fg = colors.magenta })
+h('Violet', { fg = colors.violet })
+
+-- =============================================================================
+-- 6. Treesitter Highlights (Optimized)
+-- =============================================================================
+
+-- Neutral Layer ⭐️ KEY OPTIMIZATION
+h('@variable', { link = 'Identifier' }) -- Neutral
+h('@variable.builtin', { link = '@variable' }) -- Neutral
+h('@variable.parameter', { link = '@variable' }) -- Neutral
+h('@variable.parameter.builtin', { link = '@variable.builtin' })
+h('@variable.member', { link = '@variable' }) -- Neutral
+h('@parameter', { fg = colors.fg }) -- Neutral
+h('@property', { fg = colors.fg }) -- Neutral
+
+-- Constants Layer ⭐️ OPTIMIZED
+h('@constant', { fg = colors.cyan }) -- Constants = frozen
+h('@constant.builtin', { fg = colors.cyan })
+h('@constant.macro', { fg = colors.cyan })
+
+-- Modules/Namespaces
+h('@module', { link = 'Identifier' })
+h('@module.builtin', { link = '@module' })
+
+-- Labels
+h('@label', { link = 'Label' })
+
+-- Strings Layer
+h('@string', { link = 'String' })
+h('@string.documentation', { link = 'Comment' })
+h('@string.regexp', { link = '@string' })
+h('@string.escape', { link = 'Special' })
+h('@string.special', { link = '@string' })
+h('@string.special.symbol', { link = '@string' })
+h('@string.special.path', { link = '@string' })
+h('@string.special.url', { link = 'Underlined' })
+
+h('@character', { link = 'String' })
+h('@character.special', { link = '@character' })
+
+-- Numbers Layer
+h('@boolean', { link = 'Constant' })
+h('@number', { link = 'Number' })
+h('@number.float', { link = 'Float' })
+
+-- Types Layer
+h('@type', { link = 'Type' })
+h('@type.builtin', { link = 'Type' })
+h('@type.definition', { link = 'Type' })
+
+-- Attributes/Decorators
+h('@attribute', { link = 'Macro' })
+h('@attribute.builtin', { link = 'Special' })
+
+-- Functions Layer
+h('@function', { link = 'Function' })
+h('@function.builtin', { link = 'Function' })
+h('@function.call', { link = '@function' })
+h('@function.macro', { link = '@function' })
+h('@function.method', { link = '@function' })
+h('@function.method.call', { link = '@function' })
+h('@constructor', { link = 'Function' })
+
+-- Operators - Neutral
+h('@operator', { link = 'Operator' })
+
+-- Keywords Layer
+h('@keyword', { link = 'Keyword' })
+h('@keyword.coroutine', { link = '@keyword' })
+h('@keyword.function', { link = 'Keyword' })
+h('@keyword.operator', { link = '@keyword' })
+h('@keyword.import', { link = 'PreProc' })
+h('@keyword.type', { link = '@keyword' })
+h('@keyword.modifier', { link = '@keyword' })
+h('@keyword.repeat', { link = 'Repeat' })
+h('@keyword.return', { link = '@keyword' })
+h('@keyword.debug', { link = '@keyword' })
+h('@keyword.exception', { link = '@keyword' })
+h('@keyword.conditional', { link = 'Conditional' })
+h('@keyword.conditional.ternary', { link = '@operator' })
+h('@keyword.directive', { link = '@keyword' })
+h('@keyword.directive.define', { link = '@keyword' })
+
+-- Punctuation
+h('@punctuation', { fg = colors.fg })
+h('@punctuation.delimiter', { link = '@punctuation' })
+h('@punctuation.bracket', { link = '@punctuation' })
+h('@punctuation.special', { link = '@punctuation' })
+
+-- Comments Layer
+h('@comment', { link = 'Comment' })
+h('@comment.documentation', { link = '@comment' })
+h('@comment.error', { fg = colors.red, bold = true })
+h('@comment.warning', { fg = colors.yellow, bold = true })
+h('@comment.todo', { link = 'Special' })
+h('@comment.note', { link = 'Special' })
+
+-- Markup (Markdown, etc.)
+h('@markup', { link = 'Comment' })
+h('@markup.strong', { bold = true })
+h('@markup.italic', { italic = true })
+h('@markup.strikethrough', { strikethrough = true })
+h('@markup.underline', { link = 'Underlined' })
+h('@markup.heading', { link = 'Title' })
+h('@markup.heading.1', { link = '@markup.heading' })
+h('@markup.heading.2', { link = '@markup.heading' })
+h('@markup.heading.3', { link = '@markup.heading' })
+h('@markup.heading.4', { link = '@markup.heading' })
+h('@markup.heading.5', { link = '@markup.heading' })
+h('@markup.heading.6', { link = '@markup.heading' })
+h('@markup.quote', {})
+h('@markup.math', { link = 'String' })
+h('@markup.link', { link = 'Underlined' })
+h('@markup.link.label', { link = '@markup.link' })
+h('@markup.link.url', { link = '@markup.link' })
+h('@markup.raw', {})
+h('@markup.raw.block', { link = '@markup.raw' })
+h('@markup.list', {})
+h('@markup.list.checked', { fg = colors.green })
+h('@markup.list.unchecked', { link = '@markup.list' })
+
+-- Diff
+h('@diff.plus', { fg = blend(colors.green, 0.5, colors.statusline_bg) })
+h('@diff.minus', { fg = blend(colors.red, 0.5, colors.statusline_bg) })
+h('@diff.delta', { fg = blend(colors.yellow, 0.5, colors.statusline_bg) })
+
+-- HTML/XML
+h('@tag', { fg = colors.green })
+h('@tag.attribute', { fg = colors.fg })
+h('@tag.delimiter', { fg = colors.fg })
+h('@tag.builtin', { link = 'Special' })
+
+-- Vimdoc Special Handling
+h('@constant.comment', { link = 'SpecialComment' })
+h('@number.comment', { link = 'Comment' })
+h('@punctuation.bracket.comment', { link = 'SpecialComment' })
+h('@punctuation.delimiter.comment', { link = 'SpecialComment' })
+h('@label.vimdoc', { link = 'String' })
+h('@markup.heading.1.delimiter.vimdoc', { link = '@markup.heading.1' })
+h('@markup.heading.2.delimiter.vimdoc', { link = '@markup.heading.2' })
+
+-- Semantic Aliases
+h('@class', { fg = colors.yellow })
+h('@method', { fg = colors.blue })
+h('@interface', { fg = colors.yellow })
+h('@namespace', { fg = colors.fg })
+
+-- =============================================================================
+-- 7. LSP Semantic Highlights
+-- =============================================================================
+
+h('@lsp.type.class', { link = '@type' })
+h('@lsp.type.comment', { link = '@comment' })
+h('@lsp.type.decorator', { link = '@attribute' })
+h('@lsp.type.enum', { link = '@type' })
+h('@lsp.type.enumMember', { link = '@constant' })
+h('@lsp.type.event', { link = '@type' })
+h('@lsp.type.function', { link = '@function' })
+h('@lsp.type.interface', { link = '@type' })
+h('@lsp.type.keyword', { link = '@keyword' })
+h('@lsp.type.macro', { link = 'Macro' })
+h('@lsp.type.method', { link = '@function.method' })
+h('@lsp.type.modifier', { link = '@type.qualifier' })
+h('@lsp.type.namespace', { link = '@module' })
+h('@lsp.type.number', { link = '@number' })
+h('@lsp.type.operator', { link = '@operator' })
+h('@lsp.type.parameter', { fg = colors.fg })
+h('@lsp.type.property', { fg = colors.fg })
+h('@lsp.type.regexp', { link = '@string.regexp' })
+h('@lsp.type.string', { link = '@string' })
+h('@lsp.type.struct', { link = '@type' })
+h('@lsp.type.type', { link = '@type' })
+h('@lsp.type.typeParameter', { link = '@type.definition' })
+h('@lsp.type.variable', { link = '@variable' })
+
+-- LSP Modifiers
+h('@lsp.mod.abstract', {})
+h('@lsp.mod.async', {})
+h('@lsp.mod.declaration', {})
+h('@lsp.mod.defaultLibrary', {})
+h('@lsp.mod.definition', {})
+h('@lsp.mod.deprecated', { link = 'DiagnosticDeprecated' })
+h('@lsp.mod.documentation', {})
+h('@lsp.mod.modification', {})
+h('@lsp.mod.readonly', {})
+h('@lsp.mod.static', {})
+
+-- =============================================================================
+-- 8. Diagnostics - Semantic Consistency (Schloss 2023)
+-- =============================================================================
+
+h('DiagnosticError', { fg = colors.red })
+h('DiagnosticWarn', { fg = colors.yellow })
+h('DiagnosticInfo', { fg = colors.blue })
+h('DiagnosticHint', { fg = colors.cyan })
+
+h('DiagnosticVirtualTextError', { bg = blend(colors.red, 0.4) })
+h('DiagnosticVirtualTextWarn', { bg = blend(colors.yellow, 0.4) })
+h('DiagnosticVirtualTextInfo', { bg = blend(colors.blue, 0.4) })
+h('DiagnosticVirtualTextHint', { bg = blend(colors.cyan, 0.4) })
+
+h('DiagnosticPrefixError', { fg = colors.red, bg = blend(colors.red, 0.25) })
+h('DiagnosticPrefixWarn', { fg = colors.yellow, bg = blend(colors.yellow, 0.25) })
+h('DiagnosticPrefixInfo', { fg = colors.blue, bg = blend(colors.blue, 0.25) })
+h('DiagnosticPrefixHint', { fg = colors.cyan, bg = blend(colors.cyan, 0.25) })
+
+h('DiagnosticUnderlineError', { undercurl = true, sp = colors.red })
+h('DiagnosticUnderlineWarn', { undercurl = true, sp = colors.yellow })
+h('DiagnosticUnderlineInfo', { undercurl = true, sp = colors.blue })
+h('DiagnosticUnderlineHint', { undercurl = true, sp = colors.cyan })
+h('YankHighlight', { fg = colors.bg, bg = colors.fg })
+
+-- =============================================================================
+-- 9. LSP & Other Plugin Support
+-- =============================================================================
+
+h('LspReferenceText', { bg = colors.selection_bg })
+h('LspReferenceRead', { bg = colors.selection_bg })
+h('LspReferenceWrite', { bg = colors.selection_bg })
+h('LspReferenceTarget', { link = 'LspReferenceText' })
+h('LspInlayHint', { link = 'NonText' })
+h('LspCodeLens', { link = 'NonText' })
+h('LspCodeLensSeparator', { link = 'NonText' })
+h('LspSignatureActiveParameter', { link = 'LspReferenceText' })
+
+-- Indentmini
+h('IndentLine', { link = 'Comment' })
+h('IndentLineCurrent', { link = 'Comment' })
+
+-- GitSigns
+h('GitSignsAdd', { fg = colors.green })
+h('GitSignsChange', { fg = colors.orange })
+h('GitSignsDelete', { fg = colors.red })
+
+-- Dashboard
+h('DashboardHeader', { fg = colors.green })