From 1cdbaba5e7687096c767ddceae5bc86ec4fe626c Mon Sep 17 00:00:00 2001 From: Zeti_1223 <121749710+zeti1223@users.noreply.github.com> Date: Tue, 11 Aug 2026 16:42:13 +0200 Subject: [PATCH] thinkpad-led (#329) * thinkpad-led * Update en.json * Update README with widget information * PR fixes * fix PR --- thinkpad-led/README.md | 27 ++++++++ thinkpad-led/plugin.toml | 14 +++++ thinkpad-led/thumbnail.webp | Bin 0 -> 45976 bytes thinkpad-led/translations/en.json | 1 + thinkpad-led/widget.luau | 101 ++++++++++++++++++++++++++++++ 5 files changed, 143 insertions(+) create mode 100644 thinkpad-led/README.md create mode 100644 thinkpad-led/plugin.toml create mode 100644 thinkpad-led/thumbnail.webp create mode 100644 thinkpad-led/translations/en.json create mode 100644 thinkpad-led/widget.luau diff --git a/thinkpad-led/README.md b/thinkpad-led/README.md new file mode 100644 index 0000000..a4e2013 --- /dev/null +++ b/thinkpad-led/README.md @@ -0,0 +1,27 @@ +# ThinkPad Logo LED + +A simple Noctalia bar widget to toggle the ThinkPad lid logo LED on and off. + +## Plugin + +| Property | Value | +| --- | --- | +| **ID** | `zeti1223/thinkpad-led` | +| **Widget** | `led` | +| **Version** | `1.1.0` | +| **Author** | zeti1223 | +| **License** | MIT | + +## Usage + +Add the `led` widget to your Noctalia bar layout. Clicking the widget toggles the ThinkPad logo LED state. + +* **Left Click**: Toggle LED (ON / OFF). + +## Requirements + +* `sh` + +## Notes + +* **Hardware & Permissions**: This plugin writes directly to `/sys/class/leds/tpacpi::lid_logo_dot/brightness`. Ensure your user account has write permissions to this path (for example, via a `udev` rule), otherwise command execution will fail. diff --git a/thinkpad-led/plugin.toml b/thinkpad-led/plugin.toml new file mode 100644 index 0000000..d6d7edc --- /dev/null +++ b/thinkpad-led/plugin.toml @@ -0,0 +1,14 @@ +id = "zeti1223/thinkpad-led" +name = "ThinkPad Logo LED" +version = "1.1.0" +plugin_api = 3 +author = "zeti1223" +license = "MIT" +dependencies = ["sh"] +tags = ["bar", "hardware"] +icon = "bulb" +description = "Turn the ThinkPad lid logo LED on or off." + +[[widget]] +id = "led" +entry = "widget.luau" \ No newline at end of file diff --git a/thinkpad-led/thumbnail.webp b/thinkpad-led/thumbnail.webp new file mode 100644 index 0000000000000000000000000000000000000000..265cb970fc5b8fa46d5b5ebff74dfd05c8b71d06 GIT binary patch literal 45976 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 0 +end + +local function statusColor() + if ledOn then + return "error" + else + return "outline" + end +end + +local function render() + barWidget.render(ui.box({ + width = 10, + height = 10, + radius = 5, + fill = statusColor(), + border = "outline", + borderWidth = 1, + })) + + if ledOn == nil then + barWidget.setTooltip("ThinkPad LED: unavailable (check permissions on " .. LED_PATH .. ")") + elseif pending then + barWidget.setTooltip("ThinkPad LED: updating…") + elseif writeFailed then + barWidget.setTooltip("ThinkPad LED: last toggle failed (permission denied?)") + elseif ledOn then + barWidget.setTooltip("ThinkPad LED: ON (Left click: turn off)") + else + barWidget.setTooltip("ThinkPad LED: OFF (Left click: turn on)") + end +end + +function update() + if not pending then + ledOn = readLedState() + end + render() +end + +function onClick() + if pending then + return + end + + -- Toggle off the actual hardware state, not a guessed one. + local current = readLedState() + if current == nil then + ledOn = nil + render() + return + end + + local target = not current + local val = target and "255" or "0" + + pending = true + writeFailed = false + render() + + local started = noctalia.runAsync(`sh -c "echo {val} > {LED_PATH}"`, function(result) + pending = false + writeFailed = result.exitCode ~= 0 + -- Trust the hardware over the write result: read the brightness back + -- rather than assuming the echo did what we asked. + ledOn = readLedState() + render() + end) + + if not started then + pending = false + writeFailed = true + ledOn = readLedState() + render() + end +end