Asger Geel Weirsøe f93ca6267c feat: add ahfail-display standalone binary
Implements the ahfail-display binary crate: GTK popup window that spawns
the Nedry sprite and plays the audio clip, with SIGTERM handling, 15-minute
failsafe, deadzone CLI parsing, volume save/restore, and update check.
Adds a build.rs that compiles GResources via glib-compile-resources so the
binary can be built with plain `cargo build` outside of Meson.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-06 11:54:22 +02:00
2025-11-30 21:08:42 +01:00
2025-11-30 21:08:42 +01:00
2025-11-30 21:08:42 +01:00
2026-05-06 09:25:39 +02:00
2026-05-06 09:25:39 +02:00
2025-11-30 20:52:00 +01:00

Ah ah ah, you didn't say the magic word

This gtklock module listens for failed unlock attempts and recreates Dennis Nedrys “ah ah ah” lockout scene from Jurassic Park.

  • Animation: Spawns a looping "Nedry" sprite at a random location on the screen.
  • Audio: Plays the "ah ah ah, you didn't say the magic word" clip.
  • Safety: Sprites avoid overlapping a configurable "deadzone" (e.g., your login box).
  • Performance: Uses pre-warmed audio players for low latency and scaled images to fit any screen.

Requirements

  • Build: Meson, Ninja, Rust (Cargo), GTK+3 development headers.
  • Runtime: gtklock, gstreamer, gst-plugins-base, gst-plugins-good (for audio playback).

Build & Install

  1. Install Dependencies (Arch Linux example):

    sudo pacman -S meson ninja rust gtk3 gstreamer gst-plugins-base gst-plugins-good gst-libav
    
  2. Build:

    meson setup builddir
    meson compile -C builddir
    
  3. Install:

    sudo meson install -C builddir
    

Usage

Run gtklock with the module path:

gtklock -m /usr/lib/gtklock/ahfail-module.so

Arguments

  • --deadzone=X,Y,W,H: Defines a rectangle where sprites will not spawn (e.g., to keep your password field visible).

    gtklock -m ahfail-module.so -- --deadzone=860,440,200,200
    

    (Note the -- separator before module arguments)

  • --audio-uri=URI: Override the default audio clip.

    gtklock -m ahfail-module.so -- --audio-uri=file:///home/user/custom.mp3
    

Development

  • Run Tests: cargo test
  • Benchmarks: cargo test --test benchmarks -- --nocapture
  • Linting: cargo clippy

Customization

To change the default sprite or audio:

  1. Replace files in assets/.
  2. Update assets/ahfail.gresource.xml.
  3. Rebuild with Meson.
Description
gtklock module for going jurassic
Readme AGPL-3.0 2.5 MiB
v0.9.0 Latest
2026-05-07 22:01:02 +02:00
Languages
Rust 79.6%
Shell 10.8%
C 5.2%
Meson 4.4%