Skip to content

Instantly share code, notes, and snippets.

@leath-dub
Created August 12, 2025 19:52
Show Gist options
  • Save leath-dub/c9690f972003d2a474359f452fe4bc02 to your computer and use it in GitHub Desktop.
Save leath-dub/c9690f972003d2a474359f452fe4bc02 to your computer and use it in GitHub Desktop.
Starlight theme for neovim
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