1
Fork 0
satellite/home/features/desktop/wezterm/wezterm.lua

183 lines
4.2 KiB
Lua
Raw Normal View History

-- {{{ Import stuff & create config object
local wezterm = require("wezterm")
local colorscheme = require("nix.colorscheme") -- injected by nix!
-- This table will hold the configuration.
local config = {}
-- In newer versions of wezterm, use the config_builder which will
-- help provide clearer error messages
if wezterm.config_builder then
config = wezterm.config_builder()
end
-- }}}
local font_size = 20.0
-- {{{ Theming
2024-04-29 15:50:59 +02:00
local themeMap = {
["Gruvbox light, soft"] = "Gruvbox light, soft (base16)",
["Gruvbox dark, soft"] = "Gruvbox dark, soft (base16)",
}
config.color_scheme = themeMap[colorscheme.name]
config.colors = {}
-- config.colors = wezterm.color.load_base16_scheme(colorscheme.source)
-- {{{ Window frame
config.window_frame = {
font = wezterm.font({ family = colorscheme.fonts.sansSerif }),
font_size = font_size - 3,
active_titlebar_bg = "none",
inactive_titlebar_bg = "none",
}
config.window_padding = {
left = "1cell",
right = "1cell",
top = "0.4cell",
bottom = "0.4cell",
}
-- }}}
-- {{{ Tab bar colors
config.colors.tab_bar = {
background = "none",
active_tab = {
bg_color = colorscheme.transparency.terminal.base00,
fg_color = colorscheme.base05,
},
inactive_tab = {
bg_color = "none",
fg_color = colorscheme.base05,
},
inactive_tab_hover = {
bg_color = colorscheme.base00,
fg_color = colorscheme.base05,
},
new_tab = {
bg_color = colorscheme.base02,
fg_color = colorscheme.base05,
},
new_tab_hover = {
bg_color = colorscheme.base02,
fg_color = colorscheme.base05,
italic = true,
},
-- The color of the inactive tab bar edge/divider
inactive_tab_edge = "none",
}
-- }}}
2023-11-10 17:28:14 +01:00
-- {{{ Other visual things
config.window_background_opacity = colorscheme.transparency.terminal.value
2023-08-13 04:15:32 +02:00
-- }}}
-- }}}
-- {{{ Main config options
config.automatically_reload_config = true
2024-02-26 14:24:31 +01:00
config.warn_about_missing_glyphs = false
2023-12-10 12:55:54 +01:00
config.check_for_updates = false
2023-11-10 17:28:14 +01:00
-- {{{ Fonts
config.adjust_window_size_when_changing_font_size = false -- Makes it work with fixed window sizes.
config.font_size = font_size
config.font = wezterm.font(colorscheme.fonts.monospace)
2023-11-10 17:28:14 +01:00
-- }}}
-- {{{ Tab bar
config.tab_bar_at_bottom = false
2023-11-10 17:28:14 +01:00
config.use_fancy_tab_bar = true
config.hide_tab_bar_if_only_one_tab = true
config.show_tab_index_in_tab_bar = false
config.show_new_tab_button_in_tab_bar = false
2023-11-10 17:28:14 +01:00
-- }}}
-- {{{ Keycodes
config.disable_default_key_bindings = false
-- config.enable_kitty_keyboard = true -- Let's apps recognise more distinct keys
config.enable_csi_u_key_encoding = true -- For some reason I need this for all keybinds to work inside neovim.
-- }}}
2023-11-10 17:28:14 +01:00
-- }}}
-- {{{ Keybinds
local function unmap(key, mods)
return {
key = key,
mods = mods,
action = wezterm.action.DisableDefaultAssignment,
}
end
2024-02-29 12:45:25 +01:00
local function bind_if(cond, key, mods, action)
local function callback(win, pane)
if cond(pane) then
win:perform_action(action, pane)
else
win:perform_action(
wezterm.action.SendKey({ key = key, mods = mods }),
pane
)
end
end
return { key = key, mods = mods, action = wezterm.action_callback(callback) }
end
-- {{{ Detect nvim processes
local function is_inside_vim(pane)
local tty = pane:get_tty_name()
if tty == nil then
return false
end
local success, _, _ = wezterm.run_child_process({
"sh",
"-c",
"ps -o state= -o comm= -t"
.. wezterm.shell_quote_arg(tty)
.. " | "
.. "grep -iqE '^[^TXZ ]+ +(\\S+\\/)?g?(view|l?n?vim?x?)(diff)?$'",
})
return success
end
local function is_outside_vim(pane)
return not is_inside_vim(pane)
end
-- }}}
config.keys = {
-- {{{ Disable certain default keybinds
unmap("f", "CTRL|SHIFT"),
unmap("w", "CTRL|SHIFT"),
unmap("Enter", "ALT"),
-- }}}
2024-02-29 12:45:25 +01:00
-- {{{ Nvim nevigation keybinds
bind_if(
is_outside_vim,
"h",
"CTRL",
wezterm.action.ActivatePaneDirection("Left")
),
bind_if(
is_outside_vim,
"j",
"CTRL",
wezterm.action.ActivatePaneDirection("Down")
),
bind_if(
is_outside_vim,
"k",
"CTRL",
wezterm.action.ActivatePaneDirection("Up")
),
bind_if(
is_outside_vim,
"l",
"CTRL",
wezterm.action.ActivatePaneDirection("Right")
),
-- }}}
}
-- }}}
-- and finally, return the configuration to wezterm
return config