nixos/home/wezterm/status.lua

77 lines
2.7 KiB
Lua
Raw Normal View History

local wezterm = require "wezterm"
-- The filled in variant of the powerline ( symbol
local SOLID_LEFT_SEP = require("utf8").char(0xe0b6)
local M = {}
M.setup = function(scheme)
wezterm.on("update-right-status", function(window, _)
-- Each element holds the text for a cell in a "powerline" style << fade
local cells = {}
-- Show current active key table
local name = window:active_key_table()
if name then
name = "TABLE: " .. name
table.insert(cells, name)
end
local date = wezterm.strftime("%a %-d %b %H:%M")
-- local date = wezterm.strftime "%Y-%m-%d"
table.insert(cells, date)
-- local time = wezterm.strftime "%H:%M"
-- table.insert(cells, time)
-- Get current hostname to track which device I'm on
table.insert(cells, wezterm.hostname())
-- 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
-- Foreground color for the text across the fade
local text_fg = scheme.tab_bar.active_tab.fg_color
-- Tab bar background to complete fade
local tab_bar_bg = scheme.tab_bar.background
-- Color palette for the backgrounds of each cell
local colours = wezterm.color.gradient({
colors = {
scheme.tab_bar.new_tab.bg_color,
scheme.tab_bar.active_tab.bg_color,
},
}, #cells + 1)
-- The elements to be formatted
local elements = {}
-- How many cells have been formatted
local num_cells = 0
-- 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 + 1] } })
table.insert(elements, { Text = text })
if not is_last then
table.insert(elements, { Foreground = { Color = colours[cell_no + 2] } })
table.insert(elements, { Text = " " .. SOLID_LEFT_SEP })
end
num_cells = num_cells + 1
end
table.insert(elements, { Foreground = { Color = colours[num_cells + 2] } })
table.insert(elements, { Background = { Color = tab_bar_bg } })
table.insert(elements, { Text = SOLID_LEFT_SEP })
while #cells > 0 do
local cell = table.remove(cells, 1)
push(cell, #cells == 0)
end
if os.getenv("XDG_CURRENT_DESKTOP") ~= "i3" then
window:set_right_status(wezterm.format(elements))
end
end)
end
return M