local M = {}

---@param colors BackpackColors
---@param config? BackpackConfig
function M.setup(colors, config)
    config = config or require("backpack").config

    local theme = colors.theme
    local bg = not config.transparent and theme.ui.bg or "NONE"
    local tabSignsCurrent = not config.tabSigns and { bg = theme.ui.bg, fg = theme.ui.bg } or { bg = theme.ui.bg, fg = theme.ui.bg_m5 }
    local tabSigns = not config.tabSigns and { bg = theme.ui.bg, fg = theme.ui.bg } or { bg = theme.ui.bg_m5, fg = theme.ui.bg }
    return {
        -- Neovcs
        -- NeovcsBranch = {},
        -- NeovcsRemote = {},
        -- NeovcsDiffDelete = { fg = theme.vcs.removed, bg = theme.diff.delete },
        -- NeovcsDiffAdd = { fg = theme.vcs.added, bg = theme.diff.add },
        -- NeovcsHunkHeader = { fg = theme.syn.identifier },
        -- NeovcsDiffContextHighlight = { bg = theme.diff.change },

        -- vcsSigns
        -- vcsSignsAdd = { link = "diffAdded" },
        -- vcsSignsChange = { link = "diffChanged" },
        -- vcsSignsDelete = { link = "diffDeleted" },
        -- vcsSignsDeleteLn = { bg = theme.diff.delete },

        -- Gitsigns
        GitSignsAdd = { fg = theme.vcs.added, bg = theme.ui.bg_gutter },
        GitSignsChange = { fg = theme.vcs.changed, bg = theme.ui.bg_gutter },
        GitSignsDelete = { fg = theme.vcs.removed, bg = theme.ui.bg_gutter },
        -- Neogit
        NeogitDiffContextHighlight = { bg = theme.diff.change }, --[[  guibg=#333333 guifg=#b2b2b2 ]]
        NeogitHunkHeader = { fg = theme.syn.fun }, --[[  guifg=#cccccc guibg=#404040 ]]
        NeogitHunkHeaderHighlight = { fg = theme.syn.constant, bg = theme.diff.change }, --[[ guifg=#cccccc guibg=#4d4d4d ]]
        NeogitDiffAddHighlight = { bg = theme.diff.add },
        NeogitDiffDeleteHighlight = { bg = theme.diff.delete },
        -- TreeSitter Extensions
        TreesitterContext = { link = "Folded" },
        TreesitterContextLineNumber = { fg = theme.ui.special, bg = theme.ui.bg_gutter },
        -- Telescope
        TelescopeBorder = { fg = theme.ui.float.fg_border, bg = theme.ui.bg },
        TelescopeTitle = { fg = theme.ui.special },
        TelescopeSelection = { link = "CursorLine" },
        TelescopeSelectionCaret = { link = "CursorLineNr" },
        TelescopeResultsClass = { link = "Structure" },
        TelescopeResultsStruct = { link = "Structure" },
        TelescopeResultsField = { link = "@field" },
        TelescopeResultsMethod = { link = "Function" },
        TelescopeResultsVariable = { link = "@variable" },
        -- NvimTree
        NvimTreeNormal = { link = "Normal" },
        NvimTreeNormalNC = { link = "NvimTreeNormal" },
        NvimTreeRootFolder = { fg = theme.syn.identifier, bold = true },
        NvimTreeGitDirty = { fg = theme.vcs.changed },
        NvimTreeGitNew = { fg = theme.vcs.added },
        NvimTreeGitDeleted = { fg = theme.vcs.removed },
        NvimTreeGitStaged = { fg = theme.vcs.added },
        NvimTreeSpecialFile = { fg = theme.syn.special1 },
        -- NvimTreeIndentMarker           = {},
        NvimTreeImageFile = { fg = theme.syn.special2 },
        NvimTreeSymlink = { link = "Type" },
        NvimTreeFolderName = { link = "Directory" },
        NvimTreeExecFile = { fg = theme.syn.string, bold = true },
        NvimTreeOpenedFile = { fg = theme.syn.special1, italic = true },
        NvimTreeWinSeparator = { link = "WinSeparator" },
        NvimTreeWindowPicker = { bg = theme.ui.bg_m1, fg = theme.syn.special1, bold = true },
        -- NeoTree
        NeoTreeTabInactive = { link = "TabLine" },
        NeoTreeTabActive = { link = "TabLineSel" },
        NeoTreeTabSeparatorInactive = { link = "NeoTreeTabInactive" },
        NeoTreeTabSeparatorActive = { link = "NeoTreeTabActive" },
        NeoTreeRootName = { fg = theme.syn.identifier, bold = true },
        NeoTreeModified = { link = "String" },
        NeoTreeGitUnstaged = { link = "NeoTreeGitModified", default = true },
        NeoTreeIndentMarker = { link = "NonText" },
        -- WindowPicker
        -- NvimWindowSwitch = { bg = theme.ui.bg_m3, fg = theme.diag.warning },
        -- NvimWindowSwitchNC = { link = "NvimWindowSwitch" },
        -- Dashboard
        DashboardShortCut = { fg = theme.syn.special1 },
        DashboardHeader = { fg = theme.vcs.removed },
        DashboardCenter = { fg = theme.syn.identifier },
        DashboardFooter = { fg = theme.syn.comment },
        DashboardDesc = { fg = theme.syn.identifier },
        DashboardKey = { fg = theme.syn.special1 },
        DashboardIcon = { fg = theme.ui.special },
        -- Notify
        NotifyBackground = { bg = theme.ui.bg },
        NotifyERRORBorder = { link = "DiagnosticError" },
        NotifyWARNBorder = { link = "DiagnosticWarn" },
        NotifyINFOBorder = { link = "DiagnosticInfo" },
        NotifyHINTBorder = { link = "DiagnosticHint" },
        NotifyDEBUGBorder = { link = "Debug" },
        NotifyTRACEBorder = { link = "Comment" },
        NotifyERRORIcon = { link = "DiagnosticError" },
        NotifyWARNIcon = { link = "DiagnosticWarn" },
        NotifyINFOIcon = { link = "DiagnosticInfo" },
        NotifyHINTIcon = { link = "DiagnosticHint" },
        NotifyDEBUGIcon = { link = "Debug" },
        NotifyTRACEIcon = { link = "Comment" },
        NotifyERRORTitle = { link = "DiagnosticError" },
        NotifyWARNTitle = { link = "DiagnosticWarn" },
        NotifyINFOTitle = { link = "DiagnosticInfo" },
        NotifyHINTTitle = { link = "DiagnosticHint" },
        NotifyDEBUGTitle = { link = "Debug" },
        NotifyTRACETitle = { link = "Comment" },
        -- Dap-UI
        -- DapUIVariable = { link = "Normal" },
        DapUIScope = { link = "Special" }, -- guifg=#00F1F5"
        DapUIType = { link = "Type" }, -- guifg=#D484FF"
        -- DapUIValue = { link = "Normal" },
        DapUIModifiedValue = { fg = theme.syn.special1, bold = true }, -- guifg=#00F1F5 gui=bold"
        DapUIDecoration = { fg = theme.ui.float.fg_border }, -- guifg=#00F1F5"
        DapUIThread = { fg = theme.syn.identifier }, --guifg=#A9FF68"
        DapUIStoppedThread = { fg = theme.syn.special1 }, --guifg=#00f1f5"
        -- DapUIFrameName = { link = "Normal"},
        DapUISource = { fg = theme.syn.special2 }, -- guifg=#D484FF"
        DapUILineNumber = { fg = theme.syn.special1 }, -- guifg=#00f1f5"
        DapUIFloatBorder = { fg = theme.ui.float.fg_border }, -- guifg=#00F1F5"
        DapUIWatchesEmpty = { fg = theme.diag.error }, -- guifg=#F70067"
        DapUIWatchesValue = { fg = theme.syn.identifier }, -- guifg=#A9FF68"
        DapUIWatchesError = { fg = theme.diag.error }, --guifg=#F70067"
        DapUIBreakpointsPath = { link = "Directory" }, --guifg=#00F1F5"
        DapUIBreakpointsInfo = { fg = theme.diag.info }, --guifg=#A9FF68"
        DapUIBreakpointsCurrentLine = { fg = theme.syn.identifier, bold = true }, --guifg=#A9FF68 gui=bold"
        -- DapUIBreakpointsLine = {}, -- DapUILineNumber"
        DapUIBreakpointsDisabledLine = { link = "Comment" }, --guifg=#424242"
        -- DapUICurrentFrameName = {}, -- DapUIBreakpointsCurrentLine"
        DapUIStepOver = { fg = theme.syn.special1 }, --guifg=#00f1f5"
        DapUIStepInto = { fg = theme.syn.special1 }, --guifg=#00f1f5"
        DapUIStepBack = { fg = theme.syn.special1 }, --guifg=#00f1f5"
        DapUIStepOut = { fg = theme.syn.special1 }, --guifg=#00f1f5"
        DapUIStop = { fg = theme.diag.error }, --guifg=#F70067"
        DapUIPlayPause = { fg = theme.syn.string }, --guifg=#A9FF68"
        DapUIRestart = { fg = theme.syn.string }, --guifg=#A9FF68"
        DapUIUnavailable = { fg = theme.syn.comment }, --guifg=#424242"
        -- Floaterm
        FloatermBorder = { fg = theme.ui.float.fg_border, bg = theme.ui.bg },
        -- NeoVim                         = {},
        healthError = { fg = theme.diag.error },
        healthSuccess = { fg = theme.diag.ok },
        healthWarning = { fg = theme.diag.warning },
        -- Cmp
        CmpDocumentation = { link = "NormalFloat" },
        CmpDocumentationBorder = { link = "FloatBorder" },
        CmpCompletion = { link = "Pmenu" },
        CmpCompletionSel = { link = "PmenuSel" },
        CmpCompletionBorder = { fg = theme.ui.bg_search, bg = theme.ui.pmenu.bg },
        CmpCompletionThumb = { link = "PmenuThumb" },
        CmpCompletionSbar = { link = "PmenuSbar" },
        CmpItemAbbr = { fg = theme.ui.pmenu.fg },
        CmpItemAbbrDeprecated = { fg = theme.syn.comment, strikethrough = true },
        CmpItemAbbrMatch = { fg = theme.syn.fun },
        CmpItemAbbrMatchFuzzy = { link = "CmpItemAbbrMatch" },
        CmpItemKindDefault = { fg = theme.ui.fg_dim },
        CmpItemMenu = { fg = theme.ui.fg_dim },
        CmpGhostText = { fg = theme.syn.comment },

        CmpItemKindText = { fg = theme.ui.fg },
        CmpItemKindMethod = { link = "@function.method" },
        CmpItemKindFunction = { link = "Function" },
        CmpItemKindConstructor = { link = "@constructor" },
        CmpItemKindField = { link = "@variable.member" },
        CmpItemKindVariable = { fg = theme.ui.fg_dim },
        CmpItemKindClass = { link = "Type" },
        CmpItemKindInterface = { link = "Type" },
        CmpItemKindModule = { link = "@module" },
        CmpItemKindProperty = { link = "@property" },
        CmpItemKindUnit = { link = "Number" },
        CmpItemKindValue = { link = "String" },
        CmpItemKindEnum = { link = "Type" },
        CmpItemKindKeyword = { link = "Keyword" },
        CmpItemKindSnippet = { link = "Special" },
        CmpItemKindColor = { link = "Special" },
        CmpItemKindFile = { link = "Directory" },
        CmpItemKindReference = { link = "Special" },
        CmpItemKindFolder = { link = "Directory" },
        CmpItemKindEnumMember = { link = "Constant" },
        CmpItemKindConstant = { link = "Constant" },
        CmpItemKindStruct = { link = "Type" },
        CmpItemKindEvent = { link = "Type" },
        CmpItemKindOperator = { link = "Operator" },
        CmpItemKindTypeParameter = { link = "Type" },
        CmpItemKindCopilot = { link = "String" },

        -- blink.cmp
        BlinkCmpMenu = { link = "Pmenu" },
        BlinkCmpMenuSelection = { link = "PmenuSel" },
        BlinkCmpMenuBorder = { fg = theme.ui.bg_search, bg = theme.ui.pmenu.bg },
        BlinkCmpScrollBarThumb = { link = "PmenuThumb" },
        BlinkCmpScrollBarGutter = { link = "PmenuSbar" },
        BlinkCmpLabel = { fg = theme.ui.pmenu.fg },
        BlinkCmpLabelMatch = { fg = theme.syn.fun },
        BlinkCmpLabelDetails = { fg = theme.syn.comment },
        BlinkCmpLabelDeprecated = { fg = theme.syn.comment, strikethrough = true },
        BlinkCmpGhostText = { fg = theme.syn.comment },
        BlinkCmpDoc = { link = "NormalFloat" },
        BlinkCmpDocBorder = { link = "FloatBorder" },
        BlinkCmpDocCursorLine = { link = "Visual"},
        BlinkCmpSignatureHelp = { link = "NormalFloat" },
        BlinkCmpSignatureHelpBorder = { link = "FloatBorder" },
        BlinkCmpSignatureHelpActiveParameter = { link = "LspSignatureActiveParameter"},

        BlinkCmpKind = { fg = theme.ui.fg_dim },
        BlinkCmpKindText = { fg = theme.ui.fg },
        BlinkCmpKindMethod = { link = "@function.method" },
        BlinkCmpKindFunction = { link = "Function" },
        BlinkCmpKindConstructor = { link = "@constructor" },
        BlinkCmpKindField = { link = "@variable.member" },
        BlinkCmpKindVariable = { fg = theme.ui.fg_dim },
        BlinkCmpKindClass = { link = "Type" },
        BlinkCmpKindInterface = { link = "Type" },
        BlinkCmpKindModule = { link = "@module" },
        BlinkCmpKindProperty = { link = "@property" },
        BlinkCmpKindUnit = { link = "Number" },
        BlinkCmpKindValue = { link = "String" },
        BlinkCmpKindEnum = { link = "Type" },
        BlinkCmpKindKeyword = { link = "Keyword" },
        BlinkCmpKindSnippet = { link = "Special" },
        BlinkCmpKindColor = { link = "Special" },
        BlinkCmpKindFile = { link = "Directory" },
        BlinkCmpKindReference = { link = "Special" },
        BlinkCmpKindFolder = { link = "Directory" },
        BlinkCmpKindEnumMember = { link = "Constant" },
        BlinkCmpKindConstant = { link = "Constant" },
        BlinkCmpKindStruct = { link = "Type" },
        BlinkCmpKindEvent = { link = "Type" },
        BlinkCmpKindOperator = { link = "Operator" },
        BlinkCmpKindTypeParameter = { link = "Type" },
        BlinkCmpKindCopilot = { link = "String" },

        -- IndentBlankline
        IndentBlanklineChar = { fg = theme.ui.whitespace },
        IndentBlanklineSpaceChar = { fg = theme.ui.whitespace },
        IndentBlanklineSpaceCharBlankline = { fg = theme.ui.whitespace },
        IndentBlanklineContextChar = { fg = theme.ui.special },
        IndentBlanklineContextStart = { sp = theme.ui.special, underline = true },
        IblIndent = { fg = theme.ui.whitespace },
        IblWhitespace = { fg = theme.ui.whitespace },
        IblScope = { fg = theme.ui.special },
        -- Lazy
        LazyProgressTodo = { fg = theme.ui.nontext },

        -- Trouble
        TroubleIndent = { fg = theme.ui.whitespace },
        TroublePos = { fg = theme.ui.special },

        -- Nvim-Navic
        NavicIconsFile = { link = "Directory" },
        NavicIconsModule = { link = "@module" },
        NavicIconsNamespace = { link = "@module" },
        NavicIconsPackage = { link = "@module" },
        NavicIconsClass = { link = "Type" },
        NavicIconsMethod = { link = "@function.method" },
        NavicIconsProperty = { link = "@property" },
        NavicIconsField = { link = "@variable.member" },
        NavicIconsConstructor = { link = "@constructor" },
        NavicIconsEnum = { link = "Type" },
        NavicIconsInterface = { link = "Type" },
        NavicIconsFunction = { link = "Function" },
        NavicIconsVariable = { link = "@variable" },
        NavicIconsConstant = { link = "Constant" },
        NavicIconsString = { link = "String" },
        NavicIconsNumber = { link = "Number" },
        NavicIconsBoolean = { link = "Boolean" },
        NavicIconsArray = { link = "Type" },
        NavicIconsObject = { link = "Type" },
        NavicIconsKey = { link = "Identifier" },
        NavicIconsNull = { link = "Type" },
        NavicIconsEnumMember = { link = "Constant" },
        NavicIconsStruct = { link = "Structure" },
        NavicIconsEvent = { link = "Structure" },
        NavicIconsOperator = { link = "Operator" },
        NavicIconsTypeParameter = { link = "Type" },
        NavicText = { fg = theme.ui.fg },
        NavicSeparator = { fg = theme.ui.fg },

        -- Aerial icons
        AerialFileIcon = { link = "Directory" },
        AerialModuleIcon = { link = "@module" },
        AerialNamespaceIcon = { link = "@module" },
        AerialPackageIcon = { link = "@module" },
        AerialClassIcon = { link = "Type" },
        AerialMethodIcon = { link = "@function.method" },
        AerialPropertyIcon = { link = "@property" },
        AerialFieldIcon = { link = "@variable.member" },
        AerialConstructorIcon = { link = "@constructor" },
        AerialEnumIcon = { link = "Type" },
        AerialInterfaceIcon = { link = "Type" },
        AerialFunctionIcon = { link = "Function" },
        AerialVariableIcon = { link = "@variable" },
        AerialConstantIcon = { link = "Constant" },
        AerialStringIcon = { link = "String" },
        AerialNumberIcon = { link = "Number" },
        AerialBooleanIcon = { link = "Boolean" },
        AerialArrayIcon = { link = "Type" },
        AerialObjectIcon = { link = "Type" },
        AerialKeyIcon = { link = "Identifier" },
        AerialNullIcon = { link = "Type" },
        AerialEnumMemberIcon = { link = "Constant" },
        AerialStructIcon = { link = "Structure" },
        AerialEventIcon = { link = "Structure" },
        AerialOperatorIcon = { link = "Operator" },
        AerialTypeParameterIcon = { link = "Type" },

        -- Mini
        MiniAnimateCursor = { reverse = true, nocombine = true },
        MiniAnimateNormalFloat = { link = "NormalFloat" },

        MiniClueBorder = { link = "FloatBorder" },
        MiniClueDescGroup = { link = "DiagnosticFloatingWarn" },
        MiniClueDescSingle = { link = "NormalFloat" },
        MiniClueNextKey = { link = "DiagnosticFloatingHint" },
        MiniClueNextKeyWithPostkeys = { link = "DiagnosticFloatingError" },
        MiniClueSeparator = { link = "DiagnosticFloatingInfo" },
        MiniClueTitle = { link = "FloatTitle" },

        MiniCompletionActiveParameter = { underline = true },

        MiniCursorword = { underline = true },
        MiniCursorwordCurrent = { underline = true },

        MiniDepsChangeAdded = { link = "diffAdded" },
        MiniDepsChangeRemoved = { link = "diffRemoved" },
        MiniDepsHint = { fg = theme.diag.hint },
        MiniDepsInfo = { fg = theme.diag.info },
        MiniDepsMsgBreaking = { fg = theme.diag.warning },
        MiniDepsPlaceholder = { link = "Comment" },
        MiniDepsTitle = { link = "Title" },
        MiniDepsTitleError = { link = "DiffDelete" },
        MiniDepsTitleSame = { link = "DiffText" },
        MiniDepsTitleUpdate = { link = "DiffAdd" },

        MiniDiffSignAdd = { fg = theme.vcs.added, bg = theme.ui.bg_gutter },
        MiniDiffSignChange = { fg = theme.vcs.changed, bg = theme.ui.bg_gutter },
        MiniDiffSignDelete = { fg = theme.vcs.removed, bg = theme.ui.bg_gutter },
        MiniDiffOverAdd = { link = "DiffAdd" },
        MiniDiffOverChange = { link = "DiffText" },
        MiniDiffOverContext = { link = "DiffChange" },
        MiniDiffOverDelete = { link = "DiffDelete" },

        MiniFilesBorder = { link = "FloatBorder" },
        MiniFilesBorderModified = { link = "DiagnosticFloatingWarn" },
        MiniFilesCursorLine = { link = "CursorLine" },
        MiniFilesDirectory = { link = "Directory" },
        MiniFilesFile = { fg = theme.ui.fg },
        MiniFilesNormal = { link = "NormalFloat" },
        MiniFilesTitle = { fg = theme.ui.special, bg = theme.ui.float.bg_border, bold = true },
        MiniFilesTitleFocused = { fg = theme.ui.fg, bg = theme.ui.float.bg_border, bold = true },

        MiniHipatternsFixme = { fg = theme.ui.bg, bg = theme.diag.error, bold = true },
        MiniHipatternsHack = { fg = theme.ui.bg, bg = theme.diag.warning, bold = true },
        MiniHipatternsNote = { fg = theme.ui.bg, bg = theme.diag.info, bold = true },
        MiniHipatternsTodo = { fg = theme.ui.bg, bg = theme.diag.hint, bold = true },

        MiniIconsAzure = { fg = theme.syn.special1 },
        MiniIconsBlue = { fg = theme.syn.fun },
        MiniIconsCyan = { fg = theme.syn.type },
        MiniIconsGreen = { fg = theme.syn.string },
        MiniIconsGrey = { fg = theme.ui.fg },
        MiniIconsOrange = { fg = theme.syn.constant },
        MiniIconsPurple = { fg = theme.syn.keyword },
        MiniIconsRed = { fg = theme.syn.special3 },
        MiniIconsYellow = { fg = theme.syn.identifier },

        MiniIndentscopeSymbol = { fg = theme.syn.special1 },
        MiniIndentscopePrefix = { nocombine = true }, -- Make it invisible

        MiniJump = { link = "SpellRare" },

        MiniJump2dDim = { link = "Comment" },
        MiniJump2dSpot = { fg = theme.syn.constant, bold = true, nocombine = true },
        MiniJump2dSpotAhead = { fg = theme.diag.hint, bg = theme.ui.bg_dim, nocombine = true },
        MiniJump2dSpotUnique = { fg = theme.syn.special1, bold = true, nocombine = true },

        MiniMapNormal = { link = "NormalFloat" },
        MiniMapSymbolCount = { link = "Special" },
        MiniMapSymbolLine = { link = "Title" },
        MiniMapSymbolView = { link = "Delimiter" },

        MiniNotifyBorder = { link = "FloatBorder" },
        MiniNotifyNormal = { link = "NormalFloat" },
        MiniNotifyTitle = { link = "FloatTitle" },

        MiniOperatorsExchangeFrom = { link = "IncSearch" },

        MiniPickBorder = { link = "FloatBorder" },
        MiniPickBorderBusy = { link = "DiagnosticFloatingWarn" },
        MiniPickBorderText = { link = "FloatTitle" },
        MiniPickIconDirectory = { link = "Directory" },
        MiniPickIconFile = { link = "MiniPickNormal" },
        MiniPickHeader = { link = "DiagnosticFloatingHint" },
        MiniPickMatchCurrent = { link = "CursorLine" },
        MiniPickMatchMarked = { link = "Visual" },
        MiniPickMatchRanges = { link = "DiagnosticFloatingHint" },
        MiniPickNormal = { link = "NormalFloat" },
        MiniPickPreviewLine = { link = "CursorLine" },
        MiniPickPreviewRegion = { link = "IncSearch" },
        MiniPickPrompt = { fg = theme.syn.fun, bg = theme.ui.float.bg_border },

        MiniStarterCurrent = { nocombine = true },
        MiniStarterFooter = { fg = theme.syn.deprecated },
        MiniStarterHeader = { link = "Title" },
        MiniStarterInactive = { link = "Comment" },
        MiniStarterItem = { link = "Normal" },
        MiniStarterItemBullet = { link = "Delimiter" },
        MiniStarterItemPrefix = { fg = theme.diag.warning },
        MiniStarterSection = {  fg = theme.diag.ok },
        MiniStarterQuery = { fg = theme.diag.info },

        MiniStatuslineDevinfo = { fg = theme.ui.fg_dim, bg = theme.ui.bg_p1 },
        MiniStatuslineFileinfo = { fg = theme.ui.fg_dim, bg = theme.ui.bg_p1 },
        MiniStatuslineFilename = { fg = theme.ui.fg_dim, bg = theme.ui.bg_dim },
        MiniStatuslineInactive = { link = "StatusLineNC" },
        MiniStatuslineModeCommand = { fg = theme.ui.bg, bg = theme.syn.operator, bold = true },
        MiniStatuslineModeInsert = { fg = theme.ui.bg, bg = theme.diag.ok, bold = true },
        MiniStatuslineModeNormal = { fg = theme.ui.bg_m3, bg = theme.syn.fun, bold = true },
        MiniStatuslineModeOther = { fg = theme.ui.bg, bg = theme.syn.type, bold = true },
        MiniStatuslineModeReplace = { fg = theme.ui.bg, bg = theme.syn.constant, bold = true },
        MiniStatuslineModeVisual = { fg = theme.ui.bg, bg = theme.syn.keyword, bold = true },

        MiniSurround = { link = "IncSearch" },

        MiniTablineCurrent = { fg = theme.ui.fg_dim, bg = theme.ui.bg_p1, bold = true },
        MiniTablineFill = { fg = theme.ui.bg_m5, bg = bg },
        MiniTablineHidden = { fg = theme.ui.special, bg = theme.ui.bg_m3 },
        MiniTablineModifiedCurrent = { fg = theme.ui.bg_p1, bg = theme.ui.fg_dim, bold = true },
        MiniTablineModifiedHidden = { fg = theme.ui.bg_m3, bg = theme.ui.special },
        MiniTablineModifiedVisible = { fg = theme.ui.bg_m3, bg = theme.ui.special, bold = true },
        MiniTablineTabpagesection = { fg = theme.ui.fg, bg = theme.ui.bg_search, bold = true },
        MiniTablineVisible = { fg = theme.ui.special, bg = theme.ui.bg_m3, bold = true },

        MiniTestEmphasis = { bold = true },
        MiniTestFail = { fg = theme.diag.error, bold = true },
        MiniTestPass = { fg = theme.diag.ok, bold = true },

        MiniTrailspace = { bg = theme.vcs.removed },


        NeotestAdapterName = { fg = theme.syn.special3, },
        NeotestDir = { fg = theme.syn.fun, },
        NeotestExpandMarker = { fg = theme.syn.punct, bold = true, },
        NeotestFailed = { fg = theme.diag.error },
        NeotestFile = { fg = theme.syn.fun, },
        NeotestFocused = { bold = true, underline = true, },
        NeotestIndent = { fg = theme.ui.special, bold = true, },
        NeotestMarked = { fg = theme.diag.warning, italic = true, },
        NeotestNamespace = { fg = theme.syn.fun, },
        NeotestPassed = { fg = theme.diag.ok },
        NeotestRunning = { fg = theme.vcs.changed, },
        NeotestWinSelect = { fg = theme.diag.hint },
        NeotestSkipped = { fg = theme.syn.special1 },
        NeotestTarget = { fg = theme.syn.special3 },
        NeotestTest = { fg = theme.ui.float.fg },
        NeotestUnknown = { fg = theme.syn.deprecated },
        NeotestWatching = { fg = theme.vcs.changed },
        typescriptExport = { fg = theme.syn.opkeyword, italic = true },
        typescriptFuncCallArg = { fg = theme.syn.constant },
        typescriptIdentifierName = { fg = theme.syn.constant },
        typescriptDestructureVariable = { fg = theme.ui.fg },
        typescriptTypeReference = { fg = theme.syn.type },
        typescriptMember = { fg = theme.ui.fg },
        typescriptPredefinedType = { fg = theme.syn.string },
        typescriptAliasDeclaration = { fg = theme.syn.constant },
        typescriptVariable = { fg = theme.syn.statement },
        typeScriptNull = { fg = theme.syn.null },
        typeScriptString = { fg = theme.syn.string },
        typescriptGlobal = { fg = theme.syn.preproc, italic = true },
        typescriptImport = { fg = theme.syn.statement },
        typescriptDefault = { fg = theme.syn.constant, italic = true },
        typescriptFuncName = { fg = theme.syn.type },
        typescriptConsoleMethod = { fg = theme.syn.parameter },
        typescriptCall = { fg = theme.ui.fg_bright },
        typescriptTemplate = { fg = theme.syn.string },
        typescriptBoolean = { fg = theme.syn.string },
        typescriptConditional = { fg = theme.syn.statement },
        typescriptStringMember = { fg = theme.syn.string },
        typescriptOperator = { fg = theme.syn.opkeyword },
        typescriptObjectLabel = { fg = theme.ui.fg },

        htmlTag = { fg = theme.syn.punct },
        ALEErrorSign = { bg = theme.ui.bg_m1, fg = theme.syn.statement },
        ALEInfoSign = { bg = theme.ui.bg_m1, fg = theme.vcs.removed },
        ALEWarningSign = { bg = theme.ui.bg_m1, fg = theme.syn.statement },
        BufferAlternateIndex = { bg = theme.ui.bg_gutter, fg = theme.diag.info },
        BufferAlternateMod = { fg = theme.syn.special3 },
        BufferAlternateTarget = { bg = theme.ui.bg_gutter, fg = theme.ui.bg_gutter },
        BufferCurrent = { bg = bg, fg = theme.syn.identifier },
        BufferCurrentIndex = { bg = theme.ui.bg_gutter, fg = theme.diag.info },
        BufferCurrentMod = { bg = theme.ui.bg, fg = theme.syn.special3 },
        BufferCurrentSign = tabSignsCurrent,
        BufferCurrentTarget = { bg = theme.ui.bg_gutter, fg = theme.ui.bg_gutter },

        BufferInactiveIndex = { bg = theme.ui.bg_gutter, fg = theme.diag.info },
        BufferInactiveMod = { fg = theme.syn.special3, bg = theme.ui.bg_m5 },
        -- BufferInactiveSign = { bg = theme.ui.bg_m5, fg = theme.ui.bg_m5 },
        BufferInactiveSign = tabSigns,
        BufferInactiveTarget = { bg = theme.ui.bg_gutter, fg = theme.ui.bg_gutter },
        BufferInactive = { bg = theme.ui.bg_m5, fg = theme.ui.fg_m1 },
        BufferTabpageFill = { fg = theme.ui.bg_m5 },
        BufferVisibleIndex = { bg = theme.ui.bg_gutter, fg = theme.diag.info },
        BufferVisibleMod = { fg = theme.syn.special3 },
        BufferVisibleTarget = { bg = theme.ui.bg_gutter, fg = theme.ui.bg_gutter },
        CocCodeLens = { fg = theme.syn.string },
        CocDiagnosticsError = { fg = theme.diff.delete },
        CocDiagnosticsHint = { fg = theme.vcs.removed },
        CocDiagnosticsInfo = { fg = theme.syn.identifier },
        CocDiagnosticsWarning = { fg = theme.syn.statement },
        CocErrorFloat = { fg = theme.syn.statement },
        CocErrorSign = { fg = theme.diff.delete },
        CocFloatActive = { fg = theme.syn.string },
        CocFloatBorderHighlight = { fg = theme.syn.statement },
        CocFloatingBackground = { fg = theme.diff.text },
        CocHintFloat = { fg = theme.vcs.removed },
        CocHintSign = { fg = theme.syn.none },
        CocInfoFloat = { fg = theme.syn.statement },
        CocInfoSign = { fg = theme.ui.fg_bright },
        CocMenuSel = { bg = theme.syn.special1, fg = theme.syn.opkeyword },
        CocPumMenu = { fg = theme.syn.special4 },
        CocSearch = { fg = theme.vcs.changed },
        CocSelectedText = { fg = theme.syn.special3 },
        CocUnusedHighlight = { fg = theme.vcs.removed },
        CocWarningFloat = { fg = theme.syn.identifier },
        CocWarningSign = { fg = theme.syn.statement },
        DirvishArg = { fg = theme.syn.statement },
        DirvishPathTail = { fg = theme.syn.preproc },
        FloatBorder = { fg = theme.ui.pmenu.bg_thumb },
        MatchParenCur = { fg = theme.syn.deprecated },
        NERDTreeClosable = { fg = theme.ui.special },
        NERDTreeCWD = { fg = theme.syn.string },
        NERDTreeDir = { fg = theme.syn.preproc },
        NERDTreeDirSlash = { fg = theme.syn.preproc },
        NERDTreeExecFile = { fg = theme.syn.statement },
        NERDTreeFile = { fg = theme.diff.text },
        NERDTreeHelp = { fg = theme.diff.text },
        NERDTreeOpenable = { fg = theme.ui.special },
        NERDTreeToggleOff = { fg = theme.syn.statement },
        NERDTreeToggleOn = { fg = theme.syn.string },
        NERDTreeUp = { fg = theme.syn.punct },
        NeoTreeDirectoryIcon = { fg = theme.syn.preproc },
        NeoTreeDirectoryName = { fg = theme.diff.text },
        NeoTreeGitAdded = { fg = theme.syn.preproc },
        NeoTreeGitConflict = { fg = theme.syn.preproc },
        NeoTreeGitDeleted = { fg = theme.syn.preproc },
        NeoTreeGitIgnored = { fg = theme.syn.preproc },
        NeoTreeGitModified = { fg = theme.syn.preproc },
        NeoTreeGitRenamed = { fg = theme.syn.preproc },
        NeoTreeGitStaged = { fg = theme.syn.preproc },
        NeoTreeGitUntracked = { fg = theme.syn.preproc },
        NeoTreeWinSeparator = { fg = theme.ui.bg_gutter },
        NormalFloat = { fg = theme.syn.identifier },
        cOperator = { fg = theme.syn.string },
        cStructure = { fg = theme.ui.special },
        clojureAnonArg = { fg = theme.syn.statement },
        clojureCharacter = { fg = theme.syn.preproc },
        clojureCond = { fg = theme.ui.special },
        clojureDefine = { fg = theme.ui.special },
        clojureDeref = { fg = theme.syn.statement },
        clojureException = { fg = theme.syn.statement },
        clojureFunc = { fg = theme.syn.statement },
        clojureKeyword = { fg = theme.vcs.removed },
        clojureMacro = { fg = theme.ui.special },
        clojureMeta = { fg = theme.syn.statement },
        clojureParen = { fg = theme.diag.info },
        clojureQuote = { fg = theme.syn.statement },
        clojureRegexp = { fg = theme.syn.preproc },
        clojureRegexpEscape = { fg = theme.syn.preproc },
        clojureRegexpMod = { fg = theme.diag.info },
        clojureRegexpQuantifier = { fg = theme.diag.info },
        clojureRepeat = { fg = theme.syn.statement },
        clojureSpecial = { fg = theme.ui.special },
        clojureStringEscape = { fg = theme.syn.preproc },
        clojureUnquote = { fg = theme.syn.statement },
        clojureVariable = { fg = theme.vcs.removed },
        coffeeBracket = { fg = theme.ui.special },
        coffeeCurly = { fg = theme.ui.special },
        coffeeExtendedOp = { fg = theme.diag.info },
        coffeeParen = { fg = theme.diag.info },
        coffeeSpecialOp = { fg = theme.diag.info },
        diffAdded = { fg = theme.syn.string },
        diffChanged = { fg = theme.syn.preproc },
        diffFile = { fg = theme.ui.special },
        diffLine = { fg = theme.vcs.removed },
        diffNewFile = { fg = theme.syn.statement },
        diffRemoved = { fg = theme.syn.statement },
        dtdFunction = { fg = theme.syn.punct },
        dtdParamEntityDPunct = { fg = theme.syn.punct },
        dtdParamEntityPunct = { fg = theme.syn.punct },
        dtdTagName = { fg = theme.syn.string },
        elixirDocString = { fg = theme.syn.punct, italic = true },
        elixirInterpolationDelimiter = { fg = theme.syn.preproc },
        elixirModuleDeclaration = { fg = theme.syn.statement },
        elixirStringDelimiter = { fg = theme.syn.string },
        goBuiltins = { fg = theme.ui.special },
        goConstants = { fg = theme.syn.string },
        goDeclaration = { fg = theme.syn.statement },
        goDeclType = { fg = theme.vcs.removed },
        goDirective = { fg = theme.syn.preproc },
        haskellAssocType = { fg = theme.syn.preproc },
        haskellBacktick = { fg = theme.ui.special },
        haskellBlockKeywords = { fg = theme.syn.preproc },
        haskellBottom = { fg = theme.syn.preproc },
        haskellChar = { fg = theme.syn.string },
        haskellConditional = { fg = theme.ui.special },
        haskellDeclKeyword = { fg = theme.syn.preproc },
        haskellDefault = { fg = theme.syn.preproc },
        haskellDelimiter = { fg = theme.ui.fg_bright },
        haskellDeriving = { fg = theme.syn.preproc },
        haskellIdentifier = { fg = theme.diff.text },
        haskellImportKeywords = { fg = theme.syn.preproc },
        haskellLet = { fg = theme.syn.preproc },
        haskellNumber = { fg = theme.syn.string },
        haskellOperators = { fg = theme.vcs.removed },
        haskellPragma = { fg = theme.syn.string },
        haskellSeparator = { fg = theme.diff.text },
        haskellStatement = { fg = theme.ui.special },
        haskellString = { fg = theme.syn.string },
        haskellType = { fg = theme.diff.text },
        haskellWhere = { fg = theme.syn.preproc },
        htmlArg = { fg = theme.vcs.added },
        htmlEndTag = { fg = theme.vcs.removed },
        htmlScriptTag = { fg = theme.syn.string },
        htmlSpecialChar = { fg = theme.ui.special },
        htmlSpecialTagName = { fg = theme.syn.statement },
        htmlTagName = { fg = theme.syn.statement },
        htmlTagN = { fg = theme.diff.text },
        javaAnnotation = { fg = theme.vcs.removed },
        javaCommentTitle = { italic = true },
        javaDocTags = { fg = theme.syn.preproc },
        javaOperator = { fg = theme.ui.special },
        javaParen = { fg = theme.diag.info },
        javaParen1 = { fg = theme.diag.info },
        javaParen2 = { fg = theme.diag.info },
        javaParen3 = { fg = theme.diag.info },
        javaParen4 = { fg = theme.diag.info },
        javaParen5 = { fg = theme.diag.info },
        javaVarArg = { fg = theme.syn.string },
        javaScriptBraces = { fg = theme.diff.text },
        javaScriptFunction = { fg = theme.vcs.removed },
        javaScriptGlobal = { fg = theme.syn.preproc },
        javaScriptIdentifier = { fg = theme.vcs.removed },
        javaScriptMember = { fg = theme.syn.preproc },
        javaScriptNull = { fg = theme.syn.string },
        javaScriptNumber = { fg = theme.syn.string },
        javaScriptParens = { fg = theme.diag.info },
        javaScriptReserved = { fg = theme.syn.statement },
        javaScriptStatement = { fg = theme.syn.statement },
        javaScriptString = { fg = theme.syn.string },
        javaScriptType = { fg = theme.vcs.added },
        jsArrowFunction = { fg = theme.syn.special3 },
        jsAsyncKeyword = { fg = theme.vcs.removed },
        jsClassFuncName = { fg = theme.vcs.added },
        jsClassKeyword = { fg = theme.vcs.added },
        jsExport = { fg = theme.vcs.changed, italic = true },
        jsExportDefault = { fg = theme.syn.fun, italic = true },
        jsExtendsKeyword = { fg = theme.vcs.added },
        jsFrom = { fg = theme.syn.preproc },
        jsFuncBlock = { fg = theme.diff.text },
        jsFuncCall = { fg = theme.syn.fun },
        jsFuncName = { fg = theme.vcs.added },
        jsFuncParens = { fg = theme.diag.info },
        jsFunction = { fg = theme.vcs.removed },
        jsGlobalNodeObjects = { fg = theme.syn.preproc },
        jsGlobalObjects = { fg = theme.syn.preproc, italic = true },
        jsImport = { fg = theme.syn.statement },
        jsLet = { fg = theme.vcs.removed },
        jsNull = { fg = theme.syn.string },
        jsObject = { fg = theme.ui.special },
        jsObjectFuncName = { fg = theme.vcs.added },
        jsObjectKey = { fg = theme.syn.identifier },
        jsObjectProp = { fg = theme.diff.text },
        jsOperatorKeyword = { fg = theme.vcs.changed },
        jsParens = { fg = theme.diff.text },
        jsReturn = { fg = theme.syn.statement },
        jsSpecial = { fg = theme.vcs.added },
        jsStorageClass = { fg = theme.syn.statement },
        jsTemplateBraces = { fg = theme.syn.preproc },
        jsThis = { fg = theme.vcs.removed },
        jsUndefined = { fg = theme.diff.delete },
        jsVariableDef = { fg = theme.diff.text },
        jsonBraces = { fg = theme.diff.text },
        jsonKeyword = { fg = theme.syn.string },
        jsonQuote = { fg = theme.syn.string },
        jsonString = { fg = theme.diff.text },
        luaFunction = { fg = theme.syn.preproc },
        luaIn = { fg = theme.syn.statement },
        luaTable = { fg = theme.ui.special },
        markdownBlockquote = { fg = theme.syn.punct },
        markdownCode = { fg = theme.syn.preproc },
        markdownCodeBlock = { fg = theme.syn.preproc },
        markdownCodeDelimiter = { fg = theme.syn.preproc },
        markdownH1 = { fg = theme.syn.string },
        markdownH2 = { fg = theme.syn.string },
        markdownH3 = { fg = theme.syn.statement },
        markdownH4 = { fg = theme.syn.statement },
        markdownH5 = { fg = theme.syn.statement },
        markdownH6 = { fg = theme.syn.statement },
        markdownHeadingDelimiter = { fg = theme.ui.special },
        markdownHeadingRule = { fg = theme.syn.punct },
        markdownLinkDelimiter = { fg = theme.diag.info },
        markdownLinkTextDelimiter = { fg = theme.diag.info },
        markdownListMarker = { fg = theme.syn.punct },
        markdownOrderedListMarker = { fg = theme.syn.punct },
        markdownRule = { fg = theme.syn.punct },
        markdownUrl = { fg = theme.syn.string },
        markdownUrlDelimiter = { fg = theme.diag.info },
        markdownUrlTitle = { fg = theme.syn.punct },
        markdownUrlTitleDelimiter = { fg = theme.syn.punct },
        moonExtendedOp = { fg = theme.diag.info },
        moonFunction = { fg = theme.diag.info },
        moonObject = { fg = theme.syn.statement },
        moonSpecialOp = { fg = theme.diag.info },
        netrwClassify = { fg = theme.syn.preproc },
        netrwCmdSep = { fg = theme.diag.info },
        netrwComment = { fg = theme.syn.punct },
        netrwDir = { fg = theme.syn.preproc },
        netrwExe = { fg = theme.syn.statement },
        netrwHelpCmd = { fg = theme.syn.preproc },
        netrwLink = { fg = theme.syn.punct },
        netrwList = { fg = theme.vcs.removed },
        netrwSymLink = { fg = theme.diff.text },
        netrwVersion = { fg = theme.syn.string },
        objcDirective = { fg = theme.vcs.removed },
        objcTypeModifier = { fg = theme.syn.statement },
        purescriptAsKeyword = { fg = theme.syn.preproc },
        purescriptBacktick = { fg = theme.ui.special },
        purescriptConditional = { fg = theme.ui.special },
        purescriptConstructor = { fg = theme.diff.text },
        purescriptDelimiter = { fg = theme.ui.fg_bright },
        purescriptFunction = { fg = theme.diff.text },
        purescriptHidingKeyword = { fg = theme.syn.preproc },
        purescriptImportKeyword = { fg = theme.diff.delete },
        purescriptLet = { fg = theme.syn.preproc },
        purescriptModuleKeyword = { fg = theme.syn.preproc },
        purescriptModuleName = { fg = theme.diff.text },
        purescriptOperator = { fg = theme.vcs.removed },
        purescriptStructure = { fg = theme.syn.preproc },
        purescriptType = { fg = theme.diff.text },
        purescriptTypeVar = { fg = theme.diff.text },
        purescriptWhere = { fg = theme.syn.preproc },
        pythonBoolean = { fg = theme.syn.string },
        pythonBuiltin = { fg = theme.vcs.added },
        pythonBuiltinFunc = { fg = theme.ui.special },
        pythonBuiltinObj = { fg = theme.ui.special },
        pythonCoding = { fg = theme.vcs.removed },
        pythonConditional = { fg = theme.syn.statement },
        pythonDecorator = { fg = theme.ui.special },
        pythonDecoratorName = { fg = theme.ui.special },
        pythonDot = { fg = theme.diag.info },
        pythonDottedName = { fg = theme.syn.string },
        pythonException = { fg = theme.syn.statement },
        pythonExceptions = { fg = theme.syn.string },
        pythonFunction = { fg = theme.syn.preproc },
        pythonImport = { fg = theme.vcs.removed },
        pythonInclude = { fg = theme.vcs.removed },
        pythonOperator = { fg = theme.syn.statement },
        pythonRepeat = { fg = theme.syn.statement },
        pythonRun = { fg = theme.vcs.removed },
        pythonStatement = { fg = theme.syn.statement },
        rubyAssertion = { fg = theme.syn.fun, italic = true },
        rubyAccess = { fg = theme.syn.opkeyword },
        rubyBlockParameterList = { fg = theme.ui.special },
        rubyClass = { fg = theme.syn.statement },
        rubyClassBlock = { fg = theme.ui.fg_dim },
        rubyConstant = { fg = theme.syn.type },
        rubyControl = { fg = theme.syn.statement },
        rubyDefine = { fg = theme.syn.preproc },
        rubyEntities = { fg = theme.ui.fg},
        rubyEntity = { fg = theme.syn.constant },
        rubyValidation = { fg = theme.ui.fg_dim },
        rubyFunction = { fg = theme.vcs.removed },
        rubySymbol = { fg = theme.syn.string },
        rubyCallback = { fg = theme.ui.fg },
        rubyMacro = { fg = theme.ui.special },
        rubyInstanceVariable = { fg = theme.vcs.removed },
        rubyInterpolationDelimiter = { fg = theme.syn.preproc },
        rubyString = { fg = theme.syn.string },
        rubyStringDelimiter = { fg = theme.syn.string },
        rubyTestMacro = { fg = theme.vcs.changed, italic = true },
        scalaCaseFollowing = { fg = theme.diff.text },
        scalaCapitalWord = { fg = theme.diff.text },
        scalaInterpolation = { fg = theme.syn.preproc },
        scalaInstanceDeclaration = { fg = theme.diff.text },
        scalaKeyword = { fg = theme.syn.statement },
        scalaKeywordModifier = { fg = theme.syn.statement },
        scalaNameDefinition = { fg = theme.diff.text },
        scalaOperator = { fg = theme.diff.text },
        scalaSpecial = { fg = theme.syn.preproc },
        scalaTypeDeclaration = { fg = theme.syn.statement },
        scalaTypeExtension = { fg = theme.diff.text },
        scalaTypeTypePostDeclaration = { fg = theme.syn.statement },
        tsxString = { fg = theme.syn.string },
        tsxAttrib = { fg = theme.syn.type },
        tsxTagName = { fg = theme.syn.statement },
        tsxCloseString = { fg = theme.syn.deprecated },
        typeScriptAjaxMethods = { fg = theme.diff.text },
        typeScriptBraces = { fg = theme.diff.text },
        typeScriptDOMObjects = { fg = theme.diff.text },
        typeScriptDocParam = { fg = theme.syn.punct, italic = true },
        typeScriptDocSeeTag = { fg = theme.syn.punct, italic = true },
        typeScriptDocTags = { italic = true },
        typeScriptEndColons = { fg = theme.diff.text },
        typeScriptFuncKeyword = { fg = theme.vcs.removed },
        typeScriptGlobalObjects = { fg = theme.diff.text },
        typeScriptHtmlElemProperties = { fg = theme.diff.text },
        typeScriptIdentifier = { fg = theme.ui.special },
        typeScriptInterpolationDelimiter = { fg = theme.syn.preproc },
        typeScriptLabel = { fg = theme.syn.preproc },
        typeScriptLogicSymbols = { fg = theme.diff.text },
        typeScriptOpSymbols = { fg = theme.diag.info },
        typeScriptParens = { fg = theme.diag.info },
        typeScriptReserved = { fg = theme.syn.preproc },
        vimBracket = { fg = theme.syn.identifier },
        vimCommand = { fg = theme.syn.statement },
        vimContinue = { fg = theme.diag.info },
        vimFunc = { fg = theme.ui.special },
        vimFuncName = { fg = theme.diff.delete },
        vimFuncSID = { fg = theme.syn.preproc },
        vimFuncVar = { fg = theme.diag.info },
        vimFunction = { fg = theme.diag.info },
        vimLet = { fg = theme.vcs.added },
        vimMapModKey = { fg = theme.ui.special },
        vimNotation = { fg = theme.ui.special },
        vimNumber = { fg = theme.diag.info },
        vimSep = { fg = theme.diag.info },
        vimSetSep = { fg = theme.diag.info },
        vimString = { fg = theme.syn.string },
        vimTodo = { fg = theme.diff.delete },
        vimType = { fg = theme.vcs.added },
        vimVar = { fg = theme.vcs.removed },
        xmlAttrib = { fg = theme.syn.preproc },
        xmlAttribPunct = { fg = theme.syn.punct },
        xmlCdataCdata = { fg = theme.syn.string },
        xmlCdataStart = { fg = theme.syn.punct },
        xmlDocTypeDecl = { fg = theme.syn.punct },
        xmlDocTypeKeyword = { fg = theme.syn.string },
        xmlEndTag = { fg = theme.vcs.removed },
        xmlEntity = { fg = theme.ui.special },
        xmlEntityPunct = { fg = theme.ui.special },
        xmlEqual = { fg = theme.vcs.removed },
        xmlProcessingDelim = { fg = theme.syn.punct },
        xmlTag = { fg = theme.vcs.removed },
        xmlTagName = { fg = theme.vcs.removed }
    }
end

return M
