(defwidget bar [] (centerbox :orientation "v" :hexpand false (box :valign "start" :hexpand false :vexpand true :orientation "v" :space-evenly false (launch) (dashbutton) (powerbutton) ) (workspaces :halign "center" :vexpand true :hexpand false :orientation "v") (box :valign "end" :hexpand false :vexpand true :orientation "v" :space-evenly false (battery) (wifi) (mem :thickness 4 :icon "") (cpu :thickness 4 :icon "") (disk :thickness 4 :icon "") (time) ) ) ) (defpoll brightness :interval "999h" :initial 0 `brightnessctl -m | awk -F, '{print substr($4, 0, length($4)-1)}'`) (defpoll volume :interval "999h" :initial 0 `pamixer --get-volume`) (defpoll micvolume :interval "999h" :initial 0 `pamixer --get-volume --source 1`) (defwidget dashboard [] (box :orientation "v" (box :class "info_box" :orientation "v" :space-evenly false (box :class "calendar_box" (calendar :width 200 :class "cal") ) (box :class "slider_box" :orientation "v" :vexpand false :hexpand false (box :space-evenly false (label :class "slider_icon" :text "") (scale :min 1 :max 101 :width 315 :class "brightness_slider" :value brightness :onchange "brightnessctl set {}%" :height 10) ) (box :space-evenly false (label :class "slider_icon" :text "墳") (scale :min 1 :max 101 :width 315 :class "volume_slider" :value volume :onchange "pamixer --set-volume $(echo {} | sed 's/[.].*$//')") ) (box :space-evenly false (label :class "slider_icon" :text "") (scale :min 1 :max 101 :width 315 :class "micvolume_slider" :value micvolume :onchange "pamixer --set-volume $(echo {} | sed 's/[.].*$//') --source 1") ) ) (box :class "sysinfo_box" :orientation "h" :vexpand true :spacing 15 (mem :thickness 12 :icon "") (cpu :thickness 12 :icon "") (disk :thickness 12 :icon "") ) ) (box :class "notification_box" ) ) ) ;; Variables (defvar time false) (defvar cal false) ;; ━━━ WIDGETS ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ;; ━━━ MEMORY ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ (defwidget dashbutton[] (button :class "reg-btn dashbutton" :onclick "eww open dashboard --toggle" "舘") ) ;; ━━━ MEMORY ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ (defwidget mem [icon thickness] (box :vexpand "false" :hexpand "false" (circular-progress :value {EWW_RAM.used_mem_perc} :class "membar" :thickness {thickness} :start-at 75 (label :class "iconmem" :text {icon}) ) ) ) ;; ━━━ CPU ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ (defwidget cpu [icon thickness] (box :vexpand "false" :hexpand "false" (circular-progress :value {EWW_CPU.avg} :class "cpubar" :thickness {thickness} :start-at 75 (label :class "iconcpu" :text {icon}) ) ) ) ;; ━━━ DISK ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ (defwidget disk [icon thickness] (box :vexpand "false" :hexpand "false" (circular-progress :value {EWW_DISK["/"].used_perc} :class "diskbar" :thickness {thickness} :start-at 75 (label :class "icondisk" :text {icon}) ) ) ) ;; ━━━ WIFI ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ (defvar wifi "{}") (defpoll wifi :interval "30s" "./scripts/wifi.sh") (defwidget wifi [] (box :vexpand false :hexpand false :orientation "v" (label :text {wifi.icon} :limit-width 10 :tooltip {wifi.status} :class "wifi" ) ) ) ;; ━━━ BATTERY ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ (defvar battery "{}") (defpoll battery :interval "60s" "./scripts/battery.sh") (defwidget battery [] (label :text {battery.icon} :limit-width 10 :tooltip "${battery.status}: ${battery.percent}" :class "battery" ) ) ;; ━━━ VOLUME ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ (defvar volume-level 50) (defvar volume-muted false) (defwindow volume :monitor 0 :geometry (geometry :y "100px" :x "0px" :width "250px" :height "200px" :anchor "center bottom") :windowtype "dock" :wm-ignore true :stacking "fg" (box :class "volume-window" :orientation "v" :space-evenly "false" (box :class "volume-widget" :orientation "h" :space-evenly false :spacing 10 (label :text {volume-muted ? "" : volume-level == 0 ? "" : volume-level < 32 ? "" : volume-level < 65 ? "" : ""} :class 'volume-icon ${volume-muted ? "volume-icon-muted" : ""}' ) (scale :class 'volume-slider ${volume-muted ? "volume-slider-muted" : ""}' :hexpand "true" :min 0 :max 100 :height 8 :marks true :value volume-level :onchange "pamixer --set-volume {}")))) ;; ━━━ TIME ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ (defpoll hour :interval "10s" "date +%H") (defpoll minute :interval "10s" "date +%M") (defpoll dateVar :interval "600s" "date '+%A %d.%m.%y'") (defwidget time [] (eventbox :cursor "hand" :hexpand false :vexpand false :tooltip "${dateVar}" (box :orientation "v" :hexpand false :vexpand false :space-evenly false :class "clock" (button :class "date" :onclick "" "${hour}") (button :class "date" :onclick "" "${minute}") ) ) ) (defvar bright-level 50) (defvar bright-muted false) (defwindow brightness :monitor 0 :geometry (geometry :y "-60px" :x "60px" :width "300px" :height "150px" :anchor "bottom left") :wm-ignore true :stacking "fg" (box :class "volume-window" :orientation "v" :space-evenly "false" (box :class "volume-widget" :orientation "h" :space-evenly false :spacing 10 (label :text "" :class 'volume-icon' ) (scale :class 'volume-slider' :hexpand "true" :min 0 :max 100 :height 8 :marks true :value bright-level :onchange "brightnessctl set {}%")))) (defwidget launch [] (button :class "reg-btn launchbutton" :hexpand true :onclick "wofi --show run --xoffset=1670 --yoffset=12 --width=230px --height=984 --style=$HOME/.config/wofi.css --term=kittyclient --prompt=Run &" "") ) (defwidget powerbutton [] (eventbox :cursor "hand" (button :class "reg-btn powerbutton" :onclick "eww open powermenu --toggle &" "") ) ) (defwidget powermenucontent [] (box :orientation "h" :class "powermenu-container" (box :class "shutdown-btn-box" :orientation "h" (button :class "btn" :tooltip "Shutdown" :onclick "eww close powermenu && shutdown now" "⏻") ) (box :class "reboot-btn-box" :orientation "h" (button :class "btn" :tooltip "Reboot" :onclick "eww close powermenu && reboot" "") ) (box :class "exit-btn-box" :orientation "h" (button :class "btn" :tooltip "Suspend" :onclick "systemctl suspend" "") ) ) ) (defwindow powermenu :monitor 0 :geometry (geometry :x "0%" :y "0%" :width "30%" :height "15%" :anchor "center center") :wm-ignore true (powermenucontent)) (deflisten workspaces_listen "./scripts/workspaces.sh") (defwidget workspaces [] (literal :content workspaces_listen)) (defwindow dashboard :monitor 0 :geometry (geometry :height "1080px" :width "350px" :x "48px" :y "0px" :anchor "top left") :stacking "fg" :class "dashboard" (dashboard)) (defwindow bar :monitor 0 :exclusive false :geometry (geometry :height "1080px" :x "-4px" :y "0px" :width "52px" :anchor "top left") :stacking "fg" (bar))