Voxtype/fingerprint invitations run as a transient omarchy-*-invitation.service that shows a critical toast and waits for a click. On click the service execs the install terminal, so the service stays active for the whole life of that terminal. The installer ends with omarchy-restart-shell, which re-triggers any still-running omarchy-*-invitation.service on the assumption that a still-running unit is an unanswered toast wiped by the shell restart. But an answered invitation is still running only because it is the parent of the very install terminal that triggered the restart, so it gets falsely re-fired and the invitation toast pops a second time right after the install finishes. Launch the installer in its own transient unit so the invitation service exits immediately after the click. Genuinely unanswered invitations still block in notify-send and are still recovered by restart-shell; answered ones are gone and no longer match the re-show glob. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WHPDqx5hwLTwq27f7KpM9d
28 lines
1.2 KiB
Bash
28 lines
1.2 KiB
Bash
#!/bin/bash
|
|
|
|
set -e
|
|
|
|
show_invitation() {
|
|
if [[ -n $(omarchy-notification-send -u critical -g "Setup Fingerprint Reader" "Enable sudo and unlocking with your fingerprint." -a) ]]; then
|
|
# Launch the setup in its own transient unit so this invitation service can
|
|
# exit right after the click. If it stayed alive for the life of the setup
|
|
# terminal, the setup's omarchy-restart-shell would re-trigger this
|
|
# still-running *-invitation unit and pop the toast a second time.
|
|
systemd-run --user --collect --quiet \
|
|
--unit=omarchy-setup-security-fingerprint \
|
|
omarchy-launch-floating-terminal-with-presentation omarchy-setup-security-fingerprint
|
|
fi
|
|
}
|
|
|
|
if [[ ${1:-} == "--show" ]]; then
|
|
show_invitation
|
|
# Only invite when there's a reader to use and it isn't set up yet (the lock
|
|
# PAM file is the last thing the setup writes on success).
|
|
elif omarchy-hw-fingerprint && [[ ! -f /etc/pam.d/omarchy-lock-fingerprint ]] &&
|
|
omarchy-done ensure fingerprint-setup-invitation; then
|
|
# Keep the notification action alive after the update terminal closes.
|
|
systemd-run --user --collect --quiet --service-type=exec \
|
|
--unit=omarchy-fingerprint-setup-invitation \
|
|
bash "$0" --show
|
|
fi
|