Files
zenbones-theme/lua/zenbones/shipwright/init.lua

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

95 lines
2.4 KiB
Lua
Raw Normal View History

2021-11-05 14:43:28 +08:00
local M = {}
2021-12-02 16:44:18 +08:00
local function make_specs(specs_name, ness)
local background = vim.opt.background:get()
package.loaded[specs_name] = nil
if ness == nil then
return require(specs_name)
end
vim.g[specs_name .. "_" .. background .. "ness"] = ness
local specs = require(specs_name)
vim.g[specs_name .. "_" .. background .. "ness"] = nil
return specs
end
2021-11-06 11:36:59 +08:00
2021-12-02 16:44:18 +08:00
local function make_env(colorscheme)
local specs_name = colorscheme.specs
2021-11-06 11:36:59 +08:00
local builder = require "shipwright.builder"
2021-12-02 16:44:18 +08:00
local p = require(specs_name .. ".palette")[colorscheme.background]
local env = {
2021-11-06 11:36:59 +08:00
name = colorscheme.name,
2021-12-02 16:44:18 +08:00
specs_name = specs_name,
2021-11-06 11:36:59 +08:00
p = p,
background = colorscheme.background,
2021-11-14 14:12:06 +08:00
description = colorscheme.description,
2021-11-06 11:36:59 +08:00
term = require("zenbones.term").colors_map(p),
transform = require "zenbones.shipwright.transform",
}
2021-12-02 16:44:18 +08:00
vim.opt.background = colorscheme.background
env.specs = make_specs(specs_name)
local ness = colorscheme.background == "light" and { "dim", "bright" } or { "stark", "warm" }
env["specs_" .. ness[1]] = make_specs(specs_name, ness[1])
env["specs_" .. ness[2]] = make_specs(specs_name, ness[2])
return builder.make_env(env)
2021-11-05 14:43:28 +08:00
end
local function make_build_fn(file)
return loadfile(string.format("lua/zenbones/shipwright/runners/%s.lua", file))
end
local function make_runners(config)
if not config.background then
return {
setfenv(
make_build_fn(config.file),
make_env {
name = config.name .. "_light",
specs = config.name,
background = "light",
2021-11-14 14:12:06 +08:00
description = config.description,
}
),
setfenv(
make_build_fn(config.file),
make_env {
name = config.name .. "_dark",
specs = config.name,
background = "dark",
2021-11-14 14:12:06 +08:00
description = config.description,
}
),
}
end
return {
setfenv(
make_build_fn(config.file),
2021-11-05 14:43:28 +08:00
make_env {
name = config.name,
specs = config.name,
background = config.background,
2021-11-14 14:12:06 +08:00
description = config.description,
2021-11-05 14:43:28 +08:00
}
),
}
end
M.run = function()
local runner_files = { "vim", "iterm", "alacritty", "kitty", "wezterm", "tmux", "lualine", "lightline" }
local colorschemes = vim.fn.json_decode(vim.fn.readfile "zenbones.json")
for _, colorscheme in ipairs(colorschemes) do
for _, file in ipairs(runner_files) do
2021-11-06 12:13:13 +08:00
if not vim.tbl_contains(colorscheme.exclude or {}, file) then
colorscheme.file = file
for _, runner in ipairs(make_runners(colorscheme)) do
assert(pcall(runner))
end
end
end
2021-11-05 14:43:28 +08:00
end
end
return M