(defwidget bar-1 [screen] (box :class "main-cont" :orientation "h" (box :class "segment-start" :halign "start" :valign "center" (start-control :screen screen) ) (box :class "segment-center" :halign "center" :valign "center" :space-evenly true (mid-control) ) (box :class "segment-end" :halign "end" :valign "center" (end-control) ) ) ) (defwidget bar-2 [screen] (box :class "main-cont" :orientation "h" (box :class "segment-start" :halign "start" :valign "center" (start-control :screen screen) ) (box :class "segment-center" :halign "center" :valign "center" :space-evenly true (mid-control) ) (box :class "segment-end" :halign "end" :valign "center" ) ) ) ;; Powermenu widget (defwidget power [] (eventbox ;;:onhover "${EWW_CMD} update power=true" :onhoverlost "${EWW_CMD} update power=false" (box :orientation "h" :space-evenly "false" :vexpand "false" :class "powermenu ${power ? 'pm-active' : ''}" ;; Open menu button (revealer :transition "slideleft" :reveal power :duration "450ms" (box :orientation "h" :class "pm-inner" :space-evenly true :valign "center" :spacing 8 ;; Lock screen (button :class "icon lock" :tooltip "Lock screen" :onclick "betterlockscreen -l" "󰌾") ;; Quit WM (goto login manager) (button :class "icon logout" :tooltip "Logout" :onclick "loginctl kill-session $XDG_SESSION_ID" "󰍃") ;; Reboot (button :class "icon reboot" :tooltip "Reboot" :onclick "reboot" "󰑓") ;; Poweroff (button :class "icon poweroff" :tooltip "Poweroff" :onclick "poweroff" "󰐥") )) (button :class "icon logo ${power ? 'logo-seperator' : ''}" :tooltip "Open menu" :onclick "${EWW_CMD} update power=true" "󰘧") ))) (defvar power false) ;; Control widget (container) (defwidget start-control [screen] (box :class "control" :spacing 16 :space-evenly false :orientation "h" (workspaces :wsp workspaces-data :screen screen) ) ) (defwidget mid-control [] (box :class "control" :spacing 16 :space-evenly false :orientation "h" (time) ) ) (defwidget end-control [] (box :class "control" :spacing 16 :space-evenly false :orientation "h" (music) (bat) (wifi) (volume) (power) ) ) ;; Clock Widget (defwidget time [] (box :orientation "h" :class "time" :space-evenly "false" :halign "center" (button :onclick "scripts/popup calendar" :class "day" full-time) )) (defpoll full-time :interval "1s" "date +'%d %B (%m), %Y - %A %H:%M:%S'") ;; Volume widget (defwidget volume [] (eventbox :onhover "${EWW_CMD} update volume=true" :onhoverlost "${EWW_CMD} update volume=false" (box :class "" :space-evenly "false" :orientation "h" :spacing "4" (revealer :transition "slideleft" :reveal volume :duration "350ms" (scale :class "volbar" :value current-volume :flipped true :orientation "h" :max 100 :min 0 :onchange "amixer -D pulse sset Master {}%" ) ) (button :onclick "amixer -D pulse set Master 1+ toggle" :tooltip "Volume on/off" :class "icon vol" {muted-volume != "on" ? "󰝟" : "󰕾"} ) ) ) ) (defvar volume false) (defpoll current-volume :interval "180ms" "amixer -D pulse sget Master | grep 'Left:' | awk -F'[][]' '{ print $2 }' | tr -d '%'") (defpoll muted-volume :interval "180ms" "amixer -D pulse sget Master | grep 'Left:' | awk -F'[][]' '{ print $4 }' | tr -d '%'") ;; Battery Widgets ;; (defwidget bat [] (box :orientation "v" :space-evenly "false" (label :class "icon bat" :halign "center" :text battery :tooltip "Battery: ${battery-cappacity}%"))) (defpoll battery :interval "1s" "scripts/battery icon") (defpoll battery-cappacity :interval "1s" "scripts/battery percent") ;; Wifi Widgets ;; (defwidget wifi [] (box :orientation "v" :halign "middle" :tooltip "SSID: ${wifi-name}" (label :class "icon wifi" :halign "middle" :text "﬉" ))) (defpoll wifi-status :interval "1s" "scripts/wifi status") (defpoll wifi-name :interval "1s" "scripts/wifi name") ;; Workspaces container (defwidget workspaces [wsp] (box :space-evenly true :spacing 16 :orientation "h" :class "workspaces" (for ws in wsp (workspace :data ws) ))) ;; Workspace widget (defwidget workspace [data] (button :onclick "wmctrl -s ${data['index']}" :class {data["iscurrent"] == true ? "active" : "inactive"} ;; "${data['name']}" :tooltip "Switch to workspace ${data['name']}" {data["iscurrent"] == true ? "" : ""} )) (deflisten workspaces-data "scripts/workspace.py") ;; Music widget (defwidget music [] (revealer :reveal {music-active == "true"} (eventbox :onhover "${EWW_CMD} update music=true" :onhoverlost "${EWW_CMD} update music=false" (box :orientation "h" :space-evenly "false" :class "musicmenu ${music ? 'mm-active' : ''}" (revealer :transition "slideleft" :reveal music :flipped true :duration "450ms" (box :orientation "h" :class "mm-inner" :space-evenly true :valign "center" :spacing 8 ;; Pause (button :class "icon prev" :tooltip "Pause/play" :onclick "playerctl previous" "") ;; Pause (button :class "icon pause" :tooltip "Pause/play" :onclick "playerctl play-pause" {music-status == "Playing" ? "󰏤" : "󰐊"}) ;; Next (button :class "icon next" :tooltip "Pause/play" :onclick "playerctl next" "") )) ;; Open menu button (button :class "icon" :tooltip "Music" :onclick "${EWW_CMD} update music=true" "󰎈") ) ))) (defpoll music-active :interval "200ms" "scripts/musicstatus") (defpoll music-status :interval "200ms" "playerctl status") (defpoll artUrl :interval "200ms" "playerctl metadata artUrl &>/dev/null") (defpoll title :interval "200ms" "playerctl metadata title &>/dev/null") (defpoll artist :interval "200ms" "playerctl metadata artist &>/dev/null") (defpoll songtime :interval "500ms" "scripts/getSongDuration") (defvar music false) ;; WINDOWS (defwindow bar-1 :monitor 0 :windowtype "dock" :geometry (geometry :x "0%" :y "0%" :width "100%" :height "32px" :anchor "top center") :reserve (struts :side "top" :distance "32px") :hexpand "false" :vexpand "false" (bar-1 :screen 1)) (defwindow bar-2 :monitor 1 :windowtype "dock" :geometry (geometry :x "0%" :y "0%" :width "100%" :height "32px" :anchor "top center") :reserve (struts :side "top" :distance "32px") :hexpand "false" :vexpand "false" (bar-2 :screen 2))