2021-09-21 16:47:35 +08:00
|
|
|
local M = {}
|
|
|
|
|
|
2021-11-08 17:47:14 +08:00
|
|
|
--- Apply a zenbones colorscheme based on g:colors_name and &background.
|
|
|
|
|
---@return nil
|
2021-11-01 10:12:33 +08:00
|
|
|
function M.apply_colorscheme()
|
2021-12-02 18:47:45 +08:00
|
|
|
local colors_name = vim.g.colors_name
|
2021-11-01 10:12:33 +08:00
|
|
|
package.loaded[colors_name] = nil
|
|
|
|
|
require "lush"(require(colors_name), { force_clean = false })
|
|
|
|
|
local p = require(colors_name .. ".palette")[vim.opt.background:get()]
|
|
|
|
|
require("zenbones.term").apply_colors(p)
|
|
|
|
|
end
|
|
|
|
|
|
2021-12-02 18:47:45 +08:00
|
|
|
function M.get_colorscheme_list()
|
|
|
|
|
local json_decode = vim.fn.has "nvim-0.6.0" == 1 and vim.json.decode or vim.fn.json_decode
|
|
|
|
|
local file = io.open(vim.api.nvim_get_runtime_file("colorschemes.json", false)[1], "r")
|
|
|
|
|
local content = file:read "*a"
|
|
|
|
|
file:close()
|
|
|
|
|
return json_decode(content)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function M.get_colorscheme(name)
|
|
|
|
|
local colorschemes = M.get_colorscheme_list()
|
|
|
|
|
local colorscheme = nil
|
|
|
|
|
for _, c in ipairs(colorschemes) do
|
|
|
|
|
if c.name == name then
|
|
|
|
|
colorscheme = c
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
if colorscheme == nil then
|
|
|
|
|
error(string.format("Invalid name %s", name))
|
|
|
|
|
end
|
|
|
|
|
return colorscheme
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function M.get_lualine_theme(name)
|
|
|
|
|
local colorscheme = M.get_colorscheme(name)
|
|
|
|
|
local ness_config = vim.g[name] and vim.g[name][string.format("%sness", colorscheme.background)]
|
|
|
|
|
or vim.g[string.format("%s_%sness", name, colorscheme.background)]
|
|
|
|
|
local ness = ness_config or "default"
|
|
|
|
|
|
|
|
|
|
if colorscheme.background then
|
|
|
|
|
return require(string.format("lualine.themes.%s_%s", name, ness))
|
|
|
|
|
else
|
|
|
|
|
return require(string.format("lualine.themes.%s_%s_%s", name, vim.opt.background:get(), ness))
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
2021-11-08 17:47:14 +08:00
|
|
|
--- Auto-fill a palette with the default palette.
|
|
|
|
|
---@param p table palette
|
2021-11-12 12:50:27 +08:00
|
|
|
---@param base_bg string light or dark
|
2021-11-08 17:47:14 +08:00
|
|
|
---@return table<string, table> palette
|
2021-10-11 14:38:05 +08:00
|
|
|
function M.palette_extend(p, base_bg)
|
2021-10-11 13:56:02 +08:00
|
|
|
local lush = require "lush"
|
|
|
|
|
local hsluv = lush.hsluv
|
2021-10-11 14:38:05 +08:00
|
|
|
if base_bg == "light" then
|
2021-10-10 13:24:02 +08:00
|
|
|
p = vim.tbl_extend("keep", p, {
|
|
|
|
|
bg = hsluv(39, 12, 94), -- sand
|
|
|
|
|
fg = hsluv(230, 30, 22), -- stone
|
|
|
|
|
leaf = hsluv(112, 72, 42),
|
|
|
|
|
water = hsluv(236, 84, 40),
|
|
|
|
|
rose = hsluv(4, 70, 40),
|
|
|
|
|
wood = hsluv(26, 80, 40),
|
|
|
|
|
blossom = hsluv(318, 42, 42),
|
|
|
|
|
sky = hsluv(204, 80, 53),
|
|
|
|
|
})
|
|
|
|
|
return vim.tbl_extend("keep", p, {
|
|
|
|
|
bg1 = p.bg.sa(4).da(16),
|
|
|
|
|
bg_bright = p.bg.abs_li(3).sa(6),
|
|
|
|
|
bg_dim = p.bg.abs_da(3).de(12),
|
|
|
|
|
rose1 = p.rose.sa(20).da(16),
|
|
|
|
|
leaf1 = p.leaf.sa(20).da(16),
|
|
|
|
|
wood1 = p.wood.sa(18).da(16),
|
|
|
|
|
water1 = p.water.sa(20).da(16),
|
|
|
|
|
blossom1 = p.blossom.sa(24).da(16),
|
|
|
|
|
sky1 = p.sky.sa(20).da(16),
|
|
|
|
|
fg1 = p.fg.li(22),
|
|
|
|
|
})
|
2021-11-12 12:50:27 +08:00
|
|
|
elseif base_bg == "dark" then
|
2021-10-10 13:24:02 +08:00
|
|
|
-- default
|
|
|
|
|
p = vim.tbl_extend("keep", p, {
|
2021-10-15 13:52:44 +08:00
|
|
|
bg = hsluv(39, 12, 9), -- sand
|
2021-10-10 13:24:02 +08:00
|
|
|
fg = hsluv(230, 10, 76), -- stone
|
|
|
|
|
rose = hsluv(6, 62, 60),
|
|
|
|
|
leaf = hsluv(111, 47, 61),
|
|
|
|
|
wood = hsluv(32, 47, 58),
|
|
|
|
|
water = hsluv(236, 64, 61),
|
|
|
|
|
blossom = hsluv(318, 32, 58),
|
|
|
|
|
sky = hsluv(204, 61, 64),
|
|
|
|
|
})
|
|
|
|
|
-- extended
|
|
|
|
|
return vim.tbl_extend("keep", p, {
|
|
|
|
|
bg1 = p.bg.sa(4).li(16),
|
|
|
|
|
bg_stark = p.bg.abs_da(3).sa(8),
|
|
|
|
|
bg_warm = p.bg.abs_li(3).de(12),
|
|
|
|
|
rose1 = p.rose.sa(20).li(16),
|
|
|
|
|
leaf1 = p.leaf.sa(20).li(16),
|
|
|
|
|
wood1 = p.wood.sa(18).li(16),
|
|
|
|
|
water1 = p.water.sa(20).li(16),
|
|
|
|
|
blossom1 = p.blossom.sa(24).li(16),
|
|
|
|
|
sky1 = p.sky.sa(20).li(16),
|
|
|
|
|
fg1 = p.fg.da(22),
|
|
|
|
|
})
|
2021-11-12 12:50:27 +08:00
|
|
|
else
|
|
|
|
|
error(string.format([[Invalid base_bg value: '%s', must be 'light' or 'dark'.]], base_bg))
|
2021-10-10 13:24:02 +08:00
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
2021-09-21 16:47:35 +08:00
|
|
|
return M
|