neovim/lua/plugins/colorscheme.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,
}
}