consolidated colors

This commit is contained in:
2026-08-09 11:36:02 -05:00
parent e3b43d2274
commit 857d5d78e8
5 changed files with 493 additions and 299 deletions
+308 -296
View File
@@ -15,124 +15,136 @@
---@diagnostic disable: undefined-global
local lush = require("lush")
local hsl = lush.hsl
local darken = function(color, by)
by = 12 * (by or 1)
return color.darken(by)
end
local lighten = function(color, by)
by = 12 * (by or 1)
return color.lighten(by)
end
local black = hsl("#101017")
local black2 = hsl("#101016")
local base_colors = {
black = black,
black2 = black2,
blue = hsl("#6877bb"),
cyan = hsl("#00FFFF").darken(40),
green = hsl("#6A906A"),
orange = hsl("#BC8043").lighten(8),
red = hsl("#CF6060"),
tan = hsl("#9A8065"),
purple = hsl("#9876AA"),
yellow = hsl("#ffff80").darken(53),
white = hsl("#a5a0a1").lighten(12)
}
local primary_colors = {
black = base_colors.black,
black2 = base_colors.black2,
blue = base_colors.blue,
cyan = base_colors.cyan,
green = base_colors.green,
grey = darken(base_colors.white, 5),
orange = base_colors.orange,
light_orange = lighten(base_colors.orange, 1.5),
purple = base_colors.purple,
light_grey = darken(base_colors.white, 1.4),
white = base_colors.white,
red = base_colors.red,
tan = base_colors.tan,
yellow = base_colors.yellow
none = "NONE",
black_dark = "#0A0A0F",
black = "#111118",
black_light = "#1D1B1C",
grey_darkest = "#474344",
grey_darker = "#5C5758",
grey_dark = "#5F595A",
grey = "#766F71",
grey_lighter = "#9C9697",
silver = "#B0ABAC",
silver_lighter = "#BFBBBC",
white = "#FFFFFF",
blue_saturated = "#004EAD",
blue_darkest = "#344074",
blue_darker = "#445397",
blue = "#727FAF",
blue_black_dark = "#20202C",
blue_black = "#212130",
blue_black_light = "#242433",
blue_grey_darkest = "#282839",
blue_grey_darker = "#2E2E42",
blue_grey_dark = "#3F3F5A",
blue_grey = "#434360",
blue_grey_light = "#4D4D6F",
cyan = "#009999",
green_darkest = "#1E3A1E",
green_darker = "#364936",
green_dark = "#506D50",
green = "#6A906A",
yellow_darkest = "#2E2E1E",
yellow = "#B5A15A",
orange_darkest = "#4D3D22",
orange_dark = "#B47A41",
orange = "#C18A53",
orange_light = "#CC9E71",
red_darkest = "#3A1E1E",
red_darker = "#4A2020",
red_dark = "#952D2D",
red = "#C96B68",
purple = "#927B9E",
tan = "#9A8065"
}
local colors = {
BufferBackground = primary_colors.black,
ColorColumnBackground = lighten(primary_colors.black, 0.8),
CommentForeground = lighten(primary_colors.grey, 2.1),
ConcealBackground = primary_colors.grey,
ConcealForeground = darken(primary_colors.white),
None = primary_colors.none,
IconAzureForeground = primary_colors.blue_saturated,
IconCyanForeground = primary_colors.cyan,
GutterBackground = primary_colors.black_dark,
Background = primary_colors.black,
FaintForeground = primary_colors.black_light,
AddedBackground = primary_colors.green_darkest,
InactiveStatusBackground = primary_colors.blue_black_dark,
StatusBackground = primary_colors.blue_black,
RaisedBackground = primary_colors.blue_black_light,
TabBackground = primary_colors.blue_grey_darkest,
ChangedBackground = primary_colors.yellow_darkest,
SecondaryBackground = primary_colors.blue_grey_darker,
ModeCommandBackground = primary_colors.blue_darkest,
TodoBackground = primary_colors.green_darker,
RemovedBackground = primary_colors.red_darkest,
SelectionBackground = primary_colors.blue_grey_dark,
ModeNormalBackground = primary_colors.blue_grey,
ModeVisualBackground = primary_colors.blue_darker,
ConcealBackground = primary_colors.grey_darkest,
ScrollbarBackground = primary_colors.blue_grey_light,
ModeInsertBackground = primary_colors.green_dark,
LineNrForeground = primary_colors.grey_darker,
ErrorBackground = primary_colors.red_darker,
DiffTextBackground = primary_colors.orange_darkest,
DimForeground = primary_colors.grey_dark,
AccentForeground = primary_colors.blue,
PositiveForeground = primary_colors.green,
CommentForeground = primary_colors.grey,
ModeReplaceBackground = primary_colors.red_dark,
ConstantForeground = primary_colors.purple,
CursorLineBackground = lighten(primary_colors.black, 0.8),
CursorLineNrForeground = primary_colors.green,
DirectoryForeground = lighten(primary_colors.light_grey, 1),
DirectoryIconForeground = primary_colors.tan,
EOBBackground = primary_colors.black,
ErrorBackground = darken(primary_colors.red, 5),
SecondaryForeground = primary_colors.grey_lighter,
NormalForeground = primary_colors.silver,
WarningForeground = primary_colors.yellow,
OperatorForeground = primary_colors.orange_dark,
EmphasisForeground = primary_colors.silver_lighter,
SyntaxForeground = primary_colors.orange,
FunctionForeground = primary_colors.orange_light,
ErrorForeground = primary_colors.red,
FileForeground = primary_colors.light_grey,
FloatBackground = lighten(primary_colors.black, 0.8),
FloatForeground = lighten(primary_colors.white, 2),
FunctionForeground = primary_colors.light_orange,
HighlightBackground = "NONE",
HighlightForeground = lighten(primary_colors.white, 1.5),
HintForeground = darken(primary_colors.white, 1),
InfoForeground = lighten(primary_colors.white),
InlayForeground = lighten(primary_colors.grey, 1),
KeywordForeground = primary_colors.orange,
LineNrForeground = darken(primary_colors.white, 4),
NamespaceForeground = primary_colors.orange,
NonTextForeground = lighten(primary_colors.grey, 1),
NormalForeground = primary_colors.white,
NumberForeground = primary_colors.blue,
NrBackground = darken(primary_colors.black, 3.5),
OperatorForeground = darken(primary_colors.orange, 1),
PmenuSelBackground = lighten(primary_colors.black, 2),
PreProcForeground = primary_colors.yellow,
ProgressForeground = darken(primary_colors.white),
RootForeground = primary_colors.green,
ScrollViewBackground = hsl("#FFFFFF"),
ScrollViewForeground = "NONE",
SearchBackground = "NONE",
SearchForeground = primary_colors.blue,
SelectionBackground = lighten(primary_colors.black, 2),
SpecialForeground = primary_colors.orange,
StatusBackground = lighten(primary_colors.black, 0.7),
StatusBackgroundNC = lighten(primary_colors.black2, 0.7),
StringForeground = primary_colors.green,
WarningForeground = primary_colors.yellow
ScrollbarThumbBackground = primary_colors.white
}
vim.g.choosewin_color_label = {
gui = {colors.PmenuSelBackground.hex, colors.FloatForeground.hex, "bold"}
gui = {colors.SelectionBackground, colors.EmphasisForeground, "bold"}
}
vim.g.choosewin_color_label_current = {
gui = {primary_colors.green.hex, colors.FloatBackground.hex, "bold"}
gui = {colors.PositiveForeground, colors.RaisedBackground, "bold"}
}
vim.g.choosewin_color_other = {
gui = {colors.StatusBackground.hex}
gui = {colors.StatusBackground}
}
local create_lualine_theme = function()
local theme_colors = {
background_i = darken(primary_colors.green, 2).hex,
background_n = lighten(primary_colors.black, 2.2).hex,
background_b = lighten(primary_colors.black, 1.3).hex,
background_c = colors.StatusBackground.hex,
background_cm = darken(primary_colors.blue, 3.5).hex,
background_r = darken(primary_colors.red, 3).hex,
background_v = darken(primary_colors.blue, 2).hex,
foreground = lighten(primary_colors.white, 1).hex,
foreground_2 = primary_colors.white.hex,
foreground_3 = darken(primary_colors.white).hex
}
local theme_colors
if vim.o.termguicolors then
theme_colors = {
background_i = colors.ModeInsertBackground,
background_n = colors.ModeNormalBackground,
background_b = colors.SecondaryBackground,
background_c = colors.StatusBackground,
background_cm = colors.ModeCommandBackground,
background_r = colors.ModeReplaceBackground,
background_v = colors.ModeVisualBackground,
foreground = colors.EmphasisForeground,
foreground_2 = colors.NormalForeground,
foreground_3 = colors.SecondaryForeground
}
else
theme_colors = {
background_i = 2,
background_n = 8,
background_b = 8,
background_c = 0,
background_cm = 4,
background_r = 1,
background_v = 4,
foreground = 15,
foreground_2 = 7,
foreground_3 = 8
}
end
return {
normal = {
a = {
@@ -204,6 +216,7 @@ if ok then
pattern = "darcula_lush",
callback = function()
lualine.setup({options = {theme = create_lualine_theme()}})
require("lush_theme.darcula_lush.cterm").apply_matching("^lualine_")
end
}
)
@@ -220,11 +233,11 @@ local theme =
CodeHint {gui = "reverse"},
CodeInfo {gui = "reverse"},
CodeWarn {gui = "reverse"},
ErrorSign {bg = colors.NrBackground, fg = colors.ErrorForeground},
HintSign {bg = colors.NrBackground, fg = colors.HintForeground},
InfoSign {bg = colors.NrBackground, fg = colors.InfoForeground},
WarningSign {bg = colors.NrBackground, fg = colors.WarningForeground},
IblScope {fg = colors.ConcealForeground, bg = "NONE"},
ErrorSign {bg = colors.GutterBackground, fg = colors.ErrorForeground},
HintSign {bg = colors.GutterBackground, fg = colors.SecondaryForeground},
InfoSign {bg = colors.GutterBackground, fg = colors.EmphasisForeground},
WarningSign {bg = colors.GutterBackground, fg = colors.WarningForeground},
IblScope {fg = colors.SecondaryForeground, bg = colors.None},
IdentifierUnderCaret {
gui = "underline,bold,italic"
},
@@ -239,63 +252,63 @@ local theme =
--
-- CoC
CocErrorHighlight {fg = colors.ErrorForeground, gui = "bold,underline"},
CocHintHighlight {fg = colors.HintForeground, gui = "bold,underline"},
CocInfoHighlight {fg = colors.InfoForeground, gui = "bold,underline"},
CocHintHighlight {fg = colors.SecondaryForeground, gui = "bold,underline"},
CocInfoHighlight {fg = colors.EmphasisForeground, gui = "bold,underline"},
CocWarnHighlight {fg = colors.WarningForeground, gui = "bold,underline"},
CocHighlightRead {IdentifierUnderCaret},
CocHighlightText {IdentifierUnderCaret},
CocHighlightWrite {IdentifierUnderCaretWrite},
CocCodeLens {fg = colors.InlayForeground, bg = "NONE"},
CocErrorFloat {fg = colors.FloatForeground, bg = colors.FloatBackground},
CocFloating {fg = colors.FloatForeground, bg = colors.FloatBackground},
CocHintFloat {fg = colors.FloatForeground, bg = colors.FloatBackground},
CocHintVirtualText {fg = colors.InlayForeground, bg = "NONE"},
CocInfoFloat {fg = colors.FloatForeground, bg = colors.FloatBackground},
CocInlayHint {fg = colors.InlayForeground, bg = "NONE"},
CocMenuSel {bg = colors.PmenuSelBackground},
CocCodeLens {fg = colors.DimForeground, bg = colors.None},
CocErrorFloat {fg = colors.EmphasisForeground, bg = colors.RaisedBackground},
CocFloating {fg = colors.EmphasisForeground, bg = colors.RaisedBackground},
CocHintFloat {fg = colors.EmphasisForeground, bg = colors.RaisedBackground},
CocHintVirtualText {fg = colors.DimForeground, bg = colors.None},
CocInfoFloat {fg = colors.EmphasisForeground, bg = colors.RaisedBackground},
CocInlayHint {fg = colors.DimForeground, bg = colors.None},
CocMenuSel {bg = colors.SelectionBackground},
CocNotificationError {
fg = colors.FloatForeground,
bg = colors.FloatBackground
fg = colors.EmphasisForeground,
bg = colors.RaisedBackground
},
CocNotificationInfo {
fg = colors.FloatForeground,
bg = colors.FloatBackground
fg = colors.EmphasisForeground,
bg = colors.RaisedBackground
},
CocNotificationProgress {
fg = colors.ProgressForeground,
bg = colors.FloatBackground
fg = colors.SecondaryForeground,
bg = colors.RaisedBackground
},
CocNotificationWarning {
fg = colors.FloatForeground,
bg = colors.FloatBackground
fg = colors.EmphasisForeground,
bg = colors.RaisedBackground
},
CocPumMenu {fg = colors.FloatForeground, bg = colors.FloatBackground},
CocSearch {fg = colors.SearchForeground},
CocPumMenu {fg = colors.EmphasisForeground, bg = colors.RaisedBackground},
CocSearch {fg = colors.AccentForeground},
CocSemClass {fg = colors.FunctionForeground},
CocSymbolConstant {fg = colors.ConstantForeground},
CocSymbolConstructor {fg = colors.FunctionForeground},
CocSymbolFunction {fg = colors.FunctionForeground},
CocSymbolMethod {fg = colors.FunctionForeground},
CocUnderline {fg = colors.NumberForeground, gui = "bold,underline"},
CocWarningFloat {fg = colors.FloatForeground, bg = colors.FloatBackground},
CocUnderline {fg = colors.AccentForeground, gui = "bold,underline"},
CocWarningFloat {fg = colors.EmphasisForeground, bg = colors.RaisedBackground},
-- easymotion
EasyMotionShade {fg = colors.CommentForeground},
EasyMotionIncSearch {
fg = colors.SearchForeground,
fg = colors.AccentForeground,
gui = "bold,italic,underline"
},
EasyMotionTarget {gui = "underline", fg = colors.WarningForeground},
--
-- fidget
FidgetDone {fg = colors.StringForeground},
FidgetGroup {fg = darken(colors.NormalForeground, 7)},
FidgetProgress {fg = colors.NumberForeground},
FidgetDone {fg = colors.PositiveForeground},
FidgetGroup {fg = colors.FaintForeground},
FidgetProgress {fg = colors.AccentForeground},
--
-- gitsigns
GitSignsCurrentLineBlame {fg = colors.CommentForeground, bg = "NONE"},
GitSignsCurrentLineBlame {fg = colors.CommentForeground, bg = colors.None},
--
-- lua
luaParenError {bg = "NONE"},
luaParenError {bg = colors.None},
--
-- nvim-cmp
CmpItemAbbr {fg = colors.NormalForeground},
@@ -303,137 +316,137 @@ local theme =
fg = colors.CommentForeground,
gui = "strikethrough"
},
CmpItemAbbrMatch {fg = colors.NumberForeground},
CmpItemAbbrMatch {fg = colors.AccentForeground},
CmpItemAbbrMatchFuzzy {CmpItemAbbrMatch},
CmpItemKind {fg = colors.KeywordForeground},
CmpItemKindDefault {fg = colors.KeywordForeground},
CmpItemMenu {fg = colors.FloatForeground},
CmpItemKind {fg = colors.SyntaxForeground},
CmpItemKindDefault {fg = colors.SyntaxForeground},
CmpItemMenu {fg = colors.EmphasisForeground},
--
-- nvim notify
NotifyBackground {
bg = colors.FloatBackground,
fg = colors.FloatBackground
bg = colors.RaisedBackground,
fg = colors.RaisedBackground
},
NotifyINFOBody {
-- bg = colors.FloatBackground,
fg = colors.FloatForeground
-- bg = colors.RaisedBackground,
fg = colors.EmphasisForeground
},
NotifyINFOBorder {
-- bg = colors.FloatBackground,
fg = colors.FloatForeground
-- bg = colors.RaisedBackground,
fg = colors.EmphasisForeground
},
NotifyINFOIcon {
-- bg = colors.FloatBackground,
fg = colors.StringForeground
-- bg = colors.RaisedBackground,
fg = colors.PositiveForeground
},
NotifyINFOTitle {
-- bg = colors.FloatBackground,
fg = colors.StringForeground
-- bg = colors.RaisedBackground,
fg = colors.PositiveForeground
},
NotifyERRORBody {
-- bg = colors.FloatBackground,
fg = colors.FloatForeground
-- bg = colors.RaisedBackground,
fg = colors.EmphasisForeground
},
NotifyERRORBorder {
-- bg = colors.FloatBackground,
fg = colors.FloatForeground
-- bg = colors.RaisedBackground,
fg = colors.EmphasisForeground
},
NotifyERRORIcon {
-- bg = colors.FloatBackground,
-- bg = colors.RaisedBackground,
fg = colors.ErrorForeground
},
NotifyERRORTitle {
-- bg = colors.FloatBackground,
-- bg = colors.RaisedBackground,
fg = colors.ErrorForeground
},
NotifyWARNBody {
-- bg = colors.FloatBackground,
fg = colors.FloatForeground
-- bg = colors.RaisedBackground,
fg = colors.EmphasisForeground
},
NotifyWARNBorder {
-- bg = colors.FloatBackground,
fg = colors.FloatForeground
-- bg = colors.RaisedBackground,
fg = colors.EmphasisForeground
},
NotifyWARNIcon {
-- bg = colors.FloatBackground,
-- bg = colors.RaisedBackground,
fg = colors.WarningForeground
},
NotifyWARNTitle {
-- bg = colors.FloatBackground,
-- bg = colors.RaisedBackground,
fg = colors.WarningForeground
},
NotifyDEBUGBody {
-- bg = colors.FloatBackground,
fg = colors.FloatForeground
-- bg = colors.RaisedBackground,
fg = colors.EmphasisForeground
},
NotifyDEBUGBorder {
-- bg = colors.FloatBackground,
fg = colors.FloatForeground
-- bg = colors.RaisedBackground,
fg = colors.EmphasisForeground
},
NotifyDEBUGIcon {
-- bg = colors.FloatBackground,
fg = colors.NumberForeground
-- bg = colors.RaisedBackground,
fg = colors.AccentForeground
},
NotifyDEBUGTitle {
-- bg = colors.FloatBackground,
fg = colors.NumberForeground
-- bg = colors.RaisedBackground,
fg = colors.AccentForeground
},
NotifyTRACEBody {
-- bg = colors.FloatBackground,
-- bg = colors.RaisedBackground,
fg = colors.ConstantForeground
},
NotifyTRACEBorder {
-- bg = colors.FloatBackground,
-- bg = colors.RaisedBackground,
fg = colors.ConstantForeground
},
--
-- nvim tree
NvimTreeEndOfBuffer {bg = colors.EOBBackground},
NvimTreeEndOfBuffer {bg = colors.Background},
NvimTreeFolderIcon {fg = colors.DirectoryIconForeground},
NvimTreeFolderName {fg = colors.DirectoryForeground, gui = "bold"},
NvimTreeNormal {bg = colors.EOBBackground, fg = colors.FileForeground},
NvimTreeOpenedFolderName {fg = colors.DirectoryForeground, gui = "bold"},
NvimTreeRootFolder {fg = colors.RootForeground},
NvimTreeFolderName {fg = colors.SecondaryForeground, gui = "bold"},
NvimTreeNormal {bg = colors.Background, fg = colors.SecondaryForeground},
NvimTreeOpenedFolderName {fg = colors.SecondaryForeground, gui = "bold"},
NvimTreeRootFolder {fg = colors.PositiveForeground},
NvimTreeGitDirty {fg = colors.ErrorForeground},
NvimTreeGitDirtyIcon {fg = colors.ErrorForeground},
NvimTreeSymlink {fg = colors.NumberForeground, gui = "italic"},
NvimTreeExecFile {fg = colors.StringForeground, gui = "italic"},
NvimTreeSymlink {fg = colors.AccentForeground, gui = "italic"},
NvimTreeExecFile {fg = colors.PositiveForeground, gui = "italic"},
--
-- nvim scrollview
ScrollView {
fg = colors.ScrollViewForeground,
bg = colors.ScrollViewBackground
fg = colors.None,
bg = colors.ScrollbarThumbBackground
},
--
-- Telescope
TelescopeBorder {bg = lighten(colors.EOBBackground, 1)},
TelescopeMatching {fg = colors.SearchForeground},
TelescopeNormal {bg = colors.BufferBackground},
TelescopePromptNormal {bg = colors.BufferBackground},
TelescopeBorder {bg = colors.TabBackground},
TelescopeMatching {fg = colors.AccentForeground},
TelescopeNormal {bg = colors.Background},
TelescopePromptNormal {bg = colors.Background},
--
-- Neovim
Added {fg = colors.StringForeground},
Added {fg = colors.PositiveForeground},
Changed {gui = "italic,underline"},
Character {fg = colors.StringForeground},
ColorColumn {bg = colors.ColorColumnBackground},
Character {fg = colors.PositiveForeground},
ColorColumn {bg = colors.RaisedBackground},
Comment {fg = colors.CommentForeground},
Conceal {bg = colors.ConcealBackground, fg = colors.ConcealForeground},
Conditional {fg = colors.KeywordForeground},
Conceal {bg = colors.ConcealBackground, fg = colors.SecondaryForeground},
Conditional {fg = colors.SyntaxForeground},
Constant {fg = colors.ConstantForeground},
Cursor {gui = "reverse"},
CursorColumn {
gui = "underline",
fg = colors.HighlightForeground,
bg = colors.HighlightBackground
fg = colors.EmphasisForeground,
bg = colors.None
},
CursorLine {bg = colors.CursorLineBackground},
CursorLine {bg = colors.RaisedBackground},
CursorLineNr {
bg = colors.NrBackground,
fg = colors.CursorLineNrForeground
bg = colors.GutterBackground,
fg = colors.PositiveForeground
},
CurSearch {
fg = colors.SearchForeground,
bg = colors.SearchBackground,
fg = colors.AccentForeground,
bg = colors.None,
gui = "bold,italic,underline"
},
Delimiter {fg = colors.FunctionForeground},
@@ -447,29 +460,29 @@ local theme =
DiagnosticFloatingWarn {CocWarningFloat},
DiagnosticSignError {
fg = colors.ErrorForeground,
bg = colors.NrBackground
bg = colors.GutterBackground
},
DiagnosticSignHint {fg = colors.HintForeground, bg = colors.NrBackground},
DiagnosticSignInfo {fg = colors.InfoForeground, bg = colors.NrBackground},
DiagnosticSignHint {fg = colors.SecondaryForeground, bg = colors.GutterBackground},
DiagnosticSignInfo {fg = colors.EmphasisForeground, bg = colors.GutterBackground},
DiagnosticSignWarn {
fg = colors.WarningForeground,
bg = colors.NrBackground
bg = colors.GutterBackground
},
DiagnosticLineNrError {
fg = colors.ErrorForeground,
bg = colors.NrBackground
bg = colors.GutterBackground
},
DiagnosticLineNrHint {
fg = colors.HintForeground,
bg = colors.NrBackground
fg = colors.SecondaryForeground,
bg = colors.GutterBackground
},
DiagnosticLineNrInfo {
fg = colors.InfoForeground,
bg = colors.NrBackground
fg = colors.EmphasisForeground,
bg = colors.GutterBackground
},
DiagnosticLineNrWarn {
fg = colors.WarningForeground,
bg = colors.NrBackground
bg = colors.GutterBackground
},
DiagnosticUnderlineError {
CocErrorHighlight
@@ -483,151 +496,150 @@ local theme =
DiagnosticUnderlineWarn {
CocWarnHighlight
},
DiagnosticVirtualTextError {fg = colors.InlayForeground, bg = "NONE"},
DiagnosticVirtualTextWarn {fg = colors.InlayForeground, bg = "NONE"},
DiagnosticVirtualTextInfo {fg = colors.InlayForeground, bg = "NONE"},
DiagnosticVirtualTextHint {fg = colors.InlayForeground, bg = "NONE"},
DiffAdd {bg = "#1e3a1e"},
DiffChange {bg = "#2e2e1e"},
DiffDelete {bg = "#3a1e1e"},
DiffText {bg = "#5e4a1e"},
Directory {fg = colors.FileForeground},
EndOfBuffer {bg = colors.EOBBackground},
DiagnosticVirtualTextError {fg = colors.DimForeground, bg = colors.None},
DiagnosticVirtualTextWarn {fg = colors.DimForeground, bg = colors.None},
DiagnosticVirtualTextInfo {fg = colors.DimForeground, bg = colors.None},
DiagnosticVirtualTextHint {fg = colors.DimForeground, bg = colors.None},
DiffAdd {bg = colors.AddedBackground},
DiffChange {bg = colors.ChangedBackground},
DiffDelete {bg = colors.RemovedBackground},
DiffText {bg = colors.DiffTextBackground},
Directory {fg = colors.SecondaryForeground},
EndOfBuffer {bg = colors.Background},
Error {
gui = "italic",
bg = colors.ErrorBackground,
fg = colors.ErrorForeground
},
ErrorMsg {fg = colors.ErrorForeground},
Exception {fg = colors.KeywordForeground},
FloatBorder {bg = colors.FloatBackground},
FoldColumn {fg = colors.ErrorForeground, bg = colors.NrBackground},
Exception {fg = colors.SyntaxForeground},
FloatBorder {bg = colors.RaisedBackground},
FoldColumn {fg = colors.ErrorForeground, bg = colors.GutterBackground},
Folded {fg = colors.CommentForeground, bg = colors.ConcealBackground},
Function {fg = colors.FunctionForeground},
Identifier {fg = colors.NormalForeground},
IncSearch {fg = colors.SearchForeground, gui = "bold,italic,underline"},
Keyword {fg = colors.KeywordForeground},
Label {fg = colors.KeywordForeground},
LineNr {bg = colors.NrBackground, fg = colors.LineNrForeground},
LineNrSpecial {bg = colors.NrBackground, fg = colors.SpecialForeground},
IncSearch {fg = colors.AccentForeground, gui = "bold,italic,underline"},
Keyword {fg = colors.SyntaxForeground},
Label {fg = colors.SyntaxForeground},
LineNr {bg = colors.GutterBackground, fg = colors.LineNrForeground},
LineNrSpecial {bg = colors.GutterBackground, fg = colors.SyntaxForeground},
LspReferenceRead {
gui = "underline,italic",
guibg = "NONE"
guibg = colors.None
},
LspReferenceText {
gui = "underline,italic",
guibg = "NONE"
guibg = colors.None
},
LspReferenceWrite {
gui = "underline,bold,italic",
guibg = "NONE"
guibg = colors.None
},
LspCodeLens {fg = CocCodeLens.fg},
LspCodeLensSeparator {fg = CocCodeLens.fg},
LspSignatureActiveParameter {gui = "italic", fg = colors.NumberForeground},
LspCodeLens {fg = colors.DimForeground},
LspCodeLensSeparator {fg = colors.DimForeground},
LspSignatureActiveParameter {gui = "italic", fg = colors.AccentForeground},
MatchParen {
gui = "italic,bold",
bg = "NONE",
fg = colors.MatchParenForeground
bg = colors.None
},
ModeMsg {fg = colors.StringForeground},
MoreMsg {fg = colors.StringForeground},
NonText {fg = colors.NonTextForeground},
Normal {bg = colors.BufferBackground, fg = colors.NormalForeground},
NormalFloat {bg = colors.FloatBackground, fg = colors.FloatForeground},
NormalNC {bg = colors.BufferBackground, fg = colors.NormalForeground},
Number {fg = colors.NumberForeground},
ModeMsg {fg = colors.PositiveForeground},
MoreMsg {fg = colors.PositiveForeground},
NonText {fg = colors.DimForeground},
Normal {bg = colors.Background, fg = colors.NormalForeground},
NormalFloat {bg = colors.RaisedBackground, fg = colors.EmphasisForeground},
NormalNC {bg = colors.Background, fg = colors.NormalForeground},
Number {fg = colors.AccentForeground},
Operator {fg = colors.OperatorForeground},
Pmenu {bg = colors.FloatBackground, fg = colors.FloatForeground},
PmenuMatch {fg = colors.SearchForeground},
PmenuSbar {bg = lighten(Pmenu.bg, 0.5)},
PmenuSel {bg = colors.PmenuSelBackground},
PmenuThumb {bg = lighten(Pmenu.bg, 2)},
PreProc {fg = colors.PreProcForeground},
Question {fg = colors.StringForeground},
Pmenu {bg = colors.RaisedBackground, fg = colors.EmphasisForeground},
PmenuMatch {fg = colors.AccentForeground},
PmenuSbar {bg = colors.SecondaryBackground},
PmenuSel {bg = colors.SelectionBackground},
PmenuThumb {bg = colors.ScrollbarBackground},
PreProc {fg = colors.WarningForeground},
Question {fg = colors.PositiveForeground},
QuickFixLine {
fg = colors.HighlightForeground,
bg = colors.HighlightBackground
fg = colors.EmphasisForeground,
bg = colors.None
},
Removed {fg = colors.ErrorForeground},
Repeat {fg = colors.KeywordForeground},
Repeat {fg = colors.SyntaxForeground},
Search {
fg = colors.SearchForeground,
bg = colors.SearchBackground,
fg = colors.AccentForeground,
bg = colors.None,
gui = "bold,italic,underline"
},
SignColumn {bg = colors.NrBackground},
Special {fg = colors.SpecialForeground},
SpecialKey {fg = colors.NonTextForeground},
SignColumn {bg = colors.GutterBackground},
Special {fg = colors.SyntaxForeground},
SpecialKey {fg = colors.DimForeground},
SpellBad {gui = "italic", fg = colors.NormalForeground},
SpellCap {gui = "italic", fg = colors.NormalForeground},
SpellLocal {gui = "italic", fg = colors.NormalForeground},
SpellRare {gui = "italic", fg = colors.NormalForeground},
Statement {fg = colors.KeywordForeground},
Statement {fg = colors.SyntaxForeground},
StatusLine {bg = colors.StatusBackground},
StatusLineNC {bg = colors.StatusBackgroundNC},
String {fg = colors.StringForeground},
Substitute {fg = colors.SearchForeground, gui = "underline"},
TabLine {bg = lighten(colors.EOBBackground)},
TabLineFill {bg = colors.EOBBackground},
TabLineSel {gui = "bold", bg = lighten(colors.EOBBackground, 2)},
Title {fg = colors.FileForeground},
StatusLineNC {bg = colors.InactiveStatusBackground},
String {fg = colors.PositiveForeground},
Substitute {fg = colors.AccentForeground, gui = "underline"},
TabLine {bg = colors.TabBackground},
TabLineFill {bg = colors.Background},
TabLineSel {gui = "bold", bg = colors.SelectionBackground},
Title {fg = colors.SecondaryForeground},
Todo {
bg = darken(colors.StringForeground, 4),
bg = colors.TodoBackground,
fg = colors.NormalForeground,
gui = "italic"
},
Type {fg = colors.KeywordForeground},
Underlined {fg = colors.NumberForeground, gui = "underline"},
VertSplit {bg = colors.NrBackground},
Type {fg = colors.SyntaxForeground},
Underlined {fg = colors.AccentForeground, gui = "underline"},
VertSplit {bg = colors.GutterBackground},
Visual {bg = colors.SelectionBackground},
WarningMsg {fg = colors.WarningForeground},
WinSeparator {bg = colors.NrBackground},
WinSeparator {bg = colors.GutterBackground},
--
-- mini.icons
MiniIconsAzure {fg = hsl("#0050AF")},
MiniIconsBlue {fg = primary_colors.blue},
MiniIconsCyan {fg = primary_colors.cyan},
MiniIconsGreen {fg = primary_colors.green},
MiniIconsGrey {fg = hsl("#aaaaaa")},
MiniIconsOrange {fg = primary_colors.orange},
MiniIconsPurple {fg = primary_colors.purple},
MiniIconsRed {fg = primary_colors.red},
MiniIconsYellow {fg = primary_colors.yellow},
MiniIconsAzure {fg = colors.IconAzureForeground},
MiniIconsBlue {fg = colors.AccentForeground},
MiniIconsCyan {fg = colors.IconCyanForeground},
MiniIconsGreen {fg = colors.PositiveForeground},
MiniIconsGrey {fg = colors.NormalForeground},
MiniIconsOrange {fg = colors.SyntaxForeground},
MiniIconsPurple {fg = colors.ConstantForeground},
MiniIconsRed {fg = colors.ErrorForeground},
MiniIconsYellow {fg = colors.WarningForeground},
--
-- mini.statusline
MiniStatuslineDevinfo {
bg = lighten(primary_colors.black, 1.3)
bg = colors.SecondaryBackground
},
MiniStatuslineFileinfo {
bg = lighten(primary_colors.black, 1.3)
bg = colors.SecondaryBackground
},
MiniStatuslineFilename {
bg = colors.StatusBackground
},
MiniStatuslineModeNormal {
fg = lighten(primary_colors.white, 1),
bg = lighten(primary_colors.black, 2.2),
fg = colors.EmphasisForeground,
bg = colors.ModeNormalBackground,
gui = "bold"
},
MiniStatuslineModeInsert {
bg = darken(primary_colors.green, 2),
fg = lighten(primary_colors.white, 1),
bg = colors.ModeInsertBackground,
fg = colors.EmphasisForeground,
gui = "bold"
},
MiniStatuslineModeVisual {
bg = darken(primary_colors.blue, 2),
fg = lighten(primary_colors.white, 1),
bg = colors.ModeVisualBackground,
fg = colors.EmphasisForeground,
gui = "bold"
},
MiniStatuslineModeReplace {
bg = darken(primary_colors.red, 3),
fg = lighten(primary_colors.white, 1),
bg = colors.ModeReplaceBackground,
fg = colors.EmphasisForeground,
gui = "bold"
},
MiniStatuslineModeCommand {
bg = darken(primary_colors.blue, 3.5),
fg = lighten(primary_colors.white, 1),
bg = colors.ModeCommandBackground,
fg = colors.EmphasisForeground,
gui = "bold"
},
MiniStatuslineModeOther {
@@ -645,21 +657,21 @@ local theme =
sym("@constructor") {fg = colors.FunctionForeground},
sym("@function") {fg = colors.FunctionForeground},
sym("@function.builtin") {fg = colors.FunctionForeground},
sym("@keyword.directive") {fg = colors.PreProcForeground},
sym("@keyword.function") {fg = colors.KeywordForeground},
sym("@keyword.import") {fg = colors.PreProcForeground},
sym("@keyword.operator") {fg = Operator.fg, gui = Operator.gui},
sym("@keyword.directive") {fg = colors.WarningForeground},
sym("@keyword.function") {fg = colors.SyntaxForeground},
sym("@keyword.import") {fg = colors.WarningForeground},
sym("@keyword.operator") {fg = colors.OperatorForeground, gui = Operator.gui},
sym("@lsp.type.property.lua") {fg = colors.ConstantForeground},
sym("@module") {fg = colors.NamespaceForeground},
sym("@number") {fg = colors.NumberForeground},
sym("@number.float") {fg = colors.NumberForeground},
sym("@operator") {fg = Operator.fg, gui = Operator.gui},
sym("@operator.special") {fg = Operator.fg, gui = Operator.gui},
sym("@module") {fg = colors.SyntaxForeground},
sym("@number") {fg = colors.AccentForeground},
sym("@number.float") {fg = colors.AccentForeground},
sym("@operator") {fg = colors.OperatorForeground, gui = Operator.gui},
sym("@operator.special") {fg = colors.OperatorForeground, gui = Operator.gui},
sym("@punctuation.bracket") {fg = colors.FunctionForeground},
sym("@punctuation.delimiter") {fg = colors.SpecialForeground},
sym("@punctuation.special") {fg = colors.SpecialForeground},
sym("@punctuation.delimiter") {fg = colors.SyntaxForeground},
sym("@punctuation.special") {fg = colors.SyntaxForeground},
sym("@type.cpp") {fg = colors.FunctionForeground},
sym("@type.definition") {fg = Constant.fg, gui = ""},
sym("@type.definition") {fg = colors.ConstantForeground, gui = ""},
sym("@variable") {fg = colors.NormalForeground},
sym("@variable.member") {fg = colors.ConstantForeground},
sym("@variable.member.cpp") {fg = colors.NormalForeground}
+168
View File
@@ -0,0 +1,168 @@
local M = {}
-- These anchors describe the role of each ANSI color in darcula_lush. They
-- intentionally use only the 16-color palette so the fallback also works on
-- a Linux console and other terminals without 256-color support.
local ansi_anchors = {
{index = 0, rgb = 0x101017}, -- black: editor surfaces
{index = 1, rgb = 0x3a1e1e}, -- dark red: error/diff surfaces
{index = 2, rgb = 0x1e3a1e}, -- dark green: added/success surfaces
{index = 3, rgb = 0x4d3d22}, -- dark yellow: changed surfaces
{index = 4, rgb = 0x344074}, -- dark blue: mode surfaces
{index = 7, rgb = 0xb0abac}, -- light gray: normal text
{index = 8, rgb = 0x5f595a}, -- dark gray: muted text/selections
{index = 9, rgb = 0xc96b68}, -- bright red: errors
{index = 10, rgb = 0x6a906a}, -- bright green: strings
{index = 11, rgb = 0xc18a53}, -- bright yellow: keywords/functions
{index = 12, rgb = 0x727faf}, -- bright blue: numbers/search
{index = 13, rgb = 0x927b9e}, -- bright magenta: constants
{index = 14, rgb = 0x009999}, -- bright cyan: cyan accents
{index = 15, rgb = 0xc4c0c1} -- white: emphasized text
}
-- Keep the current palette's deliberately muted colors from drifting to a
-- similarly close hue (comments becoming green, for example). The nearest
-- anchor remains a useful fallback when the RGB palette grows.
local color_overrides = {
["#004ead"] = 12,
["#009999"] = 14,
["#0a0a0f"] = 0,
["#111118"] = 0,
["#1d1b1c"] = 8,
["#1e3a1e"] = 2,
["#20202c"] = 0,
["#212130"] = 0,
["#242433"] = 0,
["#282839"] = 8,
["#2e2e1e"] = 3,
["#2e2e42"] = 8,
["#344074"] = 4,
["#364936"] = 2,
["#3a1e1e"] = 1,
["#3f3f5a"] = 8,
["#434360"] = 8,
["#445397"] = 4,
["#474344"] = 8,
["#4d4d6f"] = 8,
["#506d50"] = 2,
["#5c5758"] = 8,
["#4a2020"] = 1,
["#4d3d22"] = 3,
["#5f595a"] = 8,
["#727faf"] = 12,
["#6a906a"] = 10,
["#766f71"] = 8,
["#952d2d"] = 1,
["#958e8f"] = 7,
["#927b9e"] = 13,
["#9a8065"] = 11,
["#9c9697"] = 7,
["#a19b9c"] = 7,
["#ababab"] = 7,
["#b0abac"] = 7,
["#b5a15a"] = 11,
["#b47a41"] = 11,
["#bab5b6"] = 15,
["#bfbbbc"] = 15,
["#c18a53"] = 11,
["#c4c0c1"] = 15,
["#cc9e71"] = 11,
["#c96b68"] = 9,
["#ffffff"] = 15
}
local group_overrides = {
CocMenuSel = {ctermfg = 0, ctermbg = 7},
ColorColumn = {ctermbg = 8},
CursorColumn = {ctermfg = 7, ctermbg = 8},
CursorLine = {ctermbg = 8},
DiffAdd = {ctermfg = 15, ctermbg = 2},
DiffChange = {ctermfg = 15, ctermbg = 3},
DiffDelete = {ctermfg = 15, ctermbg = 1},
DiffText = {ctermfg = 0, ctermbg = 3},
Error = {ctermfg = 15, ctermbg = 1},
Folded = {ctermfg = 7, ctermbg = 8},
PmenuSel = {ctermfg = 0, ctermbg = 7},
QuickFixLine = {ctermfg = 0, ctermbg = 7},
StatusLine = {ctermfg = 0, ctermbg = 7},
StatusLineNC = {ctermfg = 7, ctermbg = 8},
TabLine = {ctermfg = 7, ctermbg = 8},
TabLineSel = {ctermfg = 0, ctermbg = 7},
Visual = {ctermfg = 0, ctermbg = 7}
}
local function channels(rgb)
return math.floor(rgb / 0x10000) % 0x100,
math.floor(rgb / 0x100) % 0x100,
rgb % 0x100
end
local function nearest_ansi(color)
local rgb
if type(color) == "number" then
rgb = color
local override = color_overrides[string.format("#%06x", rgb)]
if override then
return override
end
elseif type(color) ~= "string" then
return nil
else
local hex = color:match("^#(%x%x%x%x%x%x)$")
if not hex then
return nil
end
local override = color_overrides["#" .. hex:lower()]
if override then
return override
end
rgb = tonumber(hex, 16)
end
local red, green, blue = channels(rgb)
local nearest
local nearest_distance
for _, anchor in ipairs(ansi_anchors) do
local anchor_red, anchor_green, anchor_blue = channels(anchor.rgb)
local distance = (red - anchor_red) ^ 2
+ (green - anchor_green) ^ 2
+ (blue - anchor_blue) ^ 2
if not nearest_distance or distance < nearest_distance then
nearest = anchor.index
nearest_distance = distance
end
end
return nearest
end
function M.apply(theme)
local compiled = require("lush").compile(theme)
for group, attrs in pairs(compiled) do
if not attrs.link then
attrs.ctermfg = nearest_ansi(attrs.fg)
attrs.ctermbg = nearest_ansi(attrs.bg)
for key, value in pairs(group_overrides[group] or {}) do
attrs[key] = value
end
vim.api.nvim_set_hl(0, group, attrs)
end
end
end
function M.apply_matching(pattern)
for group, attrs in pairs(vim.api.nvim_get_hl(0, {})) do
if group:match(pattern) and not attrs.link then
attrs.ctermfg = nearest_ansi(attrs.fg)
attrs.ctermbg = nearest_ansi(attrs.bg)
vim.api.nvim_set_hl(0, group, attrs)
end
end
end
return M