42 lines
1.3 KiB
Bash
Executable File
42 lines
1.3 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# screensaver-tte.sh — runs inside each fullscreen tte kitty.
|
|
# Loops random tte effects until any keypress, then exits (kitty closes).
|
|
# Child teardown uses the exact PID ($!) — never pkill -f patterns, which
|
|
# would also match bystander shells mentioning the class name.
|
|
|
|
set -euo pipefail
|
|
|
|
SCREENSAVER_TEXT="$HOME/.config/hypr/screensaver.txt"
|
|
|
|
trap 'exit 0' SIGINT SIGTERM SIGHUP SIGQUIT
|
|
|
|
printf '\033]11;rgb:00/00/00\007' # black background
|
|
|
|
input="$SCREENSAVER_TEXT"
|
|
[[ -f "$input" ]] || input="/etc/hostname"
|
|
|
|
while true; do
|
|
tte -i <(fastfetch --pipe) \
|
|
--frame-rate 60 --canvas-width 0 --canvas-height 0 \
|
|
--anchor-canvas c --anchor-text c \
|
|
--random-effect --exclude-effects dev_worm \
|
|
--no-eol --no-restore-cursor &
|
|
TPID=$!
|
|
# Wait for tte to appear (Python startup) before polling it.
|
|
for _ in $(seq 1 10); do
|
|
kill -0 "$TPID" 2>/dev/null || break
|
|
pgrep -x tte >/dev/null 2>&1 && break
|
|
sleep 0.1
|
|
done
|
|
while kill -0 "$TPID" 2>/dev/null; do
|
|
if read -r -n1 -t 1; then
|
|
kill "$TPID" 2>/dev/null || true
|
|
wait "$TPID" 2>/dev/null || true
|
|
exit 0
|
|
fi
|
|
done
|
|
wait "$TPID" 2>/dev/null || true
|
|
# Throttle respawn if tte exits instantly (e.g. a sub-second effect).
|
|
sleep 0.2
|
|
done
|