Files
dotfiles/.claude/tasks/0029-screen-recording.md
alexion 0e92de7eea feat(desktop): add screen recording (task 0029)
Add a wf-recorder module, enabled by the desktop aggregator. Super+Shift+R
picks a region with slurp and toggles a video-only capture (no audio), stopped
with SIGINT so the file finalises, saved to ~/Videos/Recordings. Start and
saved notifications fire via notify-send.

A Waybar custom/recording widget samples the wf-recorder process once a second
and shows a video glyph while a capture runs.
2026-07-22 22:56:56 -04:00

2.5 KiB

spec, blocked-by
spec blocked-by
hyprland-desktop
0023-waybar-status-bar
0025-mako-notifications

What to build

A keybound screen recorder that selects a region and then toggles recording.

Add a wf-recorder module to the desktop group, enabled through the aggregator, that selects a region first and then toggles video-only recording (no audio), bound on Super+Shift+R. Surface a recording indicator in the Waybar bar and notification toasts on start and stop. No audio capture and no full-screen recording variant.

Acceptance criteria

  • A wf-recorder module exists in the desktop group and is enabled by the aggregator.
  • The recorder selects a region first, then toggles video-only recording on Super+Shift+R.
  • A recording indicator appears in the bar, and notifications fire on start and stop.
  • No audio is captured and no full-screen variant is provided.
  • neogaia builds green under nix flake check.

Implementation Notes

  • Toggle design. One key both starts and stops. A running capture is stopped with SIGINT so wf-recorder finalises the file; otherwise slurp picks a region and wf-recorder runs in the foreground for the whole recording, so the same invocation fires the "saved" notification once the file is written. Region-first and video-only (no -a, so no audio) satisfy the spec directly, and no full-screen variant is offered.

  • Bar indicator polls rather than signals. The Waybar custom/recording widget samples the wf-recorder process with pgrep on a one-second interval, showing a video glyph while a capture runs and collapsing to nothing when idle. An earlier draft signalled Waybar (pkill -RTMIN+9) from the toggle, but the start path raised the signal before wf-recorder had launched, so pgrep saw nothing and the indicator never lit during a recording — caught in review. Polling is race-free, removes the signal number shared across two files, and is adequate for a status glyph.

  • No waybar window-rewrite icon. wf-recorder is headless and slurp is a transient selection overlay, so neither owns a workspace window and the per-application icon convention does not apply.

  • Recordings land in ~/Videos/Recordings, timestamped recording-<date>.mp4, with the directory created on first capture.

  • Live capture is the irreducible manual step. The build is green, the config parses under Hyprland --verify-config, and the indicator's idle/recording transitions are verified against a stand-in process; exercising a real slurp selection and wf-recorder capture needs a running session.