local lush = require "lush" local hsl = lush.hsl local theme = lush(function() local c = { bg = hsl "#212121", bg1 = hsl "#2a2a2a", -- bg2 = hsl("#3a3a3a"), bg2 = hsl "#383d45", white = hsl "#c8c9d1", gray = hsl "#858585", light_gray = hsl "#c8c9c1", error_red = hsl "#F44747", warning_orange = hsl "#ff8800", info_yellow = hsl "#ffcc66", hint_blue = hsl "#4fc1ff", red = hsl "#b04b57", blue = hsl "#5486c0", gray_blue = hsl "#66899d", -- yellow = hsl("#ffcb6b"), yellow = hsl "#eeba5a", -- orange = hsl("#c98a75"), orange = hsl "#c6735a", green = hsl "#87b379", light_green = hsl "#b2d77c", -- aqua = hsl("#46b1d0"), aqua = hsl "#65a7c5", purple = hsl "#bf83c1", pale_purple = hsl "#7199ee", sign_add = hsl "#587C0C", sign_change = hsl "#0C7D9D", sign_delete = hsl "#94151B", test = hsl "#ff00ff", } return { Normal { bg = c.bg, fg = c.white, gui = "NONE" }, -- used for the columns set with 'colorcolumn' SignColumn { Normal }, ModeMsg { Normal }, MsgArea { Normal }, MsgSeparator { Normal }, SpellBad { bg = "NONE", fg = c.white, gui = "underline", sp = c.red }, SpellCap { bg = "NONE", fg = c.white, gui = "underline", sp = c.yellow }, SpellLocal { bg = "NONE", fg = c.white, gui = "underline", sp = c.green }, SpellRare { bg = "NONE", fg = c.white, gui = "underline", sp = c.blue }, NormalNC { Normal }, Pmenu { bg = c.bg2, fg = c.white, gui = "NONE" }, PmenuSel { bg = c.gray_blue, fg = c.bg1.da(5), gui = "NONE" }, WildMenu { PmenuSel }, -- Non Defaults CursorLineNr { bg = "NONE", fg = c.light_gray, gui = "bold" }, Comment { bg = "NONE", fg = c.gray, gui = "italic" }, -- any comment Folded { bg = c.bg1, fg = c.gray, gui = "NONE" }, FoldColumn { Normal, fg = c.gray, gui = "NONE" }, LineNr { bg = "NONE", fg = c.gray, gui = "NONE" }, FloatBorder { bg = c.bg1, fg = c.gray, gui = "NONE" }, Whitespace { bg = "NONE", fg = c.gray.da(35), gui = "NONE" }, VertSplit { bg = "NONE", fg = c.bg2, gui = "NONE" }, CursorLine { bg = c.bg1, fg = "NONE", gui = "NONE" }, CursorColumn { CursorLine }, ColorColumn { CursorLine }, NormalFloat { bg = c.bg2.da(30), fg = "NONE", gui = "NONE" }, Visual { bg = c.bg2.da(25), fg = "NONE", gui = "NONE" }, VisualNOS { Visual }, WarningMsg { bg = "NONE", fg = c.red, gui = "NONE" }, DiffText { bg = "NONE", fg = "NONE", gui = "NONE" }, DiffAdd { bg = c.sign_add, fg = "NONE", gui = "NONE" }, DiffChange { bg = c.sign_change, fg = "NONE", gui = "NONE" }, DiffDelete { bg = c.sign_delete, fg = "NONE", gui = "NONE" }, QuickFixLine { CursorLine }, PmenuSbar { bg = c.bg2.li(15), fg = "NONE", gui = "NONE" }, PmenuThumb { bg = c.white, fg = "NONE", gui = "NONE" }, MatchParen { CursorLine, fg = "NONE", gui = "NONE" }, Cursor { fg = "NONE", bg = "NONE", gui = "reverse" }, lCursor { Cursor }, CursorIM { Cursor }, TermCursor { Cursor }, TermCursorNC { Cursor }, Conceal { bg = "NONE", fg = c.blue, gui = "NONE" }, Directory { bg = "NONE", fg = c.blue, gui = "NONE" }, SpecialKey { bg = "NONE", fg = c.blue, gui = "bold" }, Title { bg = "NONE", fg = c.blue, gui = "bold" }, ErrorMsg { bg = "NONE", fg = c.error_red, gui = "NONE" }, Search { bg = c.gray_blue, fg = c.white }, IncSearch { Search }, Substitute { Search }, MoreMsg { bg = "NONE", fg = c.aqua, gui = "NONE" }, Question { MoreMsg }, EndOfBuffer { bg = "NONE", fg = c.bg, gui = "NONE" }, NonText { EndOfBuffer }, String { fg = c.green }, Character { fg = c.light_green }, Constant { fg = c.orange }, Number { fg = c.red }, Boolean { fg = c.red }, Float { fg = c.red }, Identifier { fg = c.white }, Function { fg = c.yellow }, Operator { fg = c.gray_blue }, Type { fg = c.purple }, StorageClass { Type }, Structure { Type }, Typedef { Type }, Keyword { fg = c.blue }, Statement { Keyword }, Conditional { Keyword }, Repeat { Keyword }, Label { Keyword }, Exception { Keyword }, Include { Keyword }, PreProc { fg = c.aqua }, Define { PreProc }, Macro { PreProc }, PreCondit { PreProc }, Special { fg = c.orange }, SpecialChar { Character }, Tag { fg = c.pale_purple }, Debug { fg = c.red }, Delimiter { fg = c.white.da(25) }, SpecialComment { fg = c.gray }, Underlined { fg = "NONE", gui = "underline" }, Bold { fg = "NONE", gui = "bold" }, Italic { fg = "NONE", gui = "italic" }, -- Todo -- ("Ignore", below, may be invisible...) Ignore { fg = c.white }, Todo { bg = "NONE", fg = c.red, gui = "bold" }, Error { fg = c.error_red }, -- Treesitter TSComment { Comment }, -- comment blocks. luaTSConstructor { bg = "NONE", fg = c.white.da(25) }, -- override Lua curly braces TSAnnotation { bg = "NONE", fg = c.aqua }, -- For C++/Dart attributes, annotations that can be attached to the code to denote some kind of meta information. TSAttribute { bg = "NONE", fg = c.aqua }, -- (unstable) TODO: docs TSConstructor { Type }, -- For constructor calls and definitions: `{ }` in Lua, and Java constructors. TSType { Type }, -- types. TSTypeBuiltin { Type }, -- builtin types. TSConditional { Conditional }, -- keywords related to conditionnals. TSException { Exception }, -- exception related keywords. TSInclude { Include }, -- includes: `#include` in C, `use` or `extern crate` in Rust, or `require` in Lua. TSKeyword { Keyword }, -- keywords that don't fall in previous categories. TSKeywordFunction { Keyword }, -- keywords used to define a fuction. TSLabel { Label }, -- labels: `label:` in C and `:label:` in Lua. TSNamespace { bg = "NONE", fg = c.blue }, -- For identifiers referring to modules and namespaces. TSRepeat { Repeat }, -- keywords related to loops. TSConstant { Constant }, -- constants TSConstBuiltin { Constant }, -- constant that are built in the language: `nil` in Lua. TSFloat { Float }, -- floats. TSNumber { Number }, -- all numbers TSBoolean { Boolean }, -- booleans. TSCharacter { Character }, -- characters. TSError { bg = "NONE", fg = "NONE" }, -- For syntax/parser errors. TSFunction { Function }, -- function (calls and definitions). TSFuncBuiltin { Function }, -- builtin functions: `table.insert` in Lua. TSMethod { Function }, -- method calls and definitions. TSConstMacro { Macro }, -- constants that are defined by macros: `NULL` in C. TSFuncMacro { Macro }, -- macro defined fuctions (calls and definitions): each `macro_rules` in Rust. TSVariableBuiltin { bg = "NONE", fg = c.aqua }, -- Variable names that are defined by the languages, like `this` or `self`. TSProperty { fg = c.aqua }, TSOperator { Operator }, -- any operator: `+`, but also `->` and `*` in C. TSVariable { bg = "NONE", fg = c.white }, -- Any variable name that does not have another highlight. TSField { bg = "NONE", fg = c.white }, -- For fields. TSParameter { TSField }, -- parameters of a function. TSParameterReference { TSParameter }, -- references to parameters of a function. TSSymbol { Identifier }, -- identifiers referring to symbols or atoms. TSText { fg = c.white }, -- strings considered text in a markup language. TSPunctDelimiter { Delimiter }, -- delimiters ie: `.` TSTagDelimiter { Delimiter }, -- Tag delimiter like `<` `>` `/` TSPunctBracket { Delimiter }, -- brackets and parens. TSPunctSpecial { Delimiter }, -- special punctutation that does not fall in the catagories before. TSString { String }, -- strings. TSStringRegex { TSString }, -- regexes. TSStringEscape { Character }, -- escape characters within a string. TSWarning { Todo }, -- Variable names that are defined by the languages, like `this` or `self`. TSTag { Tag }, -- Tags like html tag names. TSEmphasis { gui = "italic" }, -- text to be represented with emphasis. TSUnderline { gui = "underline" }, -- text to be represented with an underline. TSStrike { gui = "strikethrough" }, -- strikethrough text. TSTitle { Title }, -- Text that is part of a title. TSLiteral { String }, -- Literal text. TSURI { fg = c.aqua }, -- Any URI like a link or email. -- TSNone { }, -- TODO: docs -- These groups are for the native LSP client. Some other LSP clients may -- use these groups, or use their own. Consult your LSP client's -- documentation. LspDiagnosticsDefaultError { bg = "NONE", fg = c.error_red, gui = "NONE" }, LspDiagnosticsDefaultWarning { bg = "NONE", fg = c.warning_orange, gui = "NONE" }, LspDiagnosticsDefaultInformation { bg = "NONE", fg = c.info_yellow, gui = "NONE" }, LspDiagnosticsDefaultHint { bg = "NONE", fg = c.hint_blue, gui = "NONE" }, LspDiagnosticsVirtualTextError { LspDiagnosticsDefaultError }, LspDiagnosticsVirtualTextWarning { LspDiagnosticsDefaultWarning }, LspDiagnosticsVirtualTextInformation { LspDiagnosticsDefaultInformation }, LspDiagnosticsVirtualTextHint { LspDiagnosticsDefaultHint }, LspDiagnosticsFloatingError { fg = c.error_red, gui = "NONE" }, LspDiagnosticsFloatingWarning { fg = c.warning_orange, gui = "NONE" }, LspDiagnosticsFloatingInformation { fg = c.info_yellow, gui = "NONE" }, LspDiagnosticsFloatingHint { fg = c.hint_blue, gui = "NONE" }, LspDiagnosticsSignError { fg = c.error_red, gui = "NONE" }, LspDiagnosticsSignWarning { fg = c.warning_orange, gui = "NONE" }, LspDiagnosticsSignInformation { fg = c.info_yellow, gui = "NONE" }, LspDiagnosticsSignHint { fg = c.hint_blue, gui = "NONE" }, -- Tree-Sitter LspDiagnosticsError { LspDiagnosticsSignError }, LspDiagnosticsWarning { LspDiagnosticsSignWarning }, LspDiagnosticsInformation { LspDiagnosticsSignInformation }, LspDiagnosticsHint { LspDiagnosticsSignHint }, -- LspReferenceText {bg = c.bg1, fg = "NONE", gui = "underline"}, -- LspReferenceRead {bg = c.bg1, fg = "NONE", gui = "underline"}, -- LspReferenceWrite {bg = c.bg1, fg = "NONE", gui = "underline"}, LspDiagnosticsUnderlineError { fg = "NONE", gui = "underline", sp = c.red }, LspDiagnosticsUnderlineWarning { fg = "NONE", gui = "underline", sp = c.yellow }, LspDiagnosticsUnderlineInformation { fg = "NONE", gui = "underline", sp = c.blue }, LspDiagnosticsUnderlineHint { fg = "NONE", gui = "underline", sp = c.green }, -- gitsigns.nvim SignAdd { fg = c.sign_add }, SignChange { fg = c.sign_change }, SignDelete { fg = c.sign_delete }, -- Any URI like a link or email. GitSignsAdd { fg = c.sign_add }, GitSignsChange { fg = c.sign_change }, GitSignsDelete { fg = c.sign_delete }, -- telescope.nvim TelescopeSelection { bg = "NONE", fg = c.aqua }, TelescopeMatching { bg = "NONE", fg = c.red, gui = "bold" }, TelescopeBorder { bg = c.bg1, fg = c.gray }, -- nvim-tree.lua -- Nvimtree NvimTreeFolderIcon { fg = c.blue }, NvimTreeIndentMarker { fg = c.gray }, NvimTreeNormal { fg = c.white.da(10), bg = c.bg1 }, NvimTreeFolderName { fg = c.blue }, NvimTreeOpenedFolderName { fg = c.aqua.da(10), gui = "italic" }, NvimTreeOpenedFile { NvimTreeOpenedFolderName }, NvimTreeRootFolder { fg = c.blue.da(20) }, NvimTreeExecFile { fg = c.green }, NvimTreeImageFile { fg = c.purple }, NvimTreeSpecialFile { fg = c.aqua }, NvimTreeGitStaged { fg = c.sign_add }, NvimTreeGitNew { fg = c.sign_add }, NvimTreeGitDirty { fg = c.sign_add }, NvimTreeGitRenamed { fg = c.sign_change }, NvimTreeGitMerge { fg = c.sign_change }, NvimTreeGitDelete { fg = c.sign_delete }, NvimTreeVertSplit { fg = c.bg1, bg = c.bg1 }, -- BarBar TabLine { bg = c.bg1, fg = c.white, gui = "NONE" }, TabLineFill { bg = c.bg1, fg = c.white, gui = "NONE" }, TabLineSel { bg = c.blue, fg = c.bg1, gui = "NONE" }, BufferCurrent { fg = c.fg, bg = c.bg }, BufferCurrentIndex { fg = c.aqua, bg = c.bg }, BufferCurrentMod { fg = c.info_yellow, bg = c.bg }, BufferCurrentSign { fg = c.aqua, bg = c.bg }, BufferCurrentTarget { fg = c.red, bg = c.bg, gui = "bold" }, BufferVisible { fg = c.fg, bg = c.bg }, BufferVisibleIndex { fg = c.fg, bg = c.bg }, BufferVisibleMod { fg = c.info_yellow, bg = c.bg }, BufferVisibleSign { fg = c.info_yellow, bg = c.bg }, BufferVisibleTarget { fg = c.red, bg = c.bg, gui = "bold" }, BufferInactive { fg = c.gray, bg = c.bg1 }, BufferInactiveIndex { fg = c.gray, bg = c.bg1 }, BufferInactiveMod { fg = c.info_yellow, bg = c.bg1 }, BufferInactiveSign { fg = c.gray, bg = c.bg1 }, BufferInactiveTarget { fg = c.red, bg = c.bg1 }, -- some fix for html related stuff htmlH1 { Title }, -- markdown stuff mkdLink { fg = c.aqua, gui = "underline" }, mkdLineBreak { bg = "NONE", fg = "NONE", gui = "NONE" }, mkdHeading { fg = c.white }, mkdInlineURL { mkdLink }, mkdUnderline { fg = c.gray }, markdownUrl { mkdLink }, markdownCode { fg = c.orange, bg = "NONE" }, markdownLinkTextDelimiter { Delimiter }, markdownLinkDelimiter { Delimiter }, markdownIdDelimiter { Delimiter }, markdownLinkText { fg = c.aqua }, markdownItalic { fg = "NONE", gui = "italic" }, -- flutter-tools.nvim FlutterWidgetGuides { fg = c.gray.li(10) }, -- statusline StatusLine { bg = c.bg1, fg = c.white }, -- status line of current window StatusLineNC { bg = c.bg1, fg = c.light_gray }, -- status lines of not-current windows Note: if this is equal to "StatusLine" Vim will use "^^^" in the status line of the current window. StatusLineSeparator { bg = c.bg1, fg = "NONE" }, StatusLineGit { bg = c.bg1, fg = c.orange }, StatusLineGitAdd { bg = c.bg1, fg = c.green }, StatusLineGitChange { bg = c.bg1, fg = c.blue }, StatusLineGitDelete { bg = c.bg1, fg = c.red }, StatusLineLspDiagnosticsError { bg = c.bg1, fg = c.error_red, gui = "NONE" }, StatusLineLspDiagnosticsWarning { bg = c.bg1, fg = c.warning_orange, gui = "NONE" }, StatusLineLspDiagnosticsInformation { bg = c.bg1, fg = c.info_yellow, gui = "NONE" }, StatusLineLspDiagnosticsHint { bg = c.bg1, fg = c.hint_blue, gui = "NONE" }, StatusLineTreeSitter { bg = c.bg1, fg = c.green }, -- StatusLineMode {bg = c.gray, fg = c.bg, gui = "bold"}, -- StatusLineDeco {bg = c.bg2, fg = c.yellow}, -- StatusLineLCol {bg = c.bg2, fg = c.white}, -- StatusLineLColAlt {bg = c.bg1, fg = c.white}, -- StatusLineFT {bg = c.bg2, fg = c.white}, -- StatusLineFTAlt {bg = c.bg2, fg = c.white}, -- StatusLineGitAlt {bg = c.gray, fg = c.bg}, -- StatusLineLSP {bg = c.bg1, fg = c.gray.li(25)}, -- StatusLineFileName {bg = c.bg1, fg = c.white, gui = "bold"}, -- lsp-trouble.nvim LspTroubleIndent { fg = c.gray.li(10) }, -- tabline stuff -- tabline diagnostic TabLineError { LspDiagnosticsSignError }, TabLineWarning { LspDiagnosticsSignWarning }, TabLineHint { LspDiagnosticsSignHint }, TabLineInformation { LspDiagnosticsSignInformation }, -- which-key.nvim WhichKey { fg = c.purple }, -- nvim-compe WhichKeySeperator { fg = c.green }, -- nvim-compe WhichKeyGroup { fg = c.blue }, -- nvim-compe WhichKeyDesc { fg = c.aqua }, -- nvim-compe WhichKeyFloat { bg = c.bg1 }, -- nvim-compe CompeDocumentation { Pmenu, fg = "NONE" }, -- diffview DiffviewNormal { NvimTreeNormal }, DiffviewStatusAdded { SignAdd }, DiffviewStatusModified { SignChange }, DiffviewStatusRenamed { SignChange }, DiffviewStatusDeleted { SignDelete }, DiffviewFilePanelInsertion { SignAdd }, DiffviewFilePanelDeletion { SignDelete }, DiffviewVertSplit { fg = c.gray, bg = c.bg }, DashboardHeader { fg = c.blue }, DashboardCenter { fg = c.purple }, DashboardFooter { fg = c.aqua }, IndentBlanklineContextChar { fg = c.gray.da(20) }, CodiVirtualText { fg = c.hint_blue }, } end) -- return our parsed theme for extension or use else where. return theme -- vi:nowrap