2023-02-14 12:01:37 +00:00
|
|
|
local wezterm = require("wezterm")
|
|
|
|
|
2023-02-14 18:00:43 +00:00
|
|
|
-- Equivalent to POSIX basename(3)
|
|
|
|
-- Given "/foo/bar" returns "bar"
|
|
|
|
-- Given "c:\\foo\\bar" returns "bar"
|
|
|
|
function basename(s)
|
|
|
|
return string.gsub(s, "(.*[/\\])(.*)", "%2")
|
|
|
|
end
|
|
|
|
|
2023-02-14 12:01:37 +00:00
|
|
|
wezterm.on("update-right-status", function(window, pane)
|
2023-02-14 22:44:32 +00:00
|
|
|
local scheme = wezterm.color.get_builtin_schemes()["Catppuccin Macchiato"]
|
2023-02-14 12:01:37 +00:00
|
|
|
-- Each element holds the text for a cell in a "powerline" style << fade
|
|
|
|
local cells = {}
|
|
|
|
|
2023-02-14 18:00:43 +00:00
|
|
|
-- Show current active key table
|
|
|
|
local name = window:active_key_table()
|
|
|
|
if name then
|
|
|
|
name = "TABLE: " .. name
|
|
|
|
table.insert(cells, name)
|
|
|
|
end
|
|
|
|
|
2023-02-14 12:01:37 +00:00
|
|
|
-- I like my date/time in this style: "Wed Mar 3 08:14"
|
2023-02-14 18:00:43 +00:00
|
|
|
-- local date = wezterm.strftime("%a %b %-d %H:%M")
|
2023-02-14 22:44:32 +00:00
|
|
|
local date = wezterm.strftime("%Y-%m-%d")
|
2023-02-14 12:01:37 +00:00
|
|
|
table.insert(cells, date)
|
2023-02-14 22:44:32 +00:00
|
|
|
local time = wezterm.strftime("%H:%M")
|
|
|
|
table.insert(cells, time)
|
2023-02-14 12:01:37 +00:00
|
|
|
|
2023-02-14 15:11:10 +00:00
|
|
|
-- Get current hostname to track which device I'm on
|
|
|
|
table.insert(cells, wezterm.hostname())
|
|
|
|
|
2023-02-14 12:01:37 +00:00
|
|
|
-- An entry for each battery (typically 0 or 1 battery)
|
|
|
|
for _, b in ipairs(wezterm.battery_info()) do
|
|
|
|
table.insert(cells, string.format("%.0f%%", b.state_of_charge * 100))
|
|
|
|
end
|
|
|
|
|
2023-02-14 22:44:32 +00:00
|
|
|
-- The powerline ( symbol
|
|
|
|
local LEFT_SEP = utf8.char(0xe0b7)
|
|
|
|
-- The filled in variant of the ( symbol
|
|
|
|
local SOLID_LEFT_SEP = utf8.char(0xe0b6)
|
2023-02-14 12:01:37 +00:00
|
|
|
|
2023-02-15 10:20:56 +00:00
|
|
|
-- Foreground color for the text across the fade
|
|
|
|
local text_fg = scheme.foreground
|
|
|
|
-- Fancy tab bar background colour to complete fade
|
|
|
|
local fancy_tab_bar_bg = "#333333"
|
|
|
|
-- Color palette for the backgrounds of each cell
|
|
|
|
local colours = wezterm.color.gradient({
|
|
|
|
colors = {
|
|
|
|
scheme.tab_bar.background,
|
|
|
|
scheme.ansi[1],
|
|
|
|
},
|
|
|
|
}, #cells)
|
2023-02-14 12:01:37 +00:00
|
|
|
|
|
|
|
-- The elements to be formatted
|
|
|
|
local elements = {}
|
2023-02-15 10:20:56 +00:00
|
|
|
-- How many cells have been formatted
|
|
|
|
local num_cells = 0
|
2023-02-14 12:01:37 +00:00
|
|
|
|
2023-02-15 10:20:56 +00:00
|
|
|
-- Translate a cell into elements
|
|
|
|
local function push(text, is_last)
|
|
|
|
local cell_no = num_cells + 1
|
|
|
|
table.insert(elements, { Foreground = { Color = text_fg } })
|
|
|
|
table.insert(elements, { Background = { Color = colours[cell_no] } })
|
2023-02-14 18:00:43 +00:00
|
|
|
table.insert(elements, { Text = " " .. text .. " " })
|
2023-02-15 10:20:56 +00:00
|
|
|
if not is_last then
|
|
|
|
table.insert(elements, { Foreground = { Color = colours[cell_no + 1] } })
|
|
|
|
table.insert(elements, { Text = SOLID_LEFT_SEP })
|
|
|
|
end
|
|
|
|
num_cells = num_cells + 1
|
|
|
|
end
|
|
|
|
|
|
|
|
table.insert(elements, { Foreground = { Color = colours[num_cells + 1] } })
|
|
|
|
table.insert(elements, { Background = { Color = fancy_tab_bar_bg } })
|
|
|
|
table.insert(elements, { Text = SOLID_LEFT_SEP })
|
|
|
|
while #cells > 0 do
|
|
|
|
local cell = table.remove(cells, 1)
|
|
|
|
push(cell, #cells == 0)
|
2023-02-14 12:01:37 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
window:set_right_status(wezterm.format(elements))
|
|
|
|
end)
|