mirror of
https://github.com/foo-dogsquared/dotfiles.git
synced 2025-01-30 22:57:54 +00:00
wezterm: modularize configuration
This commit is contained in:
parent
923243d14a
commit
9eea878392
34
wezterm/config/appearance.lua
Normal file
34
wezterm/config/appearance.lua
Normal file
@ -0,0 +1,34 @@
|
||||
-- This module should set the appearance-related options.
|
||||
local module = {}
|
||||
|
||||
local wezterm = require("wezterm")
|
||||
|
||||
local light_theme = "Albino bark on a tree"
|
||||
local dark_theme = "Bark on a tree"
|
||||
|
||||
local function scheme_for_appearance()
|
||||
local scheme = wezterm.gui.get_appearance()
|
||||
if scheme == "Dark" then
|
||||
return dark_theme
|
||||
else
|
||||
return light_theme
|
||||
end
|
||||
end
|
||||
|
||||
local albino_bark_on_a_tree =
|
||||
wezterm.color.load_base16_scheme(os.getenv("HOME") .. "/library/dotfiles/base16/albino-bark-on-a-tree.yaml")
|
||||
local bark_on_a_tree =
|
||||
wezterm.color.load_base16_scheme(os.getenv("HOME") .. "/library/dotfiles/base16/bark-on-a-tree.yaml")
|
||||
|
||||
--- Apply the configuration with the given table.
|
||||
-- @param config: the table containing Wezterm configuration.
|
||||
function module.apply_to_config(config)
|
||||
config.color_schemes = {}
|
||||
config.color_schemes[light_theme] = albino_bark_on_a_tree
|
||||
config.color_schemes[dark_theme] = bark_on_a_tree
|
||||
config.color_scheme = scheme_for_appearance()
|
||||
|
||||
return config
|
||||
end
|
||||
|
||||
return module
|
39
wezterm/config/base.lua
Normal file
39
wezterm/config/base.lua
Normal file
@ -0,0 +1,39 @@
|
||||
-- A local jumpstart for creating my base configuration.
|
||||
local module = {}
|
||||
|
||||
local wezterm = require("wezterm")
|
||||
|
||||
function module.apply_to_config(config)
|
||||
config.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.
|
||||
config.disable_default_key_bindings = true
|
||||
|
||||
-- Don't tease me with the upcoming releases, man.
|
||||
config.check_for_updates = false
|
||||
|
||||
-- Enable some things for Wayland.
|
||||
config.enable_wayland = true
|
||||
config.force_reverse_video_cursor = true
|
||||
|
||||
-- Desaturate any inactive panes.
|
||||
config.inactive_pane_hsb = {
|
||||
saturation = 0.5,
|
||||
brightness = 0.5,
|
||||
}
|
||||
|
||||
-- Thankfully, wezterm can detect fontconfig aliases.
|
||||
config.font = wezterm.font_with_fallback({
|
||||
"monospace",
|
||||
"Noto Color Emoji",
|
||||
})
|
||||
|
||||
config.color_scheme = "Batman"
|
||||
return config
|
||||
end
|
||||
|
||||
-- The keymod to be used for the entire configuration.
|
||||
module.keymod = "CTRL|SHIFT"
|
||||
|
||||
return module
|
12
wezterm/config/events.lua
Normal file
12
wezterm/config/events.lua
Normal file
@ -0,0 +1,12 @@
|
||||
local module = {}
|
||||
local wezterm = require("wezterm")
|
||||
|
||||
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 module
|
189
wezterm/config/keys.lua
Normal file
189
wezterm/config/keys.lua
Normal file
@ -0,0 +1,189 @@
|
||||
local wezterm = require("wezterm")
|
||||
local base = require("config/base")
|
||||
local events = require("config/events")
|
||||
|
||||
local keymod = base.keymod
|
||||
local module = {}
|
||||
|
||||
function module.apply_to_config(config)
|
||||
-- I'm very used to setting <SPACE> as the leader so I'm continuing the tradition.
|
||||
config.leader = { key = "Space", mods = keymod, timeout_milliseconds = 1000 }
|
||||
|
||||
-- Quick select-related options. Quite similar to Kitty hints which is
|
||||
-- nice.
|
||||
config.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.
|
||||
"sha256-.{44,128}", -- SHA256 hashes in Base64, used often in getting hashes for Nix packaging.
|
||||
}
|
||||
|
||||
config.mouse_bindings = {
|
||||
{
|
||||
event = { Down = { streak = 3, button = "Left" } },
|
||||
action = { SelectTextAtMouseCursor = "SemanticZone" },
|
||||
mods = keymod,
|
||||
},
|
||||
}
|
||||
|
||||
-- It also makes use of key tables which is defined after.
|
||||
config.keys = {
|
||||
-- Clipboard
|
||||
{ key = "c", mods = keymod, action = wezterm.action({ CopyTo = "Clipboard" }) },
|
||||
{ key = "v", mods = keymod, action = wezterm.action({ PasteFrom = "Clipboard" }) },
|
||||
|
||||
-- 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,
|
||||
replace_current = true,
|
||||
one_shot = true,
|
||||
}),
|
||||
},
|
||||
{
|
||||
key = "r",
|
||||
mods = "LEADER",
|
||||
action = wezterm.action({
|
||||
ActivateKeyTable = { name = "resize_pane", replace_current = true, one_shot = false },
|
||||
}),
|
||||
},
|
||||
{ key = "h", mods = keymod, action = wezterm.action({ ActivatePaneDirection = "Left" }) },
|
||||
{ key = "l", mods = keymod, action = wezterm.action({ ActivatePaneDirection = "Right" }) },
|
||||
{ key = "LeftArrow", mods = keymod, action = wezterm.action({ ActivatePaneDirection = "Left" }) },
|
||||
{ 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" }) },
|
||||
|
||||
-- More pane-related niceties.
|
||||
{ key = "f", mods = "LEADER", action = "TogglePaneZoomState" },
|
||||
{ key = "f", mods = keymod, action = "TogglePaneZoomState" },
|
||||
{ key = "n", mods = "LEADER", action = wezterm.action({ SplitHorizontal = { domain = "CurrentPaneDomain" } }) },
|
||||
{ key = "n", mods = keymod, action = wezterm.action({ SplitHorizontal = { domain = "CurrentPaneDomain" } }) },
|
||||
{ key = "d", mods = keymod, action = wezterm.action({ CloseCurrentPane = { confirm = false } }) },
|
||||
|
||||
-- Tab navigation
|
||||
{
|
||||
key = "t",
|
||||
mods = "LEADER",
|
||||
action = wezterm.action({
|
||||
ActivateKeyTable = {
|
||||
name = "tab_navigation",
|
||||
timeout_milliseconds = 1000,
|
||||
replace_current = true,
|
||||
one_shot = true,
|
||||
},
|
||||
}),
|
||||
},
|
||||
|
||||
-- Hints and quick selections
|
||||
{
|
||||
key = "h",
|
||||
mods = "LEADER",
|
||||
action = wezterm.action({
|
||||
ActivateKeyTable = { name = "hints", timeout_milliseconds = 1000, replace_current = true, one_shot = true },
|
||||
}),
|
||||
},
|
||||
|
||||
{ key = "r", mods = keymod, action = "ReloadConfiguration" },
|
||||
{ key = "t", mods = keymod, action = wezterm.action.ShowDebugOverlay },
|
||||
|
||||
-- Selection
|
||||
{ key = "Space", mods = "LEADER", action = "QuickSelect" },
|
||||
{ key = "a", mods = keymod, action = "QuickSelect" },
|
||||
{ key = "s", mods = keymod, action = wezterm.action({ Search = { CaseSensitiveString = "" } }) },
|
||||
}
|
||||
|
||||
config.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.
|
||||
"sha256-[[:alpha:][:digit:]-=+/?]{44}", -- SHA256 hashes in Base64, used often in getting hashes for Nix packaging.
|
||||
"[[:alpha:][:digit:]-=+/?]{44,64}",
|
||||
},
|
||||
},
|
||||
}),
|
||||
},
|
||||
|
||||
-- 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 = {
|
||||
".+",
|
||||
},
|
||||
},
|
||||
}),
|
||||
},
|
||||
|
||||
{ key = "p", action = wezterm.action({ Search = { Regex = "legacyPackages[[:alpha:][:digit:]]+" } }) },
|
||||
|
||||
{ key = "Space", action = "QuickSelect" },
|
||||
{ key = "s", action = "QuickSelect" },
|
||||
{ key = "f", action = wezterm.action({ Search = { CaseSensitiveString = "" } }) },
|
||||
},
|
||||
|
||||
pane_navigation = {
|
||||
{ key = "d", action = wezterm.action({ CloseCurrentPane = { confirm = false } }) },
|
||||
{ key = "h", action = wezterm.action({ ActivatePaneDirection = "Left" }) },
|
||||
{ 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 = {
|
||||
{ key = "d", action = wezterm.action({ CloseCurrentTab = { confirm = false } }) },
|
||||
{ key = "h", action = wezterm.action({ ActivateTabRelative = -1 }) },
|
||||
{ key = "j", action = wezterm.action({ ActivateTab = -1 }) },
|
||||
{ key = "k", action = wezterm.action({ ActivateTab = 0 }) },
|
||||
{ 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" },
|
||||
{ key = "Enter", action = "PopKeyTable" },
|
||||
},
|
||||
}
|
||||
|
||||
return config
|
||||
end
|
||||
|
||||
return module
|
@ -1,190 +1,11 @@
|
||||
local wezterm = require("wezterm")
|
||||
local io = require("io")
|
||||
local os = require("os")
|
||||
local base = require("config/base")
|
||||
local keys = require("config/keys")
|
||||
local appearance = require("config/appearance")
|
||||
|
||||
local keymod = "CTRL|SHIFT"
|
||||
local config = {}
|
||||
|
||||
local light_theme = "Material"
|
||||
local dark_theme = "MaterialDark"
|
||||
base.apply_to_config(config)
|
||||
keys.apply_to_config(config)
|
||||
appearance.apply_to_config(config)
|
||||
|
||||
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()
|
||||
window:perform_action(wezterm.action{
|
||||
SpawnCommandInNewWindow = {
|
||||
args = {
|
||||
"sh", "-c",
|
||||
"echo", scrollback, "|", "nvim", name }}}, pane)
|
||||
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,
|
||||
|
||||
inactive_pane_hsb = {
|
||||
saturation = 0.5,
|
||||
brightness = 0.5,
|
||||
};
|
||||
|
||||
-- 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.
|
||||
"sha256-.{44,128}", -- SHA256 hashes in Base64, used often in getting hashes for Nix packaging.
|
||||
},
|
||||
|
||||
mouse_bindings = {
|
||||
{ event = { Down = { streak = 3, button = "Left" }},
|
||||
action = { SelectTextAtMouseCursor = "SemanticZone" },
|
||||
mods = keymod },
|
||||
},
|
||||
|
||||
-- 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, replace_current = true, one_shot = true, }},
|
||||
{key = "r", mods = "LEADER", action = wezterm.action {
|
||||
ActivateKeyTable = { name = "resize_pane", replace_current = true, one_shot = false }}},
|
||||
{key = "h", mods = keymod, action = wezterm.action { ActivatePaneDirection = "Left" }},
|
||||
{key = "l", mods = keymod, action = wezterm.action { ActivatePaneDirection = "Right" }},
|
||||
{key = "LeftArrow", mods = keymod, action = wezterm.action { ActivatePaneDirection = "Left" }},
|
||||
{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" }},
|
||||
|
||||
-- More pane-related niceties.
|
||||
{key = "f", mods = "LEADER", action = "TogglePaneZoomState"},
|
||||
{key = "f", mods = keymod, action = "TogglePaneZoomState"},
|
||||
{key = "n", mods = "LEADER", action = wezterm.action { SplitHorizontal = { domain = "CurrentPaneDomain" }}},
|
||||
{key = "n", mods = keymod, action = wezterm.action { SplitHorizontal = { domain = "CurrentPaneDomain" }}},
|
||||
{key = "d", mods = keymod, action = wezterm.action { CloseCurrentPane = { confirm = false }}},
|
||||
|
||||
-- Tab navigation
|
||||
{key = "t", mods = "LEADER", action = wezterm.action {
|
||||
ActivateKeyTable = { name = "tab_navigation", timeout_milliseconds = 1000, replace_current = true, one_shot = true, }}},
|
||||
|
||||
-- Hints and quick selections
|
||||
{key = "h", mods = "LEADER", action = wezterm.action {
|
||||
ActivateKeyTable = { name = "hints", timeout_milliseconds = 1000, replace_current = true, one_shot = true }}},
|
||||
|
||||
{key = "r", mods = keymod, action = "ReloadConfiguration" },
|
||||
|
||||
-- Selection
|
||||
{key = "Space", mods = "LEADER", action = "QuickSelect" },
|
||||
{key = "a", mods = keymod, action = "QuickSelect" },
|
||||
{key = "s", mods = keymod, action = wezterm.action { Search = { CaseSensitiveString = "" }}},
|
||||
},
|
||||
|
||||
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.
|
||||
"sha256-[[:alpha:][:digit:]-=+/?]{44}", -- SHA256 hashes in Base64, used often in getting hashes for Nix packaging.
|
||||
"[[:alpha:][:digit:]-=+/?]{44,64}"
|
||||
}}}},
|
||||
|
||||
-- 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 = {
|
||||
".+"
|
||||
}}}},
|
||||
|
||||
{key = "p", action = wezterm.action { Search = { Regex = "legacyPackages[[:alpha:][:digit:]]+" }}},
|
||||
|
||||
{key = "Space", action = "QuickSelect" },
|
||||
{key = "s", action = "QuickSelect" },
|
||||
{key = "f", action = wezterm.action { Search = { CaseSensitiveString = "" }}},
|
||||
},
|
||||
|
||||
pane_navigation = {
|
||||
{key = "d", action = wezterm.action { CloseCurrentPane = { confirm = false }}},
|
||||
{key = "h", action = wezterm.action { ActivatePaneDirection = "Left" }},
|
||||
{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 = {
|
||||
{key = "d", action = wezterm.action { CloseCurrentTab = { confirm = false }}},
|
||||
{key = "h", action = wezterm.action { ActivateTabRelative = -1 }},
|
||||
{key = "j", action = wezterm.action { ActivateTab = -1 }},
|
||||
{key = "k", action = wezterm.action { ActivateTab = 0 }},
|
||||
{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" },
|
||||
{key = "Enter", action = "PopKeyTable" },
|
||||
},
|
||||
},
|
||||
}
|
||||
return config
|
||||
|
Loading…
Reference in New Issue
Block a user