200 lines
12 KiB
Lua
200 lines
12 KiB
Lua
-- [[
|
|
-- 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,
|
|
}
|
|
|
|
}
|