255 lines
6.8 KiB
Lua
255 lines
6.8 KiB
Lua
-- Ctrl+Shift+R to force config reload
|
|
-- Ctrl+Shift+L to enter WezTerm REPL/Console
|
|
-- Ctrl+Shift+P to bring up WezTerm command palette
|
|
-- wezterm.log_info("debug")
|
|
|
|
local wezterm = require("wezterm")
|
|
local config = wezterm.config_builder()
|
|
|
|
config.initial_cols = 150
|
|
config.initial_rows = 48
|
|
|
|
config.hide_tab_bar_if_only_one_tab = true
|
|
config.tab_bar_at_bottom = true
|
|
config.use_fancy_tab_bar = false
|
|
config.show_new_tab_button_in_tab_bar = true
|
|
config.tab_max_width = 32
|
|
config.enable_scroll_bar = true
|
|
config.window_background_opacity = 0.8
|
|
config.window_padding = {
|
|
left = 0,
|
|
right = 0,
|
|
top = 0,
|
|
bottom = 0,
|
|
}
|
|
config.use_resize_increments = true
|
|
|
|
config.colors = {
|
|
foreground = "#ffffff",
|
|
background = "#000000",
|
|
cursor_fg = "#000000",
|
|
cursor_bg = "#ffffff",
|
|
cursor_border = "#ffffff",
|
|
ansi = {
|
|
"#171421", -- black
|
|
"#c01c28", -- red
|
|
"#26a269", -- green
|
|
"#a2734c", -- yellow
|
|
"#12488b", -- blue
|
|
"#a347ba", -- magenta
|
|
"#2aa1b3", -- cyan
|
|
"#d0cfcc", -- white
|
|
},
|
|
brights = {
|
|
"#5e5c64", -- black
|
|
"#f66151", -- red
|
|
"#33d17a", -- green
|
|
"#e9ad0c", -- yellow
|
|
"#2a7bde", -- blue
|
|
"#c061cb", -- magenta
|
|
"#33c7de", -- cyan
|
|
"#ffffff", -- white
|
|
},
|
|
tab_bar = {
|
|
active_tab = {
|
|
fg_color = "#33e7de",
|
|
bg_color = "#000000",
|
|
},
|
|
},
|
|
scrollbar_thumb = "#888888",
|
|
}
|
|
-- config.color_scheme = "Gnometerm (terminal.sexy)"
|
|
|
|
config.font = wezterm.font({
|
|
family = "Cascadia Mono",
|
|
harfbuzz_features = { "calt=0", "clig=0", "liga=0" },
|
|
})
|
|
config.font_size = 12
|
|
config.line_height = 1.0
|
|
config.freetype_load_target = "Light"
|
|
|
|
config.keys = {
|
|
{
|
|
key = "V",
|
|
mods = "CTRL|SHIFT|ALT",
|
|
action = wezterm.action.SplitVertical({ domain = "CurrentPaneDomain" }),
|
|
},
|
|
{
|
|
key = "H",
|
|
mods = "CTRL|SHIFT|ALT",
|
|
action = wezterm.action.SplitHorizontal({ domain = "CurrentPaneDomain" }),
|
|
},
|
|
{
|
|
key = "Q",
|
|
mods = "CTRL|SHIFT|ALT",
|
|
action = wezterm.action.CloseCurrentPane({ confirm = true }),
|
|
},
|
|
}
|
|
|
|
--------------------------------------------------------------------------------
|
|
-- borrowed from: https://github.com/protiumx/.dotfiles/blob/main/stow/wezterm/.config/wezterm/wezterm.lua
|
|
|
|
-- wezterm.nerdfonts reference: https://wezfurlong.org/wezterm/config/lua/wezterm/nerdfonts.html
|
|
local process_icons = {
|
|
["bash"] = wezterm.nerdfonts.dev_terminal,
|
|
["btop"] = wezterm.nerdfonts.md_chart_bar,
|
|
["cargo"] = wezterm.nerdfonts.dev_rust,
|
|
["clj"] = wezterm.nerdfonts.dev_clojure,
|
|
["clojure"] = wezterm.nerdfonts.dev_clojure,
|
|
["curl"] = wezterm.nerdfonts.mdi_flattr,
|
|
["docker"] = wezterm.nerdfonts.linux_docker,
|
|
["docker-compose"] = wezterm.nerdfonts.linux_docker,
|
|
["git"] = wezterm.nerdfonts.dev_git,
|
|
["go"] = wezterm.nerdfonts.seti_go,
|
|
["htop"] = wezterm.nerdfonts.md_chart_bar,
|
|
["java"] = wezterm.nerdfonts.dev_java,
|
|
["kubectl"] = wezterm.nerdfonts.linux_docker,
|
|
["lein"] = wezterm.nerdfonts.dev_clojure,
|
|
["less"] = wezterm.nerdfonts.md_less_than,
|
|
["lua"] = wezterm.nerdfonts.seti_lua,
|
|
["make"] = wezterm.nerdfonts.seti_makefile,
|
|
["man"] = wezterm.nerdfonts.fa_book,
|
|
["nano"] = wezterm.nerdfonts.md_file_edit,
|
|
["node"] = wezterm.nerdfonts.mdi_hexagon,
|
|
["nvim"] = wezterm.nerdfonts.custom_neovim,
|
|
["perl"] = wezterm.nerdfonts.seti_perl,
|
|
["psql"] = "",
|
|
["python3"] = "",
|
|
["Python"] = "",
|
|
["ruby"] = wezterm.nerdfonts.cod_ruby,
|
|
["ssh"] = wezterm.nerdfonts.md_server,
|
|
["ssh-add"] = wezterm.nerdfonts.md_server,
|
|
["stern"] = wezterm.nerdfonts.linux_docker,
|
|
["sudo"] = wezterm.nerdfonts.fa_hashtag,
|
|
["vim"] = wezterm.nerdfonts.dev_vim,
|
|
["wget"] = wezterm.nerdfonts.mdi_arrow_down_box,
|
|
}
|
|
|
|
local process_use_suggested_title = {
|
|
["ssh"] = true,
|
|
}
|
|
|
|
local function get_suggested_tab_title(tab_info)
|
|
local title = tab_info.tab_title
|
|
if title and #title > 0 then
|
|
return title
|
|
end
|
|
return tab_info.active_pane.title
|
|
end
|
|
|
|
local function get_current_working_dir(tab)
|
|
local current_dir = tab.active_pane and tab.active_pane.current_working_dir or { file_path = "" }
|
|
local HOME_DIR = os.getenv("HOME")
|
|
|
|
return current_dir.file_path == HOME_DIR and "~" or string.gsub(current_dir.file_path, "(.*[/\\])(.*)", "%2")
|
|
end
|
|
|
|
local function get_process(tab)
|
|
if not tab.active_pane or tab.active_pane.foreground_process_name == "" then
|
|
return nil
|
|
end
|
|
|
|
local process_name = string.gsub(tab.active_pane.foreground_process_name, "(.*[/\\])(.*)", "%2")
|
|
if string.find(process_name, "kubectl") then
|
|
process_name = "kubectl"
|
|
end
|
|
if string.find(process_name, "python3") then
|
|
process_name = "python3"
|
|
end
|
|
|
|
return {
|
|
Icon = process_icons[process_name] or string.format("[%s]", process_name),
|
|
Process = process_name,
|
|
}
|
|
end
|
|
|
|
local SOLID_LEFT_ARROW = wezterm.nerdfonts.pl_right_hard_divider
|
|
local SOLID_RIGHT_ARROW = wezterm.nerdfonts.pl_left_hard_divider
|
|
|
|
wezterm.on("format-tab-title", function(tab, tabs, panes, config, hover, max_width)
|
|
local has_unseen_output = false
|
|
if not tab.is_active then
|
|
for _, pane in ipairs(tab.panes) do
|
|
if pane.has_unseen_output then
|
|
has_unseen_output = true
|
|
break
|
|
end
|
|
end
|
|
end
|
|
|
|
local cwd = wezterm.format({
|
|
{ Text = get_current_working_dir(tab) },
|
|
})
|
|
|
|
local process = get_process(tab)
|
|
|
|
local title
|
|
if process then
|
|
local icon = process.Icon or string.format("[%s]", process.Process)
|
|
if process_use_suggested_title[process.Process] then
|
|
title = string.format(" %s %s ", icon, get_suggested_tab_title(tab))
|
|
else
|
|
title = string.format(" %s (%s) ", icon, cwd)
|
|
end
|
|
else
|
|
title = string.format(" %s %s ", wezterm.nerdfonts.cod_terminal_bash, get_suggested_tab_title(tab))
|
|
end
|
|
|
|
if has_unseen_output then
|
|
return {
|
|
{ Foreground = { Color = "#ffffff" } },
|
|
{ Text = title },
|
|
}
|
|
end
|
|
|
|
return {
|
|
{ Text = title },
|
|
}
|
|
end)
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
local act = wezterm.action
|
|
|
|
-- Some stuff below borrowed from comments here: https://github.com/wez/wezterm/issues/119
|
|
config.mouse_bindings = {
|
|
{
|
|
event = { Up = { streak = 1, button = "Left" } },
|
|
mods = "NONE",
|
|
action = act.CompleteSelection("PrimarySelection"),
|
|
},
|
|
|
|
-- ctrl+click to open urls, etc.
|
|
{
|
|
event = { Up = { streak = 1, button = "Left" } },
|
|
mods = "CTRL",
|
|
action = act.OpenLinkAtMouseCursor,
|
|
},
|
|
-- prevents weird behaviours from occuring given the about ctrl+click binding
|
|
{
|
|
event = { Down = { streak = 1, button = "Left" } },
|
|
mods = "CTRL",
|
|
action = act.Nop,
|
|
},
|
|
}
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
-- copied from https://github.com/wez/wezterm/issues/4331
|
|
-- however it has some issues, seems to reset color theme to default?
|
|
|
|
-- wezterm.on("update-status", function(window, pane)
|
|
-- local overrides = window:get_config_overrides() or {}
|
|
-- if not overrides.colors then
|
|
-- overrides.colors = {}
|
|
-- end
|
|
-- if pane:is_alt_screen_active() then
|
|
-- overrides.colors.scrollbar_thumb = "transparent"
|
|
-- else
|
|
-- overrides.colors.scrollbar_thumb = nil
|
|
-- end
|
|
-- window:set_config_overrides(overrides)
|
|
-- end)
|
|
|
|
return config
|