repositories / dotfiles
dotfiles
bugabingas dorkfiles
owned by admin
wezterm/bugabinga/key_binds.lua
Rawlocal wez = require 'wezterm'
local agent = require 'bugabinga.agent'
local workspace_switcher = require 'bugabinga.workspace_switcher'
local leader = { key = 'VoidSymbol', }
if wez.target_triple:find 'windows' then
leader = { key = 'raw:255', }
end
local font_mode = ' Font mode (- + 0) ESC to exit'
local pane_mode = ' Pane (hjkl a v s x t c r R = q H L)'
local resize_pane_mode = (wez.nerdfonts.md_resize or '↔') .. ' Resize Pane (hjkl HJKL)'
local confirm_quit = wez.action.Confirmation {
message = 'Quit WezTerm?',
action = wez.action_callback( function ( window, pane )
window:perform_action( wez.action.QuitApplication, pane )
end ),
}
local open_url = wez.action.QuickSelectArgs {
label = 'open URL',
patterns = { 'https?://[^"\'<>\\s]+', },
action = wez.action_callback( function ( window, pane )
local url = window:get_selection_text_for_pane( pane )
if url ~= '' then wez.open_with( url ) end
end ),
}
local rename_tab = wez.action.PromptInputLine {
description = 'Enter a new tab name, or leave empty to reset it',
action = wez.action_callback( function ( window, _, line )
if line then window:active_tab():set_title( line ) end
end ),
}
local key_tables = {
[resize_pane_mode] = {
{ key = 'h', action = wez.action.AdjustPaneSize { 'Left', 1, }, },
{ key = 'j', action = wez.action.AdjustPaneSize { 'Down', 1, }, },
{ key = 'k', action = wez.action.AdjustPaneSize { 'Up', 1, }, },
{ key = 'l', action = wez.action.AdjustPaneSize { 'Right', 1, }, },
{ key = 'H', action = wez.action.AdjustPaneSize { 'Left', 5, }, },
{ key = 'J', action = wez.action.AdjustPaneSize { 'Down', 5, }, },
{ key = 'K', action = wez.action.AdjustPaneSize { 'Up', 5, }, },
{ key = 'L', action = wez.action.AdjustPaneSize { 'Right', 5, }, },
-- Cancel the mode
{ key = 'Escape', action = 'PopKeyTable', },
},
[font_mode] = {
{ key = 'Minus', action = wez.action.DecreaseFontSize, },
{ key = 'Equal', action = wez.action.IncreaseFontSize, },
{ key = '0', action = wez.action.ResetFontSize, },
{ key = 'Escape', action = 'PopKeyTable', },
},
[pane_mode] = {
{ key = 'h', action = wez.action.ActivatePaneDirection 'Left', },
{ key = 'j', action = wez.action.ActivatePaneDirection 'Down', },
{ key = 'k', action = wez.action.ActivatePaneDirection 'Up', },
{ key = 'l', action = wez.action.ActivatePaneDirection 'Right', },
{ key = 'a', action = wez.action.PaneSelect, },
{ key = 'v', action = wez.action.SplitHorizontal { domain = 'CurrentPaneDomain', }, },
{ key = 's', action = wez.action.SplitVertical { domain = 'CurrentPaneDomain', }, },
{ key = 'r', action = wez.action.RotatePanes 'CounterClockwise', },
{ key = 'R', action = wez.action.RotatePanes 'Clockwise', },
{ key = 'x', action = wez.action.PaneSelect { mode = 'SwapWithActiveKeepFocus', }, },
{ key = 't', action = wez.action.PaneSelect { mode = 'MoveToNewTab', }, },
{ key = 'c', action = rename_tab, },
{ key = '=', action = wez.action.ActivateKeyTable { name = resize_pane_mode, one_shot = false, }, },
{ key = 'H', action = wez.action.MoveTabRelative( -1 ), },
{ key = 'L', action = wez.action.MoveTabRelative( 1 ), },
{ key = 'q', action = wez.action.CloseCurrentPane { confirm = false, }, },
{ key = 'Escape', action = 'PopKeyTable', },
},
}
-- Move tab to position 1-9 in pane mode
for i = 1, 9 do
table.insert( key_tables[pane_mode], {
key = tostring( i ),
action = wez.action.MoveTab( i - 1 ),
} )
end
local keys = {
{
key = '?',
mods = 'LEADER|SHIFT',
action = wez.action.ShowLauncherArgs {
title = ' Custom Keybinds',
flags = 'FUZZY|KEY_ASSIGNMENTS',
},
},
{
key = '0',
mods = 'LEADER',
action = wez.action.ActivateKeyTable { name = font_mode, one_shot = false, },
},
{
key = 'w',
mods = 'LEADER',
action = wez.action.ActivateKeyTable { name = pane_mode, },
},
{
key = 'f',
mods = 'LEADER',
action = wez.action.TogglePaneZoomState,
},
{
key = 'F5',
mods = 'LEADER',
action = wez.action.ReloadConfiguration,
},
{
key = 'F11',
mods = 'LEADER',
action = wez.action.ToggleFullScreen,
},
{
key = 'F10',
mods = 'LEADER',
action = wez.action_callback(
require 'bugabinga.presentation_mode'.toggle
),
},
{
key = 'F12',
mods = 'LEADER',
action = wez.action.ShowDebugOverlay,
},
{
key = '.',
mods = 'LEADER',
action = wez.action.CharSelect {
copy_on_select = true,
copy_to = 'ClipboardAndPrimarySelection',
},
},
{
key = 'a',
mods = 'LEADER',
action = agent.switcher(),
},
{
key = 'n',
mods = 'LEADER',
action = wez.action.PromptInputLine {
description = wez.format {
---@diagnostic disable-next-line: missing-fields
{ Attribute = { Intensity = 'Bold', }, },
{ Foreground = { AnsiColor = 'Purple', }, },
{ Text = 'New workspace:', },
},
action = wez.action_callback( function ( window, pane, line )
if line then
window:perform_action(
wez.action.SwitchToWorkspace { name = line, },
pane
)
end
end ),
},
},
{
key = 'c',
mods = 'CTRL|SHIFT',
action = wez.action.CopyTo 'Clipboard',
},
{
key = 'v',
mods = 'CTRL|SHIFT',
action = wez.action.PasteFrom 'Clipboard',
},
{
key = 't',
mods = 'LEADER',
action = wez.action.SpawnTab 'CurrentPaneDomain',
},
{
key = 'u',
mods = 'LEADER',
action = wez.action.SpawnCommandInNewTab {
domain = { DomainName = 'WSL:ArchLinux-dev', },
args = { 'nu', '--login', },
cwd = '~',
},
},
{
key = 'U',
mods = 'LEADER|SHIFT',
action = wez.action.SpawnCommandInNewTab {
domain = { DomainName = 'local', },
args = { 'nu', '--login', },
cwd = wez.home_dir,
},
},
{
key = 'B',
mods = 'LEADER|SHIFT',
action = wez.action.SpawnCommandInNewTab { domain = 'DefaultDomain', },
},
{
key = 'PageUp',
action = wez.action_callback( function ( window, pane )
window:perform_action(
pane:is_alt_screen_active()
and wez.action.SendKey { key = 'PageUp', }
or wez.action.ScrollByLine( -1 ),
pane
)
end ),
},
{
key = 'PageDown',
action = wez.action_callback( function ( window, pane )
window:perform_action(
pane:is_alt_screen_active()
and wez.action.SendKey { key = 'PageDown', }
or wez.action.ScrollByLine( 1 ),
pane
)
end ),
},
{
key = 'PageUp',
mods = 'SHIFT',
action = wez.action_callback( function ( window, pane )
window:perform_action(
pane:is_alt_screen_active()
and wez.action.SendKey { key = 'PageUp', mods = 'SHIFT', }
or wez.action.ScrollByPage( -0.42 ),
pane
)
end ),
},
{
key = 'PageDown',
mods = 'SHIFT',
action = wez.action_callback( function ( window, pane )
window:perform_action(
pane:is_alt_screen_active()
and wez.action.SendKey { key = 'PageDown', mods = 'SHIFT', }
or wez.action.ScrollByPage( 0.42 ),
pane
)
end ),
},
{
key = 'p',
mods = 'LEADER',
action = wez.action.ShowLauncherArgs {
title = '🔭 Launcher',
flags = 'FUZZY|DOMAINS|KEY_ASSIGNMENTS|COMMANDS|TABS',
},
},
{
key = 'Tab',
mods = 'LEADER',
action = wez.action.ShowLauncherArgs {
flags = 'FUZZY|WORKSPACES',
},
},
{
key = 'd',
mods = 'LEADER',
action = wez.action.ShowLauncherArgs {
title = ' Menu',
flags = 'FUZZY|LAUNCH_MENU_ITEMS',
},
},
{
key = 'z',
mods = 'LEADER',
action = workspace_switcher.switch_workspace(),
},
{
key = 'Z',
mods = 'LEADER|SHIFT',
action = workspace_switcher.switch_workspace_in_new_window(),
},
{
key = 'k',
mods = 'LEADER',
action = wez.action.SwitchToWorkspace { name = 'dotfiles', },
},
{
key = '/',
mods = 'LEADER',
action = wez.action.Search 'CurrentSelectionOrEmptyString',
},
{
key = ' ',
mods = 'LEADER',
action = open_url,
},
{
key = 'Enter',
mods = 'LEADER',
action = wez.action.QuickSelect,
},
{
key = 'v',
mods = 'LEADER',
action = wez.action.ActivateCopyMode,
},
{
key = 'UpArrow',
mods = 'LEADER',
action = wez.action.ScrollToPrompt( -1 ),
},
{
key = 'DownArrow',
mods = 'LEADER',
action = wez.action.ScrollToPrompt( 1 ),
},
{
key = 'q',
mods = 'LEADER',
action = confirm_quit,
},
}
-- Navigate Tabs by LEADER+n
for i = 1, 8 do
-- CTRL+ALT + number to activate that tab
table.insert( keys, {
key = tostring( i ),
mods = 'LEADER',
action = wez.action.ActivateTab( i - 1 ),
} )
end
if wez.target_triple:find 'windows' then
table.insert( keys, {
key = 'j',
mods = 'LEADER',
action = wez.action.SwitchToWorkspace {
name = 'wsl',
spawn = {
domain = { DomainName = 'WSL:ArchLinux-dev', },
args = { 'nu', '--login', },
cwd = '~',
},
},
} )
end
return function ( cfg )
---@cast cfg Config
cfg.disable_default_key_bindings = true
cfg.leader = leader
cfg.keys = keys
cfg.key_tables = key_tables
end