local lush = require('lush')
local hsl = lush.hsl

local base00 = "#191830"
local base06 = "#ffffff"
local base09 = "#78a9ff"
local colors = {
  base00 = base00,
  base01 = base00,
  base02 = "#fad000",
  base03 = "#FFFFFF",
  base04 = "#FFFFFF",
  base05 = "#FFFFFF",
  base06 = "#FFFFFF",
  base07 = "#fad000",
  base08 = "#3ddbd9",
  base09 = base09,
  base10 = "#ee5396",
  base11 = "#33b1ff",
  base12 = "#ff7eb6",
  base13 = "#42be65",
  base14 = "#be95ff",
  base15 = "#82cfff",
  blend = "#131313",

  string = "#A5FF90",
  keyword = "#ff9d00",
  type = "#fad000",
  error = "#EC3A37F5",
  storage = "#FB94FF",
  macro = "#fad000",
  fg = "#FFFFFF",
  lineNumber = "#7870ab",
  bg = "#191830",
  white = "#FFFFFF",
  meta = "#9efff",
  number = "#FF628C",
  cyan = "#9EFFFF",

  none = "NONE"

}

-- LSP/Linters mistakenly show `undefined global` errors in the spec, they may
-- support an annotation like the following. Consult your server documentation.
---@diagnostic disable: undefined-global
local theme = lush(function(injected_functions)
  local sym = injected_functions.sym
  return {

ColorColumn {fg = colors.none, bg = colors.bg },
Cursor {fg = colors.base00, bg = colors.base04},
CursorLine {fg = colors.none, bg = colors.base01},
CursorColumn {fg = colors.none, bg = colors.base01},
CursorLineNr {fg = colors.base04, bg = colors.none},
QuickFixLine {fg = colors.none, bg = colors.base01},
Error {fg = colors.error, bg = colors.base01},
LineNr {fg = colors.lineNumber, bg = colors.base00},
NonText {fg = colors.fg, bg = colors.none},
Normal {fg = colors.fg, bg = colors.base00},
Pmenu {fg = colors.base04, bg = colors.base01},
PmenuSbar {fg = colors.base04, bg = colors.base01},
PmenuSel {fg = colors.base08, bg = colors.base02},
PmenuThumb {fg = colors.base08, bg = colors.base02},
SpecialKey {fg = colors.base03, bg = colors.none},
Visual {fg = colors.none, bg = colors.base02},
VisualNOS {fg = colors.none, bg = colors.base02},
TooLong {fg = colors.none, bg = colors.base02},
Debug {fg = colors.white, bg = colors.none},
Macro {fg = colors.cyan, bg = colors.none},
MatchParen {fg = colors.none, bg = colors.base02, underline = true},
Bold {fg = colors.none, bg = colors.none, bold = true},
Italic {fg = colors.none, bg = colors.none, italic = true},
Underlined {fg = colors.none, bg = colors.none, underline = true},
DiagnosticWarn {fg = colors.base14, bg = colors.none},
DiagnosticError {fg = colors.base10, bg = colors.none},
DiagnosticInfo {fg = colors.base09, bg = colors.none},
DiagnosticHint {fg = colors.base04, bg = colors.none},
DiagnosticUnderlineWarn {fg = colors.base14, bg = colors.none, undercurl = true},
DiagnosticUnderlineError {fg = colors.base10, bg = colors.none, undercurl = true},
DiagnosticUnderlineInfo {fg = colors.macro, bg = colors.none, undercurl = true},
DiagnosticUnderlineHint {fg = colors.macro, bg = colors.none, undercurl = true},
HealthError {fg = colors.base10, bg = colors.none},
HealthWarning {fg = colors.base14, bg = colors.none},
HealthSuccess {fg = colors.base13, bg = colors.none},

LspCodeLens {fg = colors.none, bg = colors.base03},
LspReferenceText {fg = colors.none, bg = colors.base03},
LspReferenceread {fg = colors.none, bg = colors.base03},
LspReferenceWrite {fg = colors.none, bg = colors.base03},
LspSignatureActiveParameter {fg = colors.base08, bg = colors.none},

Folded {fg = colors.base02, bg = colors.base01},
FoldColumn {fg = colors.base01, bg = colors.base00},
SignColumn {fg = colors.base01, bg = colors.base00},
Directory {fg = colors.base08, bg = colors.none},
EndOfBuffer {fg = colors.base01, bg = colors.none},

ErrorMsg {fg = colors.error, bg = colors.none},
ModeMsg {fg = colors.base04, bg = colors.none},
MoreMsg {fg = colors.base08, bg = colors.none},
Question {fg = colors.base04, bg = colors.none},
Substitute {fg = colors.base01, bg = colors.base08},
WarningMsg {fg = colors.base14, bg = colors.none},
WildMenu {fg = colors.base08, bg = colors.base01},
helpHyperTextJump {fg = colors.base08, bg = colors.none},
helpSpecial {fg = colors.base09, bg = colors.none},
helpHeadline {fg = colors.base10, bg = colors.none},
helpHeader {fg = colors.base15, bg = colors.none},
DiffAdded {fg = colors.base07, bg = colors.none},
DiffChanged {fg = colors.base09, bg = colors.none},
DiffRemoved {fg = colors.base10, bg = colors.none},
DiffAdd {bg = "#122f2f", fg = colors.none},
DiffChange {bg = "#222a39", fg = colors.none},
DiffText {bg = "#2f3f5c", fg = colors.none},
DiffDelete {bg = "#361c28", fg = colors.none},
IncSearch {fg = colors.base06, bg = colors.base10},
Search {fg = colors.base01, bg = colors.base08},
TabLine {link = "StatusLineNC"},
TabLineFill {link = "TabLine"},
TabLineSel {link = "StatusLine"},
Title {fg = colors.base04, bg = colors.none},
VertSplit {fg = colors.base01, bg = colors.base00},
WinSeparator {fg = colors.base01, bg = colors.base00},
Boolean {fg = colors.number, bg = colors.none},
Character {fg = colors.base14, bg = colors.none},
Comment {fg = colors.error, bg = colors.none, italic = true},
Conceal {fg = colors.none, bg = colors.none},
Conditional {fg = colors.base09, bg = colors.none},
Constant {fg = colors.macro, bg = colors.none},
Decorator {fg = colors.base12, bg = colors.none},
Define {fg = colors.storage, bg = colors.none},
Delimeter {fg = colors.keyword, bg = colors.none},
Exception {fg = colors.base09, bg = colors.none},
Float {link = "Number"},
Function {fg = colors.type, bg = colors.none},
Identifier {fg = colors.white, bg = colors.none},
Include {fg = colors.macro, bg = colors.none},
Keyword {fg = colors.keyword, bg = colors.none},
Label {fg = colors.type, bg = colors.none},
Number {fg = colors.number, bg = colors.none},
Operator {fg = colors.keyword, bg = colors.none},
PreProc {fg = colors.meta, bg = colors.none},
Repeat {fg = colors.base09, bg = colors.none},
Special {fg = colors.base04, bg = colors.none},
SpecialChar {fg = colors.base04, bg = colors.none},
SpecialComment {fg = colors.base08, bg = colors.none},
Statement {fg = colors.type, bg = colors.none},
StorageClass {fg = colors.keyword, bg = colors.none},
String {fg = colors.string, bg = colors.none},
Structure {fg = colors.macro, bg = colors.none},
Tag {fg = colors.base04, bg = colors.none},
Todo {fg = colors.base13, bg = colors.none},
Type {fg = colors.type, bg = colors.none},

-- Language specific stuff
-- rustModPath {fg = "#fad000" },
rustFoldBraces = {fg = colors.macro },
rustFloat = { fg = colors.number },

-- Plugins
RainbowRed = { fg = "#E06C75" },
RainbowYellow= { fg = "#E5C07B" },

}
end)

-- Return our parsed theme for extension or use elsewhere.
return theme

-- vi:nowrap