dotfiles/.config/wezterm/wezterm.lua
JirR02 af9d88c05f Dotfiles V.1.1.5
Updated Neovim Plugins as well as cleaned up aerospace config and
sketbar config and added fastfetch config
2025-06-11 22:16:38 +02:00

236 lines
5.2 KiB
Lua

-- Pull in the wezterm API
local wezterm = require("wezterm")
-- This will hold the configuration.
local config = wezterm.config_builder()
-- Wezterm plugins
local sessionizer = require("plugins/sessionizer")
local tabline = require("plugins/tabline")
local smart_splits = require("plugins/smart_splits")
-- This will hold the actions
local actions = wezterm.action
-- TMUX config
-- Leader key like in TMUX
config.leader = { key = "a", mods = "CTRL", timeout_milliseconds = 1000 }
-- unix socket to enable sessions
config.unix_domains = {
{
name = "unix",
},
}
-- general keybindings
config.keys = {
{
key = "p",
mods = "CTRL",
action = wezterm.action.ShowDebugOverlay,
},
{
-- sessionizer
key = "s",
mods = "LEADER|SHIFT",
action = actions.PromptInputLine({
description = wezterm.format({
{ Attribute = { Intensity = "Bold" } },
{ Foreground = { AnsiColor = "Fuchsia" } },
{ Text = "Enter name for new workspace" },
}),
action = wezterm.action_callback(function(window, pane, line)
if line then
window:perform_action(
actions.SwitchToWorkspace({
name = line,
}),
pane
)
end
end),
}),
},
{
-- Maximize Pane
key = "m",
mods = "LEADER",
action = actions.TogglePaneZoomState,
},
-- Split Panes
{
key = "-",
mods = "LEADER",
action = actions.SplitVertical,
},
{
key = "|",
mods = "LEADER",
action = actions.SplitHorizontal,
},
-- Rename Session or Tab
{
key = ",",
mods = "LEADER",
action = wezterm.action.PromptInputLine({
description = "Enter new workspace name",
action = wezterm.action_callback(function(window, pane, line)
if line and line ~= "" then
window:set_workspace(line)
wezterm.notify("Workspace renamed to: " .. line, "WezTerm", { urgency = "normal" })
else
wezterm.notify("Workspace rename cancelled", "WezTerm", { urgency = "normal" })
end
end),
}),
},
{
key = ".",
mods = "LEADER",
action = wezterm.action.PromptInputLine({
description = "Enter new tab title",
action = wezterm.action_callback(function(window, pane, line)
if line and line ~= "" then
pane:tab():set_title(line)
wezterm.notify("Tab renamed to: " .. line, "WezTerm", { urgency = "normal" })
else
wezterm.notify("Tab rename cancelled", "WezTerm", { urgency = "normal" })
end
end),
}),
},
-- Create and Kill Tab
{
key = "c",
mods = "LEADER",
action = actions.SpawnCommandInNewTab,
},
{
key = "x",
mods = "LEADER",
action = wezterm.action_callback(function(window, pane)
local tab = pane:tab()
if tab then
local pane_count = #tab:panes()
if pane_count > 1 then
window:perform_action(wezterm.action.CloseCurrentPane({ confirm = false }), pane)
else
window:perform_action(wezterm.action.CloseCurrentTab({ confirm = false }), pane)
end
else
wezterm.notify("No tab found, cannot close", "WezTerm", { urgency = "normal" })
end
end),
},
-- Move Tab to index
{
key = "/",
mods = "LEADER",
action = wezterm.action.PromptInputLine({
description = "Move Tab to Index",
action = wezterm.action_callback(function(window, pane, line)
if not line or line == "" then
wezterm.notify("Tab move cancelled", "WezTerm", { urgency = "normal" })
return
end
local index = tonumber(line)
if not index then
wezterm.notify("Invalid index: must be a number", "WezTerm", { urgency = "normal" })
return
end
-- Convert 1-based user input to 0-based index
index = index - 1
local tab_count = #window:mux_window():tabs()
if index < 0 or index >= tab_count then
wezterm.notify(
"Invalid index: must be between 1 and " .. tab_count,
"WezTerm",
{ urgency = "normal" }
)
return
end
window:perform_action(wezterm.action.MoveTab(index), pane)
wezterm.notify("Tab moved to index: " .. (index + 1), "WezTerm", { urgency = "normal" })
end),
}),
},
-- Move to next and previous Tab
{
key = "n",
mods = "LEADER",
action = actions.ActivateTabRelative(1),
},
{
key = "p",
mods = "LEADER",
action = actions.ActivateTabRelative(-1),
},
-- Vim Mode
{
key = "]",
mods = "LEADER",
action = actions.ActivateCopyMode,
},
}
-- Go to Tab with index
for i = 1, 8 do
-- LEADER + number to move to that position
table.insert(config.keys, {
key = tostring(i),
mods = "LEADER",
action = actions.ActivateTab(i - 1),
})
end
-- This causes `wezterm` to act as though it was started as
-- `wezterm connect unix` by default, connecting to the unix
-- domain on startup.
-- If you prefer to connect manually, leave out this line.
config.default_gui_startup_args = { "connect", "unix" }
-- Tabline plugin
tabline.apply_to_config(config)
-- Append keys from plugins
for _, key in ipairs(sessionizer.keys) do
table.insert(config.keys, key)
end
for _, key in ipairs(smart_splits.keys) do
table.insert(config.keys, key)
end
-- Font Config
config.font = wezterm.font({
family = "JetBrainsMono Nerd Font",
assume_emoji_presentation = false,
})
config.font_size = 13
-- Color Scheme
config.color_scheme = "Catppuccin Macchiato"
-- Window Config
config.window_decorations = "RESIZE"
config.use_fancy_tab_bar = false
--Key Config
config.send_composed_key_when_left_alt_is_pressed = true
return config