From 3fae77d2eaad99bb39c8296e201f9845837dbe02 Mon Sep 17 00:00:00 2001 From: "Danilo M." Date: Sun, 18 Oct 2026 21:38:06 +0200 Subject: feat(accent): light IKEA TRADFRI colour bulbs in the accent udt-bulb fades every paired colour bulb to the wallpaper accent through the TRADFRI gateway's local CoAP API, over DTLS-PSK via libcoap's coap-client. --pair trades the gateway's security code for an identity of its own and records the colour bulbs in ~/.config/udt/tradfri.json. Takes udt-ledstrip's on and off. A bare run, as udt-accent starts it, skips bulbs that are off, since the gateway switches a bulb on for any colour change. Colour and brightness go in separate requests, colour first: combined, or with a colour sent during a brightness fade, the gateway drops part of it. Co-Authored-By: Claude Opus 5.5 --- AGENTS.md | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) (limited to 'AGENTS.md') diff --git a/AGENTS.md b/AGENTS.md index 4c3ccae..5a31dee 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -242,6 +242,20 @@ hypridle's idle timeout, for the same reason as `off`: NetworkManager drops the network on the same sleep signal hypridle's `before_sleep_cmd` answers. That `before_sleep_cmd` sends it too, as a best effort for any other suspend path. +`udt-bulb` does the same for IKEA TRADFRI colour bulbs, called beside every +`udt-ledstrip`, except that suspend switches the bulbs off: the breathing +strip alone says the desktop is asleep. A bulb shows one colour, so it gets +the accent alone. The bulbs are Zigbee, reached through the +TRADFRI gateway's local CoAP API over DTLS-PSK, which Python cannot speak, so +it calls libcoap's `coap-client` (SBo `libcoap`). `udt-bulb --pair HOST CODE` +trades the code on the gateway's label for an identity of its own and writes +`~/.config/udt/tradfri.json` with every colour bulb listed; trimming that list +by hand picks which bulbs follow. Two gateway quirks shape the requests, +both found on the real bulb: any colour change switches a bulb on, so a bare +run reads the state first and skips an off bulb; and a request setting colour +and brightness together, or a colour sent while a brightness fade runs, is +partly dropped, so colour goes first and brightness after, separately. + **Sublime's, GRUB's and the homepage's accents are replaced, not substituted into a placeholder.** GRUB and the homepage are generated by udt-palette with the scheme's accent, then rewritten in place, before `udt-grub` and @@ -305,7 +319,7 @@ profile, and the new tab stays blank. Not everything tracks the wallpaper. rofi, quickshell, Hyprland borders, hyprlock's border (through `~/.cache/udt/hyprlock-border.conf`), Sublime's -colour scheme, Firefox, GRUB, the homepage, the AK820 Pro keyboard and the LED strip do; conky, Qt, GTK, waybar, hyprlock's panel palette +colour scheme, Firefox, GRUB, the homepage, the AK820 Pro keyboard, the LED strip and the TRADFRI bulbs do; conky, Qt, GTK, waybar, hyprlock's panel palette (from `templates/hyprlock/hyprlock-palette.conf`) and Sublime's UI chrome sit on the scheme's accent, lavender by default, which is also the fallback when a wallpaper is too grey to snap. Qt and GTK apps only reread a theme on restart, -- cgit v1.2.3