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}, StatusLineNC {bg = c.bg1, fg = c.gray}, 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}, StatusLineGit {bg = c.gray, fg = c.bg}, 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