summary refs log tree commit diff
path: root/.vim/lua/theme/init.lua
diff options
context:
space:
mode:
authorRobert Günzler <r@gnzler.io>2022-06-14 21:08:15 +0200
committerRobert Günzler <r@gnzler.io>2022-06-15 04:39:51 +0200
commiteeb2d0c528851b61f9c790f5afe33f4083c9264a (patch)
tree2dcf44679de5999f18b891fd4d5b81f27cceb5c5 /.vim/lua/theme/init.lua
parentb811695f91cc0ea7a709bde4c89911288cf059c1 (diff)
vim: juggle around colorscheme implementation
Diffstat (limited to '.vim/lua/theme/init.lua')
-rw-r--r--.vim/lua/theme/init.lua375
1 files changed, 375 insertions, 0 deletions
diff --git a/.vim/lua/theme/init.lua b/.vim/lua/theme/init.lua
new file mode 100644
index 0000000..5e85415
--- /dev/null
+++ b/.vim/lua/theme/init.lua
@@ -0,0 +1,375 @@
+---@diagnostic disable: undefined-global
+
+local lush = require('lush')
+local hsl = lush.hsl
+local p = require('theme.palette')
+
+local colors = lush(function()
+  return {
+    -- Meta {{{
+    deEmph { fg = hsl(p.dim.white).darken(5) },
+    -- }}}
+
+    -- Base highlights {{{
+    Bold       { gui = 'bold' },
+    Italic     { gui = 'italic' },
+    None       { fg = 'none', bg = 'none', gui = 'none' },
+    Reverse    { gui = 'reverse' },
+    Underlined { gui = 'underline' }, -- (preferred) text that stands out, HTML links
+
+    Conceal      { gui = 'none' }, -- placeholder characters substituted for concealed text (see 'conceallevel')
+    ColorColumn  { bg = hsl(p.dim.white).darken(40) }, -- used for the columns set with 'colorcolumn'
+    CursorColumn { ColorColumn }, -- Screen-column at the cursor, when 'cursorcolumn' is set.
+    CursorLine   { ColorColumn }, -- Screen-line at the cursor, when 'cursorline' is set.  Low-priority if foreground (ctermfg OR guifg) is not set.
+    CursorLineNr { fg = hsl(p.bright.yellow) }, -- Like LineNr when 'cursorline' or 'relativenumber' is set for the cursor line.
+    DiffAdd      { fg = hsl(p.bright.black), bg = hsl(p.normal.green) }, -- diff mode: Added line |diff.txt|
+    DiffChange   { fg = hsl(p.bright.black), bg = hsl(p.normal.cyan) }, -- diff mode: Changed line |diff.txt|
+    DiffDelete   { fg = hsl(p.bright.black), bg = hsl(p.normal.red) }, -- diff mode: Deleted line |diff.txt|
+    DiffText     { DiffChange, gui = 'italic' }, -- diff mode: Changed text within a changed line |diff.txt|
+    Directory    { fg = hsl(p.bright.cyan) }, -- directory names (and other special names in listings)
+    EndOfBuffer  { deEmph }, -- filler lines (~) after the end of the buffer.  By default, this is highlighted like |hl-NonText|.
+    Folded       { fg = hsl(p.bright.magenta) }, -- line used for closed folds
+    FoldColumn   { Folded }, -- 'foldcolumn'
+    Search       { Bold, fg = hsl(p.normal.black), bg = hsl(p.bright.white) }, -- Last search pattern highlighting (see 'hlsearch').  Also used for similar items that need to stand out.
+    IncSearch    { Search }, -- 'incsearch' highlighting; also used for the text replaced with ":s///c"
+    LineNr       { fg = hsl(p.dim.white) }, -- Line number for ":number" and ":#" commands, and when 'number' or 'relativenumber' option is set.
+    ModeMsg      { fg = hsl(p.normal.yellow) }, -- 'showmode' message (e.g., "-- INSERT -- ")
+    MoreMsg      { fg = hsl(p.normal.cyan) }, -- |more-prompt|
+    -- MsgArea      { }, -- Area for messages and cmdline
+    -- MsgSeparator { }, -- Separator for scrolled messages, `msgsep` flag of 'display'
+    NonText      { EndOfBuffer }, -- '@' at the end of the window, characters from 'showbreak' and other characters that do not really exist in the text (e.g., ">" displayed when a double-wide character doesn't fit at the end of the line). See also |hl-EndOfBuffer|.
+    Normal       { fg = hsl(p.bright.white), gui = 'nocombine' }, -- normal text
+    NormalFloat  { Normal, bg = hsl(p.dim.white).darken(30) }, -- Normal text in floating windows.
+    NormalNC     { Normal }, -- normal text in non-current windows
+    Question     { fg = hsl(p.bright.green) }, -- |hit-enter| prompt and yes/no questions
+    -- QuickFixLine { }, -- Current |quickfix| item in the quickfix window. Combined with |hl-CursorLine| when the cursor is there.
+    SignColumn   { gui = 'none' }, -- column where |signs| are displayed
+    SpecialKey   { fg = hsl(p.dim.white) }, -- Unprintable characters: text displayed differently from what it really is.  But not 'listchars' whitespace. |hl-Whitespace|
+    SpellBad     { fg = hsl(p.bright.red), gui = 'undercurl,italic' }, -- Word that is not recognized by the spellchecker. |spell| Combined with the highlighting used otherwise.
+    -- SpellCap     { }, -- Word that should start with a capital. |spell| Combined with the highlighting used otherwise.
+    -- SpellLocal   { }, --  Word that is recognized by the spellchecker as one that is used in another region. |spell| Combined with the highlighting used otherwise.
+    -- SpellRare    { }, -- Word that is recognized by the spellchecker as one that is hardly ever used.  |spell| Combined with the highlighting used otherwise.
+    StatusLine   { fg = hsl(p.bright.white), bg = 'none', gui = 'bold' }, -- status line of current window
+    StatusLineNC { fg = hsl(p.bright.white), bg = hsl(p.dim.white), gui = 'none' }, -- status lines of not-current windows Note: if this is equal to "StatusLine" Vim will use "^^^" in the status line of the current window.
+    Substitute   { fg = hsl(p.normal.blue) }, -- |:substitute| replacement text highlighting
+    TabLine      { fg = hsl(p.dim.white) }, -- tab pages line, not active tab page label
+    TabLineFill  { StatusLineNC }, -- tab pages line, where there are no labels
+    TabLineSel   { fg = hsl(p.bright.white), gui = 'bold' }, -- tab pages line, active tab page label
+    Title        { fg = hsl(p.bright.blue), gui = 'bold' }, -- titles for output from ":set all", ":autocmd" etc.
+    Visual       { fg = hsl(p.bright.white), bg = hsl(p.normal.magenta) }, -- Visual mode selection
+    VisualNOS    { Visual }, -- Visual mode selection when vim is "Not Owning the Selection".
+    WarningMsg   { fg = hsl(p.normal.yellow) }, -- warning messages
+    Whitespace   { deEmph }, -- "nbsp", "space", "tab" and "trail" in 'listchars'
+    WildMenu     { bg = hsl(p.bright.black) }, -- current match in 'wildmenu' completion
+    WinBar       { ColorColumn, fg = hsl(p.normal.white) },
+    WinBarNC     { WinBar, fg = WinBar.fg.darken(10), gui = 'italic' },
+    WinSeparator { deEmph },
+    VertSplit    { WinSeparator },
+    FloatBorder  { WinSeparator },
+
+    Cursor       { Normal, gui = 'reverse' }, -- character under the cursor
+    -- CursorIM     { Cursor }, -- like Cursor, but used when in IME mode |CursorIM|
+    -- TermCursor   { Cursor }, -- cursor in a focused terminal
+    -- TermCursorNC { Cursor }, -- cursor in an unfocused terminal
+    -- lCursor      { Cursor }, -- the character under the cursor when |language-mapping| is used (see 'guicursor')
+    -- vCursor      { Visual, gui = 'reverse' },
+    MatchParen   { Underlined }, -- The character under the cursor or just before it, if it is a paired bracket, and its match. |pi_paren.txt|
+
+    Pmenu        { NormalFloat }, -- Popup menu: normal item.
+    PmenuSel     { Visual }, -- Popup menu: selected item.
+    PmenuSbar    { bg = 'none' }, -- Popup menu: scrollbar.
+    PmenuThumb   { PmenuSbar, gui = 'reverse' }, -- Popup menu: Thumb of the scrollbar.
+
+    Boolean        { fg = hsl(p.bright.red).lighten(20) }, --  a boolean constant: TRUE, false
+    String         { fg = hsl(p.normal.yellow) }, --   a string constant: "this is a string"
+    Character      { String }, --  a character constant: 'c', '\n'
+    Number         { Boolean }, --   a number constant: 234, 0xff
+    Float          { Number }, --    a floating point constant: 2.3e10
+    Comment        { Italic, fg = hsl(p.dim.white).lighten(30) },
+    Keyword        { fg = hsl(p.normal.green), gui = 'italic' }, --  any other keyword
+    Macro          { Keyword },
+    Constant       { Normal, gui = 'bold' }, -- (preferred) any constant
+    Special        { fg = hsl(p.normal.yellow), gui = 'bold,italic' }, -- (preferred) any special symbol
+    SpecialComment { Comment, gui = 'bold,italic' }, -- special things inside a comment
+    Statement      { fg = hsl(p.bright.green), gui = 'bold' }, -- (preferred) any statement
+    Tag            { Special, gui = 'underline' }, --    you can use CTRL-] on this
+    Type           { fg = hsl(p.bright.green) }, -- (preferred) int, long, char, etc.
+    Conditional    { Keyword }, --  if, then, else, endif, switch, etc.
+    Define         { Macro }, --   preprocessor #define
+    Delimiter      { Normal }, --  character that needs attention
+    Exception      { Keyword }, --  try, catch, throw
+    Function       { Normal }, -- function name (also: methods for classes)
+    Identifier     { Normal, gui = 'bold' }, -- (preferred) any variable name
+    Include        { Macro }, --  preprocessor #include
+    Label          { Keyword, gui = 'bold' }, --    case, default, etc.
+    Operator       { Normal, gui = 'none' }, -- "sizeof", "+", "*", etc.
+    PreCondit      { Macro }, --  preprocessor #if, #else, #endif, etc.
+    PreProc        { Macro }, -- (preferred) generic Preprocessor
+    Repeat         { Keyword }, --   for, do, while, etc.
+    SpecialChar    { Special }, --  special character in a constant
+    Typedef        { Type }, --  A typedef
+    StorageClass   { Type }, -- static, register, volatile, etc.
+    Structure      { Type }, --  struct, union, enum, etc.
+
+    Debug          { Special }, --    debugging statements
+    Error          { Bold, fg = hsl(p.normal.red) }, -- (preferred) any erroneous construct
+    ErrorMsg       { Bold, fg = hsl(p.bright.black), bg = hsl(p.normal.red) }, -- error messages on the command line
+    Ignore         { None }, -- (preferred) left blank, hidden  |hl-Ignore|
+    Todo           { Special, gui = 'bold,reverse' }, -- (preferred) anything that needs extra attention; mostly the keywords TODO FIXME and XXX
+    --- }}}
+
+    -- TreeSitter {{{
+    TSError              { Error }, -- For syntax/parser errors.
+    TSPunctDelimiter     { Delimiter }, -- For delimiters ie: `.`
+    TSPunctBracket       { Delimiter }, -- For brackets and parens.
+    TSPunctSpecial       { Delimiter }, -- For special punctutation that does not fall in the catagories before.
+    TSConstant           { Constant }, -- For constants
+    TSConstBuiltin       { Special, gui = 'bold' }, -- For constant that are built in the language: `nil` in Lua.
+    TSConstMacro         { Macro, gui = 'bold' }, -- For constants that are defined by macros: `NULL` in C.
+    TSString             { String }, -- For strings.
+    TSStringRegex        { String }, -- For regexes.
+    TSStringEscape       { Special }, -- For escape characters within a string.
+    TSCharacter          { Character }, -- For characters.
+    TSNumber             { Number }, -- For integers.
+    TSBoolean            { Boolean }, -- For booleans.
+    TSFloat              { Number }, -- For floats.
+    TSFunction           { Function }, -- For function (calls and definitions).
+    TSFuncBuiltin        { Function, fg = hsl(p.normal.magenta) }, -- For builtin functions: `table.insert` in Lua.
+    TSFuncMacro          { Macro }, -- For macro defined fuctions (calls and definitions): each `macro_rules` in Rust.
+    -- TSParameter          { }, -- For parameters of a function.
+    -- TSParameterReference { }, -- For references to parameters of a function.
+    TSMethod             { Function }, -- For method calls and definitions.
+    TSField              { Normal }, -- For fields.
+    TSProperty           { TSField }, -- Same as `TSField`.
+    TSConstructor        { Delimiter }, -- For constructor calls and definitions: `{ }` in Lua, and Java constructors.
+    TSConditional        { Conditional }, -- For keywords related to conditionnals.
+    TSRepeat             { Repeat }, -- For keywords related to loops.
+    TSLabel              { Label }, -- For labels: `label:` in C and `:label:` in Lua.
+    TSOperator           { Operator }, -- For any operator: `+`, but also `->` and `*` in C.
+    TSKeyword            { Keyword }, -- For keywords that don't fall in previous categories.
+    TSKeywordFunction    { Keyword }, -- For keywords used to define a fuction.
+    TSException          { Exception }, -- For exception related keywords.
+    TSType               { Type }, -- For types.
+    TSTypeBuiltin        { Type }, -- For builtin types (you guessed it, right ?).
+    TSNamespace          { Normal }, -- For identifiers referring to modules and namespaces.
+    TSInclude            { Include }, -- For includes: `#include` in C, `use` or `extern crate` in Rust, or `require` in Lua.
+    TSAnnotation         { StorageClass }, -- For C++/Dart attributes, annotations that can be attached to the code to denote some kind of meta information.
+    TSText               { Normal }, -- For strings considered text in a markup language.
+    TSStrong             { Bold }, -- For text to be represented with strong.
+    TSEmphasis           { Italic }, -- For text to be represented with emphasis.
+    TSUnderline          { Underlined }, -- For text to be represented with an underline.
+    TSTitle              { Title }, -- Text that is part of a title.
+    TSLiteral            { Normal }, -- Literal text.
+    TSURI                { Tag, fg = hsl(p.bright.blue) }, -- Any URI like a link or email.
+    TSVariable           { Normal }, -- Any variable name that does not have another highlight.
+    TSVariableBuiltin    { Special }, -- Variable names that are defined by the languages, like `this` or `self`.
+    -- }}}
+
+    -- Markdown {{{
+    mkdBlockQuote { Comment },
+    mkdDelimiter  { Delimiter },
+    mkdHeading    { Title },
+    mkdBold       { Bold },
+    mkdItalic     { Italic },
+    mkdBoldItalic { gui = "bold,italic" },
+    -- mkdCode       { markdownCode },
+    -- mkdID         { Constant },
+    mkdLink       { TSURI },
+    -- mkdLinkTitle  { bg = hsl('#ff0000') },
+    -- mkdListItem   { Number },
+    mkdURL        { TSURI },
+    -- }}}
+
+    -- LSP {{{
+    DiagnosticError            { Error },
+    DiagnosticFloatingError    { DiagnosticError },
+    DiagnosticVirtualTextError { DiagnosticError, gui = 'reverse' },
+    DiagnosticSignError        { DiagnosticError, gui = 'reverse' },
+
+    DiagnosticWarn             { WarningMsg },
+    DiagnosticFloatingWarn     { DiagnosticWarn },
+    DiagnosticVirtualTextWarn  { DiagnosticWarn, gui = 'reverse' },
+    DiagnosticSignWarn         { DiagnosticWarn, gui = 'reverse' },
+
+    DiagnosticInfo             { MoreMsg },
+    DiagnosticFloatingInfo     { DiagnosticInfo },
+    DiagnosticVirtualTextInfo  { DiagnosticInfo, gui = 'reverse' },
+    DiagnosticSignInfo         { DiagnosticInfo, gui = 'reverse' },
+
+    DiagnosticHint             { fg = hsl(p.normal.white) },
+    DiagnosticFloatingHint     { DiagnosticHint },
+    DiagnosticVirtualTextHint  { DiagnosticHint, gui = 'reverse' },
+    DiagnosticSignHint         { DiagnosticHint, gui = 'reverse' },
+
+    -- LspDiagnosticsUnderlineError {},
+    -- LspDiagnosticsUnderlineWarning {},
+    -- LspDiagnosticsUnderlineInformation {},
+    -- LspDiagnosticsUnderlineHint {},
+
+    -- LspReferenceText                  { }, -- used for highlighting "text" references
+    -- LspReferenceRead                  { }, -- used for highlighting "read" references
+    -- LspReferenceWrite                 { }, -- used for highlighting "write" references
+    -- }}}
+
+    -- Plugin configs {{{
+    IndentBlanklineChar               { fg = hsl(p.dim.white).darken(30), gui = 'nocombine' },
+    IndentBlanklineSpaceChar          { Whitespace, gui = 'nocombine' },
+    IndentBlanklineSpaceCharBlankline { Whitespace, gui = 'nocombine' },
+    IndentBlanklineContextChar        { fg = IndentBlanklineChar.fg.lighten(30), gui = 'nocombine' },
+    IndentBlanklineContextStart       { guisp = IndentBlanklineContextChar.fg, gui = 'underline' },
+
+    -- git stuff {{{
+    GitSignsChangeLn { DiffChange },
+    GitSignsAddLn    { DiffAdd },
+    GitSignsDeleteLn { DiffDelete },
+
+    GitSignsChangeLnInline { GitSignsChangeLn },
+    GitSignsAddLnInline    { GitSignsAddLn },
+    GitSignsDeleteLnInline { GitSignsDeleteLn },
+
+    GitSignsChangeVirtLn { GitSignsChangeLn },
+    GitSignsAddVirtLn    { GitSignsAddLn },
+    GitSignsDeleteVirtLn { GitSignsDeleteLn },
+
+    GitSignsChangeVirtLnInline { GitSignsChangeLn },
+    GitSignsAddVirtLnInline    { GitSignsAddLn },
+    GitSignsDeleteVirtLnInline { GitSignsDeleteLn },
+
+    GitSignsChange   { fg = GitSignsChangeLn.bg },
+    GitSignsAdd      { fg = GitSignsAddLn.bg },
+    GitSignsDelete   { fg = GitSignsDeleteLn.bg },
+
+    GitSignsChangeInline { GitSignsChange, bg = NormalFloat.bg },
+    GitSignsAddInline    { GitSignsAdd, bg = NormalFloat.bg },
+    GitSignsDeleteInline { GitSignsDelete, bg = NormalFloat.bg },
+
+    gitcommitSummary { Bold },
+    gitcommitDiff    { Comment },
+    diffFile         { Special },
+    diffSubname      { diffFile },
+    diffIndexLine    { diffFile },
+    -- gitcommitHeader { Bold },
+    -- gitcommitSelectedType {},
+    -- gitcommitSelectedFile {},
+    -- gitcommitUntrackedFile {},
+    -- gitcommitBranch {},
+    -- gitcommitDiscardedType {},
+
+    DiffAdded        { DiffAdd },
+    DiffRemoved      { DiffDelete },
+    -- diffLine {},
+    -- diffBDiffer {},
+    -- diffNewFile {},
+
+    gitmessengerPopupNormal { NormalFloat },
+    gitmessengerHeader      { Special, gui = 'bold' },
+    gitmessengerHash        { Normal },
+    gitmessengerHistory     { Normal },
+    gitmessengerEmail       { Normal },
+    -- }}}
+
+    LightBulb            { Special, gui = 'bold' },
+    LightBulbSign        { LightBulb },
+    LightBulbVirtualText { LightBulb },
+    LightBulbFloatWin    { LightBulb },
+
+    CompeDocumentation { NormalFloat },
+    AlphaFortune { Comment },
+
+    DapBreakpoint   { fg = hsl(p.normal.black), bg = MoreMsg.fg },
+    DapStopped      { fg = hsl(p.normal.black), bg = MoreMsg.fg },
+    DapBreakpointLn { DapBreakpoint },
+    DapStoppedLn    { DapStopped },
+
+    CmpItemAbbrMatch          { fg = hsl(p.normal.magenta) },
+    CmpItemAbbrMatchFuzzy     { CmpItemAbbrMatch },
+    CmpItemKindArray          { Structure },
+    CmpItemKindBoolean        { Boolean },
+    CmpItemKindClass          { TSNamespace },
+    CmpItemKindColor          { Constant },
+    CmpItemKindConstant       { Constant },
+    CmpItemKindConstructor    { Function },
+    CmpItemKindEnum           { Structure },
+    CmpItemKindEnumMember     { Type },
+    CmpItemKindEvent          { Conditional },
+    CmpItemKindField          { TSField },
+    CmpItemKindFile           { String },
+    CmpItemKindFolder         { String },
+    CmpItemKindFunction       { Function },
+    CmpItemKindInterface      { Structure },
+    CmpItemKindKey            { TSField },
+    CmpItemKindKeyword        { Operator },
+    CmpItemKindMethod         { TSMethod },
+    CmpItemKindModule         { Structure },
+    CmpItemKindNamespace      { TSNamespace },
+    CmpItemKindNull           { TSVariableBuiltin },
+    CmpItemKindObject         { Structure },
+    CmpItemKindOperator       { Operator },
+    CmpItemKindPackage        { TSNamespace },
+    CmpItemKindProperty       { TSField },
+    CmpItemKindReference      { Character },
+    CmpItemKindSnippet        { Special },
+    CmpItemKindStruct         { Structure },
+    CmpItemKindText           { Comment },
+    CmpItemKindTypeParameter  { Special },
+    CmpItemKindUnit           { Boolean },
+    CmpItemKindValue          { Character },
+    CmpItemKindVariable       { TSVariable },
+
+    WhichKey { CursorLineNr },
+    WhichKeyGroup { Keyword },
+    WhichKeySeparator { fg = Comment.fg },
+    WhichKeyDesc { Identifier },
+    WhichKeyFloat { NormalFloat },
+    WhichKeyValue { Comment },
+
+    DirbufHash { deEmph },
+    -- Plugin configs END }}}
+
+    -- Config specific
+    StatusLineIcon        { fg = hsl(p.normal.magenta) },
+    StatusLineInsert      { StatusLine },
+    StatusLineCommand     { StatusLine },
+    StatusLineVisual      { Visual },
+    StatusLineReplace     { fg = hsl(p.bright.white), bg = hsl(p.bright.red) },
+    StatusLineJobs        { DiagnosticHint },
+    StatusLineDiagnostics { StatusLine },
+    StatusLineLightbulb   { LightBulb },
+    StatusLineLsp         { fg = hsl(p.normal.black), bg = hsl(p.normal.white) },
+    StatusLineNotify      { StatusLine, gui = 'none' },
+  }
+end)
+
+local setup = function()
+  if vim.g.colors_name then
+    vim.cmd [[hi clear]]
+  end
+
+  vim.opt.background = 'dark'
+  vim.opt.termguicolors = true
+  vim.g.colors_name = 'karafuru'
+
+  -- define terminal_color_* for :terminal
+  vim.g.terminal_color_0  = p.normal.black
+  vim.g.terminal_color_1  = p.normal.red
+  vim.g.terminal_color_2  = p.normal.green
+  vim.g.terminal_color_3  = p.normal.yellow
+  vim.g.terminal_color_4  = p.normal.blue
+  vim.g.terminal_color_5  = p.normal.magenta
+  vim.g.terminal_color_6  = p.normal.cyan
+  vim.g.terminal_color_7  = p.normal.white
+  vim.g.terminal_color_8  = p.bright.black
+  vim.g.terminal_color_9  = p.bright.red
+  vim.g.terminal_color_10 = p.bright.green
+  vim.g.terminal_color_11 = p.bright.yellow
+  vim.g.terminal_color_12 = p.bright.blue
+  vim.g.terminal_color_13 = p.bright.magenta
+  vim.g.terminal_color_14 = p.bright.cyan
+  vim.g.terminal_color_15 = p.bright.white
+
+  lush(colors)
+
+  vim.cmd [[doautocmd ColorScheme]]
+end
+
+return {setup = setup}