kanso.nvim/lua/kanso/themes.lua
2025-05-15 11:06:57 +02:00

428 lines
17 KiB
Lua

local c = require("kanso.lib.color")
--TODO:
--PreProc needs its own color
--parameter and field should be different
---@class SyntaxElements
---@field string ColorSpec
---@field variable ColorSpec
---@field number ColorSpec
---@field constant ColorSpec
---@field identifier ColorSpec
---@field parameter ColorSpec
---@field fun ColorSpec
---@field statement ColorSpec
---@field keyword ColorSpec
---@field operator ColorSpec
---@field preproc ColorSpec
---@field type ColorSpec
---@field regex ColorSpec
---@field deprecated ColorSpec
---@field comment ColorSpec
---@field punct ColorSpec
---@field special1 ColorSpec
---@field special2 ColorSpec
---@field special3 ColorSpec
---@class DiagnosticsElements
---@field error ColorSpec
---@field ok ColorSpec
---@field warning ColorSpec
---@field info ColorSpec
---@field hint ColorSpec
--
---@class DiffElements
---@field add ColorSpec
---@field delete ColorSpec
---@field change ColorSpec
---@field text ColorSpec
---@class VCSElements
---@field added ColorSpec
---@field removed ColorSpec
---@field changed ColorSpec
---@field untracked ColorSpec
---@class UiElements
---@field none ColorSpec
---@field fg ColorSpec Default foreground
---@field fg_dim ColorSpec Dimmed foreground
---@field fg_reverse ColorSpec
---@field bg_dim ColorSpec Dimmed background
---@field bg_m3 ColorSpec
---@field bg_m2 ColorSpec
---@field bg_m1 ColorSpec
---@field bg ColorSpec Default background
---@field bg_p1 ColorSpec Lighter background ColorColumn, Folded, Gutter
---@field bg_p2 ColorSpec Lighter background Cursor{Line,Column}, TabLineSel (Selected Items)
---@field bg_gutter ColorSpec {Sign,Fold}Column, LineNr
---@field special ColorSpec SpecialKey
---@field indent_line ColorSpec IndentLine
---@field active_indent_line ColorSpec IndentLine
---@field nontext ColorSpec LineNr, NonText
---@field whitespace ColorSpec Whitespace
---@field bg_search ColorSpec
---@field bg_visual ColorSpec
---@field cursor_line_nr_foreground ColorSpec
---@field cursor_line_nr_active_foreground ColorSpec
---@field cursor_bg ColorSpec
---@field cursor_fg ColorSpec
---@field pmenu MenuElements
---@field float FloatElements
---@class FloatElements
---@field fg ColorSpec
---@field bg ColorSpec
---@field fg_border ColorSpec
---@field bg_border ColorSpec
---@class MenuElements
---@field bg ColorSpec
---@field fg ColorSpec
---@field fg_sel ColorSpec
---@field bg_sel ColorSpec
---@field bg_sbar ColorSpec
---@field bg_thumb ColorSpec
---@class ThemeColors
---@field syn SyntaxElements
---@field diag DiagnosticsElements
---@field vcs VCSElements
---@field diff DiffElements
---@field ui UiElements
---@field term ColorSpec[]
return {
---@param palette PaletteColors
---@return ThemeColors
zen = function(palette)
return {
ui = {
none = "NONE",
fg = palette.inkWhite,
fg_dim = palette.oldWhite,
fg_reverse = palette.zenBlue1,
bg_dim = palette.zen0,
bg_m3 = palette.zen0,
bg_m2 = palette.zen0,
bg_m1 = palette.zen0,
bg = palette.zen0,
bg_p1 = palette.zen1,
bg_p2 = palette.zen2,
special = palette.inkGray3,
indent_line = palette.inkBlack2,
active_indent_line = palette.inkBlack3,
whitespace = palette.inkBlack0,
nontext = palette.inkAsh,
bg_visual = palette.inkBlack3,
bg_search = palette.zenBlue2,
cursor_line_nr_foreground = palette.inkGray3,
cursor_line_nr_active_foreground = palette.fujiWhite,
cursor_bg = palette.fujiWhite,
cursor_fg = palette.zen0,
pmenu = {
fg = palette.fujiWhite,
fg_sel = "NONE",
bg = palette.zen0,
bg_sel = palette.inkBlack3,
bg_thumb = palette.inkBlack3,
bg_sbar = palette.zen0,
},
float = {
fg = palette.oldWhite,
bg = palette.zen0,
fg_border = palette.zen2,
bg_border = palette.zen0,
},
},
syn = {
string = palette.inkGreen2,
variable = "NONE",
number = palette.inkPink,
constant = palette.inkOrange,
identifier = palette.inkViolet,
parameter = palette.inkGray1,
fun = palette.inkBlue2,
statement = palette.inkViolet,
keyword = palette.inkViolet,
operator = palette.inkGray1,
preproc = palette.inkGray1,
type = palette.inkAqua,
regex = palette.inkRed,
deprecated = palette.katanaGray,
punct = palette.inkGray1,
comment = palette.inkGray2,
special1 = palette.inkYellow,
special2 = palette.inkViolet,
special3 = palette.inkViolet,
},
diag = {
error = palette.samuraiRed,
ok = palette.springGreen,
warning = palette.roninYellow,
info = palette.inkBlue,
hint = palette.zenAqua1,
},
diff = {
add = palette.winterGreen,
delete = palette.winterRed,
change = palette.winterBlue,
text = palette.winterYellow,
},
vcs = {
added = palette.autumnGreen,
removed = palette.autumnRed,
changed = palette.autumnYellow,
untracked = palette.inkGray2
},
term = {
palette.zen0, -- black
palette.inkRed, -- red
palette.inkGreen2, -- green
palette.inkYellow, -- yellow
palette.inkBlue2, -- blue
palette.inkPink, -- magenta
palette.inkWhite, -- cyan
palette.oldWhite, -- white
palette.inkGray1, -- bright black
palette.zenRed, -- bright red
palette.inkGreen, -- bright green
palette.carpYellow, -- bright yellow
palette.springBlue, -- bright blue
palette.springViolet1, -- bright magenta
palette.zenAqua2, -- bright cyan
palette.inkWhite, -- bright white
palette.inkOrange, -- extended color 1
palette.inkOrange2, -- extended color 2
},
}
end,
---@param palette PaletteColors
---@return ThemeColors
ink = function(palette)
return {
ui = {
none = "NONE",
fg = palette.inkWhite,
fg_dim = palette.oldWhite,
fg_reverse = palette.zenBlue1,
bg_dim = palette.inkBlack0,
bg_m3 = palette.inkBlack0,
bg_m2 = palette.inkBlack0,
bg_m1 = palette.inkBlack0,
bg = palette.inkBlack0,
bg_p1 = palette.inkBlack1,
bg_p2 = palette.inkBlack2,
special = palette.inkGray3,
indent_line = palette.inkBlack2,
active_indent_line = palette.inkBlack3,
whitespace = palette.inkBlack0,
nontext = palette.inkAsh,
bg_visual = palette.inkBlack3,
bg_search = palette.zenBlue2,
cursor_line_nr_foreground = palette.inkGray3,
cursor_line_nr_active_foreground = palette.fujiWhite,
cursor_bg = palette.fujiWhite,
cursor_fg = palette.inkBlack0,
pmenu = {
fg = palette.fujiWhite,
fg_sel = "NONE",
bg = palette.inkBlack0,
bg_sel = palette.inkBlack3,
bg_thumb = palette.inkBlack3,
bg_sbar = palette.inkBlack0,
},
float = {
fg = palette.oldWhite,
bg = palette.inkBlack0,
fg_border = palette.inkBlack2,
bg_border = palette.inkBlack0,
},
},
syn = {
string = palette.inkGreen2,
variable = "NONE",
number = palette.inkPink,
constant = palette.inkOrange,
identifier = palette.inkViolet,
parameter = palette.inkGray1,
fun = palette.inkBlue2,
statement = palette.inkViolet,
keyword = palette.inkViolet,
operator = palette.inkGray1,
preproc = palette.inkGray1,
type = palette.inkAqua,
regex = palette.inkRed,
deprecated = palette.katanaGray,
punct = palette.inkGray1,
comment = palette.inkGray2,
special1 = palette.inkYellow,
special2 = palette.inkViolet,
special3 = palette.inkViolet,
},
diag = {
error = palette.samuraiRed,
ok = palette.springGreen,
warning = palette.roninYellow,
info = palette.inkBlue,
hint = palette.zenAqua1,
},
diff = {
add = palette.winterGreen,
delete = palette.winterRed,
change = palette.winterBlue,
text = palette.winterYellow,
},
vcs = {
added = palette.autumnGreen,
removed = palette.autumnRed,
changed = palette.autumnYellow,
untracked = palette.inkGray2
},
term = {
palette.inkBlack0, -- black
palette.inkRed, -- red
palette.inkGreen2, -- green
palette.inkYellow, -- yellow
palette.inkBlue2, -- blue
palette.inkPink, -- magenta
palette.inkWhite, -- cyan
palette.oldWhite, -- white
palette.inkGray1, -- bright black
palette.zenRed, -- bright red
palette.inkGreen, -- bright green
palette.carpYellow, -- bright yellow
palette.springBlue, -- bright blue
palette.springViolet1, -- bright magenta
palette.zenAqua2, -- bright cyan
palette.inkWhite, -- bright white
palette.inkOrange, -- extended color 1
palette.inkOrange2, -- extended color 2
},
}
end,
---@param palette PaletteColors
---@return ThemeColors
pearl = function(palette)
return {
ui = {
none = "NONE",
fg = palette.pearlInk0,
fg_dim = palette.pearlInk0,
fg_reverse = palette.pearlGray,
bg_dim = palette.pearlWhite0,
bg_m3 = palette.pearlWhite0,
bg_m2 = palette.pearlWhite0,
bg_m1 = palette.pearlWhite0,
bg = palette.pearlWhite0,
bg_p1 = palette.pearlWhite1,
bg_p2 = palette.pearlWhite1,
nontext = palette.pearlViolet1,
whitespace = palette.pearlWhite0,
special = palette.pearlViolet2,
indent_line = palette.pearlWhite1,
active_indent_line = palette.pearlWhite2,
bg_visual = palette.pearlWhite2,
bg_search = palette.pearlBlue2,
cursor_line_nr_foreground = palette.pearlGray4,
cursor_line_nr_active_foreground = palette.inkBlack2,
cursor_bg = palette.fujiWhite,
cursor_fg = palette.inkBlack2,
pmenu = {
fg = palette.pearlInk2,
fg_sel = "NONE", -- This is important to make highlights pass-through
bg = palette.pearlWhite0,
bg_sel = palette.pearlWhite2,
bg_thumb = palette.pearlWhite2,
bg_sbar = palette.pearlWhite0,
},
float = {
fg = palette.pearlInk2,
bg = palette.pearlWhite0,
fg_border = palette.pearlWhite2,
bg_border = palette.pearlWhite0,
},
},
syn = {
string = palette.pearlGreen,
variable = "NONE",
number = palette.pearlPink,
constant = palette.pearlOrange,
identifier = palette.pearlViolet4,
parameter = palette.pearlBlue5,
fun = palette.pearlBlue4,
statement = palette.pearlViolet4,
keyword = palette.pearlViolet4,
operator = palette.pearlGray3,
preproc = palette.pearlGray2,
type = palette.pearlAqua,
regex = palette.pearlYellow2,
deprecated = palette.pearlGray3,
comment = palette.pearlGray3,
punct = palette.pearlGray3,
special1 = palette.pearlYellow2,
special2 = palette.pearlViolet4,
special3 = palette.pearlViolet4,
},
vcs = {
added = palette.pearlGreen2,
removed = palette.pearlRed2,
changed = palette.pearlYellow3,
untracked = palette.pearlGray4
},
diff = {
add = palette.pearlGreen3,
delete = palette.pearlRed4,
change = palette.pearlCyan,
text = palette.pearlYellow4,
},
diag = {
error = palette.pearlRed3,
ok = palette.pearlGreen,
warning = palette.pearlOrange2,
info = palette.pearlTeal3,
hint = palette.pearlAqua2,
},
term = {
palette.inkBlack2, -- black
palette.pearlRed, -- red
palette.pearlGreen, -- green
palette.pearlYellow, -- yellow
palette.pearlBlue4, -- blue
palette.pearlPink, -- magenta
palette.pearlAqua, -- cyan
palette.pearlInk0, -- white
palette.pearlGray3, -- bright black
palette.pearlRed2, -- bright red
palette.pearlGreen2, -- bright green
palette.pearlYellow2, -- bright yellow
palette.pearlTeal2, -- bright blue
palette.pearlViolet4, -- bright magenta
palette.pearlAqua2, -- bright cyan
palette.pearlInk2, -- bright white
palette.pearlOrange2, -- extended color 1
palette.pearlRed3, -- extended color 2
},
}
end,
}