-- ╭─────────────────────────────────────────────────────────╮ -- │ KEYMAPS │ -- ╰─────────────────────────────────────────────────────────╯ local wezterm = WEZTERM local act = wezterm.action -- Set up some reference values local Chord = "SHIFT|CTRL" local LeaderChord = "LEADER|SHIFT|CTRL" local LeaderShift = "LEADER|SHIFT" local LeaderCtrl = "LEADER|CTRL" local FuzzyLaunch = "FUZZY|TABS|DOMAINS|WORKSPACES|COMMANDS|LAUNCH_MENU_ITEMS|KEY_ASSIGNMENTS" local resurrect = wezterm.plugin.require("https://github.com/MLFlexer/resurrect.wezterm") local tunicodes = require("plugins/tunicodes") local opts = { -- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Leader key ━━━━━━━━━━━━━━━━━━━━━━━━━━ leader = { key = " ", mods = "CTRL", timeout_milliseconds = 1500 }, -- ━━━━━━━━━━━━━━━━━━━━━━━━━ Global Key Mappings ━━━━━━━━━━━━━━━━━━━━━ keys = { -- Close window { key = "q", mods = LeaderChord, action = act.QuitApplication }, -- Split pane { key = "|", mods = LeaderShift, action = act.SplitHorizontal({ domain = "CurrentPaneDomain" }) }, { key = "_", mods = LeaderShift, action = act.SplitVertical({ domain = "CurrentPaneDomain" }) }, -- Move pane { key = "h", mods = Chord, action = act.ActivatePaneDirection("Left") }, { key = "j", mods = Chord, action = act.ActivatePaneDirection("Down") }, { key = "k", mods = Chord, action = act.ActivatePaneDirection("Up") }, { key = "l", mods = Chord, action = act.ActivatePaneDirection("Right") }, -- Move pane to new window { key = "!", mods = LeaderShift, action = wezterm.action_callback(function(_, pane) pane:move_to_new_window() end), }, -- Toggle pane zoom { key = "z", mods = Chord, action = act.TogglePaneZoomState, }, { key = "z", mods = "LEADER", action = act.TogglePaneZoomState, }, -- Reload Config { key = "F5", mods = "LEADER", action = act.ReloadConfiguration }, -- Close pane { key = "q", mods = "LEADER", action = act.CloseCurrentPane({ confirm = true }) }, { key = "q", mods = Chord, action = act.CloseCurrentPane({ confirm = true }) }, -- Resize pane { key = "h", mods = "ALT", action = act.AdjustPaneSize({ "Left", 1 }) }, { key = "j", mods = "ALT", action = act.AdjustPaneSize({ "Down", 1 }) }, { key = "k", mods = "ALT", action = act.AdjustPaneSize({ "Up", 1 }) }, { key = "l", mods = "ALT", action = act.AdjustPaneSize({ "Right", 1 }) }, -- Resize pane mode { key = "r", mods = "LEADER", action = act.ActivateKeyTable({ name = "resize_mode", one_shot = false }) }, { key = "p", mods = "LEADER", action = act.ActivateKeyTable({ name = "window_mode", one_shot = false }) }, -- Tab Manipulation { key = "PageUp", mods = "CTRL", action = act.ActivateTabRelative(1) }, { key = "PageUp", mods = Chord, action = act.MoveTabRelative(1) }, { key = "PageDown", mods = "CTRL", action = act.ActivateTabRelative(-1) }, { key = "PageDown", mods = Chord, action = act.MoveTabRelative(-1) }, { -- Quick launch key = "x", mods = LeaderCtrl, action = act.ShowLauncherArgs({ title = "Quick Launch", flags = FuzzyLaunch, }), }, -- Search { key = "f", mods = "LEADER", action = act.Search("CurrentSelectionOrEmptyString") }, { key = "f", mods = Chord, action = act.Search("CurrentSelectionOrEmptyString") }, -- Miscellaneous { key = "a", mods = LeaderCtrl, action = act.SendKey({ key = "a", mods = "CTRL" }) }, { key = ";", mods = "CTRL", action = act.ActivateCommandPalette }, { key = "F1", mods = "LEADER", action = act.ShowDebugOverlay }, { key = "u", mods = LeaderCtrl, action = act.AttachDomain("SSH:aws-discord"), }, { key = "s", mods = LeaderCtrl, action = act.ShowLauncherArgs({ title = "Connect to SSH server", flags = "FUZZY|DOMAINS" }), }, { key = "z", mods = LeaderCtrl, action = act.TogglePaneZoomState }, { key = "n", mods = LeaderCtrl, action = act.SpawnWindow }, { key = "x", mods = "LEADER", action = act.ActivateCopyMode }, -- Naming { -- Rename [W]orkspace key = "w", mods = LeaderCtrl, action = act.PromptInputLine({ description = "Enter new name for the workspace:", action = wezterm.action_callback(function(window, _, line) if line then wezterm.mux.rename_workspace(window:active_workspace(), line) end end), }), }, { -- Rename [T]ab key = "t", mods = LeaderCtrl, action = act.PromptInputLine({ description = "Enter new name for the tab:", action = wezterm.action_callback(function(_, pane, line) if line then local tab = pane:tab() ---@diagnostic disable-next-line: need-check-nil tab:set_title(line) end end), }), }, { -- Save [w]orkspace State key = "w", mods = "ALT", action = wezterm.action_callback(function() resurrect.save_state(resurrect.workspace_state.get_workspace_state()) end), }, { -- Save [W]indow State key = "W", mods = "ALT", action = resurrect.window_state.save_window_action(), }, { -- [S]ave Session key = "s", mods = "ALT", action = act.Multiple({ wezterm.action_callback(function(_, _) resurrect.save_state(resurrect.workspace_state.get_workspace_state()) resurrect.window_state.save_window_action() end), }), }, { -- [R]estore Session key = "r", mods = "ALT", action = wezterm.action_callback(function(win, pane) resurrect.fuzzy_load(win, pane, function(id) local type = string.match(id, "^([^/]+)") -- match before '/' id = string.match(id, "([^/]+)$") -- match after '/' id = string.match(id, "(.+)%..+$") -- remove file extension local state if type == "workspace" then state = resurrect.load_state(id, "workspace") resurrect.workspace_state.restore_workspace(state, { relative = true, restore_text = true, on_pane_restore = resurrect.tab_state.default_on_pane_restore, }) elseif type == "window" then state = resurrect.load_state(id, "window") resurrect.window_state.restore_window(pane:window(), state, { relative = true, restore_text = true, on_pane_restore = resurrect.tab_state.default_on_pane_restore, -- uncomment this line to use active tab when restoring -- tab = win:active_tab(), }) end end) end), }, { -- [.] Insert Unicode and Emoji symbols key = ".", mods = LeaderCtrl, action = tunicodes.DefaultAction, }, { key = "u", mods = LeaderCtrl, action = act.EmitEvent("toggle-tabbar") }, }, -- ━━━━━━━━━━━━━━━━━━━━━━ Conditional Key Mappings ━━━━━━━━━━━━━━━━━━━ key_tables = { resize_mode = { ---------- Resize Pane Mode ------------------------- { key = "LeftArrow", action = act.AdjustPaneSize({ "Left", 1 }) }, { key = "h", action = act.AdjustPaneSize({ "Left", 1 }) }, { key = "RightArrow", action = act.AdjustPaneSize({ "Right", 1 }) }, { key = "l", action = act.AdjustPaneSize({ "Right", 1 }) }, { key = "UpArrow", action = act.AdjustPaneSize({ "Up", 1 }) }, { key = "k", action = act.AdjustPaneSize({ "Up", 1 }) }, { key = "DownArrow", action = act.AdjustPaneSize({ "Down", 1 }) }, { key = "j", action = act.AdjustPaneSize({ "Down", 1 }) }, -- Cancel the mode by pressing escape { key = "Escape", action = "PopKeyTable" }, }, window_mode = { --------- Activate Pane Mode ---------------------- { key = "LeftArrow", action = act.ActivatePaneDirection("Left") }, { key = "h", action = act.ActivatePaneDirection("Left") }, { key = "RightArrow", action = act.ActivatePaneDirection("Right") }, { key = "l", action = act.ActivatePaneDirection("Right") }, { key = "UpArrow", action = act.ActivatePaneDirection("Up") }, { key = "k", action = act.ActivatePaneDirection("Up") }, { key = "DownArrow", action = act.ActivatePaneDirection("Down") }, { key = "j", action = act.ActivatePaneDirection("Down") }, }, }, -- ━━━━━━━━━━━━━━━━━━━━━━━━━━━ Mouse Bindings ━━━━━━━━━━━━━━━━━━━━━━━━ mouse_bindings = { { -- Left-Click: (Up) Select Text event = { Up = { streak = 1, button = "Left" } }, mods = "NONE", action = act.CompleteSelection("ClipboardAndPrimarySelection"), }, { -- Ctrl+Left-Click: (Up) Open Hyperlink event = { Up = { streak = 1, button = "Left" } }, mods = "CTRL", action = act.OpenLinkAtMouseCursor, }, { -- Ctrl+WheelUp: Go to previous tab event = { Down = { streak = 1, button = { WheelUp = 1 } } }, mods = "CTRL", action = act.ActivateTabRelative(-1), }, { -- Ctrl+WheelDown: Go to next tab event = { Down = { streak = 1, button = { WheelDown = 1 } } }, mods = "CTRL", action = act.ActivateTabRelative(1), }, }, } return opts