A high-performance screen annotation and drawing overlay for the Hyprland Wayland compositor. Written in C++ and Qt6, it uses wlr-layer-shell to create a transparent, low-latency overlay that integrates seamlessly with your desktop.
- Native Wayland Integration: Utilizes the
wlr-layer-shellprotocol for a non-interfering, transparent overlay. - Versatile Drawing Tools: Geometric shapes (lines, arrows, rectangles, ellipses, rhombuses) with magnetic 1:1 aspect-ratio snapping, alongside solid, highlighter, dashed, and eraser brushes.
- Ephemeral Ink (Neon Glow): Temporary strokes that pulse while drawing and automatically fade away after 3 seconds of inactivity.
- High Performance: Memory-efficient region-snapshot architecture for Undo/Redo that limits RAM usage to modified pixels only.
hypr-annotate is designed to run as a background daemon for zero-latency activation. Add the following to your ~/.config/hypr/hyprland.conf to start the daemon and configure keybinds for showing and hiding the canvas:
# Start the daemon on login
exec-once = hypr-annotate
# Show the drawing canvas (e.g., using Super + A)
bind = SUPER, A, exec, hypr-annotate --show
# Hide the drawing canvas (e.g., using Super + Shift + A)
bind = SUPER, SHIFT, A, exec, hypr-annotate --hide
# Toggle the drawing canvas (e.g., using Super + T)
bind = SUPER, T, exec, hypr-annotate --toggleNote: Clicking the "HIDE" button in the application's toolbox also dismisses the overlay but leaves the daemon running, preserving your canvas state in memory. You can safely hide and show the canvas without losing your work.
Here is the updated section for your README.md. It highlights nix run and nix build for standard usage, while keeping nix develop available for compiling from source during development.
A flake.nix is provided for a fully reproducible environment containing all required Qt6 and Wayland dependencies.
Run directly:
nix run .
Build the package:
nix build .
# The compiled binary will be symlinked to ./result/bin/hypr-annotate
For Development: If you want to modify the source code, drop into the development shell to access the toolchain:
nix develop
cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=Release
cmake --build build
./build/hypr-annotate
Dependencies: cmake, ninja, pkg-config, gcc/clang, qt6-base, qt6-wayland, qt6-declarative, qt6-svg, and layer-shell-qt.
cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=Release
cmake --build build
./build/hypr-annotate
- Region selection screenshot integration (
grim+slurp) - Save canvas as PNG
- Persistent state saving for tools and colors via
QSettings
- Language: C++20
- GUI & Engine: Qt6 (Widgets, Svg), LayerShellQt
- Build System: CMake + Ninja