Skip to content

Support supervised non-systemd sessions (--no-systemd, runit/Void Linux) #210

Description

@RomainLanz

Note

This issue has been written with AI help.

Environment

  • Void Linux (runit)
  • Niri / Wayland
  • Noctalia v5
  • Python 3.14

Context

hyprwhspr setup auto --no-systemd already exists, and the main application can run as a foreground daemon with its own lock file. This makes most of the runtime look close to supervisor-agnostic already.

However, the Noctalia/Waybar integration and parts of the CLI still assume a systemd user service. In particular, config/hyprland/hyprwhspr-tray.sh calls systemctl --user directly for status/start/stop/restart. As a result, a daemon supervised by runit would be reported as stopped and the widget controls would not work, even though recording itself is controlled through hyprwhspr's runtime FIFO.

The README also currently lists systemd as a prerequisite, while the CLI exposes --no-systemd.

Proposed scope

Would you be open to a PR that completes the existing non-systemd path while preserving systemd as the default?

Possible approach:

  1. Detect a foreground/supervised daemon by its lock/PID/process when no active systemd unit exists.
  2. Make tray/Noctalia recording controls work with an already-running non-systemd daemon.
  3. Add clean SIGTERM handling so supervisors such as runit can stop the daemon without skipping application cleanup.
  4. Add a small runit service example and documentation for Void Linux.
  5. Keep installation/service-manager abstraction limited in the first PR; full Void dependency automation could be separate.

A more generic supervisor-neutral approach would also help OpenRC, s6, dinit, and compositor-autostart users, rather than special-casing only runit.

I can implement and test this on Void Linux with runit, Niri, Noctalia v5, and the in-process ONNX-ASR/Parakeet backend. Before preparing the PR, I wanted to check which scope and service-manager interface you would prefer.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions