nixos-config/home-manager/modules/eww/config/eww.yuck
2023-07-04 20:24:29 +02:00

233 lines
9.4 KiB
Text

;; Variables
(defvar power false)
(defvar show-date false)
(defvar show-volume false)
(defvar volume-muted false)
(defvar ha-now-playing "/nix/store/n3364y7amwgjs94whqapvdvp9d7d3zrh-ha-now-playing-0.5.0/bin/ha-now-playing --host home.datarift.nl --token-file /run/secrets/ha_now_playing_token --entity media_player.sonos_woonkamer")
;; Polls
(defpoll volume-current
:initial 0
:interval "1s"
`pamedia get -b`)
;; Listen
(deflisten sonos-now-playing
:initial "{\"muted\":false,\"text\":\"\"}"
`/nix/store/n3364y7amwgjs94whqapvdvp9d7d3zrh-ha-now-playing-0.5.0/bin/ha-now-playing --host home.datarift.nl --token-file /run/secrets/ha_now_playing_token --entity media_player.sonos_woonkamer`)
(deflisten wm-info
:initial "{\"workspaces\":[],\"mode\":\"default\",\"title\":\"\"}"
`scripts/workspaces.nu`)
;; Widgets
(defwidget mode []
(box :space-evenly false
:spacing 2
:class "mode"
(label :class "icon"
:visible {wm-info.mode != "default"}
:text "󰁌")
(label :visible {wm-info.mode != "default"}
:text {wm-info.mode})))
(defwidget workspaces []
(box :space-evenly false
:spacing 5
:class "workspaces"
(box :space-evenly false
:spacing 0
(for ws in {wm-info.workspaces}
(button :onclick "swaymsg workspace ${ws.name}"
:class "ws${ws.visible ? ' visible' : ''}${ws.focused ? ' focused' : ''}${ws.urgent ? ' urgent' : ''}"
(box :space-evenly false
:spacing 2
(label :class "icon small"
:visible {!ws.focused && !ws.urgent}
:text "")
(label :class "icon small"
:visible {ws.focused}
:text "")
(label :class "icon small"
:visible {ws.urgent}
:text "")
(label :text "${ws.name}"))))
(mode))))
;; (defwidget workspaces []
;; (box :space-evenly false
;; :spacing 5
;; :class "workspaces"
;; (label :text {wm-info.title})))
(defwidget ha-now-playing []
(eventbox :onclick "${ha-now-playing} play-pause"
:onrightclick "${ha-now-playing} ${sonos-now-playing.muted ? 'unmute' : 'mute'}"
:onscroll "${ha-now-playing} volume-{}"
(box :class "ha-now-playing"
:space-evenly false
:spacing 2
(label :class "icon"
:text "󰐹")
(label :text {sonos-now-playing.text}))))
(defwidget date-time []
(eventbox :onclick "${EWW_CMD} update show-date=${!show-date}"
:cursor "pointer"
(box :class "time"
:space-evenly false
:spacing 2
(label :visible {!show-date}
:class "icon"
:text "󰅐")
(label :visible {!show-date}
:text "${formattime(EWW_TIME, '%H:%M:%S')}")
(label :visible show-date
:class "icon"
:text "󰃭")
(label :visible show-date
:text "${formattime(EWW_TIME, '%a, %d %b %Y')}"))))
(defwidget memory []
(box :class "memory"
:space-evenly false
:spacing 2
:tooltip "${round(EWW_RAM.used_mem / 1024 / 1024 / 1024, 2)}GiB / ${round(EWW_RAM.total_mem / 1024 / 1024 / 1024, 2)}GiB used"
(label :class "icon"
:text "󰍛")
(label :text "${round(EWW_RAM.used_mem_perc, 1)}%")))
(defwidget cpu []
(box :class "cpu"
:space-evenly false
:spacing 2
:tooltip {jq(EWW_CPU, "reduce .cores[] as $core (\"\"; . + $core.core + \": \" + ($core.usage | tostring) + \"%\\n\") | {tooltip:.}").tooltip}
(label :class "icon"
:text "󰻠")
(label :text "${round(EWW_CPU.avg, 2)}%")))
(defwidget temperature []
(box :class "temperature"
:space-evenly false
:spacing 2
(label :class "icon"
:text "󰔏")
(label :text "${round(EWW_TEMPS.ZENPOWER_TDIE, 1)}°C")))
(defwidget volume []
(eventbox :onhover "${EWW_CMD} update show-volume=true"
:onhoverlost "${EWW_CMD} update show-volume=false"
:onclick "pamedia mute"
:onmiddleclick "helvum"
:onrightclick "pavucontrol"
:tooltip "Volume: ${volume-current}%"
:cursor "pointer"
(box :space-evenly false
:spacing 5
:class "volume"
(revealer :transition "slideleft"
:reveal show-volume
:duration "550ms"
(scale :class "volume-bar"
:flipped true
:value volume-current
:orientation "h"
:min 0
:max 101
:round-digits 0
:tooltip "Volume: ${volume-current}%"
:onchange "pamedia set {}"))
(label :class "icon"
:visible {!volume-muted}
:text "󰕾")
(label :class "icon"
:visible volume-muted
:text "󰸈"))))
(defwidget control []
(box :class "control"
:space-evenly false
:spacing 2
(volume)
(cpu)
(temperature)
(memory)))
(defwidget power []
(eventbox :onhover "${EWW_CMD} update power=true"
:onhoverlost "${EWW_CMD} update power=false"
:cursor "pointer"
(box :space-evenly false
:class "powermenu"
(revealer :transition "slideleft"
:reveal power
:duration "550ms"
(box :orientation "h"
:space-evenly false
(button :class "button-reboot"
:tooltip "Reboot"
:onclick "systemctl reboot" "󰜉")
(button :class "button-quit"
:tooltip "Logout"
:onclick "i3-msg exit" "󰗼")
(button :class "button-hibernate"
:tooltip "Hibernate"
:onclick "systemctl hibernate" "󰤄")))
(button :class "button-shutdown"
:tooltip "Shutdown"
:onclick "systemctl shutdown" "󰐥"))))
(defwidget title []
(label :text {wm-info.title}))
(defwidget left []
(box :orientation "h"
:halign "start"
(workspaces)
(ha-now-playing)))
(defwidget right []
(box :orientation "h"
:space-evenly false
:halign "end"
(date-time)
(power)))
(defwidget end []
(box :orientation "h"
:halign "end"
:space-evenly false
(control)
(right)))
(defwidget bar []
(box :class "eww_bar"
:orientation "h"
:hexpand false
:vexpand false
(centerbox
(left)
(title)
(end))))
;; Bar windows
(defwindow bar-x11
:geometry (geometry :x "0"
:y "0"
:width "100%"
:height "47px"
:anchor "top center")
:stacking "fg"
:monitor 0
:reserve (struts :distance "47px"
:side "top")
:wm-ignore false
:hexpand false
:vexpand false
:exclusive true
(bar))