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
+5
View File
@@ -0,0 +1,5 @@
choosewin_color_other
darcula_lush
lualine
termguicolors
vim
+8 -2
View File
@@ -1,5 +1,11 @@
A Lush Theme for Neovim. # darcula_lush
===
A dark [Lush](https://github.com/rktjmp/lush.nvim) theme for Neovim.
The theme includes both its full RGB palette and a dark 16-color ANSI
fallback. With `termguicolors` disabled, Neovim uses the `cterm` colors, so the
theme remains usable in a Linux console or another TTY without true color or
256-color support.
See: http://git.io/lush.nvim for more information on Lush and a helper script See: http://git.io/lush.nvim for more information on Lush and a helper script
to setup your repo clone. to setup your repo clone.
+4 -1
View File
@@ -3,4 +3,7 @@ vim.g.colors_name = "darcula_lush"
package.loaded["lush_theme.darcula_lush"] = nil package.loaded["lush_theme.darcula_lush"] = nil
require("lush")(require("lush_theme.darcula_lush")) local theme = require("lush_theme.darcula_lush")
require("lush")(theme)
require("lush_theme.darcula_lush.cterm").apply(theme)
+308 -296
View File
@@ -15,124 +15,136 @@
---@diagnostic disable: undefined-global ---@diagnostic disable: undefined-global
local lush = require("lush") 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 = { local primary_colors = {
black = base_colors.black, none = "NONE",
black2 = base_colors.black2, black_dark = "#0A0A0F",
blue = base_colors.blue, black = "#111118",
cyan = base_colors.cyan, black_light = "#1D1B1C",
green = base_colors.green, grey_darkest = "#474344",
grey = darken(base_colors.white, 5), grey_darker = "#5C5758",
orange = base_colors.orange, grey_dark = "#5F595A",
light_orange = lighten(base_colors.orange, 1.5), grey = "#766F71",
purple = base_colors.purple, grey_lighter = "#9C9697",
light_grey = darken(base_colors.white, 1.4), silver = "#B0ABAC",
white = base_colors.white, silver_lighter = "#BFBBBC",
red = base_colors.red, white = "#FFFFFF",
tan = base_colors.tan, blue_saturated = "#004EAD",
yellow = base_colors.yellow 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 = { local colors = {
BufferBackground = primary_colors.black, None = primary_colors.none,
ColorColumnBackground = lighten(primary_colors.black, 0.8), IconAzureForeground = primary_colors.blue_saturated,
CommentForeground = lighten(primary_colors.grey, 2.1), IconCyanForeground = primary_colors.cyan,
ConcealBackground = primary_colors.grey, GutterBackground = primary_colors.black_dark,
ConcealForeground = darken(primary_colors.white), 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, 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, DirectoryIconForeground = primary_colors.tan,
EOBBackground = primary_colors.black, SecondaryForeground = primary_colors.grey_lighter,
ErrorBackground = darken(primary_colors.red, 5), 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, ErrorForeground = primary_colors.red,
FileForeground = primary_colors.light_grey, ScrollbarThumbBackground = primary_colors.white
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
} }
vim.g.choosewin_color_label = { 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 = { 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 = { vim.g.choosewin_color_other = {
gui = {colors.StatusBackground.hex} gui = {colors.StatusBackground}
} }
local create_lualine_theme = function() local create_lualine_theme = function()
local theme_colors = { local theme_colors
background_i = darken(primary_colors.green, 2).hex, if vim.o.termguicolors then
background_n = lighten(primary_colors.black, 2.2).hex, theme_colors = {
background_b = lighten(primary_colors.black, 1.3).hex, background_i = colors.ModeInsertBackground,
background_c = colors.StatusBackground.hex, background_n = colors.ModeNormalBackground,
background_cm = darken(primary_colors.blue, 3.5).hex, background_b = colors.SecondaryBackground,
background_r = darken(primary_colors.red, 3).hex, background_c = colors.StatusBackground,
background_v = darken(primary_colors.blue, 2).hex, background_cm = colors.ModeCommandBackground,
foreground = lighten(primary_colors.white, 1).hex, background_r = colors.ModeReplaceBackground,
foreground_2 = primary_colors.white.hex, background_v = colors.ModeVisualBackground,
foreground_3 = darken(primary_colors.white).hex 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 { return {
normal = { normal = {
a = { a = {
@@ -204,6 +216,7 @@ if ok then
pattern = "darcula_lush", pattern = "darcula_lush",
callback = function() callback = function()
lualine.setup({options = {theme = create_lualine_theme()}}) lualine.setup({options = {theme = create_lualine_theme()}})
require("lush_theme.darcula_lush.cterm").apply_matching("^lualine_")
end end
} }
) )
@@ -220,11 +233,11 @@ local theme =
CodeHint {gui = "reverse"}, CodeHint {gui = "reverse"},
CodeInfo {gui = "reverse"}, CodeInfo {gui = "reverse"},
CodeWarn {gui = "reverse"}, CodeWarn {gui = "reverse"},
ErrorSign {bg = colors.NrBackground, fg = colors.ErrorForeground}, ErrorSign {bg = colors.GutterBackground, fg = colors.ErrorForeground},
HintSign {bg = colors.NrBackground, fg = colors.HintForeground}, HintSign {bg = colors.GutterBackground, fg = colors.SecondaryForeground},
InfoSign {bg = colors.NrBackground, fg = colors.InfoForeground}, InfoSign {bg = colors.GutterBackground, fg = colors.EmphasisForeground},
WarningSign {bg = colors.NrBackground, fg = colors.WarningForeground}, WarningSign {bg = colors.GutterBackground, fg = colors.WarningForeground},
IblScope {fg = colors.ConcealForeground, bg = "NONE"}, IblScope {fg = colors.SecondaryForeground, bg = colors.None},
IdentifierUnderCaret { IdentifierUnderCaret {
gui = "underline,bold,italic" gui = "underline,bold,italic"
}, },
@@ -239,63 +252,63 @@ local theme =
-- --
-- CoC -- CoC
CocErrorHighlight {fg = colors.ErrorForeground, gui = "bold,underline"}, CocErrorHighlight {fg = colors.ErrorForeground, gui = "bold,underline"},
CocHintHighlight {fg = colors.HintForeground, gui = "bold,underline"}, CocHintHighlight {fg = colors.SecondaryForeground, gui = "bold,underline"},
CocInfoHighlight {fg = colors.InfoForeground, gui = "bold,underline"}, CocInfoHighlight {fg = colors.EmphasisForeground, gui = "bold,underline"},
CocWarnHighlight {fg = colors.WarningForeground, gui = "bold,underline"}, CocWarnHighlight {fg = colors.WarningForeground, gui = "bold,underline"},
CocHighlightRead {IdentifierUnderCaret}, CocHighlightRead {IdentifierUnderCaret},
CocHighlightText {IdentifierUnderCaret}, CocHighlightText {IdentifierUnderCaret},
CocHighlightWrite {IdentifierUnderCaretWrite}, CocHighlightWrite {IdentifierUnderCaretWrite},
CocCodeLens {fg = colors.InlayForeground, bg = "NONE"}, CocCodeLens {fg = colors.DimForeground, bg = colors.None},
CocErrorFloat {fg = colors.FloatForeground, bg = colors.FloatBackground}, CocErrorFloat {fg = colors.EmphasisForeground, bg = colors.RaisedBackground},
CocFloating {fg = colors.FloatForeground, bg = colors.FloatBackground}, CocFloating {fg = colors.EmphasisForeground, bg = colors.RaisedBackground},
CocHintFloat {fg = colors.FloatForeground, bg = colors.FloatBackground}, CocHintFloat {fg = colors.EmphasisForeground, bg = colors.RaisedBackground},
CocHintVirtualText {fg = colors.InlayForeground, bg = "NONE"}, CocHintVirtualText {fg = colors.DimForeground, bg = colors.None},
CocInfoFloat {fg = colors.FloatForeground, bg = colors.FloatBackground}, CocInfoFloat {fg = colors.EmphasisForeground, bg = colors.RaisedBackground},
CocInlayHint {fg = colors.InlayForeground, bg = "NONE"}, CocInlayHint {fg = colors.DimForeground, bg = colors.None},
CocMenuSel {bg = colors.PmenuSelBackground}, CocMenuSel {bg = colors.SelectionBackground},
CocNotificationError { CocNotificationError {
fg = colors.FloatForeground, fg = colors.EmphasisForeground,
bg = colors.FloatBackground bg = colors.RaisedBackground
}, },
CocNotificationInfo { CocNotificationInfo {
fg = colors.FloatForeground, fg = colors.EmphasisForeground,
bg = colors.FloatBackground bg = colors.RaisedBackground
}, },
CocNotificationProgress { CocNotificationProgress {
fg = colors.ProgressForeground, fg = colors.SecondaryForeground,
bg = colors.FloatBackground bg = colors.RaisedBackground
}, },
CocNotificationWarning { CocNotificationWarning {
fg = colors.FloatForeground, fg = colors.EmphasisForeground,
bg = colors.FloatBackground bg = colors.RaisedBackground
}, },
CocPumMenu {fg = colors.FloatForeground, bg = colors.FloatBackground}, CocPumMenu {fg = colors.EmphasisForeground, bg = colors.RaisedBackground},
CocSearch {fg = colors.SearchForeground}, CocSearch {fg = colors.AccentForeground},
CocSemClass {fg = colors.FunctionForeground}, CocSemClass {fg = colors.FunctionForeground},
CocSymbolConstant {fg = colors.ConstantForeground}, CocSymbolConstant {fg = colors.ConstantForeground},
CocSymbolConstructor {fg = colors.FunctionForeground}, CocSymbolConstructor {fg = colors.FunctionForeground},
CocSymbolFunction {fg = colors.FunctionForeground}, CocSymbolFunction {fg = colors.FunctionForeground},
CocSymbolMethod {fg = colors.FunctionForeground}, CocSymbolMethod {fg = colors.FunctionForeground},
CocUnderline {fg = colors.NumberForeground, gui = "bold,underline"}, CocUnderline {fg = colors.AccentForeground, gui = "bold,underline"},
CocWarningFloat {fg = colors.FloatForeground, bg = colors.FloatBackground}, CocWarningFloat {fg = colors.EmphasisForeground, bg = colors.RaisedBackground},
-- easymotion -- easymotion
EasyMotionShade {fg = colors.CommentForeground}, EasyMotionShade {fg = colors.CommentForeground},
EasyMotionIncSearch { EasyMotionIncSearch {
fg = colors.SearchForeground, fg = colors.AccentForeground,
gui = "bold,italic,underline" gui = "bold,italic,underline"
}, },
EasyMotionTarget {gui = "underline", fg = colors.WarningForeground}, EasyMotionTarget {gui = "underline", fg = colors.WarningForeground},
-- --
-- fidget -- fidget
FidgetDone {fg = colors.StringForeground}, FidgetDone {fg = colors.PositiveForeground},
FidgetGroup {fg = darken(colors.NormalForeground, 7)}, FidgetGroup {fg = colors.FaintForeground},
FidgetProgress {fg = colors.NumberForeground}, FidgetProgress {fg = colors.AccentForeground},
-- --
-- gitsigns -- gitsigns
GitSignsCurrentLineBlame {fg = colors.CommentForeground, bg = "NONE"}, GitSignsCurrentLineBlame {fg = colors.CommentForeground, bg = colors.None},
-- --
-- lua -- lua
luaParenError {bg = "NONE"}, luaParenError {bg = colors.None},
-- --
-- nvim-cmp -- nvim-cmp
CmpItemAbbr {fg = colors.NormalForeground}, CmpItemAbbr {fg = colors.NormalForeground},
@@ -303,137 +316,137 @@ local theme =
fg = colors.CommentForeground, fg = colors.CommentForeground,
gui = "strikethrough" gui = "strikethrough"
}, },
CmpItemAbbrMatch {fg = colors.NumberForeground}, CmpItemAbbrMatch {fg = colors.AccentForeground},
CmpItemAbbrMatchFuzzy {CmpItemAbbrMatch}, CmpItemAbbrMatchFuzzy {CmpItemAbbrMatch},
CmpItemKind {fg = colors.KeywordForeground}, CmpItemKind {fg = colors.SyntaxForeground},
CmpItemKindDefault {fg = colors.KeywordForeground}, CmpItemKindDefault {fg = colors.SyntaxForeground},
CmpItemMenu {fg = colors.FloatForeground}, CmpItemMenu {fg = colors.EmphasisForeground},
-- --
-- nvim notify -- nvim notify
NotifyBackground { NotifyBackground {
bg = colors.FloatBackground, bg = colors.RaisedBackground,
fg = colors.FloatBackground fg = colors.RaisedBackground
}, },
NotifyINFOBody { NotifyINFOBody {
-- bg = colors.FloatBackground, -- bg = colors.RaisedBackground,
fg = colors.FloatForeground fg = colors.EmphasisForeground
}, },
NotifyINFOBorder { NotifyINFOBorder {
-- bg = colors.FloatBackground, -- bg = colors.RaisedBackground,
fg = colors.FloatForeground fg = colors.EmphasisForeground
}, },
NotifyINFOIcon { NotifyINFOIcon {
-- bg = colors.FloatBackground, -- bg = colors.RaisedBackground,
fg = colors.StringForeground fg = colors.PositiveForeground
}, },
NotifyINFOTitle { NotifyINFOTitle {
-- bg = colors.FloatBackground, -- bg = colors.RaisedBackground,
fg = colors.StringForeground fg = colors.PositiveForeground
}, },
NotifyERRORBody { NotifyERRORBody {
-- bg = colors.FloatBackground, -- bg = colors.RaisedBackground,
fg = colors.FloatForeground fg = colors.EmphasisForeground
}, },
NotifyERRORBorder { NotifyERRORBorder {
-- bg = colors.FloatBackground, -- bg = colors.RaisedBackground,
fg = colors.FloatForeground fg = colors.EmphasisForeground
}, },
NotifyERRORIcon { NotifyERRORIcon {
-- bg = colors.FloatBackground, -- bg = colors.RaisedBackground,
fg = colors.ErrorForeground fg = colors.ErrorForeground
}, },
NotifyERRORTitle { NotifyERRORTitle {
-- bg = colors.FloatBackground, -- bg = colors.RaisedBackground,
fg = colors.ErrorForeground fg = colors.ErrorForeground
}, },
NotifyWARNBody { NotifyWARNBody {
-- bg = colors.FloatBackground, -- bg = colors.RaisedBackground,
fg = colors.FloatForeground fg = colors.EmphasisForeground
}, },
NotifyWARNBorder { NotifyWARNBorder {
-- bg = colors.FloatBackground, -- bg = colors.RaisedBackground,
fg = colors.FloatForeground fg = colors.EmphasisForeground
}, },
NotifyWARNIcon { NotifyWARNIcon {
-- bg = colors.FloatBackground, -- bg = colors.RaisedBackground,
fg = colors.WarningForeground fg = colors.WarningForeground
}, },
NotifyWARNTitle { NotifyWARNTitle {
-- bg = colors.FloatBackground, -- bg = colors.RaisedBackground,
fg = colors.WarningForeground fg = colors.WarningForeground
}, },
NotifyDEBUGBody { NotifyDEBUGBody {
-- bg = colors.FloatBackground, -- bg = colors.RaisedBackground,
fg = colors.FloatForeground fg = colors.EmphasisForeground
}, },
NotifyDEBUGBorder { NotifyDEBUGBorder {
-- bg = colors.FloatBackground, -- bg = colors.RaisedBackground,
fg = colors.FloatForeground fg = colors.EmphasisForeground
}, },
NotifyDEBUGIcon { NotifyDEBUGIcon {
-- bg = colors.FloatBackground, -- bg = colors.RaisedBackground,
fg = colors.NumberForeground fg = colors.AccentForeground
}, },
NotifyDEBUGTitle { NotifyDEBUGTitle {
-- bg = colors.FloatBackground, -- bg = colors.RaisedBackground,
fg = colors.NumberForeground fg = colors.AccentForeground
}, },
NotifyTRACEBody { NotifyTRACEBody {
-- bg = colors.FloatBackground, -- bg = colors.RaisedBackground,
fg = colors.ConstantForeground fg = colors.ConstantForeground
}, },
NotifyTRACEBorder { NotifyTRACEBorder {
-- bg = colors.FloatBackground, -- bg = colors.RaisedBackground,
fg = colors.ConstantForeground fg = colors.ConstantForeground
}, },
-- --
-- nvim tree -- nvim tree
NvimTreeEndOfBuffer {bg = colors.EOBBackground}, NvimTreeEndOfBuffer {bg = colors.Background},
NvimTreeFolderIcon {fg = colors.DirectoryIconForeground}, NvimTreeFolderIcon {fg = colors.DirectoryIconForeground},
NvimTreeFolderName {fg = colors.DirectoryForeground, gui = "bold"}, NvimTreeFolderName {fg = colors.SecondaryForeground, gui = "bold"},
NvimTreeNormal {bg = colors.EOBBackground, fg = colors.FileForeground}, NvimTreeNormal {bg = colors.Background, fg = colors.SecondaryForeground},
NvimTreeOpenedFolderName {fg = colors.DirectoryForeground, gui = "bold"}, NvimTreeOpenedFolderName {fg = colors.SecondaryForeground, gui = "bold"},
NvimTreeRootFolder {fg = colors.RootForeground}, NvimTreeRootFolder {fg = colors.PositiveForeground},
NvimTreeGitDirty {fg = colors.ErrorForeground}, NvimTreeGitDirty {fg = colors.ErrorForeground},
NvimTreeGitDirtyIcon {fg = colors.ErrorForeground}, NvimTreeGitDirtyIcon {fg = colors.ErrorForeground},
NvimTreeSymlink {fg = colors.NumberForeground, gui = "italic"}, NvimTreeSymlink {fg = colors.AccentForeground, gui = "italic"},
NvimTreeExecFile {fg = colors.StringForeground, gui = "italic"}, NvimTreeExecFile {fg = colors.PositiveForeground, gui = "italic"},
-- --
-- nvim scrollview -- nvim scrollview
ScrollView { ScrollView {
fg = colors.ScrollViewForeground, fg = colors.None,
bg = colors.ScrollViewBackground bg = colors.ScrollbarThumbBackground
}, },
-- --
-- Telescope -- Telescope
TelescopeBorder {bg = lighten(colors.EOBBackground, 1)}, TelescopeBorder {bg = colors.TabBackground},
TelescopeMatching {fg = colors.SearchForeground}, TelescopeMatching {fg = colors.AccentForeground},
TelescopeNormal {bg = colors.BufferBackground}, TelescopeNormal {bg = colors.Background},
TelescopePromptNormal {bg = colors.BufferBackground}, TelescopePromptNormal {bg = colors.Background},
-- --
-- Neovim -- Neovim
Added {fg = colors.StringForeground}, Added {fg = colors.PositiveForeground},
Changed {gui = "italic,underline"}, Changed {gui = "italic,underline"},
Character {fg = colors.StringForeground}, Character {fg = colors.PositiveForeground},
ColorColumn {bg = colors.ColorColumnBackground}, ColorColumn {bg = colors.RaisedBackground},
Comment {fg = colors.CommentForeground}, Comment {fg = colors.CommentForeground},
Conceal {bg = colors.ConcealBackground, fg = colors.ConcealForeground}, Conceal {bg = colors.ConcealBackground, fg = colors.SecondaryForeground},
Conditional {fg = colors.KeywordForeground}, Conditional {fg = colors.SyntaxForeground},
Constant {fg = colors.ConstantForeground}, Constant {fg = colors.ConstantForeground},
Cursor {gui = "reverse"}, Cursor {gui = "reverse"},
CursorColumn { CursorColumn {
gui = "underline", gui = "underline",
fg = colors.HighlightForeground, fg = colors.EmphasisForeground,
bg = colors.HighlightBackground bg = colors.None
}, },
CursorLine {bg = colors.CursorLineBackground}, CursorLine {bg = colors.RaisedBackground},
CursorLineNr { CursorLineNr {
bg = colors.NrBackground, bg = colors.GutterBackground,
fg = colors.CursorLineNrForeground fg = colors.PositiveForeground
}, },
CurSearch { CurSearch {
fg = colors.SearchForeground, fg = colors.AccentForeground,
bg = colors.SearchBackground, bg = colors.None,
gui = "bold,italic,underline" gui = "bold,italic,underline"
}, },
Delimiter {fg = colors.FunctionForeground}, Delimiter {fg = colors.FunctionForeground},
@@ -447,29 +460,29 @@ local theme =
DiagnosticFloatingWarn {CocWarningFloat}, DiagnosticFloatingWarn {CocWarningFloat},
DiagnosticSignError { DiagnosticSignError {
fg = colors.ErrorForeground, fg = colors.ErrorForeground,
bg = colors.NrBackground bg = colors.GutterBackground
}, },
DiagnosticSignHint {fg = colors.HintForeground, bg = colors.NrBackground}, DiagnosticSignHint {fg = colors.SecondaryForeground, bg = colors.GutterBackground},
DiagnosticSignInfo {fg = colors.InfoForeground, bg = colors.NrBackground}, DiagnosticSignInfo {fg = colors.EmphasisForeground, bg = colors.GutterBackground},
DiagnosticSignWarn { DiagnosticSignWarn {
fg = colors.WarningForeground, fg = colors.WarningForeground,
bg = colors.NrBackground bg = colors.GutterBackground
}, },
DiagnosticLineNrError { DiagnosticLineNrError {
fg = colors.ErrorForeground, fg = colors.ErrorForeground,
bg = colors.NrBackground bg = colors.GutterBackground
}, },
DiagnosticLineNrHint { DiagnosticLineNrHint {
fg = colors.HintForeground, fg = colors.SecondaryForeground,
bg = colors.NrBackground bg = colors.GutterBackground
}, },
DiagnosticLineNrInfo { DiagnosticLineNrInfo {
fg = colors.InfoForeground, fg = colors.EmphasisForeground,
bg = colors.NrBackground bg = colors.GutterBackground
}, },
DiagnosticLineNrWarn { DiagnosticLineNrWarn {
fg = colors.WarningForeground, fg = colors.WarningForeground,
bg = colors.NrBackground bg = colors.GutterBackground
}, },
DiagnosticUnderlineError { DiagnosticUnderlineError {
CocErrorHighlight CocErrorHighlight
@@ -483,151 +496,150 @@ local theme =
DiagnosticUnderlineWarn { DiagnosticUnderlineWarn {
CocWarnHighlight CocWarnHighlight
}, },
DiagnosticVirtualTextError {fg = colors.InlayForeground, bg = "NONE"}, DiagnosticVirtualTextError {fg = colors.DimForeground, bg = colors.None},
DiagnosticVirtualTextWarn {fg = colors.InlayForeground, bg = "NONE"}, DiagnosticVirtualTextWarn {fg = colors.DimForeground, bg = colors.None},
DiagnosticVirtualTextInfo {fg = colors.InlayForeground, bg = "NONE"}, DiagnosticVirtualTextInfo {fg = colors.DimForeground, bg = colors.None},
DiagnosticVirtualTextHint {fg = colors.InlayForeground, bg = "NONE"}, DiagnosticVirtualTextHint {fg = colors.DimForeground, bg = colors.None},
DiffAdd {bg = "#1e3a1e"}, DiffAdd {bg = colors.AddedBackground},
DiffChange {bg = "#2e2e1e"}, DiffChange {bg = colors.ChangedBackground},
DiffDelete {bg = "#3a1e1e"}, DiffDelete {bg = colors.RemovedBackground},
DiffText {bg = "#5e4a1e"}, DiffText {bg = colors.DiffTextBackground},
Directory {fg = colors.FileForeground}, Directory {fg = colors.SecondaryForeground},
EndOfBuffer {bg = colors.EOBBackground}, EndOfBuffer {bg = colors.Background},
Error { Error {
gui = "italic", gui = "italic",
bg = colors.ErrorBackground, bg = colors.ErrorBackground,
fg = colors.ErrorForeground fg = colors.ErrorForeground
}, },
ErrorMsg {fg = colors.ErrorForeground}, ErrorMsg {fg = colors.ErrorForeground},
Exception {fg = colors.KeywordForeground}, Exception {fg = colors.SyntaxForeground},
FloatBorder {bg = colors.FloatBackground}, FloatBorder {bg = colors.RaisedBackground},
FoldColumn {fg = colors.ErrorForeground, bg = colors.NrBackground}, FoldColumn {fg = colors.ErrorForeground, bg = colors.GutterBackground},
Folded {fg = colors.CommentForeground, bg = colors.ConcealBackground}, Folded {fg = colors.CommentForeground, bg = colors.ConcealBackground},
Function {fg = colors.FunctionForeground}, Function {fg = colors.FunctionForeground},
Identifier {fg = colors.NormalForeground}, Identifier {fg = colors.NormalForeground},
IncSearch {fg = colors.SearchForeground, gui = "bold,italic,underline"}, IncSearch {fg = colors.AccentForeground, gui = "bold,italic,underline"},
Keyword {fg = colors.KeywordForeground}, Keyword {fg = colors.SyntaxForeground},
Label {fg = colors.KeywordForeground}, Label {fg = colors.SyntaxForeground},
LineNr {bg = colors.NrBackground, fg = colors.LineNrForeground}, LineNr {bg = colors.GutterBackground, fg = colors.LineNrForeground},
LineNrSpecial {bg = colors.NrBackground, fg = colors.SpecialForeground}, LineNrSpecial {bg = colors.GutterBackground, fg = colors.SyntaxForeground},
LspReferenceRead { LspReferenceRead {
gui = "underline,italic", gui = "underline,italic",
guibg = "NONE" guibg = colors.None
}, },
LspReferenceText { LspReferenceText {
gui = "underline,italic", gui = "underline,italic",
guibg = "NONE" guibg = colors.None
}, },
LspReferenceWrite { LspReferenceWrite {
gui = "underline,bold,italic", gui = "underline,bold,italic",
guibg = "NONE" guibg = colors.None
}, },
LspCodeLens {fg = CocCodeLens.fg}, LspCodeLens {fg = colors.DimForeground},
LspCodeLensSeparator {fg = CocCodeLens.fg}, LspCodeLensSeparator {fg = colors.DimForeground},
LspSignatureActiveParameter {gui = "italic", fg = colors.NumberForeground}, LspSignatureActiveParameter {gui = "italic", fg = colors.AccentForeground},
MatchParen { MatchParen {
gui = "italic,bold", gui = "italic,bold",
bg = "NONE", bg = colors.None
fg = colors.MatchParenForeground
}, },
ModeMsg {fg = colors.StringForeground}, ModeMsg {fg = colors.PositiveForeground},
MoreMsg {fg = colors.StringForeground}, MoreMsg {fg = colors.PositiveForeground},
NonText {fg = colors.NonTextForeground}, NonText {fg = colors.DimForeground},
Normal {bg = colors.BufferBackground, fg = colors.NormalForeground}, Normal {bg = colors.Background, fg = colors.NormalForeground},
NormalFloat {bg = colors.FloatBackground, fg = colors.FloatForeground}, NormalFloat {bg = colors.RaisedBackground, fg = colors.EmphasisForeground},
NormalNC {bg = colors.BufferBackground, fg = colors.NormalForeground}, NormalNC {bg = colors.Background, fg = colors.NormalForeground},
Number {fg = colors.NumberForeground}, Number {fg = colors.AccentForeground},
Operator {fg = colors.OperatorForeground}, Operator {fg = colors.OperatorForeground},
Pmenu {bg = colors.FloatBackground, fg = colors.FloatForeground}, Pmenu {bg = colors.RaisedBackground, fg = colors.EmphasisForeground},
PmenuMatch {fg = colors.SearchForeground}, PmenuMatch {fg = colors.AccentForeground},
PmenuSbar {bg = lighten(Pmenu.bg, 0.5)}, PmenuSbar {bg = colors.SecondaryBackground},
PmenuSel {bg = colors.PmenuSelBackground}, PmenuSel {bg = colors.SelectionBackground},
PmenuThumb {bg = lighten(Pmenu.bg, 2)}, PmenuThumb {bg = colors.ScrollbarBackground},
PreProc {fg = colors.PreProcForeground}, PreProc {fg = colors.WarningForeground},
Question {fg = colors.StringForeground}, Question {fg = colors.PositiveForeground},
QuickFixLine { QuickFixLine {
fg = colors.HighlightForeground, fg = colors.EmphasisForeground,
bg = colors.HighlightBackground bg = colors.None
}, },
Removed {fg = colors.ErrorForeground}, Removed {fg = colors.ErrorForeground},
Repeat {fg = colors.KeywordForeground}, Repeat {fg = colors.SyntaxForeground},
Search { Search {
fg = colors.SearchForeground, fg = colors.AccentForeground,
bg = colors.SearchBackground, bg = colors.None,
gui = "bold,italic,underline" gui = "bold,italic,underline"
}, },
SignColumn {bg = colors.NrBackground}, SignColumn {bg = colors.GutterBackground},
Special {fg = colors.SpecialForeground}, Special {fg = colors.SyntaxForeground},
SpecialKey {fg = colors.NonTextForeground}, SpecialKey {fg = colors.DimForeground},
SpellBad {gui = "italic", fg = colors.NormalForeground}, SpellBad {gui = "italic", fg = colors.NormalForeground},
SpellCap {gui = "italic", fg = colors.NormalForeground}, SpellCap {gui = "italic", fg = colors.NormalForeground},
SpellLocal {gui = "italic", fg = colors.NormalForeground}, SpellLocal {gui = "italic", fg = colors.NormalForeground},
SpellRare {gui = "italic", fg = colors.NormalForeground}, SpellRare {gui = "italic", fg = colors.NormalForeground},
Statement {fg = colors.KeywordForeground}, Statement {fg = colors.SyntaxForeground},
StatusLine {bg = colors.StatusBackground}, StatusLine {bg = colors.StatusBackground},
StatusLineNC {bg = colors.StatusBackgroundNC}, StatusLineNC {bg = colors.InactiveStatusBackground},
String {fg = colors.StringForeground}, String {fg = colors.PositiveForeground},
Substitute {fg = colors.SearchForeground, gui = "underline"}, Substitute {fg = colors.AccentForeground, gui = "underline"},
TabLine {bg = lighten(colors.EOBBackground)}, TabLine {bg = colors.TabBackground},
TabLineFill {bg = colors.EOBBackground}, TabLineFill {bg = colors.Background},
TabLineSel {gui = "bold", bg = lighten(colors.EOBBackground, 2)}, TabLineSel {gui = "bold", bg = colors.SelectionBackground},
Title {fg = colors.FileForeground}, Title {fg = colors.SecondaryForeground},
Todo { Todo {
bg = darken(colors.StringForeground, 4), bg = colors.TodoBackground,
fg = colors.NormalForeground, fg = colors.NormalForeground,
gui = "italic" gui = "italic"
}, },
Type {fg = colors.KeywordForeground}, Type {fg = colors.SyntaxForeground},
Underlined {fg = colors.NumberForeground, gui = "underline"}, Underlined {fg = colors.AccentForeground, gui = "underline"},
VertSplit {bg = colors.NrBackground}, VertSplit {bg = colors.GutterBackground},
Visual {bg = colors.SelectionBackground}, Visual {bg = colors.SelectionBackground},
WarningMsg {fg = colors.WarningForeground}, WarningMsg {fg = colors.WarningForeground},
WinSeparator {bg = colors.NrBackground}, WinSeparator {bg = colors.GutterBackground},
-- --
-- mini.icons -- mini.icons
MiniIconsAzure {fg = hsl("#0050AF")}, MiniIconsAzure {fg = colors.IconAzureForeground},
MiniIconsBlue {fg = primary_colors.blue}, MiniIconsBlue {fg = colors.AccentForeground},
MiniIconsCyan {fg = primary_colors.cyan}, MiniIconsCyan {fg = colors.IconCyanForeground},
MiniIconsGreen {fg = primary_colors.green}, MiniIconsGreen {fg = colors.PositiveForeground},
MiniIconsGrey {fg = hsl("#aaaaaa")}, MiniIconsGrey {fg = colors.NormalForeground},
MiniIconsOrange {fg = primary_colors.orange}, MiniIconsOrange {fg = colors.SyntaxForeground},
MiniIconsPurple {fg = primary_colors.purple}, MiniIconsPurple {fg = colors.ConstantForeground},
MiniIconsRed {fg = primary_colors.red}, MiniIconsRed {fg = colors.ErrorForeground},
MiniIconsYellow {fg = primary_colors.yellow}, MiniIconsYellow {fg = colors.WarningForeground},
-- --
-- mini.statusline -- mini.statusline
MiniStatuslineDevinfo { MiniStatuslineDevinfo {
bg = lighten(primary_colors.black, 1.3) bg = colors.SecondaryBackground
}, },
MiniStatuslineFileinfo { MiniStatuslineFileinfo {
bg = lighten(primary_colors.black, 1.3) bg = colors.SecondaryBackground
}, },
MiniStatuslineFilename { MiniStatuslineFilename {
bg = colors.StatusBackground bg = colors.StatusBackground
}, },
MiniStatuslineModeNormal { MiniStatuslineModeNormal {
fg = lighten(primary_colors.white, 1), fg = colors.EmphasisForeground,
bg = lighten(primary_colors.black, 2.2), bg = colors.ModeNormalBackground,
gui = "bold" gui = "bold"
}, },
MiniStatuslineModeInsert { MiniStatuslineModeInsert {
bg = darken(primary_colors.green, 2), bg = colors.ModeInsertBackground,
fg = lighten(primary_colors.white, 1), fg = colors.EmphasisForeground,
gui = "bold" gui = "bold"
}, },
MiniStatuslineModeVisual { MiniStatuslineModeVisual {
bg = darken(primary_colors.blue, 2), bg = colors.ModeVisualBackground,
fg = lighten(primary_colors.white, 1), fg = colors.EmphasisForeground,
gui = "bold" gui = "bold"
}, },
MiniStatuslineModeReplace { MiniStatuslineModeReplace {
bg = darken(primary_colors.red, 3), bg = colors.ModeReplaceBackground,
fg = lighten(primary_colors.white, 1), fg = colors.EmphasisForeground,
gui = "bold" gui = "bold"
}, },
MiniStatuslineModeCommand { MiniStatuslineModeCommand {
bg = darken(primary_colors.blue, 3.5), bg = colors.ModeCommandBackground,
fg = lighten(primary_colors.white, 1), fg = colors.EmphasisForeground,
gui = "bold" gui = "bold"
}, },
MiniStatuslineModeOther { MiniStatuslineModeOther {
@@ -645,21 +657,21 @@ local theme =
sym("@constructor") {fg = colors.FunctionForeground}, sym("@constructor") {fg = colors.FunctionForeground},
sym("@function") {fg = colors.FunctionForeground}, sym("@function") {fg = colors.FunctionForeground},
sym("@function.builtin") {fg = colors.FunctionForeground}, sym("@function.builtin") {fg = colors.FunctionForeground},
sym("@keyword.directive") {fg = colors.PreProcForeground}, sym("@keyword.directive") {fg = colors.WarningForeground},
sym("@keyword.function") {fg = colors.KeywordForeground}, sym("@keyword.function") {fg = colors.SyntaxForeground},
sym("@keyword.import") {fg = colors.PreProcForeground}, sym("@keyword.import") {fg = colors.WarningForeground},
sym("@keyword.operator") {fg = Operator.fg, gui = Operator.gui}, sym("@keyword.operator") {fg = colors.OperatorForeground, gui = Operator.gui},
sym("@lsp.type.property.lua") {fg = colors.ConstantForeground}, sym("@lsp.type.property.lua") {fg = colors.ConstantForeground},
sym("@module") {fg = colors.NamespaceForeground}, sym("@module") {fg = colors.SyntaxForeground},
sym("@number") {fg = colors.NumberForeground}, sym("@number") {fg = colors.AccentForeground},
sym("@number.float") {fg = colors.NumberForeground}, sym("@number.float") {fg = colors.AccentForeground},
sym("@operator") {fg = Operator.fg, gui = Operator.gui}, sym("@operator") {fg = colors.OperatorForeground, gui = Operator.gui},
sym("@operator.special") {fg = Operator.fg, gui = Operator.gui}, sym("@operator.special") {fg = colors.OperatorForeground, gui = Operator.gui},
sym("@punctuation.bracket") {fg = colors.FunctionForeground}, sym("@punctuation.bracket") {fg = colors.FunctionForeground},
sym("@punctuation.delimiter") {fg = colors.SpecialForeground}, sym("@punctuation.delimiter") {fg = colors.SyntaxForeground},
sym("@punctuation.special") {fg = colors.SpecialForeground}, sym("@punctuation.special") {fg = colors.SyntaxForeground},
sym("@type.cpp") {fg = colors.FunctionForeground}, 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") {fg = colors.NormalForeground},
sym("@variable.member") {fg = colors.ConstantForeground}, sym("@variable.member") {fg = colors.ConstantForeground},
sym("@variable.member.cpp") {fg = colors.NormalForeground} 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