Add dev-mode option
- Clean up multi-platform support - Add dev-mode option to load local plugins automatically
This commit is contained in:
-233
@@ -1,233 +0,0 @@
|
|||||||
--- Battery module for Wezterm.
|
|
||||||
---@module "battery"
|
|
||||||
|
|
||||||
---@class M The battery module
|
|
||||||
---@field invert boolean Whether to invert colors
|
|
||||||
---@function get_batteries() Get the list of batteries
|
|
||||||
---@function get_battery_icons() Get the battery icons
|
|
||||||
---@function get_battery_stats() Get the battery stats
|
|
||||||
|
|
||||||
local M = {}
|
|
||||||
|
|
||||||
local wezterm = require("wezterm")
|
|
||||||
|
|
||||||
--- Whether to invert the colors for light backgrounds.
|
|
||||||
M.invert = false
|
|
||||||
|
|
||||||
--- Converts a hex color to its opposite brightness.
|
|
||||||
---@param hex_color string The hex color in the format "#RRGGBB".
|
|
||||||
---@param invert? boolean Whether to invert the colors (optional).
|
|
||||||
---@return string hex_color The hex color with the opposite brightness.
|
|
||||||
local function invert_color_brightness(hex_color, invert)
|
|
||||||
if invert == nil then
|
|
||||||
invert = M.invert
|
|
||||||
end
|
|
||||||
if invert == false then
|
|
||||||
return hex_color
|
|
||||||
end
|
|
||||||
-- Validate the input hex_color format.
|
|
||||||
if not hex_color:match("^#%x%x%x%x%x%x$") then
|
|
||||||
error("Invalid hex color format. Use #RRGGBB.")
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Convert hex to RGB.
|
|
||||||
local r = tonumber(hex_color:sub(2, 3), 16)
|
|
||||||
local g = tonumber(hex_color:sub(4, 5), 16)
|
|
||||||
local b = tonumber(hex_color:sub(6, 7), 16)
|
|
||||||
|
|
||||||
-- Validate RGB values.
|
|
||||||
if not (r and g and b and r >= 0 and r <= 255 and g >= 0 and g <= 255 and b >= 0 and b <= 255) then
|
|
||||||
error("Invalid RGB values extracted from hex color.")
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Calculate brightness.
|
|
||||||
local brightness = (r * 0.299 + g * 0.587 + b * 0.114)
|
|
||||||
|
|
||||||
-- Invert color based on brightness.
|
|
||||||
if brightness < 128 then
|
|
||||||
-- Dark color: make it lighter.
|
|
||||||
r = math.min(r + (255 - r) * 0.33, 255)
|
|
||||||
g = math.min(g + (255 - g) * 0.33, 255)
|
|
||||||
b = math.min(b + (255 - b) * 0.33, 255)
|
|
||||||
else
|
|
||||||
-- Light color: make it darker.
|
|
||||||
r = math.max(r - r * 0.66, 0)
|
|
||||||
g = math.max(g - g * 0.66, 0)
|
|
||||||
b = math.max(b - b * 0.66, 0)
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Convert RGB back to hex.
|
|
||||||
return string.format("#%02x%02x%02x", math.floor(r + 0.5), math.floor(g + 0.5), math.floor(b + 0.5))
|
|
||||||
end
|
|
||||||
|
|
||||||
--- RGBColor class representing an RGB color.
|
|
||||||
---@class RGBColor
|
|
||||||
---@field r number Red value (0-255).
|
|
||||||
---@field g number Green value (0-255).
|
|
||||||
---@field b number Blue value (0-255).
|
|
||||||
|
|
||||||
--- Blends two RGB colors together based on a blend factor.
|
|
||||||
---@param color1 RGBColor The first RGB color.
|
|
||||||
---@param color2 RGBColor The second RGB color.
|
|
||||||
---@param factor number The blend factor (between 0 and 1).
|
|
||||||
---@return RGBColor color The blended RGB color.
|
|
||||||
local function blend_color(color1, color2, factor)
|
|
||||||
return {
|
|
||||||
r = color1.r + (color2.r - color1.r) * factor,
|
|
||||||
g = color1.g + (color2.g - color1.g) * factor,
|
|
||||||
b = color1.b + (color2.b - color1.b) * factor,
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
--- Rounds a decimal value to the nearest integer.
|
|
||||||
---@param val number The value to round.
|
|
||||||
---@return integer The rounded value.
|
|
||||||
local function round(val)
|
|
||||||
return math.floor(val + 0.5)
|
|
||||||
end
|
|
||||||
|
|
||||||
--- Converts an RGB color to a hex string.
|
|
||||||
---@param color RGBColor The RGB color to convert.
|
|
||||||
---@return string hex_color The hex string representation of the color.
|
|
||||||
local function rgb_to_hex(color)
|
|
||||||
return string.format("#%02x%02x%02x", round(color.r), round(color.g), round(color.b))
|
|
||||||
end
|
|
||||||
|
|
||||||
--- Gets the color representing a battery charge level.
|
|
||||||
---@param charge number The charge level (0.0 to 1.0).
|
|
||||||
---@return string hex_color The corresponding hex color.
|
|
||||||
local function get_charge_color(charge)
|
|
||||||
local red = { r = 255, g = 0, b = 0 }
|
|
||||||
local yellow = { r = 255, g = 255, b = 0 }
|
|
||||||
local green = { r = 0, g = 255, b = 0 }
|
|
||||||
local color = {}
|
|
||||||
|
|
||||||
if charge <= 0.5 then
|
|
||||||
local factor = charge / 0.5
|
|
||||||
color = blend_color(red, yellow, factor)
|
|
||||||
else
|
|
||||||
local factor = (charge - 0.5) / 0.5
|
|
||||||
color = blend_color(yellow, green, factor)
|
|
||||||
end
|
|
||||||
|
|
||||||
return invert_color_brightness(rgb_to_hex(color))
|
|
||||||
end
|
|
||||||
|
|
||||||
--- BatteryComponent class representing battery information.
|
|
||||||
---@class BatteryComponent
|
|
||||||
---@field battery string The battery icon and percentage. (e.g. " 100%")
|
|
||||||
---@field remaining fun(): string The remaining time as a string. (e.g. "10:00")
|
|
||||||
---@field icon string The icon representing the battery status. (e.g. " ")
|
|
||||||
---@field percent number The battery percentage. (0.0 to 1.0)
|
|
||||||
---@field time number The remaining time in minutes.
|
|
||||||
---@field condition string The battery condition ("Full", "Empty", "Charging", "Discharging", "Unknown").
|
|
||||||
|
|
||||||
--- Returns battery components for each battery.
|
|
||||||
--- If no batteries are detected, an empty table is returned.
|
|
||||||
---@return BatteryComponent[] batteries A list of battery components.
|
|
||||||
---@see BatteryComponent
|
|
||||||
function M.get_batteries()
|
|
||||||
local batteries = {}
|
|
||||||
local battery_info = wezterm.battery_info()
|
|
||||||
|
|
||||||
local icons_charging =
|
|
||||||
{ " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " " }
|
|
||||||
local icons_discharging =
|
|
||||||
{ " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " " }
|
|
||||||
|
|
||||||
for _, b in ipairs(battery_info) do
|
|
||||||
local condition = b.state
|
|
||||||
local charge = b.state_of_charge
|
|
||||||
local remaining = 0
|
|
||||||
local percent = charge * 100
|
|
||||||
local icon = -- Default battery state is Unknown
|
|
||||||
wezterm.format({ { Foreground = { Color = invert_color_brightness("#232634") } }, { Text = " " } })
|
|
||||||
|
|
||||||
if condition == "Full" then -- Battery is 100% charged
|
|
||||||
icon =
|
|
||||||
wezterm.format({ { Foreground = { Color = invert_color_brightness("#93e398") } }, { Text = " " } })
|
|
||||||
elseif condition == "Empty" then -- Battery is 0% charged
|
|
||||||
icon =
|
|
||||||
wezterm.format({ { Foreground = { Color = invert_color_brightness("#f37ca0") } }, { Text = " " } })
|
|
||||||
elseif condition == "Charging" then -- Battery is charging
|
|
||||||
remaining = b.time_to_full
|
|
||||||
icon = wezterm.format({
|
|
||||||
{ Foreground = { Color = get_charge_color(charge) } },
|
|
||||||
{ Text = icons_charging[math.min(math.ceil(charge * 10), 11)] },
|
|
||||||
})
|
|
||||||
elseif condition == "Discharging" then -- Battery is discharging
|
|
||||||
remaining = b.time_to_empty
|
|
||||||
icon = wezterm.format({
|
|
||||||
{ Foreground = { Color = get_charge_color(charge) } },
|
|
||||||
{ Text = icons_discharging[math.min(math.ceil(charge * 10), 11)] },
|
|
||||||
})
|
|
||||||
elseif condition == "Unknown" and charge > 0.5 then -- Battery is (probably) at charge limit
|
|
||||||
icon =
|
|
||||||
wezterm.format({ { Foreground = { Color = invert_color_brightness("#93e398") } }, { Text = " " } })
|
|
||||||
end
|
|
||||||
|
|
||||||
table.insert(batteries, {
|
|
||||||
battery = icon .. string.format("%.2f%%", percent),
|
|
||||||
remaining = function()
|
|
||||||
if remaining and remaining > 0 then
|
|
||||||
return string.format("%d:%02d", math.floor(remaining / 60), math.floor(remaining % 60))
|
|
||||||
else
|
|
||||||
return ""
|
|
||||||
end
|
|
||||||
end,
|
|
||||||
icon = icon,
|
|
||||||
percent = percent,
|
|
||||||
time = remaining,
|
|
||||||
condition = condition,
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
return batteries
|
|
||||||
end
|
|
||||||
|
|
||||||
--- Returns battery icons for all batteries.
|
|
||||||
--- If no batteries are detected, an empty string is returned.
|
|
||||||
---@return string battery_icons A formatted string containing the battery icons.
|
|
||||||
function M.get_battery_icons()
|
|
||||||
local battery_states = M.get_batteries()
|
|
||||||
|
|
||||||
if #battery_states == 0 then
|
|
||||||
return ""
|
|
||||||
end
|
|
||||||
|
|
||||||
local result = {}
|
|
||||||
for _, state in ipairs(battery_states) do
|
|
||||||
table.insert(result, state.icon)
|
|
||||||
end
|
|
||||||
|
|
||||||
return table.concat(result, " | ")
|
|
||||||
end
|
|
||||||
|
|
||||||
--- Returns battery statistics for all batteries.
|
|
||||||
--- If no batteries are detected, an empty string is returned.
|
|
||||||
---@return string battery_stats A formatted string containing the battery stats.
|
|
||||||
function M.get_battery_stats()
|
|
||||||
local battery_states = M.get_batteries()
|
|
||||||
|
|
||||||
if #battery_states == 0 then
|
|
||||||
return ""
|
|
||||||
end
|
|
||||||
|
|
||||||
local result = {}
|
|
||||||
for _, state in ipairs(battery_states) do
|
|
||||||
local color = get_charge_color(state.percent / 100)
|
|
||||||
local percent = wezterm.format({
|
|
||||||
{ Foreground = { Color = color } },
|
|
||||||
{ Text = string.format(" (%.2f%%)", state.percent) },
|
|
||||||
})
|
|
||||||
local remaining_time = wezterm.format({
|
|
||||||
{ Foreground = { Color = color } },
|
|
||||||
{ Text = state.remaining() },
|
|
||||||
})
|
|
||||||
table.insert(result, string.format("%s%s", state.icon, percent) .. remaining_time)
|
|
||||||
end
|
|
||||||
|
|
||||||
return table.concat(result, " | ")
|
|
||||||
end
|
|
||||||
|
|
||||||
return M
|
|
||||||
@@ -1,57 +0,0 @@
|
|||||||
-- ╭─────────────────────────────────────────────────────────╮
|
|
||||||
-- │ COLORS │
|
|
||||||
-- ╰─────────────────────────────────────────────────────────╯
|
|
||||||
|
|
||||||
local cur_hour = WEZTERM.time.now():format("%H")
|
|
||||||
|
|
||||||
local hour_angle = require("funcs").get_hour_angle(cur_hour)
|
|
||||||
|
|
||||||
return {
|
|
||||||
-- Color Scheme
|
|
||||||
color_scheme = "Catppuccin Mocha",
|
|
||||||
-- Tab Bar Colors
|
|
||||||
colors = {
|
|
||||||
-- Compose Cursor
|
|
||||||
compose_cursor = "#a5e3a0",
|
|
||||||
-- Visual Bell
|
|
||||||
visual_bell = "#E78284",
|
|
||||||
},
|
|
||||||
-- Command Palette Colors
|
|
||||||
command_palette_bg_color = "#232634", -- Command Palette Background
|
|
||||||
command_palette_fg_color = "#C6D0F5", -- Command Palette Foreground
|
|
||||||
-- Titlebar and Frame Colors
|
|
||||||
window_frame = {
|
|
||||||
active_titlebar_bg = "#232634",
|
|
||||||
inactive_titlebar_bg = "#303446",
|
|
||||||
inactive_titlebar_fg = "#484D69",
|
|
||||||
active_titlebar_fg = "#C6D0F5",
|
|
||||||
inactive_titlebar_border_bottom = "#3b3052",
|
|
||||||
active_titlebar_border_bottom = "#3b3052",
|
|
||||||
button_fg = "#C6D0F5",
|
|
||||||
button_bg = "#3b3052",
|
|
||||||
button_hover_fg = "#C6D0F5",
|
|
||||||
button_hover_bg = "#2b2042",
|
|
||||||
},
|
|
||||||
-- Inactive Pane Filter
|
|
||||||
inactive_pane_hsb = {
|
|
||||||
saturation = 1.0,
|
|
||||||
brightness = 0.5,
|
|
||||||
},
|
|
||||||
window_background_gradient = {
|
|
||||||
orientation = {
|
|
||||||
Linear = {
|
|
||||||
angle = hour_angle,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
colors = {
|
|
||||||
-- "#303446",
|
|
||||||
"#24273a",
|
|
||||||
"#1e1e2e",
|
|
||||||
},
|
|
||||||
interpolation = "CatmullRom",
|
|
||||||
blend = "Oklab",
|
|
||||||
noise = 128,
|
|
||||||
segment_size = 7,
|
|
||||||
segment_smoothness = 1.0,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
@@ -1,29 +0,0 @@
|
|||||||
-- ╭─────────────────────────────────────────────────────────╮
|
|
||||||
-- │ FONTS │
|
|
||||||
-- ╰─────────────────────────────────────────────────────────╯
|
|
||||||
|
|
||||||
local types = require("types")
|
|
||||||
|
|
||||||
return {
|
|
||||||
-- Terminal Font Size
|
|
||||||
font_size = 12.0,
|
|
||||||
-- Terminal Font
|
|
||||||
font = WEZTERM.font_with_fallback(types.rootiest_font),
|
|
||||||
-- Tab Font
|
|
||||||
window_frame = {
|
|
||||||
font = WEZTERM.font(types.win_font),
|
|
||||||
-- Tab Font Size
|
|
||||||
font_size = 10,
|
|
||||||
},
|
|
||||||
-- Cell Sizing
|
|
||||||
cell_width = 1.0,
|
|
||||||
line_height = 1.0,
|
|
||||||
-- ANSI Colors
|
|
||||||
bold_brightens_ansi_colors = "BrightAndBold",
|
|
||||||
-- FreeType Load Flags
|
|
||||||
freetype_load_flags = "DEFAULT",
|
|
||||||
-- FreeType Load Target
|
|
||||||
freetype_load_target = "Normal",
|
|
||||||
-- Default Cursor Shape
|
|
||||||
default_cursor_style = "BlinkingBar",
|
|
||||||
}
|
|
||||||
-223
@@ -1,223 +0,0 @@
|
|||||||
-- ╭─────────────────────────────────────────────────────────╮
|
|
||||||
-- │ KEYS │
|
|
||||||
-- ╰─────────────────────────────────────────────────────────╯
|
|
||||||
|
|
||||||
-- Define objects
|
|
||||||
local act = WEZTERM.action
|
|
||||||
|
|
||||||
return {
|
|
||||||
-- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Leader key ━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
||||||
leader = { key = " ", mods = "CTRL", timeout_milliseconds = 1500 },
|
|
||||||
-- ━━━━━━━━━━━━━━━━━━━━━━━━━ Global Key Mappings ━━━━━━━━━━━━━━━━━━━━━
|
|
||||||
keys = {
|
|
||||||
-- Close window
|
|
||||||
{ key = "q", mods = "LEADER|SHIFT|CTRL", action = act.QuitApplication },
|
|
||||||
-- Split pane
|
|
||||||
{ key = "|", mods = "LEADER|SHIFT", action = act.SplitHorizontal({ domain = "CurrentPaneDomain" }) },
|
|
||||||
{ key = "_", mods = "LEADER|SHIFT", action = act.SplitVertical({ domain = "CurrentPaneDomain" }) },
|
|
||||||
|
|
||||||
-- Move pane
|
|
||||||
{ key = "h", mods = "SHIFT|CTRL", action = act.ActivatePaneDirection("Left") },
|
|
||||||
{ key = "j", mods = "SHIFT|CTRL", action = act.ActivatePaneDirection("Down") },
|
|
||||||
{ key = "k", mods = "SHIFT|CTRL", action = act.ActivatePaneDirection("Up") },
|
|
||||||
{ key = "l", mods = "SHIFT|CTRL", action = act.ActivatePaneDirection("Right") },
|
|
||||||
-- Move pane to new window
|
|
||||||
{
|
|
||||||
key = "!",
|
|
||||||
mods = "LEADER | SHIFT",
|
|
||||||
action = WEZTERM.action_callback(function(_, pane)
|
|
||||||
pane:move_to_new_window()
|
|
||||||
end),
|
|
||||||
},
|
|
||||||
|
|
||||||
-- Toggle pane zoom
|
|
||||||
{
|
|
||||||
key = "z",
|
|
||||||
mods = "SHIFT|CTRL",
|
|
||||||
action = act.TogglePaneZoomState,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
key = "z",
|
|
||||||
mods = "LEADER",
|
|
||||||
action = act.TogglePaneZoomState,
|
|
||||||
},
|
|
||||||
|
|
||||||
-- Close pane
|
|
||||||
{ key = "q", mods = "LEADER", action = act.CloseCurrentPane({ confirm = true }) },
|
|
||||||
{ key = "q", mods = "SHIFT|CTRL", action = act.CloseCurrentPane({ confirm = true }) },
|
|
||||||
|
|
||||||
-- Resize pane
|
|
||||||
{ key = "h", mods = "ALT", action = act.AdjustPaneSize({ "Left", 1 }) },
|
|
||||||
{ key = "j", mods = "ALT", action = act.AdjustPaneSize({ "Down", 1 }) },
|
|
||||||
{ key = "k", mods = "ALT", action = act.AdjustPaneSize({ "Up", 1 }) },
|
|
||||||
{ key = "l", mods = "ALT", action = act.AdjustPaneSize({ "Right", 1 }) },
|
|
||||||
-- Resize pane mode
|
|
||||||
{ key = "r", mods = "LEADER", action = act.ActivateKeyTable({ name = "resize_mode", one_shot = false }) },
|
|
||||||
{ key = "p", mods = "LEADER", action = act.ActivateKeyTable({ name = "window_mode", one_shot = false }) },
|
|
||||||
|
|
||||||
-- Tab Manipulation
|
|
||||||
{ key = "PageUp", mods = "CTRL", action = act.ActivateTabRelative(1) },
|
|
||||||
{ key = "PageUp", mods = "SHIFT|CTRL", action = act.MoveTabRelative(1) },
|
|
||||||
{ key = "PageDown", mods = "CTRL", action = act.ActivateTabRelative(-1) },
|
|
||||||
{ key = "PageDown", mods = "SHIFT|CTRL", action = act.MoveTabRelative(-1) },
|
|
||||||
|
|
||||||
{ -- Quick launch
|
|
||||||
key = "x",
|
|
||||||
mods = "LEADER|CTRL",
|
|
||||||
action = act.ShowLauncherArgs({
|
|
||||||
title = "Quick Launch",
|
|
||||||
flags = "FUZZY|TABS|DOMAINS|WORKSPACES|COMMANDS|LAUNCH_MENU_ITEMS|KEY_ASSIGNMENTS",
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
|
|
||||||
-- Search
|
|
||||||
{ key = "f", mods = "LEADER", action = act.Search("CurrentSelectionOrEmptyString") },
|
|
||||||
{ key = "f", mods = "SHIFT|CTRL", action = act.Search("CurrentSelectionOrEmptyString") },
|
|
||||||
|
|
||||||
-- Miscellaneous
|
|
||||||
{ key = "a", mods = "LEADER|CTRL", action = act.SendKey({ key = "a", mods = "CTRL" }) },
|
|
||||||
{ key = ";", mods = "CTRL", action = act.ActivateCommandPalette },
|
|
||||||
{ key = "F1", mods = "LEADER", action = act.ShowDebugOverlay },
|
|
||||||
{
|
|
||||||
key = "u",
|
|
||||||
mods = "LEADER|CTRL",
|
|
||||||
action = act.AttachDomain("SSH:aws-discord"),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
key = "s",
|
|
||||||
mods = "LEADER|CTRL",
|
|
||||||
action = act.ShowLauncherArgs({ title = "Connect to SSH server", flags = "FUZZY|DOMAINS" }),
|
|
||||||
},
|
|
||||||
{ key = "z", mods = "LEADER|CTRL", action = act.TogglePaneZoomState },
|
|
||||||
{ key = "n", mods = "LEADER|CTRL", action = act.SpawnWindow },
|
|
||||||
{ key = "x", mods = "LEADER", action = act.ActivateCopyMode },
|
|
||||||
|
|
||||||
-- Naming
|
|
||||||
{ -- Rename [W]orkspace
|
|
||||||
key = "w",
|
|
||||||
mods = "LEADER|CTRL",
|
|
||||||
action = act.PromptInputLine({
|
|
||||||
description = "Enter new name for the workspace:",
|
|
||||||
action = WEZTERM.action_callback(function(window, _, line)
|
|
||||||
if line then
|
|
||||||
WEZTERM.mux.rename_workspace(window:active_workspace(), line)
|
|
||||||
end
|
|
||||||
end),
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
{ -- Rename [T]ab
|
|
||||||
key = "t",
|
|
||||||
mods = "LEADER|CTRL",
|
|
||||||
action = act.PromptInputLine({
|
|
||||||
description = "Enter new name for the tab:",
|
|
||||||
action = WEZTERM.action_callback(function(_, pane, line)
|
|
||||||
if line then
|
|
||||||
local tab = pane:tab()
|
|
||||||
tab:set_title(line)
|
|
||||||
end
|
|
||||||
end),
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
{ -- [S]ave Session
|
|
||||||
key = "s",
|
|
||||||
mods = "ALT",
|
|
||||||
action = act.Multiple({
|
|
||||||
WEZTERM.action_callback(function(_, _)
|
|
||||||
RESURRECT.save_state(RESURRECT.workspace_state.get_workspace_state())
|
|
||||||
RESURRECT.window_state.save_window_action()
|
|
||||||
end),
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
{ -- [R]estore Session
|
|
||||||
key = "r",
|
|
||||||
mods = "ALT",
|
|
||||||
action = WEZTERM.action_callback(function(win, pane)
|
|
||||||
RESURRECT.fuzzy_load(win, pane, function(id)
|
|
||||||
local type = string.match(id, "^([^/]+)") -- match before '/'
|
|
||||||
id = string.match(id, "([^/]+)$") -- match after '/'
|
|
||||||
id = string.match(id, "(.+)%..+$") -- remove file extension
|
|
||||||
local state
|
|
||||||
if type == "workspace" then
|
|
||||||
state = RESURRECT.load_state(id, "workspace")
|
|
||||||
RESURRECT.workspace_state.restore_workspace(state, {
|
|
||||||
relative = true,
|
|
||||||
restore_text = true,
|
|
||||||
on_pane_restore = RESURRECT.tab_state.default_on_pane_restore,
|
|
||||||
})
|
|
||||||
elseif type == "window" then
|
|
||||||
state = RESURRECT.load_state(id, "window")
|
|
||||||
RESURRECT.window_state.restore_window(pane:window(), state, {
|
|
||||||
relative = true,
|
|
||||||
restore_text = true,
|
|
||||||
on_pane_restore = RESURRECT.tab_state.default_on_pane_restore,
|
|
||||||
-- uncomment this line to use active tab when restoring
|
|
||||||
-- tab = win:active_tab(),
|
|
||||||
})
|
|
||||||
end
|
|
||||||
end)
|
|
||||||
end),
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
-- ━━━━━━━━━━━━━━━━━━━━━━ Conditional Key Mappings ━━━━━━━━━━━━━━━━━━━
|
|
||||||
key_tables = {
|
|
||||||
resize_mode = { ---------- Resize Pane Mode -------------------------
|
|
||||||
{ key = "LeftArrow", action = act.AdjustPaneSize({ "Left", 1 }) },
|
|
||||||
{ key = "h", action = act.AdjustPaneSize({ "Left", 1 }) },
|
|
||||||
|
|
||||||
{ key = "RightArrow", action = act.AdjustPaneSize({ "Right", 1 }) },
|
|
||||||
{ key = "l", action = act.AdjustPaneSize({ "Right", 1 }) },
|
|
||||||
|
|
||||||
{ key = "UpArrow", action = act.AdjustPaneSize({ "Up", 1 }) },
|
|
||||||
{ key = "k", action = act.AdjustPaneSize({ "Up", 1 }) },
|
|
||||||
|
|
||||||
{ key = "DownArrow", action = act.AdjustPaneSize({ "Down", 1 }) },
|
|
||||||
{ key = "j", action = act.AdjustPaneSize({ "Down", 1 }) },
|
|
||||||
|
|
||||||
-- Cancel the mode by pressing escape
|
|
||||||
{ key = "Escape", action = "PopKeyTable" },
|
|
||||||
},
|
|
||||||
window_mode = { --------- Activate Pane Mode ----------------------
|
|
||||||
{ key = "LeftArrow", action = act.ActivatePaneDirection("Left") },
|
|
||||||
{ key = "h", action = act.ActivatePaneDirection("Left") },
|
|
||||||
|
|
||||||
{ key = "RightArrow", action = act.ActivatePaneDirection("Right") },
|
|
||||||
{ key = "l", action = act.ActivatePaneDirection("Right") },
|
|
||||||
|
|
||||||
{ key = "UpArrow", action = act.ActivatePaneDirection("Up") },
|
|
||||||
{ key = "k", action = act.ActivatePaneDirection("Up") },
|
|
||||||
|
|
||||||
{ key = "DownArrow", action = act.ActivatePaneDirection("Down") },
|
|
||||||
{ key = "j", action = act.ActivatePaneDirection("Down") },
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
-- ━━━━━━━━━━━━━━━━━━━━━━━━━━━ Mouse Bindings ━━━━━━━━━━━━━━━━━━━━━━━━
|
|
||||||
mouse_bindings = {
|
|
||||||
{ -- Left-Click: (Up) Select Text
|
|
||||||
event = { Up = { streak = 1, button = "Left" } },
|
|
||||||
mods = "NONE",
|
|
||||||
action = act.CompleteSelection("ClipboardAndPrimarySelection"),
|
|
||||||
},
|
|
||||||
{ -- Ctrl+Left-Click: (Up) Open Hyperlink
|
|
||||||
event = { Up = { streak = 1, button = "Left" } },
|
|
||||||
mods = "CTRL",
|
|
||||||
action = act.OpenLinkAtMouseCursor,
|
|
||||||
},
|
|
||||||
-- { -- Ctrl+Double-Left-Click: (Up) Open Hyperlink
|
|
||||||
-- event = { Up = { streak = 2, button = "Left" } },
|
|
||||||
-- mods = "CTRL",
|
|
||||||
-- action = act.OpenLinkAtMouseCursor,
|
|
||||||
-- },
|
|
||||||
{ -- Ctrl+WheelUp: Go to previous tab
|
|
||||||
event = { Down = { streak = 1, button = { WheelUp = 1 } } },
|
|
||||||
mods = "CTRL",
|
|
||||||
action = act.ActivateTabRelative(-1),
|
|
||||||
},
|
|
||||||
{ -- Ctrl+WheelDown: Go to next tab
|
|
||||||
event = { Down = { streak = 1, button = { WheelDown = 1 } } },
|
|
||||||
mods = "CTRL",
|
|
||||||
action = act.ActivateTabRelative(1),
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
@@ -1,61 +0,0 @@
|
|||||||
-- ╭─────────────────────────────────────────────────────────╮
|
|
||||||
-- │ WINDOW │
|
|
||||||
-- ╰─────────────────────────────────────────────────────────╯
|
|
||||||
|
|
||||||
local wezterm = WEZTERM
|
|
||||||
local gpus = wezterm.gui.enumerate_gpus()
|
|
||||||
|
|
||||||
return {
|
|
||||||
-- Set the initial size
|
|
||||||
initial_cols = 180,
|
|
||||||
initial_rows = 38,
|
|
||||||
|
|
||||||
tab_max_width = 60,
|
|
||||||
tab_bar_at_bottom = false,
|
|
||||||
|
|
||||||
unicode_version = 14,
|
|
||||||
|
|
||||||
-- Resize by cell
|
|
||||||
use_resize_increments = true,
|
|
||||||
|
|
||||||
-- Use Retro tab bar
|
|
||||||
use_fancy_tab_bar = false,
|
|
||||||
|
|
||||||
-- Set the window padding
|
|
||||||
window_padding = {
|
|
||||||
left = "0%",
|
|
||||||
right = "0%",
|
|
||||||
top = "0%",
|
|
||||||
bottom = "0%",
|
|
||||||
},
|
|
||||||
|
|
||||||
-- Set the animation framerate
|
|
||||||
animation_fps = 120,
|
|
||||||
|
|
||||||
-- Window Decorations
|
|
||||||
window_decorations = "TITLE | RESIZE",
|
|
||||||
|
|
||||||
-- Visual Bell
|
|
||||||
visual_bell = {
|
|
||||||
fade_in_duration_ms = 75,
|
|
||||||
fade_out_duration_ms = 75,
|
|
||||||
target = "CursorColor",
|
|
||||||
},
|
|
||||||
|
|
||||||
-- Audible Bell
|
|
||||||
audible_bell = "SystemBeep",
|
|
||||||
|
|
||||||
-- Terminal Variable
|
|
||||||
term = "wezterm",
|
|
||||||
|
|
||||||
--Honor kitty protocol inputs
|
|
||||||
enable_kitty_keyboard = true,
|
|
||||||
|
|
||||||
-- Rendering
|
|
||||||
front_end = "WebGpu",
|
|
||||||
-- front_end = "OpenGL",
|
|
||||||
webgpu_power_preference = "HighPerformance",
|
|
||||||
webgpu_preferred_adapter = gpus[1],
|
|
||||||
-- Scrollback Lines
|
|
||||||
scrollback_lines = 20000,
|
|
||||||
}
|
|
||||||
-56
@@ -1,56 +0,0 @@
|
|||||||
-- ╭─────────────────────────────────────────────────────────╮
|
|
||||||
-- │ OPTIONS │
|
|
||||||
-- ╰─────────────────────────────────────────────────────────╯
|
|
||||||
-- Load and merge configurations from the 'config' directory
|
|
||||||
|
|
||||||
local M = {}
|
|
||||||
|
|
||||||
-- Function to require all Lua files in a directory and merge them
|
|
||||||
local function require_configs(dir)
|
|
||||||
-- Check if the path exists
|
|
||||||
local path = dir or os.getenv("HOME") .. "/.config/wezterm/config/"
|
|
||||||
if not path then
|
|
||||||
print("Directory path is nil. Unable to load configurations.")
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Open the directory
|
|
||||||
local pfile, open_err = io.popen('ls "' .. path .. '"')
|
|
||||||
if not pfile then
|
|
||||||
print("Error opening directory:", open_err)
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
local configs = {}
|
|
||||||
|
|
||||||
-- Iterate over the files in the directory
|
|
||||||
for file in pfile:lines() do
|
|
||||||
if file:match("%.lua$") then
|
|
||||||
local module_name = file:gsub("%.lua$", "")
|
|
||||||
local status, config = pcall(require, "config." .. module_name)
|
|
||||||
if status and type(config) == "table" then
|
|
||||||
configs[module_name] = config
|
|
||||||
elseif not status then
|
|
||||||
print("Error requiring config:", module_name, config)
|
|
||||||
else
|
|
||||||
print("Warning: Config not a table:", module_name)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
pfile:close()
|
|
||||||
|
|
||||||
-- Merge configurations into CONFIG
|
|
||||||
for _, config in pairs(configs) do
|
|
||||||
for k, v in pairs(config) do
|
|
||||||
CONFIG[k] = v
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
function M.setup()
|
|
||||||
-- Load all configurations from the 'config' directory
|
|
||||||
require_configs()
|
|
||||||
end
|
|
||||||
|
|
||||||
return M
|
|
||||||
-55
@@ -1,55 +0,0 @@
|
|||||||
-- ╭─────────────────────────────────────────────────────────╮
|
|
||||||
-- │ PLUGINS │
|
|
||||||
-- ╰─────────────────────────────────────────────────────────╯
|
|
||||||
-- Load plugins from the 'plugins' directory
|
|
||||||
|
|
||||||
local M = {}
|
|
||||||
|
|
||||||
-- Function to require all Lua files in a directory
|
|
||||||
function M.require_plugins(dir)
|
|
||||||
-- Check if the path exists
|
|
||||||
local path = dir or os.getenv("HOME") .. "/.config/wezterm/plugins/"
|
|
||||||
if not path then
|
|
||||||
print("Directory path is nil. Unable to load plugins.")
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Open the directory
|
|
||||||
local pfile, open_err = io.popen('ls "' .. path .. '"')
|
|
||||||
if not pfile then
|
|
||||||
print("Error opening directory:", open_err)
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Iterate over the files in the directory
|
|
||||||
for file in pfile:lines() do
|
|
||||||
if file:match("%.lua$") then
|
|
||||||
local module_name = file:gsub("%.lua$", "")
|
|
||||||
local status, require_err = pcall(require, "plugins." .. module_name)
|
|
||||||
if not status then
|
|
||||||
print("Error requiring plugin:", module_name, require_err)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
pfile:close()
|
|
||||||
end
|
|
||||||
|
|
||||||
function M.require_plugs()
|
|
||||||
require("plugins.hyperlinks")
|
|
||||||
require("plugins.resurrect")
|
|
||||||
require("plugins.smart_splits")
|
|
||||||
require("plugins.tabline")
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Function to update all plugins
|
|
||||||
function M.update_plugins()
|
|
||||||
WEZTERM.plugin.update_all()
|
|
||||||
end
|
|
||||||
|
|
||||||
function M.setup()
|
|
||||||
-- Load all plugins from the 'plugins' directory
|
|
||||||
M.require_plugs()
|
|
||||||
end
|
|
||||||
|
|
||||||
return M
|
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
-- ╭─────────────────────────────────────────────────────────╮
|
||||||
|
-- │ Battery │
|
||||||
|
-- ╰─────────────────────────────────────────────────────────╯
|
||||||
|
|
||||||
|
local M = {}
|
||||||
|
|
||||||
|
local wezterm = WEZTERM
|
||||||
|
|
||||||
|
if DEVMODE then
|
||||||
|
-- Use the local dev plugin
|
||||||
|
BATTERIES = wezterm.plugin.require("file://" .. wezterm.home_dir .. "/projects/battery.wez")
|
||||||
|
else
|
||||||
|
-- Use the remote plugin
|
||||||
|
BATTERIES = wezterm.plugin.require("https://github.com/rootiest/battery.wez")
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Invert the icon color brightness
|
||||||
|
BATTERIES.invert = true
|
||||||
|
|
||||||
|
return M
|
||||||
+1
-3
@@ -2,9 +2,7 @@ local wezterm = WEZTERM
|
|||||||
local config = CONFIG
|
local config = CONFIG
|
||||||
local types = require("types")
|
local types = require("types")
|
||||||
local funcs = require("funcs")
|
local funcs = require("funcs")
|
||||||
local batteries = wezterm.plugin.require("https://github.com/rootiest/battery.wez")
|
local batteries = BATTERIES
|
||||||
--local batteries = wezterm.plugin.require("file:///home/rootiest/projects/battery.wez")
|
|
||||||
batteries.invert = true
|
|
||||||
|
|
||||||
local tabline = wezterm.plugin.require("https://github.com/michaelbrusegard/tabline.wez")
|
local tabline = wezterm.plugin.require("https://github.com/michaelbrusegard/tabline.wez")
|
||||||
|
|
||||||
|
|||||||
+5
-2
@@ -16,15 +16,18 @@ WEZTERM = require("wezterm")
|
|||||||
CONFIG = WEZTERM.config_builder()
|
CONFIG = WEZTERM.config_builder()
|
||||||
|
|
||||||
-- Load Options
|
-- Load Options
|
||||||
--require("options").setup()
|
|
||||||
|
|
||||||
local configs = require("configs")
|
local configs = require("configs")
|
||||||
|
|
||||||
|
-- Apply config
|
||||||
for k, v in pairs(configs) do
|
for k, v in pairs(configs) do
|
||||||
CONFIG[k] = v
|
CONFIG[k] = v
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- Check for dev-modes
|
||||||
|
DEVMODE = pcall(require, "dev")
|
||||||
|
|
||||||
-- Load Plugins
|
-- Load Plugins
|
||||||
|
require("plugins.battery")
|
||||||
require("plugins.hyperlinks")
|
require("plugins.hyperlinks")
|
||||||
require("plugins.resurrect")
|
require("plugins.resurrect")
|
||||||
require("plugins.smart_splits")
|
require("plugins.smart_splits")
|
||||||
|
|||||||
Reference in New Issue
Block a user