Skip to content

muglock v0.1.1

Choose a tag to compare

@Petyok Petyok released this 04 Aug 23:12
· 5 commits to main since this release

First round of fixes from actually living with it for a night. The headline ones:

  • Runtime assets never loaded from an installed config. The config is a symlink and Quickshell.shellPath() resolves against it, so ../assets/... pointed outside it — the unlock chirp silently never played and the background dither never rendered. Assets moved inside shell/, and a new test runs the shell through a symlink, which is the coverage that was missing.
  • A failed scan could leave the camera unable to deliver frames until the kernel module was reloaded: the UI cap fired before the kernel-side cap and SIGKILLed sudo, orphaning the process holding the camera, which was then killed mid-capture. Teardown is SIGTERM now, relayed all the way down, and the timeout ladder fires inside-out.
  • A wrong password could lock out the password path entirely — PAM was answered on a property transition that only fires once per process. Answered per message now, with Escape as an abort.
  • The second unlock of a session could hang on the checkmark. Overlays are armed at lock time, a watchdog unlocks without the animation, and an authenticated unlock always wins over animation state.
  • Honest failure messages: "didn't recognize you" only when howdy really looked and did not match. A busy camera, a dark room, a timeout and a broken config each say so.
  • Keyboard layout chip in the password field, loud when the layout is not EN.
  • The background is dithered: the palette spans ~38 blue values across the screen, so an exact 8-bit gradient could only render as ~24 px stripes.

Full list in CHANGELOG.md.

⚠️ RGB camera — can be fooled by a photo. Convenience, not a security boundary.
🤖 100% vibecoded.