Files
dotfiles/hypr/scripts/autofreezer.sh

68 lines
2.0 KiB
Bash
Executable File

#!/usr/bin/env bash
# Variable to store the last focused window address
last_focused_window=""
current_window=""
function handle {
if [[ ${1:0:14} == "activewindowv2" ]]; then
new_window="${1:16}"
# Update window tracking
last_focused_window="${current_window}"
current_window="${new_window}"
# Get all window information once
window_info=$(hyprctl clients)
# Process last focused window (unfocused)
if [[ -n "$last_focused_window" ]]; then
# Extract tags
tags=$(echo "$window_info" | awk -v addr="$last_focused_window" '
$0 ~ "Window " addr {found=1}
found && /tags:/ {print $0; found=0; exit}
' | sed 's/.*tags: //;s/)//')
# Extract PID
pid=$(echo "$window_info" | awk -v addr="$last_focused_window" '
$0 ~ "Window " addr {found=1}
found && /pid:/ {print $2; found=0; exit}
')
# Process if window has zawarudo tag
if [[ -n "$tags" && -n "$pid" ]]; then
if [[ "$tags" == *"zawarudo"* ]]; then
echo freeze $current_pid
kill -STOP $pid 2>/dev/null
fi
fi
fi
# Process current focused window
if [[ -n "$current_window" ]]; then
# Extract tags
current_tags=$(echo "$window_info" | awk -v addr="$current_window" '
$0 ~ "Window " addr {found=1}
found && /tags:/ {print $0; found=0; exit}
' | sed 's/.*tags: //;s/)//')
# Extract PID
current_pid=$(echo "$window_info" | awk -v addr="$current_window" '
$0 ~ "Window " addr {found=1}
found && /pid:/ {print $2; found=0; exit}
')
# Process if window has zawarudo tag
if [[ -n "$current_tags" && -n "$current_pid" ]]; then
if [[ "$current_tags" == *"zawarudo"* ]]; then
echo unfreeze $current_pid
kill -CONT $current_pid 2>/dev/null
fi
fi
fi
fi
}
# Listen for events
socat - "UNIX-CONNECT:$XDG_RUNTIME_DIR/hypr/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock" | while read -r line; do handle "$line"; done