commit 8c08e33ba068168db0a44c5d71d4b2cc78454ae9 Author: Asger Geel Weirsøe Date: Sun Nov 30 20:52:00 2025 +0100 initial commit diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..c9eb95f --- /dev/null +++ b/readme.md @@ -0,0 +1,65 @@ +# Ah ah ah, you didn't say the magic word + +This `gtklock` module listens for failed unlock attempts and recreates Dennis Nedry’s “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):** + ```bash + sudo pacman -S meson ninja rust gtk3 gstreamer gst-plugins-base gst-plugins-good gst-libav + ``` + +2. **Build:** + ```bash + meson setup builddir + meson compile -C builddir + ``` + +3. **Install:** + ```bash + sudo meson install -C builddir + ``` + +## Usage + +Run `gtklock` with the module path: + +```bash +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). + ```bash + gtklock -m ahfail-module.so -- --deadzone=860,440,200,200 + ``` + *(Note the `--` separator before module arguments)* + +* `--audio-uri=URI`: Override the default audio clip. + ```bash + 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.