diff options
| author | Danilo M. <danix@danix.xyz> | 2026-09-30 19:56:47 +0200 |
|---|---|---|
| committer | Danilo M. <danix@danix.xyz> | 2026-09-30 19:56:47 +0200 |
| commit | e55896ce41d6165105671da5b6f33813106ef1b8 (patch) | |
| tree | 082c5a7dffda63bbe740363fb35ca6dd1927b5ab /lib/data.lua | |
| parent | 9f6414838d4fabc174bb193f34225de8d9fc8079 (diff) | |
| download | conky-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.lua | 39 |
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 |
