Created
August 12, 2025 19:52
-
-
Save leath-dub/c9690f972003d2a474359f452fe4bc02 to your computer and use it in GitHub Desktop.
Starlight theme for neovim
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| local p = { | |
| black = "#242424", | |
| brblack = "#616161", | |
| red = "#F62B5A", | |
| brred = "#FF4D51", | |
| green = "#47B413", | |
| brgreen = "#35D450", | |
| yellow = "#E3C401", | |
| bryellow = "#E9E836", | |
| blue = "#24ACD4", | |
| brblue = "#5DC5F8", | |
| magenta = "#F2AFFD", | |
| brmagenta = "#FEABF2", | |
| cyan = "#13C299", | |
| brcyan = "#24DFC4", | |
| white = "#E6E6E6", | |
| brwhite = "#FFFFFF", | |
| } | |
| p.background = p.black | |
| p.foreground = p.brwhite | |
| local ext = { background_alt = "#353535" } | |
| local function hi(group, opts) | |
| vim.api.nvim_set_hl(0, group, opts) | |
| end | |
| local function o(opts) | |
| return vim.tbl_extend("keep", opts, { fg = p.foreground, bg = p.background }) | |
| end | |
| -- Basic editor (unlike VSC*de) | |
| hi("ColorColumn", o { bg = p.black }) | |
| hi("Conceal", o { fg = p.brblack }) | |
| hi("CurSearch", o { bg = p.brred }) | |
| hi("Cursor", { fg = p.background, bg = p.bryellow }) | |
| hi("lCursor", { fg = p.background, bg = p.foreground }) | |
| hi("CursorIM", { link = "Cursor" }) | |
| hi("CursorColumn", { bg = p.brblack }) | |
| hi("CursorLine", { link = "CursorColumn" }) | |
| hi("Directory", o { fg = p.cyan }) | |
| hi("DiffAdd", o { bg = p.green }) | |
| hi("DiffChange", o { bg = p.brblue }) | |
| hi("DiffDelete", o { bg = p.brred }) | |
| hi("DiffText", o { link = "DiffChange" }) | |
| hi("EndOfBuffer", o { link = "NonText" }) | |
| hi("TermCursor", o { link = "Cursor" }) | |
| hi("ErrorMsg", o { fg = p.red }) | |
| hi("WinSeparator", { link = "Normal" }) | |
| hi("Folded", o { bg = p.brblack, bold = true }) | |
| hi("FoldColumn", o { fg = p.brblack, bold = true }) | |
| hi("SignColumn", { link = "FoldColumn" }) | |
| hi("IncSearch", { link = "CurSearch" }) | |
| hi("Substitute", { link = "DiffChange" }) | |
| hi("LineNr", o { fg = p.bryellow }) | |
| hi("LineNrAbove", o { fg = p.brblack }) | |
| hi("LineNrBelow", { link = "LineNrAbove" }) | |
| hi("CursorLineNr", { link = "LineNr" }) | |
| hi("CursorLineFold", { link = "FoldColumn" }) | |
| hi("CursorLineSign", { link = "SignColumn" }) | |
| hi("MatchParen", { bg = p.blue, fg = p.background }) | |
| hi("ModeMsg", { link = "Normal" }) | |
| hi("MsgArea", { link = "Normal" }) | |
| hi("MsgSeparator", { fg = p.background, bg = p.foreground }) | |
| hi("MoreMsg", { fg = p.brcyan }) | |
| hi("NonText", o { fg = p.brblack }) | |
| hi("Normal", o {}) | |
| hi("NormalFloat", o { bg = ext.background_alt, fg = p.white }) | |
| hi("FloatBorder", o { bg = ext.background_alt, fg = p.white }) | |
| hi("FloatTitle", { link = "Title" }) | |
| hi("FloatFooter", { link = "FloatTitle" }) | |
| hi("NormalNC", { link = "Normal" }) | |
| hi("Pmenu", { fg = p.white, bg = ext.background_alt }) | |
| hi("PmenuSel", { fg = p.white, bg = p.brblack, bold = true }) | |
| hi("PmenuKind", { link = "Pmenu" }) | |
| hi("PmenuKindSel", { link = "PmenuSel" }) | |
| hi("PmenuExtra", { link = "Pmenu" }) | |
| hi("PmenuExtraSel", { link = "PmenuSel" }) | |
| hi("PmenuSbar", { link = "Pmenu" }) | |
| hi("PmenuThumb", o { bg = p.brblack }) | |
| hi("PmenuMatch", { fg = p.blue, bold = true }) | |
| hi("PmenuMatchSel", { link = "PmenuMatch" }) | |
| hi("ComplMatchIns", { link = "Normal" }) | |
| hi("Question", { link = "MoreMsg" }) | |
| hi("QuickFixLine", { fg = p.green }) | |
| hi("Search", { link = "Substitute" }) | |
| hi("SnippetTabstop", { link = "Visual" }) | |
| hi("SpecialKey", { link = "Conceal" }) | |
| hi("SpellBad", { sp = p.brred, underline = true }) | |
| hi("SpellCap", { sp = p.bryellow, underline = true }) | |
| hi("SpellLocal", { sp = p.brgreen, underline = true }) | |
| hi("SpellRare", { sp = p.brcyan, underline = true }) | |
| hi("StatusLine", { fg = p.white, bg = ext.background_alt }) | |
| hi("StatusLineNC", { fg = p.brblack, bg = ext.background_alt }) | |
| hi("StatusLineTerm", { link = "StatusLine" }) | |
| hi("StatusLineTermNC", { link = "StatusLineNC" }) | |
| hi("TabLine", { link = "StatusLineNC" }) | |
| hi("TabLineFill", { link = "TabLine" }) | |
| hi("TabLineSel", { bold = true }) | |
| hi("Title", { bold = true }) | |
| hi("Visual", o { bg = p.blue }) | |
| hi("VisualNOS", { link = "Visual" }) | |
| hi("WarningMsg", { fg = p.bryellow }) | |
| hi("Whitespace", { link = "NonText" }) | |
| hi("WildMenu", { link = "PmenuSel" }) | |
| hi("WinBar", { link = "StatusLine" }) | |
| hi("WinBarNC", { link = "StatusLineNC" }) | |
| -- Syntax groups | |
| hi("Comment", { fg = p.brblack }) | |
| hi("Constant", { fg = p.brcyan }) | |
| hi("String", { fg = p.bryellow }) | |
| hi("Character", { link = "Constant" }) | |
| hi("Number", { link = "Constant" }) | |
| hi("Boolean", { link = "Constant" }) | |
| hi("Float", { link = "Constant" }) | |
| hi("Identifier", { link = "Normal" }) | |
| hi("Function", { fg = p.brgreen }) | |
| hi("Statement", { fg = p.brblue }) | |
| hi("Label", { fg = p.cyan }) | |
| hi("Operator", { link = "Statement" }) | |
| hi("Keyword", { link = "Statement" }) | |
| hi("Exception", { link = "Statement" }) | |
| hi("PreProc", { fg = p.red }) | |
| hi("Include", { link = "PreProc" }) | |
| hi("Define", { link = "PreProc" }) | |
| hi("Macro", { link = "PreProc" }) | |
| hi("PreCondit", { link = "PreProc" }) | |
| hi("Type", { fg = p.cyan }) | |
| hi("StorageClass", { link = "Type" }) | |
| hi("Structure", { link = "Type" }) | |
| hi("Typedef", { link = "Type" }) | |
| hi("Special", { fg = p.brcyan }) | |
| hi("SpecialChar", { link = "Special" }) | |
| hi("Tag", { link = "Special" }) | |
| hi("Delimiter", { fg = p.white }) -- TODO: maybe color delimiters? | |
| hi("SpecialComment", { link = "Special" }) | |
| hi("Debug", { link = "Special" }) | |
| hi("Underline", { underline = true }) | |
| hi("Ignore", { link = "Normal" }) | |
| hi("Error", { bg = p.brred }) | |
| hi("Todo", { fg = p.cyan }) | |
| hi("Added", o { fg = p.green }) | |
| hi("Changed", o { fg = p.brblue }) | |
| hi("Removed", o { fg = p.brred }) | |
| hi("DiagnosticError", { fg = p.brred }) | |
| hi("DiagnosticWarn", { fg = p.yellow }) | |
| hi("DiagnosticInfo", { fg = p.brblue }) | |
| hi("DiagnosticHint", { fg = p.brcyan }) | |
| hi("DiagnosticOk", { fg = p.brgreen }) | |
| hi("DiagnosticUnderlineError", { link = "SpellBad" }) | |
| hi("DiagnosticUnderlineWarn", { link = "SpellCap" }) | |
| hi("DiagnosticUnderlineInfo", { link = "SpellLocal" }) | |
| hi("DiagnosticUnderlineHint", { link = "SpellRare" }) | |
| hi("DiagnosticUnderlineOk", { sp = p.brgreen, underline = true }) | |
| hi("DiagnosticDeprecated", { strikethrough = true }) | |
| hi("DiagnosticUnnecessary", { link = "NonText" }) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment