diff options
| author | moxie <moxie.git@posteo.net> | 2025-09-30 12:27:44 +0300 |
|---|---|---|
| committer | moxie <moxie.git@posteo.net> | 2025-09-30 12:27:44 +0300 |
| commit | 1e27d1c7b25e4d28a25c0fa2c4e6e33a66b9072e (patch) | |
| tree | 7169509b4d5dfce3ed25fe333cc506a40f5c90f2 /.config/nvim/lua/config | |
| parent | 51797f743fe74d1723ca62085f92e8c5e953038b (diff) | |
add nvim configs
Diffstat (limited to '.config/nvim/lua/config')
| -rw-r--r-- | .config/nvim/lua/config/autocmd.lua | 83 | ||||
| -rw-r--r-- | .config/nvim/lua/config/gruvbox.lua | 1305 | ||||
| -rw-r--r-- | .config/nvim/lua/config/keymaps.lua | 108 | ||||
| -rw-r--r-- | .config/nvim/lua/config/lazy.lua | 23 | ||||
| -rw-r--r-- | .config/nvim/lua/config/lsp.lua | 88 | ||||
| -rw-r--r-- | .config/nvim/lua/config/options.lua | 160 | ||||
| -rw-r--r-- | .config/nvim/lua/config/terminal.lua | 19 |
7 files changed, 1786 insertions, 0 deletions
diff --git a/.config/nvim/lua/config/autocmd.lua b/.config/nvim/lua/config/autocmd.lua new file mode 100644 index 0000000..9cdb78d --- /dev/null +++ b/.config/nvim/lua/config/autocmd.lua @@ -0,0 +1,83 @@ +local au = vim.api.nvim_create_autocmd +local augroup = vim.api.nvim_create_augroup +local ag = augroup("default", {}) +local ft = augroup("filetypes", {}) + +-- shortly highlight yanks +au("TextYankPost", { + group = ag, + pattern = "*", + callback = function() + vim.highlight.on_yank({ higroup = "IncSearch", timeout = 250, on_visual = true }) + end, +}) + +au("WinEnter", { + group = ag, + pattern = "*", + callback = function() + vim.opt_local.cursorline = true + end, +}) +au("WinLeave", { + group = ag, + pattern = "*", + callback = function() + vim.opt_local.cursorline = false + end, +}) + +-- highlight extra whitespace +local hlstmt = [[highlight ExtraWhitespace ctermbg=red guibg=red]] +vim.cmd(hlstmt) +au("ColorScheme", { + group = ag, + pattern = "*", + callback = function() + vim.cmd(hlstmt) + end, +}) +vim.cmd([[match ExtraWhitespace /\s\+$\| \+\ze\t/]]) + +-- only show color col in insert mode +au("InsertEnter", { + group = ag, + pattern = "*", + callback = function() + vim.o.colorcolumn = "78" + end, +}) +au("InsertLeave", { + group = ag, + pattern = "*", + callback = function() + vim.o.colorcolumn = "" + end, +}) + +-- resize splits upon window resize +au("VimResized", { + group = ag, + pattern = "*", + callback = function() + vim.cmd([[exe "normal! \<C-w>="]]) + end, +}) + +-- ms word doc reading +au("BufReadPre", { + group = ft, + pattern = "*.doc{x,}", + callback = function() + vim.opt_local.readonly = true + end, +}) +vim.cmd([[au BufReadPost *.doc %!antiword "%"]]) +vim.cmd([[au BufReadPost *.docx %!docx2txt "%" -]]) + +-- remove whitespace at the end of line +au({ "BufWritePre" }, { + group = ag, + pattern = "*", + command = [[%s/\s\+$//e]], +}) diff --git a/.config/nvim/lua/config/gruvbox.lua b/.config/nvim/lua/config/gruvbox.lua new file mode 100644 index 0000000..3a9b161 --- /dev/null +++ b/.config/nvim/lua/config/gruvbox.lua @@ -0,0 +1,1305 @@ +---@class Gruvbox +---@field config GruvboxConfig +---@field palette GruvboxPalette +local Gruvbox = {} + +---@alias Contrast "hard" | "soft" | "" + +---@class ItalicConfig +---@field strings boolean +---@field comments boolean +---@field operators boolean +---@field folds boolean +---@field emphasis boolean + +---@class HighlightDefinition +---@field fg string? +---@field bg string? +---@field sp string? +---@field blend integer? +---@field bold boolean? +---@field standout boolean? +---@field underline boolean? +---@field undercurl boolean? +---@field underdouble boolean? +---@field underdotted boolean? +---@field strikethrough boolean? +---@field italic boolean? +---@field reverse boolean? +---@field nocombine boolean? + +---@class GruvboxConfig +---@field bold boolean? +---@field contrast Contrast? +---@field dim_inactive boolean? +---@field inverse boolean? +---@field invert_selection boolean? +---@field invert_signs boolean? +---@field invert_tabline boolean? +---@field italic ItalicConfig? +---@field overrides table<string, HighlightDefinition>? +---@field palette_overrides table<string, string>? +---@field strikethrough boolean? +---@field terminal_colors boolean? +---@field transparent_mode boolean? +---@field undercurl boolean? +---@field underline boolean? +local default_config = { + terminal_colors = true, + undercurl = true, + underline = true, + bold = true, + italic = { + strings = true, + emphasis = true, + comments = true, + operators = false, + folds = true, + }, + strikethrough = true, + invert_selection = false, + invert_signs = false, + invert_tabline = false, + inverse = true, + contrast = "hard", + palette_overrides = {}, + overrides = {}, + dim_inactive = false, + transparent_mode = false, +} + +Gruvbox.config = vim.deepcopy(default_config) + +-- main gruvbox color palette +---@class GruvboxPalette +Gruvbox.palette = { + dark0_hard = "#1d2021", + dark0 = "#282828", + dark0_soft = "#32302f", + dark1 = "#3c3836", + dark2 = "#504945", + dark3 = "#665c54", + dark4 = "#7c6f64", + light0_hard = "#f9f5d7", + light0 = "#fbf1c7", + light0_soft = "#f2e5bc", + light1 = "#ebdbb2", + light2 = "#d5c4a1", + light3 = "#bdae93", + light4 = "#a89984", + bright_red = "#fb4934", + bright_green = "#b8bb26", + bright_yellow = "#fabd2f", + bright_blue = "#83a598", + bright_purple = "#d3869b", + bright_aqua = "#8ec07c", + bright_orange = "#fe8019", + neutral_red = "#cc241d", + neutral_green = "#98971a", + neutral_yellow = "#d79921", + neutral_blue = "#458588", + neutral_purple = "#b16286", + neutral_aqua = "#689d6a", + neutral_orange = "#d65d0e", + faded_red = "#9d0006", + faded_green = "#79740e", + faded_yellow = "#b57614", + faded_blue = "#076678", + faded_purple = "#8f3f71", + faded_aqua = "#427b58", + faded_orange = "#af3a03", + dark_red_hard = "#792329", + dark_red = "#722529", + dark_red_soft = "#7b2c2f", + light_red_hard = "#fc9690", + light_red = "#fc9487", + light_red_soft = "#f78b7f", + dark_green_hard = "#5a633a", + dark_green = "#62693e", + dark_green_soft = "#686d43", + light_green_hard = "#d3d6a5", + light_green = "#d5d39b", + light_green_soft = "#cecb94", + dark_aqua_hard = "#3e4934", + dark_aqua = "#49503b", + dark_aqua_soft = "#525742", + light_aqua_hard = "#e6e9c1", + light_aqua = "#e8e5b5", + light_aqua_soft = "#e1dbac", + gray = "#928374", +} + +-- get a hex list of gruvbox colors based on current bg and constrast config +local function get_colors() + local p = Gruvbox.palette + local config = Gruvbox.config + + for color, hex in pairs(config.palette_overrides) do + p[color] = hex + end + + local bg = vim.o.background + local contrast = config.contrast + + local color_groups = { + dark = { + bg0 = p.dark0, + bg1 = p.dark1, + bg2 = p.dark2, + bg3 = p.dark3, + bg4 = p.dark4, + fg0 = p.light0, + fg1 = p.light1, + fg2 = p.light2, + fg3 = p.light3, + fg4 = p.light4, + red = p.bright_red, + green = p.bright_green, + yellow = p.bright_yellow, + blue = p.bright_blue, + purple = p.bright_purple, + aqua = p.bright_aqua, + orange = p.bright_orange, + neutral_red = p.neutral_red, + neutral_green = p.neutral_green, + neutral_yellow = p.neutral_yellow, + neutral_blue = p.neutral_blue, + neutral_purple = p.neutral_purple, + neutral_aqua = p.neutral_aqua, + dark_red = p.dark_red, + dark_green = p.dark_green, + dark_aqua = p.dark_aqua, + gray = p.gray, + }, + light = { + bg0 = p.light0, + bg1 = p.light1, + bg2 = p.light2, + bg3 = p.light3, + bg4 = p.light4, + fg0 = p.dark0, + fg1 = p.dark1, + fg2 = p.dark2, + fg3 = p.dark3, + fg4 = p.dark4, + red = p.faded_red, + green = p.faded_green, + yellow = p.faded_yellow, + blue = p.faded_blue, + purple = p.faded_purple, + aqua = p.faded_aqua, + orange = p.faded_orange, + neutral_red = p.neutral_red, + neutral_green = p.neutral_green, + neutral_yellow = p.neutral_yellow, + neutral_blue = p.neutral_blue, + neutral_purple = p.neutral_purple, + neutral_aqua = p.neutral_aqua, + dark_red = p.light_red, + dark_green = p.light_green, + dark_aqua = p.light_aqua, + gray = p.gray, + }, + } + + if contrast ~= nil and contrast ~= "" then + color_groups[bg].bg0 = p[bg .. "0_" .. contrast] + color_groups[bg].dark_red = p[bg .. "_red_" .. contrast] + color_groups[bg].dark_green = p[bg .. "_green_" .. contrast] + color_groups[bg].dark_aqua = p[bg .. "_aqua_" .. contrast] + end + + return color_groups[bg] +end + +local function get_groups() + local colors = get_colors() + local config = Gruvbox.config + + if config.terminal_colors then + local term_colors = { + colors.bg0, + colors.neutral_red, + colors.neutral_green, + colors.neutral_yellow, + colors.neutral_blue, + colors.neutral_purple, + colors.neutral_aqua, + colors.fg4, + colors.gray, + colors.red, + colors.green, + colors.yellow, + colors.blue, + colors.purple, + colors.aqua, + colors.fg1, + } + for index, value in ipairs(term_colors) do + vim.g["terminal_color_" .. index - 1] = value + end + end + + local groups = { + GruvboxFg0 = { fg = colors.fg0 }, + GruvboxFg1 = { fg = colors.fg1 }, + GruvboxFg2 = { fg = colors.fg2 }, + GruvboxFg3 = { fg = colors.fg3 }, + GruvboxFg4 = { fg = colors.fg4 }, + GruvboxGray = { fg = colors.gray }, + GruvboxBg0 = { fg = colors.bg0 }, + GruvboxBg1 = { fg = colors.bg1 }, + GruvboxBg2 = { fg = colors.bg2 }, + GruvboxBg3 = { fg = colors.bg3 }, + GruvboxBg4 = { fg = colors.bg4 }, + GruvboxRed = { fg = colors.red }, + GruvboxRedBold = { fg = colors.red, bold = config.bold }, + GruvboxGreen = { fg = colors.green }, + GruvboxGreenBold = { fg = colors.green, bold = config.bold }, + GruvboxYellow = { fg = colors.yellow }, + GruvboxYellowBold = { fg = colors.yellow, bold = config.bold }, + GruvboxBlue = { fg = colors.blue }, + GruvboxBlueBold = { fg = colors.blue, bold = config.bold }, + GruvboxPurple = { fg = colors.purple }, + GruvboxPurpleBold = { fg = colors.purple, bold = config.bold }, + GruvboxAqua = { fg = colors.aqua }, + GruvboxAquaBold = { fg = colors.aqua, bold = config.bold }, + GruvboxOrange = { fg = colors.orange }, + GruvboxOrangeBold = { fg = colors.orange, bold = config.bold }, + GruvboxRedSign = config.transparent_mode and { fg = colors.red, reverse = config.invert_signs } + or { fg = colors.red, bg = colors.bg1, reverse = config.invert_signs }, + GruvboxGreenSign = config.transparent_mode and { fg = colors.green, reverse = config.invert_signs } + or { fg = colors.green, bg = colors.bg1, reverse = config.invert_signs }, + GruvboxYellowSign = config.transparent_mode and { fg = colors.yellow, reverse = config.invert_signs } + or { fg = colors.yellow, bg = colors.bg1, reverse = config.invert_signs }, + GruvboxBlueSign = config.transparent_mode and { fg = colors.blue, reverse = config.invert_signs } + or { fg = colors.blue, bg = colors.bg1, reverse = config.invert_signs }, + GruvboxPurpleSign = config.transparent_mode and { fg = colors.purple, reverse = config.invert_signs } + or { fg = colors.purple, bg = colors.bg1, reverse = config.invert_signs }, + GruvboxAquaSign = config.transparent_mode and { fg = colors.aqua, reverse = config.invert_signs } + or { fg = colors.aqua, bg = colors.bg1, reverse = config.invert_signs }, + GruvboxOrangeSign = config.transparent_mode and { fg = colors.orange, reverse = config.invert_signs } + or { fg = colors.orange, bg = colors.bg1, reverse = config.invert_signs }, + GruvboxRedUnderline = { undercurl = config.undercurl, sp = colors.red }, + GruvboxGreenUnderline = { undercurl = config.undercurl, sp = colors.green }, + GruvboxYellowUnderline = { undercurl = config.undercurl, sp = colors.yellow }, + GruvboxBlueUnderline = { undercurl = config.undercurl, sp = colors.blue }, + GruvboxPurpleUnderline = { undercurl = config.undercurl, sp = colors.purple }, + GruvboxAquaUnderline = { undercurl = config.undercurl, sp = colors.aqua }, + GruvboxOrangeUnderline = { undercurl = config.undercurl, sp = colors.orange }, + Normal = config.transparent_mode and { fg = colors.fg1, bg = nil } or { fg = colors.fg1, bg = colors.bg0 }, + NormalFloat = config.transparent_mode and { fg = colors.fg1, bg = nil } or { fg = colors.fg1, bg = colors.bg1 }, + NormalNC = config.dim_inactive and { fg = colors.fg0, bg = colors.bg1 } or { link = "Normal" }, + CursorLine = { bg = colors.bg1 }, + CursorColumn = { link = "CursorLine" }, + TabLineFill = { fg = colors.bg4, bg = colors.bg1, reverse = config.invert_tabline }, + TabLineSel = { fg = colors.green, bg = colors.bg1, reverse = config.invert_tabline }, + TabLine = { link = "TabLineFill" }, + MatchParen = { bg = colors.bg3, bold = config.bold }, + ColorColumn = { bg = colors.bg1 }, + Conceal = { fg = colors.blue }, + CursorLineNr = { fg = colors.yellow, bg = colors.bg1 }, + NonText = { link = "GruvboxBg2" }, + SpecialKey = { link = "GruvboxFg4" }, + Visual = { bg = colors.bg3, reverse = config.invert_selection }, + VisualNOS = { link = "Visual" }, + Search = { fg = colors.yellow, bg = colors.bg0, reverse = config.inverse }, + IncSearch = { fg = colors.orange, bg = colors.bg0, reverse = config.inverse }, + CurSearch = { link = "IncSearch" }, + QuickFixLine = { link = "GruvboxPurple" }, + Underlined = { fg = colors.blue, underline = config.underline }, + StatusLine = { fg = colors.fg1, bg = colors.bg2 }, + StatusLineNC = { fg = colors.fg4, bg = colors.bg1 }, + WinBar = { fg = colors.fg4, bg = colors.bg0 }, + WinBarNC = { fg = colors.fg3, bg = colors.bg1 }, + WinSeparator = config.transparent_mode and { fg = colors.bg3, bg = nil } or { fg = colors.bg3, bg = colors.bg0 }, + WildMenu = { fg = colors.blue, bg = colors.bg2, bold = config.bold }, + Directory = { link = "GruvboxGreenBold" }, + Title = { link = "GruvboxGreenBold" }, + ErrorMsg = { fg = colors.bg0, bg = colors.red, bold = config.bold }, + MoreMsg = { link = "GruvboxYellowBold" }, + ModeMsg = { link = "GruvboxYellowBold" }, + Question = { link = "GruvboxOrangeBold" }, + WarningMsg = { link = "GruvboxRedBold" }, + LineNr = { fg = colors.bg4 }, + SignColumn = config.transparent_mode and { bg = nil } or { bg = colors.bg1 }, + Folded = { fg = colors.gray, bg = colors.bg1, italic = config.italic.folds }, + FoldColumn = config.transparent_mode and { fg = colors.gray, bg = nil } or { fg = colors.gray, bg = colors.bg1 }, + Cursor = { reverse = config.inverse }, + vCursor = { link = "Cursor" }, + iCursor = { link = "Cursor" }, + lCursor = { link = "Cursor" }, + Special = { link = "GruvboxOrange" }, + Comment = { fg = colors.gray, italic = config.italic.comments }, + Todo = { fg = colors.bg0, bg = colors.yellow, bold = config.bold, italic = config.italic.comments }, + Done = { fg = colors.orange, bold = config.bold, italic = config.italic.comments }, + Error = { fg = colors.red, bold = config.bold, reverse = config.inverse }, + Statement = { link = "GruvboxRed" }, + Conditional = { link = "GruvboxRed" }, + Repeat = { link = "GruvboxRed" }, + Label = { link = "GruvboxRed" }, + Exception = { link = "GruvboxRed" }, + Operator = { fg = colors.orange, italic = config.italic.operators }, + Keyword = { link = "GruvboxRed" }, + Identifier = { link = "GruvboxBlue" }, + Function = { link = "GruvboxGreenBold" }, + PreProc = { link = "GruvboxAqua" }, + Include = { link = "GruvboxAqua" }, + Define = { link = "GruvboxAqua" }, + Macro = { link = "GruvboxAqua" }, + PreCondit = { link = "GruvboxAqua" }, + Constant = { link = "GruvboxPurple" }, + Character = { link = "GruvboxPurple" }, + String = { fg = colors.green, italic = config.italic.strings }, + Boolean = { link = "GruvboxPurple" }, + Number = { link = "GruvboxPurple" }, + Float = { link = "GruvboxPurple" }, + Type = { link = "GruvboxYellow" }, + StorageClass = { link = "GruvboxOrange" }, + Structure = { link = "GruvboxAqua" }, + Typedef = { link = "GruvboxYellow" }, + Pmenu = { fg = colors.fg1, bg = colors.bg2 }, + PmenuSel = { fg = colors.bg2, bg = colors.blue, bold = config.bold }, + PmenuSbar = { bg = colors.bg2 }, + PmenuThumb = { bg = colors.bg4 }, + DiffDelete = { bg = colors.dark_red }, + DiffAdd = { bg = colors.dark_green }, + DiffChange = { bg = colors.dark_aqua }, + DiffText = { bg = colors.yellow, fg = colors.bg0 }, + SpellCap = { link = "GruvboxBlueUnderline" }, + SpellBad = { link = "GruvboxRedUnderline" }, + SpellLocal = { link = "GruvboxAquaUnderline" }, + SpellRare = { link = "GruvboxPurpleUnderline" }, + Whitespace = { fg = colors.bg2 }, + Delimiter = { link = "GruvboxOrange" }, + EndOfBuffer = { link = "NonText" }, + DiagnosticError = { link = "GruvboxRed" }, + DiagnosticWarn = { link = "GruvboxYellow" }, + DiagnosticInfo = { link = "GruvboxBlue" }, + DiagnosticDeprecated = { strikethrough = config.strikethrough }, + DiagnosticHint = { link = "GruvboxAqua" }, + DiagnosticOk = { link = "GruvboxGreen" }, + DiagnosticSignError = { link = "GruvboxRedSign" }, + DiagnosticSignWarn = { link = "GruvboxYellowSign" }, + DiagnosticSignInfo = { link = "GruvboxBlueSign" }, + DiagnosticSignHint = { link = "GruvboxAquaSign" }, + DiagnosticSignOk = { link = "GruvboxGreenSign" }, + DiagnosticUnderlineError = { link = "GruvboxRedUnderline" }, + DiagnosticUnderlineWarn = { link = "GruvboxYellowUnderline" }, + DiagnosticUnderlineInfo = { link = "GruvboxBlueUnderline" }, + DiagnosticUnderlineHint = { link = "GruvboxAquaUnderline" }, + DiagnosticUnderlineOk = { link = "GruvboxGreenUnderline" }, + DiagnosticFloatingError = { link = "GruvboxRed" }, + DiagnosticFloatingWarn = { link = "GruvboxOrange" }, + DiagnosticFloatingInfo = { link = "GruvboxBlue" }, + DiagnosticFloatingHint = { link = "GruvboxAqua" }, + DiagnosticFloatingOk = { link = "GruvboxGreen" }, + DiagnosticVirtualTextError = { link = "GruvboxRed" }, + DiagnosticVirtualTextWarn = { link = "GruvboxYellow" }, + DiagnosticVirtualTextInfo = { link = "GruvboxBlue" }, + DiagnosticVirtualTextHint = { link = "GruvboxAqua" }, + DiagnosticVirtualTextOk = { link = "GruvboxGreen" }, + LspReferenceRead = { link = "GruvboxYellowBold" }, + LspReferenceTarget = { link = "Visual" }, + LspReferenceText = { link = "GruvboxYellowBold" }, + LspReferenceWrite = { link = "GruvboxOrangeBold" }, + LspCodeLens = { link = "GruvboxGray" }, + LspSignatureActiveParameter = { link = "Search" }, + gitcommitSelectedFile = { link = "GruvboxGreen" }, + gitcommitDiscardedFile = { link = "GruvboxRed" }, + GitSignsAdd = { link = "GruvboxGreen" }, + GitSignsChange = { link = "GruvboxOrange" }, + GitSignsDelete = { link = "GruvboxRed" }, + NvimTreeSymlink = { fg = colors.neutral_aqua }, + NvimTreeRootFolder = { fg = colors.neutral_purple, bold = true }, + NvimTreeFolderIcon = { fg = colors.neutral_blue, bold = true }, + NvimTreeFileIcon = { fg = colors.light2 }, + NvimTreeExecFile = { fg = colors.neutral_green, bold = true }, + NvimTreeOpenedFile = { fg = colors.bright_red, bold = true }, + NvimTreeSpecialFile = { fg = colors.neutral_yellow, bold = true, underline = true }, + NvimTreeImageFile = { fg = colors.neutral_purple }, + NvimTreeIndentMarker = { fg = colors.dark3 }, + NvimTreeGitDirty = { fg = colors.neutral_yellow }, + NvimTreeGitStaged = { fg = colors.neutral_yellow }, + NvimTreeGitMerge = { fg = colors.neutral_purple }, + NvimTreeGitRenamed = { fg = colors.neutral_purple }, + NvimTreeGitNew = { fg = colors.neutral_yellow }, + NvimTreeGitDeleted = { fg = colors.neutral_red }, + NvimTreeWindowPicker = { bg = colors.aqua }, + debugPC = { link = "DiffAdd" }, + debugBreakpoint = { link = "GruvboxRedSign" }, + StartifyBracket = { link = "GruvboxFg3" }, + StartifyFile = { link = "GruvboxFg1" }, + StartifyNumber = { link = "GruvboxBlue" }, + StartifyPath = { link = "GruvboxGray" }, + StartifySlash = { link = "GruvboxGray" }, + StartifySection = { link = "GruvboxYellow" }, + StartifySpecial = { link = "GruvboxBg2" }, + StartifyHeader = { link = "GruvboxOrange" }, + StartifyFooter = { link = "GruvboxBg2" }, + StartifyVar = { link = "StartifyPath" }, + StartifySelect = { link = "Title" }, + DirvishPathTail = { link = "GruvboxAqua" }, + DirvishArg = { link = "GruvboxYellow" }, + netrwDir = { link = "GruvboxAqua" }, + netrwClassify = { link = "GruvboxAqua" }, + netrwLink = { link = "GruvboxGray" }, + netrwSymLink = { link = "GruvboxFg1" }, + netrwExe = { link = "GruvboxYellow" }, + netrwComment = { link = "GruvboxGray" }, + netrwList = { link = "GruvboxBlue" }, + netrwHelpCmd = { link = "GruvboxAqua" }, + netrwCmdSep = { link = "GruvboxFg3" }, + netrwVersion = { link = "GruvboxGreen" }, + NERDTreeDir = { link = "GruvboxAqua" }, + NERDTreeDirSlash = { link = "GruvboxAqua" }, + NERDTreeOpenable = { link = "GruvboxOrange" }, + NERDTreeClosable = { link = "GruvboxOrange" }, + NERDTreeFile = { link = "GruvboxFg1" }, + NERDTreeExecFile = { link = "GruvboxYellow" }, + NERDTreeUp = { link = "GruvboxGray" }, + NERDTreeCWD = { link = "GruvboxGreen" }, + NERDTreeHelp = { link = "GruvboxFg1" }, + NERDTreeToggleOn = { link = "GruvboxGreen" }, + NERDTreeToggleOff = { link = "GruvboxRed" }, + CocErrorSign = { link = "GruvboxRedSign" }, + CocWarningSign = { link = "GruvboxOrangeSign" }, + CocInfoSign = { link = "GruvboxBlueSign" }, + CocHintSign = { link = "GruvboxAquaSign" }, + CocErrorFloat = { link = "GruvboxRed" }, + CocWarningFloat = { link = "GruvboxOrange" }, + CocInfoFloat = { link = "GruvboxBlue" }, + CocHintFloat = { link = "GruvboxAqua" }, + CocDiagnosticsError = { link = "GruvboxRed" }, + CocDiagnosticsWarning = { link = "GruvboxOrange" }, + CocDiagnosticsInfo = { link = "GruvboxBlue" }, + CocDiagnosticsHint = { link = "GruvboxAqua" }, + CocSearch = { link = "GruvboxBlue" }, + CocSelectedText = { link = "GruvboxRed" }, + CocMenuSel = { link = "PmenuSel" }, + CocCodeLens = { link = "GruvboxGray" }, + CocErrorHighlight = { link = "GruvboxRedUnderline" }, + CocWarningHighlight = { link = "GruvboxOrangeUnderline" }, + CocInfoHighlight = { link = "GruvboxBlueUnderline" }, + CocHintHighlight = { link = "GruvboxAquaUnderline" }, + SnacksPicker = { link = "GruvboxFg1" }, + SnacksPickerBorder = { link = "SnacksPicker" }, + SnacksPickerListCursorLine = { link = "CursorLine" }, + SnacksPickerMatch = { link = "GruvboxOrange" }, + SnacksPickerPrompt = { link = "GruvboxRed" }, + SnacksPickerTitle = { link = "SnacksPicker" }, + SnacksPickerDir = { link = "GruvboxGray" }, + SnacksPickerPathHidden = { link = "GruvboxGray" }, + SnacksPickerGitStatusUntracked = { link = "GruvboxGray" }, + SnacksPickerPathIgnored = { link = "GruvboxBg3" }, + TelescopeNormal = { link = "GruvboxFg1" }, + TelescopeSelection = { link = "CursorLine" }, + TelescopeSelectionCaret = { link = "GruvboxRed" }, + TelescopeMultiSelection = { link = "GruvboxGray" }, + TelescopeBorder = { link = "TelescopeNormal" }, + TelescopePromptBorder = { link = "TelescopeNormal" }, + TelescopeResultsBorder = { link = "TelescopeNormal" }, + TelescopePreviewBorder = { link = "TelescopeNormal" }, + TelescopeMatching = { link = "GruvboxOrange" }, + TelescopePromptPrefix = { link = "GruvboxRed" }, + TelescopePrompt = { link = "TelescopeNormal" }, + CmpItemAbbr = { link = "GruvboxFg0" }, + CmpItemAbbrDeprecated = { link = "GruvboxFg1" }, + CmpItemAbbrMatch = { link = "GruvboxBlueBold" }, + CmpItemAbbrMatchFuzzy = { link = "GruvboxBlueUnderline" }, + CmpItemMenu = { link = "GruvboxGray" }, + CmpItemKindText = { link = "GruvboxOrange" }, + CmpItemKindVariable = { link = "GruvboxOrange" }, + CmpItemKindMethod = { link = "GruvboxBlue" }, + CmpItemKindFunction = { link = "GruvboxBlue" }, + CmpItemKindConstructor = { link = "GruvboxYellow" }, + CmpItemKindUnit = { link = "GruvboxBlue" }, + CmpItemKindField = { link = "GruvboxBlue" }, + CmpItemKindClass = { link = "GruvboxYellow" }, + CmpItemKindInterface = { link = "GruvboxYellow" }, + CmpItemKindModule = { link = "GruvboxBlue" }, + CmpItemKindProperty = { link = "GruvboxBlue" }, + CmpItemKindValue = { link = "GruvboxOrange" }, + CmpItemKindEnum = { link = "GruvboxYellow" }, + CmpItemKindOperator = { link = "GruvboxYellow" }, + CmpItemKindKeyword = { link = "GruvboxPurple" }, + CmpItemKindEvent = { link = "GruvboxPurple" }, + CmpItemKindReference = { link = "GruvboxPurple" }, + CmpItemKindColor = { link = "GruvboxPurple" }, + CmpItemKindSnippet = { link = "GruvboxGreen" }, + CmpItemKindFile = { link = "GruvboxBlue" }, + CmpItemKindFolder = { link = "GruvboxBlue" }, + CmpItemKindEnumMember = { link = "GruvboxAqua" }, + CmpItemKindConstant = { link = "GruvboxOrange" }, + CmpItemKindStruct = { link = "GruvboxYellow" }, + CmpItemKindTypeParameter = { link = "GruvboxYellow" }, + BlinkCmpLabel = { link = "GruvboxFg0" }, + BlinkCmpLabelDeprecated = { link = "GruvboxFg1" }, + BlinkCmpLabelMatch = { link = "GruvboxBlueBold" }, + BlinkCmpLabelDetail = { link = "GruvboxGray" }, + BlinkCmpLabelDescription = { link = "GruvboxGray" }, + BlinkCmpKindText = { link = "GruvboxOrange" }, + BlinkCmpKindVariable = { link = "GruvboxOrange" }, + BlinkCmpKindMethod = { link = "GruvboxBlue" }, + BlinkCmpKindFunction = { link = "GruvboxBlue" }, + BlinkCmpKindConstructor = { link = "GruvboxYellow" }, + BlinkCmpKindUnit = { link = "GruvboxBlue" }, + BlinkCmpKindField = { link = "GruvboxBlue" }, + BlinkCmpKindClass = { link = "GruvboxYellow" }, + BlinkCmpKindInterface = { link = "GruvboxYellow" }, + BlinkCmpKindModule = { link = "GruvboxBlue" }, + BlinkCmpKindProperty = { link = "GruvboxBlue" }, + BlinkCmpKindValue = { link = "GruvboxOrange" }, + BlinkCmpKindEnum = { link = "GruvboxYellow" }, + BlinkCmpKindOperator = { link = "GruvboxYellow" }, + BlinkCmpKindKeyword = { link = "GruvboxPurple" }, + BlinkCmpKindEvent = { link = "GruvboxPurple" }, + BlinkCmpKindReference = { link = "GruvboxPurple" }, + BlinkCmpKindColor = { link = "GruvboxPurple" }, + BlinkCmpKindSnippet = { link = "GruvboxGreen" }, + BlinkCmpKindFile = { link = "GruvboxBlue" }, + BlinkCmpKindFolder = { link = "GruvboxBlue" }, + BlinkCmpKindEnumMember = { link = "GruvboxAqua" }, + BlinkCmpKindConstant = { link = "GruvboxOrange" }, + BlinkCmpKindStruct = { link = "GruvboxYellow" }, + BlinkCmpKindTypeParameter = { link = "GruvboxYellow" }, + BlinkCmpSource = { link = "GruvboxGray" }, + BlinkCmpGhostText = { link = "GruvboxBg4" }, + diffAdded = { link = "DiffAdd" }, + diffRemoved = { link = "DiffDelete" }, + diffChanged = { link = "DiffChange" }, + diffFile = { link = "GruvboxOrange" }, + diffNewFile = { link = "GruvboxYellow" }, + diffOldFile = { link = "GruvboxOrange" }, + diffLine = { link = "GruvboxBlue" }, + diffIndexLine = { link = "diffChanged" }, + NavicIconsFile = { link = "GruvboxBlue" }, + NavicIconsModule = { link = "GruvboxOrange" }, + NavicIconsNamespace = { link = "GruvboxBlue" }, + NavicIconsPackage = { link = "GruvboxAqua" }, + NavicIconsClass = { link = "GruvboxYellow" }, + NavicIconsMethod = { link = "GruvboxBlue" }, + NavicIconsProperty = { link = "GruvboxAqua" }, + NavicIconsField = { link = "GruvboxPurple" }, + NavicIconsConstructor = { link = "GruvboxBlue" }, + NavicIconsEnum = { link = "GruvboxPurple" }, + NavicIconsInterface = { link = "GruvboxGreen" }, + NavicIconsFunction = { link = "GruvboxBlue" }, + NavicIconsVariable = { link = "GruvboxPurple" }, + NavicIconsConstant = { link = "GruvboxOrange" }, + NavicIconsString = { link = "GruvboxGreen" }, + NavicIconsNumber = { link = "GruvboxOrange" }, + NavicIconsBoolean = { link = "GruvboxOrange" }, + NavicIconsArray = { link = "GruvboxOrange" }, + NavicIconsObject = { link = "GruvboxOrange" }, + NavicIconsKey = { link = "GruvboxAqua" }, + NavicIconsNull = { link = "GruvboxOrange" }, + NavicIconsEnumMember = { link = "GruvboxYellow" }, + NavicIconsStruct = { link = "GruvboxPurple" }, + NavicIconsEvent = { link = "GruvboxYellow" }, + NavicIconsOperator = { link = "GruvboxRed" }, + NavicIconsTypeParameter = { link = "GruvboxRed" }, + NavicText = { link = "GruvboxWhite" }, + NavicSeparator = { link = "GruvboxWhite" }, + htmlTag = { link = "GruvboxAquaBold" }, + htmlEndTag = { link = "GruvboxAquaBold" }, + htmlTagName = { link = "GruvboxBlue" }, + htmlArg = { link = "GruvboxOrange" }, + htmlTagN = { link = "GruvboxFg1" }, + htmlSpecialTagName = { link = "GruvboxBlue" }, + htmlLink = { fg = colors.fg4, underline = config.underline }, + htmlSpecialChar = { link = "GruvboxRed" }, + htmlBold = { fg = colors.fg0, bg = colors.bg0, bold = config.bold }, + htmlBoldUnderline = { fg = colors.fg0, bg = colors.bg0, bold = config.bold, underline = config.underline }, + htmlBoldItalic = { fg = colors.fg0, bg = colors.bg0, bold = config.bold, italic = true }, + htmlBoldUnderlineItalic = { + fg = colors.fg0, + bg = colors.bg0, + bold = config.bold, + italic = true, + underline = config.underline, + }, + htmlUnderline = { fg = colors.fg0, bg = colors.bg0, underline = config.underline }, + htmlUnderlineItalic = { + fg = colors.fg0, + bg = colors.bg0, + italic = true, + underline = config.underline, + }, + htmlItalic = { fg = colors.fg0, bg = colors.bg0, italic = true }, + xmlTag = { link = "GruvboxAquaBold" }, + xmlEndTag = { link = "GruvboxAquaBold" }, + xmlTagName = { link = "GruvboxBlue" }, + xmlEqual = { link = "GruvboxBlue" }, + docbkKeyword = { link = "GruvboxAquaBold" }, + xmlDocTypeDecl = { link = "GruvboxGray" }, + xmlDocTypeKeyword = { link = "GruvboxPurple" }, + xmlCdataStart = { link = "GruvboxGray" }, + xmlCdataCdata = { link = "GruvboxPurple" }, + dtdFunction = { link = "GruvboxGray" }, + dtdTagName = { link = "GruvboxPurple" }, + xmlAttrib = { link = "GruvboxOrange" }, + xmlProcessingDelim = { link = "GruvboxGray" }, + dtdParamEntityPunct = { link = "GruvboxGray" }, + dtdParamEntityDPunct = { link = "GruvboxGray" }, + xmlAttribPunct = { link = "GruvboxGray" }, + xmlEntity = { link = "GruvboxRed" }, + xmlEntityPunct = { link = "GruvboxRed" }, + clojureKeyword = { link = "GruvboxBlue" }, + clojureCond = { link = "GruvboxOrange" }, + clojureSpecial = { link = "GruvboxOrange" }, + clojureDefine = { link = "GruvboxOrange" }, + clojureFunc = { link = "GruvboxYellow" }, + clojureRepeat = { link = "GruvboxYellow" }, + clojureCharacter = { link = "GruvboxAqua" }, + clojureStringEscape = { link = "GruvboxAqua" }, + clojureException = { link = "GruvboxRed" }, + clojureRegexp = { link = "GruvboxAqua" }, + clojureRegexpEscape = { link = "GruvboxAqua" }, + clojureRegexpCharClass = { fg = colors.fg3, bold = config.bold }, + clojureRegexpMod = { link = "clojureRegexpCharClass" }, + clojureRegexpQuantifier = { link = "clojureRegexpCharClass" }, + clojureParen = { link = "GruvboxFg3" }, + clojureAnonArg = { link = "GruvboxYellow" }, + clojureVariable = { link = "GruvboxBlue" }, + clojureMacro = { link = "GruvboxOrange" }, + clojureMeta = { link = "GruvboxYellow" }, + clojureDeref = { link = "GruvboxYellow" }, + clojureQuote = { link = "GruvboxYellow" }, + clojureUnquote = { link = "GruvboxYellow" }, + cOperator = { link = "GruvboxPurple" }, + cppOperator = { link = "GruvboxPurple" }, + cStructure = { link = "GruvboxOrange" }, + pythonBuiltin = { link = "GruvboxOrange" }, + pythonBuiltinObj = { link = "GruvboxOrange" }, + pythonBuiltinFunc = { link = "GruvboxOrange" }, + pythonFunction = { link = "GruvboxAqua" }, + pythonDecorator = { link = "GruvboxRed" }, + pythonInclude = { link = "GruvboxBlue" }, + pythonImport = { link = "GruvboxBlue" }, + pythonRun = { link = "GruvboxBlue" }, + pythonCoding = { link = "GruvboxBlue" }, + pythonOperator = { link = "GruvboxRed" }, + pythonException = { link = "GruvboxRed" }, + pythonExceptions = { link = "GruvboxPurple" }, + pythonBoolean = { link = "GruvboxPurple" }, + pythonDot = { link = "GruvboxFg3" }, + pythonConditional = { link = "GruvboxRed" }, + pythonRepeat = { link = "GruvboxRed" }, + pythonDottedName = { link = "GruvboxGreenBold" }, + cssBraces = { link = "GruvboxBlue" }, + cssFunctionName = { link = "GruvboxYellow" }, + cssIdentifier = { link = "GruvboxOrange" }, + cssClassName = { link = "GruvboxGreen" }, + cssColor = { link = "GruvboxBlue" }, + cssSelectorOp = { link = "GruvboxBlue" }, + cssSelectorOp2 = { link = "GruvboxBlue" }, + cssImportant = { link = "GruvboxGreen" }, + cssVendor = { link = "GruvboxFg1" }, + cssTextProp = { link = "GruvboxAqua" }, + cssAnimationProp = { link = "GruvboxAqua" }, + cssUIProp = { link = "GruvboxYellow" }, + cssTransformProp = { link = "GruvboxAqua" }, + cssTransitionProp = { link = "GruvboxAqua" }, + cssPrintProp = { link = "GruvboxAqua" }, + cssPositioningProp = { link = "GruvboxYellow" }, + cssBoxProp = { link = "GruvboxAqua" }, + cssFontDescriptorProp = { link = "GruvboxAqua" }, + cssFlexibleBoxProp = { link = "GruvboxAqua" }, + cssBorderOutlineProp = { link = "GruvboxAqua" }, + cssBackgroundProp = { link = "GruvboxAqua" }, + cssMarginProp = { link = "GruvboxAqua" }, + cssListProp = { link = "GruvboxAqua" }, + cssTableProp = { link = "GruvboxAqua" }, + cssFontProp = { link = "GruvboxAqua" }, + cssPaddingProp = { link = "GruvboxAqua" }, + cssDimensionProp = { link = "GruvboxAqua" }, + cssRenderProp = { link = "GruvboxAqua" }, + cssColorProp = { link = "GruvboxAqua" }, + cssGeneratedContentProp = { link = "GruvboxAqua" }, + javaScriptBraces = { link = "GruvboxFg1" }, + javaScriptFunction = { link = "GruvboxAqua" }, + javaScriptIdentifier = { link = "GruvboxRed" }, + javaScriptMember = { link = "GruvboxBlue" }, + javaScriptNumber = { link = "GruvboxPurple" }, + javaScriptNull = { link = "GruvboxPurple" }, + javaScriptParens = { link = "GruvboxFg3" }, + typescriptReserved = { link = "GruvboxAqua" }, + typescriptLabel = { link = "GruvboxAqua" }, + typescriptFuncKeyword = { link = "GruvboxAqua" }, + typescriptIdentifier = { link = "GruvboxOrange" }, + typescriptBraces = { link = "GruvboxFg1" }, + typescriptEndColons = { link = "GruvboxFg1" }, + typescriptDOMObjects = { link = "GruvboxFg1" }, + typescriptAjaxMethods = { link = "GruvboxFg1" }, + typescriptLogicSymbols = { link = "GruvboxFg1" }, + typescriptDocSeeTag = { link = "Comment" }, + typescriptDocParam = { link = "Comment" }, + typescriptDocTags = { link = "vimCommentTitle" }, + typescriptGlobalObjects = { link = "GruvboxFg1" }, + typescriptParens = { link = "GruvboxFg3" }, + typescriptOpSymbols = { link = "GruvboxFg3" }, + typescriptHtmlElemProperties = { link = "GruvboxFg1" }, + typescriptNull = { link = "GruvboxPurple" }, + typescriptInterpolationDelimiter = { link = "GruvboxAqua" }, + purescriptModuleKeyword = { link = "GruvboxAqua" }, + purescriptModuleName = { link = "GruvboxFg1" }, + purescriptWhere = { link = "GruvboxAqua" }, + purescriptDelimiter = { link = "GruvboxFg4" }, + purescriptType = { link = "GruvboxFg1" }, + purescriptImportKeyword = { link = "GruvboxAqua" }, + purescriptHidingKeyword = { link = "GruvboxAqua" }, + purescriptAsKeyword = { link = "GruvboxAqua" }, + purescriptStructure = { link = "GruvboxAqua" }, + purescriptOperator = { link = "GruvboxBlue" }, + purescriptTypeVar = { link = "GruvboxFg1" }, + purescriptConstructor = { link = "GruvboxFg1" }, + purescriptFunction = { link = "GruvboxFg1" }, + purescriptConditional = { link = "GruvboxOrange" }, + purescriptBacktick = { link = "GruvboxOrange" }, + coffeeExtendedOp = { link = "GruvboxFg3" }, + coffeeSpecialOp = { link = "GruvboxFg3" }, + coffeeCurly = { link = "GruvboxOrange" }, + coffeeParen = { link = "GruvboxFg3" }, + coffeeBracket = { link = "GruvboxOrange" }, + rubyStringDelimiter = { link = "GruvboxGreen" }, + rubyInterpolationDelimiter = { link = "GruvboxAqua" }, + rubyDefinedOperator = { link = "rubyKeyword" }, + objcTypeModifier = { link = "GruvboxRed" }, + objcDirective = { link = "GruvboxBlue" }, + goDirective = { link = "GruvboxAqua" }, + goConstants = { link = "GruvboxPurple" }, + goDeclaration = { link = "GruvboxRed" }, + goDeclType = { link = "GruvboxBlue" }, + goBuiltins = { link = "GruvboxOrange" }, + luaIn = { link = "GruvboxRed" }, + luaFunction = { link = "GruvboxAqua" }, + luaTable = { link = "GruvboxOrange" }, + moonSpecialOp = { link = "GruvboxFg3" }, + moonExtendedOp = { link = "GruvboxFg3" }, + moonFunction = { link = "GruvboxFg3" }, + moonObject = { link = "GruvboxYellow" }, + javaAnnotation = { link = "GruvboxBlue" }, + javaDocTags = { link = "GruvboxAqua" }, + javaCommentTitle = { link = "vimCommentTitle" }, + javaParen = { link = "GruvboxFg3" }, + javaParen1 = { link = "GruvboxFg3" }, + javaParen2 = { link = "GruvboxFg3" }, + javaParen3 = { link = "GruvboxFg3" }, + javaParen4 = { link = "GruvboxFg3" }, + javaParen5 = { link = "GruvboxFg3" }, + javaOperator = { link = "GruvboxOrange" }, + javaVarArg = { link = "GruvboxGreen" }, + elixirDocString = { link = "Comment" }, + elixirStringDelimiter = { link = "GruvboxGreen" }, + elixirInterpolationDelimiter = { link = "GruvboxAqua" }, + elixirModuleDeclaration = { link = "GruvboxYellow" }, + scalaNameDefinition = { link = "GruvboxFg1" }, + scalaCaseFollowing = { link = "GruvboxFg1" }, + scalaCapitalWord = { link = "GruvboxFg1" }, + scalaTypeExtension = { link = "GruvboxFg1" }, + scalaKeyword = { link = "GruvboxRed" }, + scalaKeywordModifier = { link = "GruvboxRed" }, + scalaSpecial = { link = "GruvboxAqua" }, + scalaOperator = { link = "GruvboxFg1" }, + scalaTypeDeclaration = { link = "GruvboxYellow" }, + scalaTypeTypePostDeclaration = { link = "GruvboxYellow" }, + scalaInstanceDeclaration = { link = "GruvboxFg1" }, + scalaInterpolation = { link = "GruvboxAqua" }, + markdownItalic = { fg = colors.fg3, italic = true }, + markdownBold = { fg = colors.fg3, bold = config.bold }, + markdownBoldItalic = { fg = colors.fg3, bold = config.bold, italic = true }, + markdownH1 = { link = "GruvboxGreenBold" }, + markdownH2 = { link = "GruvboxGreenBold" }, + markdownH3 = { link = "GruvboxYellowBold" }, + markdownH4 = { link = "GruvboxYellowBold" }, + markdownH5 = { link = "GruvboxYellow" }, + markdownH6 = { link = "GruvboxYellow" }, + markdownCode = { link = "GruvboxAqua" }, + markdownCodeBlock = { link = "GruvboxAqua" }, + markdownCodeDelimiter = { link = "GruvboxAqua" }, + markdownBlockquote = { link = "GruvboxGray" }, + markdownListMarker = { link = "GruvboxGray" }, + markdownOrderedListMarker = { link = "GruvboxGray" }, + markdownRule = { link = "GruvboxGray" }, + markdownHeadingRule = { link = "GruvboxGray" }, + markdownUrlDelimiter = { link = "GruvboxFg3" }, + markdownLinkDelimiter = { link = "GruvboxFg3" }, + markdownLinkTextDelimiter = { link = "GruvboxFg3" }, + markdownHeadingDelimiter = { link = "GruvboxOrange" }, + markdownUrl = { link = "GruvboxPurple" }, + markdownUrlTitleDelimiter = { link = "GruvboxGreen" }, + markdownLinkText = { fg = colors.gray, underline = config.underline }, + markdownIdDeclaration = { link = "markdownLinkText" }, + haskellType = { link = "GruvboxBlue" }, + haskellIdentifier = { link = "GruvboxAqua" }, + haskellSeparator = { link = "GruvboxFg4" }, + haskellDelimiter = { link = "GruvboxOrange" }, + haskellOperators = { link = "GruvboxPurple" }, + haskellBacktick = { link = "GruvboxOrange" }, + haskellStatement = { link = "GruvboxPurple" }, + haskellConditional = { link = "GruvboxPurple" }, + haskellLet = { link = "GruvboxRed" }, + haskellDefault = { link = "GruvboxRed" }, + haskellWhere = { link = "GruvboxRed" }, + haskellBottom = { link = "GruvboxRedBold" }, + haskellImportKeywords = { link = "GruvboxPurpleBold" }, + haskellDeclKeyword = { link = "GruvboxOrange" }, + haskellDecl = { link = "GruvboxOrange" }, + haskellDeriving = { link = "GruvboxPurple" }, + haskellAssocType = { link = "GruvboxAqua" }, + haskellNumber = { link = "GruvboxAqua" }, + haskellPragma = { link = "GruvboxRedBold" }, + haskellTH = { link = "GruvboxAquaBold" }, + haskellForeignKeywords = { link = "GruvboxGreen" }, + haskellKeyword = { link = "GruvboxRed" }, + haskellFloat = { link = "GruvboxAqua" }, + haskellInfix = { link = "GruvboxPurple" }, + haskellQuote = { link = "GruvboxGreenBold" }, + haskellShebang = { link = "GruvboxYellowBold" }, + haskellLiquid = { link = "GruvboxPurpleBold" }, + haskellQuasiQuoted = { link = "GruvboxBlueBold" }, + haskellRecursiveDo = { link = "GruvboxPurple" }, + haskellQuotedType = { link = "GruvboxRed" }, + haskellPreProc = { link = "GruvboxFg4" }, + haskellTypeRoles = { link = "GruvboxRedBold" }, + haskellTypeForall = { link = "GruvboxRed" }, + haskellPatternKeyword = { link = "GruvboxBlue" }, + jsonKeyword = { link = "GruvboxGreen" }, + jsonQuote = { link = "GruvboxGreen" }, + jsonBraces = { link = "GruvboxFg1" }, + jsonString = { link = "GruvboxFg1" }, + mailQuoted1 = { link = "GruvboxAqua" }, + mailQuoted2 = { link = "GruvboxPurple" }, + mailQuoted3 = { link = "GruvboxYellow" }, + mailQuoted4 = { link = "GruvboxGreen" }, + mailQuoted5 = { link = "GruvboxRed" }, + mailQuoted6 = { link = "GruvboxOrange" }, + mailSignature = { link = "Comment" }, + csBraces = { link = "GruvboxFg1" }, + csEndColon = { link = "GruvboxFg1" }, + csLogicSymbols = { link = "GruvboxFg1" }, + csParens = { link = "GruvboxFg3" }, + csOpSymbols = { link = "GruvboxFg3" }, + csInterpolationDelimiter = { link = "GruvboxFg3" }, + csInterpolationAlignDel = { link = "GruvboxAquaBold" }, + csInterpolationFormat = { link = "GruvboxAqua" }, + csInterpolationFormatDel = { link = "GruvboxAquaBold" }, + rustSigil = { link = "GruvboxOrange" }, + rustEscape = { link = "GruvboxAqua" }, + rustStringContinuation = { link = "GruvboxAqua" }, + rustEnum = { link = "GruvboxAqua" }, + rustStructure = { link = "GruvboxAqua" }, + rustModPathSep = { link = "GruvboxFg2" }, + rustCommentLineDoc = { link = "Comment" }, + rustDefault = { link = "GruvboxAqua" }, + ocamlOperator = { link = "GruvboxFg1" }, + ocamlKeyChar = { link = "GruvboxOrange" }, + ocamlArrow = { link = "GruvboxOrange" }, + ocamlInfixOpKeyword = { link = "GruvboxRed" }, + ocamlConstructor = { link = "GruvboxOrange" }, + LspSagaCodeActionTitle = { link = "Title" }, + LspSagaCodeActionBorder = { link = "GruvboxFg1" }, + LspSagaCodeActionContent = { fg = colors.green, bold = config.bold }, + LspSagaLspFinderBorder = { link = "GruvboxFg1" }, + LspSagaAutoPreview = { link = "GruvboxOrange" }, + TargetWord = { fg = colors.blue, bold = config.bold }, + FinderSeparator = { link = "GruvboxAqua" }, + LspSagaDefPreviewBorder = { link = "GruvboxBlue" }, + LspSagaHoverBorder = { link = "GruvboxOrange" }, + LspSagaRenameBorder = { link = "GruvboxBlue" }, + LspSagaDiagnosticSource = { link = "GruvboxOrange" }, + LspSagaDiagnosticBorder = { link = "GruvboxPurple" }, + LspSagaDiagnosticHeader = { link = "GruvboxGreen" }, + LspSagaSignatureHelpBorder = { link = "GruvboxGreen" }, + SagaShadow = { link = "GruvboxBg0" }, + DashboardShortCut = { link = "GruvboxOrange" }, + DashboardHeader = { link = "GruvboxAqua" }, + DashboardCenter = { link = "GruvboxYellow" }, + DashboardFooter = { fg = colors.purple, italic = true }, + MasonHighlight = { link = "GruvboxAqua" }, + MasonHighlightBlock = { fg = colors.bg0, bg = colors.blue }, + MasonHighlightBlockBold = { fg = colors.bg0, bg = colors.blue, bold = true }, + MasonHighlightSecondary = { fg = colors.yellow }, + MasonHighlightBlockSecondary = { fg = colors.bg0, bg = colors.yellow }, + MasonHighlightBlockBoldSecondary = { fg = colors.bg0, bg = colors.yellow, bold = true }, + MasonHeader = { link = "MasonHighlightBlockBoldSecondary" }, + MasonHeaderSecondary = { link = "MasonHighlightBlockBold" }, + MasonMuted = { fg = colors.fg4 }, + MasonMutedBlock = { fg = colors.bg0, bg = colors.fg4 }, + MasonMutedBlockBold = { fg = colors.bg0, bg = colors.fg4, bold = true }, + LspInlayHint = { link = "comment" }, + CarbonFile = { link = "GruvboxFg1" }, + CarbonExe = { link = "GruvboxYellow" }, + CarbonSymlink = { link = "GruvboxAqua" }, + CarbonBrokenSymlink = { link = "GruvboxRed" }, + CarbonIndicator = { link = "GruvboxGray" }, + CarbonDanger = { link = "GruvboxRed" }, + CarbonPending = { link = "GruvboxYellow" }, + NoiceCursor = { link = "TermCursor" }, + NoiceCmdlinePopupBorder = { fg = colors.blue, bg = nil }, + NoiceCmdlineIcon = { link = "NoiceCmdlinePopupBorder" }, + NoiceConfirmBorder = { link = "NoiceCmdlinePopupBorder" }, + NoiceCmdlinePopupBorderSearch = { fg = colors.yellow, bg = nil }, + NoiceCmdlineIconSearch = { link = "NoiceCmdlinePopupBorderSearch" }, + NotifyDEBUGBorder = { link = "GruvboxBlue" }, + NotifyDEBUGIcon = { link = "GruvboxBlue" }, + NotifyDEBUGTitle = { link = "GruvboxBlue" }, + NotifyERRORBorder = { link = "GruvboxRed" }, + NotifyERRORIcon = { link = "GruvboxRed" }, + NotifyERRORTitle = { link = "GruvboxRed" }, + NotifyINFOBorder = { link = "GruvboxAqua" }, + NotifyINFOIcon = { link = "GruvboxAqua" }, + NotifyINFOTitle = { link = "GruvboxAqua" }, + NotifyTRACEBorder = { link = "GruvboxGreen" }, + NotifyTRACEIcon = { link = "GruvboxGreen" }, + NotifyTRACETitle = { link = "GruvboxGreen" }, + NotifyWARNBorder = { link = "GruvboxYellow" }, + NotifyWARNIcon = { link = "GruvboxYellow" }, + NotifyWARNTitle = { link = "GruvboxYellow" }, + IlluminatedWordText = { link = "LspReferenceText" }, + IlluminatedWordRead = { link = "LspReferenceRead" }, + IlluminatedWordWrite = { link = "LspReferenceWrite" }, + TSRainbowRed = { fg = colors.red }, + TSRainbowOrange = { fg = colors.orange }, + TSRainbowYellow = { fg = colors.yellow }, + TSRainbowGreen = { fg = colors.green }, + TSRainbowBlue = { fg = colors.blue }, + TSRainbowViolet = { fg = colors.purple }, + TSRainbowCyan = { fg = colors.aqua }, + RainbowDelimiterRed = { fg = colors.red }, + RainbowDelimiterOrange = { fg = colors.orange }, + RainbowDelimiterYellow = { fg = colors.yellow }, + RainbowDelimiterGreen = { fg = colors.green }, + RainbowDelimiterBlue = { fg = colors.blue }, + RainbowDelimiterViolet = { fg = colors.purple }, + RainbowDelimiterCyan = { fg = colors.aqua }, + DapBreakpointSymbol = { fg = colors.red, bg = colors.bg1 }, + DapStoppedSymbol = { fg = colors.green, bg = colors.bg1 }, + DapUIBreakpointsCurrentLine = { link = "GruvboxYellow" }, + DapUIBreakpointsDisabledLine = { link = "GruvboxGray" }, + DapUIBreakpointsInfo = { link = "GruvboxAqua" }, + DapUIBreakpointsLine = { link = "GruvboxYellow" }, + DapUIBreakpointsPath = { link = "GruvboxBlue" }, + DapUICurrentFrameName = { link = "GruvboxPurple" }, + DapUIDecoration = { link = "GruvboxPurple" }, + DapUIEndofBuffer = { link = "EndOfBuffer" }, + DapUIFloatBorder = { link = "GruvboxAqua" }, + DapUILineNumber = { link = "GruvboxYellow" }, + DapUIModifiedValue = { link = "GruvboxRed" }, + DapUIPlayPause = { fg = colors.green, bg = colors.bg1 }, + DapUIRestart = { fg = colors.green, bg = colors.bg1 }, + DapUIScope = { link = "GruvboxBlue" }, + DapUISource = { link = "GruvboxFg1" }, + DapUIStepBack = { fg = colors.blue, bg = colors.bg1 }, + DapUIStepInto = { fg = colors.blue, bg = colors.bg1 }, + DapUIStepOut = { fg = colors.blue, bg = colors.bg1 }, + DapUIStepOver = { fg = colors.blue, bg = colors.bg1 }, + DapUIStop = { fg = colors.red, bg = colors.bg1 }, + DapUIStoppedThread = { link = "GruvboxBlue" }, + DapUIThread = { link = "GruvboxBlue" }, + DapUIType = { link = "GruvboxOrange" }, + DapUIUnavailable = { link = "GruvboxGray" }, + DapUIWatchesEmpty = { link = "GruvboxGray" }, + DapUIWatchesError = { link = "GruvboxRed" }, + DapUIWatchesValue = { link = "GruvboxYellow" }, + DapUIWinSelect = { link = "GruvboxYellow" }, + NeogitDiffDelete = { link = "DiffDelete" }, + NeogitDiffAdd = { link = "DiffAdd" }, + NeogitHunkHeader = { link = "WinBar" }, + NeogitHunkHeaderHighlight = { link = "WinBarNC" }, + DiffviewStatusModified = { link = "GruvboxGreenBold" }, + DiffviewFilePanelInsertions = { link = "GruvboxGreenBold" }, + DiffviewFilePanelDeletions = { link = "GruvboxRedBold" }, + MiniAnimateCursor = { reverse = true, nocombine = true }, + MiniAnimateNormalFloat = { fg = colors.fg1, bg = colors.bg1 }, + 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 = "GruvboxGreen" }, + MiniDepsChangeRemoved = { link = "GruvboxRed" }, + MiniDepsHint = { link = "DiagnosticHint" }, + MiniDepsInfo = { link = "DiagnosticInfo" }, + MiniDepsMsgBreaking = { link = "DiagnosticWarn" }, + MiniDepsPlaceholder = { link = "Comment" }, + MiniDepsTitle = { link = "Title" }, + MiniDepsTitleError = { link = "DiffDelete" }, + MiniDepsTitleSame = { link = "DiffChange" }, + MiniDepsTitleUpdate = { link = "DiffAdd" }, + MiniDiffOverAdd = { link = "DiffAdd" }, + MiniDiffOverChange = { link = "DiffText" }, + MiniDiffOverContext = { link = "DiffChange" }, + MiniDiffOverDelete = { link = "DiffDelete" }, + MiniDiffSignAdd = { link = "GruvboxGreen" }, + MiniDiffSignChange = { link = "GruvboxAqua" }, + MiniDiffSignDelete = { link = "GruvboxRed" }, + MiniFilesBorder = { link = "FloatBorder" }, + MiniFilesBorderModified = { link = "DiagnosticFloatingWarn" }, + MiniFilesCursorLine = { bg = colors.bg2 }, + MiniFilesDirectory = { link = "Directory" }, + MiniFilesFile = { link = "GruvboxFg1" }, + MiniFilesNormal = { link = "NormalFloat" }, + MiniFilesTitle = { link = "FloatTitle" }, + MiniFilesTitleFocused = { link = "GruvboxOrangeBold" }, + MiniHipatternsFixme = { fg = colors.bg0, bg = colors.red, bold = config.bold }, + MiniHipatternsHack = { fg = colors.bg0, bg = colors.yellow, bold = config.bold }, + MiniHipatternsNote = { fg = colors.bg0, bg = colors.blue, bold = config.bold }, + MiniHipatternsTodo = { fg = colors.bg0, bg = colors.aqua, bold = config.bold }, + MiniIconsAzure = { link = "GruvboxBlue" }, + MiniIconsBlue = { link = "GruvboxBlue" }, + MiniIconsCyan = { link = "GruvboxAqua" }, + MiniIconsGreen = { link = "GruvboxGreen" }, + MiniIconsGrey = { link = "GruvboxFg0" }, + MiniIconsOrange = { link = "GruvboxOrange" }, + MiniIconsPurple = { link = "GruvboxPurple" }, + MiniIconsRed = { link = "GruvboxRed" }, + MiniIconsYellow = { link = "GruvboxYellow" }, + MiniIndentscopeSymbol = { link = "GruvboxGray" }, + MiniIndentscopeSymbolOff = { link = "GruvboxYellow" }, + MiniJump = { link = "GruvboxOrangeUnderline" }, + MiniJump2dDim = { link = "GruvboxGray" }, + MiniJump2dSpot = { fg = colors.orange, bold = config.bold, nocombine = true }, + MiniJump2dSpotAhead = { fg = colors.aqua, bg = colors.bg0, nocombine = true }, + MiniJump2dSpotUnique = { fg = colors.yellow, bold = config.bold, 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 = { bg = colors.bg2 }, + MiniPickMatchMarked = { link = "Visual" }, + MiniPickMatchRanges = { link = "DiagnosticFloatingHint" }, + MiniPickNormal = { link = "NormalFloat" }, + MiniPickPreviewLine = { link = "CursorLine" }, + MiniPickPreviewRegion = { link = "IncSearch" }, + MiniPickPrompt = { link = "DiagnosticFloatingInfo" }, + MiniStarterCurrent = { nocombine = true }, + MiniStarterFooter = { link = "GruvboxGray" }, + MiniStarterHeader = { link = "Title" }, + MiniStarterInactive = { link = "Comment" }, + MiniStarterItem = { link = "Normal" }, + MiniStarterItemBullet = { link = "Delimiter" }, + MiniStarterItemPrefix = { link = "WarningMsg" }, + MiniStarterSection = { link = "Delimiter" }, + MiniStarterQuery = { link = "MoreMsg" }, + MiniStatuslineDevinfo = { link = "StatusLine" }, + MiniStatuslineFileinfo = { link = "StatusLine" }, + MiniStatuslineFilename = { link = "StatusLineNC" }, + MiniStatuslineInactive = { link = "StatusLineNC" }, + MiniStatuslineModeCommand = { fg = colors.bg0, bg = colors.yellow, bold = config.bold, nocombine = true }, + MiniStatuslineModeInsert = { fg = colors.bg0, bg = colors.blue, bold = config.bold, nocombine = true }, + MiniStatuslineModeNormal = { fg = colors.bg0, bg = colors.fg1, bold = config.bold, nocombine = true }, + MiniStatuslineModeOther = { fg = colors.bg0, bg = colors.aqua, bold = config.bold, nocombine = true }, + MiniStatuslineModeReplace = { fg = colors.bg0, bg = colors.red, bold = config.bold, nocombine = true }, + MiniStatuslineModeVisual = { fg = colors.bg0, bg = colors.green, bold = config.bold, nocombine = true }, + MiniSurround = { link = "IncSearch" }, + MiniTablineCurrent = { fg = colors.green, bg = colors.bg1, bold = config.bold, reverse = config.invert_tabline }, + MiniTablineFill = { link = "TabLineFill" }, + MiniTablineHidden = { fg = colors.bg4, bg = colors.bg1, reverse = config.invert_tabline }, + MiniTablineModifiedCurrent = { + fg = colors.bg1, + bg = colors.green, + bold = config.bold, + reverse = config.invert_tabline, + }, + MiniTablineModifiedHidden = { fg = colors.bg1, bg = colors.bg4, reverse = config.invert_tabline }, + MiniTablineModifiedVisible = { fg = colors.bg1, bg = colors.fg1, reverse = config.invert_tabline }, + MiniTablineTabpagesection = { link = "Search" }, + MiniTablineVisible = { fg = colors.fg1, bg = colors.bg1, reverse = config.invert_tabline }, + MiniTestEmphasis = { bold = config.bold }, + MiniTestFail = { link = "GruvboxRedBold" }, + MiniTestPass = { link = "GruvboxGreenBold" }, + MiniTrailspace = { bg = colors.red }, + WhichKeyTitle = { link = "NormalFloat" }, + NeoTreeFloatBorder = { link = "GruvboxGray" }, + NeoTreeTitleBar = { fg = colors.fg1, bg = colors.bg2 }, + NeoTreeDirectoryIcon = { link = "GruvboxGreen" }, + NeoTreeDirectoryName = { link = "GruvboxGreenBold" }, + ["@comment"] = { link = "Comment" }, + ["@none"] = { bg = "NONE", fg = "NONE" }, + ["@preproc"] = { link = "PreProc" }, + ["@define"] = { link = "Define" }, + ["@operator"] = { link = "Operator" }, + ["@punctuation.delimiter"] = { link = "Delimiter" }, + ["@punctuation.bracket"] = { link = "Delimiter" }, + ["@punctuation.special"] = { link = "Delimiter" }, + ["@string"] = { link = "String" }, + ["@string.regex"] = { link = "String" }, + ["@string.regexp"] = { link = "String" }, + ["@string.escape"] = { link = "SpecialChar" }, + ["@string.special"] = { link = "SpecialChar" }, + ["@string.special.path"] = { link = "Underlined" }, + ["@string.special.symbol"] = { link = "Identifier" }, + ["@string.special.url"] = { link = "Underlined" }, + ["@character"] = { link = "Character" }, + ["@character.special"] = { link = "SpecialChar" }, + ["@boolean"] = { link = "Boolean" }, + ["@number"] = { link = "Number" }, + ["@number.float"] = { link = "Float" }, + ["@float"] = { link = "Float" }, + ["@function"] = { link = "Function" }, + ["@function.builtin"] = { link = "Special" }, + ["@function.call"] = { link = "Function" }, + ["@function.macro"] = { link = "Macro" }, + ["@function.method"] = { link = "Function" }, + ["@method"] = { link = "Function" }, + ["@method.call"] = { link = "Function" }, + ["@constructor"] = { link = "Special" }, + ["@parameter"] = { link = "Identifier" }, + ["@keyword"] = { link = "Keyword" }, + ["@keyword.conditional"] = { link = "Conditional" }, + ["@keyword.debug"] = { link = "Debug" }, + ["@keyword.directive"] = { link = "PreProc" }, + ["@keyword.directive.define"] = { link = "Define" }, + ["@keyword.exception"] = { link = "Exception" }, + ["@keyword.function"] = { link = "Keyword" }, + ["@keyword.import"] = { link = "Include" }, + ["@keyword.operator"] = { link = "GruvboxRed" }, + ["@keyword.repeat"] = { link = "Repeat" }, + ["@keyword.return"] = { link = "Keyword" }, + ["@keyword.storage"] = { link = "StorageClass" }, + ["@conditional"] = { link = "Conditional" }, + ["@repeat"] = { link = "Repeat" }, + ["@debug"] = { link = "Debug" }, + ["@label"] = { link = "Label" }, + ["@include"] = { link = "Include" }, + ["@exception"] = { link = "Exception" }, + ["@type"] = { link = "Type" }, + ["@type.builtin"] = { link = "Type" }, + ["@type.definition"] = { link = "Typedef" }, + ["@type.qualifier"] = { link = "Type" }, + ["@storageclass"] = { link = "StorageClass" }, + ["@attribute"] = { link = "PreProc" }, + ["@field"] = { link = "Identifier" }, + ["@property"] = { link = "Identifier" }, + ["@variable"] = { link = "GruvboxFg1" }, + ["@variable.builtin"] = { link = "Special" }, + ["@variable.member"] = { link = "Identifier" }, + ["@variable.parameter"] = { link = "Identifier" }, + ["@constant"] = { link = "Constant" }, + ["@constant.builtin"] = { link = "Special" }, + ["@constant.macro"] = { link = "Define" }, + ["@markup"] = { link = "GruvboxFg1" }, + ["@markup.strong"] = { bold = config.bold }, + ["@markup.italic"] = { link = "@text.emphasis" }, + ["@markup.underline"] = { underline = config.underline }, + ["@markup.strikethrough"] = { strikethrough = config.strikethrough }, + ["@markup.heading"] = { link = "Title" }, + ["@markup.raw"] = { link = "String" }, + ["@markup.math"] = { link = "Special" }, + ["@markup.environment"] = { link = "Macro" }, + ["@markup.environment.name"] = { link = "Type" }, + ["@markup.link"] = { link = "Underlined" }, + ["@markup.link.label"] = { link = "SpecialChar" }, + ["@markup.list"] = { link = "Delimiter" }, + ["@markup.list.checked"] = { link = "GruvboxGreen" }, + ["@markup.list.unchecked"] = { link = "GruvboxGray" }, + ["@comment.todo"] = { link = "Todo" }, + ["@comment.note"] = { link = "SpecialComment" }, + ["@comment.warning"] = { link = "WarningMsg" }, + ["@comment.error"] = { link = "ErrorMsg" }, + ["@diff.plus"] = { link = "diffAdded" }, + ["@diff.minus"] = { link = "diffRemoved" }, + ["@diff.delta"] = { link = "diffChanged" }, + ["@module"] = { link = "GruvboxFg1" }, + ["@namespace"] = { link = "GruvboxFg1" }, + ["@symbol"] = { link = "Identifier" }, + ["@text"] = { link = "GruvboxFg1" }, + ["@text.strong"] = { bold = config.bold }, + ["@text.emphasis"] = { italic = config.italic.emphasis }, + ["@text.underline"] = { underline = config.underline }, + ["@text.strike"] = { strikethrough = config.strikethrough }, + ["@text.title"] = { link = "Title" }, + ["@text.literal"] = { link = "String" }, + ["@text.uri"] = { link = "Underlined" }, + ["@text.math"] = { link = "Special" }, + ["@text.environment"] = { link = "Macro" }, + ["@text.environment.name"] = { link = "Type" }, + ["@text.reference"] = { link = "Constant" }, + ["@text.todo"] = { link = "Todo" }, + ["@text.todo.checked"] = { link = "GruvboxGreen" }, + ["@text.todo.unchecked"] = { link = "GruvboxGray" }, + ["@text.note"] = { link = "SpecialComment" }, + ["@text.note.comment"] = { fg = colors.purple, bold = config.bold }, + ["@text.warning"] = { link = "WarningMsg" }, + ["@text.danger"] = { link = "ErrorMsg" }, + ["@text.danger.comment"] = { fg = colors.fg0, bg = colors.red, bold = config.bold }, + ["@text.diff.add"] = { link = "diffAdded" }, + ["@text.diff.delete"] = { link = "diffRemoved" }, + ["@tag"] = { link = "Tag" }, + ["@tag.attribute"] = { link = "Identifier" }, + ["@tag.delimiter"] = { link = "Delimiter" }, + ["@punctuation"] = { link = "Delimiter" }, + ["@macro"] = { link = "Macro" }, + ["@structure"] = { link = "Structure" }, + ["@lsp.type.class"] = { link = "@type" }, + ["@lsp.type.comment"] = { link = "@comment" }, + ["@lsp.type.decorator"] = { link = "@macro" }, + ["@lsp.type.enum"] = { link = "@type" }, + ["@lsp.type.enumMember"] = { link = "@constant" }, + ["@lsp.type.function"] = { link = "@function" }, + ["@lsp.type.interface"] = { link = "@constructor" }, + ["@lsp.type.macro"] = { link = "@macro" }, + ["@lsp.type.method"] = { link = "@method" }, + ["@lsp.type.modifier.java"] = { link = "@keyword.type.java" }, + ["@lsp.type.namespace"] = { link = "@namespace" }, + ["@lsp.type.parameter"] = { link = "@parameter" }, + ["@lsp.type.property"] = { link = "@property" }, + ["@lsp.type.struct"] = { link = "@type" }, + ["@lsp.type.type"] = { link = "@type" }, + ["@lsp.type.typeParameter"] = { link = "@type.definition" }, + ["@lsp.type.variable"] = { link = "@variable" }, + } + + for group, hl in pairs(config.overrides) do + if groups[group] then + -- "link" should not mix with other configs (:h hi-link) + groups[group].link = nil + end + + groups[group] = vim.tbl_extend("force", groups[group] or {}, hl) + end + + return groups +end + +---@param config GruvboxConfig? +Gruvbox.setup = function(config) + Gruvbox.config = vim.deepcopy(default_config) + Gruvbox.config = vim.tbl_deep_extend("force", Gruvbox.config, config or {}) +end + +--- main load function +Gruvbox.load = function() + -- reset colors + if vim.g.colors_name then + vim.cmd.hi("clear") + end + vim.g.colors_name = "gruvbox" + vim.o.termguicolors = true + + local groups = get_groups() + + -- add highlights + for group, settings in pairs(groups) do + vim.api.nvim_set_hl(0, group, settings) + end +end + +return Gruvbox diff --git a/.config/nvim/lua/config/keymaps.lua b/.config/nvim/lua/config/keymaps.lua new file mode 100644 index 0000000..89a8c79 --- /dev/null +++ b/.config/nvim/lua/config/keymaps.lua @@ -0,0 +1,108 @@ +local set = vim.keymap.set + +local function remapkey(mode, key, action) + vim.keymap.set(mode, key, action, { noremap = true, silent = true }) +end + +-- dagnostic popup +set("n", "<leader>e", ":lua vim.diagnostic.open_float()<CR>") + +-- ESC insert to normal ctrl jk +-- set("i", "<C-j><C-k>", "<ESC>") + +-- set("v", "t", "!pandoc -f csv -t commonmark_x<CR>") +set("v", "<m-t>", "!pandoc -f csv -t commonmark_x<CR>") + +-- common save shortcuts +set("i", "<C-s>", "<ESC>:w<cr>a") +set("n", "<C-s>", ":w<cr>") + +-- don't move the cursor +set("n", "J", "mzJ`z") + +-- keep cursor in the middle +set("n", "<C-d>", "<C-d>zz") +set("n", "<C-u>", "<C-u>zz") +set("n", "n", "nzzzv") +set("n", "N", "Nzzzv") + +-- preserve clipboard when pasting +set("x", "<space>p", '"_dp') + +-- sane movement with wrap o n +remapkey({ "n", "v" }, "j", "gj") +remapkey({ "n", "v" }, "k", "gk") +remapkey({ "n", "v" }, "<Down>", "gj") +remapkey({ "n", "v" }, "<Up>", "gk") +remapkey("i", "<Down>", "<C-o>gj") +remapkey("i", "<Up>", "<C-o>gk") + +-- terminal shortcuts +remapkey("i", "<C-t>", "<Esc>:term<CR>A") +remapkey("n", "<C-t", ":term<CR>A") + +-- tab key in visual mode +set("v", "<Tab>", ">gv") +set("v", "<S-Tab>", "<gv") + +-- visually select the characters that are wanted in the search, then type // to search for the next occurrence of the selected text +remapkey("v", "//", "y/\\V<C-R>=escape(@\",'/\\')<CR><CR>") + +-- no ex mode etc +remapkey("n", "Q", "<Nop>") +remapkey("n", "<C-f>", "<Nop>") + +-- center current line +remapkey("n", "cc", ":center<CR>") + +-- write to files with root privileges +set("c", "w!!", ":w !sudo tee % >/dev/null") + +-- blamer +-- set("", "<C-b>", ":BlamerToggle<CR>") + +-- delete to void register +set({ "n", "v" }, "<leader>d", '"_d') + +-- quickfix list +set("n", "<C-x>", "<cmd>cnext<CR>zz") +set("n", "C-c>", "<cmd>cprev<CR>zz") +set("n", "<leader>x", "<cmd>lnext<CR>zz") +set("n", "<leader>c", "<cmd>lprev<CR>zz") + +-- typo fix +set("i", "<F1>", "<Esc>") +set("n", "q:", ":q<CR>") +vim.cmd([[ + ia tongiht tonight + ia htese these + ia od do + ia nothign nothing + ia htey they + ia htem them + ia iwth with + ia maxium maximum + ia funtcion function + ia fucntion function + ia funciton function + ia dfe def + ia edn end + ia teh the + ia hte the + ia htis this + ia tihs this + ia taht that + ia retunr return + ia reutrn return + ia eariler earlier + ia ulness unless + ia ahve have + ia chatper chapter + ia colmun column + ia amster master + ia orgiin origin + ia somehting something + ia hting thing + ia orgniaztion organization + ia orgnization organization +]]) diff --git a/.config/nvim/lua/config/lazy.lua b/.config/nvim/lua/config/lazy.lua new file mode 100644 index 0000000..a887655 --- /dev/null +++ b/.config/nvim/lua/config/lazy.lua @@ -0,0 +1,23 @@ +local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" +if not (vim.uv or vim.loop).fs_stat(lazypath) then + local lazyrepo = "https://github.com/folke/lazy.nvim.git" + local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath }) + if vim.v.shell_error ~= 0 then + vim.api.nvim_echo({ + { "Failed to clone lazy.nvim:\n", "ErrorMsg" }, + { out, "WarningMsg" }, + { "\nPress any key to exit..." }, + }, true, {}) + vim.fn.getchar() + os.exit(1) + end +end +vim.opt.rtp:prepend(lazypath) + +require("lazy").setup({ + spec = { + { import = "plugins" }, + }, + install = { colorscheme = { "gruvbox" } }, + checker = { enabled = true }, +}) diff --git a/.config/nvim/lua/config/lsp.lua b/.config/nvim/lua/config/lsp.lua new file mode 100644 index 0000000..07d9d4c --- /dev/null +++ b/.config/nvim/lua/config/lsp.lua @@ -0,0 +1,88 @@ +vim.diagnostic.config({ + virtual_text = true, + current_line = true, +}) + +vim.lsp.config('*', { + capabilities = { + textDocument = { + semanticTokens = { + multilineTokenSupport = true, + } + } + }, + root_markers = { '.git' }, +}) + +vim.lsp.enable({ + "rust_analyzer", + "ruff", -- python + "ty", -- python + -- "pyright", -- replace with astrals ty + -- "delance", + -- "cyright", + "bashls", + "clangd", + "lua_ls", + + "gopls", + "cssls", + "ts_ls", + "jsonls", +}) + +local capabilities = require('blink.cmp').get_lsp_capabilities() + +local disable_semantic_tokens = { + lua = true, + python = true, -- TODO: fix ty highlight colors later +} + +vim.api.nvim_create_autocmd('LspAttach', { + group = vim.api.nvim_create_augroup('lsp', {}), + callback = function(args) + local bufnr = args.buf + local client = assert(vim.lsp.get_client_by_id(args.data.client_id)) + if client:supports_method('textDocument/implementation') then + -- Create a keymap for vim.lsp.buf.implementation ... + end + -- Enable auto-completion. Note: Use CTRL-Y to select an item. |complete_CTRL-Y| + if client:supports_method('textDocument/completion') then + -- Optional: trigger autocompletion on EVERY keypress. May be slow! + -- local chars = {}; for i = 32, 126 do table.insert(chars, string.char(i)) end + -- client.server_capabilities.completionProvider.triggerCharacters = chars + vim.lsp.completion.enable(true, client.id, args.buf, { autotrigger = true }) + end + -- Auto-format ("lint") on save. + -- Usually not needed if server supports "textDocument/willSaveWaitUntil". + if not client:supports_method('textDocument/willSaveWaitUntil') + and client:supports_method('textDocument/formatting') then + vim.api.nvim_create_autocmd('BufWritePre', { + group = vim.api.nvim_create_augroup('lsp', { clear = false }), + buffer = args.buf, + callback = function() + vim.lsp.buf.format({ bufnr = args.buf, id = client.id, timeout_ms = 1000 }) + end, + }) + end + -- LSP keybindings + vim.opt_local.omnifunc = "v:lua.vim.lsp.omnifunc" + vim.keymap.set("n", "gd", vim.lsp.buf.definition, { buffer = 0, desc = "Goto definition" }) + vim.keymap.set("n", "gr", vim.lsp.buf.references, { buffer = 0, desc = "List references" }) + vim.keymap.set("n", "gD", vim.lsp.buf.declaration, { buffer = 0, desc = "Goto declaration" }) + vim.keymap.set("n", "gT", vim.lsp.buf.type_definition, { buffer = 0, desc = "Goto type definition" }) + -- vim.keymap.set("n", "K", vim.lsp.buf.hover, { buffer = 0, desc = "Hover documentation" }) -- hover.nvim + + vim.keymap.set("n", "<space>cr", vim.lsp.buf.rename, { buffer = 0, desc = "Rename all references" }) + vim.keymap.set("n", "<space>ca", vim.lsp.buf.code_action, { buffer = 0, desc = "Code action" }) + + local filetype = vim.bo[bufnr].filetype + if disable_semantic_tokens[filetype] then + client.server_capabilities.semanticTokensProvider = nil + end + + if client.name == "vscode-css-language-server" then + capabilities.textDocument.completion.completionItem.snippetSupport = true + end + end, +}) diff --git a/.config/nvim/lua/config/options.lua b/.config/nvim/lua/config/options.lua new file mode 100644 index 0000000..a362fcd --- /dev/null +++ b/.config/nvim/lua/config/options.lua @@ -0,0 +1,160 @@ +local opt = vim.opt + +-- vim.api.nvim_set_hl(0, "ColorColumn", { ctermbg = "NONE", bg = "NONE" }) + +-- colorscheme gruvbox +opt.termguicolors = true +opt.background = "dark" +vim.cmd.colorscheme("gruvbox") + +opt.mouse = "" -- disable mouse +opt.encoding = "utf-8" +opt.shortmess = "atI" -- disable intro screen +opt.inccommand = "nosplit" -- shows ex-command change previews +-- opt.inccommand = "split" +opt.smartcase = true +opt.ignorecase = true +opt.number = true +opt.relativenumber = true +opt.splitbelow = true +opt.splitright = true +opt.signcolumn = "yes" +opt.shada = { "'10", "<0", "s10", "h" } +opt.clipboard = "unnamedplus" +opt.expandtab = true -- expand tabs to spaces +opt.smarttab = false -- fuck tabs +-- opt.formatoptions:remove "o" -- Don't have `o` add a comment, should be in filetype (ftplugin) +opt.spell = false +opt.undolevels = 150 +opt.lazyredraw = true -- don't redraw screen during macros +opt.sc = true -- show incomplete command at bottom right +opt.swapfile = false +opt.backupdir = "/tmp" +opt.backupcopy = "yes" +opt.directory = "/tmp" + +opt.timeoutlen = 500 +opt.ttimeoutlen = 10 -- fix esc in tmux +opt.showmatch = true +opt.mat = 5 + +opt.visualbell = true +opt.foldenable = false +opt.foldmethod = "syntax" +opt.foldlevel = 1 +opt.foldnestmax = 10 +opt.tabstop = 8 -- n-space tab width +opt.shiftwidth = 2 -- allows the use of < and > for VISUAL indenting +opt.softtabstop = 2 -- counts n space when DELETE or BACKSPACE is used +opt.textwidth = 78 +opt.autoindent = true +opt.smartindent = true +opt.hlsearch = false +opt.incsearch = true +opt.backspace = "indent,eol,start" + +opt.history = 1000 -- 1000 lines of command history +opt.cmdheight = 1 -- command line height +opt.ruler = true -- ruler display in statusline +opt.showmode = true -- show mode at bottom of screen +opt.backup = false -- don't keep backups after close +opt.writebackup = true -- do keep one while working +opt.backupdir = "/tmp" +opt.backupcopy = "yes" +opt.directory = "/tmp" +opt.showmatch = true -- show matching brackets (), {}, [] +opt.whichwrap = "h,l,<,>,[,]" +opt.showcmd = true +opt.modeline = true +opt.formatoptions = "tcqjl" +opt.selection = "inclusive" +opt.autowrite = true +opt.cinoptions = "g0,:0,l1,(0,t0" +opt.shortmess = "at" +opt.complete = ".,t,i,b,w,k" +opt.wildchar = ("\t"):byte() +opt.wildmenu = true +opt.wildmode = "longest:full,full" +opt.wildignore = "*/.git/*,*/tmp/*,*.swp,*/node_modules/*" +opt.previewheight = 5 +opt.joinspaces = true +opt.magic = true +opt.suffixes = ".bak,~,.o,.info,.log,.rbx,.swp" +opt.title = true +opt.scrolloff = 8 -- start scrolling at 8 lines away from margins +opt.sidescrolloff = 15 +opt.sidescroll = 1 +opt.cursorline = true +opt.omnifunc = "syntaxcomplete#Complete" +opt.laststatus = 3 -- 2 +opt.completeopt = "menu,menuone,noselect" + +-- TODO: convert to lua or get lualine plugin +-- vim.cmd [[ +-- set statusline= +-- set statusline+=%#PmenuSel# +-- set statusline+=%#LineNr# +-- set statusline+=\ %F +-- set statusline+=%m +-- set statusline+=%= +-- set statusline+=%#CursorColumn# +-- set statusline+=\ %y +-- set statusline+=\ %{&fileencoding?&fileencoding:&encoding} +-- set statusline+=\ %{&fileformat} +-- set statusline+=\ %p%% +-- set statusline+=\ %l:%c +-- set statusline+=\ +-- ]] + +vim.cmd([[ + augroup encrypted + au! + autocmd BufReadPre,FileReadPre *.gpg set viminfo= + autocmd BufReadPre,FileReadPre *.gpg set noswapfile noundofile nobackup + autocmd BufReadPre,FileReadPre *.gpg set bin + autocmd BufReadPre,FileReadPre *.gpg let ch_save = &ch|set ch=2 + autocmd BufReadPost,FileReadPost *.gpg '[,']!gpg --decrypt 2> /dev/null + autocmd BufReadPost,FileReadPost *.gpg set nobin + autocmd BufReadPost,FileReadPost *.gpg let &ch = ch_save|unlet ch_save + autocmd BufReadPost,FileReadPost *.gpg execute ":doautocmd BufReadPost " . expand("%:r") + autocmd BufWritePre,FileWritePre *.gpg '[,']!gpg --default-recipient-self -ae 2>/dev/null + autocmd BufWritePost,FileWritePost *.gpg u + augroup END +]]) + +-- TODO: move and convert to lua +-- vimwiki (move to vimwiki.lua config) +--local hostname = vim.fn.hostname() +--if hostname == "arcana" then +-- vim.g.vimwiki_list = { { path = "/home/moxie/wiki" } } +--elseif hostname == "hideaway" then +-- vim.g.vimwiki_list = { { path = "/stash/wiki" } } +--end + +-- open vimwiki links in a new vim buffer instead of xdg-open +-- vim.cmd([[ +-- fun! VimwikiLinkHandler(link) +-- let link_infos = vimwiki#base#resolve_link(a:link) +-- try +-- if link_infos.filename =~ "^http" +-- exe '!$BROWSER "' . fnameescape(link_infos.filename) . '"' +-- else +-- exe "e " . fnameescape(link_infos.filename) +-- endif +-- return 1 +-- catch +-- echo "Failed opening " . a:link +-- return 0 +-- endtry +-- endfun +-- ]]) + +-- remove docx and xlsx from zip.vim +vim.g.zipPlugin_ext = +"*.zip,*.jar,*.xpi,*.ja,*.war,*.ear,*.celzip,*.oxt,*.kmz,*.wsz,*.xap,*.docm,*.dotx,*.dotm,*.potx,*.potm,*.ppsx,*.ppsm,*.pptx,*.pptm,*.ppam,*.sldx,*.thmx,*.xlam,*.xlsm,*.xlsb,*.xltx,*.xltm,*.xlam,*.crtx,*.vdw,*.glox,*.gcsx,*.gqsx" + +vim.cmd([[ + highlight GitGutterAdd guifg=#009900 ctermfg=2 + highlight GitGutterChange guifg=#bbbb00 ctermfg=3 + highlight GitGutterDelete guifg=#ff2222 ctermfg=1 +]]) diff --git a/.config/nvim/lua/config/terminal.lua b/.config/nvim/lua/config/terminal.lua new file mode 100644 index 0000000..ea8f905 --- /dev/null +++ b/.config/nvim/lua/config/terminal.lua @@ -0,0 +1,19 @@ +local set = vim.opt_local + +vim.api.nvim_create_autocmd("TermOpen", { + group = vim.api.nvim_create_augroup("custom-term-open", {}), + callback = function() + set.number = false + set.relativenumber = false + set.scrolloff = 0 + end, +}) + +vim.keymap.set("t", "<esc><esc>", "<c-\\><c-n>") +vim.keymap.set("n", ",st", function() + vim.cmd.new() + vim.cmd.wincmd "J" + vim.api.nvim_win_set_height(0, 12) + vim.wo.winfixheight = true + vim.cmd.term() +end) |
