local hl = vim.api.nvim_set_hl
local theme = {}

theme.set_highlights = function(opts)
    local c = require('vscode.colors').get_colors()
    local isDark = vim.o.background == 'dark'

    hl(0, 'Normal', { fg = c.vscFront, bg = c.vscBack })
    hl(0, 'ColorColumn', { fg = 'NONE', bg = c.vscCursorDarkDark })
    hl(0, 'Cursor', { fg = c.vscCursorDark, bg = c.vscCursorLight })
    hl(0, 'CursorLine', { bg = c.vscCursorDarkDark })
    hl(0, 'CursorColumn', { fg = 'NONE', bg = c.vscCursorDarkDark })
    hl(0, 'Directory', { fg = c.vscBlue, bg = c.vscBack })
    hl(0, 'DiffAdd', { fg = 'NONE', bg = c.vscDiffGreenLight })
    hl(0, 'DiffChange', { fg = 'NONE', bg = c.vscDiffRedDark })
    hl(0, 'DiffDelete', { fg = 'NONE', bg = c.vscDiffRedLight })
    hl(0, 'DiffText', { fg = 'NONE', bg = c.vscDiffRedLight })
    hl(0, 'EndOfBuffer', { fg = c.vscBack, bg = 'NONE' })
    hl(0, 'ErrorMsg', { fg = c.vscRed, bg = c.vscBack })
    hl(0, 'VertSplit', { fg = c.vscSplitDark, bg = c.vscBack })
    hl(0, 'WinSeparator', { link = 'VertSplit' })
    hl(0, 'Folded', { fg = 'NONE', bg = c.vscFoldBackground })
    hl(0, 'FoldColumn', { fg = c.vscLineNumber, bg = c.vscBack })
    hl(0, 'SignColumn', { fg = 'NONE', bg = c.vscBack })
    hl(0, 'IncSearch', { fg = c.vscNone, bg = c.vscSearchCurrent })
    hl(0, 'LineNr', { fg = c.vscLineNumber, bg = c.vscBack })
    hl(0, 'CursorLineNr', { fg = c.vscPopupFront, bg = c.vscBack })
    hl(0, 'MatchParen', { fg = c.vscNone, bg = c.vscDimHighlight })
    hl(0, 'ModeMsg', { fg = c.vscFront, bg = c.vscLeftDark })
    hl(0, 'MoreMsg', { fg = c.vscFront, bg = c.vscLeftDark })
    hl(0, 'NonText', { fg = (isDark and c.vscLineNumber or c.vscTabOther), bg = c.vscNone })
    hl(0, 'Pmenu', { fg = isDark and c.vscPopupFront or 'none', bg = c.vscPopupBack })
    hl(
        0,
        'PmenuSel',
        { fg = isDark and c.vscPopupFront or 'none', bg = isDark and c.vscPopupHighlightBlue or c.vscTabOutside }
    )
    hl(0, 'PmenuSbar', { fg = 'NONE', bg = c.vscPopupHighlightGray })
    hl(0, 'PmenuThumb', { fg = 'NONE', bg = c.vscPopupFront })
    hl(0, 'Question', { fg = c.vscBlue, bg = c.vscBack })
    hl(0, 'Search', { fg = c.vscNone, bg = c.vscSearch })
    hl(0, 'SpecialKey', { fg = c.vscBlue, bg = c.vscNone })
    hl(0, 'StatusLine', { fg = c.vscFront, bg = c.vscLeftMid })
    hl(0, 'StatusLineNC', { fg = c.vscFront, bg = opts.transparent and c.vscBack or c.vscLeftDark })
    hl(0, 'TabLine', { fg = c.vscFront, bg = c.vscTabOther })
    hl(0, 'TabLineFill', { fg = c.vscFront, bg = c.vscTabOutside })
    hl(0, 'TabLineSel', { fg = c.vscFront, bg = c.vscTabCurrent })
    hl(0, 'Title', { fg = c.vscNone, bg = c.vscNone, bold = true })
    hl(0, 'Visual', { fg = c.vscNone, bg = c.vscSelection })
    hl(0, 'VisualNOS', { fg = c.vscNone, bg = c.vscSelection })
    hl(0, 'WarningMsg', { fg = c.vscYellow, bg = c.vscBack })
    hl(0, 'WildMenu', { fg = c.vscNone, bg = c.vscSelection })
    hl(0, 'Comment', { fg = c.vscGreen, bg = 'NONE', italic = opts.italic_comments })
    hl(0, 'Constant', { fg = c.vscBlue, bg = 'NONE' })
    hl(0, 'String', { fg = c.vscOrange, bg = 'NONE' })
    hl(0, 'Character', { fg = c.vscOrange, bg = 'NONE' })
    hl(0, 'Number', { fg = c.vscLightGreen, bg = 'NONE' })
    hl(0, 'Boolean', { fg = c.vscBlue, bg = 'NONE' })
    hl(0, 'Float', { fg = c.vscLightGreen, bg = 'NONE' })
    hl(0, 'Identifier', { fg = c.vscLightBlue, bg = 'NONE' })
    hl(0, 'Function', { fg = c.vscYellow, bg = 'NONE' })
    hl(0, 'Statement', { fg = c.vscPink, bg = 'NONE' })
    hl(0, 'Conditional', { fg = c.vscPink, bg = 'NONE' })
    hl(0, 'Repeat', { fg = c.vscPink, bg = 'NONE' })
    hl(0, 'Label', { fg = c.vscPink, bg = 'NONE' })
    hl(0, 'Operator', { fg = c.vscFront, bg = 'NONE' })
    hl(0, 'Keyword', { fg = c.vscPink, bg = 'NONE' })
    hl(0, 'Exception', { fg = c.vscPink, bg = 'NONE' })
    hl(0, 'PreProc', { fg = c.vscPink, bg = 'NONE' })
    hl(0, 'Include', { fg = c.vscPink, bg = 'NONE' })
    hl(0, 'Define', { fg = c.vscPink, bg = 'NONE' })
    hl(0, 'Macro', { fg = c.vscPink, bg = 'NONE' })
    hl(0, 'Type', { fg = c.vscBlue, bg = 'NONE' })
    hl(0, 'StorageClass', { fg = c.vscBlue, bg = 'NONE' })
    hl(0, 'Structure', { fg = c.vscBlueGreen, bg = 'NONE' })
    hl(0, 'Typedef', { fg = c.vscBlue, bg = 'NONE' })
    hl(0, 'Special', { fg = c.vscYellowOrange, bg = 'NONE' })
    hl(0, 'SpecialChar', { fg = c.vscFront, bg = 'NONE' })
    hl(0, 'Tag', { fg = c.vscFront, bg = 'NONE' })
    hl(0, 'Delimiter', { fg = c.vscFront, bg = 'NONE' })
    hl(0, 'SpecialComment', { fg = c.vscGreen, bg = 'NONE' })
    hl(0, 'Debug', { fg = c.vscFront, bg = 'NONE' })
    hl(0, 'Underlined', { fg = c.vscNone, bg = 'NONE', underline = true })
    hl(0, 'Conceal', { fg = c.vscFront, bg = c.vscBack })
    hl(0, 'Ignore', { fg = c.vscFront, bg = 'NONE' })
    hl(0, 'Error', { fg = c.vscRed, bg = c.vscBack, undercurl = true, sp = c.vscRed })
    hl(0, 'Todo', { fg = c.vscYellowOrange, bg = c.vscBack, bold = true })
    hl(0, 'SpellBad', { fg = 'NONE', undercurl = true, sp = c.vscRed })
    hl(0, 'SpellCap', { fg = 'NONE', undercurl = true, sp = c.vscYellow })
    hl(0, 'SpellRare', { fg = 'NONE', undercurl = true, sp = c.vscViolet })
    hl(0, 'SpellLocal', { fg = 'NONE', undercurl = true, sp = c.vscBlue })
    hl(0, 'Whitespace', { fg = isDark and c.vscLineNumber or c.vscTabOther })
    hl(0, 'NormalFloat', { bg = c.vscPopupBack })
    hl(0, 'WinBar', { fg = c.vscFront, bg = c.vscBack, bold = true })
    hl(0, 'WinBarNc', { fg = c.vscFront, bg = c.vscBack })
    hl(0, 'QuickFixLine', { bold = true })

    -- Treesitter
    hl(0, '@error', { fg = c.vscRed, bg = 'NONE' }) -- Legacy
    hl(0, '@punctuation.bracket', { fg = c.vscFront, bg = 'NONE' })
    hl(0, '@punctuation.special', { fg = c.vscFront, bg = 'NONE' })
    hl(0, '@punctuation.delimiter', { fg = c.vscFront, bg = 'NONE' })
    hl(0, '@comment', { fg = c.vscGreen, bg = 'NONE', italic = opts.italic_comments })
    hl(0, '@comment.note', { fg = c.vscBlueGreen, bg = 'NONE', bold = true })
    hl(0, '@comment.warning', { fg = c.vscYellowOrange, bg = 'NONE', bold = true })
    hl(0, '@comment.error', { fg = c.vscRed, bg = 'NONE', bold = true })
    hl(0, '@constant', { fg = c.vscAccentBlue, bg = 'NONE' })
    hl(0, '@constant.builtin', { fg = c.vscBlue, bg = 'NONE' })
    hl(0, '@constant.macro', { fg = c.vscBlueGreen, bg = 'NONE' })
    hl(0, '@string.regexp', { fg = c.vscOrange, bg = 'NONE' })
    hl(0, '@string', { fg = c.vscOrange, bg = 'NONE' })
    hl(0, '@character', { fg = c.vscOrange, bg = 'NONE' })
    hl(0, '@number', { fg = c.vscLightGreen, bg = 'NONE' })
    hl(0, '@number.float', { fg = c.vscLightGreen, bg = 'NONE' })
    hl(0, '@boolean', { fg = c.vscBlue, bg = 'NONE' })
    hl(0, '@annotation', { fg = c.vscYellow, bg = 'NONE' })
    hl(0, '@attribute', { fg = c.vscYellow, bg = 'NONE' })
    hl(0, '@attribute.builtin', { fg = c.vscBlueGreen, bg = 'NONE' })
    hl(0, '@module', { fg = c.vscBlueGreen, bg = 'NONE' })
    hl(0, '@function', { fg = c.vscYellow, bg = 'NONE' })
    hl(0, '@function.builtin', { fg = c.vscYellow, bg = 'NONE' })
    hl(0, '@function.macro', { fg = c.vscYellow, bg = 'NONE' })
    hl(0, '@function.method', { fg = c.vscYellow, bg = 'NONE' })
    hl(0, '@define', { fg = c.vscPink, bg = 'NONE' })
    hl(0, '@variable', { fg = c.vscLightBlue, bg = 'NONE' })
    hl(0, '@variable.builtin', { fg = c.vscBlue, bg = 'NONE' })
    hl(0, '@variable.parameter', { fg = c.vscLightBlue, bg = 'NONE' })
    hl(0, '@variable.parameter.reference', { fg = c.vscLightBlue, bg = 'NONE' })
    hl(0, '@variable.member', { fg = c.vscLightBlue, bg = 'NONE' })
    hl(0, '@property', { fg = c.vscLightBlue, bg = 'NONE' })
    hl(0, '@constructor', { fg = c.vscBlue, bg = 'NONE' })
    hl(0, '@label', { fg = c.vscLightBlue, bg = 'NONE' })
    hl(0, '@keyword', { fg = c.vscBlue, bg = 'NONE' })
    hl(0, '@keyword.conditional', { fg = c.vscPink, bg = 'NONE' })
    hl(0, '@keyword.repeat', { fg = c.vscPink, bg = 'NONE' })
    hl(0, '@keyword.return', { fg = c.vscPink, bg = 'NONE' })
    hl(0, '@keyword.exception', { fg = c.vscPink, bg = 'NONE' })
    hl(0, '@keyword.import', { fg = c.vscPink, bg = 'NONE' })
    hl(0, '@operator', { fg = c.vscFront, bg = 'NONE' })
    hl(0, '@type', { fg = c.vscBlueGreen, bg = 'NONE' })
    hl(0, '@type.qualifier', { fg = c.vscBlue, bg = 'NONE' })
    hl(0, '@structure', { fg = c.vscLightBlue, bg = 'NONE' })
    hl(0, '@tag', { fg = c.vscBlue, bg = 'NONE' })
    hl(0, '@tag.builtin', { fg = c.vscBlue, bg = 'NONE' })
    hl(0, '@tag.delimiter', { fg = c.vscGray, bg = 'NONE' })
    hl(0, '@tag.attribute', { fg = c.vscLightBlue, bg = 'NONE' })

    hl(0, '@text', { fg = c.vscFront, bg = 'NONE' }) -- Legacy
    hl(0, '@markup.strong', { fg = isDark and c.vscBlue or c.vscViolet, bold = true })
    hl(0, '@markup.italic', { fg = c.vscFront, bg = 'NONE', italic = true })
    hl(0, '@markup.underline', { fg = c.vscYellowOrange, bg = 'NONE', underline = true })
    hl(0, '@markup.strikethrough', { fg = c.vscFront, bg = 'NONE', strikethrough = true })
    hl(0, '@markup.heading', { fg = isDark and c.vscBlue or c.vscYellowOrange, bold = true })
    hl(0, '@markup.heading.1.markdown', { fg = c.vscBlue, bg = "NONE", bold = true })
    hl(0, '@markup.heading.2.markdown', { fg = c.vscOrange, bg = "NONE", bold = true })
    hl(0, '@markup.heading.3.markdown', { fg = c.vscYellow, bg = "NONE", bold = true })
    hl(0, '@markup.heading.4.markdown', { fg = c.vscGreen, bg = "NONE", bold = true })
    hl(0, '@markup.heading.5.markdown', { fg = c.vscBlue, bg = "NONE", bold = true })
    hl(0, '@markup.heading.6.markdown', { fg = c.vscPink, bg = "NONE", bold = true })
    hl(0, '@markup.raw', { fg = c.vscFront, bg = 'NONE' })
    hl(0, '@markup.raw.markdown', { fg = c.vscOrange, bg = 'NONE' })
    hl(0, '@markup.raw.markdown_inline', { fg = c.vscOrange, bg = 'NONE' })
    hl(0, '@markup.link.label', { fg = c.vscLightBlue, bg = 'NONE', underline = opts.underline_links })
    hl(0, '@markup.link.url', { fg = c.vscFront, bg = 'NONE', underline = opts.underline_links })
    hl(0, '@markup.list.checked', { link = 'Todo' })
    hl(0, '@markup.list.unchecked', { link = 'Todo' })
    hl(0, '@textReference', { fg = isDark and c.vscOrange or c.vscYellowOrange })
    hl(0, '@stringEscape', { fg = isDark and c.vscOrange or c.vscYellowOrange, bold = true })

    hl(0, '@diff.plus', { link = 'DiffAdd' })
    hl(0, '@diff.minus', { link = 'DiffDelete' })
    hl(0, '@diff.delta', { link = 'DiffChange' })

    -- LSP semantic tokens
    hl(0, '@type.builtin', { fg = c.vscBlue, bg = 'NONE' })
    hl(0, '@lsp.typemod.type.defaultLibrary', { link = '@type.builtin' })
    hl(0, '@lsp.type.type', { link = '@type' })
    hl(0, '@lsp.type.typeParameter', { link = '@type' })
    hl(0, '@lsp.type.macro', { link = '@constant' })
    hl(0, '@lsp.type.enumMember', { link = '@constant' })
    hl(0, '@lsp.typemod.variable.readonly', { link = '@constant' })
    hl(0, '@lsp.typemod.property.readonly', { link = '@constant' })
    hl(0, '@lsp.typemod.variable.constant', { link = '@constant' })
    hl(0, '@lsp.type.member', { link = '@function' })
    hl(0, '@lsp.type.keyword', { link = '@keyword' })
    hl(0, '@lsp.typemod.keyword.controlFlow', { fg = c.vscPink, bg = 'NONE' })
    hl(0, '@lsp.type.comment.c', { fg = c.vscDimHighlight, bg = 'NONE' })
    hl(0, '@lsp.type.comment.cpp', { fg = c.vscDimHighlight, bg = 'NONE' })
    hl(0, '@event', { link = 'Identifier' })
    hl(0, '@interface', { link = 'Identifier' })
    hl(0, '@modifier', { link = 'Identifier' })
    hl(0, '@regexp', { fg = c.vscRed, bg = 'NONE' })
    hl(0, '@decorator', { link = 'Identifier' })

    -- Markdown
    hl(0, 'markdownBold', { fg = isDark and c.vscBlue or c.vscYellowOrange, bold = true })
    hl(0, 'markdownCode', { fg = c.vscOrange, bg = 'NONE' })
    hl(0, 'markdownRule', { fg = isDark and c.vscBlue or c.vscYellowOrange, bold = true })
    hl(0, 'markdownCodeDelimiter', { fg = c.vscFront, bg = 'NONE' })
    hl(0, 'markdownHeadingDelimiter', { fg = isDark and c.vscBlue or c.vscYellowOrange, bg = 'NONE' })
    hl(0, 'markdownFootnote', { fg = isDark and c.vscOrange or c.vscYellowOrange, bg = 'NONE' })
    hl(0, 'markdownFootnoteDefinition', { fg = isDark and c.vscOrange or c.vscYellowOrange })
    hl(0, 'markdownUrl', { fg = c.vscFront, bg = 'NONE', underline = true })
    hl(0, 'markdownLinkText', { fg = isDark and c.vscOrange or c.vscYellowOrange })
    hl(0, 'markdownEscape', { fg = isDark and c.vscOrange or c.vscYellowOrange })
    hl(0, 'RenderMarkdownH1', { fg = c.vscBlue, bold = true })
    hl(0, 'RenderMarkdownH2', { fg = c.vscOrange, bold = true })
    hl(0, 'RenderMarkdownH3', { fg = c.vscYellow, bold = true })
    hl(0, 'RenderMarkdownH4', { fg = c.vscGreen, bold = true })
    hl(0, 'RenderMarkdownH5', { fg = c.vscBlue, bold = true })
    hl(0, 'RenderMarkdownH6', { fg = c.vscPink, bold = true })
    hl(0, 'RenderMarkdownH1Bg', { bg = c.vscPopupHighlightGray, bold = true })
    hl(0, 'RenderMarkdownH2Bg', { bg = c.vscPopupHighlightGray, bold = true })
    hl(0, 'RenderMarkdownH3Bg', { bg = c.vscPopupHighlightGray, bold = true })
    hl(0, 'RenderMarkdownH4Bg', { bg = c.vscPopupHighlightGray, bold = true })
    hl(0, 'RenderMarkdownH5Bg', { bg = c.vscPopupHighlightGray, bold = true })
    hl(0, 'RenderMarkdownH6Bg', { bg = c.vscPopupHighlightGray, bold = true })

    -- Asciidoc
    hl(0, 'asciidocAttributeEntry', { fg = c.vscYellowOrange })
    hl(0, 'asciidocAttributeList', { fg = c.vscPink })
    hl(0, 'asciidocAttributeRef', { fg = c.vscYellowOrange })
    hl(0, 'asciidocHLabel', { fg = c.vscBlue, bold = true })
    hl(0, 'asciidocListingBlock', { fg = c.vscOrange })
    hl(0, 'asciidocMacroAttributes', { fg = c.vscYellowOrange })
    hl(0, 'asciidocOneLineTitle', { fg = c.vscBlue, bold = true })
    hl(0, 'asciidocPassthroughBlock', { fg = c.vscBlue })
    hl(0, 'asciidocQuotedMonospaced', { fg = c.vscOrange })
    hl(0, 'asciidocTriplePlusPassthrough', { fg = c.vscYellow })
    hl(0, 'asciidocMacro', { fg = c.vscPink })
    hl(0, 'asciidocAdmonition', { fg = c.vscOrange })
    hl(0, 'asciidocQuotedEmphasized', { fg = c.vscBlue, italic = true })
    hl(0, 'asciidocQuotedEmphasized2', { fg = c.vscBlue, italic = true })
    hl(0, 'asciidocQuotedEmphasizedItalic', { fg = c.vscBlue, italic = true })
    hl(0, 'asciidocBackslash', { link = 'Keyword' })
    hl(0, 'asciidocQuotedBold', { link = 'markdownBold' })
    hl(0, 'asciidocQuotedMonospaced2', { link = 'asciidocQuotedMonospaced' })
    hl(0, 'asciidocQuotedUnconstrainedBold', { link = 'asciidocQuotedBold' })
    hl(0, 'asciidocQuotedUnconstrainedEmphasized', { link = 'asciidocQuotedEmphasized' })
    hl(0, 'asciidocURL', { link = 'markdownUrl' })

    -- JSON
    hl(0, 'jsonKeyword', { fg = c.vscLightBlue, bg = 'NONE' })
    hl(0, 'jsonEscape', { fg = c.vscYellowOrange, bg = 'NONE' })
    hl(0, 'jsonNull', { fg = c.vscBlue, bg = 'NONE' })
    hl(0, 'jsonBoolean', { fg = c.vscBlue, bg = 'NONE' })

    -- HTML
    hl(0, 'htmlTag', { fg = c.vscGray, bg = 'NONE' })
    hl(0, 'htmlEndTag', { fg = c.vscGray, bg = 'NONE' })
    hl(0, 'htmlTagName', { fg = c.vscBlue, bg = 'NONE' })
    hl(0, 'htmlSpecialTagName', { fg = c.vscBlue, bg = 'NONE' })
    hl(0, 'htmlArg', { fg = c.vscLightBlue, bg = 'NONE' })

    -- PHP
    hl(0, 'phpStaticClasses', { fg = c.vscBlueGreen, bg = 'NONE' })
    hl(0, 'phpMethod', { fg = c.vscYellow, bg = 'NONE' })
    hl(0, 'phpClass', { fg = c.vscBlueGreen, bg = 'NONE' })
    hl(0, 'phpFunction', { fg = c.vscYellow, bg = 'NONE' })
    hl(0, 'phpInclude', { fg = c.vscBlue, bg = 'NONE' })
    hl(0, 'phpUseClass', { fg = c.vscBlueGreen, bg = 'NONE' })
    hl(0, 'phpRegion', { fg = c.vscBlueGreen, bg = 'NONE' })
    hl(0, 'phpMethodsVar', { fg = c.vscLightBlue, bg = 'NONE' })

    -- CSS
    hl(0, 'cssBraces', { fg = c.vscFront, bg = 'NONE' })
    hl(0, 'cssInclude', { fg = c.vscPink, bg = 'NONE' })
    hl(0, 'cssTagName', { fg = c.vscYellowOrange, bg = 'NONE' })
    hl(0, 'cssClassName', { fg = c.vscYellowOrange, bg = 'NONE' })
    hl(0, 'cssPseudoClass', { fg = c.vscYellowOrange, bg = 'NONE' })
    hl(0, 'cssPseudoClassId', { fg = c.vscYellowOrange, bg = 'NONE' })
    hl(0, 'cssPseudoClassLang', { fg = c.vscYellowOrange, bg = 'NONE' })
    hl(0, 'cssIdentifier', { fg = c.vscYellowOrange, bg = 'NONE' })
    hl(0, 'cssProp', { fg = c.vscLightBlue, bg = 'NONE' })
    hl(0, 'cssDefinition', { fg = c.vscLightBlue, bg = 'NONE' })
    hl(0, 'cssAttr', { fg = c.vscOrange, bg = 'NONE' })
    hl(0, 'cssAttrRegion', { fg = c.vscOrange, bg = 'NONE' })
    hl(0, 'cssColor', { fg = c.vscOrange, bg = 'NONE' })
    hl(0, 'cssFunction', { fg = c.vscOrange, bg = 'NONE' })
    hl(0, 'cssFunctionName', { fg = c.vscOrange, bg = 'NONE' })
    hl(0, 'cssVendor', { fg = c.vscOrange, bg = 'NONE' })
    hl(0, 'cssValueNumber', { fg = c.vscOrange, bg = 'NONE' })
    hl(0, 'cssValueLength', { fg = c.vscOrange, bg = 'NONE' })
    hl(0, 'cssUnitDecorators', { fg = c.vscOrange, bg = 'NONE' })
    hl(0, 'cssStyle', { fg = c.vscLightBlue, bg = 'NONE' })
    hl(0, 'cssImportant', { fg = c.vscBlue, bg = 'NONE' })

    -- JavaScript
    hl(0, 'jsVariableDef', { fg = c.vscLightBlue, bg = 'NONE' })
    hl(0, 'jsFuncArgs', { fg = c.vscLightBlue, bg = 'NONE' })
    hl(0, 'jsFuncBlock', { fg = c.vscLightBlue, bg = 'NONE' })
    hl(0, 'jsRegexpString', { fg = c.vscLightRed, bg = 'NONE' })
    hl(0, 'jsThis', { fg = c.vscBlue, bg = 'NONE' })
    hl(0, 'jsOperatorKeyword', { fg = c.vscBlue, bg = 'NONE' })
    hl(0, 'jsDestructuringBlock', { fg = c.vscLightBlue, bg = 'NONE' })
    hl(0, 'jsObjectKey', { fg = c.vscLightBlue, bg = 'NONE' })
    hl(0, 'jsGlobalObjects', { fg = c.vscBlueGreen, bg = 'NONE' })
    hl(0, 'jsModuleKeyword', { fg = c.vscLightBlue, bg = 'NONE' })
    hl(0, 'jsClassDefinition', { fg = c.vscBlueGreen, bg = 'NONE' })
    hl(0, 'jsClassKeyword', { fg = c.vscBlue, bg = 'NONE' })
    hl(0, 'jsExtendsKeyword', { fg = c.vscBlue, bg = 'NONE' })
    hl(0, 'jsExportDefault', { fg = c.vscPink, bg = 'NONE' })
    hl(0, 'jsFuncCall', { fg = c.vscYellow, bg = 'NONE' })
    hl(0, 'jsObjectValue', { fg = c.vscLightBlue, bg = 'NONE' })
    hl(0, 'jsParen', { fg = c.vscLightBlue, bg = 'NONE' })
    hl(0, 'jsObjectProp', { fg = c.vscLightBlue, bg = 'NONE' })
    hl(0, 'jsIfElseBlock', { fg = c.vscLightBlue, bg = 'NONE' })
    hl(0, 'jsParenIfElse', { fg = c.vscLightBlue, bg = 'NONE' })
    hl(0, 'jsSpreadOperator', { fg = c.vscLightBlue, bg = 'NONE' })
    hl(0, 'jsSpreadExpression', { fg = c.vscLightBlue, bg = 'NONE' })

    -- Typescript
    hl(0, '@type.builtin.typescript', { link = '@type' })
    hl(0, '@type.builtin.tsx', { link = '@type' })
    hl(0, 'typescriptLabel', { fg = c.vscLightBlue, bg = 'NONE' })
    hl(0, 'typescriptExceptions', { fg = c.vscLightBlue, bg = 'NONE' })
    hl(0, 'typescriptBraces', { fg = c.vscFront, bg = 'NONE' })
    hl(0, 'typescriptEndColons', { fg = c.vscLightBlue, bg = 'NONE' })
    hl(0, 'typescriptParens', { fg = c.vscFront, bg = 'NONE' })
    hl(0, 'typescriptDocTags', { fg = c.vscBlue, bg = 'NONE' })
    hl(0, 'typescriptDocComment', { fg = c.vscBlueGreen, bg = 'NONE' })
    hl(0, 'typescriptLogicSymbols', { fg = c.vscLightBlue, bg = 'NONE' })
    hl(0, 'typescriptImport', { fg = c.vscPink, bg = 'NONE' })
    hl(0, 'typescriptBOM', { fg = c.vscLightBlue, bg = 'NONE' })
    hl(0, 'typescriptVariableDeclaration', { fg = c.vscLightBlue, bg = 'NONE' })
    hl(0, 'typescriptVariable', { fg = c.vscBlue, bg = 'NONE' })
    hl(0, 'typescriptExport', { fg = c.vscPink, bg = 'NONE' })
    hl(0, 'typescriptAliasDeclaration', { fg = c.vscBlueGreen, bg = 'NONE' })
    hl(0, 'typescriptAliasKeyword', { fg = c.vscBlue, bg = 'NONE' })
    hl(0, 'typescriptClassName', { fg = c.vscBlueGreen, bg = 'NONE' })
    hl(0, 'typescriptAccessibilityModifier', { fg = c.vscBlue, bg = 'NONE' })
    hl(0, 'typescriptOperator', { fg = c.vscBlue, bg = 'NONE' })
    hl(0, 'typescriptArrowFunc', { fg = c.vscBlue, bg = 'NONE' })
    hl(0, 'typescriptMethodAccessor', { fg = c.vscBlue, bg = 'NONE' })
    hl(0, 'typescriptMember', { fg = c.vscYellow, bg = 'NONE' })
    hl(0, 'typescriptTypeReference', { fg = c.vscBlueGreen, bg = 'NONE' })
    hl(0, 'typescriptTemplateSB', { fg = c.vscYellowOrange, bg = 'NONE' })
    hl(0, 'typescriptArrowFuncArg', { fg = c.vscLightBlue, bg = 'NONE' })
    hl(0, 'typescriptParamImpl', { fg = c.vscLightBlue, bg = 'NONE' })
    hl(0, 'typescriptFuncComma', { fg = c.vscLightBlue, bg = 'NONE' })
    hl(0, 'typescriptCastKeyword', { fg = c.vscLightBlue, bg = 'NONE' })
    hl(0, 'typescriptCall', { fg = c.vscBlue, bg = 'NONE' })
    hl(0, 'typescriptCase', { fg = c.vscLightBlue, bg = 'NONE' })
    hl(0, 'typescriptReserved', { fg = c.vscPink, bg = 'NONE' })
    hl(0, 'typescriptDefault', { fg = c.vscLightBlue, bg = 'NONE' })
    hl(0, 'typescriptDecorator', { fg = c.vscYellow, bg = 'NONE' })
    hl(0, 'typescriptPredefinedType', { fg = c.vscBlueGreen, bg = 'NONE' })
    hl(0, 'typescriptClassHeritage', { fg = c.vscBlueGreen, bg = 'NONE' })
    hl(0, 'typescriptClassExtends', { fg = c.vscBlue, bg = 'NONE' })
    hl(0, 'typescriptClassKeyword', { fg = c.vscBlue, bg = 'NONE' })
    hl(0, 'typescriptBlock', { fg = c.vscLightBlue, bg = 'NONE' })
    hl(0, 'typescriptDOMDocProp', { fg = c.vscLightBlue, bg = 'NONE' })
    hl(0, 'typescriptTemplateSubstitution', { fg = c.vscLightBlue, bg = 'NONE' })
    hl(0, 'typescriptClassBlock', { fg = c.vscLightBlue, bg = 'NONE' })
    hl(0, 'typescriptFuncCallArg', { fg = c.vscLightBlue, bg = 'NONE' })
    hl(0, 'typescriptIndexExpr', { fg = c.vscLightBlue, bg = 'NONE' })
    hl(0, 'typescriptConditionalParen', { fg = c.vscLightBlue, bg = 'NONE' })
    hl(0, 'typescriptArray', { fg = c.vscYellow, bg = 'NONE' })
    hl(0, 'typescriptES6SetProp', { fg = c.vscLightBlue, bg = 'NONE' })
    hl(0, 'typescriptObjectLiteral', { fg = c.vscLightBlue, bg = 'NONE' })
    hl(0, 'typescriptTypeParameter', { fg = c.vscBlueGreen, bg = 'NONE' })
    hl(0, 'typescriptEnumKeyword', { fg = c.vscBlue, bg = 'NONE' })
    hl(0, 'typescriptEnum', { fg = c.vscBlueGreen, bg = 'NONE' })
    hl(0, 'typescriptLoopParen', { fg = c.vscLightBlue, bg = 'NONE' })
    hl(0, 'typescriptParenExp', { fg = c.vscLightBlue, bg = 'NONE' })
    hl(0, 'typescriptModule', { fg = c.vscLightBlue, bg = 'NONE' })
    hl(0, 'typescriptAmbientDeclaration', { fg = c.vscBlue, bg = 'NONE' })
    hl(0, 'typescriptFuncTypeArrow', { fg = c.vscBlue, bg = 'NONE' })
    hl(0, 'typescriptInterfaceHeritage', { fg = c.vscBlueGreen, bg = 'NONE' })
    hl(0, 'typescriptInterfaceName', { fg = c.vscBlueGreen, bg = 'NONE' })
    hl(0, 'typescriptInterfaceKeyword', { fg = c.vscBlue, bg = 'NONE' })
    hl(0, 'typescriptInterfaceExtends', { fg = c.vscBlue, bg = 'NONE' })
    hl(0, 'typescriptGlobal', { fg = c.vscBlueGreen, bg = 'NONE' })
    hl(0, 'typescriptAsyncFuncKeyword', { fg = c.vscBlue, bg = 'NONE' })
    hl(0, 'typescriptFuncKeyword', { fg = c.vscBlue, bg = 'NONE' })
    hl(0, 'typescriptGlobalMethod', { fg = c.vscYellow, bg = 'NONE' })
    hl(0, 'typescriptPromiseMethod', { fg = c.vscYellow, bg = 'NONE' })

    -- XML
    hl(0, 'xmlTag', { fg = c.vscBlue, bg = 'NONE' })
    hl(0, 'xmlTagName', { fg = c.vscBlue, bg = 'NONE' })
    hl(0, 'xmlEndTag', { fg = c.vscBlue, bg = 'NONE' })

    -- Ruby
    hl(0, 'rubyClassNameTag', { fg = c.vscBlueGreen, bg = 'NONE' })
    hl(0, 'rubyClassName', { fg = c.vscBlueGreen, bg = 'NONE' })
    hl(0, 'rubyModuleName', { fg = c.vscBlueGreen, bg = 'NONE' })
    hl(0, 'rubyConstant', { fg = c.vscBlueGreen, bg = 'NONE' })

    -- Golang
    hl(0, 'goPackage', { fg = c.vscBlue, bg = 'NONE' })
    hl(0, 'goImport', { fg = c.vscBlue, bg = 'NONE' })
    hl(0, 'goVar', { fg = c.vscBlue, bg = 'NONE' })
    hl(0, 'goConst', { fg = c.vscBlue, bg = 'NONE' })
    hl(0, 'goStatement', { fg = c.vscPink, bg = 'NONE' })
    hl(0, 'goType', { fg = c.vscBlueGreen, bg = 'NONE' })
    hl(0, 'goSignedInts', { fg = c.vscBlueGreen, bg = 'NONE' })
    hl(0, 'goUnsignedInts', { fg = c.vscBlueGreen, bg = 'NONE' })
    hl(0, 'goFloats', { fg = c.vscBlueGreen, bg = 'NONE' })
    hl(0, 'goComplexes', { fg = c.vscBlueGreen, bg = 'NONE' })
    hl(0, 'goBuiltins', { fg = c.vscYellow, bg = 'NONE' })
    hl(0, 'goBoolean', { fg = c.vscBlue, bg = 'NONE' })
    hl(0, 'goPredefinedIdentifiers', { fg = c.vscBlue, bg = 'NONE' })
    hl(0, 'goTodo', { fg = c.vscGreen, bg = 'NONE' })
    hl(0, 'goDeclaration', { fg = c.vscBlue, bg = 'NONE' })
    hl(0, 'goDeclType', { fg = c.vscBlue, bg = 'NONE' })
    hl(0, 'goTypeDecl', { fg = c.vscBlue, bg = 'NONE' })
    hl(0, 'goTypeName', { fg = c.vscBlueGreen, bg = 'NONE' })
    hl(0, 'goVarAssign', { fg = c.vscLightBlue, bg = 'NONE' })
    hl(0, 'goVarDefs', { fg = c.vscLightBlue, bg = 'NONE' })
    hl(0, 'goReceiver', { fg = c.vscFront, bg = 'NONE' })
    hl(0, 'goReceiverType', { fg = c.vscFront, bg = 'NONE' })
    hl(0, 'goFunctionCall', { fg = c.vscYellow, bg = 'NONE' })
    hl(0, 'goMethodCall', { fg = c.vscYellow, bg = 'NONE' })
    hl(0, 'goSingleDecl', { fg = c.vscLightBlue, bg = 'NONE' })

    -- Python
    hl(0, 'pythonStatement', { fg = c.vscBlue, bg = 'NONE' })
    hl(0, 'pythonOperator', { fg = c.vscBlue, bg = 'NONE' })
    hl(0, 'pythonException', { fg = c.vscPink, bg = 'NONE' })
    hl(0, 'pythonExClass', { fg = c.vscBlueGreen, bg = 'NONE' })
    hl(0, 'pythonBuiltinObj', { fg = c.vscLightBlue, bg = 'NONE' })
    hl(0, 'pythonBuiltinType', { fg = c.vscBlueGreen, bg = 'NONE' })
    hl(0, 'pythonBoolean', { fg = c.vscBlue, bg = 'NONE' })
    hl(0, 'pythonNone', { fg = c.vscBlue, bg = 'NONE' })
    hl(0, 'pythonTodo', { fg = c.vscBlue, bg = 'NONE' })
    hl(0, 'pythonClassVar', { fg = c.vscBlue, bg = 'NONE' })
    hl(0, 'pythonClassDef', { fg = c.vscBlueGreen, bg = 'NONE' })
    hl(0, '@constructor.python', { fg = c.vscBlueGreen, bg = 'NONE' })

    -- TeX
    hl(0, 'texStatement', { fg = c.vscBlue, bg = 'NONE' })
    hl(0, 'texBeginEnd', { fg = c.vscYellow, bg = 'NONE' })
    hl(0, 'texBeginEndName', { fg = c.vscLightBlue, bg = 'NONE' })
    hl(0, 'texOption', { fg = c.vscLightBlue, bg = 'NONE' })
    hl(0, 'texBeginEndModifier', { fg = c.vscLightBlue, bg = 'NONE' })
    hl(0, 'texDocType', { fg = c.vscPink, bg = 'NONE' })
    hl(0, 'texDocTypeArgs', { fg = c.vscLightBlue, bg = 'NONE' })

    -- Git
    hl(0, 'gitcommitHeader', { fg = c.vscGray, bg = 'NONE' })
    hl(0, 'gitcommitOnBranch', { fg = c.vscGray, bg = 'NONE' })
    hl(0, 'gitcommitBranch', { fg = c.vscPink, bg = 'NONE' })
    hl(0, 'gitcommitComment', { fg = c.vscGray, bg = 'NONE' })
    hl(0, 'gitcommitSelectedType', { fg = c.vscGreen, bg = 'NONE' })
    hl(0, 'gitcommitSelectedFile', { fg = c.vscGreen, bg = 'NONE' })
    hl(0, 'gitcommitDiscardedType', { fg = c.vscRed, bg = 'NONE' })
    hl(0, 'gitcommitDiscardedFile', { fg = c.vscRed, bg = 'NONE' })
    hl(0, 'gitcommitOverflow', { fg = c.vscRed, bg = 'NONE' })
    hl(0, 'gitcommitSummary', { fg = c.vscPink, bg = 'NONE' })
    hl(0, 'gitcommitBlank', { fg = c.vscPink, bg = 'NONE' })

    -- Lua
    hl(0, 'luaFuncCall', { fg = c.vscYellow, bg = 'NONE' })
    hl(0, 'luaFuncArgName', { fg = c.vscLightBlue, bg = 'NONE' })
    hl(0, 'luaFuncKeyword', { fg = c.vscPink, bg = 'NONE' })
    hl(0, 'luaLocal', { fg = c.vscPink, bg = 'NONE' })
    hl(0, 'luaBuiltIn', { fg = c.vscBlue, bg = 'NONE' })

    -- SH
    hl(0, 'shDeref', { fg = c.vscLightBlue, bg = 'NONE' })
    hl(0, 'shVariable', { fg = c.vscLightBlue, bg = 'NONE' })

    -- SQL
    hl(0, 'sqlKeyword', { fg = c.vscPink, bg = 'NONE' })
    hl(0, 'sqlFunction', { fg = c.vscYellowOrange, bg = 'NONE' })
    hl(0, 'sqlOperator', { fg = c.vscPink, bg = 'NONE' })

    -- YAML
    hl(0, 'yamlKey', { fg = c.vscBlue, bg = 'NONE' })
    hl(0, 'yamlConstant', { fg = c.vscBlue, bg = 'NONE' })

    -- Gitgutter
    hl(0, 'GitGutterAdd', { fg = c.vscGreen, bg = 'NONE' })
    hl(0, 'GitGutterChange', { fg = c.vscYellow, bg = 'NONE' })
    hl(0, 'GitGutterDelete', { fg = c.vscRed, bg = 'NONE' })

    -- Git Signs
    hl(0, 'GitSignsAdd', { fg = c.vscGreen, bg = 'NONE' })
    hl(0, 'GitSignsChange', { fg = c.vscYellow, bg = 'NONE' })
    hl(0, 'GitSignsDelete', { fg = c.vscRed, bg = 'NONE' })
    hl(0, 'GitSignsAddLn', { fg = c.vscBack, bg = c.vscGreen })
    hl(0, 'GitSignsChangeLn', { fg = c.vscBack, bg = c.vscYellow })
    hl(0, 'GitSignsDeleteLn', { fg = c.vscBack, bg = c.vscRed })

    -- NvimTree
    hl(0, 'NvimTreeRootFolder', { fg = c.vscFront, bg = 'NONE', bold = true })
    hl(0, 'NvimTreeGitDirty', { fg = c.vscYellow, bg = 'NONE' })
    hl(0, 'NvimTreeGitNew', { fg = c.vscGreen, bg = 'NONE' })
    hl(0, 'NvimTreeImageFile', { fg = c.vscViolet, bg = 'NONE' })
    hl(0, 'NvimTreeEmptyFolderName', { fg = c.vscGray, bg = 'NONE' })
    hl(0, 'NvimTreeFolderName', { fg = c.vscFront, bg = 'NONE' })
    hl(0, 'NvimTreeSpecialFile', { fg = c.vscPink, bg = 'NONE', underline = true })
    hl(0, 'NvimTreeNormal', { fg = c.vscFront, bg = opts.disable_nvimtree_bg and c.vscBack or c.vscLeftDark })
    hl(0, 'NvimTreeCursorLine', { fg = 'NONE', bg = opts.disable_nvimtree_bg and c.vscCursorDarkDark or c.vscLeftMid })
    hl(0, 'NvimTreeVertSplit', { fg = opts.disable_nvimtree_bg and c.vscSplitDark or c.vscBack, bg = c.vscBack })
    hl(0, 'NvimTreeEndOfBuffer', { fg = opts.disable_nvimtree_bg and c.vscCursorDarkDark or c.vscLeftDark })
    hl(
        0,
        'NvimTreeOpenedFolderName',
        { fg = 'NONE', bg = opts.disable_nvimtree_bg and c.vscCursorDarkDark or c.vscLeftDark }
    )
    hl(0, 'NvimTreeGitRenamed', { fg = c.vscGitRenamed, bg = 'NONE' })
    hl(0, 'NvimTreeGitIgnored', { fg = c.vscGitIgnored, bg = 'NONE' })
    hl(0, 'NvimTreeGitDeleted', { fg = c.vscGitDeleted, bg = 'NONE' })
    hl(0, 'NvimTreeGitStaged', { fg = c.vscGitStageModified, bg = 'NONE' })
    hl(0, 'NvimTreeGitMerge', { fg = c.vscGitUntracked, bg = 'NONE' })
    hl(0, 'NvimTreeGitDirty', { fg = c.vscGitModified, bg = 'NONE' })
    hl(0, 'NvimTreeGitNew', { fg = c.vscGitAdded, bg = 'NONE' })

    -- Bufferline
    hl(0, 'BufferLineIndicatorSelected', { fg = c.vscLeftDark, bg = 'NONE' })
    hl(0, 'BufferLineFill', { fg = 'NONE', bg = opts.transparent and c.vscBack or c.vscLeftDark })

    -- BarBar
    hl(0, 'BufferCurrent', { fg = c.vscFront, bg = c.vscTabCurrent })
    hl(0, 'BufferCurrentIndex', { fg = c.vscFront, bg = c.vscTabCurrent })
    hl(0, 'BufferCurrentMod', { fg = c.vscYellowOrange, bg = c.vscTabCurrent })
    hl(0, 'BufferCurrentSign', { fg = c.vscFront, bg = c.vscTabCurrent })
    hl(0, 'BufferCurrentTarget', { fg = c.vscRed, bg = c.vscTabCurrent })
    hl(0, 'BufferVisible', { fg = c.vscGray, bg = c.vscTabCurrent })
    hl(0, 'BufferVisibleIndex', { fg = c.vscGray, bg = c.vscTabCurrent })
    hl(0, 'BufferVisibleMod', { fg = c.vscYellowOrange, bg = c.vscTabCurrent })
    hl(0, 'BufferVisibleSign', { fg = c.vscGray, bg = c.vscTabCurrent })
    hl(0, 'BufferVisibleTarget', { fg = c.vscRed, bg = c.vscTabCurrent })
    hl(0, 'BufferInactive', { fg = c.vscGray, bg = c.vscTabOther })
    hl(0, 'BufferInactiveIndex', { fg = c.vscGray, bg = c.vscTabOther })
    hl(0, 'BufferInactiveMod', { fg = c.vscYellowOrange, bg = c.vscTabOther })
    hl(0, 'BufferInactiveSign', { fg = c.vscGray, bg = c.vscTabOther })
    hl(0, 'BufferInactiveTarget', { fg = c.vscRed, bg = c.vscTabOther })
    hl(0, 'BufferTabpage', { fg = c.vscFront, bg = c.vscTabOther })
    hl(0, 'BufferTabpageFill', { fg = c.vscFront, bg = c.vscTabOther })
    hl(0, 'BufferTabpages', { fg = c.vscFront, bg = c.vscTabOther })
    hl(0, 'BufferTabpagesFill', { fg = c.vscFront, bg = c.vscTabOther })

    -- IndentBlankLine
    hl(0, 'IblIndent', { fg = c.vscContext, bg = 'NONE', nocombine = true })
    hl(0, 'IblWhitespace', { fg = c.vscContext, bg = 'NONE', nocombine = true })
    hl(0, 'IblScope', { fg = c.vscContextCurrent, bg = 'NONE', nocombine = true })

    -- Snacks.indent
    hl(0, 'SnacksIndent', { fg = c.vscContext, bg = 'NONE', nocombine = true })
    hl(0, 'SnacksIndentScope', { fg = c.vscContextCurrent, bg = 'NONE', nocombine = true })

    -- Neotest
    hl(0, 'NeotestAdapterName', { fg = c.vscFront, bold = true })
    hl(0, 'NeotestDir', { fg = c.vscBlue })
    hl(0, 'NeotestExpandMarker', { fg = c.vscDimHighlight })
    hl(0, 'NeotestFailed', { fg = c.vscRed })
    hl(0, 'NeotestFile', { fg = c.vscBlue })
    hl(0, 'NeotestFocused', { bold = true })
    hl(0, 'NeotestIndent', { fg = c.vscDimHighlight })
    hl(0, 'NeotestMarked', { fg = c.vscYellowOrange, bold = true })
    hl(0, 'NeotestNamespace', { fg = c.vscPink })
    hl(0, 'NeotestPassed', { fg = c.vscBlueGreen })
    hl(0, 'NeotestRunning', { fg = c.vscDarkYellow })
    hl(0, 'NeotestSkipped', { fg = c.vscBlue })
    hl(0, 'NeotestTarget', { fg = c.vscLightRed })
    hl(0, 'NeotestWatching', { fg = c.vscDarkYellow })
    hl(0, 'NeotestWinSelect', { fg = c.vscBlue, bold = true })

    -- LSP
    hl(0, 'DiagnosticOk', { fg = c.vscBlueGreen, bg = 'NONE' })
    hl(0, 'DiagnosticError', { fg = c.vscRed, bg = 'NONE' })
    hl(0, 'DiagnosticWarn', { fg = c.vscYellow, bg = 'NONE' })
    hl(0, 'DiagnosticInfo', { fg = c.vscBlue, bg = 'NONE' })
    hl(0, 'DiagnosticHint', { fg = c.vscBlue, bg = 'NONE' })
    hl(0, 'DiagnosticUnnecessary', { fg = c.vscDisabledBlue, bg = 'NONE' })
    hl(0, 'DiagnosticUnderlineError', { fg = 'NONE', bg = 'NONE', undercurl = true, sp = c.vscRed })
    hl(0, 'DiagnosticUnderlineWarn', { fg = 'NONE', bg = 'NONE', undercurl = true, sp = c.vscYellow })
    hl(0, 'DiagnosticUnderlineInfo', { fg = 'NONE', bg = 'NONE', undercurl = true, sp = c.vscBlue })
    hl(0, 'DiagnosticUnderlineHint', { fg = 'NONE', bg = 'NONE', undercurl = true, sp = c.vscBlue })
    hl(0, 'LspReferenceText', { fg = 'NONE', bg = isDark and c.vscPopupHighlightGray or c.vscPopupHighlightLightBlue })
    hl(0, 'LspReferenceRead', { fg = 'NONE', bg = isDark and c.vscPopupHighlightGray or c.vscPopupHighlightLightBlue })
    hl(0, 'LspReferenceWrite', { fg = 'NONE', bg = isDark and c.vscPopupHighlightGray or c.vscPopupHighlightLightBlue })
    hl(0, 'LspInlayHint', { fg = c.vscSuggestion, bg = 'NONE', italic = opts.italic_inlayhints })

    -- Trouble
    hl(0, 'TroubleNormal', { link = 'Normal' })
    hl(0, 'TroubleNormalNC', { link = 'Normal' })

    -- COC.nvim
    hl(0, 'CocHighlightText', { fg = 'NONE', bg = isDark and c.vscPopupHighlightGray or c.vscPopupHighlightLightBlue })
    hl(0, 'CocHighlightRead', { fg = 'NONE', bg = isDark and c.vscPopupHighlightGray or c.vscPopupHighlightLightBlue })
    hl(0, 'CocHighlightWrite', { fg = 'NONE', bg = isDark and c.vscPopupHighlightGray or c.vscPopupHighlightLightBlue })

    -- Nvim compe
    hl(0, 'CmpItemKindVariable', { fg = c.vscLightBlue, bg = 'NONE' })
    hl(0, 'CmpItemKindInterface', { fg = c.vscLightBlue, bg = 'NONE' })
    hl(0, 'CmpItemKindText', { fg = c.vscLightBlue, bg = 'NONE' })
    hl(0, 'CmpItemKindFunction', { fg = c.vscPink, bg = 'NONE' })
    hl(0, 'CmpItemKindMethod', { fg = c.vscPink, bg = 'NONE' })
    hl(0, 'CmpItemKindKeyword', { fg = c.vscFront, bg = 'NONE' })
    hl(0, 'CmpItemKindProperty', { fg = c.vscFront, bg = 'NONE' })
    hl(0, 'CmpItemKindUnit', { fg = c.vscFront, bg = 'NONE' })
    hl(0, 'CmpItemKindConstructor', { fg = c.vscUiOrange, bg = 'NONE' })
    hl(0, 'CmpItemMenu', { fg = c.vscPopupFront, bg = 'NONE' })
    hl(0, 'CmpItemAbbr', { fg = c.vscFront, bg = 'NONE' })
    hl(0, 'CmpItemAbbrDeprecated', { fg = c.vscCursorDark, bg = c.vscPopupBack, strikethrough = true })
    hl(0, 'CmpItemAbbrMatch', { fg = isDark and c.vscMediumBlue or c.vscDarkBlue, bg = 'NONE', bold = true })
    hl(0, 'CmpItemAbbrMatchFuzzy', { fg = isDark and c.vscMediumBlue or c.vscDarkBlue, bg = 'NONE', bold = true })

    -- Blink
    hl(0, 'BlinkCmpMenu', { link = 'Pmenu' })
    hl(0, 'BlinkCmpMenuBorder', { link = 'FloatBorder' })
    hl(0, 'BlinkCmpMenuSelection', { link = 'PmenuSel' })
    hl(0, 'BlinkCmpScrollBarThumb', { link = 'PmenuThumb' })
    hl(0, 'BlinkCmpScrollBarGutter', { link = 'PmenuSbar' })
    hl(0, 'BlinkCmpLabel', { fg = c.vscFront, bg = 'NONE' })
    hl(0, 'BlinkCmpLabelMatch', { fg = isDark and c.vscMediumBlue or c.vscDarkBlue, bg = 'NONE', bold = true })
    hl(0, 'BlinkCmpLabelDetail', { fg = c.vscPopupFront, bg = 'NONE' })
    hl(0, 'BlinkCmpLabelDescription', { fg = c.vscPopupFront, bg = 'NONE' })
    hl(0, 'BlinkCmpKind', { fg = c.vscPopupFront, bg = 'NONE' })
    hl(0, 'BlinkCmpSource', { fg = c.vscPopupFront, bg = 'NONE' })
    hl(0, 'BlinkCmpGhostText', { fg = c.vscContextCurrent })
    hl(0, 'BlinkCmpDoc', { link = 'NormalFloat' })
    hl(0, 'BlinkCmpDocBorder', { link = 'FloatBorder' })
    hl(0, 'BlinkCmpDocSeparator', { link = 'NormalFloat' })
    hl(0, 'BlinkCmpDocCursorLine', { link = 'Visual' })
    hl(0, 'BlinkCmpSignatureHelp', { link = 'NormalFloat' })
    hl(0, 'BlinkCmpSignatureHelpBorder', { link = 'NormalFloat' })
    hl(0, 'BlinkCmpSignatureHelpActiveParameter', { link = 'LspSignatureActiveParameter' })

    hl(0, 'BlinkCmpKindText', { fg = c.vscPopupFront, bg = 'NONE' })
    hl(0, 'BlinkCmpKindMethod', { fg = c.vscPink, bg = 'NONE' })
    hl(0, 'BlinkCmpKindFunction', { fg = c.vscPink, bg = 'NONE' })
    hl(0, 'BlinkCmpKindConstructor', { fg = c.vscUiOrange, bg = 'NONE' })
    hl(0, 'BlinkCmpKindField', { link = '@variable.member' })
    hl(0, 'BlinkCmpKindVariable', { link = '@variable.member' })
    hl(0, 'BlinkCmpKindClass', { link = 'BlinkCmpKindConstructor' })
    hl(0, 'BlinkCmpKindInterface', { fg = c.vscLightBlue, bg = 'NONE' })
    hl(0, 'BlinkCmpKindModule', { link = 'BlinkCmpKindClass' })
    hl(0, 'BlinkCmpKindProperty', { link = 'BlinkCmpKindField' })
    hl(0, 'BlinkCmpKindUnit', { link = 'BlinkCmpKindField' })
    hl(0, 'BlinkCmpKindValue', { link = '@variable.member' })
    hl(0, 'BlinkCmpKindEnum', { link = 'BlinkCmpKindConstructor' })
    hl(0, 'BlinkCmpKindKeyword', { fg = c.vscDarkYellow, bg = 'NONE' })
    hl(0, 'BlinkCmpKindSnippet', { fg = c.vscDarkYellow, bg = 'NONE' })
    hl(0, 'BlinkCmpKindColor', { link = 'cssColor' })
    hl(0, 'BlinkCmpKindFile', { link = '@text.uri' })
    hl(0, 'BlinkCmpKindReference', { link = '@variable.parameter.reference' })
    hl(0, 'BlinkCmpKindFolder', { link = 'NeotestDir' })
    hl(0, 'BlinkCmpKindEnumMember', { link = '@variable.member' })
    hl(0, 'BlinkCmpKindConstant', { link = '@constant' })
    hl(0, 'BlinkCmpKindStruct', { link = '@structure' })
    hl(0, 'BlinkCmpKindEvent', { fg = c.vscDarkYellow, bg = 'NONE' })
    hl(0, 'BlinkCmpKindOperator', { link = '@operator' })
    hl(0, 'BlinkCmpKindTypeParameter', { link = '@variable.parameter' })
    hl(0, 'BlinkCmpKindCopilot', { fg = c.vscBlueGreen })

    -- HiPhish/rainbow-delimiters.nvim
    hl(0, 'RainbowDelimiterRed', { fg = c.vscPink, bg = 'NONE' })
    hl(0, 'RainbowDelimiterOrange', { fg = c.vscOrange, bg = 'NONE' })
    hl(0, 'RainbowDelimiterYellow', { fg = c.vscYellowOrange, bg = 'NONE' })
    hl(0, 'RainbowDelimiterGreen', { fg = c.vscGreen, bg = 'NONE' })
    hl(0, 'RainbowDelimiterCyan', { fg = c.vscBlueGreen, bg = 'NONE' })
    hl(0, 'RainbowDelimiterBlue', { fg = c.vscMediumBlue, bg = 'NONE' })
    hl(0, 'RainbowDelimiterViolet', { fg = c.vscViolet, bg = 'NONE' })

    -- rcarriga/nvim-dap-ui
    -- Source: https://github.com/rcarriga/nvim-dap-ui/blob/master/lua/dapui/config/highlights.lua
    hl(0, 'DapUIBreakpointsCurrentLine', { fg = c.vscBlueGreen, bold = true })
    hl(0, 'DapUIBreakpointsDisabledLine', { fg = c.vscDimHighlight })
    hl(0, 'DapUIBreakpointsInfo', { fg = c.vscBlueGreen })
    hl(0, 'DapUIBreakpointsLine', { fg = c.vscPink })
    hl(0, 'DapUIBreakpointsPath', { fg = c.vscPink })
    hl(0, 'DapUICurrentFrameName', { fg = c.vscBlueGreen, bold = true })
    hl(0, 'DapUIDecoration', { fg = c.vscPink })
    hl(0, 'DapUIFloatBorder', { fg = c.vscPink })
    hl(0, 'DapUILineNumber', { fg = c.vscPink })
    hl(0, 'DapUIModifiedValue', { fg = c.vscPink, bold = true })
    hl(0, 'DapUIPlayPause', { fg = c.vscBlueGreen })
    hl(0, 'DapUIPlayPauseNC', { fg = c.vscBlueGreen })
    hl(0, 'DapUIRestart', { fg = c.vscBlueGreen })
    hl(0, 'DapUIRestartNC', { fg = c.vscBlueGreen })
    hl(0, 'DapUIScope', { fg = c.vscPink })
    hl(0, 'DapUISource', { fg = c.vscMediumBlue })
    hl(0, 'DapUIStepBack', { fg = c.vscPink })
    hl(0, 'DapUIStepBackNC', { fg = c.vscPink })
    hl(0, 'DapUIStepInto', { fg = c.vscPink })
    hl(0, 'DapUIStepIntoNC', { fg = c.vscPink })
    hl(0, 'DapUIStepOut', { fg = c.vscPink })
    hl(0, 'DapUIStepOutNC', { fg = c.vscPink })
    hl(0, 'DapUIStepOver', { fg = c.vscPink })
    hl(0, 'DapUIStepOverNC', { fg = c.vscPink })
    hl(0, 'DapUIStop', { fg = c.vscRed })
    hl(0, 'DapUIStopNC', { fg = c.vscRed })
    hl(0, 'DapUIStoppedThread', { fg = c.vscPink })
    hl(0, 'DapUIThread', { fg = c.vscBlueGreen })
    hl(0, 'DapUIType', { fg = c.vscPink })
    hl(0, 'DapUIUnavailable', { fg = c.vscDimHighlight })
    hl(0, 'DapUIUnavailableNC', { fg = c.vscDimHighlight })
    hl(0, 'DapUIWatchesEmpty', { fg = c.vscDimHighlight })
    hl(0, 'DapUIWatchesError', { fg = c.vscRed })
    hl(0, 'DapUIWatchesValue', { fg = c.vscBlueGreen })
    hl(0, 'DapUIWinSelect', { fg = c.vscPink, bold = true })

    -- Dashboard
    hl(0, 'DashboardHeader', { fg = c.vscBlue, bg = 'NONE' })
    hl(0, 'DashboardDesc', { fg = c.vscYellowOrange, bg = 'NONE' })
    hl(0, 'DashboardIcon', { fg = c.vscYellowOrange, bg = 'NONE' })
    hl(0, 'DashboardShortCut', { fg = c.vscPink, bg = 'NONE' })
    hl(0, 'DashboardKey', { fg = c.vscWhite, bg = 'NONE' })
    hl(0, 'DashboardFooter', { fg = c.vscBlue, bg = 'NONE', italic = true })

    -- Illuminate
    hl(0, 'illuminatedWord', { bg = isDark and c.vscPopupHighlightGray or c.vscPopupHighlightLightBlue })
    hl(0, 'illuminatedCurWord', { bg = isDark and c.vscPopupHighlightGray or c.vscPopupHighlightLightBlue })
    hl(0, 'IlluminatedWordText', { bg = isDark and c.vscPopupHighlightGray or c.vscPopupHighlightLightBlue })
    hl(0, 'IlluminatedWordRead', { bg = isDark and c.vscPopupHighlightGray or c.vscPopupHighlightLightBlue })
    hl(0, 'IlluminatedWordWrite', { bg = isDark and c.vscPopupHighlightGray or c.vscPopupHighlightLightBlue })

    -- mini.statusline
    hl(0, 'MiniStatuslineModeNormal', { bg = c.vscLeftDark, fg = c.vscFront })
    hl(0, 'MiniStatuslineModeInsert', { bg = c.vscLeftDark, fg = c.vscFront })
    hl(0, 'MiniStatuslineModeVisual', { bg = c.vscLeftDark, fg = c.vscFront })
    hl(0, 'MiniStatuslineModeReplace', { bg = c.vscLeftDark, fg = c.vscFront })
    hl(0, 'MiniStatuslineModeCommand', { bg = c.vscLeftDark, fg = c.vscFront })
    hl(0, 'MiniStatuslineModeOther', { bg = c.vscLeftDark, fg = c.vscFront })
    hl(0, 'MiniStatuslineDevinfo', { bg = c.vscLeftDark, fg = c.vscFront })
    hl(0, 'MiniStatuslineFilename', { bg = c.vscLeftMid, fg = c.vscFront })
    hl(0, 'MiniStatuslineFileinfo', { bg = c.vscLeftLight, fg = c.vscFront })
    hl(0, 'MiniStatuslineInactive', { bg = c.vscLeftDark, fg = c.vscFront })

    -- mini.icons
    hl(0, 'MiniIconsAzure', { fg = c.vscBlue })
    hl(0, 'MiniIconsBlue', { fg = c.vscMediumBlue })
    hl(0, 'MiniIconsCyan', { fg = c.vscBlueGreen })
    hl(0, 'MiniIconsGreen', { fg = c.vscGreen })
    hl(0, 'MiniIconsGrey', { fg = c.vscFront })
    hl(0, 'MiniIconsOrange', { fg = c.vscRed })
    hl(0, 'MiniIconsPurple', { fg = c.vscPink })
    hl(0, 'MiniIconsRed', { fg = c.vscRed })
    hl(0, 'MiniIconsYellow', { fg = c.vscDarkYellow })

    -- Neotree
    hl(0, 'NeoTreeBufferNumber', { fg = c.vscLineNumber, bg = 'NONE' })
    hl(0, 'NeoTreeCursorLine', { fg = 'NONE', bg = c.vscCursorDarkDark })
    hl(0, 'NeoTreeDimText', { fg = 'NONE', bg = c.vscCursorDarkDark })
    hl(0, 'NeoTreeDirectoryIcon', { fg = c.vscBlue, bg = 'NONE' })
    hl(0, 'NeoTreeDirectoryName', { fg = c.vscFront, bg = 'NONE' })
    hl(0, 'NeoTreeDotfile', { fg = c.vscDisabledBlue, bg = 'NONE' })
    hl(0, 'NeoTreeFileIcon', { fg = c.vscViolet, bg = 'NONE' })
    hl(0, 'NeoTreeFileName', { fg = c.vscFront, bg = 'NONE' })
    hl(0, 'NeoTreeFileNameOpened', { fg = c.vscFront, bg = c.vscCursorDarkDark })
    hl(0, 'NeoTreeFilterTerm', { fg = c.vscFront, bg = 'NONE' })
    hl(0, 'NeoTreeFloatBorder', { fg = c.vscLineNumber, bg = 'NONE' })
    hl(0, 'NeoTreeFloatTitle', { fg = c.vscLineNumber, bg = 'NONE' })
    hl(0, 'NeoTreeTitleBar', { fg = c.vscLineNumber, bg = 'NONE' })

    -- Snacks nvim
    hl(0, 'SnacksPicker', { link = 'Normal' })
    hl(0, 'SnacksPickerBorder', { link = 'Normal' })
    hl(0, 'SnacksPickerDir', { fg = 'NONE', bg = 'NONE', nocombine = true })
    hl(0, 'SnacksPickerDirectory', { fg = 'NONE', bg = 'NONE', nocombine = true })
    hl(0, 'SnacksIndent', { fg = c.vscContext, bg = 'NONE', nocombine = true })
    hl(0, 'SnacksPickerListCursorLine', { link = 'PmenuSel' })
    hl(0, 'SnacksPickerPreviewCursorLine', { fg = 'none', bg = 'none', nocombine = true })

    -- Compiler mode nvim
    hl(0, 'CompileModeMessage', { underline = true })
    hl(0, 'CompileModeMessageRow', { fg = c.vscPink })
    hl(0, 'CompileModeMessageCol', { fg = c.vscBlueGreen })
    hl(0, 'CompileModeError', { fg = c.vscRed })
    hl(0, 'CompileModeWarning', { fg = c.vscYellow })
    hl(0, 'CompileModeInfo', { fg = c.vscGreen })
    hl(0, 'CompileModeCommandOutput', { fg = '#6699ff' })
    hl(0, 'CompileModeDirectoryMessage', { fg = '#6699ff' })
    hl(0, 'CompileModeOutputFile', { fg = '#9966cc' })
    hl(0, 'CompileModeCheckResult', { fg = '#ff9966', bold = true })
    hl(0, 'CompileModeCheckTarget', { fg = '#ff9966' })
    hl(0, 'CompileModeErrorLocus', { link = 'Visual' })

    -- Mini Statusline
    hl(0, 'MiniStatuslineDevinfo', { bg = isDark and c.vscLeftLight or c.vscLeftDark })
    hl(0, 'MiniStatuslineFileinfo', { bg = isDark and c.vscLeftLight or c.vscLeftDark })
    hl(0, 'MiniStatuslineModeCommand', { fg = c.vscBack, bg = c.vscLightRed, bold = true })
    hl(0, 'MiniStatuslineModeInsert', { fg = c.vscBack, bg = c.vscLightBlue, bold = true })
    hl(0, 'MiniStatuslineModeNormal', { fg = c.vscBack, bg = c.vscLightGreen, bold = true })
    hl(0, 'MiniStatuslineModeReplace', { fg = c.vscBack, bg = c.vscYellowOrange, bold = true })
    hl(0, 'MiniStatuslineModeVisual', { fg = c.vscBack, bg = c.vscPink, bold = true })

    -- Copilot
    hl(0, 'CopilotSuggestion', { fg = c.vscSuggestion, bg = 'NONE' })

    -- NeogitOrg/neogit
    hl(0, 'NeogitWinSeparator', { link = 'WinSeparator' })
    if isDark then
        hl(0, 'NeogitDiffAdd', { fg = c.vscGitAdded, bg = c.vscDiffGreenDark })
        hl(0, 'NeogitDiffAddHighlight', { fg = c.vscGitAdded, bg = c.vscDiffGreenLight })
        hl(0, 'NeogitDiffContext', { fg = c.vscPopupFront, bg = c.vscLeftDark })
        hl(0, 'NeogitDiffContextHighlight', { fg = c.vscPopupFront, bg = c.vscLeftMid })
        hl(0, 'NeogitDiffDelete', { fg = c.vscGitDeleted, bg = c.vscDiffRedDark })
        hl(0, 'NeogitDiffDeleteHighlight', { fg = c.vscGitDeleted, bg = c.vscDiffRedLight })
        hl(0, 'NeogitDiffHeader', { fg = c.vscSplitLight, bg = c.vscBack })
        hl(0, 'NeogitDiffHeaderHighlight', { fg = c.vscSplitLight, bg = c.vscBack })
        hl(0, 'NeogitHunkHeader', { fg = c.vscGitModified, bg = c.vscLeftDark })
        hl(0, 'NeogitHunkHeaderHighlight', { fg = c.vscGitModified, bg = c.vscLeftMid })
    else
        hl(0, 'NeogitDiffAdd', { fg = c.vscGitAdded, bg = c.vscDiffGreenLight })
        hl(0, 'NeogitDiffAddHighlight', { fg = c.vscGitAdded, bg = c.vscDiffGreenDark })
        hl(0, 'NeogitDiffContext', { fg = c.vscPopupFront, bg = c.vscLeftMid })
        hl(0, 'NeogitDiffContextHighlight', { fg = c.vscPopupFront, bg = c.vscLeftDark })
        hl(0, 'NeogitDiffDelete', { fg = c.vscGitDeleted, bg = c.vscDiffRedLight })
        hl(0, 'NeogitDiffDeleteHighlight', { fg = c.vscGitDeleted, bg = c.vscDiffRedDark })
        hl(0, 'NeogitDiffHeader', { fg = c.vscSplitLight, bg = c.vscBack })
        hl(0, 'NeogitDiffHeaderHighlight', { fg = c.vscSplitLight, bg = c.vscBack })
        hl(0, 'NeogitHunkHeader', { fg = c.vscGitModified, bg = c.vscLeftMid })
        hl(0, 'NeogitHunkHeaderHighlight', { fg = c.vscGitModified, bg = c.vscLeftDark })
    end
    -- Cursor line highlights cause way too much distraction; rely on the
    -- pointer and regular highlight colors:
    hl(0, 'NeogitDiffAddCursor', { link = 'NeogitDiffAddHighlight' })
    hl(0, 'NeogitDiffContextCursor', { link = 'NeogitDiffContextHighlight' })
    hl(0, 'NeogitDiffDeleteCursor', { link = 'NeogitDiffDeleteHighlight' })
    hl(0, 'NeogitHunkHeaderCursor', { link = 'NeogitHunkHeaderHighlight' })

    -- Which key
    hl(0, 'WhichKeyIconAzure', { fg = c.vscBlueGreen, bg = "NONE" })
    hl(0, 'WhichKeyIconBlue', { fg = c.vscBlue, bg = 'NONE' })
    hl(0, 'WhichKeyIconGreen', { fg = c.vscGreen, bg = 'NONE' })
    hl(0, 'WhichKeyIconGrey', { fg = c.vscGray, bg = 'NONE' })
    hl(0, 'WhichKeyIconOrange', { fg = c.vscYellowOrange, bg = 'NONE' })
    hl(0, 'WhichKeyIconPurple', { fg = c.vscPink, bg = 'NONE' })
    hl(0, 'WhichKeyIconRed', { fg = c.vscRed, bg = 'NONE' })
    hl(0, 'WhichKeyIconYellow', { fg = c.vscYellow, bg = 'NONE' })
    hl(0, 'WhichKeySeparator', { link = 'Normal' })
    hl(0, 'WhichKeyValue', { link = 'Normal' })
    if isDark then
        hl(0, 'WhichKeyBorder', { fg = c.vscLineNumber, bg = 'NONE' })
    else
        hl(0, 'WhichKeyBorder', { fg = c.vscTabOther, bg = 'NONE' })
    end

    if isDark then
        hl(0, 'NvimTreeFolderIcon', { fg = c.vscBlue, bg = 'NONE' })
        hl(0, 'NvimTreeIndentMarker', { fg = c.vscLineNumber, bg = 'NONE' })

        hl(0, 'LspFloatWinNormal', { fg = c.vscFront, bg = 'NONE' })
        hl(0, 'LspFloatWinBorder', { fg = c.vscLineNumber, bg = 'NONE' })
        hl(0, 'LspInfoBorder', { fg = c.vscLineNumber, bg = 'NONE' })
        hl(0, 'LspSagaHoverBorder', { fg = c.vscLineNumber, bg = 'NONE' })
        hl(0, 'LspSagaSignatureHelpBorder', { fg = c.vscLineNumber, bg = 'NONE' })
        hl(0, 'LspSagaCodeActionBorder', { fg = c.vscLineNumber, bg = 'NONE' })
        hl(0, 'LspSagaDefPreviewBorder', { fg = c.vscLineNumber, bg = 'NONE' })
        hl(0, 'LspLinesDiagBorder', { fg = c.vscLineNumber, bg = 'NONE' })
        hl(0, 'LspSagaRenameBorder', { fg = c.vscLineNumber, bg = 'NONE' })
        hl(0, 'LspSagaBorderTitle', { fg = c.vscCursorDark, bg = 'NONE' })
        hl(0, 'LSPSagaDiagnosticTruncateLine', { fg = c.vscLineNumber, bg = 'NONE' })
        hl(0, 'LspSagaDiagnosticBorder', { fg = c.vscLineNumber, bg = 'NONE' })
        hl(0, 'LspSagaDiagnosticBorder', { fg = c.vscLineNumber, bg = 'NONE' })
        hl(0, 'LspSagaShTruncateLine', { fg = c.vscLineNumber, bg = 'NONE' })
        hl(0, 'LspSagaShTruncateLine', { fg = c.vscLineNumber, bg = 'NONE' })
        hl(0, 'LspSagaDocTruncateLine', { fg = c.vscLineNumber, bg = 'NONE' })
        hl(0, 'LspSagaRenameBorder', { fg = c.vscLineNumber, bg = 'NONE' })
        hl(0, 'LspSagaLspFinderBorder', { fg = c.vscLineNumber, bg = 'NONE' })

        hl(0, 'TelescopePromptBorder', { fg = c.vscLineNumber, bg = 'NONE' })
        hl(0, 'TelescopeResultsBorder', { fg = c.vscLineNumber, bg = 'NONE' })
        hl(0, 'TelescopePreviewBorder', { fg = c.vscLineNumber, bg = 'NONE' })
        hl(0, 'TelescopeNormal', { fg = c.vscFront, bg = 'NONE' })
        hl(0, 'TelescopeSelection', { fg = c.vscFront, bg = c.vscPopupHighlightBlue })
        hl(0, 'TelescopeMultiSelection', { fg = c.vscFront, bg = c.vscPopupHighlightBlue })
        hl(0, 'TelescopeMatching', { fg = c.vscMediumBlue, bg = 'NONE', bold = true })
        hl(0, 'TelescopePromptPrefix', { fg = c.vscFront, bg = 'NONE' })

        -- Debugging
        hl(0, 'debugPC', { bg = '#4C4C19' })

        -- symbols-outline
        -- white fg and lualine blue bg
        hl(0, 'FocusedSymbol', { fg = '#ffffff', bg = c.vscUiBlue })
        hl(0, 'SymbolsOutlineConnector', { fg = c.vscLineNumber, bg = 'NONE' })
    else
        hl(0, 'NvimTreeFolderIcon', { fg = c.vscDarkBlue, bg = 'NONE' })
        hl(0, 'NvimTreeIndentMarker', { fg = c.vscTabOther, bg = 'NONE' })

        hl(0, 'LspFloatWinNormal', { fg = c.vscFront, bg = 'NONE' })
        hl(0, 'LspFloatWinBorder', { fg = c.vscTabOther, bg = 'NONE' })
        hl(0, 'LspInfoBorder', { fg = c.vscTabOther, bg = 'NONE' })
        hl(0, 'LspSagaHoverBorder', { fg = c.vscTabOther, bg = 'NONE' })
        hl(0, 'LspSagaSignatureHelpBorder', { fg = c.vscTabOther, bg = 'NONE' })
        hl(0, 'LspSagaCodeActionBorder', { fg = c.vscTabOther, bg = 'NONE' })
        hl(0, 'LspSagaDefPreviewBorder', { fg = c.vscTabOther, bg = 'NONE' })
        hl(0, 'LspLinesDiagBorder', { fg = c.vscTabOther, bg = 'NONE' })
        hl(0, 'LspSagaRenameBorder', { fg = c.vscTabOther, bg = 'NONE' })
        hl(0, 'LspSagaBorderTitle', { fg = c.vscCursorDark, bg = 'NONE' })
        hl(0, 'LSPSagaDiagnosticTruncateLine', { fg = c.vscTabOther, bg = 'NONE' })
        hl(0, 'LspSagaDiagnosticBorder', { fg = c.vscTabOther, bg = 'NONE' })
        hl(0, 'LspSagaDiagnosticBorder', { fg = c.vscTabOther, bg = 'NONE' })
        hl(0, 'LspSagaShTruncateLine', { fg = c.vscTabOther, bg = 'NONE' })
        hl(0, 'LspSagaShTruncateLine', { fg = c.vscTabOther, bg = 'NONE' })
        hl(0, 'LspSagaDocTruncateLine', { fg = c.vscTabOther, bg = 'NONE' })
        hl(0, 'LspSagaRenameBorder', { fg = c.vscTabOther, bg = 'NONE' })
        hl(0, 'LspSagaLspFinderBorder', { fg = c.vscTabOther, bg = 'NONE' })

        hl(0, 'TelescopePromptBorder', { fg = c.vscTabOther, bg = 'NONE' })
        hl(0, 'TelescopeResultsBorder', { fg = c.vscTabOther, bg = 'NONE' })
        hl(0, 'TelescopePreviewBorder', { fg = c.vscTabOther, bg = 'NONE' })
        hl(0, 'TelescopeNormal', { fg = c.vscFront, bg = 'NONE' })
        hl(0, 'TelescopeSelection', { fg = '#FFFFFF', bg = c.vscPopupHighlightBlue })
        hl(0, 'TelescopeMultiSelection', { fg = c.vscBack, bg = c.vscPopupHighlightBlue })
        hl(0, 'TelescopeMatching', { fg = 'orange', bg = 'NONE', bold = true, nil })
        hl(0, 'TelescopePromptPrefix', { fg = c.vscFront, bg = 'NONE' })

        -- Debugging
        hl(0, 'debugPC', { bg = '#FFFFBA' })

        -- COC.nvim
        hl(0, 'CocFloating', { fg = 'NONE', bg = c.vscPopupBack })
        hl(0, 'CocMenuSel', { fg = '#FFFFFF', bg = '#285EBA' })
        hl(0, 'CocSearch', { fg = '#2A64B9', bg = 'NONE' })

        -- symbols-outline
        -- white fg and lualine blue bg
        hl(0, 'FocusedSymbol', { fg = c.vscBack, bg = '#AF00DB' })
        hl(0, 'SymbolsOutlineConnector', { fg = c.vscTabOther, bg = 'NONE' })
    end
end

theme.link_highlight = function()
    -- Legacy groups for official git.vim and diff.vim syntax
    hl(0, 'diffAdded', { link = 'DiffAdd' })
    hl(0, 'diffChanged', { link = 'DiffChange' })
    hl(0, 'diffRemoved', { link = 'DiffDelete' })
    -- Legacy groups for treesitter
    hl(0, '@parameter', { link = '@variable.parameter' })
    hl(0, '@field', { link = '@variable.member' })
    hl(0, '@string.regex', { link = '@string.regexp' })
    hl(0, '@float', { link = '@number.float' })
    hl(0, '@namespace', { link = '@module' })
    hl(0, '@method', { link = '@function.method' })
    hl(0, '@field', { link = '@variable.member' })
    hl(0, '@conditional', { link = '@keyword.conditional' })
    hl(0, '@repeat', { link = '@keyword.repeat' })
    hl(0, '@exception', { link = '@keyword.exception' })
    hl(0, '@storageclass', { link = '@keyword.storage' })
    hl(0, '@include', { link = '@keyword.import' })
    hl(0, '@text.strong', { link = '@markup.strong' })
    hl(0, '@text.underline', { link = '@markup.underline' })
    hl(0, '@text.emphasis', { link = '@markup.italic' })
    hl(0, '@text.strike', { link = '@markup.strikethrough' })
    hl(0, '@text.title', { link = '@markup.heading' })
    hl(0, '@text.uri', { link = '@markup.link.url' })
    hl(0, '@text.literal', { link = '@markup.raw' })
    hl(0, '@text.note', { link = '@comment.note' })
    hl(0, '@text.warning', { link = '@comment.warning' })
    hl(0, '@text.danger', { link = '@comment.error' })
    hl(0, '@text.diff.add', { link = '@diff.plus' })
    hl(0, '@text.diff.delete', { link = '@diff.minus' })
    -- Nvim compe
    hl(0, 'CompeDocumentation', { link = 'Pmenu' })
    hl(0, 'CompeDocumentationBorder', { link = 'Pmenu' })
    hl(0, 'CmpItemKind', { link = 'Pmenu' })
    hl(0, 'CmpItemKindClass', { link = 'CmpItemKindConstructor' })
    hl(0, 'CmpItemKindModule', { link = 'CmpItemKindKeyword' })
    hl(0, 'CmpItemKindOperator', { link = '@operator' })
    hl(0, 'CmpItemKindReference', { link = '@variable.parameter.reference' })
    hl(0, 'CmpItemKindValue', { link = '@variable.member' })
    hl(0, 'CmpItemKindField', { link = '@variable.member' })
    hl(0, 'CmpItemKindEnum', { link = '@variable.member' })
    hl(0, 'CmpItemKindSnippet', { link = '@text' })
    hl(0, 'CmpItemKindColor', { link = 'cssColor' })
    hl(0, 'CmpItemKindFile', { link = '@text.uri' })
    hl(0, 'CmpItemKindFolder', { link = '@text.uri' })
    hl(0, 'CmpItemKindEvent', { link = '@constant' })
    hl(0, 'CmpItemKindEnumMember', { link = '@variable.member' })
    hl(0, 'CmpItemKindConstant', { link = '@constant' })
    hl(0, 'CmpItemKindStruct', { link = '@structure' })
    hl(0, 'CmpItemKindTypeParameter', { link = '@variable.parameter' })
end

return theme
