local nvim = require 'nvim' 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 nvim.fn.has("nvim") then nvim.g.terminal_color_0 = "#"..theme.base00 nvim.g.terminal_color_1 = "#"..theme.base08 nvim.g.terminal_color_2 = "#"..theme.base0B nvim.g.terminal_color_3 = "#"..theme.base0A nvim.g.terminal_color_4 = "#"..theme.base0D nvim.g.terminal_color_5 = "#"..theme.base0E nvim.g.terminal_color_6 = "#"..theme.base0C nvim.g.terminal_color_7 = "#"..theme.base05 nvim.g.terminal_color_8 = "#"..theme.base03 nvim.g.terminal_color_9 = "#"..theme.base08 nvim.g.terminal_color_10 = "#"..theme.base0B nvim.g.terminal_color_11 = "#"..theme.base0A nvim.g.terminal_color_12 = "#"..theme.base0D nvim.g.terminal_color_13 = "#"..theme.base0E nvim.g.terminal_color_14 = "#"..theme.base0C nvim.g.terminal_color_15 = "#"..theme.base07 if nvim.o.background == "light" then nvim.g.terminal_color_background = "#"..theme.base05 nvim.g.terminal_color_foreground = "#"..theme.base0B else nvim.g.terminal_color_background = "#"..theme.base00 nvim.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, })