91 lines
3.2 KiB
Plaintext
91 lines
3.2 KiB
Plaintext
|
#!/usr/bin/env bash
|
||
|
|
||
|
function array_sort() {
|
||
|
local -n ref=$1
|
||
|
IFS=$'\n' ref=($(sort <<<"${ref[*]}"))
|
||
|
unset IFS
|
||
|
}
|
||
|
#initial check for occupied workspaces
|
||
|
set_mon="$1"
|
||
|
occupied_workspace=("$(hyprctl workspaces | grep " $set_mon" | awk '{print $3}')")
|
||
|
active_workspace="$(hyprctl monitors | grep " $set_mon" -A 3 | awk 'NR==4{print $3}')"
|
||
|
declare active_mon
|
||
|
declare last_created
|
||
|
|
||
|
if [[ ! "${occupied_workspace[*]}" =~ ${active_workspace} ]]; then
|
||
|
occupied_workspace+=("$active_workspace")
|
||
|
fi
|
||
|
array_sort occupied_workspace
|
||
|
|
||
|
workspaces() {
|
||
|
if [[ ${1:0:9} == "workspace" ]]; then #set focused workspace
|
||
|
active_workspace=${1:11}
|
||
|
elif [[ ${1:0:15} == "createworkspace" ]] && [[ $active_mon == $set_mon ]]; then #add workspace to Occupied workspace
|
||
|
active_workspace=${1:17}
|
||
|
occupied_workspace+=("$active_workspace")
|
||
|
last_created=$active_workspace
|
||
|
array_sort occupied_workspace
|
||
|
if [[ ! "${occupied_workspace[*]}" =~ ${active_workspace} ]]; then
|
||
|
occupied_workspace+=("$active_workspace")
|
||
|
fi
|
||
|
elif [[ ${1:0:16} == "destroyworkspace" ]] && [[ $active_mon == $set_mon ]]; then
|
||
|
# removing workspace from occupied
|
||
|
occupied_workspace=("${occupied_workspace[@]/${1:18}/}")
|
||
|
elif [[ ${1:0:10} == "focusedmon" ]]; then
|
||
|
string=${1:12}
|
||
|
monitor_name=${string/,*/}
|
||
|
active_workspace=${string##*,}
|
||
|
active_mon="$monitor_name"
|
||
|
if [[ $active_mon == $set_mon ]]; then
|
||
|
# for safety measures
|
||
|
occupied_workspace=("$(hyprctl workspaces | grep " $set_mon" | awk '{print $3}')")
|
||
|
active_workspace="$(hyprctl monitors | grep " $set_mon" -A 3 | awk 'NR==4{print $3}')"
|
||
|
array_sort occupied_workspace
|
||
|
if [[ ! "${occupied_workspace[*]}" =~ ${active_workspace} ]]; then
|
||
|
occupied_workspace+=("$active_workspace")
|
||
|
fi
|
||
|
fi
|
||
|
# remove element
|
||
|
if [[ -n $last_created ]] && [[ $active_mon == "$set_mon" ]]; then
|
||
|
occupied_workspace=("${occupied_workspace[@]/$last_created/}")
|
||
|
fi
|
||
|
unset -v last_created
|
||
|
elif [[ ${1:0:13} == "moveworkspace" ]]; then
|
||
|
string=${1:15}
|
||
|
monitor_name=${string##*,}
|
||
|
active_workspace=${string/,*/}
|
||
|
if [[ $monitor_name == $set_mon ]]; then
|
||
|
if [[ ! "${occupied_workspace[*]}" =~ ${active_workspace} ]]; then
|
||
|
occupied_workspace+=("$active_workspace")
|
||
|
fi
|
||
|
array_sort occupied_workspace
|
||
|
else
|
||
|
occupied_workspace=("${occupied_workspace[@]/$active_workspace/}")
|
||
|
fi
|
||
|
fi
|
||
|
}
|
||
|
module() {
|
||
|
#output eww widget
|
||
|
echo -n "(eventbox :onscroll \"echo {} | sed -e 's/up/-1/g' -e 's/down/+1/g' | xargs hyprctl dispatch workspace\""
|
||
|
echo -n " (box :class \"works\" :orientation \"h\" :spacing 2 :space-evenly \"false\""
|
||
|
for i in ${occupied_workspace[@]}; do
|
||
|
if [ $i = $active_workspace ]; then
|
||
|
echo -n " (button :onclick \"hyprctl dispatch workspace $i\" :class \"0act\" \"$i\") "
|
||
|
else
|
||
|
echo -n " (button :onclick \"hyprctl dispatch workspace $i\" :class \"0norm\" \"$i\") "
|
||
|
fi
|
||
|
done
|
||
|
echo -n " )"
|
||
|
echo ")"
|
||
|
}
|
||
|
|
||
|
# initial
|
||
|
active_mon="$set_mon"
|
||
|
module
|
||
|
active_mon="$(hyprctl monitors | grep -B 7 "focused: yes" | awk 'NR==1{print $2;}')"
|
||
|
|
||
|
socat -u UNIX-CONNECT:/tmp/hypr/"$HYPRLAND_INSTANCE_SIGNATURE"/.socket2.sock - | while read -r event; do
|
||
|
workspaces "$event"
|
||
|
module
|
||
|
done
|