Files
dotfiles/eww/eww.yuck
2026-04-23 05:43:05 +02:00

311 lines
8.9 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
;;; ─────────────────────────────────────────────
;;; Variables
;;; ─────────────────────────────────────────────
(deflisten workspaces-dp2
:initial "[]"
"python3 ~/.config/eww/scripts/get-workspaces.py DP-2")
(deflisten workspaces-hdmi
:initial "[]"
"python3 ~/.config/eww/scripts/get-workspaces.py HDMI-A-1")
(deflisten active-window-dp2
:initial ""
"bash ~/.config/eww/scripts/get-active-window.sh DP-2")
(deflisten active-window-hdmi
:initial ""
"bash ~/.config/eww/scripts/get-active-window.sh HDMI-A-1")
(defpoll clock-time
:interval "1s"
"date '+%H:%M:%S'")
(defpoll clock-date
:interval "1s"
"date '+%A, %B %d %Y'")
(defpoll cpu-usage
:interval "2s"
"top -bn1 | grep 'Cpu(s)' | awk '{print int($2+$4)}'")
(defpoll mem-used
:interval "2s"
"free -g --si | awk '/Mem:/{printf \"%.1f\", $3}'")
(defpoll network-info
:interval "5s"
"bash ~/.config/eww/scripts/get-network.sh")
(defpoll volume-info
:interval "1s"
"bash ~/.config/eww/scripts/get-volume.sh")
(defpoll theme-info
:interval "2s"
"bash ~/.config/eww/scripts/get-theme.sh")
;;; ─────────────────────────────────────────────
;;; Helper Widgets
;;; ─────────────────────────────────────────────
(defwidget workspace-btn [id label active urgent output icons pxwidth]
(box
:orientation "h"
:width pxwidth
(button
:class {active ? "workspace-btn active" : urgent ? "workspace-btn urgent" : "workspace-btn"}
:onclick "hyprctl dispatch workspace ${id}"
:hexpand true
(box
:orientation "h"
:spacing 3
:halign "center"
:valign "center"
(label :text label :class "ws-label")
(for icon in icons
(image
:path icon
:image-width 16
:image-height 16))))))
(defwidget workspaces-widget [workspaces]
(box
:class "workspaces"
:orientation "h"
:spacing 2
(for ws in workspaces
(workspace-btn
:id {ws.id}
:label {ws.label}
:active {ws.active}
:urgent {ws.urgent}
:output {ws.output}
:icons {ws.icons}
:pxwidth {ws.pxwidth}))))
;;; add this with your variables
(defvar clock-show-date false)
;;; replace your clock-widget
(defwidget clock-widget []
(button
:class "clock"
:onclick "eww update clock-show-date=${clock-show-date == 'true' ? 'false' : 'true'}"
(label
:class "clock-time"
:text {clock-show-date == "true" ? clock-date : clock-time})))
(defwidget cpu-widget []
(box
:class "stat-pill"
:orientation "h"
:spacing 4
(label :text "${cpu-usage}%" :class "stat-value")))
(defwidget mem-widget []
(box
:class "stat-pill"
:orientation "h"
:spacing 4
(label :text "${mem-used}G" :class "stat-value")))
(defwidget network-widget []
(box
:class "stat-pill"
:orientation "h"
:spacing 4
(label :text {network-info == "offline" ? "Offline" :
network-info =~ "^wifi:.*" ? "${network-info}" :
"${network-info}"}
:class "stat-value"
:limit-width 20)))
(defwidget volume-widget [on-click]
(button
:class "stat-pill clickable"
:onclick on-click
(box
:orientation "h"
:spacing 4
(label
:text {volume-info =~ "^muted.*" ? "󰝟" :
volume-info =~ "^[0-9]" && volume-info < "34" ? "󰕿" :
volume-info =~ "^[0-9]" && volume-info < "67" ? "󰖀" : "󰕾"}
:class "stat-icon")
(label
:text {volume-info =~ "^muted.*" ? "Muted" : "${volume-info}%"}
:class "stat-value"))))
(defwidget theme-widget []
(button
:class "stat-pill clickable theme-btn"
:onclick "bash $HOME/.config/hypr/theme-cycle.sh next"
:onrightclick "bash $HOME/.config/hypr/theme-cycle.sh auto"
(label :text theme-info :class "theme-icon")))
(defwidget logout-btn []
(button
:class "center-btn"
:onclick "your-logout-command"
(label :text "󰍃")))
(defwidget settings-btn []
(button
:class "center-btn"
:onclick "your-settings-command"
(label :text "󰒓")))
;;; ─────────────────────────────────────────────
;;; Bar for DP-2 (workspaces 15)
;;; ─────────────────────────────────────────────
(defwidget bar-dp2 []
(centerbox
:orientation "h"
(box :class "bar-left" :orientation "h" :spacing 8 :space-evenly false :halign "start"
(workspaces-widget :workspaces workspaces-dp2))
(box :class "bar-center" :orientation "h" :spacing 12 :space-evenly false
(clock-widget)
)
(box :class "bar-right" :orientation "h" :spacing 8 :space-evenly false :halign "end"
(settings-menu)
(logout-menu)
(cpu-widget)
(mem-widget))))
(defwindow bar-dp2
:monitor 0
:geometry (geometry
:x "10px"
:y "8px"
:width "1920px"
:height "24px"
:anchor "top center")
:exclusive true
:layer "top"
:namespace "eww-bar"
(bar-dp2))
;;; ─────────────────────────────────────────────
;;; Bar for HDMI-A-1 (workspaces 610)
;;; ─────────────────────────────────────────────
(defwidget bar-hdmi []
(centerbox
:orientation "h"
(box :class "bar-left" :orientation "h" :spacing 8 :space-evenly false
(workspaces-widget :workspaces workspaces-hdmi))
(box :class "bar-center" :orientation "h" :spacing 12 :space-evenly false
(logout-btn)
(clock-widget))
(box :class "bar-right" :orientation "h" :spacing 2 :space-evenly false :halign "end"
(settings-btn)
(cpu-widget)
(mem-widget))))
(defwindow bar-hdmi
:monitor 1
:geometry (geometry
:x "10px"
:y "8px"
:width "1920px"
:height "24px"
:anchor "top center")
:exclusive true
:layer "top"
:namespace "eww-bar"
(bar-hdmi))
(defvar logout-menu-open false)
(defvar settings-menu-open false)
(defwidget logout-menu []
(box
:class "center-menu-wrap"
:orientation "h"
:spacing 4
:space-evenly false
(revealer
:reveal {logout-menu-open == "true"}
:transition "slideright"
:duration "200ms"
(box
:class "center-menu"
:orientation "h"
:spacing 4
:space-evenly false
(button
:class "center-btn"
:tooltip "Lock"
:onclick "eww update logout-menu-open=false && hyprlock"
(label :text "󰌾"))
(button
:class "center-btn"
:tooltip "Reboot"
:onclick "eww update logout-menu-open=false && systemctl reboot"
(label :text "󰜉"))
(button
:class "center-btn"
:tooltip "Shutdown"
:onclick "eww update logout-menu-open=false && systemctl poweroff"
(label :text "󰐥"))
(button
:class "center-btn"
:tooltip "Logout"
:onclick "eww update logout-menu-open=false && hyprctl dispatch exit"
(label :text "󰍃"))))
(button
:class "center-btn"
:onclick "eww update logout-menu-open=${logout-menu-open == 'true' ? 'false' : 'true'} && eww update settings-menu-open=false"
(label :text {logout-menu-open == "true" ? "󰅖" : "󰍃"}))
))
(defwidget settings-menu []
(box
:class "center-menu-wrap"
:orientation "h"
:spacing 4
:space-evenly false
(revealer
:reveal {settings-menu-open == "true"}
:transition "slideright"
:duration "200ms"
(box
:class "center-menu"
:orientation "h"
:spacing 4
:space-evenly false
(theme-widget)
(volume-widget :on-click "bash ~/.config/eww/scripts/toggle-mixer.sh")
(network-widget)
(button
:class "center-btn"
:tooltip "Displays"
:onclick "eww update settings-menu-open=false && wdisplays"
(label :text "󰍹"))
))
(button
:class {settings-menu-open == "true" ? "center-btn active" : "center-btn"}
:onclick "eww update settings-menu-open=${settings-menu-open == 'true' ? 'false' : 'true'} && eww update logout-menu-open=false"
(label :text {settings-menu-open == "true" ? "󰅖" : "󰒓"}))
))