re-write whole plugin

added features to have local nvchad themes, override specific colors aka variables in nvchad themes
This commit is contained in:
siduck 2022-05-03 00:07:51 +05:30
parent dbd746da1b
commit 1db5a6eda8
76 changed files with 1592 additions and 1284 deletions

View file

@ -1,229 +1,47 @@
local function highlight(group, guifg, guibg, sp, sp_color)
local hl = {
fg = guifg,
bg = guibg,
special = sp_color,
}
if sp ~= nil and sp ~= "none" then
hl[sp] = true
local M = {}
M.get_colors = function(type)
local name = require("core.utils").load_config().ui.theme
vim.g.nvchad_theme = name
-- theme paths
local default_path = "hl_themes." .. name
local user_path = "custom.themes." .. name
local present1, default_theme = pcall(require, default_path)
local present2, user_theme = pcall(require, user_path)
if present1 then
return default_theme[type]
elseif present2 then
return user_theme[type]
else
error "No such theme bruh >_< "
end
vim.api.nvim_set_hl(0, group, hl)
end
-- Modified from https://github.com/chriskempson/base16-vim
local function apply_base16_theme(theme)
-- Neovim terminal colours
if vim.fn.has "nvim" then
vim.g.terminal_color_0 = "#" .. theme.base00
vim.g.terminal_color_1 = "#" .. theme.base08
vim.g.terminal_color_2 = "#" .. theme.base0B
vim.g.terminal_color_3 = "#" .. theme.base0A
vim.g.terminal_color_4 = "#" .. theme.base0D
vim.g.terminal_color_5 = "#" .. theme.base0E
vim.g.terminal_color_6 = "#" .. theme.base0C
vim.g.terminal_color_7 = "#" .. theme.base05
vim.g.terminal_color_8 = "#" .. theme.base03
vim.g.terminal_color_9 = "#" .. theme.base08
vim.g.terminal_color_10 = "#" .. theme.base0B
vim.g.terminal_color_11 = "#" .. theme.base0A
vim.g.terminal_color_12 = "#" .. theme.base0D
vim.g.terminal_color_13 = "#" .. theme.base0E
vim.g.terminal_color_14 = "#" .. theme.base0C
vim.g.terminal_color_15 = "#" .. theme.base07
if vim.o.background == "light" then
vim.g.terminal_color_background = "#" .. theme.base05
vim.g.terminal_color_foreground = "#" .. theme.base0B
else
vim.g.terminal_color_background = "#" .. theme.base00
vim.g.terminal_color_foreground = "#" .. theme.base0E
end
end
-- TODO
-- nvim.command "hi clear"
-- nvim.command "syntax reset"
-- Vim editor colors
highlight("Normal", theme.base05, theme.base00, nil, nil)
highlight("Bold", nil, nil, "bold", nil)
highlight("Debug", theme.base08, nil, nil, nil)
highlight("Directory", theme.base0D, nil, nil, nil)
highlight("Error", theme.base00, theme.base08, nil, nil)
highlight("ErrorMsg", theme.base08, theme.base00, nil, nil)
highlight("Exception", theme.base08, nil, nil, nil)
highlight("FoldColumn", theme.base0C, theme.base01, nil, nil)
highlight("Folded", theme.base03, theme.base01, nil, nil)
highlight("IncSearch", theme.base01, theme.base09, "none", nil)
highlight("Italic", nil, nil, "none", nil)
highlight("Macro", theme.base08, nil, nil, nil)
highlight("MatchParen", nil, theme.base03, nil, nil)
highlight("ModeMsg", theme.base0B, nil, nil, nil)
highlight("MoreMsg", theme.base0B, nil, nil, nil)
highlight("Question", theme.base0D, nil, nil, nil)
highlight("Search", theme.base01, theme.base0A, nil, nil)
highlight("Substitute", theme.base01, theme.base0A, "none", nil)
highlight("SpecialKey", theme.base03, nil, nil, nil)
highlight("TooLong", theme.base08, nil, nil, nil)
highlight("Underlined", theme.base08, nil, nil, nil)
highlight("Visual", nil, theme.base02, nil, nil)
highlight("VisualNOS", theme.base08, nil, nil, nil)
highlight("WarningMsg", theme.base08, nil, nil, nil)
highlight("WildMenu", theme.base08, theme.base0A, nil, nil)
highlight("Title", theme.base0D, nil, "none", nil)
highlight("Conceal", theme.base0D, theme.base00, nil, nil)
highlight("Cursor", theme.base00, theme.base05, nil, nil)
highlight("NonText", theme.base03, nil, nil, nil)
highlight("LineNr", theme.base03, "NONE", nil, nil)
highlight("SignColumn", theme.base03, "NONE", nil, nil)
highlight("StatusLine", theme.base04, "NONE", "none", nil)
highlight("StatusLineNC", theme.base03, "NONE", "none", nil)
highlight("VertSplit", theme.base02, "NONE", "none", nil)
highlight("ColorColumn", nil, theme.base01, "none", nil)
highlight("CursorColumn", nil, theme.base01, "none", nil)
highlight("CursorLine", nil, theme.base01, "none", nil)
highlight("CursorLineNr", theme.base04, "NONE", nil, nil)
highlight("QuickFixLine", nil, theme.base01, "none", nil)
highlight("PMenu", theme.base05, theme.base01, "none", nil)
highlight("PMenuSel", theme.base01, theme.base05, nil, nil)
highlight("TabLine", theme.base03, theme.base01, "none", nil)
highlight("TabLineFill", theme.base03, theme.base01, "none", nil)
highlight("TabLineSel", theme.base0B, theme.base01, "none", nil)
-- Standard syntax highlighting
highlight("Boolean", theme.base09, nil, nil, nil)
highlight("Character", theme.base08, nil, nil, nil)
highlight("Comment", theme.base03, nil, nil, nil)
highlight("Conditional", theme.base0E, nil, nil, nil)
highlight("Constant", theme.base08, nil, nil, nil)
highlight("Define", theme.base0E, nil, "none", nil)
highlight("Delimiter", theme.base0F, nil, nil, nil)
highlight("Float", theme.base09, nil, nil, nil)
highlight("Function", theme.base0D, nil, nil, nil)
highlight("Identifier", theme.base08, nil, "none", nil)
highlight("Include", theme.base0D, nil, nil, nil)
highlight("Keyword", theme.base0E, nil, nil, nil)
highlight("Label", theme.base0A, nil, nil, nil)
highlight("Number", theme.base09, nil, nil, nil)
highlight("Operator", theme.base05, nil, "none", nil)
highlight("PreProc", theme.base0A, nil, nil, nil)
highlight("Repeat", theme.base0A, nil, nil, nil)
highlight("Special", theme.base0C, nil, nil, nil)
highlight("SpecialChar", theme.base0F, nil, nil, nil)
highlight("Statement", theme.base08, nil, nil, nil)
highlight("StorageClass", theme.base0A, nil, nil, nil)
highlight("String", theme.base0B, nil, nil, nil)
highlight("Structure", theme.base0E, nil, nil, nil)
highlight("Tag", theme.base0A, nil, nil, nil)
highlight("Todo", theme.base0A, theme.base01, nil, nil)
highlight("Type", theme.base0A, nil, "none", nil)
highlight("Typedef", theme.base0A, nil, nil, nil)
-- Diff highlighting
highlight("DiffAdd", theme.base0B, theme.base01, nil, nil)
highlight("DiffChange", theme.base03, theme.base01, nil, nil)
highlight("DiffDelete", theme.base08, theme.base01, nil, nil)
highlight("DiffText", theme.base0D, theme.base01, nil, nil)
highlight("DiffAdded", theme.base0B, theme.base00, nil, nil)
highlight("DiffFile", theme.base08, theme.base00, nil, nil)
highlight("DiffNewFile", theme.base0B, theme.base00, nil, nil)
highlight("DiffLine", theme.base0D, theme.base00, nil, nil)
highlight("DiffRemoved", theme.base08, theme.base00, nil, nil)
-- Git highlighting
highlight("gitcommitOverflow", theme.base08, nil, nil, nil)
highlight("gitcommitSummary", theme.base0B, nil, nil, nil)
highlight("gitcommitComment", theme.base03, nil, nil, nil)
highlight("gitcommitUntracked", theme.base03, nil, nil, nil)
highlight("gitcommitDiscarded", theme.base03, nil, nil, nil)
highlight("gitcommitSelected", theme.base03, nil, nil, nil)
highlight("gitcommitHeader", theme.base0E, nil, nil, nil)
highlight("gitcommitSelectedType", theme.base0D, nil, nil, nil)
highlight("gitcommitUnmergedType", theme.base0D, nil, nil, nil)
highlight("gitcommitDiscardedType", theme.base0D, nil, nil, nil)
highlight("gitcommitBranch", theme.base09, nil, "bold", nil)
highlight("gitcommitUntrackedFile", theme.base0A, nil, nil, nil)
highlight("gitcommitUnmergedFile", theme.base08, nil, "bold", nil)
highlight("gitcommitDiscardedFile", theme.base08, nil, "bold", nil)
highlight("gitcommitSelectedFile", theme.base0B, nil, "bold", nil)
-- Mail highlighting
highlight("mailQuoted1", theme.base0A, nil, nil, nil)
highlight("mailQuoted2", theme.base0B, nil, nil, nil)
highlight("mailQuoted3", theme.base0E, nil, nil, nil)
highlight("mailQuoted4", theme.base0C, nil, nil, nil)
highlight("mailQuoted5", theme.base0D, nil, nil, nil)
highlight("mailQuoted6", theme.base0A, nil, nil, nil)
highlight("mailURL", theme.base0D, nil, nil, nil)
highlight("mailEmail", theme.base0D, nil, nil, nil)
-- Spelling highlighting
highlight("SpellBad", nil, nil, "undercurl", theme.base08)
highlight("SpellLocal", nil, nil, "undercurl", theme.base0C)
highlight("SpellCap", nil, nil, "undercurl", theme.base0D)
highlight("SpellRare", nil, nil, "undercurl", theme.base0E)
-- treesitter
highlight("TSAnnotation", theme.base0F, nil, "none", nil)
highlight("TSAttribute", theme.base0A, nil, "none", nil)
highlight("TSCharacter", theme.base08, nil, "none", nil)
highlight("TSConstBuiltin", theme.base09, nil, "none", nil)
highlight("TSConstMacro", theme.base08, nil, "none", nil)
highlight("TSError", theme.base08, nil, "none", nil)
highlight("TSException", theme.base08, nil, "none", nil)
highlight("TSFloat", theme.base09, nil, "none", nil)
highlight("TSFuncBuiltin", theme.base0D, nil, "none", nil)
highlight("TSFuncMacro", theme.base08, nil, "none", nil)
highlight("TSKeywordOperator", theme.base0E, nil, "none", nil)
highlight("TSMethod", theme.base0D, nil, "none", nil)
highlight("TSNamespace", theme.base08, nil, "none", nil)
highlight("TSNone", theme.base05, nil, "none", nil)
highlight("TSParameter", theme.base08, nil, "none", nil)
highlight("TSParameterReference", theme.base05, nil, "none", nil)
highlight("TSPunctDelimiter", theme.base0F, nil, "none", nil)
highlight("TSPunctSpecial", theme.base05, nil, "none", nil)
highlight("TSStringRegex", theme.base0C, nil, "none", nil)
highlight("TSStringEscape", theme.base0C, nil, "none", nil)
highlight("TSSymbol", theme.base0B, nil, "none", nil)
highlight("TSTagDelimiter", theme.base0F, nil, "none", nil)
highlight("TSText", theme.base05, nil, "none", nil)
highlight("TSStrong", nil, nil, "bold", nil)
highlight("TSEmphasis", theme.base09, nil, "none", nil)
highlight("TSStrike", theme.base00, nil, "strikethrough", nil)
highlight("TSLiteral", theme.base09, nil, "none", nil)
highlight("TSURI", theme.base09, nil, "underline", nil)
highlight("TSTypeBuiltin", theme.base0A, nil, "none", nil)
highlight("TSVariableBuiltin", theme.base09, nil, "none", nil)
highlight("TSDefinition", nil, nil, "underline", theme.base04)
highlight("TSDefinitionUsage", nil, nil, "underline", theme.base04)
highlight("TSCurrentScope", nil, nil, "bold", nil)
-- TODO
-- nvim.command 'syntax on'
M.merge_tb = function(table1, table2)
return vim.tbl_deep_extend("force", table1, table2)
end
return setmetatable({
themes = function(name)
name = "themes/" .. name .. "-base16"
local present, theme_array = pcall(require, name)
if present then
return theme_array
else
error("No such base16 theme: " .. name)
end
end,
apply_theme = apply_base16_theme,
theme_from_array = function(array)
assert(#array == 16, "base16.theme_from_array: The array length must be 16")
local result = {}
for i, value in ipairs(array) do
assert(#value == 6, "base16.theme_from_array: array values must be in 6 digit hex format, e.g. 'ffffff'")
local key = ("base%02X"):format(i - 1)
result[key] = value
end
return result
end,
}, {
__call = function(_, ...)
apply_base16_theme(...)
end,
})
M.load_theme = function()
package.loaded["chadlights" or false] = nil
local highlights = require "chadlights"
-- finally set all highlights :D
for hl, col in pairs(highlights) do
vim.api.nvim_set_hl(0, hl, col)
end
end
M.override_theme = function(default_theme, theme_name)
local changed_themes = require("core.utils").load_config().ui.changed_themes
if changed_themes[theme_name] then
return M.merge_tb(default_theme, changed_themes[theme_name])
else
return default_theme
end
end
return M