71 lines
1.3 KiB
Lua
71 lines
1.3 KiB
Lua
local wezterm = require 'wezterm'
|
|
|
|
local themes_dir = wezterm.config_dir .. '/themes'
|
|
local state_file = wezterm.config_dir .. '/.current-theme'
|
|
|
|
local theme_files = {
|
|
'matrix',
|
|
'phosphor-green',
|
|
'phosphor-amber',
|
|
'cyberpunk',
|
|
'nord',
|
|
'tokyonight',
|
|
'dracula',
|
|
}
|
|
|
|
local themes = {}
|
|
local order = {}
|
|
|
|
for _, name in ipairs(theme_files) do
|
|
local ok, theme = pcall(dofile, themes_dir .. '/' .. name .. '.lua')
|
|
if ok and theme and theme.name then
|
|
themes[name] = theme
|
|
order[#order + 1] = name
|
|
else
|
|
wezterm.log_error('wezterm-themes: error loading theme "' .. name .. '": ' .. tostring(theme))
|
|
end
|
|
end
|
|
|
|
local M = {}
|
|
|
|
function M.names()
|
|
return order
|
|
end
|
|
|
|
function M.get(name)
|
|
return themes[name] or themes[order[1]]
|
|
end
|
|
|
|
function M.current()
|
|
local f = io.open(state_file, 'r')
|
|
local name = f and f:read('*l')
|
|
if f then
|
|
f:close()
|
|
end
|
|
if name and themes[name] then
|
|
return themes[name]
|
|
end
|
|
return themes[order[1]]
|
|
end
|
|
|
|
function M.next(name)
|
|
local cur = name or M.current().name
|
|
local idx = 0
|
|
for i, n in ipairs(order) do
|
|
if n == cur then
|
|
idx = i
|
|
break
|
|
end
|
|
end
|
|
return themes[order[(idx % #order) + 1]]
|
|
end
|
|
|
|
function M.save(theme)
|
|
local f = io.open(state_file, 'w')
|
|
if f then
|
|
f:write(theme.name .. '\n')
|
|
f:close()
|
|
end
|
|
end
|
|
|
|
return M |