Repository navigation
Releases
Releases · valerkaaa/omarchy-shutdown-timer
2.2.1 — a damaged settings file can no longer kill the timer
2.2.1 — a damaged settings file can no longer kill the timer
A hardening release: the daemon survives whatever is written into its state directory, and a real suspend test writes a real log.
Fixed
- A damaged
settings.jsonno longer kills the daemon. Numeric settings
land straight in$(( )), and a bare name there is fatal underset -u: a
hand-written"notifyEarlyMins": "abc"ended the process on the next reload
(abc: unbound variable), and the widget restarted it straight into the same
crash — with a pending shutdown lost. Every numeric setting is now validated
and clamped to the range the manifest andService.qmlalready document
(early warning, overlay seconds, snooze step, snooze limit, battery
threshold): a string falls back to the default, an absurd number is clamped
instead of obeyed.tests/test_state_files.shdamages all three state files
(settings, state, schedules) and proves the daemon survives the damage, keeps
its documented ranges, and still arms, snoozes and cancels afterwards. suspend/hibernateno longer fail silently: if neithersystemctlnor the
Omarchy helper works (no resume device, no logind seat), the log says so
instead of the timer just going back to IDLE.
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.
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.
2.1.0 — icon pass
2.0.0 — always cancellable
2.0.0 — always cancellable, schedule, i18n, dry run
