You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

288 lines
13 KiB

local function highlight(group, guifg, guibg, attr, guisp)
local parts = {group}
if guifg then table.insert(parts, "guifg=#"..guifg) end
if guibg then table.insert(parts, "guibg=#"..guibg) end
if attr then
table.insert(parts, "gui="..attr)
end
if guisp then table.insert(parts, "guisp=#"..guisp) end
-- nvim.ex.highlight(parts)
vim.api.nvim_command('highlight '..table.concat(parts, ' '))
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, theme.base02, "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.base09, 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)
---
-- Extra definitions
---
-- C highlighting
highlight("cOperator", theme.base0C, nil, nil, nil)
highlight("cPreCondit", theme.base0E, nil, nil, nil)
-- C# highlighting
highlight("csClass", theme.base0A, nil, nil, nil)
highlight("csAttribute", theme.base0A, nil, nil, nil)
highlight("csModifier", theme.base0E, nil, nil, nil)
highlight("csType", theme.base08, nil, nil, nil)
highlight("csUnspecifiedStatement", theme.base0D, nil, nil, nil)
highlight("csContextualStatement", theme.base0E, nil, nil, nil)
highlight("csNewDecleration", theme.base08, nil, nil, nil)
-- CSS highlighting
highlight("cssBraces", theme.base05, nil, nil, nil)
highlight("cssClassName", theme.base0E, nil, nil, nil)
highlight("cssColor", theme.base0C, 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)
-- HTML highlighting
highlight("htmlBold", theme.base0A, nil, nil, nil)
highlight("htmlItalic", theme.base0E, nil, nil, nil)
highlight("htmlEndTag", theme.base05, nil, nil, nil)
highlight("htmlTag", theme.base05, nil, nil, nil)
-- JavaScript highlighting
highlight("javaScript", theme.base05, nil, nil, nil)
highlight("javaScriptBraces", theme.base05, nil, nil, nil)
highlight("javaScriptNumber", theme.base09, nil, nil, nil)
-- pangloss/vim-javascript highlighting
highlight("jsOperator", theme.base0D, nil, nil, nil)
highlight("jsStatement", theme.base0E, nil, nil, nil)
highlight("jsReturn", theme.base0E, nil, nil, nil)
highlight("jsThis", theme.base08, nil, nil, nil)
highlight("jsClassDefinition", theme.base0A, nil, nil, nil)
highlight("jsFunction", theme.base0E, nil, nil, nil)
highlight("jsFuncName", theme.base0D, nil, nil, nil)
highlight("jsFuncCall", theme.base0D, nil, nil, nil)
highlight("jsClassFuncName", theme.base0D, nil, nil, nil)
highlight("jsClassMethodType", theme.base0E, nil, nil, nil)
highlight("jsRegexpString", theme.base0C, nil, nil, nil)
highlight("jsGlobalObjects", theme.base0A, nil, nil, nil)
highlight("jsGlobalNodeObjects", theme.base0A, nil, nil, nil)
highlight("jsExceptions", theme.base0A, nil, nil, nil)
highlight("jsBuiltins", theme.base0A, nil, nil, 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)
-- Markdown highlighting
highlight("markdownCode", theme.base0B, nil, nil, nil)
highlight("markdownError", theme.base05, theme.base00, nil, nil)
highlight("markdownCodeBlock", theme.base0B, nil, nil, nil)
highlight("markdownHeadingDelimiter", theme.base0D, nil, nil, nil)
-- PHP highlighting
highlight("phpMemberSelector", theme.base05, nil, nil, nil)
highlight("phpComparison", theme.base05, nil, nil, nil)
highlight("phpParent", theme.base05, nil, nil, nil)
highlight("phpMethodsVar", theme.base0C, nil, nil, nil)
-- Python highlighting
highlight("pythonOperator", theme.base0E, nil, nil, nil)
highlight("pythonRepeat", theme.base0E, nil, nil, nil)
highlight("pythonInclude", theme.base0E, nil, nil, nil)
highlight("pythonStatement", theme.base0E, nil, nil, nil)
-- Ruby highlighting
highlight("rubyAttribute", theme.base0D, nil, nil, nil)
highlight("rubyConstant", theme.base0A, nil, nil, nil)
highlight("rubyInterpolationDelimiter", theme.base0F, nil, nil, nil)
highlight("rubyRegexp", theme.base0C, nil, nil, nil)
highlight("rubySymbol", theme.base0B, nil, nil, nil)
highlight("rubyStringDelimiter", theme.base0B, nil, nil, nil)
-- SASS highlighting
highlight("sassidChar", theme.base08, nil, nil, nil)
highlight("sassClassChar", theme.base09, nil, nil, nil)
highlight("sassInclude", theme.base0E, nil, nil, nil)
highlight("sassMixing", theme.base0E, nil, nil, nil)
highlight("sassMixinName", 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)
-- Java highlighting
highlight("javaOperator", theme.base0D, nil, nil, nil)
-- LspDiagnostic base highlight group
highlight("LspDiagnosticsDefaultError", theme.base08, nil, nil, nil)
highlight("LspDiagnosticsDefaultWarning", theme.base0A, nil, nil, nil)
highlight("LspDiagnosticsDefaultInformation", theme.base0D, nil, nil, nil)
highlight("LspDiagnosticsDefaultHint", theme.base0C, nil, nil, nil)
-- TODO
-- nvim.command 'syntax on'
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,
})