[Init]
This commit is contained in:
		
							
								
								
									
										86
									
								
								home/gui/eww/scripts/workspaces
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										86
									
								
								home/gui/eww/scripts/workspaces
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,86 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
colors=("blue" "orange" "green" "red")
 | 
			
		||||
empty="grey"
 | 
			
		||||
 | 
			
		||||
# get initial focused workspace
 | 
			
		||||
focusedws=$(hyprctl -j monitors | jaq -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
 | 
			
		||||
 | 
			
		||||
# set color for each workspace
 | 
			
		||||
status() {
 | 
			
		||||
  if [ "${o[$1]}" -eq 1 ]; then
 | 
			
		||||
    mon=${monitormap[${workspaces[$1]}]}
 | 
			
		||||
    echo -n "${colors[$mon]}"
 | 
			
		||||
  else
 | 
			
		||||
    echo -n "$empty"
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# handle workspace create/destroy
 | 
			
		||||
workspace_event() {
 | 
			
		||||
  while read -r k v; do workspaces[$k]="$v"; done < <(hyprctl -j workspaces | jaq -jr '.[] | .id, " ", .monitor, "\n"')
 | 
			
		||||
}
 | 
			
		||||
# handle monitor (dis)connects
 | 
			
		||||
monitor_event() {
 | 
			
		||||
  while read -r k v; do monitormap["$k"]=$v; done < <(hyprctl -j monitors | jaq -jr '.[] | .name, " ", .id, "\n"')
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# get all apps titles in a workspace
 | 
			
		||||
applist() {
 | 
			
		||||
  ws="$1"
 | 
			
		||||
 | 
			
		||||
  apps=$(hyprctl -j clients | jaq -jr '.[] | select(.workspace.id == '"$ws"') | .title + "\\n"')
 | 
			
		||||
  echo -En "${apps%"\n"}"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# generate the json for eww
 | 
			
		||||
generate() {
 | 
			
		||||
  echo -n '['
 | 
			
		||||
 | 
			
		||||
  for i in {1..10}; do
 | 
			
		||||
    echo -n ''"$([ "$i" -eq 1 ] || echo ,)" '{"number": "'"$i"'", "color": "'"$(status "$i")"'", "focused": '"$([ "$focusedws" = "$i" ] && echo "true" || echo "false")"'}' #, "tooltip": "'$(applist "$i")'" }'
 | 
			
		||||
  done
 | 
			
		||||
 | 
			
		||||
  echo ']'
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# setup
 | 
			
		||||
 | 
			
		||||
# add monitors
 | 
			
		||||
monitor_event
 | 
			
		||||
 | 
			
		||||
# add workspaces
 | 
			
		||||
workspace_event
 | 
			
		||||
 | 
			
		||||
# 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 - | rg --line-buffered "workspace|mon(itor)?" | while read -r line; do
 | 
			
		||||
  case ${line%>>*} in
 | 
			
		||||
  "workspace")
 | 
			
		||||
    focusedws=${line#*>>}
 | 
			
		||||
    ;;
 | 
			
		||||
  "focusedmon")
 | 
			
		||||
    focusedws=${line#*,}
 | 
			
		||||
    ;;
 | 
			
		||||
  "createworkspace")
 | 
			
		||||
    o[${line#*>>}]=1
 | 
			
		||||
    ;;
 | 
			
		||||
  "destroyworkspace")
 | 
			
		||||
    o[${line#*>>}]=0
 | 
			
		||||
    ;;
 | 
			
		||||
  "monitor"*)
 | 
			
		||||
    monitor_event
 | 
			
		||||
    ;;
 | 
			
		||||
  esac
 | 
			
		||||
  generate
 | 
			
		||||
done
 | 
			
		||||
		Reference in New Issue
	
	Block a user