local palette = require("dnsc.palette") vim.cmd.highlight("clear") vim.g.colors_name = "winterly" local hi = function(name, val) -- Force links val.force = true -- Make sure that `cterm` attribute is not populated from `gui` val.cterm = val.cterm or {} ---@type vim.api.keyset.highlight -- Define global highlight vim.api.nvim_set_hl(0, name, val) end -- General hi("Normal", { fg = palette.fg }) hi("Conceal", { fg = palette.silver, bg = palette.grey, ctermfg = "LightGrey", ctermbg = "DarkGrey" }) hi("Cursor", { bg = palette.magenta_bright }) hi("DiffText", { bg = palette.yellow_subtle_bg, bold = true, ctermbg = "DarkYellow", cterm = { bold = true } }) hi("ErrorMsg", { fg = palette.red_bright, bg = palette.red_subtle_bg, ctermfg = "White", ctermbg = "DarkRed" }) hi("IncSearch", { bg = palette.magenta_subtle_bg, fg = palette.magenta }) hi("ModeMsg", { bold = true, cterm = { bold = true } }) hi("NonText", { fg = palette.grey, ctermfg = "DarkGrey" }) hi("PmenuSbar", { bg = palette.grey, ctermbg = "Grey" }) hi("StatusLine", { bg = palette.bg_secondary, fg = palette.fg_dim, bold = true, cterm = { reverse = true, bold = true } }) hi("StatusLineNC", { bg = palette.bg_secondary, fg = palette.fg, cterm = { reverse = true } }) hi("TabLineFill", { reverse = true, cterm = { reverse = true } }) hi("TabLineSel", { bold = true, cterm = { bold = true } }) hi("TermCursor", { reverse = true, cterm = { reverse = true } }) hi("WinBar", { bold = true, cterm = { bold = true } }) hi("WildMenu", { fg = palette.bg, bg = palette.yellow_subtle_bg, ctermfg = "Black", ctermbg = "Yellow" }) hi("VertSplit", { link = "Comment" }) hi("WinSeparator", { link = "VertSplit" }) hi("WinBarNC", { link = "WinBar" }) hi("DiffTextAdd", { link = "DiffText" }) hi("EndOfBuffer", { link = "NonText" }) hi("LineNrAbove", { link = "LineNr" }) hi("LineNrBelow", { link = "LineNr" }) hi("QuickFixLine", { link = "Search" }) hi("CursorLineSign", { link = "SignColumn" }) hi("CursorLineFold", { link = "FoldColumn" }) hi("CurSearch", { link = "Search" }) hi("PmenuKind", { link = "Pmenu" }) hi("PmenuKindSel", { link = "PmenuSel" }) hi("PmenuMatch", { link = "Pmenu" }) hi("PmenuMatchSel", { link = "PmenuSel" }) hi("PmenuExtra", { link = "Pmenu" }) hi("PmenuExtraSel", { link = "PmenuSel" }) hi("PreInsert", { link = "Added" }) hi("ComplMatchIns", {}) hi("ComplHint", { link = "NonText" }) hi("ComplHintMore", { link = "MoreMsg" }) hi("Whitespace", { link = "NonText" }) hi("MsgSeparator", { link = "StatusLine" }) hi("NormalFloat", { link = "Pmenu" }) hi("FloatBorder", { bg = palette.bg_secondary, fg = palette.fg_dim }) hi("FloatTitle", { bg = palette.bg_secondary, fg = palette.fg, bold = true }) hi("FloatFooter", { link = "Title" }) hi("FloatShadow", { bg = palette.bg, blend = 80 }) hi("FloatShadowThrough", { bg = palette.bg, blend = 100 }) hi("RedrawDebugNormal", { reverse = true, cterm = { reverse = true } }) hi("RedrawDebugClear", { bg = palette.yellow_subtle_bg, ctermbg = "DarkYellow" }) hi("RedrawDebugComposed", { bg = palette.green_subtle_bg, ctermbg = "DarkGreen" }) hi("RedrawDebugRecompose", { bg = palette.red_subtle_bg, ctermbg = "DarkRed" }) hi("Error", { link = "ErrorMsg" }) hi("NvimInternalError", { link = "ErrorMsg" }) hi("Todo", { fg = palette.blue_bright, bg = palette.blue_subtle_bg, ctermbg = "DarkBlue", ctermfg = "LightBlue" }) hi("String", { link = "Constant" }) hi("Character", { link = "Constant" }) hi("Number", { link = "Boolean" }) hi("Boolean", { fg = palette.magenta_bright, bold = true }) hi("Float", { link = "Number" }) hi("Function", { link = "Identifier" }) hi("Conditional", { link = "Statement" }) hi("Repeat", { link = "Statement" }) hi("Label", { link = "Statement" }) hi("Operator", { fg = palette.fg_alt, italic = false, ctermfg = "White" }) hi("Keyword", { link = "Statement" }) hi("Exception", { link = "Statement" }) hi("Include", { link = "PreProc" }) hi("Define", { link = "PreProc" }) hi("Macro", { link = "PreProc" }) hi("PreCondit", { link = "PreProc" }) hi("StorageClass", { link = "Type" }) hi("Structure", { link = "Type" }) hi("Typedef", { bold = true, fg = palette.yellow_brighter, ctermfg = "LightYellow" }) hi("Tag", { link = "Special" }) hi("SpecialChar", { link = "Special" }) hi("Delimiter", { link = "Special" }) hi("SpecialComment", { link = "Special" }) hi("Debug", { link = "Special" }) hi("DiagnosticError", { fg = palette.red_bright, ctermfg = 1 }) hi("DiagnosticWarn", { fg = palette.yellow, ctermfg = 3 }) hi("DiagnosticInfo", { fg = palette.cyan, ctermfg = 4 }) hi("DiagnosticHint", { fg = palette.silver, ctermfg = 7 }) hi("DiagnosticOk", { fg = palette.green_bright, ctermfg = 10 }) hi("DiagnosticUnderlineError", { fg = palette.red_bright, undercurl = true, cterm = { underline = true } }) hi("DiagnosticUnderlineWarn", { fg = palette.yellow, undercurl = true, cterm = { underline = true } }) hi("DiagnosticUnderlineInfo", { fg = palette.cyan, undercurl = true, cterm = { underline = true } }) hi("DiagnosticUnderlineHint", { fg = palette.silver, undercurl = true, cterm = { underline = true } }) hi("DiagnosticUnderlineOk", { fg = palette.green_bright, undercurl = true, cterm = { underline = true } }) hi("DiagnosticVirtualTextError", { link = "DiagnosticError" }) hi("DiagnosticVirtualTextWarn", { link = "DiagnosticWarn" }) hi("DiagnosticVirtualTextInfo", { link = "DiagnosticInfo" }) hi("DiagnosticVirtualTextHint", { link = "DiagnosticHint" }) hi("DiagnosticVirtualTextOk", { link = "DiagnosticOk" }) hi("DiagnosticFloatingError", { link = "DiagnosticError" }) hi("DiagnosticFloatingWarn", { link = "DiagnosticWarn" }) hi("DiagnosticFloatingInfo", { link = "DiagnosticInfo" }) hi("DiagnosticFloatingHint", { link = "DiagnosticHint" }) hi("DiagnosticFloatingOk", { link = "DiagnosticOk" }) hi("DiagnosticSignError", { link = "DiagnosticError" }) hi("DiagnosticSignWarn", { link = "DiagnosticWarn" }) hi("DiagnosticSignInfo", { link = "DiagnosticInfo" }) hi("DiagnosticSignHint", { link = "DiagnosticHint" }) hi("DiagnosticSignOk", { link = "DiagnosticOk" }) hi("DiagnosticDeprecated", { fg = palette.red, strikethrough = true, cterm = { strikethrough = true } }) hi("DiagnosticUnnecessary", { link = "Unused" }) hi("LspInlayHint", { link = "NonText" }) hi("SnippetTabstop", { link = "Visual" }) hi("SnippetTabstopActive", { link = "SnippetTabstop" }) -- Text hi("@markup.raw", { link = "Special" }) hi("@markup.link", { link = "Identifier" }) hi("@markup.link.label", { link = "ConstantUnderlined" }) hi("@markup.heading", { link = "Title" }) hi("@markup.heading.gitcommit", { bg = palette.bg, fg = palette.fg, bold = true }) hi("@markup.link.url", { link = "Underlined" }) hi("@markup.underline", { link = "Underlined" }) hi("@comment.todo", { link = "Todo" }) -- Miscs hi("@comment", { link = "Comment" }) hi("@punctuation", { link = "Delimiter" }) -- Constants hi("@constant", { link = "Constant" }) hi("@constant.builtin", { link = "Special" }) hi("@constant.macro", { link = "Define" }) hi("@keyword.directive", { link = "Define" }) hi("@string", { link = "String" }) hi("@string.escape", { link = "SpecialChar" }) hi("@string.special", { link = "SpecialChar" }) hi("@character", { link = "Character" }) hi("@character.special", { link = "SpecialChar" }) hi("@number", { link = "Number" }) hi("@boolean", { link = "Boolean" }) hi("@number.float", { link = "Float" }) -- Functions hi("@function", { link = "Function" }) hi("@function.builtin", { link = "Special" }) hi("@function.macro", { link = "Macro" }) hi("@function.method", { link = "Function" }) hi("@variable.parameter", { link = "Identifier" }) hi("@variable.parameter.builtin", { link = "Special" }) hi("@variable.member", { link = "Identifier" }) hi("@property", { link = "Identifier" }) hi("@attribute", { link = "Macro" }) hi("@attribute.builtin", { link = "Special" }) hi("@constructor", { link = "Special" }) -- Keywords hi("@keyword.conditional", { link = "Conditional" }) hi("@keyword.repeat", { link = "Repeat" }) hi("@keyword.type", { link = "Structure" }) hi("@label", { link = "Label" }) hi("@operator", { link = "Operator" }) hi("@keyword", { link = "Keyword" }) hi("@keyword.exception", { link = "Exception" }) hi("@variable", { link = "Identifier" }) hi("@type", { link = "Type" }) hi("@type.builtin", { link = "Type" }) hi("@type.definition", { link = "Typedef" }) hi("@module", { link = "Identifier" }) hi("@keyword.import", { link = "Include" }) hi("@keyword.directive", { link = "PreProc" }) hi("@keyword.debug", { link = "Debug" }) hi("@tag", { link = "Tag" }) hi("@tag.tsx", { link = "Identifier" }) hi("@tag.builtin", { link = "Special" }) -- LSP semantic tokens hi("@lsp.type.class", { link = "Structure" }) hi("@lsp.type.comment", { link = "Comment" }) hi("@lsp.type.decorator", { link = "Function" }) hi("@lsp.type.enum", { link = "Structure" }) hi("@lsp.type.enumMember", { link = "Constant" }) hi("@lsp.type.function", { link = "Function" }) hi("@lsp.type.interface", { link = "Structure" }) hi("@lsp.type.macro", { link = "Macro" }) hi("@lsp.type.method", { link = "Function" }) hi("@lsp.type.namespace", { link = "Structure" }) hi("@lsp.type.parameter", { link = "Identifier" }) hi("@lsp.type.property", { link = "Identifier" }) hi("@lsp.type.struct", { link = "Structure" }) hi("@lsp.type.type", { link = "Type" }) hi("@lsp.type.typeParameter", { link = "TypeDef" }) hi("@lsp.type.variable", { link = "Identifier" }) hi("@lsp.typemod.keyword.documentation", { fg = palette.grey, bold = true }) if vim.o.background == "light" then -- TODO: Define light scheme else -- Default colors only used with a dark background. hi("ColorColumn", { bg = palette.red_subtle_bg, ctermbg = "DarkRed" }) hi("CursorColumn", { bg = palette.grey, ctermbg = "DarkGrey" }) hi("CursorLine", { bg = palette.magenta_subtle_bg_darker, cterm = { underline = true } }) hi("CursorLineNr", { fg = palette.fg, bg = palette.magenta_subtle_bg_darker, bold = true, ctermfg = "White", cterm = { underline = true }, }) hi("DiffAdd", { fg = palette.green_bright, bg = palette.green_subtle_bg, ctermbg = "DarkGreen" }) hi("DiffChange", { fg = palette.yellow_brighter, bg = palette.yellow_subtle_bg, ctermbg = "DarkYellow" }) hi("DiffDelete", { fg = palette.red_bright, bg = palette.red_subtle_bg, ctermbg = "DarkRed" }) hi("Directory", { fg = palette.magenta, bold = true, ctermfg = "Magenta" }) hi("FoldColumn", { fg = palette.cyan_bright, bg = palette.grey, ctermfg = "Cyan", ctermbg = "DarkGrey" }) hi("Folded", { fg = palette.cyan_bright, bg = palette.grey, ctermfg = "Cyan", ctermbg = "DarkGrey" }) hi("LineNr", { fg = palette.grey_bright, ctermfg = "Grey" }) hi( "MatchParen", { fg = palette.fg_alt, bg = palette.magenta_subtle_bg, ctermbg = "DarkMagenta", ctermfg = "Black" } ) hi("MoreMsg", { fg = palette.grey, ctermfg = "DarkGrey" }) hi("Pmenu", { bg = palette.bg_secondary, ctermfg = "White", ctermbg = "Black" }) hi("PmenuSel", { bg = palette.magenta_subtle_bg, fg = palette.fg, bold = true, ctermfg = "LightMagenta", ctermbg = "DarkMagenta", }) hi("PmenuThumb", { bg = palette.fg, ctermbg = "White" }) hi("Question", { fg = palette.green_bright, bold = true, ctermfg = "LightGreen" }) hi("Search", { link = "IncSearch" }) hi("Substitute", { fg = palette.green_bright, bg = palette.green_subtle_bg, bold = true, ctermfg = "DarkBlue", ctermbg = "LightBlue", }) hi("SignColumn", { fg = palette.grey_bright, bg = palette.bg, ctermfg = "Cyan", ctermbg = "DarkGrey" }) hi("SpecialKey", { fg = palette.cyan_bright, ctermfg = "LightBlue" }) hi("SpellBad", { fg = palette.red, undercurl = true, ctermbg = "Red" }) hi("SpellCap", { fg = palette.blue, undercurl = true, ctermbg = "Blue" }) hi("SpellLocal", { fg = palette.cyan, undercurl = true, ctermbg = "Cyan" }) hi("SpellRare", { fg = palette.magenta, undercurl = true, ctermbg = "Magenta" }) hi("StatusLineTerm", { fg = palette.bg, bg = palette.green_bright, bold = true, ctermfg = "Black", ctermbg = "LightGreen", cterm = { bold = true }, }) hi("StatusLineTermNC", { fg = palette.bg, bg = palette.green_bright, ctermfg = "Black", ctermbg = "LightGreen" }) hi( "TabLine", { bg = palette.grey, underline = true, ctermfg = "White", ctermbg = "DarkGrey", cterm = { underline = true } } ) hi("Title", { fg = palette.magenta_bright, bold = true, ctermfg = "Magenta" }) hi("Visual", { fg = palette.magenta_brighter, bg = palette.magenta_subtle_bg, ctermfg = "LightMagenta", ctermbg = "DarkMagenta", }) hi("WarningMsg", { fg = palette.red_bright, ctermfg = "LightRed" }) hi("Comment", { fg = palette.grey, ctermfg = "Cyan" }) hi("Unused", { fg = palette.grey_bright, undercurl = true, ctermfg = "LightGrey" }) hi("Constant", { fg = palette.yellow_brighter, ctermfg = "LightYellow" }) hi("ConstantUnderlined", { fg = palette.yellow_brighter, underline = true, ctermfg = "LightYellow" }) hi("Special", { fg = palette.silver, ctermfg = "LightGrey" }) hi("Identifier", { fg = palette.fg, ctermfg = "White", cterm = { bold = true } }) hi("Statement", { fg = palette.fg_alt, bold = true, ctermfg = "White" }) hi("PreProc", { fg = palette.magenta, ctermfg = "LightMagenta" }) hi("Type", { fg = palette.silver, bold = true, ctermfg = "LightCyan" }) hi("Underlined", { fg = palette.silver, underline = true, ctermfg = "LightGrey", cterm = { underline = true } }) hi("Ignore", { fg = palette.bg, ctermfg = "Black" }) hi( "Added", { fg = palette.green_bright, bg = palette.green_subtle_bg, ctermfg = "LightGreen", ctermbg = "DarkGreen" } ) hi( "Changed", { fg = palette.blue_bright, bg = palette.blue_subtle_bg, ctermfg = "LightBlue", ctermbg = "DarkBlue" } ) hi("Removed", { fg = palette.red_bright, bg = palette.red_subtle_bg, ctermfg = "LightRed", ctermbg = "DarkRed" }) hi("NotificationInfo", { fg = palette.silver, bg = palette.bg, ctermfg = "White", ctermbg = "Black" }) -- Snacks hi("SnacksIndentScope", { fg = palette.magenta, ctermfg = "LightGrey" }) hi("SnacksIndent", { fg = palette.magenta_subtle_bg, ctermfg = "DarkGrey" }) hi( "SnacksPickerCursorLine", { bg = palette.magenta_subtle_bg, fg = palette.fg, bold = true, cterm = { underline = true } } ) hi("SnacksPickerListCursorLine", { link = "SnacksPickerCursorLine" }) hi("SnacksPickerTitle", { link = "FloatTitle" }) hi("SnacksBackdrop", { link = "Pmenu" }) -- Flash hi("FlashMatch", { reverse = true }) hi("FlashLabel", { bg = palette.fg, fg = palette.bg }) -- FzfLua hi("FzfLuaNormal", { link = "Pmenu" }) hi("FzfLuaBorder", { link = "Pmenu" }) hi("FzfLuaTitle", { link = "Pmenu" }) hi("FzfLuaBackdrop", { link = "Pmenu" }) hi("FzfLuaPreviewNormal", { link = "FzfLuaNormal" }) hi("FzfLuaPreviewBorder", { link = "FzfLuaBorder" }) hi("FzfLuaPreviewTitle", { link = "FzfLuaTitle" }) hi( "FzfLuaCursorLine", { bg = palette.magenta_subtle_bg, fg = palette.fg, bold = true, cterm = { underline = true } } ) hi("FzfLuaTitleFlags", { link = "FzfLuaCursorLine" }) hi("FzfLuaCursorLineNr", { link = "FzfLuaCursorLine" }) hi("FzfLuaHeaderBind", { link = "Pmenu" }) hi("FzfLuaHeaderText", { link = "Comment" }) hi("FzfLuaPathLineNr", { link = "Pmenu" }) hi("FzfLuaPathColNr", { link = "Pmenu" }) hi("FzfLuaLivePrompt", { link = "Pmenu" }) hi("FzfLuaCmdBuf", { link = "Comment" }) hi("FzfLuaBufName", { link = "Pmenu" }) hi("FzfLuaBufId", { link = "Special" }) hi("FzfLuaBufLineNr", { link = "Special" }) hi("FzfLuaBufFlagCur", { link = "Pmenu" }) hi("FzfLuaBufFlagAlt", { link = "Comment" }) -- Blinkpairs hi("BlinkPairsOrange", { link = "Comment" }) hi("BlinkPairsPurple", { fg = palette.magenta_brighter }) hi("BlinkPairsBlue", { fg = palette.magenta_bright }) -- Neogit hi("NeogitDiffAdd", { link = "DiffAdd" }) hi("NeogitDiffDelete", { link = "DiffDelete" }) hi("NeogitDiffContext", { bg = palette.bg_secondary, fg = palette.fg }) hi("NeogitDiffContextCursor", { bg = palette.magenta_subtle_bg_darker, fg = palette.magenta_brighter }) hi("NeogitDiffAddCursor", { bg = palette.green_bright, fg = palette.green_subtle_bg }) hi("NeogitDiffDeleteCursor", { bg = palette.red_bright, fg = palette.red_subtle_bg }) hi("NeogitDiffContextHighlight", { link = "NeogitDiffContext" }) hi("NeogitDiffAddHighlight", { link = "DiffAdd" }) hi("NeogitDiffDeleteHighlight", { link = "DiffDelete" }) hi("NeogitHunkHeader", { bg = palette.bg_secondary, fg = palette.grey_bright }) hi("NeogitHunkMergeHeader", { link = "NeogitHunkHeader" }) hi("NeogitHunkHeaderHighlight", { bg = palette.magenta_subtle_bg, fg = palette.magenta_brighter }) hi("NeogitHunkHeaderCursor", { link = "NeogitHunkHeaderHighlight" }) hi("NeogitCommitViewHeader", { bg = palette.bg_secondary, fg = palette.fg }) hi("NeogitDiffHeader", { bg = palette.bg, fg = palette.grey_bright, bold = true }) hi("NeogitActiveItem", { bg = palette.grey_bright, fg = palette.bg, bold = true }) -- Mini Statusline hi("MiniStatusLineModeNormal", { fg = palette.magenta_brighter, bg = palette.magenta_subtle_bg, bold = true }) hi("MiniStatusLineModeCommand", { bg = palette.blue_subtle_bg, fg = palette.blue_bright, bold = true }) end