aboutsummaryrefslogtreecommitdiffstats
path: root/lib/data.lua
diff options
context:
space:
mode:
authorDanilo M. <danix@danix.xyz>2026-09-30 19:56:47 +0200
committerDanilo M. <danix@danix.xyz>2026-09-30 19:56:47 +0200
commite55896ce41d6165105671da5b6f33813106ef1b8 (patch)
tree082c5a7dffda63bbe740363fb35ca6dd1927b5ab /lib/data.lua
parent9f6414838d4fabc174bb193f34225de8d9fc8079 (diff)
downloadconky-theme-udt-e55896ce41d6165105671da5b6f33813106ef1b8.tar.gz
conky-theme-udt-e55896ce41d6165105671da5b6f33813106ef1b8.zip
feat: add an updates card showing nvtable's package table
Moves the nvchecker/nvtable table the login shell printed onto the dashboard, as a wide card at the bottom centre. bin/updates-sample.sh caches `nvtable -C -E` every ten minutes and starts nvchecker, fully detached, at most every 30 minutes. The widget parses the cache and colours it in the board's language: installed behind upstream is critical, a shipped .info behind is a warning, with nvtable's status dots per row and a legend on the bottom line. The mouse wheel scrolls rows that do not fit. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Diffstat (limited to 'lib/data.lua')
-rw-r--r--lib/data.lua39
1 files changed, 39 insertions, 0 deletions
diff --git a/lib/data.lua b/lib/data.lua
index c66aa42..4b31f43 100644
--- a/lib/data.lua
+++ b/lib/data.lua
@@ -631,4 +631,43 @@ function M.immich_parse(text)
return out
end
+-- nvtable's plain table (`nvtable -C -E`), as bin/updates-sample.sh caches it:
+--
+-- [personal] foo-bin 1.14.9 -> 1.14.9 !! ~ 1.14.10
+-- <repo> <name> <installed> -> <shipped> <marker> [~] [upstream]
+--
+-- followed by a summary line with the counts. The marker is '!!' (installed
+-- behind upstream), 'ok' or '-' (not installed); '~' flags the shipped .info
+-- as behind. Upstream appears only when shipped does not already show it.
+--
+-- Returns the rows as { repo, name, installed, shipped, upstream, behind,
+-- bump } with '--' turned into nil, plus .upgrade/.bump/.current/.missing
+-- counts, or nil when the text has neither rows nor a summary.
+function M.nvtable_parse(text)
+ if type(text) ~= 'string' then return nil end
+ local out, seen = {}, false
+ local function v(s) return s ~= '--' and s or nil end
+ for line in text:gmatch('[^\n]+') do
+ local repo, name, inst, ship, rest =
+ line:match('^%s*%[(.-)%]%s+(%S+)%s+(%S+)%s+%->%s+(%S+)%s*(.*)$')
+ if repo then
+ local mark, tail = rest:match('^(%S*)%s*(.*)$')
+ local bump = tail:match('^~') ~= nil
+ if bump then tail = tail:gsub('^~%s*', '') end
+ out[#out + 1] = {
+ repo = v(repo), name = name, installed = v(inst), shipped = v(ship),
+ upstream = tail:match('^(%S+)'), behind = mark == '!!', bump = bump,
+ }
+ seen = true
+ elseif line:match('to upgrade') then
+ out.upgrade = tonumber(line:match('(%d+) to upgrade'))
+ out.bump = tonumber(line:match('(%d+) repos? to bump'))
+ out.current = tonumber(line:match('(%d+) current'))
+ out.missing = tonumber(line:match('(%d+) not installed')) or 0
+ seen = true
+ end
+ end
+ return seen and out or nil
+end
+
return M