mirror of
https://github.com/ItsDrike/dotfiles.git
synced 2024-12-27 05:34:35 +00:00
50 lines
1.3 KiB
Bash
Executable file
50 lines
1.3 KiB
Bash
Executable file
#!/bin/bash
|
|
|
|
# $1: Current number
|
|
# $2: Range minimum
|
|
# $3: Range maximum
|
|
# $4-: Icons as individual arguments
|
|
pick_icon() {
|
|
cur="$1"
|
|
min="$2"
|
|
max="$3"
|
|
shift 3
|
|
icons=( "$@" )
|
|
|
|
index="$(echo "($cur-$min)/(($max-$min)/${#icons[@]})" | bc)"
|
|
|
|
# Print the picked icon, handling overflows/underflows, i.e. if our index is <0 or >len(icons)
|
|
if [ "$index" -ge "${#icons[@]}" ]; then
|
|
index=-1
|
|
elif [ "$index" -lt 0 ]; then
|
|
index=0
|
|
fi
|
|
|
|
echo "${icons[index]}"
|
|
}
|
|
|
|
# Will block and listen to the hyprland socket messages and output them
|
|
# Generally used like: hyprland_ipc | while read line; do handle $line; done
|
|
# Read <https://wiki.hyprland.org/IPC/> for output format and available events
|
|
# Note: requires openbsd version of netcat.
|
|
# $1 - Optional event to listen for (no event filtering will be done if not provided)
|
|
hyprland_ipc() {
|
|
if [ -z "$HYPRLAND_INSTANCE_SIGNATURE" ]; then
|
|
>&2 echo "Hyprland is not running, IPC not available"
|
|
exit 1
|
|
fi
|
|
|
|
SOCKET_PATH="/tmp/hypr/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock"
|
|
|
|
if [ -z "$1" ]; then
|
|
nc -U "$SOCKET_PATH" | while read -r test; do
|
|
echo "$test"
|
|
done
|
|
else
|
|
nc -U "$SOCKET_PATH" | while read -r test; do
|
|
# shellcheck disable=SC2016
|
|
echo "$test" | grep --line-buffered -E "^$1>>" | stdbuf -oL awk -F '>>' '{print $2}'
|
|
done
|
|
fi
|
|
}
|