diff --git a/after/ftplugin/markdown.vim b/after/ftplugin/markdown.vim deleted file mode 100644 index d99fa48..0000000 --- a/after/ftplugin/markdown.vim +++ /dev/null @@ -1,34 +0,0 @@ -function! Title_level(lnum) - let l:line = getline(a:lnum) - let l:hash = matchstr(l:line, '^#*') - let l:count = len(l:hash) - return l:count -endfunction - -function! Is_empty(lnum) - let l:line = getline(a:lnum) - if match(l:line, '^\s*$') != -1 - return 1 - endif - return 0 -endfunction - -function! Markdown_fold(lnum) - let l:level = Title_level(a:lnum) - if l:level != 0 - return max([l:level - 1, 0]) - endif - let l:empty = Is_empty(a:lnum) - if l:empty == 1 - let l:next_level = Title_level(a:lnum + 1) - if l:next_level != 0 - return max([l:next_level - 2, 0]) - endif - endif - let l:prev_fold = foldlevel(a:lnum - 1) - " return l:prev_fold - return "=" -endfunction - -setlocal foldmethod=expr -setlocal foldexpr=Markdown_fold(v:lnum) diff --git a/after/ftplugin/python.vim b/after/ftplugin/python.vim deleted file mode 100644 index 6f3924d..0000000 --- a/after/ftplugin/python.vim +++ /dev/null @@ -1,4 +0,0 @@ -set expandtab -let g:ale_python_flake8_options = '--ignore=E501,E402' -let b:ale_linters = ['flake8'] -let b:ale_fixers = ['black', 'remove_trailing_lines', 'trim_whitespace'] diff --git a/after/ftplugin/r.vim b/after/ftplugin/r.vim deleted file mode 100644 index 4e9c398..0000000 --- a/after/ftplugin/r.vim +++ /dev/null @@ -1,4 +0,0 @@ -let b:ale_linters = ['lintr'] -let b:ale_fixers = ['styler'] -let b:ale_fix_on_save = 1 -let R_assign=0 diff --git a/after/ftplugin/rmd.vim b/after/ftplugin/rmd.vim deleted file mode 100644 index 854bed5..0000000 --- a/after/ftplugin/rmd.vim +++ /dev/null @@ -1,6 +0,0 @@ -function! RMarkdown() - let filename = expand("%:t") - execute '!echo "suppressMessages(require(rmarkdown));render('."'".filename."'".')" | '.g:R_ENV.' --vanilla --quiet' -endfunction -command! -nargs=0 RMarkdown :call RMarkdown() -nnoremap p :RMarkdown diff --git a/after/queries/css/highlights.scm b/after/queries/css/highlights.scm new file mode 100644 index 0000000..2fca0ca --- /dev/null +++ b/after/queries/css/highlights.scm @@ -0,0 +1,8 @@ +; extends +((pseudo_class_selector) @type (#set! "priority" 125)) +((class_selector) @type (#set! "priority" 125)) +((plain_value) @constant (#set! "priority" 125)) +((id_selector) @constructor (#set! "priority" 125)) +(tag_name) @tag +(unit) @keyword +(property_name) @field diff --git a/after/queries/javascript/highlights.scm b/after/queries/javascript/highlights.scm new file mode 100644 index 0000000..530b26f --- /dev/null +++ b/after/queries/javascript/highlights.scm @@ -0,0 +1,5 @@ +; extends + +(jsx_self_closing_element (identifier) @tag (#set! "priority" 127)) +(jsx_opening_element (identifier) @tag (#set! "priority" 127)) +(jsx_closing_element (identifier) @tag (#set! "priority" 127)) diff --git a/after/queries/lua/highlights.scm b/after/queries/lua/highlights.scm new file mode 100644 index 0000000..51d101d --- /dev/null +++ b/after/queries/lua/highlights.scm @@ -0,0 +1,3 @@ +; extends + +(function_call (identifier) @function (#set! "priority" 130)) diff --git a/after/queries/scss/highlights.scm b/after/queries/scss/highlights.scm new file mode 100644 index 0000000..57bff16 --- /dev/null +++ b/after/queries/scss/highlights.scm @@ -0,0 +1,2 @@ +; extends +((nesting_selector) @keyword (#set! "priority" 125)) diff --git a/after/queries/tsx/highlights.scm b/after/queries/tsx/highlights.scm new file mode 100644 index 0000000..530b26f --- /dev/null +++ b/after/queries/tsx/highlights.scm @@ -0,0 +1,5 @@ +; extends + +(jsx_self_closing_element (identifier) @tag (#set! "priority" 127)) +(jsx_opening_element (identifier) @tag (#set! "priority" 127)) +(jsx_closing_element (identifier) @tag (#set! "priority" 127)) diff --git a/after/syntax/dirvish.vim b/after/syntax/dirvish.vim deleted file mode 100644 index f49e9b4..0000000 --- a/after/syntax/dirvish.vim +++ /dev/null @@ -1,7 +0,0 @@ -hi! link DirvishGitModified orange -hi! link DirvishGitStaged yellow -hi! link DirvishGitRenamed magenta -hi! link DirvishGitUnmerged violet -hi! link DirvishGitIgnored base2 -hi! link DirvishGitUntracked base2 -hi! link DirvishGitUntrackedDir DirvishPathTail diff --git a/after/syntax/markdown.vim b/after/syntax/markdown.vim deleted file mode 100644 index 31eee89..0000000 --- a/after/syntax/markdown.vim +++ /dev/null @@ -1,178 +0,0 @@ -" Read the HTML syntax to start with -if v:version < 600 - so :p:h/html.vim -else - runtime! syntax/html.vim - - if exists('b:current_syntax') - unlet b:current_syntax - endif -endif - -if v:version < 600 - syntax clear -elseif exists('b:current_syntax') - finish -endif - -" don't use standard HiLink, it will not work with included syntax files -if v:version < 508 - command! -nargs=+ HtmlHiLink hi link -else - command! -nargs=+ HtmlHiLink hi def link -endif - -syn spell toplevel -syn case ignore -syn sync linebreaks=1 - -let s:conceal = '' -let s:concealends = '' -let s:concealcode = '' -if has('conceal') && get(g:, 'vim_markdown_conceal', 1) - let s:conceal = ' conceal' - let s:concealends = ' concealends' -endif -if has('conceal') && get(g:, 'vim_markdown_conceal_code_blocks', 1) - let s:concealcode = ' concealends' -endif - -" additions to HTML groups -if get(g:, 'vim_markdown_emphasis_multiline', 1) - let s:oneline = '' -else - let s:oneline = ' oneline' -endif -syn region mkdItalic matchgroup=mkdItalic start="\%(\*\|_\)" end="\%(\*\|_\)" -syn region mkdBold matchgroup=mkdBold start="\%(\*\*\|__\)" end="\%(\*\*\|__\)" -syn region mkdBoldItalic matchgroup=mkdBoldItalic start="\%(\*\*\*\|___\)" end="\%(\*\*\*\|___\)" -execute 'syn region htmlItalic matchgroup=mkdItalic start="\%(^\|\s\)\zs\*\ze[^\\\*\t ]\%(\%([^*]\|\\\*\|\n\)*[^\\\*\t ]\)\?\*\_W" end="[^\\\*\t ]\zs\*\ze\_W" keepend contains=@Spell' . s:oneline . s:concealends -execute 'syn region htmlItalic matchgroup=mkdItalic start="\%(^\|\s\)\zs_\ze[^\\_\t ]" end="[^\\_\t ]\zs_\ze\_W" keepend contains=@Spell' . s:oneline . s:concealends -execute 'syn region htmlBold matchgroup=mkdBold start="\%(^\|\s\)\zs\*\*\ze\S" end="\S\zs\*\*" keepend contains=@Spell' . s:oneline . s:concealends -execute 'syn region htmlBold matchgroup=mkdBold start="\%(^\|\s\)\zs__\ze\S" end="\S\zs__" keepend contains=@Spell' . s:oneline . s:concealends -execute 'syn region htmlBoldItalic matchgroup=mkdBoldItalic start="\%(^\|\s\)\zs\*\*\*\ze\S" end="\S\zs\*\*\*" keepend contains=@Spell' . s:oneline . s:concealends -execute 'syn region htmlBoldItalic matchgroup=mkdBoldItalic start="\%(^\|\s\)\zs___\ze\S" end="\S\zs___" keepend contains=@Spell' . s:oneline . s:concealends - -" [link](URL) | [link][id] | [link][] | ![image](URL) -syn region mkdFootnotes matchgroup=mkdDelimiter start="\[^" end="\]" -execute 'syn region mkdID matchgroup=mkdDelimiter start="\[" end="\]" contained oneline' . s:conceal -execute 'syn region mkdURL matchgroup=mkdDelimiter start="(" end=")" contained oneline' . s:conceal -execute 'syn region mkdLink matchgroup=mkdDelimiter start="\\\@ ]*>" end=">" - -" Link definitions: [id]: URL (Optional Title) -syn region mkdLinkDef matchgroup=mkdDelimiter start="^ \{,3}\zs\[\^\@!" end="]:" oneline nextgroup=mkdLinkDefTarget skipwhite -syn region mkdLinkDefTarget start="<\?\zs\S" excludenl end="\ze[>[:space:]\n]" contained nextgroup=mkdLinkTitle,mkdLinkDef skipwhite skipnl oneline -syn region mkdLinkTitle matchgroup=mkdDelimiter start=+"+ end=+"+ contained -syn region mkdLinkTitle matchgroup=mkdDelimiter start=+'+ end=+'+ contained -syn region mkdLinkTitle matchgroup=mkdDelimiter start=+(+ end=+)+ contained - -"HTML headings -syn region htmlH1 matchgroup=mkdHeading start="^\s*#" end="$" contains=mkdLink,mkdInlineURL,@Spell -syn region htmlH2 matchgroup=mkdHeading start="^\s*##" end="$" contains=mkdLink,mkdInlineURL,@Spell -syn region htmlH3 matchgroup=mkdHeading start="^\s*###" end="$" contains=mkdLink,mkdInlineURL,@Spell -syn region htmlH4 matchgroup=mkdHeading start="^\s*####" end="$" contains=mkdLink,mkdInlineURL,@Spell -syn region htmlH5 matchgroup=mkdHeading start="^\s*#####" end="$" contains=mkdLink,mkdInlineURL,@Spell -syn region htmlH6 matchgroup=mkdHeading start="^\s*######" end="$" contains=mkdLink,mkdInlineURL,@Spell -syn match htmlH1 /^.\+\n=\+$/ contains=mkdLink,mkdInlineURL,@Spell -syn match htmlH2 /^.\+\n-\+$/ contains=mkdLink,mkdInlineURL,@Spell - -"define Markdown groups -syn match mkdLineBreak / \+$/ -syn region mkdBlockquote start=/^\s*>/ end=/$/ contains=mkdLink,mkdInlineURL,mkdLineBreak,@Spell -execute 'syn region mkdCode matchgroup=mkdCodeDelimiter start=/\(\([^\\]\|^\)\\\)\@]*\)\\\@" end=""' . s:concealcode -execute 'syn region mkdCode matchgroup=mkdCodeDelimiter start="]*\)\\\@" end=""' . s:concealcode -syn region mkdFootnote start="\[^" end="\]" -syn match mkdCode /^\s*\n\(\(\s\{8,}[^ ]\|\t\t\+[^\t]\).*\n\)\+/ -syn match mkdCode /\%^\(\(\s\{4,}[^ ]\|\t\+[^\t]\).*\n\)\+/ -syn match mkdCode /^\s*\n\(\(\s\{4,}[^ ]\|\t\+[^\t]\).*\n\)\+/ contained -syn match mkdListItem /^\s*\%([-*+]\|\d\+\.\)\ze\s\+/ contained nextgroup=mkdListItemCheckbox -syn match mkdListItemCheckbox /\[[xXoO ]\]\ze\s\+/ contained contains=mkdListItem -syn region mkdListItemLine start="^\s*\%([-*+]\|\d\+\.\)\s\+" end="$" oneline contains=@mkdNonListItem,mkdListItem,mkdListItemCheckbox,@Spell -syn region mkdNonListItemBlock start="\(\%^\(\s*\([-*+]\|\d\+\.\)\s\+\)\@!\|\n\(\_^\_$\|\s\{4,}[^ ]\|\t+[^\t]\)\@!\)" end="^\(\s*\([-*+]\|\d\+\.\)\s\+\)\@=" contains=@mkdNonListItem,@Spell -syn match mkdRule /^\s*\*\s\{0,1}\*\s\{0,1}\*\(\*\|\s\)*$/ -syn match mkdRule /^\s*-\s\{0,1}-\s\{0,1}-\(-\|\s\)*$/ -syn match mkdRule /^\s*_\s\{0,1}_\s\{0,1}_\(_\|\s\)*$/ - -" YAML frontmatter -if get(g:, 'vim_markdown_frontmatter', 0) - syn include @yamlTop syntax/yaml.vim - syn region Comment matchgroup=mkdDelimiter start="\%^---$" end="^\(---\|\.\.\.\)$" contains=@yamlTop keepend - unlet! b:current_syntax -endif - -if get(g:, 'vim_markdown_toml_frontmatter', 0) - try - syn include @tomlTop syntax/toml.vim - syn region Comment matchgroup=mkdDelimiter start="\%^+++$" end="^+++$" transparent contains=@tomlTop keepend - unlet! b:current_syntax - catch /E484/ - syn region Comment matchgroup=mkdDelimiter start="\%^+++$" end="^+++$" - endtry -endif - -if get(g:, 'vim_markdown_json_frontmatter', 0) - try - syn include @jsonTop syntax/json.vim - syn region Comment matchgroup=mkdDelimiter start="\%^{$" end="^}$" contains=@jsonTop keepend - unlet! b:current_syntax - catch /E484/ - syn region Comment matchgroup=mkdDelimiter start="\%^{$" end="^}$" - endtry -endif - -if get(g:, 'vim_markdown_math', 0) - syn include @tex syntax/tex.vim - syn region mkdMath start="\\\@ ` in C) + set_hl('@type.qualifier', { link = 'Keyword' }) -- type qualifiers (e.g. `const`) + set_hl('@attribute', { link = 'Function' }) -- attribute annotations (e.g. Python decorators) + set_hl('@property', { link = '@variable.member' }) -- the key in key/value pairs + + -- Functions + set_hl('@function', { link = 'Function' }) -- function definitions + set_hl('@function.builtin', { link = 'Function' }) -- built-in functions + set_hl('@function.call', { link = 'Function' }) -- function calls + set_hl('@function.macro', { link = 'Function' }) -- preprocessor macros + set_hl('@function.method', { link = 'Function' }) -- method definitions + set_hl('@function.method.call', { link = 'Function' }) -- method calls + set_hl('@constructor', { link = 'Function' }) -- constructor calls and definitions + set_hl('@operator', { link = 'Operator' }) -- symbolic operators (e.g. `+` / `*`) + + -- Keywords + set_hl('@keyword', { link = 'Keyword' }) -- keywords not fitting into specific categories + set_hl('@keyword.coroutine', { link = 'Statement' }) -- keywords related to coroutines (e.g. `go` in Go, `async/await` in Python) + set_hl('@keyword.function', { link = 'Keyword' }) -- keywords that define a function (e.g. `func` in Go, `def` in Python) + set_hl('@keyword.operator', { link = 'Operator' }) -- operators that are English words (e.g. `and` / `or`) + set_hl('@keyword.import', { link = 'Include' }) -- keywords for including modules (e.g. `import` / `from` in Python) + set_hl('@keyword.storage', { link = 'StorageClass' }) -- modifiers that affect storage in memory or life-time + set_hl('@keyword.repeat', { link = 'Repeat' }) -- keywords related to loops (e.g. `for` / `while`) + set_hl('@keyword.return', { link = 'Statement' }) -- keywords like `return` and `yield` + set_hl('@keyword.debug', { link = 'Debug' }) -- keywords related to debugging + set_hl('@keyword.exception', { link = 'Exception' }) -- keywords related to exceptions (e.g. `throw` / `catch`) + set_hl('@keyword.conditional', { link = 'Conditional' }) -- keywords related to conditionals (e.g. `if` / `else`) + set_hl('@keyword.conditional.ternary', { link = 'Conditional' }) -- ternary operator (e.g. `?` / `:`) + set_hl('@keyword.directive', { link = 'PreProc' }) -- various preprocessor directives & shebangs + set_hl('@keyword.directive.define', { link = 'Define' }) -- preprocessor definition directives + + -- Punctuations + set_hl('@punctuation.delimiter', { link = 'Delimiter' }) -- delimiters (e.g. `;` / `.` / `,`) + set_hl('@punctuation.bracket', { link = 'Delimiter' }) -- brackets (e.g. `()` / `{}` / `[]`) + set_hl('@punctuation.special', { link = 'Delimiter' }) -- special symbols (e.g. `{}` in string interpolation) + + -- Comments + set_hl('@comment', { link = 'Comment' }) -- line and block comments + set_hl('@comment.documentation', { link = 'Comment' }) -- comments documenting code + set_hl('@comment.error', { fg = c.error }) -- error-type comments (e.g. `ERROR`, `FIXME`, `DEPRECATED:`) + set_hl('@comment.warning', { fg = c.warning }) -- warning-type comments (e.g. `WARNING:`, `FIX:`, `HACK:`) + set_hl('@comment.todo', { link = 'Todo' }) -- todo-type comments (e.g. `TODO:`, `WIP:`, `FIXME:`) + set_hl('@comment.note', { fg = c.info }) -- note-type comments (e.g. `NOTE:`, `INFO:`, `XXX`) + + -- Markups + set_hl('@markup.strong', { fg = c.yellow }) -- bold text + set_hl('@markup.italic', { fg = c.yellow, italic = true }) -- italic text + set_hl('@markup.strikethrough', { fg = c.base01, strikethrough = true }) -- struck-through text + set_hl('@markup.underline', { link = 'Underlined' }) -- underlined text (only for literal underline markup!) + set_hl('@markup.heading', { link = 'Title' }) -- headings, titles (including markers) + set_hl('@markup.quote', { fg = c.cyan }) -- block quotes + set_hl('@markup.math', { link = 'Number' }) -- math environments (e.g. `$ ... $` in LaTeX) + set_hl('@markup.environment', { fg = c.base0 }) -- environments (e.g. in LaTeX) + set_hl('@markup.link', { link = 'Underlined' }) -- text references, footnotes, citations, etc. + set_hl('@markup.link.label', { link = 'Constant' }) -- link, reference descriptions + set_hl('@markup.link.url', { link = 'Underlined' }) -- URL-style links + set_hl('@markup.raw', { fg = c.base0 }) -- literal or verbatim text (e.g., inline code) + set_hl('@markup.raw.block', { fg = c.base0 }) -- literal or verbatim text as a stand-alone block (use priority 90 for blocks with injections) + set_hl('@markup.list', { link = 'Delimiter' }) -- list markers + set_hl('@markup.list.checked', { link = 'Delimiter' }) -- checked todo-style list markers + set_hl('@markup.list.unchecked', { link = 'Delimiter' }) -- unchecked todo-style list markers + + -- Diffs + set_hl('@diff.plus', { fg = c.add }) -- added text (for diff files) + set_hl('@diff.minus', { fg = c.delete }) -- deleted text (for diff files) + set_hl('@diff.delta', { fg = c.change }) -- changed text (for diff files) + + -- Tags + set_hl('@tag', { fg = c.blue, bold = true }) -- XML-style tag names (and similar) + set_hl('@tag.attribute', { fg = c.violet }) -- XML-style tag attributes + set_hl('@tag.delimiter', { fg = c.base01 }) -- XML-style tag delimiters +end diff --git a/lua/solarized/themes/default/whichkey.lua b/lua/solarized/themes/default/whichkey.lua new file mode 100644 index 0000000..41b5014 --- /dev/null +++ b/lua/solarized/themes/default/whichkey.lua @@ -0,0 +1,12 @@ +return function(c) + local utils = require('solarized.utils') + local set_hl = utils.set_hl + + set_hl('WhichKey', { fg = c.base0 }) -- the key + set_hl('WhichKeyGroup', { fg = c.blue }) -- a group + set_hl('WhichKeySeparator', { fg = c.magenta }) -- the separator between the key and its label + set_hl('WhichKeyDesc', { fg = c.base2 }) -- the label of the key + -- set_hl('WhichKeyFloat') -- Normal in the popup window + -- set_hl('WhichKeyBorder', { link = 'WinSeparator' }) + -- set_hl('WhichKeyValue') -- used by plugins that provide values +end diff --git a/lua/solarized/themes/neo/bufferline.lua b/lua/solarized/themes/neo/bufferline.lua new file mode 100644 index 0000000..085d98d --- /dev/null +++ b/lua/solarized/themes/neo/bufferline.lua @@ -0,0 +1,16 @@ +return function(c, config) + local utils = require('solarized.utils') + local set_hl = utils.set_hl + + -- When `termguicolors` is enabled, this plugin is designed to work automatically, + -- deriving colours from the user's theme. + -- + -- My attempt to fix bufferline on transparent background + if config.transparent then + set_hl('BufferLineFill', { bg = c.base02 }) + set_hl('BufferLineBufferSelected', { fg = c.base2, italic = true }) + set_hl('BufferLineSeparator', { fg = c.base02 }) + set_hl('BufferLineSeparatorSelected', { fg = c.base02 }) + set_hl('BufferLineSeparatorVisible', { fg = c.base02 }) + end +end diff --git a/lua/solarized/themes/neo/cmp.lua b/lua/solarized/themes/neo/cmp.lua new file mode 100644 index 0000000..39e540f --- /dev/null +++ b/lua/solarized/themes/neo/cmp.lua @@ -0,0 +1,36 @@ +return function(c) + local utils = require('solarized.utils') + local set_hl = utils.set_hl + + -- set_hl('CmpItemAbbr') -- Highlight group for unmatched characters of each completion field. + set_hl('CmpItemAbbrDeprecated', { fg = c.base1, strikethrough = true }) -- Highlight group for unmatched characters of each deprecated completion field. + set_hl('CmpItemAbbrMatch', { link = 'IncSearch' }) -- Highlight group for matched characters of each completion field. + set_hl('CmpItemAbbrMatchFuzzy', { link = 'IncSearch' }) -- Highlight group for fuzzy-matched characters of each completion field. + -- set_hl('CmpItemKind') -- Highlight group for the kind of the field. + -- set_hl('CmpItemMenu') -- The menu field's highlight group. + + set_hl('CmpItemKindReference', { link = 'Underlined' }) + set_hl('CmpItemKindUnit', { link = 'Number' }) + set_hl('CmpItemKindEnum', { link = 'Type' }) + set_hl('CmpItemKindField', { link = '@field' }) + set_hl('CmpItemKindClass', { link = 'Type' }) + set_hl('CmpItemKindFile', { fg = c.base0 }) + set_hl('CmpItemKindProperty', { link = '@field' }) + set_hl('CmpItemKindMethod', { link = 'Function' }) + set_hl('CmpItemKindKeyword', { link = 'Keyword' }) + set_hl('CmpItemKindFolder', { link = 'Directory' }) + set_hl('CmpItemKindSnippet', { link = 'Keyword' }) + set_hl('CmpItemKindVariable', { link = 'Identifier' }) + set_hl('CmpItemKindStruct', { link = 'Structure' }) + set_hl('CmpItemKindInterface', { link = 'Type' }) + set_hl('CmpItemKindTypeParameter', { link = 'Type' }) + set_hl('CmpItemKindEnumMember', { link = 'Constant' }) + set_hl('CmpItemKindEvent', { fg = c.base2 }) + set_hl('CmpItemKindConstructor', { link = '@constructor' }) + set_hl('CmpItemKindConstant', { link = 'Constant' }) + set_hl('CmpItemKindModule', { link = '@namespace' }) + set_hl('CmpItemKindValue', { fg = c.base2 }) + set_hl('CmpItemKindColor', { fg = c.magenta }) + set_hl('CmpItemKindFunction', { link = 'Function' }) + set_hl('CmpItemKindText', { link = 'String' }) +end diff --git a/lua/solarized/themes/neo/dashboard.lua b/lua/solarized/themes/neo/dashboard.lua new file mode 100644 index 0000000..b1e5b51 --- /dev/null +++ b/lua/solarized/themes/neo/dashboard.lua @@ -0,0 +1,23 @@ +return function(c) + local utils = require('solarized.utils') + local set_hl = utils.set_hl + + -- general + set_hl('DashboardHeader', { fg = c.red }) + set_hl('DashboardFooter', { fg = c.violet }) + + -- Hyper + set_hl('DashboardProjectTitle', { fg = c.blue }) + set_hl('DashboardProjectTitleIcon', { link = 'DashboardProjectTitle' }) + set_hl('DashboardProjectIcon', { link = 'Directory' }) + set_hl('DashboardMruTitle', { link = 'DashboardProjectTitle' }) + set_hl('DashboardMruIcon', { link = 'DashboardMruTitle' }) + set_hl('DashboardFiles', { fg = c.base0 }) + set_hl('DashboardShotCutIcon', { fg = c.magenta }) + + -- Doom theme + set_hl('DashboardDesc', { fg = c.base00 }) + set_hl('DashboardKey', { fg = c.magenta }) + set_hl('DashboardIcon', { link = 'Directory' }) + set_hl('DashboardShotCut', { fg = c.base00 }) +end diff --git a/lua/solarized/themes/neo/diagnostic.lua b/lua/solarized/themes/neo/diagnostic.lua new file mode 100644 index 0000000..c446368 --- /dev/null +++ b/lua/solarized/themes/neo/diagnostic.lua @@ -0,0 +1,32 @@ +return function(c) + local utils = require('solarized.utils') + local set_hl = utils.set_hl + + set_hl('DiagnosticError', { fg = c.error }) -- Used as the base highlight group.(except Underline) + set_hl('DiagnosticWarn', { fg = c.warning }) --Used as the base highlight group.(except Underline) + set_hl('DiagnosticInfo', { fg = c.info }) -- Used as the base highlight group.(except Underline) + set_hl('DiagnosticHint', { fg = c.hint }) -- Used as the base highlight group.(except Underline) + set_hl('DiagnosticOk', { fg = c.cyan }) -- Used as the base highlight group.(except Underline) + -- set_hl('DiagnosticVirtualTextError') -- Used for "Error" diagnostic virtual text. + -- set_hl('DiagnosticVirtualTextWarn') -- Used for "Warn" diagnostic virtual text. + -- set_hl('DiagnosticVirtualTextInfo') -- Used for "Info" diagnostic virtual text. + -- set_hl('DiagnosticVirtualTextHint') -- Used for "Hint" diagnostic virtual text. + -- set_hl('DiagnosticVirtualTextOk') -- Used for "Ok" diagnostic virtual text. + set_hl('DiagnosticUnderlineError', { fg = c.error, sp = c.error }) --Used to underline "Error" diagnostics. + set_hl('DiagnosticUnderlineWarn', { fg = c.warning, sp = c.warning }) -- Used to underline "Warn" diagnostics. + set_hl('DiagnosticUnderlineInfo', { fg = c.info, sp = c.info }) -- Used to underline "Info" diagnostics. + set_hl('DiagnosticUnderlineHint', { fg = c.hint, sp = c.hint }) -- Used to underline "Hint" diagnostics. + set_hl('DiagnosticUnderlineOk', { fg = c.cyan, sp = c.cyan }) -- Used to underline "Ok" diagnostics. + -- set_hl('DiagnosticFloatingError') -- Used to color "Error" diagnostic messages in diagnostics float. + -- set_hl('DiagnosticFloatingWarn') -- Used to color "Warn" diagnostic messages in diagnostics float. + -- set_hl('DiagnosticFloatingInfo') -- Used to color "Info" diagnostic messages in diagnostics float. + -- set_hl('DiagnosticFloatingHint') -- Used to color "Hint" diagnostic messages in diagnostics float. + -- set_hl('DiagnosticFloatingOk') -- Used to color "Ok" diagnostic messages in diagnostics float. + -- set_hl('DiagnosticSignError') -- Used for "Error" signs in sign column. + -- set_hl('DiagnosticSignWarn') -- Used for "Warn" signs in sign column. + -- set_hl('DiagnosticSignInfo') -- Used for "Info" signs in sign column. + -- set_hl('DiagnosticSignHint') -- Used for "Hint" signs in sign column. + -- set_hl('DiagnosticSignOk') -- Used for "Ok" signs in sign column. + -- set_hl('DiagnosticDeprecated') -- Used for deprecated or obsolete code. + -- set_hl('DiagnosticUnnecessary') -- Used for unnecessary or unused code. +end diff --git a/lua/solarized/themes/neo/editor.lua b/lua/solarized/themes/neo/editor.lua new file mode 100644 index 0000000..b1284ca --- /dev/null +++ b/lua/solarized/themes/neo/editor.lua @@ -0,0 +1,109 @@ +return function(c, config) + local utils = require('solarized.utils') + local darken = require('solarized.utils.colors').darken + local base04 = darken(c.base03, 10) + local set_hl = utils.set_hl + + if config.transparent then + set_hl('ColorColumn', { bg = c.base02 }) -- used for columns + else + set_hl('ColorColumn', { bg = base04 }) -- used for columns + end + + set_hl('Conceal', { fg = c.blue }) -- placeholder characters + set_hl('CurSearch', { fg = c.base2, bg = c.base02 }) -- highlight under cursor + set_hl('Cursor', { fg = c.base03, bg = c.cyan }) -- character under cursor + set_hl('lCursor', { link = 'Cursor' }) -- character under the cursor + set_hl('CursorIM', { link = 'Cursor' }) -- like cursor, but IME mode + set_hl('CursorColumn', { link = 'ColorColumn' }) -- screen-column at the cursor + set_hl('CursorLine') -- screen-line at the cursor + set_hl('Directory', { fg = c.orange }) -- directory names + set_hl('DiffAdd', { fg = c.add }) -- Added line + set_hl('DiffChange', { fg = c.change }) -- Changed line + set_hl('DiffDelete', { fg = c.base03, bg = c.delete }) -- Deleted line + set_hl('DiffText', { fg = c.blue, reverse = true }) -- Changed Text + set_hl('EndOfBuffer', { fg = c.base03 }) -- Filler lines (~) + set_hl('TermCursor', { link = 'Cursor' }) -- Cursor in a focused terminal + set_hl('TermCursorNC', { fg = c.base03, bg = c.base0 }) -- Cursor in an unfocused terminal + set_hl('ErrorMsg', { fg = c.error }) -- Error messages on the command line + set_hl( + 'WinSeparator', + { fg = c.cyan, bg = base04 }, + { transparent = config.transparent } + ) -- Separators between window splits + set_hl('Folded', { fg = c.base0, bg = c.base02 }) -- Line used for closed folds + set_hl('FoldColumn', { fg = c.base0, bg = base04 }) -- 'foldcolumn' + set_hl( + 'SignColumn', + { fg = c.base0, bg = c.base03 }, + { transparent = config.transparent } + ) -- Column were signs are displayed + set_hl( + 'IncSearch', + { fg = c.base3, bg = base04, bold = true }, + { transparent = config.transparent } + ) -- 'incsearch' highlighting, also for the text replaced + set_hl('Substitute', { fg = c.orange, reverse = true }) -- :substitute replacement text highlight + set_hl( + 'LineNr', + { fg = c.base01, bg = c.base03 }, + { transparent = config.transparent } + ) -- Line number for ":number" and ":#" commands + set_hl('LineNrAbove', { link = 'LineNr' }) -- Line number, above the cursor line + set_hl('LineNrBelow', { link = 'LineNr' }) -- Line number, below the cursor + set_hl( + 'CursorLineNr', + { fg = c.base2, bg = c.base03 }, + { transparent = config.transparent } + ) -- Like LineNr when 'cursorline' is set + set_hl('CursorLineFold', { link = 'FoldColumn' }) -- Like FoldColumn when 'cursorline' is set + set_hl('CursorLineSign', { link = 'SignColumn' }) -- Like SignColumn when 'cursorline' is set + set_hl('MatchParen', { fg = c.base2 }) -- Character under the cursor or just before it + set_hl('ModeMsg', { link = 'Normal' }) -- 'showmode' message (e.g., "-- INSERT --") + set_hl('MsgArea', { link = 'Normal' }) -- 'Area for messages and cmdline' + set_hl('MsgSeparator', { link = 'Normal' }) -- Separator for scrolled messages msgsep. + set_hl('MoreMsg', { fg = c.cyan }) -- more-prompt + set_hl('NonText', { fg = c.base00 }) -- '@' at the end of the window + set_hl( + 'Normal', + { fg = c.base0, bg = c.base03 }, + { transparent = config.transparent } + ) -- Normal text + set_hl('NormalFloat', { fg = c.base0, bg = base04 }) -- Normal text in floating windows + set_hl('FloatBorder', { link = 'WinSeparator' }) -- Border of floating windows. + set_hl('FloatTitle', { fg = c.orange }) -- Title of float windows. + set_hl('NormalNC', { link = 'Normal' }) -- Normal text in non-current windows. + set_hl( + 'Pmenu', + { fg = c.base0, bg = base04 }, + { transparent = config.transparent } + ) -- Popup menu: Normal item + set_hl('PmenuSel', { fg = c.base2 }) -- Popup menu: Selected item + set_hl('PmenuKind', { link = 'Pmenu' }) -- Popup menu: Normal item kind + set_hl('PmenuKindSel', { link = 'PmenuSel' }) -- Popup menu: Selected item kind + set_hl('PmenuExtra', { link = 'Pmenu' }) -- Popup menu: Normal item extra text + set_hl('PmenuExtraSel', { link = 'PmenuSel' }) -- Popup menu: Selected item extra text + set_hl('PmenuSbar', { bg = base04 }) -- Popup menu: Scrollbar + set_hl('PmenuThumb', { bg = c.base1 }) -- Popup menu: Thumb of the scrollbar + set_hl('Question', { fg = c.cyan, bg = c.base03 }) -- hit-enter prompt and yes/no questions. + set_hl('QuickFixLine', { fg = c.base0, bg = c.base03 }) -- Current quickfix item in the quickfix window + set_hl('Search', { bg = c.base02 }) -- Last search pattern highlighting + set_hl('SpecialKey', { fg = c.red }) -- Unprintable characters: Text displayed differently from what it really is. + set_hl('SpellBad', { fg = c.error, sp = c.error, underline = true }) -- Word that is not recognized by the spellchecker. + set_hl('SpellCap', { fg = c.hint, sp = c.hint, underline = true }) -- Word that should start with a capital + set_hl('SpellLocal', { fg = c.info, sp = c.info, underline = true }) -- Word that is recognized by the spellchecker as one that is used in another region + set_hl('SpellRare', { fg = c.warning, sp = c.warning, underline = true }) -- Word that is recognized by the spellchecker as one that is hardly ever used. + set_hl('StatusLine', { fg = c.base1, bg = base04 }) -- Status line of current window. + set_hl('StatusLineNC', { fg = c.base00, bg = base04 }) -- Status lines of not-current windows. + set_hl('TabLine', { bg = base04 }) -- Tab pages line, not active tab page label. + set_hl('TabLineFill', { fg = c.base0, bg = base04 }) -- Tab pages line, where there are no labels. + set_hl('TabLineSel', { fg = c.base2, bg = c.base03 }) -- Tab pages line, active tab page label. + set_hl('Title', { fg = c.orange }) -- Titles for output from ":set all", ":autocmd" etc. + set_hl('Visual', { bg = c.base02 }) -- Visual mode selection. + set_hl('VisualNOS', { link = 'Visual' }) -- Visual mode selection when vim is "Not Owning the Selection". + set_hl('WarningMsg', { fg = c.warning }) -- Warning messages. + set_hl('Whitespace', { fg = c.base01 }) -- "nbsp", "space", "tab", "multispace", "lead" and "trail" in 'listchars'. + set_hl('WildMenu', { bg = c.base02 }) -- Current match in 'wildmenu' completion. + set_hl('WinBar', { link = 'Pmenu' }) -- Window bar of current window. + set_hl('WinBarNC', { link = 'WinBar' }) -- Window bar of not-current windows. +end diff --git a/lua/solarized/themes/neo/gitsign.lua b/lua/solarized/themes/neo/gitsign.lua new file mode 100644 index 0000000..d2b79a0 --- /dev/null +++ b/lua/solarized/themes/neo/gitsign.lua @@ -0,0 +1,8 @@ +return function(c) + local utils = require('solarized.utils') + local set_hl = utils.set_hl + + set_hl('GitSignsAdd', { fg = c.add }) -- Used for the text of 'add' signs + set_hl('GitSignsChange', { fg = c.change }) -- Used for the text of 'change' signs + set_hl('GitSignsDelete', { fg = c.delete }) -- Used for the text of 'delete' signs +end diff --git a/lua/solarized/themes/neo/hop.lua b/lua/solarized/themes/neo/hop.lua new file mode 100644 index 0000000..b99ba00 --- /dev/null +++ b/lua/solarized/themes/neo/hop.lua @@ -0,0 +1,9 @@ +return function(c) + local utils = require('solarized.utils') + local set_hl = utils.set_hl + + set_hl('HopNextKey', { fg = c.magenta }) + set_hl('HopNextKey1', { fg = c.blue }) + set_hl('HopNextKey2', { fg = '#1b6294' }) + set_hl('HopUnmatched', { fg = c.base01 }) +end diff --git a/lua/solarized/themes/neo/indentblankline.lua b/lua/solarized/themes/neo/indentblankline.lua new file mode 100644 index 0000000..4f8c122 --- /dev/null +++ b/lua/solarized/themes/neo/indentblankline.lua @@ -0,0 +1,32 @@ +return function(c) + local utils = require('solarized.utils') + local colortool = require('solarized.utils.colors') + local darken = colortool.darken + local lighten = colortool.lighten + local set_hl = utils.set_hl + + if vim.o.background == 'dark' then + set_hl('IndentBlanklineChar', { fg = darken(c.green, 20) }) -- Highlight of indent character. Default: Whitespace + set_hl('IndentBlanklineSpaceChar', { link = 'IndentBlanklineChar' }) -- Highlight of space character. Default: Whitespace + set_hl('IndentBlanklineContextChar', { fg = c.green }) -- Highlight of indent character when base of current context. Default: Label + set_hl( + 'IndentBlanklineContextSpaceChar', + { link = 'IndentBlanklineContextChar' } + ) -- Highlight of space characters one indent level of the current context. Default: Label + set_hl('IblIndent', { fg = darken(c.green, 20), nocombine = true }) + set_hl('IblScope', { fg = c.green, nocombine = true }) + else + set_hl('IndentBlanklineChar', { fg = lighten(c.blue, 20) }) -- Highlight of indent character. Default: Whitespace + set_hl('IndentBlanklineSpaceChar', { link = 'IndentBlanklineChar' }) -- Highlight of space character. Default: Whitespace + set_hl('IndentBlanklineContextChar', { fg = c.blue }) -- Highlight of indent character when base of current context. Default: Label + set_hl( + 'IndentBlanklineContextSpaceChar', + { link = 'IndentBlanklineContextChar' } + ) -- Highlight of space characters one indent level of the current context. Default: Label + set_hl('IblIndent', { fg = lighten(c.blue, 20), nocombine = true }) + set_hl('IblScope', { fg = c.blue, nocombine = true }) + end + + -- set_hl('IndentBlanklineSpaceCharBlankline', {}) -- Highlight of space character on blank lines. Default: Whitespace + -- set_hl('IndentBlanklineContextStart', {}) -- Highlight of the first line of the current context. Default: Label +end diff --git a/lua/solarized/themes/neo/lsp.lua b/lua/solarized/themes/neo/lsp.lua new file mode 100644 index 0000000..b7de3bb --- /dev/null +++ b/lua/solarized/themes/neo/lsp.lua @@ -0,0 +1,24 @@ +return function(c) + local utils = require('solarized.utils') + local colortool = require('solarized.utils.colors') + local darken = colortool.darken + local lighten = colortool.lighten + local set_hl = utils.set_hl + + set_hl('LspReferenceText', { link = 'Visual' }) -- used for highlighting "text" references + set_hl('LspReferenceRead', { link = 'Visual' }) -- used for highlighting "read" references + set_hl('LspReferenceWrite', { link = 'Visual' }) -- used for highlighting "write" references + + if vim.o.background == 'dark' then + set_hl('LspInlayHint', { fg = darken(c.yellow, 20) }) -- used for highlighting inlay hints + else + set_hl('LspInlayHint', { fg = lighten(c.yellow, 20) }) + end + + -- if you want to me to enable the highlight groups bellow, please send a screenshot for me to see how + -- they look like or how to config for me to test. + + -- set_hl('LspCodelens') -- Used to color the virtual text of the codelens. + -- set_hl('LspCodeLensSeparator') -- Used to color the separator between two or more code lenses. + -- set_hl('LspSignatureActiveParameter') -- Used to highlight the active parameter in the signature help. See +end diff --git a/lua/solarized/themes/neo/lspsaga.lua b/lua/solarized/themes/neo/lspsaga.lua new file mode 100644 index 0000000..4becadc --- /dev/null +++ b/lua/solarized/themes/neo/lspsaga.lua @@ -0,0 +1,55 @@ +return function(c, config) + local utils = require('solarized.utils') + local set_hl = utils.set_hl + + -- Float window + set_hl('SagaNormal', { link = 'Pmenu' }) + set_hl( + 'TitleString', + { fg = c.orange, bold = true, bg = c.base02 }, + { transparent = config.transparent } + ) + + -- Outline + set_hl('OutlineIndent', { fg = c.green }) + + set_hl('SagaWinbarModule', { link = '@namespace' }) + set_hl('SagaWinbarInterface', { link = 'Type' }) + set_hl('SagaWinbarConstructor', { link = '@constructor' }) + set_hl('SagaWinbarStruct', { link = 'Structure' }) + set_hl('SagaWinbarObject', { link = '@field' }) + set_hl('SagaWinbarUnit', { link = 'Number' }) + set_hl('SagaWinbarFile', { fg = c.base0 }) + set_hl('SagaWinbarSnippet', { link = 'Keyword' }) + set_hl('SagaWinbarText', { fg = c.base1 }) + set_hl('SagaWinbarTypeAlias', { link = 'Type' }) + set_hl('SagaWinbarEvent', { fg = c.base2 }) + set_hl('SagaWinbarParameter', { link = '@parameter' }) + set_hl('SagaWinbarKey', { link = '@field' }) + set_hl('SagaWinbarValue', { fg = c.base2 }) + set_hl('SagaWinbarMacro', { link = 'Macro' }) + set_hl('SagaWinbarNumber', { link = 'Number' }) + set_hl('SagaWinbarConstant', { link = 'Constant' }) + set_hl('SagaWinbarFunction', { link = 'Function' }) + set_hl('SagaWinbarEnum', { link = 'Type' }) + set_hl('SagaWinbarField', { link = '@field' }) + set_hl('SagaWinbarProperty', { link = '@field' }) + set_hl('SagaWinbarMethod', { link = 'Function' }) + set_hl('SagaWinbarClass', { link = 'Type' }) + set_hl('SagaWinbarFolder', { link = 'Directory' }) + set_hl('SagaWinbarPackage', { link = 'Directory' }) + set_hl('SagaWinbarStaticMethod', { link = 'Function' }) + set_hl('SagaWinbarTypeParameter', { link = 'Type' }) + set_hl('SagaWinbarEnumMember', { link = 'Constant' }) + set_hl('SagaWinbarOperator', { link = 'Operator' }) + set_hl('SagaWinbarNull', { link = 'Constant' }) + set_hl('SagaWinbarNamespace', { link = '@namespace' }) + set_hl('SagaWinbarArray', { link = 'Delimiter' }) + set_hl('SagaWinbarBoolean', { link = 'Boolean' }) + set_hl('SagaWinbarString', { link = 'String' }) + set_hl('SagaWinbarVariable', { link = 'Identifier' }) + set_hl('SagaWinbarFilename', { fg = c.base0 }) + set_hl('SagaWinbarFolderName', { fg = c.base0 }) + set_hl('SagaWinbarFileIcon', { link = 'Directory' }) + set_hl('SagaWinbarSep', { link = 'Keyword' }) +end diff --git a/lua/solarized/themes/neo/mini.lua b/lua/solarized/themes/neo/mini.lua new file mode 100644 index 0000000..6517866 --- /dev/null +++ b/lua/solarized/themes/neo/mini.lua @@ -0,0 +1,38 @@ +return function(c) + local utils = require('solarized.utils') + local set_hl = utils.set_hl + + -- MiniCursor + set_hl('MiniCursorword', { bg = c.base02 }) + + -- MiniStatusLine + set_hl('MiniStatuslineModeNormal', { fg = c.base03, bg = c.blue }) + set_hl('MiniStatuslineModeInsert', { fg = c.base03, bg = c.green }) + set_hl('MiniStatuslineModeVisual', { fg = c.base03, bg = c.magenta }) + set_hl('MiniStatuslineModeReplace', { fg = c.base03, bg = c.red }) + set_hl('MiniStatuslineModeCommand', { fg = c.base03, bg = c.orange }) + set_hl('MinistatusLineFileName', { fg = c.base0, bg = c.base02 }) + set_hl('MiniStatuslineDevinfo', { fg = c.base03, bg = c.base1 }) + set_hl('MiniStatuslineFileinfo', { fg = c.base03, bg = c.base1 }) + set_hl('MiniStatuslineInactive', { fg = c.base01, bg = c.base03 }) + + -- MiniTabLine + set_hl('MiniTablineCurrent', { fg = c.base2, bg = c.base1 }) + set_hl('MiniTablineVisible', { fg = c.base2, bg = c.base03 }) + set_hl('MiniTablineHidden', { fg = c.base01, bg = c.base03 }) + set_hl('MiniTablineModifiedCurrent', { link = 'MiniTabLineCurrent' }) + set_hl('MiniTablineModifiedVisible', { link = 'MiniTablineVisible' }) + set_hl('MiniTablineModifiedHidden', { link = 'MiniTablineHidden' }) + set_hl('MiniTablineFill', { link = 'NormalFloat' }) + set_hl('MiniTablineTabpagesection', { link = 'NormalFloat' }) + + -- MiniStarter + set_hl('MiniStarterCurrent', { link = 'CursorLine' }) + set_hl('MiniStarterHeader', { fg = c.base00 }) + set_hl('MiniStarterFooter', { fg = c.base00 }) + set_hl('MiniStarterItem', { fg = c.base0 }) + set_hl('MiniStarterItemBullet', { fg = c.blue }) + set_hl('MiniStarterItemPrefix', { fg = c.blue }) + set_hl('MiniStarterSection', { link = 'Title' }) + set_hl('MiniStarterQuery', { fg = c.magenta, bg = 'NONE', bold = true }) +end diff --git a/lua/solarized/themes/neo/navic.lua b/lua/solarized/themes/neo/navic.lua new file mode 100644 index 0000000..d4081cb --- /dev/null +++ b/lua/solarized/themes/neo/navic.lua @@ -0,0 +1,33 @@ +return function(c) + local utils = require('solarized.utils') + local set_hl = utils.set_hl + + set_hl('NavicIconsFile', { fg = c.base00 }) + set_hl('NavicIconsModule', { link = '@namespace' }) + set_hl('NavicIconsNamespace', { link = '@namespace' }) + set_hl('NavicIconsPackage', { link = 'Directory' }) + set_hl('NavicIconsClass', { link = 'Type' }) + set_hl('NavicIconsMethod', { link = 'Type' }) + set_hl('NavicIconsProperty', { link = '@field' }) + set_hl('NavicIconsField', { link = '@field' }) + set_hl('NavicIconsConstructor', { link = '@constructor' }) + set_hl('NavicIconsEnum', { link = 'Type' }) + set_hl('NavicIconsInterface', { link = 'Type' }) + set_hl('NavicIconsFunction', { link = 'Function' }) + set_hl('NavicIconsVariable', { link = 'Identifier' }) + set_hl('NavicIconsConstant', { link = 'Constant' }) + set_hl('NavicIconsString', { link = 'String' }) + set_hl('NavicIconsNumber', { link = 'Number' }) + set_hl('NavicIconsBoolean', { link = 'Boolean' }) + set_hl('NavicIconsArray', { link = 'Delimiter' }) + set_hl('NavicIconsObject', { link = '@field' }) + set_hl('NavicIconsKey', { link = '@field' }) + set_hl('NavicIconsNull', { link = 'Constant' }) + set_hl('NavicIconsEnumMember', { link = 'Constant' }) + set_hl('NavicIconsStruct', { link = 'Structure' }) + set_hl('NavicIconsEvent', { fg = c.base2 }) + set_hl('NavicIconsOperator', { link = 'Operator' }) + set_hl('NavicIconsTypeParameter', { link = '@parameter' }) + set_hl('NavicText', { fg = c.base1 }) + set_hl('NavicSeparator', { link = 'Keyword' }) +end diff --git a/lua/solarized/themes/neo/neogit.lua b/lua/solarized/themes/neo/neogit.lua new file mode 100644 index 0000000..fd368a9 --- /dev/null +++ b/lua/solarized/themes/neo/neogit.lua @@ -0,0 +1,27 @@ +return function(c) + local blend = require('solarized.utils.colors').blend + local utils = require('solarized.utils') + local set_hl = utils.set_hl + local alpha = 0.05 + + set_hl('NeogitCursorLine', { link = 'CursorLine' }) + set_hl('NeogitBranch', { fg = c.magenta }) + set_hl('NeogitRemote', { fg = c.violet }) + set_hl( + 'NeogitHunkHeader', + { fg = c.orange, bg = blend(c.orange, c.base03, alpha) } + ) + set_hl('NeogitHunkHeaderHighlight', { link = 'Title' }) + set_hl('NeogitDiffContextHighlight', { fg = c.base00, bg = c.base03 }) + set_hl('NeogitDiffContext', { fg = c.base00, bg = c.base03 }) + set_hl( + 'NeogitDiffDeleteHighlight', + { fg = c.red, bg = blend(c.red, c.base03, alpha) } + ) + set_hl('NeogitDiffDelete', { fg = c.red }) + set_hl( + 'NeogitDiffAddHighlight', + { fg = c.green, bg = blend(c.green, c.base03, alpha) } + ) + set_hl('NeogitDiffAdd', { fg = c.green }) +end diff --git a/lua/solarized/themes/neo/neotree.lua b/lua/solarized/themes/neo/neotree.lua new file mode 100644 index 0000000..261da66 --- /dev/null +++ b/lua/solarized/themes/neo/neotree.lua @@ -0,0 +1,28 @@ +return function(c, config) + local utils = require('solarized.utils') + local darken = require('solarized.utils.colors').darken + local set_hl = utils.set_hl + + set_hl('NeoTreeNormal', { + fg = c.base0, + }, { transparent = config.transparent }) + set_hl('NeoTreeNormalNC', { link = 'NeoTreeNormal' }) + set_hl('NeoTreeEndOfBuffer', { fg = c.base02 }) + set_hl('NeoTreeRootName', { link = 'Directory' }) + set_hl('NeoTreeFileName', { fg = c.base0 }) + set_hl('NeoTreeFileNameOpened', { link = 'Directory' }) + set_hl('NeoTreeFloatBorder', { link = 'WinSeparator' }) + set_hl('NeoTreeFloatTitle', { link = 'Title' }) + set_hl('NeoTreeGitAdded', { fg = c.add, bg = 'NONE' }) + set_hl('NeoTreeGitConflict', { fg = c.change }) + set_hl('NeoTreeGitDeleted', { fg = c.delete }) + set_hl('NeoTreeGitIgnored', { fg = c.base01, italic = true }) + set_hl('NeoTreeGitModified', { fg = c.change }) + set_hl('NeoTreeGitUnstaged', { fg = c.change }) + set_hl('NeoTreeGitUntracked', { fg = c.change }) + set_hl('NeoTreeGitStaged', { fg = c.add }) + set_hl('NeoTreeIndentMarker', { fg = c.base01 }) + set_hl('NeoTreeDotfile', { fg = c.base01 }) + set_hl('NeoTreeFileStats', { fg = c.base01 }) + set_hl('NeoTreeTitleBar', { fg = darken(c.cyan, 50), bg = c.cyan }) +end diff --git a/lua/solarized/themes/neo/noice.lua b/lua/solarized/themes/neo/noice.lua new file mode 100644 index 0000000..fc42470 --- /dev/null +++ b/lua/solarized/themes/neo/noice.lua @@ -0,0 +1,9 @@ +return function(c) + local set_hl = require('solarized.utils').set_hl + + set_hl('NoiceFormatProgressTodo', { fg = c.base01, reverse = true }) + set_hl('NoiceFormatProgressDone', { fg = c.cyan, reverse = true }) + set_hl('NoiceLspProgressSpinner', { fg = c.cyan }) + set_hl('NoiceLspProgressClient', { fg = c.blue }) + set_hl('NoiceLspProgressTitle', { link = 'Title' }) +end diff --git a/lua/solarized/themes/neo/notify.lua b/lua/solarized/themes/neo/notify.lua new file mode 100644 index 0000000..c5828f7 --- /dev/null +++ b/lua/solarized/themes/neo/notify.lua @@ -0,0 +1,26 @@ +return function(c) + local utils = require('solarized.utils') + local set_hl = utils.set_hl + + set_hl('NotifyBackground', { bg = c.base03 }) + set_hl('NotifyERRORBorder', { fg = c.error }) + set_hl('NotifyWARNBorder', { fg = c.warn }) + set_hl('NotifyINFOBorder', { fg = c.info }) + set_hl('NotifyDEBUGBorder', { fg = c.magenta }) + set_hl('NotifyTRACEBorder', { fg = c.violet }) + set_hl('NotifyERRORIcon', { link = 'NotifyERRORBorder' }) + set_hl('NotifyWARNIcon', { link = 'NotifyWARNBorder' }) + set_hl('NotifyINFOIcon', { link = 'NotifyINFOBorder' }) + set_hl('NotifyDEBUGIcon', { link = 'NotifyDEBUGBorder' }) + set_hl('NotifyTRACEIcon', { link = 'NotifyTRACEBorder' }) + set_hl('NotifyERRORTitle', { link = 'NotifyERRORBorder' }) + set_hl('NotifyWARNTitle', { link = 'NotifyWARNBorder' }) + set_hl('NotifyINFOTitle', { link = 'NotifyINFOBorder' }) + set_hl('NotifyDEBUGTitle', { link = 'NotifyDEBUGTitle' }) + set_hl('NotifyTRACETitle', { link = 'NotifyTRACEBorder' }) + set_hl('NotifyERRORBody', { link = 'Normal' }) + set_hl('NotifyWARNBody', { link = 'Normal' }) + set_hl('NotifyINFOBody', { link = 'Normal' }) + set_hl('NotifyDEBUGBody', { link = 'Normal' }) + set_hl('NotifyTRACEBody', { link = 'Normal' }) +end diff --git a/lua/solarized/themes/neo/semantic.lua b/lua/solarized/themes/neo/semantic.lua new file mode 100644 index 0000000..9af96b2 --- /dev/null +++ b/lua/solarized/themes/neo/semantic.lua @@ -0,0 +1,33 @@ +return function(c, config) + local utils = require('solarized.utils') + local set_hl = utils.set_hl + + -- Default highlight + set_hl('@lsp.type.class', { link = 'Type' }) -- Type + set_hl('@lsp.type.decorator', { link = 'Function' }) -- Function + set_hl('@lsp.type.enum', { link = 'Type' }) -- Type + set_hl('@lsp.type.enumMember', { link = 'Constant' }) -- Constant + set_hl('@lsp.type.function', { link = 'Function' }) -- Function + set_hl('@lsp.type.interface', { link = 'Type' }) -- Type + set_hl('@lsp.type.macro', { link = 'Keyword' }) -- Keyword + set_hl('@lsp.type.method', { link = 'Function' }) -- Function + set_hl('@lsp.type.namespace', { link = 'Constant' }) -- Constant + set_hl( + '@lsp.type.parameter', + { fg = c.orange, italic = true }, + { styles = config.styles.parameters } + ) + set_hl('@lsp.type.property', { fg = c.blue }) -- Property + set_hl('@lsp.type.struct', { link = 'Structure' }) -- Structure + set_hl('@lsp.type.type', { link = 'Type' }) -- Type + set_hl('@lsp.type.typeParameter', { link = 'Type' }) -- Type + set_hl('@lsp.type.variable', { link = 'Identifier' }) -- Identifier + + -- Extra highlight + set_hl('@lsp.typemod.variable.defaultLibrary', { link = 'Constant' }) -- ex: "vim".api.nvim_set_hl + set_hl('@lsp.typemod.variable.readonly', { link = 'Constant' }) -- Constant variables ex: const hello = 'Hello World' + set_hl('@lsp.typemod.variable.global', { link = 'Constant' }) -- Global variables ex: HELLO = 'Hello World' + set_hl('@lsp.typemod.keyword.documentation', { link = 'Keyword' }) -- documentation comments + set_hl('@lsp.typemod.class.documentation', { link = 'Type' }) -- documentation comments + set_hl('@lsp.typemod.property.readonly', { link = 'Constant' }) -- Ex: System."out".println() +end diff --git a/lua/solarized/themes/neo/syntax.lua b/lua/solarized/themes/neo/syntax.lua new file mode 100644 index 0000000..c43149c --- /dev/null +++ b/lua/solarized/themes/neo/syntax.lua @@ -0,0 +1,44 @@ +return function(c, config) + local utils = require('solarized.utils') + local set_hl = utils.set_hl + + set_hl( + 'Comment', + { fg = c.base01, italic = true }, + { styles = config.styles.comments } + ) -- any comment + set_hl('Constant', { fg = c.violet }, { styles = config.styles.constants }) -- any constant + set_hl('String', { fg = c.cyan }) -- a string constant: "this is a string" + set_hl('Character', { link = 'String' }) -- a character constant: 'c', '\n' + set_hl('Number', { fg = c.magenta }, { styles = config.styles.numbers }) -- a number constant: 234, 0xff + set_hl('Boolean', { fg = c.violet }) -- a boolean constant: TRUE, false + set_hl('Float', { link = 'Number' }) -- a floating point constant: 2.3e10 + set_hl('Identifier', { fg = c.base0 }, { styles = config.styles.variables }) -- any variable name + set_hl('Function', { fg = c.blue }, { styles = config.styles.functions }) -- function name (also: methods for classes) + set_hl('Statement', { link = 'Keyword' }) -- any statement + set_hl('Conditional', { link = 'Keyword' }) -- if, then, else, endif, switch, etc. + set_hl('Repeat', { link = 'Keyword' }) -- for, do, while, etc. + set_hl('Label', { link = 'Keyword' }) -- case, default, etc. + set_hl('Operator', { link = 'Keyword' }) -- "sizeof", "+", "*", etc. + set_hl('Keyword', { fg = c.green }, { styles = config.styles.keywords }) -- any other keyword + set_hl('Exception', { link = 'Keyword' }) -- try, catch, throw + set_hl('PreProc', { link = 'Keyword' }) -- generic Preprocessor + set_hl('Include', { link = 'Keyword' }) -- preprocessor #include + set_hl('Define', { link = 'Keyword' }) -- preprocessor #define + set_hl('Macro', { link = 'Keyword' }) -- same as Define + set_hl('PreCondit', { link = 'Keyword' }) -- preprocessor #if, #else, #endif, etc. + set_hl('Type', { fg = c.yellow }, { styles = config.styles.types }) -- int, long, char, etc. + set_hl('StorageClass', { link = 'Keyword' }) -- static, register, volatile, etc. + set_hl('Structure', { fg = c.yellow }) -- struct, union, enum, etc. + set_hl('Typedef', { link = 'Keyword' }) -- A typedef + set_hl('Special', { fg = c.magenta }) -- special symbol + set_hl('SpecialChar', { fg = c.violet }) -- special character in a constant + set_hl('Tag', { link = 'Special' }) -- you can use CTRL-] on this + set_hl('Delimiter', { fg = c.orange }) -- character that needs attention + set_hl('SpecialComment', { link = 'Keyword' }) -- special things inside a comment + set_hl('Debug', { link = 'Keyword' }) -- debugging statements + set_hl('Underlined', { fg = c.violet, underline = true }) --text that stands out, HTML links + set_hl('Ignore') --left blank, hidden |hl-Ignore| + set_hl('Error', { fg = c.error }) --any erroneous construct + set_hl('Todo', { fg = c.violet }) --anything that needs extra attention; mostly the keywords TODO FIXME and XXX +end diff --git a/lua/solarized/themes/neo/telescope.lua b/lua/solarized/themes/neo/telescope.lua new file mode 100644 index 0000000..b961eb9 --- /dev/null +++ b/lua/solarized/themes/neo/telescope.lua @@ -0,0 +1,45 @@ +return function(c, config) + local utils = require('solarized.utils') + local darken = require('solarized.utils.colors').darken + local base04 = darken(c.base03, 10) + local set_hl = utils.set_hl + + set_hl('TelescopeSelection', { link = 'CursorLine' }) + set_hl('TelescopeSelectionCaret', { fg = c.red }) + set_hl('TelescopeMultiSelection', { link = 'Type' }) + set_hl('TelescopeMultiIcon', { fg = c.cyan }) + + -- "Normal" in the floating windows created by telescope. + set_hl( + 'TelescopeNormal', + { fg = c.base0, bg = base04 }, + { transparent = config.transparent } + ) + set_hl('TelescopePreviewNormal', { link = 'TelescopeNormal' }) + set_hl('TelescopePromptNormal', { link = 'TelescopeNormal' }) + set_hl('TelescopeResultsNormal', { link = 'TelescopeNormal' }) + + -- Border highlight groups. + -- Use TelescopeBorder to override the default. + -- Otherwise set them specifically + set_hl('TelescopeBorder', { link = 'WinSeparator' }) + set_hl('TelescopePromptBorder', { link = 'TelescopeBorder' }) + set_hl('TelescopeResultsBorder', { link = 'TelescopeBorder' }) + set_hl('TelescopePreviewBorder', { link = 'TelescopeBorder' }) + + -- Title highlight groups. + -- Use TelescopeTitle to override the default. + -- Otherwise set them specifically + set_hl('TelescopeTitle', { fg = c.blue, reverse = true }) + set_hl('TelescopePromptTitle', { link = 'TelescopeTitle' }) + set_hl('TelescopeResultsTitle', { link = 'TelescopeTitle' }) + set_hl('TelescopePreviewTitle', { link = 'TelescopeTitle' }) + + set_hl('TelescopePromptCounter', { link = 'NonText' }) + + -- Used for highlighting characters that you match. + set_hl('TelescopeMatching', { link = 'IncSearch' }) + + -- Used for the prompt prefix + set_hl('TelescopePromptPrefix', { fg = c.magenta }) +end diff --git a/lua/solarized/themes/neo/todo.lua b/lua/solarized/themes/neo/todo.lua new file mode 100644 index 0000000..75b0785 --- /dev/null +++ b/lua/solarized/themes/neo/todo.lua @@ -0,0 +1,50 @@ +return function(c) + local utils = require('solarized.utils') + local colortool = require('solarized.utils.colors') + local set_hl = utils.set_hl + local colorFunc + local percentage = 80 + + if vim.o.background == 'light' then + colorFunc = colortool.lighten + else + colorFunc = colortool.darken + end + + -- TODO: TODO + -- WARN: WARN + -- TEST: TEST + -- PERF: PERF + -- NOTE: NOTE + -- HACK: HACK + + set_hl('TodoFgTODO', { fg = c.info }) + set_hl('TodoFgWARN', { fg = c.warning }) + set_hl('TodoFgTEST', { fg = c.violet }) + set_hl('TodoFgPERF', { fg = c.magenta }) + set_hl('TodoFgNOTE', { fg = c.hint }) + set_hl('TodoFgHACK', { fg = c.cyan }) + set_hl('TodoFgFIX', { fg = c.error }) + + set_hl('TodoSignTODO', { fg = c.info }) + set_hl('TodoSignWARN', { fg = c.warning }) + set_hl('TodoSignTEST', { fg = c.violet }) + set_hl('TodoSignPERF', { fg = c.magenta }) + set_hl('TodoSignNOTE', { fg = c.hint }) + set_hl('TodoSignHACK', { fg = c.cyan }) + set_hl('TodoSignFIX', { fg = c.error }) + + set_hl('TodoBgTODO', { fg = c.info, bg = colorFunc(c.info, percentage) }) + set_hl( + 'TodoBgWARN', + { fg = c.warning, bg = colorFunc(c.warning, percentage) } + ) + set_hl('TodoBgTEST', { fg = c.violet, bg = colorFunc(c.violet, percentage) }) + set_hl( + 'TodoBgPERF', + { fg = c.magenta, bg = colorFunc(c.magenta, percentage) } + ) + set_hl('TodoBgNOTE', { fg = c.hint, bg = colorFunc(c.hint, percentage) }) + set_hl('TodoBgHACK', { fg = c.cyan, bg = colorFunc(c.cyan, percentage) }) + set_hl('TodoBgFIX', { fg = c.error, bg = colorFunc(c.error, percentage) }) +end diff --git a/lua/solarized/themes/neo/tree.lua b/lua/solarized/themes/neo/tree.lua new file mode 100644 index 0000000..342356e --- /dev/null +++ b/lua/solarized/themes/neo/tree.lua @@ -0,0 +1,66 @@ +return function(c, config) + local utils = require('solarized.utils') + local darken = require('solarized.utils.colors').darken + local base04 = darken(c.base03, 10) + local set_hl = utils.set_hl + + set_hl('NvimTreeSymlink', { link = 'Underlined' }) + set_hl('NvimTreeSymlinkIcon', { link = 'Directory' }) + -- set_hl('NvimTreeSymlinkFolderName') -- (Directory) + set_hl('NvimTreeFolderName', { fg = c.base0 }) -- (Directory) + set_hl('NvimTreeRootFolder', { link = 'Title' }) + set_hl('NvimTreeFolderIcon', { link = 'Directory' }) + -- set_hl('NvimTreeOpenedFolderIcon') -- (NvimTreeFolderIcon) + -- set_hl('NvimTreeClosedFolderIcon') -- (NvimTreeFolderIcon) + -- set_hl('NvimTreeFileIcon') + set_hl('NvimTreeEmptyFolderName', { fg = c.base0 }) -- (Directory) + -- set_hl('NvimTreeOpenedFolderName') -- (Directory) + set_hl('NvimTreeExecFile', { link = 'Function' }) + set_hl('NvimTreeOpenedFile', { fg = c.orange, bold = true }) + set_hl('NvimTreeModifiedFile', { fg = c.change }) + set_hl('NvimTreeSpecialFile', { link = 'Special' }) + -- set_hl('NvimTreeImageFile') + set_hl('NvimTreeIndentMarker', { fg = c.base01 }) + -- set_hl('NvimTreeLspDiagnosticsError') -- (DiagnosticError) + -- set_hl('NvimTreeLspDiagnosticsWarning') -- (DiagnosticWarn) + set_hl('NvimTreeLspDiagnosticsInformation') -- (DiagnosticInfo) + set_hl('NvimTreeLspDiagnosticsHint') -- (DiagnosticHint) + set_hl('NvimTreeGitDirty', { fg = c.change }) + set_hl('NvimTreeGitStaged', { fg = c.add }) + set_hl('NvimTreeGitMerge', { fg = c.change }) + set_hl('NvimTreeGitRenamed', { fg = c.add }) + set_hl('NvimTreeGitNew', { fg = c.add }) + set_hl('NvimTreeGitDeleted', { fg = c.delete }) + -- set_hl('NvimTreeGitIgnored') -- (Comment) + -- set_hl('NvimTreeWindowPicker') + set_hl( + 'NvimTreeNormal', + { fg = c.base0, bg = base04 }, + { transparent = config.transparent } + ) + set_hl('NvimTreeNormalFloat', { link = 'NvimTreeNormal' }) + set_hl('NvimTreeEndOfBuffer', { fg = base04 }) -- (NonText) + -- set_hl('NvimTreeCursorLine') -- (CursorLine) + -- set_hl('NvimTreeCursorLineNr') -- (CursorLineNr) + -- set_hl('NvimTreeLineNr') -- (LineNr) + set_hl( + 'NvimTreeWinSeparator', + { fg = base04, bg = base04 }, + { transparent = config.transparent } + ) -- (WinSeparator) + -- set_hl('NvimTreeCursorColumn') -- (CursorColumn) + -- + -- There are also links for file highlight with git properties, linked to their + -- Git equivalent: + -- + -- set_hl('NvimTreeFileDirty') -- (NvimTreeGitDirty) + -- set_hl('NvimTreeFileStaged') -- (NvimTreeGitStaged) + -- set_hl('NvimTreeFileMerge') -- (NvimTreeGitMerge) + -- set_hl('NvimTreeFileRenamed') -- (NvimTreeGitRenamed) + -- set_hl('NvimTreeFileNew') -- (NvimTreeGitNew) + -- set_hl('NvimTreeFileDeleted') -- (NvimTreeGitDeleted) + -- set_hl('NvimTreeFileIgnored') -- (NvimTreeGitIgnored) + -- set_hl('NvimTreeLiveFilterPrefix') + -- set_hl('NvimTreeLiveFilterValue') + -- set_hl('NvimTreeBookmark') +end diff --git a/lua/solarized/themes/neo/treesitter.lua b/lua/solarized/themes/neo/treesitter.lua new file mode 100644 index 0000000..4cd0d60 --- /dev/null +++ b/lua/solarized/themes/neo/treesitter.lua @@ -0,0 +1,114 @@ +return function(c, config) + local utils = require('solarized.utils') + local set_hl = utils.set_hl + + --[[ Highlight capture names as of nvim-treesitter commit `6806d7a` ]] + -- + + -- Identifiers + set_hl('@variable', { link = 'Identifier' }) -- various variable names + set_hl('@variable.builtin', { fg = c.violet, italic = true }) -- built-in variable names (e.g. `this`) + set_hl( + '@variable.parameter', + { fg = c.orange, italic = true }, + { styles = config.styles.parameters } + ) -- parameters of a function + set_hl('@variable.member', { fg = c.blue }) -- object and struct fields + set_hl('@constant', { link = 'Constant' }) -- constant identifiers + set_hl('@constant.builtin', { link = 'Constant' }) -- built-in constant values + set_hl('@constant.macro', { link = 'Constant' }) -- constants defined by the preprocessor + set_hl('@module', { fg = c.violet }) -- modules or namespaces + set_hl('@module.builtin', { fg = c.cyan }) -- built-in modules or namespaces + set_hl('@label', { link = 'Label' }) -- GOTO and other labels (e.g. `label:` in C), including heredoc labels + + -- Literals + set_hl('@string', { link = 'String' }) -- string literals + set_hl('@string.documentation', { link = 'Comment' }) -- string documenting code (e.g. Python docstrings) + set_hl('@string.regexp', { fg = c.violet }) -- regular expressions + set_hl('@string.escape', { link = 'Keyword' }) -- escape sequences + set_hl('@string.special', { link = 'Constant' }) -- other special strings (e.g. dates) + set_hl('@string.special.symbol', { fg = c.violet }) -- symbols or atoms + set_hl('@string.special.url', { link = 'Underlined' }) -- URIs (e.g. hyperlinks) + set_hl('@string.special.path', { link = 'Underlined' }) -- filenames + set_hl('@character', { link = 'String' }) -- character literals + set_hl('@character.special', { link = 'Constant' }) -- special characters (e.g. wildcards) + set_hl('@character.printf', { fg = c.violet }) -- special characters (e.g. wildcards) + set_hl('@boolean', { link = 'Constant' }) -- boolean literals + set_hl('@number', { link = 'Number' }) -- numeric literals + set_hl('@number.float', { link = 'Number' }) -- floating-point number literals + + -- Types + set_hl('@type', { link = 'Type' }) -- type or class definitions and annotations + set_hl('@type.builtin', { link = 'Type' }) -- built-in types + set_hl('@type.definition', { link = 'Type' }) -- identifiers in type definitions (e.g. `typedef ` in C) + set_hl('@type.qualifier', { link = 'Keyword' }) -- type qualifiers (e.g. `const`) + set_hl('@attribute', { link = 'Function' }) -- attribute annotations (e.g. Python decorators) + set_hl('@property', { link = '@variable.member' }) -- the key in key/value pairs + + -- Functions + set_hl('@function', { link = 'Function' }) -- function definitions + set_hl('@function.builtin', { link = 'Function' }) -- built-in functions + set_hl('@function.call', { link = 'Function' }) -- function calls + set_hl('@function.macro', { link = 'Function' }) -- preprocessor macros + set_hl('@function.method', { link = 'Function' }) -- method definitions + set_hl('@function.method.call', { link = 'Function' }) -- method calls + set_hl('@constructor', { fg = c.magenta }) -- constructor calls and definitions + set_hl('@operator', { link = 'Keyword' }) -- symbolic operators (e.g. `+` / `*`) + + -- Keywords + set_hl('@keyword', { link = 'Keyword' }) -- keywords not fitting into specific categories + set_hl('@keyword.coroutine', { link = 'Keyword' }) -- keywords related to coroutines (e.g. `go` in Go, `async/await` in Python) + set_hl('@keyword.function', { link = 'Keyword' }) -- keywords that define a function (e.g. `func` in Go, `def` in Python) + set_hl('@keyword.operator', { link = 'Keyword' }) -- operators that are English words (e.g. `and` / `or`) + set_hl('@keyword.import', { link = 'Keyword' }) -- keywords for including modules (e.g. `import` / `from` in Python) + set_hl('@keyword.storage', { link = 'Keyword' }) -- modifiers that affect storage in memory or life-time + set_hl('@keyword.repeat', { link = 'Keyword' }) -- keywords related to loops (e.g. `for` / `while`) + set_hl('@keyword.return', { link = 'Keyword' }) -- keywords like `return` and `yield` + set_hl('@keyword.debug', { link = 'Keyword' }) -- keywords related to debugging + set_hl('@keyword.exception', { link = 'Keyword' }) -- keywords related to exceptions (e.g. `throw` / `catch`) + set_hl('@keyword.conditional', { link = 'Keyword' }) -- keywords related to conditionals (e.g. `if` / `else`) + set_hl('@keyword.conditional.ternary', { link = 'Keyword' }) -- ternary operator (e.g. `?` / `:`) + set_hl('@keyword.directive', { link = 'Keyword' }) -- various preprocessor directives & shebangs + set_hl('@keyword.directive.define', { link = 'Keyword' }) -- preprocessor definition directives + + -- Punctuations + set_hl('@punctuation.delimiter', { link = 'Delimiter' }) -- delimiters (e.g. `;` / `.` / `,`) + set_hl('@punctuation.bracket', { link = 'Delimiter' }) -- brackets (e.g. `()` / `{}` / `[]`) + set_hl('@punctuation.special', { link = 'Delimiter' }) -- special symbols (e.g. `{}` in string interpolation) + + -- Comments + set_hl('@comment', { link = 'Comment' }) -- line and block comments + set_hl('@comment.documentation', { link = 'Comment' }) -- comments documenting code + set_hl('@comment.error', { fg = c.error }) -- error-type comments (e.g. `ERROR`, `FIXME`, `DEPRECATED:`) + set_hl('@comment.warning', { fg = c.warning }) -- warning-type comments (e.g. `WARNING:`, `FIX:`, `HACK:`) + set_hl('@comment.todo', { link = 'Todo' }) -- todo-type comments (e.g. `TODO:`, `WIP:`, `FIXME:`) + set_hl('@comment.note', { fg = c.info }) -- note-type comments (e.g. `NOTE:`, `INFO:`, `XXX`) + + -- Markup + set_hl('@markup.strong', { fg = c.yellow }) -- bold text + set_hl('@markup.italic', { fg = c.yellow, italic = true }) -- italic text + set_hl('@markup.strikethrough', { fg = c.base01, strikethrough = true }) -- struck-through text + set_hl('@markup.underline', { link = 'Underlined' }) -- underlined text (only for literal underline markup!) + set_hl('@markup.heading', { link = 'Title' }) -- headings, titles (including markers) + set_hl('@markup.quote', { fg = c.cyan }) -- block quotes + set_hl('@markup.math', { link = 'Number' }) -- math environments (e.g. `$ ... $` in LaTeX) + set_hl('@markup.environment', { fg = c.base0 }) -- environments (e.g. in LaTeX) + set_hl('@markup.link', { link = 'Underlined' }) -- text references, footnotes, citations, etc. + set_hl('@markup.link.label', { link = 'Constant' }) -- link, reference descriptions + set_hl('@markup.link.url', { link = 'Underlined' }) -- URL-style links + set_hl('@markup.raw', { fg = c.base0 }) -- literal or verbatim text (e.g., inline code) + set_hl('@markup.raw.block', { fg = c.base0 }) -- literal or verbatim text as a stand-alone block (use priority 90 for blocks with injections) + set_hl('@markup.list', { link = 'Delimiter' }) -- list markers + set_hl('@markup.list.checked', { link = 'Delimiter' }) -- checked todo-style list markers + set_hl('@markup.list.unchecked', { link = 'Delimiter' }) -- unchecked todo-style list markers + + -- Diffs + set_hl('@diff.plus', { fg = c.add }) -- added text (for diff files) + set_hl('@diff.minus', { fg = c.delete }) -- deleted text (for diff files) + set_hl('@diff.delta', { fg = c.change }) -- changed text (for diff files) + + -- Tags + set_hl('@tag', { fg = c.green }) -- XML-style tag names (and similar) + set_hl('@tag.attribute', { link = '@variable.member' }) -- XML-style tag attributes + set_hl('@tag.delimiter', { link = 'Delimiter' }) -- XML-style tag delimiters +end diff --git a/lua/solarized/themes/neo/whichkey.lua b/lua/solarized/themes/neo/whichkey.lua new file mode 100644 index 0000000..41b5014 --- /dev/null +++ b/lua/solarized/themes/neo/whichkey.lua @@ -0,0 +1,12 @@ +return function(c) + local utils = require('solarized.utils') + local set_hl = utils.set_hl + + set_hl('WhichKey', { fg = c.base0 }) -- the key + set_hl('WhichKeyGroup', { fg = c.blue }) -- a group + set_hl('WhichKeySeparator', { fg = c.magenta }) -- the separator between the key and its label + set_hl('WhichKeyDesc', { fg = c.base2 }) -- the label of the key + -- set_hl('WhichKeyFloat') -- Normal in the popup window + -- set_hl('WhichKeyBorder', { link = 'WinSeparator' }) + -- set_hl('WhichKeyValue') -- used by plugins that provide values +end diff --git a/lua/solarized/utils/colors.lua b/lua/solarized/utils/colors.lua new file mode 100644 index 0000000..9057adb --- /dev/null +++ b/lua/solarized/utils/colors.lua @@ -0,0 +1,88 @@ +local M = {} + +--- Convert a hexadecimal color code to RGB color values +--- +--- @param hex string The hexadecimal color code (e.g., "#RRGGBB" or "RRGGBB") +--- @return number red The red component of the RGB color (0-255) +--- @return number green The green component of the RGB color (0-255) +--- @return number blue The blue component of the RGB color (0-255) +function M.hex_to_rgb(hex) + local red = tonumber(hex:sub(2, 3), 16) + local green = tonumber(hex:sub(4, 5), 16) + local blue = tonumber(hex:sub(6, 7), 16) + + return red, green, blue +end + +--- Convert rgb to hex +--- +--- @param red number +--- @param green number +--- @param blue number +--- @return string color +function M.rgb_to_hex(red, green, blue) + return string.format('#%02x%02x%02x', red, green, blue) +end + +--- Darken a color by a given distance +--- +--- @param color string The color to be darkened in any valid color format +--- @param percentage number The distance by which the color should be darkened (between 1 and 10) +--- @return string color The resulting darkened color in the same format as the input color +function M.darken(color, percentage) + local red, green, blue = M.hex_to_rgb(color) + local i = 1 + local result = { + red = red * (1 - (percentage / 100) * i), + green = green * (1 - (percentage / 100) * i), + blue = blue * (1 - (percentage / 100) * i), + } + + return M.rgb_to_hex(result.red, result.green, result.blue) +end + +--- Lighten a color by a given percentage +--- +--- @param color string The color to be lightened in any valid color format +--- @param percentage number The percentage by which the color should be lightened (between 1 and 10) +--- @return string color The resulting lightened color in the same format as the input color +function M.lighten(color, percentage) + local red, green, blue = M.hex_to_rgb(color) + local i = 1 + local result = { + red = red + (255 - red) * i * (percentage / 100), + green = green + (255 - green) * i * (percentage / 100), + blue = blue + (255 - blue) * i * (percentage / 100), + } + + return M.rgb_to_hex(result.red, result.green, result.blue) +end + +--- Blend two colors with a given alpha value +--- +--- @param hex_fg string The foreground color in hexadecimal format (e.g., "#RRGGBB") +--- @param hex_bg string The background color in hexadecimal format (e.g., "#RRGGBB") +--- @param alpha number The alpha value between 0 and 1, indicating the blending ratio +--- @return string color The resulting blended color in hexadecimal format +function M.blend(hex_fg, hex_bg, alpha) + local red_bg, green_bg, blue_bg = M.hex_to_rgb(hex_bg) + local red_fg, green_fg, blue_fg = M.hex_to_rgb(hex_fg) + + local min = math.min + local max = math.max + local floor = math.floor + + local function blend_channel(fg, bg) + local ret = alpha * fg + ((1 - alpha) * bg) + + return floor(min(max(0, ret), 255) + 0.5) + end + + return M.rgb_to_hex( + blend_channel(red_fg, red_bg), + blend_channel(green_fg, green_bg), + blend_channel(blue_fg, blue_bg) + ) +end + +return M diff --git a/lua/solarized/utils/init.lua b/lua/solarized/utils/init.lua new file mode 100644 index 0000000..5a50a84 --- /dev/null +++ b/lua/solarized/utils/init.lua @@ -0,0 +1,49 @@ +local M = {} + +--- Sets a highlight group +--- @param name string +--- @param val? table +--- @param opts? table The opts object.. +--- - opts.transparent: (boolean) Specifies whether transparency is enabled. +--- - opts.styles: (table) A table of custom styles for various elements. +---@return nil +function M.set_hl(name, val, opts) + local default_val = { fg = 'NONE', bg = 'NONE' } + val = val or {} + + if not val.link then val = vim.tbl_extend('force', default_val, val) end + + if opts then + if opts.styles then val = vim.tbl_extend('force', val, opts.styles) end + + if opts.transparent then val.bg = 'NONE' end + end + + vim.api.nvim_set_hl(0, name, val) +end + +--- get highlight group +--- @param highlight_name string +--- @return table highlight +function M.get_hl(highlight_name) + local highlight = + vim.api.nvim_get_hl(0, { name = highlight_name, link = true }) + + if highlight.link then return M.get_hl(highlight.link) end + + return highlight +end + +--- @param opts table The user-specified custom configuration +--- - fnc (function): callback type configuration +--- - tbl (function): table type configuration +--- @param config (table|function): config to be used +function M.on_config(opts, config) + if type(config) == 'table' and not vim.tbl_isempty(config) then + opts.tbl() + elseif type(config) == 'function' then + opts.fnc() + end +end + +return M diff --git a/lua/solarized/utils/test.lua b/lua/solarized/utils/test.lua new file mode 100644 index 0000000..b04513e --- /dev/null +++ b/lua/solarized/utils/test.lua @@ -0,0 +1,7 @@ +local M = {} + +function M.to_hex(decimal) + return string.format('#%06x', decimal) +end + +return M diff --git a/plugin/solarized.lua b/plugin/solarized.lua new file mode 100644 index 0000000..c671e1b --- /dev/null +++ b/plugin/solarized.lua @@ -0,0 +1,16 @@ +vim.api.nvim_create_user_command('Solarized', function(args) + require('solarized.command').load( + args.fargs[1], + vim.list_slice(args.fargs, 2) + ) +end, { + range = true, + nargs = '+', + complete = function(arg) + local list = require('solarized.command').list() + + return vim.tbl_filter(function(s) + return string.match(s, '^' .. arg) + end, list) + end, +}) diff --git a/vimrc b/vimrc index 3f47f78..5978c7d 100644 --- a/vimrc +++ b/vimrc @@ -8,30 +8,31 @@ syntax on " theme -set background=dark -colorscheme solarized +lua << EOF +vim.o.background = 'dark' +require('solarized').setup { + highlights = function (colors, colorhelper) + return { + Folded = { underline = false, fg = colors.base3, bg = colors.base03 } + } + end +} +vim.cmd("colorscheme solarized") +EOF " plugins call plug#begin('~/.vim/plugged') Plug 'airblade/vim-gitgutter' -Plug 'dense-analysis/ale' Plug 'godlygeek/tabular' Plug 'itchyny/lightline.vim' -" Plug 'jpalardy/vim-slime', { 'branch': 'main' } Plug 'jgdavey/tslime.vim' Plug 'justinmk/vim-dirvish' -Plug 'ncm2/ncm2' -Plug 'ncm2/ncm2-bufword' -Plug 'ncm2/ncm2-jedi' -Plug 'ncm2/ncm2-path' -Plug 'ncm2/ncm2-tern' -Plug 'roxma/nvim-yarp' -Plug 'tmhedberg/SimpylFold' Plug 'tpope/vim-commentary' Plug 'tpope/vim-fugitive' Plug 'tpope/vim-surround' -Plug 'vim-python/python-syntax' Plug 'github/copilot.vim', {'branch': 'release'} +Plug 'nvim-treesitter/nvim-treesitter', {'do': ':TSUpdate'} +Plug 'neovim/nvim-lspconfig' call plug#end() @@ -46,8 +47,11 @@ set completeopt=noinsert,menuone,noselect " options for Insert mode completion set completeopt=noinsert,menuone,noselect " options for Insert mode completion set cursorline " highlight the screen line of the cursor set foldenable " set to display all folds open -set foldmethod=marker " folding type set foldopen-=block " for which commands a fold will be opened +set foldmethod=expr " folding type +" set foldmethod=marker +set foldexpr=nvim_treesitter#foldexpr() +set nofoldenable " disable folding at startup. set foldtext=FoldText() " expression used to display for a closed fold set formatoptions-=cro " how automatic formatting is to be done set hlsearch " highlight matches with last search pattern @@ -83,8 +87,6 @@ if exists('$VIRTUAL_ENV') else let g:python3_host_prog= $HOME . "/.env/bin/python" endif -" let g:slime_target = "tmux" -" let g:slime_default_config = {"socket_name": "default", "target_pane": ":.2"} let g:lightline = { \ 'colorscheme': 'solarized', \ 'inactive': { @@ -130,7 +132,6 @@ nmap NormalModeSendToTmux nmap r SetTmuxVars " autocommands -autocmd BufEnter * call ncm2#enable_for_buffer() augroup CursorLineOnlyInActiveWindow autocmd! autocmd VimEnter,WinEnter,BufWinEnter * setlocal cursorline @@ -151,3 +152,22 @@ augroup dirvish_config augroup END +" Enable Treesitter +lua << EOF +require'nvim-treesitter.configs'.setup { + ensure_installed = { + "javascript", + "python", + }, + highlight = { + enable = true, + }, +} +EOF + +" Enable LSP +lua << EOF +local lspconfig = require('lspconfig') +lspconfig.gopls.setup{} +lspconfig.jedi_language_server.setup{} +EOF