Configuration files for my GNU/Linux installation.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
dotfiles/eww/.config/eww/eww.yuck

283 lines
8.5 KiB

(defwidget bar [screen]
(box :orientation "v"
:vexpand "false"
:hexpand "false"
(box :class "segment-start"
:valign "start"
:halign "center"
:space-evenly false
:orientation "v"
:space-evenly false
(power :screen screen)
)
(box :class "segment-mid"
:valign "center"
:halign "center"
:orientation "v"
:space-evenly false
(workspaces :wsp workspaces-data :screen screen)
)
(box :class "segment-end"
:valign "end"
:halign "center"
:orientation "v"
:space-evenly true
(control :screen screen)
)
)
)
(defwidget bar-2 [screen]
(box :orientation "v"
:vexpand "false"
:hexpand "false"
(box :class "segment-start"
:valign "start"
:halign "center"
:space-evenly false
:orientation "v"
:space-evenly false
;; (power :screen screen)
)
(box :class "segment-mid"
:valign "center"
:halign "center"
:orientation "v"
:space-evenly false
(workspaces :wsp workspaces-data :screen screen)
)
(box :class "segment-end"
:valign "end"
:halign "center"
:orientation "v"
:space-evenly true
(control-2 :screen screen)
)
)
)
;; Powermenu widget
(defwidget power []
(eventbox ;;:onhover "${EWW_CMD} update power=true"
:onhoverlost "${EWW_CMD} update power=false"
(box :orientation "v"
:space-evenly "false"
:vexpand "false"
:class "powermenu ${power ? 'pm-active' : ''}"
;; Open menu button
(button :class "icon logo ${power ? 'logo-seperator' : ''}"
:tooltip "Open menu"
:onclick "${EWW_CMD} update power=true" "Λ")
(revealer :transition "slidedown"
:reveal power
:duration "450ms"
(box :orientation "v"
:class "pm-inner"
:space-evenly true
:halign "middle"
:spacing 6
;; Lock screen
(button :class "icon lock"
:tooltip "Lock screen"
:onclick "betterlockscreen -l" "")
;; Quit WM (goto login manager)
(button :class "icon quit"
: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" "")
))
)))
(defvar power false)
;; Control widget (container)
(defwidget control []
(box :class "control" :spacing 12 :space-evenly false :orientation "v"
;; (wifi)
;; (bat)
(music)
(volume)
(time)
)
)
(defwidget control-2 []
(box :class "control" :spacing 12 :space-evenly false :orientation "v"
;; (wifi)
;; (bat)
;; (music)
;; (volume)
(time)
)
)
;; Clock Widget
(defwidget time []
(box :orientation "v"
:class "time"
:valign "end"
(button :onclick "scripts/popup calendar"
:class "hour" hour)
(button :onclick "scripts/popup calendar"
:class "min" min)
(button :onclick "scripts/popup calendar"
:class "sec" sec)
))
(defpoll hour :interval "1s" "date '+%H'")
(defpoll min :interval "1s" "date '+%M'")
(defpoll sec :interval "1s" "date '+%S'")
;; Volume widget
(defwidget volume []
(eventbox :onhover "${EWW_CMD} update volume=true"
:onhoverlost "${EWW_CMD} update volume=false"
(box :orientation "v"
:space-evenly "false"
:spacing 2
(revealer :transition "slideup"
:reveal volume
:duration "450ms"
(scale :class "volbar"
:value current-volume
:orientation "v"
:flipped true
:tooltip "Volume: ${current-volume}%"
:max 101
:min 0
:onchange "amixer -D pulse sset Master {}%"
)
)
(button :onclick "amixer -D pulse set Master 1+ toggle"
:class "icon volume + ${muted-volume != 'on' ? 'red' : ''}"
:tooltip "Volume: ${current-volume}%"
{muted-volume != "on" ? "ﱝ" : "墳"}
)
)))
(defvar volume false)
(defpoll current-volume :interval "1ms" "amixer -D pulse sget Master | grep 'Left:' | awk -F'[][]' '{ print $2 }' | tr -d '%'")
(defpoll muted-volume :interval "1ms" "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 "middle"
: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}"
(button :class "icon wifi-icon" wifi-icon
)))
(defpoll wifi-icon :interval "1s" "scripts/wifi icon")
(defpoll wifi-name :interval "1s" "scripts/wifi name")
;; Workspaces container
(defwidget workspaces [wsp]
(box :space-evenly true :spacing 4 :orientation "v" :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']}"
))
(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 "v"
:space-evenly "false"
:vexpand "false"
:class "musicmenu ${music ? 'mm-active' : ''}"
(revealer :transition "slideup"
:reveal music
:flipped true
:duration "450ms"
(box :orientation "v"
:class "mm-inner"
:space-evenly true
:halign "middle"
:spacing 4
;; Next
(button :class "icon next"
:tooltip "Pause/play"
:onclick "playerctl next" "")
;; Pause
(button :class "icon pause"
:tooltip "Pause/play"
:onclick "playerctl play-pause" {music-status == "Playing" ? "" : ""})
;; Pause
(button :class "icon prev"
:tooltip "Pause/play"
:onclick "playerctl previous" "")
))
;; Open menu button
(button :class "icon"
:tooltip "${title} - ${artist}"
: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")
(defpoll title :interval "200ms" "playerctl metadata title")
(defpoll artist :interval "200ms" "playerctl metadata artist")
(defpoll songtime :interval "500ms" "scripts/getSongDuration")
(defvar music false)
;; WINDOWS
(defwindow bar-1
:monitor 0
:windowtype "dock"
:geometry (geometry :x "0%"
:y "0%"
:width "42px"
:height "100%"
:anchor "left center")
:reserve (struts :side "left" :distance "42px")
:hexpand "false"
:vexpand "false"
(bar :screen 1))
(defwindow bar-2
:monitor 1
:windowtype "dock"
:geometry (geometry :x "0%"
:y "0%"
:width "42px"
:height "100%"
:anchor "left center")
:reserve (struts :side "left" :distance "42px")
:hexpand "false"
:vexpand "false"
(bar-2 :screen 2))