return {
    -- LSP Semantic Token Groups
    ["@lsp.type.comment"]                      = { link = "@comment" },
    ["@lsp.type.boolean"]                      = { link = "@boolean" },
    ["@lsp.type.number"]                       = { link = "@number" },
    ["@lsp.type.operator"]                     = { link = "@operator" },
    ["@lsp.type.parameter"]                    = { link = "@variables.parameter" },
    ["@lsp.type.property"]                     = { link = "@property" },

    ["@lsp.type.builtinType"]                  = { link = "@type.builtin" },
    ["@lsp.type.variable"]                     = { link = "@variable" },
    ["@lsp.type.enum"]                         = { link = "@type" },
    ["@lsp.type.enumMember"]                   = { link = "@constant" },
    ["@lsp.type.escapeSequence"]               = { link = "@string.escape" },
    ["@lsp.type.formatSpecifier"]              = { link = "@punctuation.special" },
    ["@lsp.type.interface"]                    = { fg = P.yellow },
    ["@lsp.type.macro"]                        = { fg = P.magenta },
    ["@lsp.type.keyword"]                      = { link = "@keyword" },
    ["@lsp.type.namespace"]                    = { link = "@namespace" },
    ["@lsp.type.selfKeyword"]                  = { link = "@variable.builtin" },
    ["@lsp.type.string.rust"]                  = { link = "@string" },
    ["@lsp.type.typeAlias"]                    = { link = "@type.definition" },
    ["@lsp.type.unresolvedReference"]          = { undercurl = true, sp = P.orange },
    ["@lsp.mod.readonly"]                      = { link = "@constant" },
    ["@lsp.typemod.function.readonly"]         = { fg = P.blue },
    ["@lsp.typemod.variable.declaration"]      = { fg = P.fg },
    ["@lsp.typemod.property"]                  = { fg = P.bright_blue },
    ["@lsp.typemod.class.defaultLibrary"]      = { link = "@type.builtin" },
    ["@lsp.typemod.enum.defaultLibrary"]       = { link = "@type.builtin" },
    ["@lsp.typemod.enumMember.defaultLibrary"] = { link = "@constant.builtin" },
    ["@lsp.typemod.function.defaultLibrary"]   = { link = "@function.builtin" },
    ["@lsp.typemod.keyword.async"]             = { link = "@keyword.coroutine" },
    ["@lsp.typemod.macro.defaultLibrary"]      = { link = "@function.builtin" },
    ["@lsp.typemod.method.defaultLibrary"]     = { link = "@function.builtin" },
    ["@lsp.typemod.operator.injected"]         = { link = "@operator" },
    ["@lsp.typemod.string.injected"]           = { link = "@string" },
    ["@lsp.typemod.type.defaultLibrary"]       = { fg = P.purple },
    ["@lsp.typemod.variable.defaultLibrary"]   = { link = "@variable.builtin" },
    ["@lsp.typemod.variable.injected"]         = { link = "@variable" },

    -- Diagnostics
    DiagnosticOk             = { fg = P.green },
    DiagnosticError          = { fg = P.orange },
    DiagnosticWarn           = { fg = P.yellow },
    DiagnosticInfo           = { fg = P.purple },
    DiagnosticHint           = { fg = P.cyan },
    DiagnosticUnderlineError = { fg = P.orange, underline = true },
    DiagnosticUnderlineWarn  = { fg = P.yellow, underline = true },
    DiagnosticUnderlineInfo  = { fg = P.purple, underline = true },
    DiagnosticUnderlineHint  = { fg = P.cyan, underline = true },

    -- Neovim's built-in language server client
    LspReferenceWrite           = { fg = P.purple, underline = true },
    LspReferenceText            = { fg = P.purple, underline = true },
    LspReferenceRead            = { fg = P.purple, underline = true },
    LspSignatureActiveParameter = { fg = P.yellow, bold = true },
}
