Evie Litherland-Smith
be1d5fa798
Save reference for later Enable upower daemon and add simple bar with the essentials for now, TODO more later
91 lines
3.2 KiB
Bash
Executable file
91 lines
3.2 KiB
Bash
Executable file
#!/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
|