71 lines
2.2 KiB
Plaintext
71 lines
2.2 KiB
Plaintext
|
export HYPRLAND_INSTANCE_SIGNATURE=$(ls /tmp/hypr/ | sort | tail -n 1)
|
||
|
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#*>>}
|
||
|
;;
|
||
|
"activemon")
|
||
|
focusedws=''${line#*,}
|
||
|
;;
|
||
|
"createworkspace")
|
||
|
workspace_event ''${line#*>>} 1
|
||
|
;;
|
||
|
"destroyworkspace")
|
||
|
workspace_event ''${line#*>>} 0
|
||
|
;;
|
||
|
"monitor"*)
|
||
|
monitor_event
|
||
|
;;
|
||
|
esac
|
||
|
generate
|
||
|
done
|