ark/users/modules/eww/scripts/workspaces
2022-09-14 15:35:52 +03:00

80 lines
1.9 KiB
Bash
Executable File

#!/usr/bin/env bash
colors=("#f38ba8" "#a6e3a1" "#89b4fa" "#fab387")
dimmed=("#794554" "#537150" "#445a7d" "#7d5943")
empty="#302d41"
focusedws=1
declare -A o=([1]=0 [2]=0 [3]=0 [4]=0 [5]=0 [6]=0 [7]=0 [8]=0 [9]=0 [10]=0)
declare -A monitormap
declare -A workspaces
# sets color
status() {
if [ "${o[$1]}" -eq 1 ]; then
mon=${monitormap[${workspaces[$1]}]}
if [ $focusedws -eq "$1" ]; then
echo -n "color: ${colors[$mon]};"
else
echo -n "color: ${dimmed[$mon]};"
fi
else
echo -n "color: $empty;"
fi
}
# handles workspace create/destroy
workspace_event() {
o[$1]=$2
while read -r k v; do workspaces[$k]="$v"; done < <(hyprctl -j workspaces | jq -r '.[]|"\(.id) \(.monitor)"')
}
# handles monitor (dis)connects
monitor_event() {
while read -r k v; do monitormap["$k"]=$v; done < <(hyprctl -j monitors | jq -r '.[]|"\(.name) \(.id) "')
}
# generates the eww widget
generate() {
echo -n '(eventbox :onscroll "echo {} | sed -e \"s/up/-1/g\" -e \"s/down/+1/g\" | xargs hyprctl dispatch workspace" (box :orientation "h" :class "module" :spacing 5 :space-evenly "true" '
for i in {1..10}; do
echo -n "(button :onclick \"hyprctl dispatch workspace $i\" :class \"ws\" :style \"$(status "$i")\" \"●\") "
done
echo '))'
}
# setup
# add monitors
monitor_event
# add workspaces
workspace_event 1 1
# check occupied workspaces
for num in "${!workspaces[@]}"; do
o[$num]=1
done
# generate initial widget
generate
# main loop
socat -u UNIX-CONNECT:/tmp/hypr/"$HYPRLAND_INSTANCE_SIGNATURE"/.socket2.sock - | while read -r line; do
case ${line%>>*} in
"workspace")
focusedws=${line#*>>}
;;
"focusedmon")
focusedws=${line#*,}
;;
"createworkspace")
workspace_event "${line#*>>}" 1
;;
"destroyworkspace")
workspace_event "${line#*>>}" 0
;;
"monitor"*)
monitor_event
;;
esac
generate
done