dotfiles/modules/wezterm/wezterm.lua
2024-10-06 18:53:34 -04:00

104 lines
2.5 KiB
Lua

local wezterm = require 'wezterm'
local config = wezterm.config_builder()
local font = wezterm.font({family = "Comic Mono"})
config.front_end = "WebGpu"
config.color_scheme = "Gruvbox Dark (Gogh)"
config.font = font
config.font_size = 13
config.window_decorations = "RESIZE"
config.window_frame = {
font = font,
font_size = 14,
}
config.hide_tab_bar_if_only_one_tab = true
config.tab_bar_at_bottom = false
wezterm.on('update-status', function(window)
local SOLID_LEFT_ARROW = utf8.char(0xe0b2)
local color_scheme = window:effective_config().resolved_palette
local bg = color_scheme.background
local fg = color_scheme.foreground
window:set_right_status(wezterm.format({
{ Background = { Color = 'none' }},
{ Foreground = { Color = bg }},
{ Text = SOLID_LEFT_ARROW },
{ Background = { Color = bg }},
{ Foreground = { Color = fg }},
{ Text = ' ' .. wezterm.hostname() .. ' ' },
}))
end)
config.leader = { key = 'a', mods = 'CTRL', timeout_milliseconds = 1000 }
function nav_pane(key, dir)
return {
key = key,
mods = "LEADER",
action = wezterm.action.ActivatePaneDirection(dir),
}
end
config.keys = {
{
key = "\\",
mods = "LEADER",
action = wezterm.action.SplitHorizontal { domain = 'CurrentPaneDomain' }
},
{
key = "-",
mods = "LEADER",
action = wezterm.action.SplitVertical { domain = 'CurrentPaneDomain' }
},
nav_pane("h", "Left"),
nav_pane("j", "Down"),
nav_pane("k", "Up"),
nav_pane("l", "Right"),
}
local function get_current_working_dir(tab)
local current_dir = tab.active_pane and tab.active_pane.current_working_dir or { file_path = '' }
local HOME_DIR = os.getenv('HOME')
return current_dir.file_path == HOME_DIR and '~'
or string.gsub(current_dir.file_path, '(.*[/\\])(.*)', '%2')
end
wezterm.on('format-tab-title', function(tab, tabs, panes, config, hover, max_width)
local has_unseen_output = false
if not tab.is_active then
for _, pane in ipairs(tab.panes) do
if pane.has_unseen_output then
has_unseen_output = true
break
end
end
end
local cwd = wezterm.format({
{ Text = get_current_working_dir(tab) },
})
local process = get_process(tab)
local title = process and string.format(' %s (%s) ', process, cwd) or ' [?] '
if has_unseen_output then
return {
{ Foreground = { Color = '#28719c' } },
{ Text = title },
}
end
return {
{ Text = title },
}
end)
return config