feat(wezterm): plugin & config_builder
This commit is contained in:
parent
11ce0bbd3c
commit
83e6afe0ae
5 changed files with 125 additions and 136 deletions
|
@ -2,7 +2,10 @@ local wezterm = require("wezterm")
|
|||
|
||||
local M = {}
|
||||
|
||||
M.config = {
|
||||
-- default configuration
|
||||
local config = {
|
||||
position = "bottom",
|
||||
max_width = 32,
|
||||
dividers = "slant_right",
|
||||
indicator = {
|
||||
leader = {
|
||||
|
@ -33,6 +36,9 @@ M.config = {
|
|||
},
|
||||
}
|
||||
|
||||
-- parsed config
|
||||
local C = {}
|
||||
|
||||
local function tableMerge(t1, t2)
|
||||
for k, v in pairs(t2) do
|
||||
if type(v) == "table" then
|
||||
|
@ -48,10 +54,6 @@ local function tableMerge(t1, t2)
|
|||
return t1
|
||||
end
|
||||
|
||||
local C = {}
|
||||
|
||||
M.setup = function(config)
|
||||
M.config = tableMerge(M.config, config)
|
||||
local dividers = {
|
||||
slant_right = {
|
||||
left = utf8.char(0xe0be),
|
||||
|
@ -71,43 +73,58 @@ M.setup = function(config)
|
|||
},
|
||||
}
|
||||
|
||||
-- conforming to https://github.com/wez/wezterm/commit/e4ae8a844d8feaa43e1de34c5cc8b4f07ce525dd
|
||||
-- exporting an apply_to_config function, even though we don't change the users config
|
||||
M.apply_to_config = function(c, opts)
|
||||
-- make the opts arg optional
|
||||
if not opts then
|
||||
opts = {}
|
||||
end
|
||||
|
||||
-- combine user config with defaults
|
||||
config = tableMerge(config, opts)
|
||||
C.div = {
|
||||
l = "",
|
||||
r = "",
|
||||
}
|
||||
if M.config.dividers then
|
||||
C.div.l = dividers[M.config.dividers].left
|
||||
C.div.r = dividers[M.config.dividers].right
|
||||
|
||||
if config.dividers then
|
||||
C.div.l = dividers[config.dividers].left
|
||||
C.div.r = dividers[config.dividers].right
|
||||
end
|
||||
|
||||
C.leader = {
|
||||
enabled = M.config.indicator.leader.enabled or true,
|
||||
off = M.config.indicator.leader.off,
|
||||
on = M.config.indicator.leader.on,
|
||||
enabled = config.indicator.leader.enabled or true,
|
||||
off = config.indicator.leader.off,
|
||||
on = config.indicator.leader.on,
|
||||
}
|
||||
|
||||
C.mode = {
|
||||
enabled = M.config.indicator.mode.enabled,
|
||||
names = M.config.indicator.mode.names,
|
||||
enabled = config.indicator.mode.enabled,
|
||||
names = config.indicator.mode.names,
|
||||
}
|
||||
|
||||
C.tabs = {
|
||||
numerals = M.config.tabs.numerals,
|
||||
pane_count_style = M.config.tabs.pane_count,
|
||||
numerals = config.tabs.numerals,
|
||||
pane_count_style = config.tabs.pane_count,
|
||||
brackets = {
|
||||
active = M.config.tabs.brackets.active,
|
||||
inactive = M.config.tabs.brackets.inactive,
|
||||
active = config.tabs.brackets.active,
|
||||
inactive = config.tabs.brackets.inactive,
|
||||
},
|
||||
}
|
||||
|
||||
C.clock = {
|
||||
enabled = M.config.clock.enabled,
|
||||
format = M.config.clock.format,
|
||||
enabled = config.clock.enabled,
|
||||
format = config.clock.format,
|
||||
}
|
||||
|
||||
C.p = (M.config.dividers == "rounded") and "" or " "
|
||||
-- set the right-hand padding to 0 spaces, if the rounded style is active
|
||||
C.p = (config.dividers == "rounded") and "" or " "
|
||||
|
||||
wezterm.log_info(C)
|
||||
-- set wezterm config options according to the parsed config
|
||||
c.use_fancy_tab_bar = false
|
||||
c.tab_bar_at_bottom = config.position == "bottom"
|
||||
c.tab_max_width = config.max_width
|
||||
end
|
||||
|
||||
-- superscript/subscript
|
||||
|
@ -171,8 +188,8 @@ local roman_numerals = {
|
|||
-- custom tab bar
|
||||
wezterm.on(
|
||||
"format-tab-title",
|
||||
function(tab, tabs, panes, config, hover, max_width)
|
||||
local colours = config.resolved_palette.tab_bar
|
||||
function(tab, tabs, _panes, conf, _hover, _max_width)
|
||||
local colours = conf.resolved_palette.tab_bar
|
||||
|
||||
local active_tab_index = 0
|
||||
for _, t in ipairs(tabs) do
|
||||
|
@ -181,13 +198,14 @@ wezterm.on(
|
|||
end
|
||||
end
|
||||
|
||||
-- TODO: make colors configurable
|
||||
local rainbow = {
|
||||
config.resolved_palette.ansi[2],
|
||||
config.resolved_palette.indexed[16],
|
||||
config.resolved_palette.ansi[4],
|
||||
config.resolved_palette.ansi[3],
|
||||
config.resolved_palette.ansi[5],
|
||||
config.resolved_palette.ansi[6],
|
||||
conf.resolved_palette.ansi[2],
|
||||
conf.resolved_palette.indexed[16],
|
||||
conf.resolved_palette.ansi[4],
|
||||
conf.resolved_palette.ansi[3],
|
||||
conf.resolved_palette.ansi[5],
|
||||
conf.resolved_palette.ansi[6],
|
||||
}
|
||||
|
||||
local i = tab.tab_index % 6
|
||||
|
@ -244,6 +262,7 @@ wezterm.on(
|
|||
index_i = tab.tab_index + 1
|
||||
end
|
||||
|
||||
local index
|
||||
if tab.is_active then
|
||||
index = string.format(
|
||||
"%s%s%s ",
|
||||
|
@ -264,8 +283,8 @@ wezterm.on(
|
|||
local fillerwidth = 2 + string.len(index) + string.len(pane_count) + 2
|
||||
|
||||
local tabtitle = tab.active_pane.title
|
||||
local width = config.tab_max_width - fillerwidth - 1
|
||||
if (#tabtitle + fillerwidth) > config.tab_max_width then
|
||||
local width = conf.tab_max_width - fillerwidth - 1
|
||||
if (#tabtitle + fillerwidth) > conf.tab_max_width then
|
||||
tabtitle = wezterm.truncate_right(tabtitle, width) .. "…"
|
||||
end
|
||||
|
||||
|
@ -282,8 +301,7 @@ wezterm.on(
|
|||
end
|
||||
)
|
||||
|
||||
-- custom status
|
||||
wezterm.on("update-status", function(window, pane)
|
||||
wezterm.on("update-status", function(window, _pane)
|
||||
local active_kt = window:active_key_table() ~= nil
|
||||
local show = C.leader.enabled or (active_kt and C.mode.enabled)
|
||||
if not show then
|
||||
|
@ -291,7 +309,11 @@ wezterm.on("update-status", function(window, pane)
|
|||
return
|
||||
end
|
||||
|
||||
local palette = window:effective_config().resolved_palette
|
||||
local present, conf = pcall(window.effective_config, window)
|
||||
if not present then
|
||||
return
|
||||
end
|
||||
local palette = conf.resolved_palette
|
||||
|
||||
local leader = ""
|
||||
if C.leader.enabled then
|
||||
|
|
|
@ -46,4 +46,10 @@ wezterm.on("switch-font", function(window, _)
|
|||
})
|
||||
end)
|
||||
|
||||
wezterm.GLOBAL = { font = "berkeley" }
|
||||
M.apply = function(c)
|
||||
c.font = M.get_font(wezterm.GLOBAL.font).font
|
||||
c.font_size = M.get_font(wezterm.GLOBAL.font).size
|
||||
end
|
||||
|
||||
return M
|
||||
|
|
|
@ -13,6 +13,7 @@ local map = function(key, mods, action)
|
|||
end
|
||||
end
|
||||
|
||||
wezterm.GLOBAL.enable_tab_bar = true
|
||||
local toggleTabBar = wezterm.action_callback(function(window)
|
||||
wezterm.GLOBAL.enable_tab_bar = not wezterm.GLOBAL.enable_tab_bar
|
||||
window:set_config_overrides({
|
||||
|
@ -113,9 +114,11 @@ for k, _ in pairs(key_tables) do
|
|||
)
|
||||
end
|
||||
|
||||
return {
|
||||
leader = { key = "s", mods = "CTRL", timeout_milliseconds = 5000 },
|
||||
keys = shortcuts,
|
||||
disable_default_key_bindings = true,
|
||||
key_tables = key_tables,
|
||||
}
|
||||
local M = {}
|
||||
M.apply = function(c)
|
||||
c.leader = { key = "s", mods = "CTRL", timeout_milliseconds = 5000 }
|
||||
c.keys = shortcuts
|
||||
c.disable_default_key_bindings = true
|
||||
c.key_tables = key_tables
|
||||
end
|
||||
return M
|
||||
|
|
|
@ -25,4 +25,12 @@ M.get_custom_colorschemes = function()
|
|||
}
|
||||
end
|
||||
|
||||
M.apply = function(c)
|
||||
c.color_schemes = M.get_custom_colorschemes()
|
||||
c.color_scheme = M.scheme_for_appearance(wezterm.gui.get_appearance(), {
|
||||
dark = "Catppuccin Americano",
|
||||
light = "Catppuccin Latte",
|
||||
})
|
||||
end
|
||||
|
||||
return M
|
||||
|
|
|
@ -1,85 +1,35 @@
|
|||
local wezterm = require("wezterm")
|
||||
local theme = require("theme")
|
||||
require("bar").setup({
|
||||
dividers = "slant_right", -- or "slant_left", "arrows", "rounded", false
|
||||
indicator = {
|
||||
leader = {
|
||||
enabled = true,
|
||||
off = " ",
|
||||
on = " ",
|
||||
},
|
||||
mode = {
|
||||
enabled = true,
|
||||
names = {
|
||||
resize_mode = "RESIZE",
|
||||
copy_mode = "VISUAL",
|
||||
search_mode = "SEARCH",
|
||||
},
|
||||
},
|
||||
},
|
||||
tabs = {
|
||||
numerals = "arabic", -- or "roman"
|
||||
pane_count = "superscript", -- or "subscript", false
|
||||
brackets = {
|
||||
active = { "", ":" },
|
||||
inactive = { "", ":" },
|
||||
},
|
||||
},
|
||||
clock = { -- note that this overrides the whole set_right_status
|
||||
enabled = true,
|
||||
format = "%H:%M", -- use https://wezfurlong.org/wezterm/config/lua/wezterm.time/Time/format.html
|
||||
},
|
||||
})
|
||||
|
||||
wezterm.GLOBAL = {
|
||||
font = "berkeley",
|
||||
enable_tab_bar = true,
|
||||
}
|
||||
local font = require("fonts").get_font(wezterm.GLOBAL.font)
|
||||
local c = wezterm.config_builder()
|
||||
c:set_strict_mode(true)
|
||||
|
||||
local options = {
|
||||
set_environment_variables = {
|
||||
require("fonts").apply(c)
|
||||
require("keys").apply(c)
|
||||
require("theme").apply(c)
|
||||
|
||||
-- set up terminfo on nix
|
||||
c.set_environment_variables = {
|
||||
TERMINFO_DIRS = wezterm.home_dir .. "/.nix-profile/share/terminfo",
|
||||
},
|
||||
-- font
|
||||
font = font.font,
|
||||
font_size = font.size,
|
||||
}
|
||||
-- window
|
||||
window_decorations = "RESIZE",
|
||||
window_padding = {
|
||||
c.window_decorations = "RESIZE"
|
||||
c.window_padding = {
|
||||
left = 0,
|
||||
right = 0,
|
||||
top = 0,
|
||||
bottom = 0,
|
||||
},
|
||||
inactive_pane_hsb = {
|
||||
}
|
||||
-- dim unfocused panes
|
||||
c.inactive_pane_hsb = {
|
||||
saturation = 1.0,
|
||||
brightness = 0.6,
|
||||
},
|
||||
-- theme
|
||||
color_schemes = theme.get_custom_colorschemes(),
|
||||
color_scheme = theme.scheme_for_appearance(wezterm.gui.get_appearance(), {
|
||||
dark = "Catppuccin Americano",
|
||||
light = "Catppuccin Latte",
|
||||
}),
|
||||
-- tab bar
|
||||
tab_bar_at_bottom = true,
|
||||
tab_max_width = 32,
|
||||
use_fancy_tab_bar = false,
|
||||
window_background_opacity = 1.00,
|
||||
hide_tab_bar_if_only_one_tab = false,
|
||||
enable_tab_bar = wezterm.GLOBAL.tab_bar_hidden,
|
||||
-- etc.
|
||||
adjust_window_size_when_changing_font_size = false,
|
||||
use_resize_increments = false,
|
||||
audible_bell = "Disabled",
|
||||
clean_exit_codes = { 130 },
|
||||
default_cursor_style = "BlinkingBar",
|
||||
enable_scroll_bar = false,
|
||||
}
|
||||
-- etc.
|
||||
c.adjust_window_size_when_changing_font_size = false
|
||||
c.audible_bell = "Disabled"
|
||||
c.clean_exit_codes = { 130 }
|
||||
c.default_cursor_style = "BlinkingBar"
|
||||
|
||||
for k, v in pairs(require("keys")) do
|
||||
options[k] = v
|
||||
end
|
||||
require("bar").apply_to_config(c)
|
||||
|
||||
return options
|
||||
return c
|
||||
|
|
Loading…
Reference in a new issue