local template = [[let s:p = {'normal': {}, 'inactive': {}, 'insert': {}, 'replace': {}, 'visual': {}, 'tabline': {}} let s:p.normal.left = [ [ "$common_fg", "$normal_a_bg", "bold" ], [ "$common_fg", "$normal_b_bg" ] ] let s:p.normal.middle = [ [ "$normal_c_fg", "$normal_c_bg" ] ] let s:p.normal.right = [ [ "$common_fg", "$normal_b_bg" ], [ "$common_fg", "$normal_b_bg" ] ] let s:p.normal.warning = [ [ "$warning_fg", "$warning_bg" ] ] let s:p.normal.error = [ [ "$error_fg", "$error_bg" ] ] let s:p.inactive.left = [ [ "$inactive_fg", "$inactive_bg" ], [ "$inactive_fg", "$inactive_bg" ] ] let s:p.inactive.middle = [ [ "$inactive_fg", "$inactive_bg" ] ] let s:p.inactive.right = [ [ "$inactive_fg", "$inactive_bg" ] ] let s:p.insert.left = [ [ "$common_fg", "$insert_a_bg", "bold" ], [ "$common_fg", "$normal_b_bg" ] ] let s:p.replace.left = [ [ "$common_fg", "$replace_a_bg", "bold" ], [ "$common_fg", "$normal_b_bg" ] ] let s:p.visual.left = [ [ "$common_fg", "$visual_a_bg", "bold" ], [ "$common_fg", "$normal_b_bg" ] ] let s:p.tabline.left = [ [ "$tabline_left_fg", "$tabline_left_bg", "italic" ] ] let s:p.tabline.middle = [ [ "$inactive_fg", "$inactive_bg" ] ] let s:p.tabline.right = [ [ "$tabline_right_fg", "$tabline_right_bg" ] ] let s:p.tabline.tabsel = [ [ "$tabsel_fg", "$tabsel_bg", "bold" ] ] let g:lightline#colorscheme#$name#palette = lightline#colorscheme#fill(s:p)]] local helpers = require "shipwright.transform.helpers" local check_keys = { "name", "common_fg", "inactive_bg", "inactive_fg", "normal_a_bg", "normal_b_bg", "normal_c_bg", "normal_c_fg", "insert_a_bg", "visual_a_bg", "replace_a_bg", "tabline_left_bg", "tabline_left_fg", "tabline_right_bg", "tabline_right_fg", "tabsel_bg", "tabsel_fg", "warning_bg", "warning_fg", "error_bg", "error_fg", } local function transform(colors) for _, key in ipairs(check_keys) do assert(colors[key], "lightline colors table missing key: " .. key) end local text = helpers.apply_template(template, colors) return { text } end local function specs_to_colors(colorscheme) local specs, name, background = unpack(colorscheme) local da = background == "light" and -3 or 3 return { name = name, common_fg = specs.Folded.fg, inactive_bg = specs.StatusLineNC.bg, inactive_fg = specs.StatusLineNC.fg, normal_a_bg = specs.PmenuSbar.bg.abs_da(da), normal_b_bg = specs.PmenuSel.bg.abs_da(da), normal_c_bg = specs.StatusLine.bg.abs_da(da), normal_c_fg = specs.StatusLine.fg, insert_a_bg = specs.DiffText.bg, visual_a_bg = specs.Visual.bg, replace_a_bg = specs.DiffDelete.bg, tabline_left_bg = specs.PmenuSel.bg.abs_da(da), tabline_left_fg = specs.Normal.fg, tabline_right_bg = specs.PmenuSel.bg.abs_da(da), tabline_right_fg = specs.Normal.fg, tabsel_bg = specs.Normal.bg, tabsel_fg = specs.Normal.fg, warning_bg = specs.DiagnosticVirtualTextWarn.bg, warning_fg = specs.DiagnosticVirtualTextWarn.fg, error_bg = specs.DiagnosticVirtualTextError.bg, error_fg = specs.DiagnosticVirtualTextError.fg, } end ---@diagnostic disable: undefined-global -- selene: allow(undefined_variable) run( { specs, name, background }, specs_to_colors, transform, { prepend, [[" This file is auto-generated by shipwright.nvim]] }, { overwrite, string.format("autoload/lightline/colorscheme/%s.vim", name) } ) -- selene: deny(undefined_variable) ---@diagnostic enable: undefined-global