Repository navigation
2.2.0 — the daemon cannot be killed by a malformed command
2.2.0 — the daemon cannot be killed by a malformed command
A hardening pass after the review, plus a bar mark optically matched to its neighbours and screenshots generated rather than hand-made.
Hardening pass after the review: the daemon can no longer be killed by a
malformed command, and the bar mark is optically matched to its neighbours.
Added
- The README screenshots are generated, not hand-made.
tools/screenshots.sh
captures every surface (five bar states, popup, overlay, vertical bar) live on
both themes and buildsstates.giffrom them.tools/card_bbox.pyfinds a
card by its own frame, andtools/frame_check.pyproves the finished crop
really frames it — a capture in the wrong coordinate space still looks fine
and was shipping the desktop behind the popup. One capture is cut, never two,
so the measured box and the pixels cannot drift apart mid-shot.
tools/acceptance.shruns the same check on the committed images.
Fixed
- A malformed control line no longer kills the daemon. The control channel
is a plain file any process in the session can write, and the daemon used to
evaluate it unchecked:set:abc:poweroffreached$((abc * 60))and, under
set -u, ended the process — taking the user's scheduled shutdown with it.
The daemon now validates every command (minutes 1..1440, action whitelist,
HH:MMrange, snooze count, schedule id charset and weekday 1..7) and logs
the rejection instead of dying. Covered bytests/test_input.sh. - A schedule id with a regex metacharacter (
.*) was used as agrep
pattern on removal and deleted every schedule; ids are now plain
[0-9A-Za-z]+. - The state badge cut itself out in black, which read as dirt around the
mark on a light bar. The badge is now outlined in the surface it is painted
on (bar or popup background), so it reads as a clean notch on both themes. - Deprecated QML signal-handler parameters (
onChanged:/onModified:using
the injectedvalue/code) replaced with formal parameters; the Dropdown
used a non-existentonValueChangedand is now on its realchanged.
Changed
- Bar mark sized by painted ink, not by box. The Nerd Font glyphs beside
the widget paint 11–12 px inside the 16 px icon canvas; the mark now uses the
same canvas and paints ~12 px, so it no longer overpowers the row. The stroke
and the state badge scale with the slot, and the widget takes exactly one
27 px icon slot when idle (the label gutter only exists while the countdown
is on screen). Shape.CurveRendererfor the mark: the ring is anti-aliased instead of
stair-stepped at bar size.
Install or update
omarchy plugin add https://github.com/valerkaaa/omarchy-shutdown-timer --enable
# or
omarchy plugin update honor.shutdown-timerFull notes in CHANGELOG.md.
