mirror of
https://github.com/gabehf/base46.git
synced 2026-03-10 07:50:31 -07:00
re-write whole plugin
added features to have local nvchad themes, override specific colors aka variables in nvchad themes
This commit is contained in:
parent
dbd746da1b
commit
1db5a6eda8
76 changed files with 1592 additions and 1284 deletions
266
lua/base16.lua
266
lua/base16.lua
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue