-- [[ -- This file is largely based on work done by Andrew Wong (w0ng) -- Find the original file and additional credits at: https://github.com/w0ng/vim-hybrid -- -- ]] return { { "custom/hybrid", name = "hybrid-colorscheme", lazy = "false", priority = 1000, config = function() -- Clear existing highlights vim.cmd("highlight clear") -- Reset syntax if it exists if vim.fn.exists("syntax_on") then vim.cmd("syntax reset") end vim.g.colors_name = "hybrid" vim.o.background = "dark" vim.o.termguicolors = true local colors = { -- Core colors with both GUI and cterm values background = { gui = "#1d1f21", cterm = 234 }, foreground = { gui = "#c5c8c6", cterm = 250 }, selection = { gui = "#373b41", cterm = 237 }, line = { gui = "#282a2e", cterm = 235 }, comment = { gui = "#707880", cterm = 243 }, -- Syntax colors red = { gui = "#cc6666", cterm = 167 }, orange = { gui = "#de935f", cterm = 173 }, yellow = { gui = "#f0c674", cterm = 221 }, green = { gui = "#b5bd68", cterm = 143 }, aqua = { gui = "#8abeb7", cterm = 109 }, blue = { gui = "#81a2be", cterm = 110 }, purple = { gui = "#b294bb", cterm = 139 }, -- UI colors window = { gui = "#303030", cterm = 236 }, darkcolumn = { gui = "#1c1c1c", cterm = 234 }, -- Git/diff colors add_bg = { gui = "#5F875F", cterm = 65 }, add_fg = { gui = "#d7ffaf", cterm = 193 }, change_bg = { gui = "#5F5F87", cterm = 60 }, change_fg = { gui = "#d7d7ff", cterm = 189 }, del_bg = { gui = "#cc6666", cterm = 167 }, -- Dark variants dark_red = { gui = "#5f0000", cterm = 52 }, dark_blue = { gui = "#00005f", cterm = 17 }, dark_cyan = { gui = "#005f5f", cterm = 24 }, dark_purple = { gui = "#5f005f", cterm = 53 }, } -- helper function to set highlights local function hi(group, opts) vim.api.nvim_set_hl(0, group, opts) end -- Editor UI hi("Normal", { fg = colors.foreground.gui, bg = colors.background.gui, ctermfg = colors.foreground.cterm, ctermbg = colors.background.cterm }) hi("ColorColumn", { bg = colors.line.gui, ctermbg = colors.line.cterm }) hi("CursorColumn", { bg = colors.line.gui, ctermbg = colors.line.cterm }) hi("CursorLine", {}) hi("CursorLineNr", { fg = colors.yellow.gui, ctermfg = colors.yellow.cterm }) hi("Directory", { fg = colors.blue.gui, ctermfg = colors.blue.cterm }) hi("LineNr", { fg = colors.comment.gui, ctermfg = colors.comment.cterm }) hi("VertSplit", { fg = colors.window.gui, ctermfg = colors.window.cterm }) hi("Folded", { fg = colors.comment.gui, bg = colors.darkcolumn.gui, ctermfg = colors.comment.cterm, ctermbg = colors.darkcolumn.cterm }) hi("FoldColumn", { bg = colors.darkcolumn.gui, ctermbg = colors.darkcolumn.cterm }) hi("SignColumn", { bg = colors.darkcolumn.gui, ctermbg = colors.darkcolumn.cterm }) hi("MatchParen", { fg = colors.background.gui, bg = colors.change_bg.gui, ctermfg = colors.background.cterm, ctermbg = colors.change_bg.cterm }) hi("NonText", { fg = colors.selection.gui, ctermfg = colors.selection.cterm }) hi("SpecialKey", { fg = colors.selection.gui, ctermfg = colors.selection.cterm }) hi("Visual", { bg = colors.selection.gui, ctermbg = colors.selection.cterm }) hi("Search", { fg = colors.background.gui, bg = colors.yellow.gui, ctermfg = colors.background.cterm, ctermbg = colors.yellow.cterm }) hi("Title", { fg = colors.yellow.gui, ctermfg = colors.yellow.cterm }) -- Messages hi("ModeMsg", { fg = colors.green.gui, ctermfg = colors.green.cterm }) hi("MoreMsg", { fg = colors.green.gui, ctermfg = colors.green.cterm }) hi("ErrorMsg", { fg = colors.background.gui, bg = colors.red.gui, ctermfg = colors.background.cterm, ctermbg = colors.red.cterm, standout = true }) hi("WarningMsg", { fg = colors.red.gui, ctermfg = colors.red.cterm }) hi("Question", { fg = colors.green.gui, ctermfg = colors.green.cterm }) -- Popup menu hi("Pmenu", { fg = colors.foreground.gui, bg = colors.selection.gui, ctermfg = colors.foreground.cterm, ctermbg = colors.selection.cterm }) hi("PmenuSel", { fg = colors.foreground.gui, bg = colors.selection.gui, ctermfg = colors.foreground.cterm, ctermbg = colors.selection.cterm, reverse = true }) -- Status line hi("StatusLine", { fg = colors.comment.gui, bg = colors.background.gui, ctermfg = colors.comment.cterm, ctermbg = colors.background.cterm, reverse = true }) hi("StatusLineNC", { fg = colors.window.gui, bg = colors.comment.gui, ctermfg = colors.window.cterm, ctermbg = colors.comment.cterm, reverse = true }) hi("TabLine", { fg = colors.foreground.gui, bg = colors.darkcolumn.gui, ctermfg = colors.foreground.cterm, ctermbg = colors.darkcolumn.cterm, reverse = true }) -- Diffs hi("DiffAdd", { fg = colors.add_fg.gui, bg = colors.add_bg.gui, ctermfg = colors.add_fg.cterm, ctermbg = colors.add_bg.cterm }) hi("DiffChange", { fg = colors.change_fg.gui, bg = colors.change_bg.gui, ctermfg = colors.change_fg.cterm, ctermbg = colors.change_bg.cterm }) hi("DiffDelete", { fg = colors.background.gui, bg = colors.del_bg.gui, ctermfg = colors.background.cterm, ctermbg = colors.del_bg.cterm }) hi("DiffText", { fg = colors.background.gui, bg = colors.blue.gui, ctermfg = colors.background.cterm, ctermbg = colors.blue.cterm }) -- Spelling hi("SpellCap", { sp = colors.blue.gui, ctermfg = colors.blue.cterm, undercurl = true }) hi("SpellLocal", { sp = colors.aqua.gui, ctermfg = colors.aqua.cterm, undercurl = true }) hi("SpellBad", { sp = colors.red.gui, ctermfg = colors.red.cterm, undercurl = true }) hi("SpellRare", { fg = colors.purple.gui, bg = colors.dark_purple.gui, ctermfg = colors.purple.cterm, ctermbg = colors.dark_purple.cterm, underline = true }) -- Syntax highlighting hi("Comment", { fg = colors.comment.gui, ctermfg = colors.comment.cterm }) hi("Constant", { fg = colors.red.gui, ctermfg = colors.red.cterm }) hi("String", { fg = colors.green.gui, ctermfg = colors.green.cterm }) hi("Identifier", { fg = colors.purple.gui, ctermfg = colors.purple.cterm }) hi("Function", { fg = colors.yellow.gui, ctermfg = colors.yellow.cterm }) hi("Statement", { fg = colors.blue.gui, ctermfg = colors.blue.cterm }) hi("Operator", { fg = colors.aqua.gui, ctermfg = colors.aqua.cterm }) hi("PreProc", { fg = colors.aqua.gui, ctermfg = colors.aqua.cterm }) hi("Type", { fg = colors.orange.gui, ctermfg = colors.orange.cterm }) hi("Structure", { fg = colors.aqua.gui, ctermfg = colors.aqua.cterm }) hi("Special", { fg = colors.green.gui, ctermfg = colors.green.cterm }) hi("Underlined", { fg = colors.blue.gui, ctermfg = colors.blue.cterm, underline = true }) hi("Error", { fg = colors.red.gui, bg = colors.dark_red.gui, ctermfg = colors.red.cterm, ctermbg = colors.dark_red.cterm, underline = true }) hi("Todo", { fg = colors.add_fg.gui, ctermfg = colors.add_fg.cterm }) -- Quickfix hi("qfLineNr", { fg = colors.yellow.gui, ctermfg = colors.yellow.cterm }) -- Tree-sitter highlight groups hi("@variable", { fg = colors.foreground.gui, ctermfg = colors.foreground.cterm }) hi("@variable.builtin", { fg = colors.purple.gui, ctermfg = colors.purple.cterm }) hi("@variable.parameter", { fg = colors.orange.gui, ctermfg = colors.orange.cterm }) -- hi("@variable.member", { fg = colors.red.gui, ctermfg = colors.red.cterm }) hi("@constant", { fg = colors.red.gui, ctermfg = colors.red.cterm }) hi("@constant.builtin", { fg = colors.red.gui, ctermfg = colors.red.cterm }) hi("@constant.macro", { fg = colors.aqua.gui, ctermfg = colors.aqua.cterm }) hi("@string", { fg = colors.green.gui, ctermfg = colors.green.cterm }) hi("@string.escape", { fg = colors.aqua.gui, ctermfg = colors.aqua.cterm }) hi("@string.regexp", { fg = colors.aqua.gui, ctermfg = colors.aqua.cterm }) hi("@character", { fg = colors.green.gui, ctermfg = colors.green.cterm }) hi("@number", { fg = colors.red.gui, ctermfg = colors.red.cterm }) hi("@boolean", { fg = colors.red.gui, ctermfg = colors.red.cterm }) hi("@float", { fg = colors.red.gui, ctermfg = colors.red.cterm }) hi("@function", { fg = colors.yellow.gui, ctermfg = colors.yellow.cterm }) hi("@function.builtin", { fg = colors.yellow.gui, ctermfg = colors.yellow.cterm }) hi("@function.call", { fg = colors.yellow.gui, ctermfg = colors.yellow.cterm }) hi("@function.macro", { fg = colors.aqua.gui, ctermfg = colors.aqua.cterm }) hi("@function.method", { fg = colors.yellow.gui, ctermfg = colors.yellow.cterm }) hi("@constructor", { fg = colors.orange.gui, ctermfg = colors.orange.cterm }) hi("@operator", { fg = colors.aqua.gui, ctermfg = colors.aqua.cterm }) hi("@keyword", { fg = colors.blue.gui, ctermfg = colors.blue.cterm }) hi("@keyword.function", { fg = colors.blue.gui, ctermfg = colors.blue.cterm }) hi("@keyword.operator", { fg = colors.blue.gui, ctermfg = colors.blue.cterm }) hi("@keyword.return", { fg = colors.blue.gui, ctermfg = colors.blue.cterm }) hi("@keyword.conditional", { fg = colors.blue.gui, ctermfg = colors.blue.cterm }) hi("@keyword.repeat", { fg = colors.blue.gui, ctermfg = colors.blue.cterm }) hi("@keyword.import", { fg = colors.aqua.gui, ctermfg = colors.aqua.cterm }) hi("@type", { fg = colors.orange.gui, ctermfg = colors.orange.cterm }) hi("@type.builtin", { fg = colors.orange.gui, ctermfg = colors.orange.cterm }) hi("@type.qualifier", { fg = colors.blue.gui, ctermfg = colors.blue.cterm }) hi("@property", { fg = colors.red.gui, ctermfg = colors.red.cterm }) hi("@field", { fg = colors.red.gui, ctermfg = colors.red.cterm }) hi("@punctuation.delimiter", { fg = colors.foreground.gui, ctermfg = colors.foreground.cterm }) hi("@punctuation.bracket", { fg = colors.foreground.gui, ctermfg = colors.foreground.cterm }) hi("@punctuation.special", { fg = colors.aqua.gui, ctermfg = colors.aqua.cterm }) hi("@comment", { fg = colors.comment.gui, ctermfg = colors.comment.cterm }) hi("@comment.documentation", { fg = colors.comment.gui, ctermfg = colors.comment.cterm }) hi("@tag", { fg = colors.blue.gui, ctermfg = colors.blue.cterm }) hi("@tag.attribute", { fg = colors.orange.gui, ctermfg = colors.orange.cterm }) hi("@tag.delimiter", { fg = colors.foreground.gui, ctermfg = colors.foreground.cterm }) -- Set up highlight links separately vim.api.nvim_set_hl(0, "diffRemoved", { link = "Constant" }) vim.api.nvim_set_hl(0, "diffAdded", { link = "Special" }) end, } }