| Age | Commit message (Collapse) | Author | Files | Lines |
|
GNU ls follows a symlink to a directory with or without a trailing slash, so
both forms count the packages correctly. Only -d lists the link itself.
The original claim came from a count taken where the path did not resolve at
all, and it reached the spec, the plan and two commit messages. The count was
always right; the reason given for it was not, and a comment that teaches the
next reader something false is worse than no comment.
Records the real trap in its place: ls aliased to a long format counts its
"total" header as a package.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
|
Two new cards and three fixes to existing ones.
The network card reads the interface byte counters directly and keeps its
own history, one sample per pixel column, so the chart never interpolates.
Both series share one autoscale: drawn independently, a 200kB/s upload would
look like a 40MB/s download. The public address moves from the old config's
5 minute poll to 30 minutes, since a residential address is stable for days.
The slackware card takes its numbers from a sampler rather than the draw
hook, and stores epochs instead of reconstructed dates. The shell function it
replaces parses ls -l output and hardcodes the year, which breaks every
January and on any file older than six months.
Records two things found while checking real values against the design:
/var/log/packages is a symlink, so counting it without a trailing slash
reports 1 package rather than 2817, and the ChangeLog mtime on this machine
currently reads in the future, so the age arithmetic has to survive a
negative difference.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
|
Fix the conky.conf.in comment to name all three samplers and the README
to say the cache sampler runs every 15 minutes. Rewrite the disks layout
comment to match per_row = n (no wrapping), drop the stale "seventeenth
bar" note, and record in the spec that the cache age marker is
deliberately deferred with the epoch-line upgrade path.
|
|
Thresholds colour every quantity that has a comfortable range: ok below
the first, warning between, critical above. 25/75 for filesystems, cache
and CPU load; per-sensor pairs for temperatures, because 70C is
unremarkable on a CPU and alarming on an NVMe.
The per-core row becomes an equaliser: sixteen vertical bars rising from
a baseline, coloured by load. Disks become idea2's rings, an icon at the
centre and the arc coloured by usage. Cache highlights its largest
subdirectory.
This needs a `warning` role the dashboard does not currently expose.
udt-palette already resolves it in every scheme, mapping yellow (or
Nord's aurora_yellow) to it globally, and other generators already read
it, so adding it is one word in gen_conky's role tuple plus a
placeholder and a palette line. No scheme file changes.
Three new primitives in lib/card.lua rather than per-widget drawing:
bar, ring, and a threshold helper so all four cards agree on the rule
instead of each re-deriving it.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
|
Four cards: CPU/RAM with every temperature, GPU, filesystems, and the
user cache. Three were asked for; cache became its own card because it
is a different refresh cycle and sharing the disks card would have made
the densest card in the dashboard.
Two findings that shaped it, both from probing the hardware rather than
assuming:
- The Arc B580 exposes no utilisation figure. The xe driver has no
gpu_busy_percent, intel_gpu_top refuses the device outright, and
gputop prints per-process rows with ANSI escapes, which is not an
interface to build on. The card shows temperatures and fan speed and
no load bar, rather than inventing a number.
- /data is on a spinning disk with no hwmon chip, so there is no sda
temperature to show. Reading SMART would need smartctl as root and
would spin up a sleeping disk each poll.
Also: the four NFS mounts are two filesystems behind two servers, so
showing all four printed every number twice. One mount per server.
Both new samplers follow the weather fetch's cache-and-read pattern,
which exists precisely so an unreachable NFS server costs a stale cache
instead of freezing the draw hook.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
|
The comment claimed a bad key returns HTTP 200 with an error body, so
the status code alone proves nothing. Measured against the live API,
that is wrong: a bad key returns 401 and an unknown city 404, and with
curl -f both fail at curl without the .cod check ever running.
The claim came from the polybar script, which ran curl WITHOUT -f and so
genuinely did receive error bodies with a success exit. The check was
ported but not the reason for it. It still earns its place behind -f,
for a 200 whose body is not usable weather, and the comment now says
that instead of something false. The spec carried the same wrong
sentence and is corrected too.
Separately, the cache landed at 644 in a directory where every other
generated file is 600, and the response carries the configured city and
its coordinates. A umask before the write puts it at 600 without a
window where it is briefly readable.
The .cod discrepancy was found by the Task 6 implementer, which noticed
the bad-key test produced a different message than the plan predicted
and said so rather than reporting the expected text as achieved.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
|
One vertical card merging idea1.png's two: conditions on top, a
sunrise-to-sunset arc at the bottom, with the times at the arc's ends
behind sunrise/sunset glyphs.
Decisions worth recording rather than rediscovering:
- The fetch runs from `${execi}` in conky.text, not a systemd timer, so
refresh is tied to the dashboard's lifetime. conky.text is empty in
this config because Cairo covers it, so whether execi fires at all was
probed rather than assumed: it does, even when the command prints
nothing.
- Inconsolata Nerd Font already carries the Weather Icons range and the
two sunrise/sunset glyphs, so no new font. Confirmed by rendering the
codepoints and looking at them; an fc-list query alone had wrongly
reported them missing, and a missing glyph in conky is an invisible
blank rather than an error.
- The cache is written atomically, since the widget reads it on an
unrelated 2s cadence and would otherwise parse a half-written file.
- A bad key returns HTTP 200 with a JSON error body, so the fetch checks
.cod before replacing the cache, and never overwrites good data with
an error.
- Missing and stale states draw the normal card chrome with a notice. An
empty cell was rejected: it looks exactly like a crashed widget.
Also ignores .superpowers/, the brainstorming session directory.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
|
A polybar backup script for OWM turned up, which beats the weather.com
scraper: it has a working condition mapping. Port the domain knowledge,
not the code.
Worth keeping: the OWM condition-id ranges, day/night selection against
sys.sunrise/sys.sunset, and the Beaufort wind thresholds. Becomes a
table in data.lua.
Not portable: polybar %{F}/%{T} format tokens, hardcoded hex (UDT roles
replace them), bc conversions (Lua arithmetic), one-line output (a
card). So the script shrinks to curl-and-cache and Lua does the rest.
The reference script hardcodes a live API key plus city and country. The
key and location move to ~/.config/udt/weather.env, outside the repo,
same reasoning as roles.conf. Nothing carries a key in-repo, and
weather.env is gitignored so a stray copy cannot be staged.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
|
Conky dashboard drawn with Cairo from Lua, on a Hyprland special
workspace. Replaces UDT's variables-based conky.conf.in.
Platform facts verified before fixing the design, since each one
invalidates a common approach:
- Cairo on Wayland needs conky_surface(). The usual
cairo_xlib_surface_create idiom gets a nil drawable and visual under
out_to_wayland, so every tutorial using it is wrong here.
- own_window_type='normal' makes Conky a real toplevel that a Hyprland
windowrule can place; 'desktop' is a layer-surface and cannot be
assigned to a workspace.
- Cairo output covers conky.text, so conky.text stays empty.
Layout is a table of grid cells at the top of dashboard.lua, so
reordering widgets is one edit and the same table works on both
monitors. The 2560x1600 mockup's vertical stack does not fit the
2560x1080 primary, which is what motivates cells over pixels.
hwmon glob-by-name is carried over from the old config deliberately:
fixed indices drift across kernel reorders and silently read the wrong
chip.
v1 is one clock card end to end. Widgets are additive after that.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|