(defwindow sidebar :geometry (geometry :x "0px" :y "0px" :width "1px" :height "1024" :anchor "bottom left") :stacking "fg" :monitor "0" (sidebar)) (defwidget sidebar [] (eventbox :halign "start" :onhover "${EWW_CMD} update side=true" :onhoverlost "${EWW_CMD} update side=false" (revealer :transition "slideright" :reveal side :duration "550ms" (side)))) (defvar side false) ;; background (defwidget side [] (box :class "side" :orientation "v" :space-evenly "false" :spacing "30" :halign "start" (fetch) (top) (music-side) (system-side) (tray)) ) (defwidget top [] (box :orientation "h" :space-evenly "false" :spacing "30" :halign "center" (date) (weather)) ) ;; Music Widgets (defwidget music-side [] (box :class "music-player" :orientation "h" :space-evenly "false" :spacing 15 :halign "center" :valign "start" :hexpand "true" :width "" (box :class "album_art" :style "background-image: url('${art}');") (box :orientation "v" :space-evenly "false" :valign "center" :halign "center" :spacing 10 (label :class "song" :limit-width 15 :text title) (label :class "artist" :limit-width 15 :text artist) (box :orientation "h" :space-evenly "false" :valign "center" :halign "center" :spacing 25 (button :class "btn_prev" :onclick "scripts/music previous" "玲") (button :class "btn_play" :onclick "scripts/music toggle" playpause) (button :class "btn_next" :onclick "scripts/music next" "怜"))))) (defpoll art :interval "1s" "scripts/music coverloc") (defpoll title :interval "1s" "scripts/music title") (defpoll artist :interval "1s" "scripts/music artist") (defpoll playpause :interval "1s" "scripts/music statusicon") ;; weather (defwidget weather [] (box :class "weather" :orientation "v" :spacing -2 :space-evenly "false" :vexpand "true" :hexpand "false" :valign "start" :halign "center" (label :class "iconweather" :halign "center" :valign "center" :style "color: ${HEX};" :text ICON) (button :onclick "scripts/weather --getdata && eww reload &" :class "label_temp" :valign "center" :halign "center" "${TEMP}"))) (defwidget date [] (box :class "date" :orientation "v" :valign "start" :space-evenly "false" :halign "center" (label :text DAY) (label :text POO) (label :class "foo" :text FOO))) (defpoll FOO :interval "6h" "date '+%d'") (defpoll DAY :interval "6h" "date '+%A'") (defpoll POO :interval "6h" "date '+%B'") ;; Weather vars (defpoll ICON :interval "15m" `scripts/weather --icon`) (defpoll TEMP :interval "15m" `scripts/weather --temp`) (defpoll HEX :interval "15m" `scripts/weather --hex`) ;; <-- System --> (defwidget system-side [] (box :class "stats-box" :space-evenly "false" :width "300px" :orientation "v" :valign "start" :halign "center" :spacing 12 (box :class "stats" :hexpand "false" :vexpand "false" :space-evenly "false" (label :tooltip "${round(EWW_CPU.avg, 0)}%" :class "stats-icon" :text "") (scale :min 0 :max 101 :active false :value {EWW_CPU.avg} :class "scale" :width 280)) (box :class "stats" :hexpand "false" :vexpand "false" :space-evenly "false" (label :tooltip "${round(EWW_RAM.used_mem_perc, 0)}%" :class "stats-icon" :text "﬙") (scale :min 0 :max 101 :active false :value {EWW_RAM.used_mem_perc} :class "scale" :width 280)) (box :class "stats" :hexpand "false" :vexpand "false" :space-evenly "false" (label :tooltip "${round(EWW_DISK["/"].used_perc, 0)}%" :class "stats-icon" :text "") (scale :min 0 :max 101 :active false :value {(EWW_DISK["/"].used / EWW_DISK["/"].total) * 100} :class "scale" :width 280)) (box :class "stats" :hexpand "false" :vexpand "false" :space-evenly "false" (label :tooltip "${gpu}%" :class "stats-icon" :text "調") (scale :min 0 :max 101 :active false :value gpu :class "scale" :width 280)) (box :class "stats" :hexpand "false" :vexpand "false" :space-evenly "false" (button :tooltip "${volume_percent}%" :onclick "amixer set Master toggle" :onrightclick "alsamixer &" :class "stats-icon" "墳") (scale :min 0 :max 101 :active true :value volume_percent :class "scale" :width 280 :onchange "amixer sset Master {}%") ))) (deflisten gpu "scripts/gpu") (defwidget tray [] (box :class "buttons" :orientation "h" :space-evenly "false" :halign "center" :valign "start" :spacing "2" (button :class "poweroff" :halign "center" :tooltip "Shut Down" :onclick "kitty poweroff &" "⏻") (button :class "reboot" :halign "center" :tooltip "Reboot" :onclick "kitty reboot &" "") (button :class "firmware" :halign "center" :tooltip "Reboot to EFI" :onclick "kitty systemctl reboot --firmware &" "拉") (button :class "exit" :halign "center" :tooltip "Quit Hyprland" :onclick "hyprctl dispatch exit exit" "") (button :class "restart" :halign "center" :tooltip "edit Config" :onclick "footclient nvim ~/.config/hypr/hyprland.conf &" ""))) (defpoll uptime :interval "1m" "uptime -p | sed -e 's/up //;s/ hours,/h/;s/ minutes/m/'") (defpoll packages :interval "5m" `pacman -Q | wc -l`) (defpoll kernal :interval "5m" `uname -r`) (defpoll name :interval "5m" `whoami`) (defpoll host :interval "5m" `uname -n`) (defpoll wm :interval "5m" `echo $XDG_CURRENT_DESKTOP`) (defwidget fetch [] (box :class "fetch" :orientation "v" :space-evenly "false" :halign "center" :valign "start" :spacing "10" (label :class "host" :halign "start" :text " : ${name}@${host}") (label :class "wm" :halign "start" :text " : ${wm}") (label :class "uptime" :halign "start" :text " : ${uptime}") (label :class "packages" :halign "start" :text " : ${packages}") (label :class "kernal" :halign "start" :text " : ${kernal}") ) )