2022-05-04 02:56:49 +00:00
|
|
|
local wezterm = require("wezterm")
|
|
|
|
local io = require("io")
|
|
|
|
local os = require("os")
|
|
|
|
|
|
|
|
local keymod = "CTRL|SHIFT"
|
|
|
|
|
|
|
|
local light_theme = "Material"
|
|
|
|
local dark_theme = "MaterialDark"
|
|
|
|
|
|
|
|
wezterm.on("toggle-dark-mode", function (window, pane)
|
|
|
|
local overrides = window:get_config_overrides() or {}
|
|
|
|
if (overrides.color_scheme == light_theme) then
|
|
|
|
overrides.color_scheme = dark_theme
|
|
|
|
else
|
|
|
|
overrides.color_scheme = light_theme
|
|
|
|
end
|
|
|
|
window:set_config_overrides(overrides)
|
|
|
|
end)
|
|
|
|
|
|
|
|
wezterm.on("read-scrollback", function (window, pane)
|
|
|
|
local scrollback = pane:get_lines_as_text()
|
|
|
|
|
|
|
|
local name = os.tmpname()
|
|
|
|
local f = io.open(name, "w+")
|
|
|
|
f:write(scrollback)
|
|
|
|
f:flush()
|
|
|
|
f:close()
|
|
|
|
|
|
|
|
window:perform_action(wezterm.action{SpawnCommandInNewWindow = { args = { "nvim", name }}}, pane)
|
|
|
|
|
|
|
|
wezterm.sleep_ms(1000)
|
|
|
|
os.remove(name)
|
|
|
|
end)
|
|
|
|
|
|
|
|
wezterm.on("update-right-status", function (window, pane)
|
|
|
|
local key = window:active_key_table()
|
|
|
|
if key then
|
|
|
|
key = "TABLE: " .. key
|
|
|
|
end
|
|
|
|
window:set_right_status(key or "")
|
|
|
|
end)
|
|
|
|
|
|
|
|
return {
|
|
|
|
-- Thankfully, wezterm can detect fontconfig aliases.
|
|
|
|
font = wezterm.font_with_fallback({
|
|
|
|
"monospace",
|
|
|
|
"Noto Color Emoji",
|
|
|
|
}),
|
|
|
|
color_scheme = dark_theme,
|
|
|
|
|
|
|
|
default_prog = {"bash"},
|
|
|
|
|
|
|
|
-- I'm liking the workflow I have with Kitty so no thanks for the default
|
|
|
|
-- shortcuts. So this is what it feels like to be obnoxiously stubborn.
|
|
|
|
disable_default_key_bindings = true,
|
|
|
|
|
|
|
|
-- Don't tease me with the upcoming releases, man.
|
|
|
|
check_for_updates = false,
|
|
|
|
|
|
|
|
-- I'm very used to setting <SPACE> as the leader so I'm continuing the tradition.
|
|
|
|
leader = { key = "Space", mods = keymod, timeout_milliseconds = 1000 },
|
|
|
|
|
|
|
|
enable_wayland = true,
|
|
|
|
force_reverse_video_cursor = true,
|
|
|
|
|
|
|
|
-- Quick select-related options. Quite similar to Kitty hints which is
|
|
|
|
-- nice.
|
|
|
|
quick_select_patterns = {
|
|
|
|
"[0-9a-f]{7,40}", -- SHA1 hashes, usually used for Git.
|
|
|
|
"[0-9a-f]{7,64}", -- SHA256 hashes, used often for getting hashes for Guix packaging.
|
2022-05-10 06:34:43 +00:00
|
|
|
"sha256-[[:alpha:][:digit:]=+/]{44}", -- SHA256 hashes in Base64, used often in getting hashes for Nix packaging.
|
2022-05-04 02:56:49 +00:00
|
|
|
},
|
|
|
|
|
|
|
|
mouse_bindings = {
|
|
|
|
{ event = { Down = { streak = 3, button = "Left" }},
|
|
|
|
action = { SelectTextAtMouseCursor = "SemanticZone" },
|
|
|
|
mods = "NONE" },
|
|
|
|
},
|
|
|
|
|
|
|
|
-- It also makes use of key tables which is defined after.
|
|
|
|
keys = {
|
|
|
|
-- Clipboard
|
|
|
|
{key = "c", mods = keymod, action = wezterm.action { CopyTo = "Clipboard" }},
|
|
|
|
{key = "v", mods = keymod, action = wezterm.action { PasteFrom = "Clipboard" }},
|
|
|
|
{key = "w", mods = keymod, action = wezterm.action { EmitEvent = "toggle-dark-mode" }},
|
|
|
|
{key = "e", mods = keymod, action = wezterm.action { EmitEvent = "read-scrollback" }},
|
|
|
|
|
|
|
|
-- Font resize.
|
|
|
|
{key = "+", mods = keymod, action = "IncreaseFontSize"},
|
|
|
|
{key = "_", mods = keymod, action = "DecreaseFontSize"},
|
|
|
|
{key = ")", mods = keymod, action = "ResetFontSize"},
|
|
|
|
|
|
|
|
-- Scrollback
|
|
|
|
{key = "j", mods = keymod, action = wezterm.action { ScrollByPage = 1 }},
|
|
|
|
{key = "k", mods = keymod, action = wezterm.action { ScrollByPage = -1 }},
|
|
|
|
{key = "j", mods = "CTRL|ALT", action = wezterm.action { ScrollToPrompt = 1 }},
|
|
|
|
{key = "k", mods = "CTRL|ALT", action = wezterm.action { ScrollToPrompt = -1 }},
|
|
|
|
|
|
|
|
-- Pane navigation.
|
|
|
|
{key = "p", mods = "LEADER", action = wezterm.action {
|
|
|
|
ActivateKeyTable = { name = "pane_navigation", timeout_milliseconds = 1000 }}},
|
|
|
|
{key = "r", mods = "LEADER", action = wezterm.action {
|
|
|
|
ActivateKeyTable = { name = "resize_pane", one_shot = false }}},
|
2022-05-10 06:34:43 +00:00
|
|
|
{key = "h", mods = keymod, action = wezterm.action { ActivatePaneDirection = "Left" }},
|
2022-05-04 02:56:49 +00:00
|
|
|
{key = "l", mods = keymod, action = wezterm.action { ActivatePaneDirection = "Right" }},
|
2022-05-10 06:34:43 +00:00
|
|
|
{key = "LeftArrow", mods = keymod, action = wezterm.action { ActivatePaneDirection = "Left" }},
|
2022-05-04 02:56:49 +00:00
|
|
|
{key = "DownArrow", mods = keymod, action = wezterm.action { ActivatePaneDirection = "Down" }},
|
|
|
|
{key = "UpArrow", mods = keymod, action = wezterm.action { ActivatePaneDirection = "Up" }},
|
|
|
|
{key = "RightArrow", mods = keymod, action = wezterm.action { ActivatePaneDirection = "Right" }},
|
|
|
|
|
2022-05-10 06:34:43 +00:00
|
|
|
-- More pane-related niceties.
|
2022-05-04 02:56:49 +00:00
|
|
|
{key = "f", mods = "LEADER", action = "TogglePaneZoomState"},
|
|
|
|
{key = "f", mods = keymod, action = "TogglePaneZoomState"},
|
|
|
|
{key = "n", mods = "LEADER", action = wezterm.action { SplitHorizontal = { domain = "CurrentPaneDomain" }}},
|
2022-05-10 06:34:43 +00:00
|
|
|
{key = "n", mods = keymod, action = wezterm.action { SplitHorizontal = { domain = "CurrentPaneDomain" }}},
|
|
|
|
{key = "d", mods = keymod, action = wezterm.action { CloseCurrentPane = { confirm = false }}},
|
2022-05-04 02:56:49 +00:00
|
|
|
|
|
|
|
-- Tab navigation
|
|
|
|
{key = "t", mods = "LEADER", action = wezterm.action {
|
|
|
|
ActivateKeyTable = { name = "tab_navigation", timeout_milliseconds = 1000 }}},
|
|
|
|
|
|
|
|
-- Hints and quick selections
|
|
|
|
{key = "h", mods = "LEADER", action = wezterm.action {
|
|
|
|
ActivateKeyTable = { name = "hints", timeout_milliseconds = 1000 }}},
|
|
|
|
|
2022-05-20 06:43:29 +00:00
|
|
|
{key = "r", mods = keymod, action = "ReloadConfiguration" },
|
|
|
|
|
2022-05-04 02:56:49 +00:00
|
|
|
-- Selection
|
|
|
|
{key = "Space", mods = "LEADER", action = "QuickSelect" },
|
2022-05-20 06:43:29 +00:00
|
|
|
{key = "a", mods = keymod, action = "QuickSelect" },
|
|
|
|
{key = "s", mods = keymod, action = wezterm.action { Search = { CaseSensitiveString = "" }}},
|
2022-05-04 02:56:49 +00:00
|
|
|
},
|
|
|
|
|
|
|
|
key_tables = {
|
|
|
|
hints = {
|
|
|
|
{key = "g", action = wezterm.action { Search = { Regex = "[0-9a-f]{6,}" }}},
|
|
|
|
{key = "h", action = wezterm.action { QuickSelectArgs = {
|
|
|
|
patterns = {
|
|
|
|
"[0-9a-f]{7,40}", -- SHA1 hashes, usually used for Git.
|
|
|
|
"[0-9a-f]{7,64}", -- SHA256 hashes, used often for getting hashes for Guix packaging.
|
2022-05-10 06:34:43 +00:00
|
|
|
"sha256-[[:alpha:][:digit:]=+/]{44}", -- SHA256 hashes in Base64, used often in getting hashes for Nix packaging.
|
2022-05-20 06:43:29 +00:00
|
|
|
"[[:alpha:][:digit:]=+/]{44,64}"
|
2022-05-04 02:56:49 +00:00
|
|
|
}}}},
|
2022-05-20 06:43:29 +00:00
|
|
|
|
|
|
|
-- Basically the equivalent of `kitty hints word`.
|
|
|
|
{key = "w", action = wezterm.action { QuickSelectArgs = {
|
|
|
|
patterns = {
|
|
|
|
"\\S+"
|
|
|
|
}}}},
|
|
|
|
|
|
|
|
-- The equivalent to `kitty hints line`.
|
|
|
|
{key = "l", action = wezterm.action { QuickSelectArgs = {
|
|
|
|
patterns = {
|
|
|
|
".+"
|
|
|
|
}}}},
|
|
|
|
|
2022-05-04 02:56:49 +00:00
|
|
|
{key = "p", action = wezterm.action { Search = { Regex = "legacyPackages[[:alpha:][:digit:]]+" }}},
|
2022-05-20 06:43:29 +00:00
|
|
|
|
2022-05-04 02:56:49 +00:00
|
|
|
{key = "Space", action = "QuickSelect" },
|
2022-05-20 06:43:29 +00:00
|
|
|
{key = "s", action = "QuickSelect" },
|
|
|
|
{key = "f", action = wezterm.action { Search = { CaseSensitiveString = "" }}},
|
2022-05-04 02:56:49 +00:00
|
|
|
},
|
|
|
|
|
|
|
|
pane_navigation = {
|
2022-05-10 06:34:43 +00:00
|
|
|
{key = "d", action = wezterm.action { CloseCurrentPane = { confirm = false }}},
|
|
|
|
{key = "h", action = wezterm.action { ActivatePaneDirection = "Left" }},
|
2022-05-04 02:56:49 +00:00
|
|
|
{key = "j", action = wezterm.action { ActivatePaneDirection = "Down" }},
|
|
|
|
{key = "k", action = wezterm.action { ActivatePaneDirection = "Up" }},
|
|
|
|
{key = "l", action = wezterm.action { ActivatePaneDirection = "Right" }},
|
|
|
|
{key = "n", action = wezterm.action { SplitHorizontal = { domain = "CurrentPaneDomain" }}},
|
|
|
|
},
|
|
|
|
|
|
|
|
tab_navigation = {
|
2022-05-10 06:34:43 +00:00
|
|
|
{key = "d", action = wezterm.action { CloseCurrentTab = { confirm = false }}},
|
|
|
|
{key = "h", action = wezterm.action { ActivateTabRelative = -1 }},
|
2022-05-20 06:43:29 +00:00
|
|
|
{key = "j", action = wezterm.action { ActivateTab = -1 }},
|
|
|
|
{key = "k", action = wezterm.action { ActivateTab = 0 }},
|
2022-05-04 02:56:49 +00:00
|
|
|
{key = "l", action = wezterm.action { ActivateTabRelative = 1 }},
|
|
|
|
{key = "n", action = wezterm.action { SpawnTab = "CurrentPaneDomain" }},
|
|
|
|
},
|
|
|
|
|
|
|
|
resize_pane = {
|
|
|
|
{key = "h", action = wezterm.action { AdjustPaneSize = { "Left", 1 }}},
|
|
|
|
{key = "j", action = wezterm.action { AdjustPaneSize = { "Down", 1 }}},
|
|
|
|
{key = "k", action = wezterm.action { AdjustPaneSize = { "Up", 1 }}},
|
|
|
|
{key = "l", action = wezterm.action { AdjustPaneSize = { "Right", 1 }}},
|
|
|
|
{key = "q", action = "PopKeyTable" },
|
|
|
|
{key = "Escape", action = "PopKeyTable" },
|
2022-05-10 06:34:43 +00:00
|
|
|
{key = "Enter", action = "PopKeyTable" },
|
2022-05-04 02:56:49 +00:00
|
|
|
},
|
|
|
|
},
|
|
|
|
}
|