113 lines
2.9 KiB
Bash
Executable file
113 lines
2.9 KiB
Bash
Executable file
#!/bin/bash
|
|
|
|
# get initial focused workspace
|
|
focusedws=$(hyprctl -j monitors | jq -r '.[] | select(.focused == true) | .activeWorkspace.id')
|
|
|
|
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
|
|
|
|
# handle workspace create/destroy
|
|
workspace_event() {
|
|
if (( $1 <= 10 )); then
|
|
o[$1]=$2
|
|
while read -r k v; do workspaces[$k]="$v"; done < <(hyprctl -j workspaces | jq -r '.[]|"\(.id) \(.monitor)"')
|
|
fi
|
|
if [ "$2" == "0" ]; then
|
|
unset "workspaces[$1]"
|
|
fi
|
|
}
|
|
|
|
# handle monitor (dis)connects
|
|
monitor_event() {
|
|
while read -r k v; do monitormap["$k"]=$v; done < <(hyprctl -j monitors | jq -r '.[]|"\(.name) \(.id) "')
|
|
}
|
|
|
|
# generate the json for eww
|
|
generate() {
|
|
|
|
activeWorkspace=$(hyprctl -j monitors | jq -r '.[] | select(.focused == true) | .activeWorkspace.id')
|
|
|
|
echo -n '['
|
|
|
|
for i in {1..10}; do
|
|
active=0
|
|
if [[ $activeWorkspace == $i ]]; then
|
|
active=1
|
|
fi
|
|
echo -n ''$([ $i -eq 1 ] || echo ,)'{"num":"'$i'","occupied":"'${o[$i]}'","active":"'$active'"}'
|
|
# echo -n ''$([ $i -eq 1 ] || echo ,) '{ "number": "'"$i"'", "activity": "'"$(status_activity $i)"'", "color": "'$(status "$i")'" }'
|
|
done
|
|
|
|
# echo -n ',{"num":"'$focusedws'","clr":"'$(status "$focusedws")'"}'
|
|
|
|
echo ']'
|
|
}
|
|
|
|
# setup
|
|
|
|
# add monitors
|
|
monitor_event
|
|
|
|
# add workspaces
|
|
while read -r k v; do workspaces[$k]="$v"; done < <(hyprctl -j workspaces | jq -r '.[]|"\(.id) \(.monitor)"')
|
|
|
|
# get active workspace
|
|
activeWorkspace=$(hyprctl -j monitors | jq -r '.[] | select(.focused == true) | .activeWorkspace.id')
|
|
|
|
# check occupied workspaces
|
|
for num in "${!workspaces[@]}"; do
|
|
o[$num]=1
|
|
done
|
|
# generate initial widget
|
|
generate
|
|
|
|
socat -u UNIX-CONNECT:/tmp/hypr/"$HYPRLAND_INSTANCE_SIGNATURE"/.socket2.sock - | while read -r line; do
|
|
# echo "${#workspaces[@]} ${#o[@]}"
|
|
# echo $line
|
|
case ${line%>>*} in
|
|
"focusedmon")
|
|
focusedws=${line#*,}
|
|
generate
|
|
;;
|
|
"createworkspace")
|
|
# workspace_event "${line#*>>}" 1
|
|
o=([1]=0 [2]=0 [3]=0 [4]=0 [5]=0 [6]=0 [7]=0 [8]=0 [9]=0 [10]=0)
|
|
workspaces=()
|
|
# add workspaces
|
|
while read -r k v; do workspaces[$k]="$v"; done < <(hyprctl -j workspaces | jq -r '.[]|"\(.id) \(.monitor)"')
|
|
# check occupied workspaces
|
|
for num in "${!workspaces[@]}"; do
|
|
o[$num]=1
|
|
done
|
|
# focusedws=${line#*>>}
|
|
generate
|
|
;;
|
|
"movewindow")
|
|
generate
|
|
;;
|
|
"destroyworkspace")
|
|
# workspace_event "${line#*>>}" 0
|
|
o=([1]=0 [2]=0 [3]=0 [4]=0 [5]=0 [6]=0 [7]=0 [8]=0 [9]=0 [10]=0)
|
|
workspaces=()
|
|
# add workspaces
|
|
while read -r k v; do workspaces[$k]="$v"; done < <(hyprctl -j workspaces | jq -r '.[]|"\(.id) \(.monitor)"')
|
|
# check occupied workspaces
|
|
for num in "${!workspaces[@]}"; do
|
|
o[$num]=1
|
|
done
|
|
generate
|
|
;;
|
|
"monitor"*)
|
|
monitor_event
|
|
generate
|
|
;;
|
|
"workspace")
|
|
|
|
generate
|
|
;;
|
|
esac
|
|
# echo $line
|
|
# generate
|
|
done
|
|
|