aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--README.md2
-rw-r--r--conky.conf.in5
-rw-r--r--docs/superpowers/specs/2026-09-17-system-widgets-design.md12
-rw-r--r--test/test_data.lua2
-rw-r--r--widgets/disks.lua7
5 files changed, 21 insertions, 7 deletions
diff --git a/README.md b/README.md
index bc8776c..f8f642f 100644
--- a/README.md
+++ b/README.md
@@ -83,7 +83,7 @@ three `${execi}` entries, even though that block renders nothing under Cairo.
${execi 60 ~/.config/conky/bin/disks-sample.sh}
${execi 900 ~/.config/conky/bin/cache-sample.sh}
-The disks sampler runs once a minute; the cache one every 15, because `du -sh
+The disks sampler runs once a minute; the cache one every 15 minutes, because `du -sh
~/.cache` walks the tree and takes about 100ms warm, which is fine on a slow
cycle and unthinkable on the 2-second draw. Tying them to conky means nothing
samples while the dashboard is down.
diff --git a/conky.conf.in b/conky.conf.in
index 073fd80..cc03a28 100644
--- a/conky.conf.in
+++ b/conky.conf.in
@@ -49,6 +49,7 @@ conky.config = {
-- Cairo output covers conky.text, so nothing here is visible. The execi still
-- fires on schedule: verified with a probe config whose only text was an execi
--- producing no output. This is what refreshes the weather cache, and tying it
--- to conky means nothing fetches while the dashboard is down.
+-- producing no output. This is what runs the weather, disks and cache
+-- samplers, and tying it to conky means nothing fetches while the dashboard is
+-- down.
conky.text = [[${execi 900 ~/.config/conky/bin/weather-fetch.sh}${execi 60 ~/.config/conky/bin/disks-sample.sh}${execi 900 ~/.config/conky/bin/cache-sample.sh}]]
diff --git a/docs/superpowers/specs/2026-09-17-system-widgets-design.md b/docs/superpowers/specs/2026-09-17-system-widgets-design.md
index 9fee4a5..cd24ee0 100644
--- a/docs/superpowers/specs/2026-09-17-system-widgets-design.md
+++ b/docs/superpowers/specs/2026-09-17-system-widgets-design.md
@@ -239,6 +239,18 @@ crashed widget.
beside the heading, so an unreachable NFS server or a dead sampler is visible
rather than silently showing yesterday's numbers.
+> **Implementation note (deferred): the age marker is not drawn.** The
+> requirement above is deliberately unimplemented in this wave. The cache
+> formats and their parser fixtures are fixed by the plan, and the widgets
+> already implement the absent-file case (`no cache data` plus the sampler
+> name). Adding the marker means either embedding an epoch timestamp in each
+> cache file, which would disturb every fixture and the two parsers, or
+> stamping the file's mtime, which conky's Lua cannot stat: `lfs` is not
+> available in the environment. The accepted path when it is picked up is an
+> extra epoch line that the parser learns to skip, leaving the existing fields
+> and fixtures untouched; the widget then compares it against the sampling
+> interval and draws a dim age marker beside the heading.
+
## Tests
`test/test_data.lua` extends with fixtures under `test/fixtures/`:
diff --git a/test/test_data.lua b/test/test_data.lua
index 71baef0..a90413b 100644
--- a/test/test_data.lua
+++ b/test/test_data.lua
@@ -70,7 +70,7 @@ assert(cores[1].idle == 1058428, 'core 0 idle, got ' .. tostring(cores[1].idle))
assert(cores[2].total == 1066406, 'core 1 total, got ' .. tostring(cores[2].total))
-- The aggregate 'cpu ' line must NOT be counted as a core: it would draw a
--- seventeenth bar showing the average, which looks like a real core.
+-- bar for the aggregate line showing the average, which looks like a real core.
for i, c in ipairs(cores) do
assert(c.total < 2000000, 'entry ' .. i .. ' looks like the aggregate line')
end
diff --git a/widgets/disks.lua b/widgets/disks.lua
index aff3e5b..c5fec1e 100644
--- a/widgets/disks.lua
+++ b/widgets/disks.lua
@@ -60,9 +60,10 @@ function M.draw(cr, rect, colors)
local top = inner.y + label_size * 2.2
local avail_h = (inner.y + inner.h) - top
- -- Lay the rings out in a row, wrapping if the card is narrow. Below the
- -- radius where a ring reads, fall back to labelled bars rather than drawing
- -- a row of illegible dots.
+ -- All rings share one row: the cell width shrinks as mounts are added and
+ -- the ring radius follows it, so the layout never wraps. Below the radius
+ -- where a ring reads, fall back to labelled bars rather than drawing a row
+ -- of illegible dots.
local n = #fs
local per_row = n
local cell_w = inner.w / per_row