feat(wezterm): split into multiple files
This commit is contained in:
parent
f80e3568be
commit
d5db172ab7
5 changed files with 373 additions and 377 deletions
102
dot_config/wezterm/bar.lua
Normal file
102
dot_config/wezterm/bar.lua
Normal file
|
@ -0,0 +1,102 @@
|
|||
local wezterm = require("wezterm")
|
||||
local fonts = require("fonts")
|
||||
|
||||
local DIVIDERS = {
|
||||
LEFT = utf8.char(0xe0be),
|
||||
RIGHT = utf8.char(0xe0bc),
|
||||
}
|
||||
|
||||
-- custom tab bar
|
||||
---@diagnostic disable-next-line: unused-local
|
||||
wezterm.on("format-tab-title", function(tab, tabs, panes, config, hover, max_width)
|
||||
local colours = config.resolved_palette.tab_bar
|
||||
|
||||
local active_tab_index = 0
|
||||
for _, t in ipairs(tabs) do
|
||||
if t.is_active == true then
|
||||
active_tab_index = t.tab_index
|
||||
end
|
||||
end
|
||||
|
||||
local active_bg = config.resolved_palette.ansi[6]
|
||||
local active_fg = colours.background
|
||||
local inactive_bg = colours.inactive_tab.bg_color
|
||||
local inactive_fg = colours.inactive_tab.fg_color
|
||||
local new_tab_bg = colours.new_tab.bg_color
|
||||
|
||||
local s_bg, s_fg, e_bg, e_fg
|
||||
|
||||
-- the last tab
|
||||
if tab.tab_index == #tabs - 1 then
|
||||
if tab.is_active then
|
||||
s_bg = active_bg
|
||||
s_fg = active_fg
|
||||
e_bg = new_tab_bg
|
||||
e_fg = active_bg
|
||||
else
|
||||
s_bg = inactive_bg
|
||||
s_fg = inactive_fg
|
||||
e_bg = new_tab_bg
|
||||
e_fg = inactive_bg
|
||||
end
|
||||
elseif tab.tab_index == active_tab_index - 1 then
|
||||
s_bg = inactive_bg
|
||||
s_fg = inactive_fg
|
||||
e_bg = active_bg
|
||||
e_fg = inactive_bg
|
||||
elseif tab.is_active then
|
||||
s_bg = active_bg
|
||||
s_fg = active_fg
|
||||
e_bg = inactive_bg
|
||||
e_fg = active_bg
|
||||
else
|
||||
s_bg = inactive_bg
|
||||
s_fg = inactive_fg
|
||||
e_bg = inactive_bg
|
||||
e_fg = inactive_bg
|
||||
end
|
||||
|
||||
local muxpanes = wezterm.mux.get_tab(tab.tab_id):panes()
|
||||
local count = #muxpanes == 1 and "" or #muxpanes
|
||||
local index = tab.tab_index + 1 .. ": "
|
||||
|
||||
return {
|
||||
{ Background = { Color = s_bg } },
|
||||
{ Foreground = { Color = s_fg } },
|
||||
{
|
||||
Text = " " .. index .. tab.active_pane.title .. fonts.numberStyle(count, "superscript") .. " ",
|
||||
},
|
||||
{ Background = { Color = e_bg } },
|
||||
{ Foreground = { Color = e_fg } },
|
||||
{ Text = DIVIDERS.RIGHT },
|
||||
}
|
||||
end)
|
||||
|
||||
-- custom status
|
||||
---@diagnostic disable-next-line: unused-local
|
||||
wezterm.on("update-status", function(window, pane)
|
||||
local palette = window:effective_config().resolved_palette
|
||||
local firstTabActive = window:mux_window():tabs_with_info()[1].is_active
|
||||
|
||||
local leader_text = " "
|
||||
|
||||
if window:leader_is_active() then
|
||||
leader_text = " "
|
||||
end
|
||||
|
||||
local divider_bg = firstTabActive and palette.ansi[6] or palette.tab_bar.inactive_tab.bg_color
|
||||
|
||||
window:set_left_status(wezterm.format({
|
||||
{ Foreground = { Color = palette.background } },
|
||||
{ Background = { Color = palette.ansi[5] } },
|
||||
{ Text = leader_text },
|
||||
{ Background = { Color = divider_bg } },
|
||||
{ Foreground = { Color = palette.ansi[5] } },
|
||||
{ Text = DIVIDERS.RIGHT },
|
||||
}))
|
||||
window:set_right_status(wezterm.format({
|
||||
{ Background = { Color = palette.background } },
|
||||
{ Foreground = { Color = palette.ansi[6] } },
|
||||
{ Text = os.date(" %H:%M ") },
|
||||
}))
|
||||
end)
|
86
dot_config/wezterm/fonts.lua
Normal file
86
dot_config/wezterm/fonts.lua
Normal file
|
@ -0,0 +1,86 @@
|
|||
local wezterm = require("wezterm")
|
||||
|
||||
local M = {}
|
||||
|
||||
M.get_font = function(name)
|
||||
-- fonts I like, with the settings I prefer
|
||||
-- kept seperately from the rest of the config so that I can easily change them
|
||||
local fonts = {
|
||||
berkeley = {
|
||||
font = {
|
||||
family = "Berkeley Mono",
|
||||
weight = "Bold",
|
||||
},
|
||||
size = 16,
|
||||
},
|
||||
comic = {
|
||||
font = "Comic Code Ligatures",
|
||||
size = 18,
|
||||
},
|
||||
fantasque = {
|
||||
font = "Fantasque Sans Mono",
|
||||
size = 20,
|
||||
},
|
||||
victor = {
|
||||
font = {
|
||||
family = "Victor Mono",
|
||||
weight = "DemiBold",
|
||||
harfbuzz_features = { "ss02=1" },
|
||||
},
|
||||
size = 18,
|
||||
},
|
||||
}
|
||||
|
||||
return {
|
||||
font = wezterm.font_with_fallback({
|
||||
fonts[name].font,
|
||||
"Apple Color Emoji",
|
||||
}),
|
||||
size = fonts[name].size,
|
||||
}
|
||||
end
|
||||
|
||||
-- superscript/subscript
|
||||
M.numberStyle = function(number, script)
|
||||
local scripts = {
|
||||
superscript = {
|
||||
"⁰",
|
||||
"¹",
|
||||
"²",
|
||||
"³",
|
||||
"⁴",
|
||||
"⁵",
|
||||
"⁶",
|
||||
"⁷",
|
||||
"⁸",
|
||||
"⁹",
|
||||
},
|
||||
subscript = {
|
||||
"₀",
|
||||
"₁",
|
||||
"₂",
|
||||
"₃",
|
||||
"₄",
|
||||
"₅",
|
||||
"₆",
|
||||
"₇",
|
||||
"₈",
|
||||
"₉",
|
||||
},
|
||||
}
|
||||
local numbers = scripts[script]
|
||||
local number_string = tostring(number)
|
||||
local result = ""
|
||||
for i = 1, #number_string do
|
||||
local char = number_string:sub(i, i)
|
||||
local num = tonumber(char)
|
||||
if num then
|
||||
result = result .. numbers[num + 1]
|
||||
else
|
||||
result = result .. char
|
||||
end
|
||||
end
|
||||
return result
|
||||
end
|
||||
|
||||
return M
|
117
dot_config/wezterm/shortcuts.lua
Normal file
117
dot_config/wezterm/shortcuts.lua
Normal file
|
@ -0,0 +1,117 @@
|
|||
local wezterm = require("wezterm")
|
||||
local act = wezterm.action
|
||||
|
||||
return {
|
||||
-- use 'Backslash' to split horizontally
|
||||
{
|
||||
key = "\\",
|
||||
mods = "LEADER",
|
||||
action = act({ SplitHorizontal = { domain = "CurrentPaneDomain" } }),
|
||||
},
|
||||
-- and 'Minus' to split vertically
|
||||
{
|
||||
key = "-",
|
||||
mods = "LEADER",
|
||||
action = act({ SplitVertical = { domain = "CurrentPaneDomain" } }),
|
||||
},
|
||||
-- 'hjkl' to move between panes
|
||||
{ key = "h", mods = "LEADER", action = act({ ActivatePaneDirection = "Left" }) },
|
||||
{ key = "j", mods = "LEADER", action = act({ ActivatePaneDirection = "Down" }) },
|
||||
{ key = "k", mods = "LEADER", action = act({ ActivatePaneDirection = "Up" }) },
|
||||
{ key = "l", mods = "LEADER", action = act({ ActivatePaneDirection = "Right" }) },
|
||||
-- -- Shift + 'hjkl' to resize panes
|
||||
{ key = "h", mods = "LEADER|SHIFT", action = act({ AdjustPaneSize = { "Left", 5 } }) },
|
||||
{ key = "j", mods = "LEADER|SHIFT", action = act({ AdjustPaneSize = { "Down", 5 } }) },
|
||||
{ key = "k", mods = "LEADER|SHIFT", action = act({ AdjustPaneSize = { "Up", 5 } }) },
|
||||
{ key = "l", mods = "LEADER|SHIFT", action = act({ AdjustPaneSize = { "Right", 5 } }) },
|
||||
-- numbers to navigate to tabs
|
||||
{ key = "1", mods = "LEADER", action = act({ ActivateTab = 0 }) },
|
||||
{ key = "2", mods = "LEADER", action = act({ ActivateTab = 1 }) },
|
||||
{ key = "3", mods = "LEADER", action = act({ ActivateTab = 2 }) },
|
||||
{ key = "4", mods = "LEADER", action = act({ ActivateTab = 3 }) },
|
||||
{ key = "5", mods = "LEADER", action = act({ ActivateTab = 4 }) },
|
||||
{ key = "6", mods = "LEADER", action = act({ ActivateTab = 5 }) },
|
||||
{ key = "7", mods = "LEADER", action = act({ ActivateTab = 6 }) },
|
||||
{ key = "8", mods = "LEADER", action = act({ ActivateTab = 7 }) },
|
||||
{ key = "9", mods = "LEADER", action = act({ ActivateTab = 8 }) },
|
||||
{ key = "9", mods = "LEADER", action = act({ ActivateTab = 9 }) },
|
||||
{ key = "0", mods = "LEADER", action = act({ ActivateTab = -1 }) },
|
||||
{ key = "1", mods = "SUPER", action = act({ ActivateTab = 0 }) },
|
||||
{ key = "2", mods = "SUPER", action = act({ ActivateTab = 1 }) },
|
||||
{ key = "3", mods = "SUPER", action = act({ ActivateTab = 2 }) },
|
||||
{ key = "4", mods = "SUPER", action = act({ ActivateTab = 3 }) },
|
||||
{ key = "5", mods = "SUPER", action = act({ ActivateTab = 4 }) },
|
||||
{ key = "6", mods = "SUPER", action = act({ ActivateTab = 5 }) },
|
||||
{ key = "7", mods = "SUPER", action = act({ ActivateTab = 6 }) },
|
||||
{ key = "8", mods = "SUPER", action = act({ ActivateTab = 7 }) },
|
||||
{ key = "9", mods = "SUPER", action = act({ ActivateTab = 8 }) },
|
||||
{ key = "9", mods = "SUPER", action = act({ ActivateTab = 9 }) },
|
||||
{ key = "0", mods = "SUPER", action = act({ ActivateTab = -1 }) },
|
||||
-- 'c' to create a new tab
|
||||
{ key = "c", mods = "LEADER", action = act({ SpawnTab = "CurrentPaneDomain" }) },
|
||||
-- 'x' to kill the current pane
|
||||
{ key = "x", mods = "LEADER", action = act({ CloseCurrentPane = { confirm = true } }) },
|
||||
-- 'z' to toggle the zoom for the current pane
|
||||
{ key = "z", mods = "LEADER", action = "TogglePaneZoomState" },
|
||||
-- 'v' to visually select in the current pane
|
||||
{ key = "v", mods = "LEADER", action = "ActivateCopyMode" },
|
||||
-- 'r' to rotate panes
|
||||
{ key = "r", mods = "LEADER", action = act.RotatePanes("Clockwise") },
|
||||
{ key = " ", mods = "LEADER", action = act.QuickSelect },
|
||||
{
|
||||
key = "o",
|
||||
mods = "LEADER",
|
||||
action = act.QuickSelectArgs({
|
||||
label = "open url",
|
||||
patterns = {
|
||||
"https?://\\S+",
|
||||
},
|
||||
action = wezterm.action_callback(function(window, pane)
|
||||
local url = window:get_selection_text_for_pane(pane)
|
||||
wezterm.open_with(url)
|
||||
end),
|
||||
}),
|
||||
},
|
||||
-- copypasta
|
||||
{ key = "Enter", mods = "ALT", action = act.ToggleFullScreen },
|
||||
|
||||
{ key = "-", mods = "CTRL", action = act.DecreaseFontSize },
|
||||
{ key = "-", mods = "SUPER", action = act.DecreaseFontSize },
|
||||
{ key = "=", mods = "CTRL", action = act.IncreaseFontSize },
|
||||
{ key = "=", mods = "SUPER", action = act.IncreaseFontSize },
|
||||
{ key = "0", mods = "CTRL", action = act.ResetFontSize },
|
||||
{ key = "0", mods = "SUPER", action = act.ResetFontSize },
|
||||
|
||||
{ key = "c", mods = "SHIFT|CTRL", action = act.CopyTo("Clipboard") },
|
||||
{ key = "c", mods = "SUPER", action = act.CopyTo("Clipboard") },
|
||||
{ key = "v", mods = "SHIFT|CTRL", action = act.PasteFrom("Clipboard") },
|
||||
{ key = "v", mods = "SUPER", action = act.PasteFrom("Clipboard") },
|
||||
|
||||
{ key = "f", mods = "SHIFT|CTRL", action = act.Search("CurrentSelectionOrEmptyString") },
|
||||
{ key = "f", mods = "SUPER", action = act.Search("CurrentSelectionOrEmptyString") },
|
||||
|
||||
{ key = "l", mods = "SHIFT|CTRL", action = act.ShowDebugOverlay },
|
||||
|
||||
{ key = "p", mods = "LEADER", action = act.PaneSelect({ alphabet = "asdfghjkl;", mode = "Activate" }) },
|
||||
{ key = "P", mods = "LEADER", action = act.PaneSelect({ alphabet = "asdfghjkl;", mode = "SwapWithActive" }) },
|
||||
|
||||
{ key = "p", mods = "SUPER", action = act.PaneSelect({ alphabet = "asdfghjkl;", mode = "Activate" }) },
|
||||
{ key = "P", mods = "SUPER", action = act.PaneSelect({ alphabet = "asdfghjkl;", mode = "SwapWithActive" }) },
|
||||
{ key = "R", mods = "LEADER", action = act.ReloadConfiguration },
|
||||
|
||||
-- mostly OS defaults
|
||||
{ key = "n", mods = "SHIFT|CTRL", action = act.SpawnWindow },
|
||||
{ key = "n", mods = "SUPER", action = act.SpawnWindow },
|
||||
{ key = "t", mods = "SHIFT|CTRL", action = act.SpawnTab("CurrentPaneDomain") },
|
||||
{ key = "t", mods = "SUPER", action = act.SpawnTab("CurrentPaneDomain") },
|
||||
{ key = "w", mods = "SHIFT|CTRL", action = act.CloseCurrentTab({ confirm = true }) },
|
||||
{ key = "w", mods = "SUPER", action = act.CloseCurrentTab({ confirm = true }) },
|
||||
{
|
||||
key = "u",
|
||||
mods = "SHIFT|CTRL",
|
||||
action = act.CharSelect({
|
||||
copy_on_select = true,
|
||||
copy_to = "ClipboardAndPrimarySelection",
|
||||
}),
|
||||
},
|
||||
}
|
28
dot_config/wezterm/theme.lua
Normal file
28
dot_config/wezterm/theme.lua
Normal file
|
@ -0,0 +1,28 @@
|
|||
local wezterm = require("wezterm")
|
||||
|
||||
local M = {}
|
||||
|
||||
M.scheme_for_appearance = function(appearance, theme)
|
||||
if string.match(wezterm.target_triple, "linux") then
|
||||
return theme.dark
|
||||
end
|
||||
if appearance:find("Dark") then
|
||||
return theme.dark
|
||||
else
|
||||
return theme.light
|
||||
end
|
||||
end
|
||||
|
||||
M.get_custom_colorschemes = function()
|
||||
local oledppuccin = wezterm.color.get_builtin_schemes()["Catppuccin Mocha"]
|
||||
oledppuccin.background = "#000000"
|
||||
oledppuccin.tab_bar.background = "#040404"
|
||||
oledppuccin.tab_bar.inactive_tab.bg_color = "#0f0f0f"
|
||||
oledppuccin.tab_bar.new_tab.bg_color = "#080808"
|
||||
|
||||
return {
|
||||
["OLEDppuccin"] = oledppuccin,
|
||||
}
|
||||
end
|
||||
|
||||
return M
|
|
@ -1,359 +1,21 @@
|
|||
-- vim:foldmethod=marker
|
||||
local wezterm = require("wezterm")
|
||||
local fonts = require("fonts")
|
||||
local theme = require("theme")
|
||||
require("bar")
|
||||
|
||||
-- fonts I like, with the settings I prefer {{{
|
||||
-- kept seperately from the rest of the config so that I can easily change them
|
||||
local fonts = {
|
||||
berkeley = {
|
||||
font = {
|
||||
family = "Berkeley Mono",
|
||||
weight = "Bold",
|
||||
},
|
||||
size = 16,
|
||||
},
|
||||
comic = {
|
||||
font = "Comic Code Ligatures",
|
||||
size = 18,
|
||||
},
|
||||
fantasque = {
|
||||
font = "Fantasque Sans Mono",
|
||||
size = 20,
|
||||
},
|
||||
operator = {
|
||||
font = {
|
||||
family = "Operator Mono",
|
||||
weight = "Book",
|
||||
},
|
||||
size = 18,
|
||||
},
|
||||
victor = {
|
||||
font = {
|
||||
family = "Victor Mono",
|
||||
weight = "DemiBold",
|
||||
harfbuzz_features = { "ss02=1" },
|
||||
},
|
||||
size = 18,
|
||||
},
|
||||
}
|
||||
|
||||
local function get_font(name)
|
||||
return {
|
||||
font = wezterm.font_with_fallback({
|
||||
fonts[name].font,
|
||||
"Apple Color Emoji",
|
||||
}),
|
||||
size = fonts[name].size,
|
||||
}
|
||||
end
|
||||
|
||||
-- }}}
|
||||
|
||||
-- superscript/subscript {{{
|
||||
local function numberStyle(number, script)
|
||||
local scripts = {
|
||||
superscript = {
|
||||
"⁰",
|
||||
"¹",
|
||||
"²",
|
||||
"³",
|
||||
"⁴",
|
||||
"⁵",
|
||||
"⁶",
|
||||
"⁷",
|
||||
"⁸",
|
||||
"⁹",
|
||||
},
|
||||
subscript = {
|
||||
"₀",
|
||||
"₁",
|
||||
"₂",
|
||||
"₃",
|
||||
"₄",
|
||||
"₅",
|
||||
"₆",
|
||||
"₇",
|
||||
"₈",
|
||||
"₉",
|
||||
},
|
||||
}
|
||||
local numbers = scripts[script]
|
||||
local number_string = tostring(number)
|
||||
local result = ""
|
||||
for i = 1, #number_string do
|
||||
local char = number_string:sub(i, i)
|
||||
local num = tonumber(char)
|
||||
if num then
|
||||
result = result .. numbers[num + 1]
|
||||
else
|
||||
result = result .. char
|
||||
end
|
||||
end
|
||||
return result
|
||||
end
|
||||
|
||||
-- }}}
|
||||
|
||||
-- custom tab bar {{{
|
||||
---@diagnostic disable-next-line: unused-local
|
||||
wezterm.on("format-tab-title", function(tab, tabs, panes, config, hover, max_width)
|
||||
local RIGHT_DIVIDER = utf8.char(0xe0bc)
|
||||
local colours = config.resolved_palette.tab_bar
|
||||
|
||||
local active_tab_index = 0
|
||||
for _, t in ipairs(tabs) do
|
||||
if t.is_active == true then
|
||||
active_tab_index = t.tab_index
|
||||
end
|
||||
end
|
||||
|
||||
local active_bg = config.resolved_palette.ansi[6]
|
||||
local active_fg = colours.background
|
||||
local inactive_bg = colours.inactive_tab.bg_color
|
||||
local inactive_fg = colours.inactive_tab.fg_color
|
||||
local new_tab_bg = colours.new_tab.bg_color
|
||||
|
||||
local s_bg, s_fg, e_bg, e_fg
|
||||
|
||||
-- the last tab
|
||||
if tab.tab_index == #tabs - 1 then
|
||||
if tab.is_active then
|
||||
s_bg = active_bg
|
||||
s_fg = active_fg
|
||||
e_bg = new_tab_bg
|
||||
e_fg = active_bg
|
||||
else
|
||||
s_bg = inactive_bg
|
||||
s_fg = inactive_fg
|
||||
e_bg = new_tab_bg
|
||||
e_fg = inactive_bg
|
||||
end
|
||||
elseif tab.tab_index == active_tab_index - 1 then
|
||||
s_bg = inactive_bg
|
||||
s_fg = inactive_fg
|
||||
e_bg = active_bg
|
||||
e_fg = inactive_bg
|
||||
elseif tab.is_active then
|
||||
s_bg = active_bg
|
||||
s_fg = active_fg
|
||||
e_bg = inactive_bg
|
||||
e_fg = active_bg
|
||||
else
|
||||
s_bg = inactive_bg
|
||||
s_fg = inactive_fg
|
||||
e_bg = inactive_bg
|
||||
e_fg = inactive_bg
|
||||
end
|
||||
|
||||
local muxpanes = wezterm.mux.get_tab(tab.tab_id):panes()
|
||||
local count = #muxpanes == 1 and "" or #muxpanes
|
||||
|
||||
return {
|
||||
{ Background = { Color = s_bg } },
|
||||
{ Foreground = { Color = s_fg } },
|
||||
{
|
||||
Text = " "
|
||||
.. tab.tab_index + 1
|
||||
.. ": "
|
||||
.. tab.active_pane.title
|
||||
.. numberStyle(count, "superscript")
|
||||
.. " ",
|
||||
},
|
||||
{ Background = { Color = e_bg } },
|
||||
{ Foreground = { Color = e_fg } },
|
||||
{ Text = RIGHT_DIVIDER },
|
||||
}
|
||||
end)
|
||||
-- }}}
|
||||
|
||||
-- custom status {{{
|
||||
---@diagnostic disable-next-line: unused-local
|
||||
wezterm.on("update-status", function(window, pane)
|
||||
local palette = window:effective_config().resolved_palette
|
||||
local firstTabActive = window:mux_window():tabs_with_info()[1].is_active
|
||||
|
||||
local RIGHT_DIVIDER = utf8.char(0xe0b0)
|
||||
local text = " "
|
||||
|
||||
if window:leader_is_active() then
|
||||
text = " "
|
||||
end
|
||||
|
||||
local divider_bg = firstTabActive and palette.ansi[6] or palette.tab_bar.inactive_tab.bg_color
|
||||
|
||||
window:set_left_status(wezterm.format({
|
||||
{ Foreground = { Color = palette.background } },
|
||||
{ Background = { Color = palette.ansi[5] } },
|
||||
{ Text = text },
|
||||
{ Background = { Color = divider_bg } },
|
||||
{ Foreground = { Color = palette.ansi[5] } },
|
||||
{ Text = RIGHT_DIVIDER },
|
||||
}))
|
||||
end)
|
||||
-- }}}
|
||||
|
||||
local custom = wezterm.color.get_builtin_schemes()["Catppuccin Mocha"]
|
||||
custom.background = "#000000"
|
||||
custom.tab_bar.background = "#040404"
|
||||
custom.tab_bar.inactive_tab.bg_color = "#0f0f0f"
|
||||
custom.tab_bar.new_tab.bg_color = "#080808"
|
||||
|
||||
local darkTheme = "OLEDppuccin"
|
||||
local lightTheme = "Catppuccin Latte"
|
||||
|
||||
local function update_nvim(appearance)
|
||||
local f = io.popen("nvr --serverlist")
|
||||
if f ~= nil and f:lines() ~= nil then
|
||||
local theme = appearance:find("Dark") and "dark" or "light"
|
||||
for name in f:lines() do
|
||||
io.popen("nvr --servername " .. name .. ' -c "set background=' .. theme .. '"')
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function scheme_for_appearance(appearance)
|
||||
if string.match(wezterm.target_triple, "linux") then
|
||||
return darkTheme
|
||||
end
|
||||
-- this isn't fully baked yet
|
||||
-- update_nvim(appearance)
|
||||
if appearance:find("Dark") then
|
||||
return darkTheme
|
||||
else
|
||||
return lightTheme
|
||||
end
|
||||
end
|
||||
|
||||
local font = get_font("berkeley")
|
||||
local act = wezterm.action
|
||||
local font = fonts.get_font("berkeley")
|
||||
|
||||
return {
|
||||
-- keys
|
||||
disable_default_key_bindings = true,
|
||||
-- keyboard shortcuts {{{
|
||||
leader = { key = "s", mods = "CTRL", timeout_milliseconds = 5000 },
|
||||
keys = {
|
||||
-- use 'Backslash' to split horizontally
|
||||
{
|
||||
key = "\\",
|
||||
mods = "LEADER",
|
||||
action = act({ SplitHorizontal = { domain = "CurrentPaneDomain" } }),
|
||||
},
|
||||
-- and 'Minus' to split vertically
|
||||
{
|
||||
key = "-",
|
||||
mods = "LEADER",
|
||||
action = act({ SplitVertical = { domain = "CurrentPaneDomain" } }),
|
||||
},
|
||||
-- 'hjkl' to move between panes
|
||||
{ key = "h", mods = "LEADER", action = act({ ActivatePaneDirection = "Left" }) },
|
||||
{ key = "j", mods = "LEADER", action = act({ ActivatePaneDirection = "Down" }) },
|
||||
{ key = "k", mods = "LEADER", action = act({ ActivatePaneDirection = "Up" }) },
|
||||
{ key = "l", mods = "LEADER", action = act({ ActivatePaneDirection = "Right" }) },
|
||||
-- -- Shift + 'hjkl' to resize panes
|
||||
{ key = "h", mods = "LEADER|SHIFT", action = act({ AdjustPaneSize = { "Left", 5 } }) },
|
||||
{ key = "j", mods = "LEADER|SHIFT", action = act({ AdjustPaneSize = { "Down", 5 } }) },
|
||||
{ key = "k", mods = "LEADER|SHIFT", action = act({ AdjustPaneSize = { "Up", 5 } }) },
|
||||
{ key = "l", mods = "LEADER|SHIFT", action = act({ AdjustPaneSize = { "Right", 5 } }) },
|
||||
-- numbers to navigate to tabs
|
||||
{ key = "1", mods = "LEADER", action = act({ ActivateTab = 0 }) },
|
||||
{ key = "2", mods = "LEADER", action = act({ ActivateTab = 1 }) },
|
||||
{ key = "3", mods = "LEADER", action = act({ ActivateTab = 2 }) },
|
||||
{ key = "4", mods = "LEADER", action = act({ ActivateTab = 3 }) },
|
||||
{ key = "5", mods = "LEADER", action = act({ ActivateTab = 4 }) },
|
||||
{ key = "6", mods = "LEADER", action = act({ ActivateTab = 5 }) },
|
||||
{ key = "7", mods = "LEADER", action = act({ ActivateTab = 6 }) },
|
||||
{ key = "8", mods = "LEADER", action = act({ ActivateTab = 7 }) },
|
||||
{ key = "9", mods = "LEADER", action = act({ ActivateTab = 8 }) },
|
||||
{ key = "9", mods = "LEADER", action = act({ ActivateTab = 9 }) },
|
||||
{ key = "0", mods = "LEADER", action = act({ ActivateTab = -1 }) },
|
||||
{ key = "1", mods = "SUPER", action = act({ ActivateTab = 0 }) },
|
||||
{ key = "2", mods = "SUPER", action = act({ ActivateTab = 1 }) },
|
||||
{ key = "3", mods = "SUPER", action = act({ ActivateTab = 2 }) },
|
||||
{ key = "4", mods = "SUPER", action = act({ ActivateTab = 3 }) },
|
||||
{ key = "5", mods = "SUPER", action = act({ ActivateTab = 4 }) },
|
||||
{ key = "6", mods = "SUPER", action = act({ ActivateTab = 5 }) },
|
||||
{ key = "7", mods = "SUPER", action = act({ ActivateTab = 6 }) },
|
||||
{ key = "8", mods = "SUPER", action = act({ ActivateTab = 7 }) },
|
||||
{ key = "9", mods = "SUPER", action = act({ ActivateTab = 8 }) },
|
||||
{ key = "9", mods = "SUPER", action = act({ ActivateTab = 9 }) },
|
||||
{ key = "0", mods = "SUPER", action = act({ ActivateTab = -1 }) },
|
||||
-- 'c' to create a new tab
|
||||
{ key = "c", mods = "LEADER", action = act({ SpawnTab = "CurrentPaneDomain" }) },
|
||||
-- 'x' to kill the current pane
|
||||
{ key = "x", mods = "LEADER", action = act({ CloseCurrentPane = { confirm = true } }) },
|
||||
-- 'z' to toggle the zoom for the current pane
|
||||
{ key = "z", mods = "LEADER", action = "TogglePaneZoomState" },
|
||||
-- 'v' to visually select in the current pane
|
||||
{ key = "v", mods = "LEADER", action = "ActivateCopyMode" },
|
||||
-- 'r' to rotate panes
|
||||
{ key = "r", mods = "LEADER", action = act.RotatePanes("Clockwise") },
|
||||
{ key = " ", mods = "LEADER", action = act.QuickSelect },
|
||||
{
|
||||
key = "o",
|
||||
mods = "LEADER",
|
||||
action = wezterm.action.QuickSelectArgs({
|
||||
label = "open url",
|
||||
patterns = {
|
||||
"https?://\\S+",
|
||||
},
|
||||
action = wezterm.action_callback(function(window, pane)
|
||||
local url = window:get_selection_text_for_pane(pane)
|
||||
wezterm.open_with(url)
|
||||
end),
|
||||
}),
|
||||
},
|
||||
-- copypasta
|
||||
{ key = "Enter", mods = "ALT", action = act.ToggleFullScreen },
|
||||
|
||||
{ key = "-", mods = "CTRL", action = act.DecreaseFontSize },
|
||||
{ key = "-", mods = "SUPER", action = act.DecreaseFontSize },
|
||||
{ key = "=", mods = "CTRL", action = act.IncreaseFontSize },
|
||||
{ key = "=", mods = "SUPER", action = act.IncreaseFontSize },
|
||||
{ key = "0", mods = "CTRL", action = act.ResetFontSize },
|
||||
{ key = "0", mods = "SUPER", action = act.ResetFontSize },
|
||||
|
||||
{ key = "c", mods = "SHIFT|CTRL", action = act.CopyTo("Clipboard") },
|
||||
{ key = "c", mods = "SUPER", action = act.CopyTo("Clipboard") },
|
||||
{ key = "v", mods = "SHIFT|CTRL", action = act.PasteFrom("Clipboard") },
|
||||
{ key = "v", mods = "SUPER", action = act.PasteFrom("Clipboard") },
|
||||
|
||||
{ key = "f", mods = "SHIFT|CTRL", action = act.Search("CurrentSelectionOrEmptyString") },
|
||||
{ key = "f", mods = "SUPER", action = act.Search("CurrentSelectionOrEmptyString") },
|
||||
|
||||
{ key = "l", mods = "SHIFT|CTRL", action = act.ShowDebugOverlay },
|
||||
|
||||
{ key = "p", mods = "LEADER", action = act.PaneSelect({ alphabet = "asdfghjkl;", mode = "Activate" }) },
|
||||
{ key = "P", mods = "LEADER", action = act.PaneSelect({ alphabet = "asdfghjkl;", mode = "SwapWithActive" }) },
|
||||
|
||||
{ key = "p", mods = "SUPER", action = act.PaneSelect({ alphabet = "asdfghjkl;", mode = "Activate" }) },
|
||||
{ key = "P", mods = "SUPER", action = act.PaneSelect({ alphabet = "asdfghjkl;", mode = "SwapWithActive" }) },
|
||||
{ key = "R", mods = "LEADER", action = act.ReloadConfiguration },
|
||||
|
||||
-- mostly OS defaults
|
||||
{ key = "n", mods = "SHIFT|CTRL", action = act.SpawnWindow },
|
||||
{ key = "n", mods = "SUPER", action = act.SpawnWindow },
|
||||
{ key = "t", mods = "SHIFT|CTRL", action = act.SpawnTab("CurrentPaneDomain") },
|
||||
{ key = "t", mods = "SUPER", action = act.SpawnTab("CurrentPaneDomain") },
|
||||
{ key = "w", mods = "SHIFT|CTRL", action = act.CloseCurrentTab({ confirm = true }) },
|
||||
{ key = "w", mods = "SUPER", action = act.CloseCurrentTab({ confirm = true }) },
|
||||
{
|
||||
key = "u",
|
||||
mods = "SHIFT|CTRL",
|
||||
action = act.CharSelect({
|
||||
copy_on_select = true,
|
||||
copy_to = "ClipboardAndPrimarySelection",
|
||||
}),
|
||||
},
|
||||
},
|
||||
-- }}}
|
||||
keys = require("shortcuts"),
|
||||
-- font
|
||||
font = font.font,
|
||||
font_size = font.size,
|
||||
use_fancy_tab_bar = false,
|
||||
tab_bar_at_bottom = true,
|
||||
tab_max_width = 32,
|
||||
-- window
|
||||
window_decorations = "RESIZE",
|
||||
window_background_opacity = 0.95,
|
||||
window_padding = {
|
||||
left = 0,
|
||||
right = 0,
|
||||
|
@ -362,22 +24,23 @@ return {
|
|||
},
|
||||
inactive_pane_hsb = {
|
||||
saturation = 1.0,
|
||||
brightness = 0.8,
|
||||
brightness = 0.6,
|
||||
},
|
||||
-- don't attempt to resize the window (tiling wm)
|
||||
adjust_window_size_when_changing_font_size = false,
|
||||
-- theme
|
||||
color_schemes = {
|
||||
["OLEDppuccin"] = custom,
|
||||
},
|
||||
color_scheme = scheme_for_appearance(wezterm.gui.get_appearance()),
|
||||
-- nightly only
|
||||
clean_exit_codes = { 130 },
|
||||
-- bell
|
||||
audible_bell = "Disabled",
|
||||
-- biggest mistake
|
||||
max_fps = 240,
|
||||
-- scrollbar, currently hidden by default, but better make sure
|
||||
enable_scroll_bar = false,
|
||||
color_schemes = theme.get_custom_colorschemes(),
|
||||
color_scheme = theme.scheme_for_appearance(wezterm.gui.get_appearance(), {
|
||||
dark = "OLEDppuccin",
|
||||
light = "Catppuccin Latte",
|
||||
}),
|
||||
-- tab bar
|
||||
hide_tab_bar_if_only_one_tab = false,
|
||||
tab_bar_at_bottom = true,
|
||||
tab_max_width = 32,
|
||||
use_fancy_tab_bar = false,
|
||||
-- etc.
|
||||
adjust_window_size_when_changing_font_size = false,
|
||||
audible_bell = "Disabled",
|
||||
clean_exit_codes = { 130 },
|
||||
default_cursor_style = "BlinkingBar",
|
||||
enable_scroll_bar = false,
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue