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 -- I like my date/time in this style: "Wed Mar 3 08:14" -- local date = wezterm.strftime("%a %b %-d %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 window:set_right_status(wezterm.format(elements)) end) end return M