Files
dotfiles/eww/eww.yuck
2026-04-19 08:55:14 +02:00

50 lines
1.9 KiB
Plaintext

(defpoll volume :interval "1s"
"wpctl get-volume @DEFAULT_AUDIO_SINK@ | awk '{printf \"%d\", $2*100}'")
(defpoll muted :interval "1s"
"wpctl get-volume @DEFAULT_AUDIO_SINK@ | grep -c MUTED || echo 0")
(defpoll sink-inputs :interval "2s"
"~/.config/eww/scripts/get-sinks.sh")
(defwidget volume-overlay []
(box :class "volume-overlay" :orientation "v" :spacing 12 :space-evenly false
(box :class "header" :orientation "h" :space-evenly false :spacing 8
(label :class "header-icon" :text "󰕾")
(label :class "header-title" :text "Volume Mixer"))
(box :class "sink-row" :orientation "v" :spacing 4
(box :orientation "h" :space-evenly false :spacing 8
(label :class "app-icon" :text "󰓃")
(label :class "app-name" :text "Master")
(label :class "app-vol" :text "${volume}%"))
(scale :class "vol-slider master-slider"
:min 0 :max 100 :value volume
:onchange "wpctl set-volume @DEFAULT_AUDIO_SINK@ {}%"))
(box :class "divider")
(for sink in sink-inputs
(box :class "sink-row" :orientation "v" :spacing 4
(box :orientation "h" :space-evenly false :spacing 8
(label :class "app-icon" :text "󰓃")
(label :class "app-name" :text {sink.name})
(label :class "app-vol" :text "${sink.volume}%"))
(scale :class "vol-slider"
:min 0 :max 100 :value {sink.volume}
:onchange "wpctl set-volume ${sink.id} {}%")))
(button :class "mute-btn ${muted == "1" ? "muted" : ""}"
:onclick "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"
(label :text "${muted == "1" ? "󰝟 Muted" : "󰕾 Mute"}"))))
(defwindow volume-mixer
:monitor 0
:geometry (geometry :x "0px" :y "40px"
:width "280px"
:anchor "top right")
:stacking "overlay"
:exclusive false
(volume-overlay))