[shelly](fix): support shelly v3 (#182)
* updates for shelly v3 * new major for shelly v3 * fix: default option value
This commit is contained in:
+20
-15
@@ -4,36 +4,41 @@ Shelly is a plugin that uses the [Shelly Arch Package Manager](https://github.co
|
|||||||
|
|
||||||
## Plugin
|
## Plugin
|
||||||
|
|
||||||
| Field | Value |
|
| Field | Value |
|
||||||
| ------- | --------------------------------------- |
|
| ------- | ---------------------------------------------- |
|
||||||
| ID | `joshuaslate/shelly` |
|
| ID | `joshuaslate/shelly` |
|
||||||
| Entries | Service: `update_poller`; bar widget: `shelly` |
|
| Entries | Service: `update_poller`; bar widget: `shelly` |
|
||||||
|
|
||||||
## Requirements
|
## Requirements
|
||||||
|
|
||||||
Install the Shelly Arch Package Manager from the [AUR](https://aur.archlinux.org/packages/shelly). The `shelly`
|
Install the Shelly Arch Package Manager (>= v3.0.0) from the [AUR](https://aur.archlinux.org/packages/shelly). The `shelly`
|
||||||
command must be available on `PATH`.
|
command must be available on `PATH`.
|
||||||
|
|
||||||
Test that it works by running `shelly check-updates` in a terminal. If it returns a list of packages, then it is working correctly.
|
Verify the correct version is installed by running `shelly --version` in a terminal. It should return a version number >= 3.0.0.
|
||||||
|
|
||||||
|
Test that it works by running `shelly list updates all` in a terminal. If it returns a list of packages, then it is working correctly.
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
Add the `shelly` widget from Noctalia's widget picker. It periodically checks
|
Add the `shelly` widget from Noctalia's widget picker. It periodically checks
|
||||||
for available Arch package updates and shows their count and names in the bar
|
for available Arch package updates and shows their count and names in the bar
|
||||||
tooltip. Click behavior is configurable: open Shelly's graphical interface,
|
tooltip. Click behavior is configurable: open Shelly's graphical interface,
|
||||||
run `shelly upgrade-all` in a terminal, or do nothing.
|
run `shelly upgrade all` in a terminal, or do nothing.
|
||||||
|
|
||||||
The `update_poller` service owns the periodic checks and can notify you when
|
The `update_poller` service owns the periodic checks and can notify you when
|
||||||
new updates become available.
|
new updates become available.
|
||||||
|
|
||||||
## Settings
|
## Settings
|
||||||
|
|
||||||
| Setting | Type | Default | Description |
|
| Setting | Type | Default | Description |
|
||||||
| ---------------------- | -------- | ------------ | -------------------------------------------------------------------------------------------------- |
|
| ---------------------- | -------- | ----------------- | -------------------------------------------------------------------------------------------------------- |
|
||||||
| `interval` | `int` | `300` | The interval (in seconds) between update checks |
|
| `interval` | `int` | `300` | The interval (in seconds) between update checks |
|
||||||
| `notify` | `bool` | `false` | Whether or not you want to receive notifications when there are new package updates available |
|
| `notify` | `bool` | `false` | Whether or not you want to receive notifications when there are new package updates available |
|
||||||
| `color` | `color` | `on_surface` | The text color for the bar widget |
|
| `color` | `color` | `on_surface` | The text color for the bar widget |
|
||||||
| `glyph_color` | `color` | `on_surface` | The color of the glyph on the bar widget |
|
| `bar_label` | `select` | `count_and_label` | The label to display in the bar widget when there are updates. Options: `count_only`, `count_and_label`. |
|
||||||
| `glyph` | `glyph` | `package` | Bar widget icon. |
|
| `bar_font_size` | `int` | `14` | The size of the font displayed in the bar widget |
|
||||||
| `click_action` | `select` | `open_gui` | The action to perform when the bar widget is clicked. Options: `open_gui`, `open_updater`, `none`. |
|
| `glyph_color` | `color` | `on_surface` | The color of the glyph on the bar widget |
|
||||||
| `hide_when_up_to_date` | `bool` | `false` | Whether or not to hide the bar widget when there are no package updates available |
|
| `glyph` | `glyph` | `package` | Bar widget icon |
|
||||||
|
| `glyph_size` | `int` | `14` | The size of the glyph in the bar widget |
|
||||||
|
| `click_action` | `select` | `open_gui` | The action to perform when the bar widget is clicked. Options: `open_gui`, `open_updater`, `none`. |
|
||||||
|
| `hide_when_up_to_date` | `bool` | `false` | Whether or not to hide the bar widget when there are no package updates available |
|
||||||
|
|||||||
+26
-1
@@ -1,7 +1,7 @@
|
|||||||
id = "joshuaslate/shelly"
|
id = "joshuaslate/shelly"
|
||||||
name = "Shelly"
|
name = "Shelly"
|
||||||
icon = "package"
|
icon = "package"
|
||||||
version = "1.0.1"
|
version = "2.0.0"
|
||||||
plugin_api = 3
|
plugin_api = 3
|
||||||
license = "MIT"
|
license = "MIT"
|
||||||
author = "joshuaslate"
|
author = "joshuaslate"
|
||||||
@@ -47,6 +47,24 @@ entry = "widget.luau"
|
|||||||
description_key = "settings.color.description"
|
description_key = "settings.color.description"
|
||||||
default = "on_surface"
|
default = "on_surface"
|
||||||
|
|
||||||
|
[[widget.setting]]
|
||||||
|
key = "bar_label"
|
||||||
|
type = "select"
|
||||||
|
label_key = "settings.bar_label.label"
|
||||||
|
description_key = "settings.bar_label.description"
|
||||||
|
default = "count_and_label"
|
||||||
|
options = [
|
||||||
|
{ value = "count_and_label", label_key = "settings.bar_label.options.count_and_label" },
|
||||||
|
{ value = "count_only", label_key = "settings.bar_label.options.count_only" }
|
||||||
|
]
|
||||||
|
|
||||||
|
[[widget.setting]]
|
||||||
|
key = "bar_font_size"
|
||||||
|
type = "int"
|
||||||
|
label_key = "settings.bar_font_size.label"
|
||||||
|
description_key = "settings.bar_font_size.description"
|
||||||
|
default = 14
|
||||||
|
|
||||||
[[widget.setting]]
|
[[widget.setting]]
|
||||||
key = "glyph"
|
key = "glyph"
|
||||||
type = "glyph"
|
type = "glyph"
|
||||||
@@ -61,6 +79,13 @@ entry = "widget.luau"
|
|||||||
description_key = "settings.glyph_color.description"
|
description_key = "settings.glyph_color.description"
|
||||||
default = "on_surface"
|
default = "on_surface"
|
||||||
|
|
||||||
|
[[widget.setting]]
|
||||||
|
key = "glyph_size"
|
||||||
|
type = "int"
|
||||||
|
label_key = "settings.glyph_size.label"
|
||||||
|
description_key = "settings.glyph_size.description"
|
||||||
|
default = 14
|
||||||
|
|
||||||
[[widget.setting]]
|
[[widget.setting]]
|
||||||
key = "click_action"
|
key = "click_action"
|
||||||
type = "select"
|
type = "select"
|
||||||
|
|||||||
+9
-2
@@ -18,7 +18,7 @@ noctalia.setUpdateInterval(updateInterval)
|
|||||||
function refresh()
|
function refresh()
|
||||||
isPolling = true
|
isPolling = true
|
||||||
|
|
||||||
noctalia.runAsync("shelly check-updates --json", function(result)
|
noctalia.runAsync("shelly list-updates all --json", function(result)
|
||||||
isPolling = false
|
isPolling = false
|
||||||
|
|
||||||
if result.exitCode ~= 0 then
|
if result.exitCode ~= 0 then
|
||||||
@@ -28,7 +28,14 @@ function refresh()
|
|||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
local decoded = noctalia.json.decode(result.stdout)
|
local stdout = result.stdout
|
||||||
|
|
||||||
|
-- Shelly's JSON output may leak stderr into stdout. Remove stderr value to ensure valid JSON.
|
||||||
|
if result.stderr ~= "" then
|
||||||
|
stdout = stdout:gsub(result.stderr, "")
|
||||||
|
end
|
||||||
|
|
||||||
|
local decoded = noctalia.json.decode(stdout)
|
||||||
if type(decoded) ~= "table" then
|
if type(decoded) ~= "table" then
|
||||||
updateError = noctalia.tr("bar.tooltip.error.decode_json")
|
updateError = noctalia.tr("bar.tooltip.error.decode_json")
|
||||||
noctalia.state.set("update_error", updateError)
|
noctalia.state.set("update_error", updateError)
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
"tooltip": {
|
"tooltip": {
|
||||||
"aur_title": "AUR",
|
"aur_title": "AUR",
|
||||||
"error": {
|
"error": {
|
||||||
"decode_json": "Failed to decode output from `shelly check-updates --json`"
|
"decode_json": "Failed to decode output from `shelly list-updates all --json`"
|
||||||
},
|
},
|
||||||
"flatpak_title": "Flatpak",
|
"flatpak_title": "Flatpak",
|
||||||
"no_updates": "System is up to date",
|
"no_updates": "System is up to date",
|
||||||
@@ -30,6 +30,18 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"settings": {
|
"settings": {
|
||||||
|
"bar_font_size": {
|
||||||
|
"description": "The font size of the bar text.",
|
||||||
|
"label": "Bar Font Size"
|
||||||
|
},
|
||||||
|
"bar_label": {
|
||||||
|
"description": "Label to display in the bar.",
|
||||||
|
"label": "Bar Label",
|
||||||
|
"options": {
|
||||||
|
"count_only": "Count Only (e.g., 5)",
|
||||||
|
"count_and_label": "Count and Label (e.g., 5 Updates)"
|
||||||
|
}
|
||||||
|
},
|
||||||
"click_action": {
|
"click_action": {
|
||||||
"description": "What happens when you click on the bar.",
|
"description": "What happens when you click on the bar.",
|
||||||
"label": "Click Action",
|
"label": "Click Action",
|
||||||
@@ -51,6 +63,10 @@
|
|||||||
"description": "The color of the glyph.",
|
"description": "The color of the glyph.",
|
||||||
"label": "Glyph Color"
|
"label": "Glyph Color"
|
||||||
},
|
},
|
||||||
|
"glyph_size": {
|
||||||
|
"description": "The size of the glyph.",
|
||||||
|
"label": "Glyph Size"
|
||||||
|
},
|
||||||
"hide_when_up_to_date": {
|
"hide_when_up_to_date": {
|
||||||
"description": "Whether to hide the bar when there are no updates available.",
|
"description": "Whether to hide the bar when there are no updates available.",
|
||||||
"label": "Hide When Up-to-Date"
|
"label": "Hide When Up-to-Date"
|
||||||
|
|||||||
+6
-3
@@ -2,10 +2,13 @@
|
|||||||
local glyph = noctalia.getConfig("glyph")
|
local glyph = noctalia.getConfig("glyph")
|
||||||
local color = noctalia.getConfig("color") or "on_surface"
|
local color = noctalia.getConfig("color") or "on_surface"
|
||||||
local glyphColor = noctalia.getConfig("glyph_color") or color
|
local glyphColor = noctalia.getConfig("glyph_color") or color
|
||||||
|
local glyphSize = noctalia.getConfig("glyph_size") or 14
|
||||||
local updateError = noctalia.state.get("update_error")
|
local updateError = noctalia.state.get("update_error")
|
||||||
local notifyOnNewUpdates = noctalia.getConfig("notify")
|
local notifyOnNewUpdates = noctalia.getConfig("notify")
|
||||||
local hideWhenUpToDate = noctalia.getConfig("hide_when_up_to_date")
|
local hideWhenUpToDate = noctalia.getConfig("hide_when_up_to_date")
|
||||||
local click_action = noctalia.getConfig("click_action") or "open_gui"
|
local click_action = noctalia.getConfig("click_action") or "open_gui"
|
||||||
|
local barLabelType = noctalia.getConfig("bar_label") or "count_and_label"
|
||||||
|
local barFontSize = noctalia.getConfig("bar_font_size") or 14
|
||||||
local updates = noctalia.state.get("updates") or { Packages = {}, Aur = {}, Flatpak = {} }
|
local updates = noctalia.state.get("updates") or { Packages = {}, Aur = {}, Flatpak = {} }
|
||||||
|
|
||||||
local function countUpdates(scopedUpdates)
|
local function countUpdates(scopedUpdates)
|
||||||
@@ -71,8 +74,8 @@ local function render()
|
|||||||
local count = countUpdates(updates)
|
local count = countUpdates(updates)
|
||||||
|
|
||||||
barWidget.render(container({ gap = 6, align = "center", visible = not hideWhenUpToDate or count > 0 }, {
|
barWidget.render(container({ gap = 6, align = "center", visible = not hideWhenUpToDate or count > 0 }, {
|
||||||
ui.glyph({ name = glyph, size = 14, color = glyphColor, visible = glyph ~= "" }),
|
ui.glyph({ name = glyph, size = glyphSize, color = glyphColor, visible = glyph ~= "" }),
|
||||||
ui.label({ text = noctalia.trp("bar.text.updates", count), color = color }),
|
ui.label({ text = barLabelType == "count_only" and string.format("%d", count) or noctalia.trp("bar.text.updates", count), color = color, fontSize = barFontSize }),
|
||||||
}))
|
}))
|
||||||
|
|
||||||
updateTooltip(count)
|
updateTooltip(count)
|
||||||
@@ -109,7 +112,7 @@ function onClick()
|
|||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
noctalia.runInTerminal(cmd .. " upgrade-all")
|
noctalia.runInTerminal(cmd .. " upgrade all")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user