nixos/home/hyprland/ironbar/reference/scripts/workspace
Evie Litherland-Smith be1d5fa798 Switch to minimal ironbar implementation
Save reference for later
Enable upower daemon and add simple bar with the essentials for now,
TODO more later
2023-10-11 08:28:27 +01:00

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