From b595aaff14012133b4aa3802537fe5e8253d872f Mon Sep 17 00:00:00 2001 From: Piero-93 Date: Wed, 29 Jul 2026 19:29:44 +0200 Subject: [PATCH 1/3] Add ThinkPad fan monitor with manual speed control and temperature readout (ported from Noctalia 4.x) --- thinkpad-fan/README.md | 86 +++++++++++ thinkpad-fan/panel.luau | 74 ++++++++++ thinkpad-fan/plugin.toml | 48 +++++++ thinkpad-fan/scripts/setup-fan-permissions.sh | 44 ++++++ thinkpad-fan/service.luau | 135 ++++++++++++++++++ thinkpad-fan/thumbnail.webp | Bin 0 -> 14288 bytes thinkpad-fan/translations/en.json | 34 +++++ thinkpad-fan/translations/it.json | 34 +++++ thinkpad-fan/widget.luau | 79 ++++++++++ 9 files changed, 534 insertions(+) create mode 100644 thinkpad-fan/README.md create mode 100644 thinkpad-fan/panel.luau create mode 100644 thinkpad-fan/plugin.toml create mode 100755 thinkpad-fan/scripts/setup-fan-permissions.sh create mode 100644 thinkpad-fan/service.luau create mode 100644 thinkpad-fan/thumbnail.webp create mode 100644 thinkpad-fan/translations/en.json create mode 100644 thinkpad-fan/translations/it.json create mode 100644 thinkpad-fan/widget.luau diff --git a/thinkpad-fan/README.md b/thinkpad-fan/README.md new file mode 100644 index 00000000..9b5b5839 --- /dev/null +++ b/thinkpad-fan/README.md @@ -0,0 +1,86 @@ +# ThinkPad Fan & Thermal Control + +A fan monitor and manual speed control for **Noctalia v5**, for ThinkPads using +the `thinkpad_acpi` kernel module. The bar widget shows the current fan RPM and +turns a warning color when the fans are forced off or set to a manual level. +Clicking it opens a panel to pick a fan level — no root needed at runtime. + +> Ported from the Noctalia v4 (Quickshell/QML) plugin of the same name to the v5 +> Luau plugin runtime. + +## Plugin + +Manifest id `piero-93/thinkpad-fan`. Three entries share one state snapshot (no +Lua memory is shared between them): + +- `service` — headless: polls `/proc/acpi/ibm/fan` and the thermal zone, and + performs the fan-level writes. +- `widget` — the bar widget: fan glyph + `NNNN RPM`, tinted by status. Click it + to open the panel. +- `panel` — the control surface: a grid of fan levels (Auto, Full, 0–7). Toggle + it from a keybind with: + + ```sh + noctalia msg panel-toggle piero-93/thinkpad-fan:panel + ``` + +## Features + +- **Live RPM** in the bar, with a tooltip showing speed, level, and temperature. +- **Status coloring** — the widget turns red when the fans are forced off + (level 0) and uses the accent color for any manual override. +- **Manual level control** — Auto, Full (disengaged), or fixed levels 0–7. +- **Temperature readout** from a configurable thermal zone. + +## Setup (required) + +Manual fan control needs two things, handled once by the included script: + +1. the `thinkpad_acpi` module loaded with `fan_control=1`, and +2. write access to `/proc/acpi/ibm/fan`. + +```sh +cd ~/Documents/Projects/community-plugins/thinkpad-fan/scripts +sudo ./setup-fan-permissions.sh +``` + +If the script had to enable `fan_control=1`, reboot (or reload the module) once. +Without this, the RPM/temperature readout still works, but changing the level +will fail (the panel shows a notification). + +> ⚠️ Forcing the fans off (level 0) or to a fixed low level can let the machine +> overheat. Use manual levels with care; **Auto** returns control to firmware. + +## Usage + +Install this checkout as a development source and enable the plugin: + +```sh +noctalia msg plugins source add dev path ~/Documents/Projects/community-plugins +noctalia msg plugins enable piero-93/thinkpad-fan +``` + +Then add the **ThinkPad Fan & Thermal Control** widget from the bar's Add-widget +picker. `.luau` edits hot-reload; `plugin.toml` changes apply on the next config +reload. + +## Settings + +| Setting | Type | Default | Description | +|---------|------|---------|-------------| +| Colorize by status | bool | `true` | Tint the widget when forced off / manual | +| Left-click opens the control panel | bool | `true` | Open the panel on left-click | +| Thermal zone | string | `thermal_zone0` | sysfs thermal zone for the temperature | + +## What it does to your system + +For review transparency (this plugin is trusted, unsandboxed Luau): + +- **Reads** `/proc/acpi/ibm/fan` and `/sys/class/thermal//temp` (poll ~2.5 s). +- **Writes** `level ` to `/proc/acpi/ibm/fan` only when you pick a level in + the panel. +- **No external commands, no network access.** + +## License + +GPL-3.0 diff --git a/thinkpad-fan/panel.luau b/thinkpad-fan/panel.luau new file mode 100644 index 00000000..b00a7bed --- /dev/null +++ b/thinkpad-fan/panel.luau @@ -0,0 +1,74 @@ +--!nonstrict + +local SNAPSHOT = "fan.snapshot" +local COMMAND = "fan.command" + +local snap = noctalia.state.get(SNAPSHOT) or { rpm = 0, level = "auto", temp = 0, available = false } +local reqId = 0 + +local function dispatch(level) + reqId += 1 + noctalia.state.set(COMMAND, { + action = "set_level", + value = level, + requestId = tostring(os.time()) .. "-" .. tostring(reqId), + }) +end + +-- variant: current level highlighted; "0" (fans off) flagged as destructive. +local function levelButton(level, label, handler) + local variant = "ghost" + if snap.level == level then + variant = (level == "0") and "destructive" or "primary" + end + return ui.button({ text = label, variant = variant, onClick = handler, flexGrow = 1 }) +end + +local function render() + panel.render(ui.column({ gap = 8, padding = 10 }, { + ui.row({ gap = 6, align = "center" }, { + ui.glyph({ name = "car-fan", color = "primary" }), + ui.label({ text = noctalia.tr("panel.title"), fontWeight = "bold", flexGrow = 1 }), + ui.label({ text = (snap.rpm or 0) .. " RPM · " .. (snap.temp or 0) .. " °C", fontSize = 12, color = "on_surface_variant" }), + }), + ui.row({ gap = 6 }, { + levelButton("auto", noctalia.tr("panel.auto"), "onFanAuto"), + levelButton("disengaged", noctalia.tr("panel.full"), "onFanFull"), + }), + ui.row({ gap = 6 }, { + levelButton("0", "0", "onFan0"), + levelButton("1", "1", "onFan1"), + levelButton("2", "2", "onFan2"), + levelButton("3", "3", "onFan3"), + }), + ui.row({ gap = 6 }, { + levelButton("4", "4", "onFan4"), + levelButton("5", "5", "onFan5"), + levelButton("6", "6", "onFan6"), + levelButton("7", "7", "onFan7"), + }), + })) +end + +function onOpen(_context) + snap = noctalia.state.get(SNAPSHOT) or snap + render() +end + +noctalia.state.watch(SNAPSHOT, function(value) + if type(value) == "table" then + snap = value + render() + end +end) + +function onFanAuto() dispatch("auto") end +function onFanFull() dispatch("disengaged") end +function onFan0() dispatch("0") end +function onFan1() dispatch("1") end +function onFan2() dispatch("2") end +function onFan3() dispatch("3") end +function onFan4() dispatch("4") end +function onFan5() dispatch("5") end +function onFan6() dispatch("6") end +function onFan7() dispatch("7") end diff --git a/thinkpad-fan/plugin.toml b/thinkpad-fan/plugin.toml new file mode 100644 index 00000000..4e29aec9 --- /dev/null +++ b/thinkpad-fan/plugin.toml @@ -0,0 +1,48 @@ +id = "piero-93/thinkpad-fan" +name = "ThinkPad Fan & Thermal Control" +version = "1.0.0" +min_noctalia = "5.0.0" +author = "piero-93" +license = "GPL-3.0" +icon = "car-fan" +description = "ThinkPad fan speed monitor and manual level control with temperature readout — no root at runtime." +tags = ["bar", "panel", "system", "hardware", "indicator", "utility"] +dependencies = [] + +[[setting]] +key = "colorize_by_status" +type = "bool" +label_key = "settings.colorize_by_status.label" +description_key = "settings.colorize_by_status.description" +default = true + +[[setting]] +key = "allow_popup" +type = "bool" +label_key = "settings.allow_popup.label" +description_key = "settings.allow_popup.description" +default = true + +[[setting]] +key = "thermal_zone" +type = "string" +label_key = "settings.thermal_zone.label" +description_key = "settings.thermal_zone.description" +default = "thermal_zone0" + +[[widget]] +id = "widget" +entry = "widget.luau" + +[[panel]] +id = "panel" +entry = "panel.luau" +width = 280 +height = 200 +placement = "attached" +position = "auto" +open_near_click = true + +[[service]] +id = "service" +entry = "service.luau" diff --git a/thinkpad-fan/scripts/setup-fan-permissions.sh b/thinkpad-fan/scripts/setup-fan-permissions.sh new file mode 100755 index 00000000..c81a6591 --- /dev/null +++ b/thinkpad-fan/scripts/setup-fan-permissions.sh @@ -0,0 +1,44 @@ +#!/usr/bin/env bash +# --------------------------------------------------------------------------- +# ThinkPad fan-control permissions setup. +# +# Lets the plugin write /proc/acpi/ibm/fan at runtime WITHOUT root: +# 1. enables thinkpad_acpi fan_control=1 (needed for manual control), +# 2. installs a udev rule that chmods the file world-writable on every boot. +# +# Usage: sudo ./setup-fan-permissions.sh +# A reboot (or module reload) may be needed if fan_control was just enabled. +# --------------------------------------------------------------------------- +set -euo pipefail + +if [ "${EUID}" -ne 0 ]; then + echo "Error: run as root, e.g. sudo $0" >&2 + exit 1 +fi + +MODPROBE_FILE="/etc/modprobe.d/thinkpad_acpi.conf" +RULE_FILE="/etc/udev/rules.d/99-thinkpad-fan.rules" + +# 1. Enable manual fan control in the kernel module. +if [ -f /sys/module/thinkpad_acpi/parameters/fan_control ] \ + && [ "$(cat /sys/module/thinkpad_acpi/parameters/fan_control)" = "N" ]; then + echo "Enabling thinkpad_acpi fan_control=1..." + echo "options thinkpad_acpi fan_control=1" >"${MODPROBE_FILE}" + echo " -> reboot (or reload thinkpad_acpi) required to apply." +fi + +# 2. Persistent udev rule so the file is writable on every boot. +echo "Writing ${RULE_FILE}..." +echo 'SUBSYSTEM=="platform", DRIVERS=="thinkpad_acpi", RUN+="/bin/chmod 0666 /proc/acpi/ibm/fan"' >"${RULE_FILE}" + +echo "Reloading udev rules..." +udevadm control --reload-rules +udevadm trigger + +# 3. Apply immediately for the current session. +if [ -f /proc/acpi/ibm/fan ]; then + chmod 0666 /proc/acpi/ibm/fan || true + echo "Done. If manual control still fails, reboot to apply fan_control=1." +else + echo "Note: /proc/acpi/ibm/fan not found — is the thinkpad_acpi module loaded?" +fi diff --git a/thinkpad-fan/service.luau b/thinkpad-fan/service.luau new file mode 100644 index 00000000..b4b3216f --- /dev/null +++ b/thinkpad-fan/service.luau @@ -0,0 +1,135 @@ +--!nonstrict + +local SNAPSHOT = "fan.snapshot" +local COMMAND = "fan.command" + +local FAN_PATH = "/proc/acpi/ibm/fan" +local POLL_MS = 2500 +local READ_TIMEOUT_MS = 4000 +local WRITE_TIMEOUT_MS = 4000 +local SEP = "__NTF_SEP__" + +local VALID_LEVEL = { + auto = true, + disengaged = true, + ["0"] = true, + ["1"] = true, + ["2"] = true, + ["3"] = true, + ["4"] = true, + ["5"] = true, + ["6"] = true, + ["7"] = true, +} + +local snapshot = { + rpm = 0, + level = "auto", -- auto / disengaged / 0..7 + temp = 0, -- °C + available = false, -- /proc/acpi/ibm/fan readable +} + +local reading = false + +local function shellQuote(s) + return "'" .. tostring(s):gsub("'", "'\\''") .. "'" +end + +local function thermalPath() + local z = noctalia.getConfig("thermal_zone") + if type(z) ~= "string" or z == "" then + z = "thermal_zone0" + end + z = noctalia.string.trim(z):gsub("/+$", ""):match("[^/]+$") or "thermal_zone0" + return "/sys/class/thermal/" .. z .. "/temp" +end + +local function publish() + noctalia.state.set(SNAPSHOT, { + rpm = snapshot.rpm, + level = snapshot.level, + temp = snapshot.temp, + available = snapshot.available, + }) +end + +local function parseFan(content) + if not content or content == "" then + snapshot.available = false + return + end + snapshot.available = true + for line in content:gmatch("[^\n]+") do + local rpm = line:match("^speed:%s*(%d+)") + if rpm then + snapshot.rpm = tonumber(rpm) or 0 + end + local level = line:match("^level:%s*(%S+)") + if level then + snapshot.level = noctalia.string.trim(level):lower() + end + end +end + +local function parseTemp(content) + local raw = content and tonumber(noctalia.string.trim(content)) + if raw then + snapshot.temp = math.floor(raw / 1000 + 0.5) + end +end + +local function readSysfs() + if reading then + return + end + reading = true + local cmd = "cat " .. shellQuote(FAN_PATH) .. " 2>/dev/null; echo " .. SEP + .. "; cat " .. shellQuote(thermalPath()) .. " 2>/dev/null" + local launched = noctalia.runAsync(cmd, function(res) + reading = false + local out = res.stdout or "" + local sepAt = out:find(SEP, 1, true) + parseFan(sepAt and out:sub(1, sepAt - 1) or out) + parseTemp(sepAt and out:sub(sepAt + #SEP) or "") + publish() + end, READ_TIMEOUT_MS) + if not launched then + reading = false + end +end + +noctalia.state.watch(COMMAND, function(cmd) + if type(cmd) ~= "table" or cmd.action ~= "set_level" then + return + end + local lvl = noctalia.string.trim(tostring(cmd.value or "")):lower() + if not VALID_LEVEL[lvl] then + return + end + snapshot.level = lvl -- optimistic; confirmed by the next read + publish() + noctalia.runAsync("echo level " .. lvl .. " > " .. shellQuote(FAN_PATH), function(res) + if res.exitCode ~= 0 then + noctalia.notifyError( + noctalia.tr("notify.fan_error_title"), + noctalia.tr("notify.fan_error_body") + ) + noctalia.log("fan level write failed: " .. (res.stderr or "")) + end + readSysfs() + end, WRITE_TIMEOUT_MS) +end) + +function update() + readSysfs() +end + +function onConfigChanged() + reading = false + readSysfs() +end + +noctalia.setUpdateInterval(POLL_MS) + +publish() +readSysfs() diff --git a/thinkpad-fan/thumbnail.webp b/thinkpad-fan/thumbnail.webp new file mode 100644 index 0000000000000000000000000000000000000000..e9d24623a328ba990a9a72d9c92d824ecfe39fe1 GIT binary patch literal 14288 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 N5YhivxBtKO{{bOC<-q^| literal 0 HcmV?d00001 diff --git a/thinkpad-fan/translations/en.json b/thinkpad-fan/translations/en.json new file mode 100644 index 00000000..cea0345e --- /dev/null +++ b/thinkpad-fan/translations/en.json @@ -0,0 +1,34 @@ +{ + "level": { + "auto": "Auto", + "full": "Full speed" + }, + "tooltip": { + "speed": "Speed", + "level": "Level", + "temperature": "Temperature" + }, + "panel": { + "title": "Fan control", + "auto": "Auto", + "full": "Full" + }, + "notify": { + "fan_error_title": "Fan control", + "fan_error_body": "Could not set the fan level. Check the write permissions (see the plugin README)." + }, + "settings": { + "colorize_by_status": { + "label": "Colorize by status", + "description": "Tint the widget when the fan is forced off or at a manual level" + }, + "allow_popup": { + "label": "Left-click opens the control panel", + "description": "Open the manual fan-level panel by left-clicking the widget" + }, + "thermal_zone": { + "label": "Thermal zone", + "description": "sysfs thermal zone used for the temperature, e.g. thermal_zone0" + } + } +} diff --git a/thinkpad-fan/translations/it.json b/thinkpad-fan/translations/it.json new file mode 100644 index 00000000..59c53efc --- /dev/null +++ b/thinkpad-fan/translations/it.json @@ -0,0 +1,34 @@ +{ + "level": { + "auto": "Automatico", + "full": "Massima velocità" + }, + "tooltip": { + "speed": "Velocità", + "level": "Livello", + "temperature": "Temperatura" + }, + "panel": { + "title": "Controllo ventola", + "auto": "Auto", + "full": "Max" + }, + "notify": { + "fan_error_title": "Controllo ventola", + "fan_error_body": "Impossibile impostare il livello della ventola. Controlla i permessi di scrittura (vedi il README del plugin)." + }, + "settings": { + "colorize_by_status": { + "label": "Colora in base allo stato", + "description": "Cambia colore al widget quando la ventola è forzata spenta o a un livello manuale" + }, + "allow_popup": { + "label": "Il clic sinistro apre il pannello", + "description": "Apre il pannello di controllo manuale della ventola col clic sinistro sul widget" + }, + "thermal_zone": { + "label": "Zona termica", + "description": "Zona termica sysfs usata per la temperatura, es. thermal_zone0" + } + } +} diff --git a/thinkpad-fan/widget.luau b/thinkpad-fan/widget.luau new file mode 100644 index 00000000..6499eda5 --- /dev/null +++ b/thinkpad-fan/widget.luau @@ -0,0 +1,79 @@ +--!nonstrict + +local SNAPSHOT = "fan.snapshot" +local PANEL_ID = "piero-93/thinkpad-fan:panel" + +local snap = noctalia.state.get(SNAPSHOT) or { rpm = 0, level = "auto", temp = 0, available = false } +local isVertical = false + +-- level "0" forces the fans off (danger); any non-auto, non-0 level is a manual override. +local function accent() + if noctalia.getConfig("colorize_by_status") == false then + return "on_surface" + end + if snap.level == "0" then + return "error" + elseif snap.level ~= "auto" then + return "primary" + end + return "on_surface" +end + +local function levelText() + if snap.level == "auto" then + return noctalia.tr("level.auto") + elseif snap.level == "disengaged" then + return noctalia.tr("level.full") + end + return snap.level +end + +local function tooltipRows() + return { + { key = noctalia.tr("tooltip.speed"), value = (snap.rpm or 0) .. " RPM" }, + { key = noctalia.tr("tooltip.level"), value = levelText() }, + { key = noctalia.tr("tooltip.temperature"), value = (snap.temp or 0) .. " °C" }, + } +end + +local function render() + local color = accent() + local children = { ui.glyph({ name = "car-fan", color = color }) } + + if not isVertical then + table.insert(children, ui.label({ + text = (snap.rpm or 0) .. " RPM", + fontWeight = "bold", + color = color, + })) + end + + local container = isVertical and ui.column or ui.row + barWidget.render(container({ gap = 6, align = "center" }, children)) + barWidget.setTooltip(tooltipRows()) +end + +noctalia.state.watch(SNAPSHOT, function(value) + if type(value) == "table" then + snap = value + render() + end +end) + +function update() + isVertical = barWidget.isVertical() + render() +end + +function onConfigChanged() + render() +end + +function onClick() + if noctalia.getConfig("allow_popup") ~= false then + noctalia.togglePanel(PANEL_ID) + end +end + +noctalia.setUpdateInterval(30000) +render() From 27e4c61bddd2c2e0c1679af5877521bfbed69da6 Mon Sep 17 00:00:00 2001 From: Piero-93 Date: Thu, 30 Jul 2026 08:48:02 +0200 Subject: [PATCH 2/3] Finalize for submission: plugin_api, GPL-3.0 LICENSE, thumbnail, README screenshot --- thinkpad-fan/LICENSE | 674 ++++++++++++++++++++++++++++++++++++ thinkpad-fan/README.md | 2 + thinkpad-fan/plugin.toml | 2 +- thinkpad-fan/screenshot.png | Bin 0 -> 26863 bytes thinkpad-fan/thumbnail.webp | Bin 14288 -> 63596 bytes 5 files changed, 677 insertions(+), 1 deletion(-) create mode 100644 thinkpad-fan/LICENSE create mode 100644 thinkpad-fan/screenshot.png diff --git a/thinkpad-fan/LICENSE b/thinkpad-fan/LICENSE new file mode 100644 index 00000000..f288702d --- /dev/null +++ b/thinkpad-fan/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/thinkpad-fan/README.md b/thinkpad-fan/README.md index 9b5b5839..7854a131 100644 --- a/thinkpad-fan/README.md +++ b/thinkpad-fan/README.md @@ -8,6 +8,8 @@ Clicking it opens a panel to pick a fan level — no root needed at runtime. > Ported from the Noctalia v4 (Quickshell/QML) plugin of the same name to the v5 > Luau plugin runtime. +![ThinkPad Fan & Thermal Control widget and panel](screenshot.png) + ## Plugin Manifest id `piero-93/thinkpad-fan`. Three entries share one state snapshot (no diff --git a/thinkpad-fan/plugin.toml b/thinkpad-fan/plugin.toml index 4e29aec9..045e29bc 100644 --- a/thinkpad-fan/plugin.toml +++ b/thinkpad-fan/plugin.toml @@ -1,7 +1,7 @@ id = "piero-93/thinkpad-fan" name = "ThinkPad Fan & Thermal Control" version = "1.0.0" -min_noctalia = "5.0.0" +plugin_api = 3 author = "piero-93" license = "GPL-3.0" icon = "car-fan" diff --git a/thinkpad-fan/screenshot.png b/thinkpad-fan/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..91793da3495df2fdc1947985cb69ecf74b4aeebd GIT binary patch literal 26863 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

)0g}xSdI-UeC*0BZtN@xS<+F&*kZ9 zn;_HnkQZqXtL0yj}$Z#6j2+%-ECOd-hMk)N=>9Oq1iN;x25`TZUU?;L;S^J`UEu(8J`)zAW zf#&>0npcQ_NxSLb_+iVk^q*B2*RpJhpBq+3)Uo6oe-wwx{N1#bE&=g7gM30-?mnFU z6!d}yA;>nEzWsMspijR5oA2BHZGdhcU_fRK*OCYZkp#B{Ubu z+PW`!5cHL^&RVMF2$GXry>a&-sLU3B+b?Ri0P$;i2+$p<68t&CXmmC-4{--{vZl@F z+E(R@ZHvO{VW|SBCO3C$3@N?l1Z`$Bk6H53itz)}mv;#pkg+7AIpWm&Tb~WiZ7jSB zX*YnxT@#-Jue%Q9PS$2LxB2k$9L5MPM0o#(hXy6vzPA2ouF081k*s?c`*n_JpIZj& z`t`Y5x{}L{tAw41>6*{d!&eRZFNt2FjG*z&b_G_{pX?GC^?Rw-SI`ee&7!VO!-{_s z8Fy2VMbg30pwc-UXLTWb zp>Y(_NNiY|t;-nYe@>*cR;47P=m3jUKYB6JBl*%}JyKhTZQ%Fms=8r_g&@CU(}w$A zFKElUh#&MA`f@9WVLy!9=vI-7nB%)uLezlO)LrbwJBEG!>6Sw@ymU1-lwatODDTkT zRbcu&|9s>yNtzD^)%9|Ua4|T&(SLVP{QBzcL`NT)^j09~EQ>`+Kel`2M)?hUH^FqqkkNim%%NE}4lgXTU9f z7M4sLWXAj>xP@mb#w1&QxdO`H$Y!`?b9G9W7C>90=4T_@hrKPLy<2sM<43ldf1NQ~ zHzXr$6EShjXYzv}tGSFH%OHJb(j%23bu~EnAJ#a2&O(FW%dJL#)SAC*J8_~f0)xB) z+So*c76Luf>a7->2alxZwQGFRy9L9zP@?SAMh(tB2HFN(_x;V}Gfy2=YZ4j}4f4(4 zG(W9;_3&CdJ^0a7>PiH@5C3+oq7u1#1?j`59Uva8umiNY4q+HwRV^%CxI#lXE#unJ p2HOB}-!%|0#5sswyzKfZ6hBg{I)vc@`6HtjAX!zJA5!Ka{|A1oh1>uD literal 0 HcmV?d00001 diff --git a/thinkpad-fan/thumbnail.webp b/thinkpad-fan/thumbnail.webp index e9d24623a328ba990a9a72d9c92d824ecfe39fe1..117782cd8e269df5c430676231ab56efc491eb9a 100644 GIT binary patch literal 63596 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 literal 14288 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 N5YhivxBtKO{{bOC<-q^| From 41a6ddacd4d5218d22ab8d9706438d51b309ba50 Mon Sep 17 00:00:00 2001 From: Piero-93 Date: Fri, 31 Jul 2026 07:07:03 +0200 Subject: [PATCH 3/3] Ship en.json only; other locales are handled via Noctalia Translate --- thinkpad-fan/translations/it.json | 34 ------------------------------- 1 file changed, 34 deletions(-) delete mode 100644 thinkpad-fan/translations/it.json diff --git a/thinkpad-fan/translations/it.json b/thinkpad-fan/translations/it.json deleted file mode 100644 index 59c53efc..00000000 --- a/thinkpad-fan/translations/it.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "level": { - "auto": "Automatico", - "full": "Massima velocità" - }, - "tooltip": { - "speed": "Velocità", - "level": "Livello", - "temperature": "Temperatura" - }, - "panel": { - "title": "Controllo ventola", - "auto": "Auto", - "full": "Max" - }, - "notify": { - "fan_error_title": "Controllo ventola", - "fan_error_body": "Impossibile impostare il livello della ventola. Controlla i permessi di scrittura (vedi il README del plugin)." - }, - "settings": { - "colorize_by_status": { - "label": "Colora in base allo stato", - "description": "Cambia colore al widget quando la ventola è forzata spenta o a un livello manuale" - }, - "allow_popup": { - "label": "Il clic sinistro apre il pannello", - "description": "Apre il pannello di controllo manuale della ventola col clic sinistro sul widget" - }, - "thermal_zone": { - "label": "Zona termica", - "description": "Zona termica sysfs usata per la temperatura, es. thermal_zone0" - } - } -}