221 lines
6.1 KiB
Text
221 lines
6.1 KiB
Text
; Static vars
|
|
(defvar GIGA 1073741824)
|
|
|
|
(defpoll time :interval "10s"
|
|
`date +" %H:%M %a, %b %d"`)
|
|
|
|
(defpoll power_profile :interval "10s" :initial "" "~/.config/eww/scripts/power_profile")
|
|
(defpoll gpu_status :initial "active" :interval "2s" "cat /sys/bus/pci/devices/0000:01:00.0/power/runtime_status")
|
|
(defpoll power_now :initial "active" :interval "5s" "cat /sys/class/power_supply/BAT0/power_now")
|
|
(defpoll energy_now :initial "active" :interval "5s" "cat /sys/class/power_supply/BAT0/energy_now")
|
|
(defpoll refresh_rate :interval "10s" :initial "165" "~/.config/eww/scripts/refresh_rate")
|
|
|
|
|
|
(deflisten connectivity :initial '{"status": "down"}' "~/.config/eww/scripts/get-connectivity wlan0")
|
|
(deflisten bluetoothinfo :initial '{"count": 0}' "~/.config/eww/scripts/get-bluetooth-info")
|
|
(deflisten hypr :initial '{"spaces": [], "current": 0, "title": ""}' "~/.config/eww/scripts/hypr/hyprstatus")
|
|
|
|
(deflisten volume :initial "{}" "~/.config/eww/scripts/get-volume")
|
|
|
|
(defwidget container [?nopadding]
|
|
(box
|
|
:class "container"
|
|
:style "padding: ${nopadding == true ? "0px" : "0px 10px 0px 10px"}"
|
|
:orientation "horizontal"
|
|
:halign "end"
|
|
:space-evenly false
|
|
(children))
|
|
)
|
|
|
|
(defwidget time []
|
|
(label
|
|
:class "time"
|
|
:text time)
|
|
)
|
|
|
|
(defwidget connectivity []
|
|
(eventbox
|
|
:onclick "bash -c 'iwgtk &> /dev/null &'"
|
|
(label
|
|
:class "connectivity"
|
|
:text " ${connectivity.status == "down" ? "down" : connectivity.ssid}"
|
|
:limit-width 14)
|
|
)
|
|
)
|
|
|
|
(defwidget bluetooth []
|
|
(eventbox
|
|
:onclick "bash -c 'blueman-manager &> /dev/null &'"
|
|
(label
|
|
:class "bluetooth"
|
|
:text " ${bluetoothinfo.count > 0 ? bluetoothinfo.count : bluetoothinfo.power}")
|
|
)
|
|
)
|
|
|
|
(defwidget workspaces [monitor]
|
|
(eventbox :onscroll "bash ~/.config/eww/scripts/hypr/change-active-workspace {} ${hypr.current}" :class "workspaces"
|
|
(box :space-evenly true
|
|
(label :text "${hypr.spaces}${hypr.current}" :visible false)
|
|
(for workspace in {hypr.spaces}
|
|
(eventbox :onclick "hyprctl dispatch workspace ${workspace.id}" :visible "${workspace.monitor == monitor}"
|
|
(box :class "workspace-entry ${workspace.id == hypr.current ? "current" : ""}"
|
|
(label :text "${workspace.id}")
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
|
|
(defwidget activewindow []
|
|
(label
|
|
:text "${hypr.title ?: "..."}"
|
|
:limit-width 64)
|
|
)
|
|
|
|
(defwidget ram []
|
|
(label
|
|
:text " ${round(EWW_RAM.used_mem/GIGA, 1)}G/${round(EWW_RAM.total_mem/GIGA, 1)}G"
|
|
:class "${EWW_RAM.used_mem >= EWW_RAM.total_mem * 0.9 ? "critical" : EWW_RAM.used_mem >= EWW_RAM.total_mem * 0.6 ? "warning" : ""}")
|
|
)
|
|
|
|
(defwidget cpu []
|
|
(label
|
|
:text " ${round(EWW_CPU.avg, 0)}%"
|
|
:class "${EWW_CPU.avg >= 90 ? "critical" : EWW_CPU.avg >= 60 ? "warning" :""}")
|
|
)
|
|
|
|
(defwidget temp []
|
|
(label
|
|
:text " ${EWW_TEMPS.ACPITZ_TEMP1}°C"
|
|
:class "${EWW_TEMPS.ACPITZ_TEMP1 >= 90 ? "critical" : EWW_TEMPS.ACPITZ_TEMP1 >= 70 ? "warning" : ""}")
|
|
)
|
|
|
|
(defvar PP_STATE '{"Quiet": "normal", "Balanced": "warning", "Performance": "critical"}')
|
|
(defwidget powerprofile []
|
|
(button :onclick "~/.config/eww/scripts/power_profile next"
|
|
(label
|
|
:text " ${power_profile}"
|
|
:class "${PP_STATE[power_profile]}")
|
|
)
|
|
)
|
|
|
|
(defvar GPU_ICON '{"active": "", "suspended": "", "resuming": "", "suspending": ""}')
|
|
(defvar GPU_STATE '{"active": "warning", "suspended": "normal", "resuming": "warning", "suspending": "normal"}')
|
|
(defwidget gpustatus []
|
|
(label
|
|
:text "${GPU_ICON[gpu_status]} "
|
|
:class "${GPU_STATE[gpu_status]}")
|
|
)
|
|
|
|
(defwidget refreshrate []
|
|
(button :onclick "~/.config/eww/scripts/refresh_rate toggle"
|
|
(label
|
|
:text "${refresh_rate}Hz"
|
|
:class "${refresh_rate == "60" ? "normal" : "warning"}")
|
|
)
|
|
)
|
|
|
|
(defwidget battery []
|
|
(label
|
|
:text "${EWW_BATTERY.BAT0.status == "Discharging" ?
|
|
" ${EWW_BATTERY.BAT0.capacity}% (${round(energy_now/power_now, 0)}h${round((energy_now/power_now - round(energy_now/power_now - 0.5, 0)) * 60, 0)} at ${round(power_now/1000000, 2)}W)" :
|
|
" ${EWW_BATTERY.BAT0.capacity}%"
|
|
}"
|
|
:class "${EWW_BATTERY.BAT0.status == "Discharging" ? EWW_BATTERY.BAT0.capacity <= 15 || power_now/1000000 > 25 ? "critical" : EWW_BATTERY.BAT0.capacity <= 40 || power_now/1000000 > 15 ? "warning" : "normal" : "normal"}")
|
|
)
|
|
|
|
(defwidget volume []
|
|
(eventbox
|
|
:onclick "pamixer -t"
|
|
:onscroll "echo {} | sed 's/up/-i/g; s/down/-d/g' | xargs -I{} pamixer {} 1"
|
|
(label
|
|
:text "${volume.speaker == "Muted" ? "" : ""} ${volume.speaker}"
|
|
:class "volume"
|
|
)
|
|
)
|
|
)
|
|
|
|
(defwidget mic []
|
|
(eventbox
|
|
:onclick "pamixer --default-source -t"
|
|
:onscroll "echo {} | sed 's/up/-i/g; s/down/-d/g' | xargs -I{} pamixer --default-source {} 1"
|
|
(label
|
|
:text "${volume.mic == "Muted" ? "" : ""} ${volume.mic}"
|
|
:class "mic"
|
|
)
|
|
)
|
|
)
|
|
|
|
(defwidget leftstuff [monitor]
|
|
(box
|
|
:space-evenly false
|
|
(container
|
|
(time)
|
|
(label :text "") ; Else container spacing rule doesn't apply
|
|
(connectivity)
|
|
(label :text "") ; Else container spacing rule doesn't apply
|
|
(bluetooth)
|
|
)
|
|
|
|
(container
|
|
:nopadding true
|
|
(workspaces :monitor monitor)
|
|
)
|
|
)
|
|
)
|
|
|
|
(defwidget centerstuff []
|
|
(container
|
|
(activewindow)
|
|
)
|
|
)
|
|
|
|
(defwidget rightstuff []
|
|
(box
|
|
:space-evenly false
|
|
:halign "end"
|
|
(container
|
|
(ram)
|
|
(cpu)
|
|
(temp)
|
|
(powerprofile)
|
|
(box :space-evenly false
|
|
(gpustatus)
|
|
(refreshrate)
|
|
)
|
|
(battery)
|
|
)
|
|
(container
|
|
(volume)
|
|
(label :text "") ; Else container spacing rule doesn't apply
|
|
(mic)
|
|
(systray :pack-direction "ltr" :class "systray")
|
|
)
|
|
)
|
|
)
|
|
|
|
(defwidget barwidget [monitor]
|
|
(centerbox
|
|
:class "bar"
|
|
:orientation "horizontal"
|
|
(leftstuff :monitor monitor)
|
|
(centerstuff)
|
|
(rightstuff)
|
|
)
|
|
)
|
|
|
|
(defwindow bar [?monitor]
|
|
:namespace "eww.bar"
|
|
:monitor "${monitor ?: 0}"
|
|
:geometry (geometry
|
|
:x "0%"
|
|
:y "8px"
|
|
:width "100%"
|
|
:height "38px"
|
|
:anchor "top center")
|
|
:stacking "fg"
|
|
:focusable false
|
|
:exclusive true
|
|
(barwidget :monitor "${monitor ?: 0}")
|
|
)
|