235 lines
8.0 KiB
Lua
235 lines
8.0 KiB
Lua
-- Learn Go With Tests (dark) - palette from site CSS, dark-mode token colors.
|
|
-- Requires: termguicolors. For Go, nvim-treesitter is strongly recommended.
|
|
|
|
vim.cmd.hi('clear')
|
|
vim.g.colors_name = 'lgwtdark'
|
|
|
|
if vim.fn.exists('syntax_on') == 1 then
|
|
vim.cmd.syntax('reset')
|
|
end
|
|
|
|
vim.o.termguicolors = true
|
|
vim.o.background = 'dark'
|
|
|
|
-- Dark-mode values from your spec (second branch of light-dark / --shiki-dark).
|
|
local C = {
|
|
-- primary-2: code panels on the site read slightly cooler than primary-1; warm text pops closer to the book.
|
|
bg = '#202325',
|
|
keyword = '#f8a8a1', -- danger-11
|
|
string_ = '#9bd0a1', -- success-11
|
|
entity = '#a0c6e0', -- primary-11 (packages, types, func/method names & calls)
|
|
-- warning-11 nudged warmer (more R, less B) so it matches the orange-gold on the page next to this bg
|
|
warm = '#e5b899',
|
|
fg = '#feffff', -- tint-12 (variables, brackets, delimiters)
|
|
comment = '#787878', -- neutral-9
|
|
operator = '#bdc1c3', -- tint-11
|
|
-- subtle UI derived from primary scale
|
|
cursorline = '#262d32', -- primary-3
|
|
visual = '#34495a', -- between primary-4 / 5
|
|
linenr = '#525252', -- neutral-7
|
|
float_bg = '#222222',
|
|
}
|
|
|
|
local function hi(name, opts)
|
|
vim.api.nvim_set_hl(0, name, opts)
|
|
end
|
|
|
|
-- Editor chrome
|
|
hi('Normal', { fg = C.fg, bg = C.bg })
|
|
hi('NormalNC', { fg = C.fg, bg = C.bg })
|
|
hi('NormalFloat', { fg = C.fg, bg = C.float_bg })
|
|
hi('Cursor', { fg = C.bg, bg = C.entity })
|
|
hi('lCursor', { link = 'Cursor' })
|
|
hi('CursorLine', { bg = C.cursorline })
|
|
hi('CursorColumn', { bg = C.cursorline })
|
|
hi('LineNr', { fg = C.linenr, bg = C.bg })
|
|
hi('CursorLineNr', { fg = C.warm, bg = C.cursorline })
|
|
hi('SignColumn', { bg = C.bg })
|
|
hi('Folded', { fg = C.comment, bg = '#242424' })
|
|
hi('FoldColumn', { fg = C.comment, bg = C.bg })
|
|
hi('Whitespace', { fg = '#333333' })
|
|
hi('WinSeparator', { fg = '#2a2a2a', bg = C.bg })
|
|
hi('EndOfBuffer', { fg = C.bg, bg = C.bg })
|
|
|
|
hi('Search', { fg = C.bg, bg = C.warm })
|
|
hi('IncSearch', { fg = C.bg, bg = C.keyword })
|
|
hi('Visual', { bg = C.visual })
|
|
hi('VisualNOS', { bg = C.visual })
|
|
|
|
hi('StatusLine', { fg = C.fg, bg = '#333333' })
|
|
hi('StatusLineNC', { fg = C.comment, bg = '#252525' })
|
|
hi('TabLine', { fg = C.comment, bg = '#252525' })
|
|
hi('TabLineFill', { bg = C.bg })
|
|
hi('TabLineSel', { fg = C.entity, bg = '#333333' })
|
|
|
|
hi('Error', { fg = '#fb2c36', bold = true })
|
|
hi('WarningMsg', { fg = '#fe9a00' })
|
|
hi('MatchParen', { fg = C.keyword, bg = '#3a3a3a', bold = true })
|
|
|
|
hi('Pmenu', { fg = C.fg, bg = '#2d2d2d' })
|
|
hi('PmenuSel', { fg = C.bg, bg = C.entity })
|
|
hi('PmenuSbar', { bg = '#444444' })
|
|
hi('PmenuThumb', { bg = '#666666' })
|
|
|
|
hi('Title', { fg = C.entity, bold = true })
|
|
hi('Directory', { fg = C.entity })
|
|
|
|
-- Builtin highlight groups (legacy syntax / fallbacks)
|
|
hi('Comment', { fg = C.comment })
|
|
hi('String', { fg = C.string_ })
|
|
hi('Character', { fg = C.string_ })
|
|
hi('Number', { fg = C.warm })
|
|
hi('Float', { fg = C.warm })
|
|
hi('Boolean', { fg = C.warm })
|
|
hi('Constant', { fg = C.warm })
|
|
|
|
hi('Identifier', { fg = C.fg })
|
|
hi('Function', { fg = C.entity })
|
|
hi('Statement', { fg = C.keyword })
|
|
hi('Conditional', { fg = C.keyword })
|
|
hi('Repeat', { fg = C.keyword })
|
|
hi('Label', { fg = C.keyword })
|
|
hi('Operator', { fg = C.operator })
|
|
hi('Keyword', { fg = C.keyword })
|
|
hi('Exception', { fg = C.keyword })
|
|
hi('PreProc', { fg = C.keyword })
|
|
hi('Include', { fg = C.keyword })
|
|
hi('Define', { fg = C.keyword })
|
|
hi('Macro', { fg = C.entity })
|
|
hi('Type', { fg = C.entity })
|
|
hi('StorageClass', { fg = C.keyword })
|
|
hi('Structure', { fg = C.keyword })
|
|
hi('Special', { fg = C.warm })
|
|
hi('SpecialChar', { fg = C.warm })
|
|
hi('Delimiter', { fg = C.fg })
|
|
hi('Underlined', { fg = C.entity, underline = true })
|
|
hi('Ignore', { fg = C.bg })
|
|
hi('Todo', { fg = C.warm, bold = true })
|
|
|
|
-- Treesitter (Go and general)
|
|
local ts = {
|
|
['@comment'] = { fg = C.comment },
|
|
['@comment.documentation'] = { fg = C.comment },
|
|
|
|
['@keyword'] = { fg = C.keyword },
|
|
['@keyword.function'] = { fg = C.keyword },
|
|
['@keyword.operator'] = { fg = C.keyword },
|
|
['@keyword.return'] = { fg = C.keyword },
|
|
['@keyword.import'] = { fg = C.keyword },
|
|
['@keyword.exception'] = { fg = C.keyword },
|
|
['@keyword.coroutine'] = { fg = C.keyword },
|
|
['@keyword.directive'] = { fg = C.keyword },
|
|
['@keyword.directive.define'] = { fg = C.keyword },
|
|
|
|
['@type.builtin'] = { fg = C.keyword },
|
|
|
|
['@string'] = { fg = C.string_ },
|
|
['@string.documentation'] = { fg = C.string_ },
|
|
['@string.regex'] = { fg = C.string_ },
|
|
['@string.escape'] = { fg = C.warm },
|
|
['@string.special'] = { fg = C.warm },
|
|
['@string.special.url'] = { fg = C.entity, underline = true },
|
|
['@character'] = { fg = C.string_ },
|
|
['@character.special'] = { fg = C.warm },
|
|
|
|
['@number'] = { fg = C.warm },
|
|
['@float'] = { fg = C.warm },
|
|
['@boolean'] = { fg = C.warm },
|
|
|
|
['@function'] = { fg = C.entity },
|
|
['@function.call'] = { fg = C.entity },
|
|
['@function.builtin'] = { fg = C.entity },
|
|
['@function.macro'] = { fg = C.entity },
|
|
|
|
['@method'] = { fg = C.entity },
|
|
['@method.call'] = { fg = C.entity },
|
|
|
|
['@constructor'] = { fg = C.entity },
|
|
|
|
['@type'] = { fg = C.entity },
|
|
['@type.definition'] = { fg = C.entity },
|
|
|
|
['@namespace'] = { fg = C.entity },
|
|
['@module'] = { fg = C.entity },
|
|
|
|
['@variable'] = { fg = C.fg },
|
|
['@variable.builtin'] = { fg = C.keyword },
|
|
['@variable.parameter'] = { fg = C.warm },
|
|
['@variable.member'] = { fg = C.fg },
|
|
|
|
['@parameter'] = { fg = C.warm },
|
|
|
|
['@constant'] = { fg = C.warm },
|
|
['@constant.builtin'] = { fg = C.keyword },
|
|
['@constant.macro'] = { fg = C.entity },
|
|
|
|
['@property'] = { fg = C.fg },
|
|
['@field'] = { fg = C.fg },
|
|
|
|
['@operator'] = { fg = C.operator },
|
|
|
|
['@punctuation.delimiter'] = { fg = C.fg },
|
|
['@punctuation.bracket'] = { fg = C.fg },
|
|
['@punctuation.special'] = { fg = C.fg },
|
|
|
|
['@label'] = { fg = C.warm },
|
|
['@exception'] = { fg = C.keyword },
|
|
['@include'] = { fg = C.keyword },
|
|
['@repeat'] = { fg = C.keyword },
|
|
['@conditional'] = { fg = C.keyword },
|
|
|
|
['@tag'] = { fg = C.entity },
|
|
['@tag.attribute'] = { fg = C.warm },
|
|
['@tag.delimiter'] = { fg = C.fg },
|
|
|
|
['@markup.link'] = { fg = C.entity, underline = true },
|
|
['@markup.link.url'] = { fg = C.entity, underline = true },
|
|
['@markup.strong'] = { bold = true },
|
|
['@markup.italic'] = { italic = true },
|
|
}
|
|
|
|
for g, o in pairs(ts) do
|
|
hi(g, o)
|
|
end
|
|
|
|
-- Diagnostics (readable on this bg)
|
|
hi('DiagnosticError', { fg = '#fb2c36' })
|
|
hi('DiagnosticWarn', { fg = '#fe9a00' })
|
|
hi('DiagnosticInfo', { fg = C.entity })
|
|
hi('DiagnosticHint', { fg = C.comment })
|
|
hi('DiagnosticUnderlineError', { sp = '#fb2c36', undercurl = true })
|
|
hi('DiagnosticUnderlineWarn', { sp = '#fe9a00', undercurl = true })
|
|
hi('DiagnosticUnderlineInfo', { sp = C.entity, undercurl = true })
|
|
hi('DiagnosticUnderlineHint', { sp = C.comment, undercurl = true })
|
|
|
|
-- LSP semantic tokens → same story as Treesitter where possible
|
|
hi('@lsp.type.namespace', { link = '@module' })
|
|
hi('@lsp.type.type', { link = '@type' })
|
|
hi('@lsp.type.class', { link = '@type' })
|
|
hi('@lsp.type.enum', { link = '@type' })
|
|
hi('@lsp.type.interface', { link = '@type' })
|
|
hi('@lsp.type.struct', { link = '@type' })
|
|
hi('@lsp.type.typeParameter', { link = '@type' })
|
|
hi('@lsp.type.function', { link = '@function' })
|
|
hi('@lsp.type.method', { link = '@method' })
|
|
hi('@lsp.type.property', { link = '@property' })
|
|
hi('@lsp.type.variable', { link = '@variable' })
|
|
hi('@lsp.type.parameter', { link = '@parameter' })
|
|
hi('@lsp.type.enumMember', { link = '@constant' })
|
|
hi('@lsp.type.decorator', { link = '@function.macro' })
|
|
hi('@lsp.type.macro', { link = '@function.macro' })
|
|
hi('@lsp.type.keyword', { link = '@keyword' })
|
|
hi('@lsp.type.operator', { link = '@operator' })
|
|
hi('@lsp.type.string', { link = '@string' })
|
|
hi('@lsp.type.number', { link = '@number' })
|
|
hi('@lsp.type.regexp', { link = '@string.regex' })
|
|
hi('@lsp.mod.readonly', { link = '@constant' })
|
|
hi('@lsp.mod.defaultLibrary', { link = '@type.builtin' })
|
|
|
|
-- Extmarks from lua/lgwtdark/go_extra.lua (fmt verbs, rune delimiters)
|
|
hi('LgwtdFmtVerb', { fg = C.warm })
|
|
hi('LgwtdQuote', { fg = C.fg })
|
|
hi('LgwtdStrInner', { fg = C.string_ })
|
|
hi('LgwtdEscape', { fg = C.warm })
|
|
hi('LgwtdNil', { link = '@number' })
|