✨ feat(eww): add mediaplayer widget, fix workspaces, window and audio widgets
This commit is contained in:
@@ -31,6 +31,7 @@
|
|||||||
:space-evenly false
|
:space-evenly false
|
||||||
(clock)
|
(clock)
|
||||||
(window)
|
(window)
|
||||||
|
(media)
|
||||||
)
|
)
|
||||||
(box :class "widgets-right"
|
(box :class "widgets-right"
|
||||||
:halign "end"
|
:halign "end"
|
||||||
|
|||||||
@@ -0,0 +1,9 @@
|
|||||||
|
#!/usr/bin/env
|
||||||
|
|
||||||
|
handle() {
|
||||||
|
case $1 in
|
||||||
|
workspace*) hyprctl -j activeworkspace | jq -c ;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
socat -U - UNIX-CONNECT:$XDG_RUNTIME_DIR/hypr/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock | while read -r line; do handle "$line"; done
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
WP_VOLUME=$(wpctl get-volume @DEFAULT_AUDIO_SINK@ | sed -e 's/^Volume: //')
|
|
||||||
|
|
||||||
formatted_volume() {
|
|
||||||
if ! [ $WP_VOLUME == "1.00" ]; then
|
|
||||||
echo "${WP_VOLUME#0.}%"
|
|
||||||
else
|
|
||||||
echo "100%"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
formatted_volume
|
|
||||||
@@ -1,37 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
ACTIVE_WINDOW=$(hyprctl -j activewindow)
|
|
||||||
WINDOW_TITLE=$(echo $ACTIVE_WINDOW | jq '.title' | sed -e 's/^\"//' -e 's/\"$//')
|
|
||||||
WINDOW_CLASS=$(echo $ACTIVE_WINDOW | jq '.class' | sed -e 's/^\"//' -e 's/\"$//')
|
|
||||||
WINDOW_NAME="$WINDOW_CLASS: $WINDOW_TITLE"
|
|
||||||
WINDOW_CHAR_LIMIT="50"
|
|
||||||
|
|
||||||
# Rewrite window names
|
|
||||||
case $WINDOW_CLASS in
|
|
||||||
"zen-alpha")
|
|
||||||
WINDOW_NAME="Zen Browser"
|
|
||||||
;;
|
|
||||||
"firefox" | "org.mozilla.firefox")
|
|
||||||
WINDOW_NAME="Mozilla Firefox"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
#case $WINDOW_TITLE in
|
|
||||||
# "example with window title") # case
|
|
||||||
# WINDOW_NAME="you just learned!" # statement
|
|
||||||
# ;; # breaks
|
|
||||||
#esac
|
|
||||||
|
|
||||||
#case $WINDOW_NAME in
|
|
||||||
# "example with window name") # case
|
|
||||||
# WINDOW_NAME="something cool" # statement
|
|
||||||
# ;; # breaks
|
|
||||||
#esac
|
|
||||||
|
|
||||||
if ! [[ $WINDOW_CLASS == "null" ]]; then
|
|
||||||
echo "${WINDOW_NAME:0:WINDOW_CHAR_LIMIT}"
|
|
||||||
eww update widget_window_visible=true
|
|
||||||
else
|
|
||||||
echo ""
|
|
||||||
eww update widget_window_visible=false
|
|
||||||
fi
|
|
||||||
+14
-4
@@ -2,17 +2,27 @@
|
|||||||
|
|
||||||
# Note: $SCROLL is defined by eww
|
# Note: $SCROLL is defined by eww
|
||||||
|
|
||||||
$DEFAULT_INCREASE='5'
|
DEFAULT_INCREASE='5'
|
||||||
|
|
||||||
Guess_increase_decrease() {
|
Guess_increase_decrease() {
|
||||||
local $CURRENT_VOL=$(wpctl get-volume "@DEFAULT_AUDIO_SINK@")
|
CURRENT_VOL=$(Translate_volume_to_int)
|
||||||
|
|
||||||
|
if [[ $SCROLL == "up" ]]; then
|
||||||
|
if [[ $(awk "BEGIN { ($CURRENT_VOL+$DEFAULT_INCREASE) }") > 100 ]]; then
|
||||||
|
echo "1.00"
|
||||||
|
else
|
||||||
|
echo "$DEFAULT_INCREASE%+"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "$DEFAULT_INCREASE%-"
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
Update_volume() {
|
Update_volume() {
|
||||||
local $UPDATED_VOL=$(Guess_increase_decrease)
|
UPDATED_VOL=$(Guess_increase_decrease)
|
||||||
wpctl set-volume "@DEFAULT_AUDIO_SINK@" "$UPDATED_VOL"
|
wpctl set-volume "@DEFAULT_AUDIO_SINK@" "$UPDATED_VOL"
|
||||||
}
|
}
|
||||||
|
|
||||||
Translate_volume_to_int() {
|
Translate_volume_to_int() {
|
||||||
echo $(wpctl get-volume "@DEFAULT_AUDIO_SINK@" | sed -e "s/^Volume: //" -e "s/^1.//1")
|
echo $(wpctl get-volume @DEFAULT_AUDIO_SINK@ | sed -e 's/Volume: //' -e 's/^1\./1/' -e 's/^0.//' -e 's/^00/0/')
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,12 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# output current window before event trigger to prevent issues
|
||||||
|
hyprctl -j activewindow | jq -c
|
||||||
|
|
||||||
|
handle() {
|
||||||
|
case $1 in
|
||||||
|
activewindow*) hyprctl -j activewindow | jq -c ;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
socat -U - UNIX-CONNECT:$XDG_RUNTIME_DIR/hypr/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock | while read -r line; do handle "$line"; done
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# display workspaces before checking for events
|
||||||
|
hyprctl -j workspaces | jq -c
|
||||||
|
|
||||||
|
handle() {
|
||||||
|
case $1 in
|
||||||
|
workspace*) hyprctl -j workspaces | jq -c ;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
socat -U - UNIX-CONNECT:$XDG_RUNTIME_DIR/hypr/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock | while read -r line; do handle "$line"; done
|
||||||
+30
-2
@@ -84,12 +84,22 @@ menu {
|
|||||||
border-radius: 16px;
|
border-radius: 16px;
|
||||||
|
|
||||||
& > button {
|
& > button {
|
||||||
padding: 0 9px;
|
padding: 0 0;
|
||||||
border-radius: 50%;
|
border-radius: 16px;
|
||||||
margin: 0 2px;
|
margin: 0 2px;
|
||||||
background: darken($color1, 20);
|
background: darken($color1, 20);
|
||||||
|
font-weight: 500;
|
||||||
|
|
||||||
|
&.active {
|
||||||
|
background: $color1;
|
||||||
|
font-weight: 600;
|
||||||
|
padding: 0 24px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
&:not(.active) {
|
||||||
|
padding: 0 10px;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
.workspaces button:hover {
|
.workspaces button:hover {
|
||||||
color: $color1;
|
color: $color1;
|
||||||
@@ -111,6 +121,24 @@ menu {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.mediaplayer {
|
||||||
|
border-radius: 12px;
|
||||||
|
box-shadow: inset 0 0 0px 2px $color3;
|
||||||
|
padding: 0 4px;
|
||||||
|
|
||||||
|
& > label {
|
||||||
|
margin: 0 4px;
|
||||||
|
padding-right: 5px;
|
||||||
|
border-right: 2px solid $color3;
|
||||||
|
}
|
||||||
|
|
||||||
|
& > button {
|
||||||
|
padding: 0 7px;
|
||||||
|
border-radius: 4px;
|
||||||
|
margin: 2px 2px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
.notifications button {
|
.notifications button {
|
||||||
padding-left: 11px;
|
padding-left: 11px;
|
||||||
padding-right: 11px;
|
padding-right: 11px;
|
||||||
|
|||||||
@@ -0,0 +1,21 @@
|
|||||||
|
|
||||||
|
(deflisten media :initial "{}"
|
||||||
|
`python3 ./scripts/mediaplayer.py`)
|
||||||
|
|
||||||
|
(defwidget media []
|
||||||
|
(box :class "mediaplayer"
|
||||||
|
:space-evenly false
|
||||||
|
:visible true
|
||||||
|
|
||||||
|
(label :text "${media.title} - ${media.artist}")
|
||||||
|
(button :class "previous"
|
||||||
|
:onclick "playerctl previous --player=${media.player}"
|
||||||
|
"")
|
||||||
|
(button :class "toggle play-pause"
|
||||||
|
:onclick "playerctl play-pause --player=${media.player}"
|
||||||
|
{ media.status == "playing" ? "" : "" })
|
||||||
|
(button :class "next"
|
||||||
|
:onclick "playerctl next --player=${media.player}"
|
||||||
|
"")
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|||||||
@@ -1,10 +1,8 @@
|
|||||||
|
|
||||||
(defpoll windowInfo :interval "250ms"
|
(deflisten active_window :initial ""
|
||||||
"sh ./scripts/get-window.sh")
|
`sh -c 'source ./scripts/window.sh; get_active_window'`)
|
||||||
|
|
||||||
(defvar widget_window_visible true)
|
|
||||||
|
|
||||||
(defwidget window []
|
(defwidget window []
|
||||||
(button :visible "${widget_window_visible}"
|
(button :visible { active_window.class == "null" ? false : true }
|
||||||
"${windowInfo}")
|
"${active_window.class}: ${active_window.title}")
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -1,15 +1,18 @@
|
|||||||
|
|
||||||
(deflisten json_workspaces
|
(deflisten json_workspaces :initial '[{"id": "1"},{"id": "2"}]'
|
||||||
:initial "[{1: {}, 2:{}}]"
|
`sh ./scripts/workspaces.sh`)
|
||||||
`hyprctl -j workspaces`)
|
|
||||||
|
(deflisten json_active_workspace :initial '{ "id": 1 }'
|
||||||
|
`sh ./scripts/active-workspace.sh`)
|
||||||
|
|
||||||
(defwidget workspaces []
|
(defwidget workspaces []
|
||||||
(eventbox :onscroll "[[ {} =~ up ]] && hyprctl dispatch workspace e+1 || hyprctl dispatch workspace e-1"
|
(eventbox :onscroll "[[ {} == up ]] && hyprctl dispatch workspace e+1 || hyprctl dispatch workspace e-1"
|
||||||
(box :class "workspaces"
|
(box :class "workspaces"
|
||||||
(for i in json_workspaces
|
(for workspace in json_workspaces
|
||||||
(button :onclick "hyprctl dispatch workspace ${i}"
|
(button :onclick "hyprctl dispatch workspace ${workspace.id}"
|
||||||
"${i[0].num}")
|
:class "${ json_active_workspace.id == workspace.id ? "active" : "default" }"
|
||||||
)
|
"${workspace.id}")
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user