* Use (( )) for the numeric argument test Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * Drop the quotes on a variable inside [[ ]] Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * Use omarchy-pkg-drop instead of raw pacman -Rns omarchy-pkg-drop already filters to installed packages, so the 2>/dev/null || true suppression is no longer needed. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * Drop defensive checks around default-set commands ttfx, imagemagick, and networkmanager are all in the default package set, so their commands are runtime invariants and should be invoked directly. Removing the nmcli guard also removes the degraded wifi fallthrough that only ran when nmcli was missing. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
74 lines
2.6 KiB
Bash
Executable File
74 lines
2.6 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# omarchy:summary=Launch the Omarchy screensaver in the default terminal on the system with the correct font configuration.
|
|
|
|
# Exit early if screensaver is already running
|
|
pgrep -f '[o]rg.omarchy.screensaver' && exit 0
|
|
|
|
# Allow screensaver to be turned off but also force started
|
|
if omarchy-toggle-enabled screensaver-off && [[ $1 != "force" ]]; then
|
|
exit 1
|
|
fi
|
|
|
|
focused=$(omarchy-hyprland-monitor-focused)
|
|
terminal=$(xdg-terminal-exec --print-id)
|
|
|
|
case $terminal in
|
|
*Alacritty* | *ghostty* | *foot* | *kitty*) ;;
|
|
*)
|
|
omarchy-notification-send -g ✋ "Screensaver only runs in Alacritty, Foot, Ghostty, or Kitty"
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
hypr_focus_monitor() {
|
|
hyprctl dispatch "hl.dsp.focus({ monitor = \"$1\" })" >/dev/null 2>&1 || hyprctl dispatch focusmonitor "$1" >/dev/null
|
|
}
|
|
|
|
hypr_exec() {
|
|
local command
|
|
printf -v command '%q ' "$@"
|
|
|
|
hyprctl dispatch "hl.dsp.exec_cmd([[$command]])" >/dev/null 2>&1 || hyprctl dispatch exec -- bash -lc "$command" >/dev/null
|
|
}
|
|
|
|
SOCKET="$XDG_RUNTIME_DIR/hypr/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock"
|
|
|
|
# Open Hyprland's event stream before spawning anything, so a terminal that maps
|
|
# quickly can't emit its openwindow event before we are listening for it.
|
|
exec {events}< <(socat -U - "UNIX-CONNECT:$SOCKET")
|
|
|
|
# hypr_exec is async and a new window maps on whatever monitor is focused at that
|
|
# moment. Block until this monitor's screensaver actually opens before moving
|
|
# focus on -- otherwise slow-starting terminals all pile onto the last monitor.
|
|
# The deadline is a safety net in case the window never appears.
|
|
wait_for_screensaver_window() {
|
|
local line deadline=$((SECONDS + 5))
|
|
while ((SECONDS < deadline)) && IFS= read -r -t $((deadline - SECONDS)) -u "$events" line; do
|
|
[[ $line == openwindow\>\>*,org.omarchy.screensaver,* ]] && return 0
|
|
done
|
|
}
|
|
|
|
for m in $(hyprctl monitors -j | jq -r '.[] | .name'); do
|
|
hypr_focus_monitor "$m"
|
|
|
|
case $terminal in
|
|
*Alacritty*)
|
|
hypr_exec alacritty --class=org.omarchy.screensaver --config-file "$OMARCHY_PATH/default/alacritty/screensaver.toml" -e omarchy-screensaver
|
|
;;
|
|
*ghostty*)
|
|
hypr_exec ghostty --class=org.omarchy.screensaver --config-file="$OMARCHY_PATH/default/ghostty/screensaver" --font-size=18 -e omarchy-screensaver
|
|
;;
|
|
*foot*)
|
|
hypr_exec foot --app-id=org.omarchy.screensaver --config="$OMARCHY_PATH/default/foot/screensaver.ini" -e omarchy-screensaver
|
|
;;
|
|
*kitty*)
|
|
hypr_exec kitty --class=org.omarchy.screensaver --override font_size=18 --override window_padding_width=0 -e omarchy-screensaver
|
|
;;
|
|
esac
|
|
|
|
wait_for_screensaver_window
|
|
done
|
|
|
|
hypr_focus_monitor "$focused"
|