refactor: eww workspaces

This commit is contained in:
hesam-init 2024-06-29 09:10:43 +03:30
parent 09970d3479
commit 17f46b149a
7 changed files with 53 additions and 111 deletions

View file

@ -1,42 +0,0 @@
#!/usr/bin/env python3
import subprocess
import json
import os
import i3ipc
eww_bin= [subprocess.getoutput("which eww"), "-c", f"{os.getcwd()}"]
def get_workspaces(i3):
result = i3.get_workspaces()
active = []
for i in range(1, 6):
active.append(dict(
focused = False,
empty = True,
name = i
))
for res in result:
if not res.output == "eDP-1": continue
if res.num%10-1 > 4 or res.num%10-1 < 0:
continue
active[res.num%10-1]["empty"] = False
if res.focused:
active[res.num%10-1]["focused"] = True
return active
def update(i3, e):
print(json.dumps(get_workspaces(i3)), flush=True)
def main():
i3 = i3ipc.Connection(auto_reconnect=True)
update(i3, None)
i3.on(i3ipc.Event.WORKSPACE, update)
i3.main()
if __name__ == "__main__":
main()

View file

@ -0,0 +1,6 @@
#!/usr/bin/env bash
hyprctl monitors -j | jq '.[] | select(.focused) | .activeWorkspace.id'
socat -u UNIX-CONNECT:$XDG_RUNTIME_DIR/hypr/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock - |
stdbuf -o0 awk -F '>>|,' -e '/^workspace>>/ {print $2}' -e '/^focusedmon>>/ {print $3}'

View file

@ -0,0 +1,9 @@
#!/usr/bin/env bash
spaces() {
WORKSPACE_WINDOWS=$(hyprctl workspaces -j | jq 'map({key: .id | tostring, value: .windows}) | from_entries')
seq 1 6 | jq --argjson windows "${WORKSPACE_WINDOWS}" --slurp -Mc 'map(tostring) | map({id: ., windows: ($windows[.]//0)})'
}
spaces

View file

@ -0,0 +1,21 @@
#!/usr/bin/env bash
clamp() {
min=$1
max=$2
val=$3
python -c "print(max($min, min($val, $max)))"
}
direction=$1
current=$2
if test "$direction" = "down"; then
target=$(clamp 1 10 $(($current + 1)))
echo "jumping to $target"
hyprctl dispatch workspace $target
elif test "$direction" = "up"; then
target=$(clamp 1 10 $(($current - 1)))
echo "jumping to $target"
hyprctl dispatch workspace $target
fi

View file

@ -1,54 +0,0 @@
#!/bin/bash
SOCKET="/tmp/hypr/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock"
spaces() {
local workspace_windows=$(hyprctl workspaces -j | jq 'map({key: .id | tostring, value: .windows}) | from_entries')
seq 1 5 | jq --argjson windows "$workspace_windows" --slurp -Mc 'map(tostring) | map({id: ., windows: ($windows[.]//0)})'
}
clamp() {
python -c "print(max($1, min($3, $2)))"
}
get_workspaces() {
spaces
socat -u UNIX-CONNECT:"$SOCKET" - | while read -r; do
spaces
done
}
get_active_workspace() {
hyprctl monitors -j | jq '.[] | select(.focused) | .activeWorkspace.id'
socat -u UNIX-CONNECT:"$SOCKET" - | stdbuf -o0 awk -F '>>|,' '/^workspace>>/ {print $2} /^focusedmon>>/ {print $3}'
}
change_workspace() {
local direction=$1 current=$2 target
if [[ "$direction" == "down" ]]; then
target=$(clamp 1 9 $((current + 1)))
elif [[ "$direction" == "up" ]]; then
target=$(clamp 1 9 $((current - 1)))
else
echo "Invalid direction" >&2
return 1
fi
echo "Jumping to $target"
hyprctl dispatch workspace "$target"
}
main() {
case $1 in
get-all-workspaces) get_workspaces ;;
get-active-workspace) get_active_workspace ;;
change) change_workspace "$2" "$3" ;;
*)
echo "Usage: $0 {gw|ga|c <direction> <current>}" >&2
exit 1
;;
esac
}
main "$@"

View file

@ -42,7 +42,7 @@
(defvar revealMicrophone false) (defvar revealMicrophone false)
(defvar revealBrightness false) (defvar revealBrightness false)
(defvar revealControlpanel false) (defvar revealControlpanel false)
(defvar revealSystray false) (defvar revealSystray true)
; Dock ; Dock
(deflisten tasksjson :initial "[]" "./scripts/tasklist.py") (deflisten tasksjson :initial "[]" "./scripts/tasklist.py")
@ -50,8 +50,9 @@
; Workspaces ; Workspaces
(defvar show_no_of_windows false) (defvar show_no_of_windows false)
(defpoll workspacesjson :initial "[]" :interval "60s" "./scripts/workspaces get-all-workspaces") (defpoll workspacesjson :initial "[]" :interval "60s" "./scripts/workspace/get-workspaces")
(defpoll current_workspace :initial "0" :interval "50ms" "./scripts/workspaces get-active-workspace") (deflisten current_workspace :initial "1" "./scripts/workspace/get-active")
; Notifications ; Notifications
(deflisten notifications :initial '{ (deflisten notifications :initial '{

View file

@ -62,7 +62,7 @@
:class "bottom_modules" :class "bottom_modules"
:vexpand false :vexpand false
:hexpand false :hexpand false
; (stray) ; (systemtray)
(sliders) (sliders)
(clock) (clock)
; (battery) ; (battery)
@ -71,7 +71,7 @@
(defwidget workspaces [] (defwidget workspaces []
(eventbox (eventbox
:cursor "pointer" :cursor "pointer"
:onscroll "./scripts/workspaces change {} ${current_workspace}" :onscroll "./scripts/workspace/set-active {} ${current_workspace}"
:onhover "${EWW_CMD} update show_no_of_windows=true" :onhover "${EWW_CMD} update show_no_of_windows=true"
:onhoverlost "${EWW_CMD} update show_no_of_windows=false" :onhoverlost "${EWW_CMD} update show_no_of_windows=false"
(box (box
@ -88,10 +88,11 @@
(revealer (revealer
:reveal { workspace.id == current_workspace } :reveal { workspace.id == current_workspace }
:transition "slidedown" :transition "slideup"
:duration 500
(box (box
:height 55 :height 50
) )
) )
) )
@ -116,7 +117,7 @@
:cursor "pointer" :cursor "pointer"
(label :text "" :halign "center" :class "launchicon" :style "padding: 2px 0px;")))) (label :text "" :halign "center" :class "launchicon" :style "padding: 2px 0px;"))))
(defwidget stray [] (defwidget systemtray []
(box (box
:class "widget" :class "widget"
:space-evenly false :space-evenly false
@ -125,14 +126,14 @@
(eventbox (eventbox
:onclick "${EWW_CMD} update revealSystray=${!revealSystray}" :onclick "${EWW_CMD} update revealSystray=${!revealSystray}"
(label :angle {!revealSystray ? 90 : 270} :class "revealtouch" :tooltip "reveal systray" :text "")) (label :angle {!revealSystray ? 90 : 270} :class "revealtouch" :tooltip "reveal systray" :text ""))
(revealer (revealer
:reveal revealSystray :reveal revealSystray
:transition "slideup" :transition "slideup"
(systray (systray
:icon_size 20 :icon_size 6
:pack-direction "down" :prepend-new true
:hexpand true ))
:vexpand true))
)) ))
(defwidget clock [] (defwidget clock []
@ -141,7 +142,7 @@
:onclick "${EWW_CMD} open calendar --toggle" :onclick "${EWW_CMD} open calendar --toggle"
(box (box
:orientation "v" :orientation "v"
:space-evenly false :space-evenly false
:class "widget clock" :class "widget clock"
(label :text thour) (label :text thour)