dotfiles/tools/wezterm/wezterm.lua
2025-01-15 15:13:02 +00:00

278 lines
6.4 KiB
Lua

-- $DOTFILES/tools/wezterm/wezterm.lua
-- Date: 2024-12-22
-- Author: js0ny
--#region Import & Setup
local wezterm = require("wezterm")
local action = wezterm.action
local config = {}
--#endregion
--#region Helper
--[[
local function detect_os()
local detected_os = ""
if package.config:sub(1, 1) == "\\" then
-- Windows
detected_os = "Windows"
elseif package.config:sub(1, 1) == "/" then
-- Unix-like (Linux, macOS, etc.)
if os.getenv("HOME") then
detected_os = "Unix-like"
-- You can differentiate further by checking for macOS or Linux if needed
if os.getenv("XDG_SESSION_TYPE") then
-- Likely Linux
detected_os = "Linux"
elseif os.execute("uname -s | grep -i darwin") == 0 then
-- macOS
detected_os = "macOS"
end
end
end
return detected_os
end
--]]
--[[
wezterm.on("text-selection-callback", function(window, pane)
local text = window:get_selection_text_for_pane(pane)
end)
--]]
local function detect_os()
local os_type = ""
if wezterm.target_triple == "x86_64-pc-windows-msvc" then
os_type = "Windows"
elseif wezterm.target_triple == "x86_64-unknown-linux-gnu" then
os_type = "Linux"
elseif wezterm.target_triple == "aarch64-apple-darwin" then
os_type = "macOS"
end
return os_type
end
-- OS light/dark theme detection
local function detect_theme() end
--#endregion
--#region Constant
local os_type = detect_os()
--#endregion
--#region Appearance
-- Font and color scheme
-- config.font = 'FiraCode Nerd Font'
config.max_fps = 120
config.font = wezterm.font({
family = "CaskaydiaCove Nerd Font",
})
config.color_scheme = "Catppuccin Frappe"
config.font_size = 12.0
config.front_end = "WebGpu"
config.webgpu_power_preference = "HighPerformance"
if os_type == "Windows" then
config.window_background_opacity = 0.7 -- Not working under WebGpu
config.win32_system_backdrop = "Mica"
end
-- Tab appearance
config.hide_tab_bar_if_only_one_tab = true
config.tab_bar_at_bottom = true
-- Cursor
-- config.animation_fps = 120
-- config.cursor_blink_ease_in = 'EaseOut'
-- config.cursor_blink_ease_out = 'EaseOut'
-- config.default_cursor_style = 'BlinkingBlock'
-- config.cursor_blink_rate = 650
-- Visual Bell
config.visual_bell = {
fade_in_function = "EaseIn",
fade_in_duration_ms = 250,
fade_out_function = "EaseOut",
fade_out_duration_ms = 250,
target = "CursorColor",
}
--#endregion
--#region Keybindings
config.leader = { key = "q", mods = "CTRL" }
config.keys = {
{
key = "q",
mods = "LEADER",
action = action.SendKey({ key = "q", mods = "CTRL" }),
},
-- Windows Management
{ -- leader keys
key = "|",
mods = "LEADER|SHIFT",
action = action.SplitHorizontal({ domain = "CurrentPaneDomain" }),
},
{
key = "-",
mods = "LEADER",
action = action.SplitVertical({ domain = "CurrentPaneDomain" }),
},
{
key = "h",
mods = "LEADER",
action = action.ActivatePaneDirection("Left"),
},
{
key = "n",
mods = "LEADER",
action = action.ActivatePaneDirection("Down"),
},
{
key = "e",
mods = "LEADER",
action = action.ActivatePaneDirection("Up"),
},
{
key = "i",
mods = "LEADER",
action = action.ActivatePaneDirection("Right"),
},
{
key = "H",
mods = "LEADER",
action = action.AdjustPaneSize({ "Left", 5 }),
},
{
key = "N",
mods = "LEADER",
action = action.AdjustPaneSize({ "Down", 5 }),
},
{
key = "E",
mods = "LEADER",
action = action.AdjustPaneSize({ "Up", 5 }),
},
{
key = "I",
mods = "LEADER",
action = action.AdjustPaneSize({ "Right", 5 }),
},
{
key = "/",
mods = "LEADER",
action = action.Search({ Regex = "" }),
},
{
key = "?",
mods = "LEADER|SHIFT",
action = action.Search({ CaseSensitiveString = "" }),
},
{
key = ";",
mods = "LEADER",
action = action.ShowLauncher,
},
{
key = ":",
mods = "LEADER|SHIFT",
action = action.ActivateCommandPalette,
},
{
key = "W",
mods = "CTRL",
action = action.CloseCurrentPane({ confirm = true }),
},
{ -- ^C to copy if selection is active, otherwise send signal
-- https://wezfurlong.org/wezterm/config/lua/keyassignment/ClearSelection.html?h=selection
key = "c",
mods = "CTRL",
action = wezterm.action_callback(function(window, pane)
local has_selection = window:get_selection_text_for_pane(pane) ~= ""
if has_selection then
window:perform_action(action.CopyTo("ClipboardAndPrimarySelection"), pane)
window:perform_action(action.ClearSelection, pane)
else
window:perform_action(action.SendKey({ key = "c", mods = "CTRL" }), pane)
end
end),
},
}
config.mouse_bindings = {
{
event = { Up = { streak = 1, button = "Left" } },
mods = "CTRL",
action = action.OpenLinkAtMouseCursor,
},
{
event = { Up = { streak = 1, button = "Left" } },
mods = "SUPER",
action = action.OpenLinkAtMouseCursor,
},
}
--#endregion
--#region Environment
config.set_environment_variables = {
}
--#endregion
--#region Launching
if os_type == "Windows" then
config.default_prog = { "pwsh.exe", "-NoLogo", "-NoProfileLoadTime" }
config.launch_menu = {
{
label = "Local - PowerShell",
args = { "pwsh.exe", "-NoLogo", "-NoProfileLoadTime" },
},
{
label = "Local - PowerShell Administator",
args = { "sudo.exe", "pwsh.exe", "-NoLogo", "-NoProfileLoadTime" },
},
{
label = "WSL1 - Arch",
args = { "wsl.exe", "-d", "Arch" },
},
{
label = "WSL2 - kali-linux",
args = { "wsl.exe", "-d", "kali-linux" },
},
{
label = "Local - NuShell",
args = { "nu" },
},
{
label = "Local - Windows PowerShell",
args = { "powershell.exe" },
},
{
label = "Local - Command Prompt",
args = { "cmd.exe" },
},
{
label = "WSL1 - Arch Zsh",
args = { "wsl.exe", "-d", "Arch", "zsh" },
},
}
elseif os_type == "macOS" then
config.default_prog = { "/opt/homebrew/bin/fish", "-l"}
else
config.default_prog = { "fish" }
config.launch_menu = {
{
label = "Local - Fish",
args = { "fish", "-l" },
},
{
label = "Local - Zsh",
args = { "zsh", "-l" },
},
{
label = "Local - PowerShell",
args = { "pwsh", "-NoLogo", "-NoProfileLoadTime", "-Login" },
},
{
label = "Local - NuShell",
args = { "nu", "-l" },
},
}
end
--#endregion
return config