You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

161 lines
5.2 KiB

10 months ago
local M = {}
--- Get the solarized colors based on the current Vim background setting
---
--- @return table colors A table containing the solarized colors
function M.get_colors()
local config = require('solarized.config')
local colors = {
solarized = {
dark = {
base03 = '#002b36', -- background tone dark (main)
base02 = '#073642', -- background tone (highlight/menu/LineNr)
base01 = '#586e75', -- content tone (comment)
base00 = '#657b83', -- content tone (winseparator)
base0 = '#839496', -- content tone (foreground)
base1 = '#93a1a1', -- content tone (statusline/tabline)
base2 = '#eee8d5', -- background tone light (highlight)
base3 = '#fdf6e3', -- background tone lighter (main)
-- accent
yellow = '#b58900',
orange = '#cb4b16',
red = '#dc322f',
magenta = '#d33682',
violet = '#6c71c4',
blue = '#268bd2',
cyan = '#2aa198',
green = '#859900',
-- git
add = '#859900',
change = '#b58900',
delete = '#dc322f',
-- diagnostic
info = '#268bd2',
hint = '#859900',
warning = '#b58900',
error = '#dc322f',
},
light = {
base3 = '#002b36', -- background tone darker (main)
base2 = '#073642', -- background tone dark (highlight)
base1 = '#586e75', -- content tone (statusline/tabline)
base0 = '#657b83', -- content tone (foreground)
base00 = '#839496', -- content tone (winseparator)
base01 = '#93a1a1', -- content tone (comment)
base02 = '#eee8d5', -- background tone (highlight/menu/LineNr)
base03 = '#fdf6e3', -- background tone lighter (main)
-- accent
yellow = '#b58900',
orange = '#cb4b16',
red = '#dc322f',
magenta = '#d33682',
violet = '#6c71c4',
blue = '#268bd2',
cyan = '#2aa198',
green = '#859900',
-- git
add = '#859900',
change = '#b58900',
delete = '#dc322f',
-- diagnostic
info = '#268bd2',
hint = '#859900',
warning = '#b58900',
error = '#dc322f',
},
},
selenized = {
dark = {
base03 = '#103c48', -- background tone dark (main)
base02 = '#184956', -- background tone (highlight/menu/LineNr)
base01 = '#72898f', -- content tone (comment)
base00 = '#72898f', -- content tone (winseparator)
base0 = '#adbcbc', -- content tone (foreground)
base1 = '#cad8d9', -- content tone (statusline/tabline)
base2 = '#ece3cc', -- background tone light (highlight)
base3 = '#fbf3db', -- background tone lighter (main)
-- accent
yellow = '#dbb32d',
orange = '#ed8649',
red = '#fa5750',
magenta = '#f275be',
violet = '#af88eb',
blue = '#4695f7',
cyan = '#41c7b9',
green = '#75b938',
-- git
add = '#75b938',
change = '#dbb32d',
delete = '#fa5750',
-- diagnostic
info = '#4695f7',
hint = '#75b938',
warning = '#dbb32d',
error = '#fa5750',
},
light = {
base3 = '#103c48', -- background tone darker (main)
base2 = '#2d5b69', -- background tone dark (highlight)
base1 = '#3a4d53', -- content tone (statusline/tabline)
base0 = '#53676d', -- content tone (foreground)
base00 = '#909995', -- content tone (winseparator)
base01 = '#909995', -- content tone (comment)
base02 = '#ece3cc', -- background tone (highlight/menu/LineNr)
base03 = '#fbf3db', -- background tone lighter (main)
-- accent
yellow = '#ad8900',
orange = '#c25d1e',
red = '#d2212d',
magenta = '#ca4898',
violet = '#8762c6',
blue = '#0072d4',
cyan = '#009c8f',
green = '#489100',
-- git
add = '#489100',
change = '#ad8900',
delete = '#d2212d',
-- diagnostic
info = '#0072d4',
hint = '#489100',
warning = '#ad8900',
error = '#d2212d',
},
},
}
return colors[((config.config or {}).palette or 'solarized')][vim.o.background]
end
--- Filter colors by selecting valid hexadecimal color values.
---
--- @param colors table A table containing color values to be filtered.
--- @return table Filtered colors table, containing only valid hexadecimal color values.
local function filter_colors(colors)
local filtered_colors = {}
for color_name, color_value in pairs(colors) do
if string.match(color_value, '#%x%x%x%x%x%x$') then
filtered_colors[color_name] = color_value
elseif string.match(color_value, '#%x%x%x$') then
color_value = string.sub(color_value, 2, #color_value)
filtered_colors[color_name] = '#' .. string.rep(color_value, 2)
end
end
return filtered_colors
end
--- Merge custom colors with solarized default colors
---
--- @param colors table A table containing new color values to be added.
--- @param custom_colors table
function M.extend_colors(colors, custom_colors)
local c = vim.deepcopy(colors)
custom_colors = filter_colors(custom_colors)
return vim.tbl_extend('force', c, custom_colors)
end
return M