Will change this commit message to mean something later
Some checks failed
dev release / build (push) Failing after 0s

This commit is contained in:
Breadway 2026-07-22 19:52:16 +08:00
parent f3905d8114
commit 8d3f55b607
14 changed files with 1491 additions and 40 deletions

View file

@ -0,0 +1,66 @@
-- bluetooth-toggle-widget — a real one-click Bluetooth power toggle in the
-- hamburger popover's tray section, showing power state and connected
-- device count. breadbar's native bar only shows a passive BT icon; this
-- adds an actual control surface for it.
--
-- Demonstrates: WidgetPlacement "tray", a bread.every-polled read of
-- bread.bluetooth.devices()/.powered(), and bread.bar.widget_clicked
-- driving a real action (bread.bluetooth.power) rather than just display.
--
-- Drop-in: copy into ~/.config/bread/modules/. Zero configuration.
local M = bread.module({ name = "bluetooth-toggle-widget", version = "1.0.0" })
local function widget_root()
local powered = bread.bluetooth.powered()
local devices = bread.bluetooth.devices() or {}
local connected = 0
for _, d in ipairs(devices) do
if d.connected then
connected = connected + 1
end
end
local text, style
if powered == nil then
text, style = "BT n/a", { color = "dim" }
elseif not powered then
text, style = "BT off", { color = "dim" }
elseif connected > 0 then
text, style = "BT (" .. connected .. ")", { color = "accent", weight = "bold" }
else
text, style = "BT on", { color = "fg" }
end
return {
type = "label",
text = text,
style = style,
on_click = "toggle",
}
end
function M.on_load()
bread.widget.register({
id = "toggle",
placement = "tray",
tooltip = "Click to toggle Bluetooth power",
root = widget_root(),
})
bread.every(5000, function()
bread.widget.update("toggle", { root = widget_root() })
end)
bread.on("bread.bar.widget_clicked", function(e)
if e.data.widget_id == "bluetooth-toggle-widget.toggle" and e.data.action == "toggle" then
bread.bluetooth.power(not bread.bluetooth.powered())
-- Give BlueZ a moment to apply before refreshing the label.
bread.after(500, function()
bread.widget.update("toggle", { root = widget_root() })
end)
end
end)
end
return M