(defwidget bar [] (centerbox :orientation "h" (leftgroup) (music) (rightgroup))) (defwidget leftgroup [] (box :class "leftgroup" :orientation "h" :space-evenly false :halign "start" (powermenu) (profile) (workspaces :array workspacesArray) (windowtitle))) (defwidget rightgroup [] (box :class "rightgroup" :orientation "h" :space-evenly false :halign "end" (idleinhibit) (volume) (network) (vpn) (bluetooth) (battery) (sysdisk) (sysmem) (clock) (tray))) (deflisten workspacesArray :initial "${[1]}" `~/.config/eww/scripts/getWorkspaces.sh`) (defwidget workspaces [array] (box :class "workspaces" :orientation "h" :space-evenly true :halign "start" (for entry in array (button :onclick `swaymsg workspace "${entry.name}"` :class {entry.focused ? "focused" : ""} `${replace(entry.name,".*:","")}`)))) (defpoll active_profile :initial false :interval "1s" "sp-profile-icon") (defwidget profile [] (button :onclick "sp-profiles next" :class "profile" {active_profile})) (deflisten active_window_name :initial "" :interval "1s" "scripts/activewindow") (defwidget windowtitle [] (box :class "active_window" {active_window_name})) (defwidget clock [] (button :onclick 'notify-send "test"' {formattime(EWW_TIME,"%b %d, %Y | %H:%M")})) (defpoll inhibit_active :initial false :interval "1s" "scripts/inhibit-status") (defwidget idleinhibit [] (button :onclick {inhibit_active ? 'killall eww-idle-inhibit' : 'systemd-inhibit --what="idle" --mode="block" scripts/eww-idle-inhibit'} :class {inhibit_active ? "active" : ""} {inhibit_active ? "" : ""})) (defwidget revealer-on-hover [revealvar revealvar-name ?class ?duration ?transition] (box :class "${class} revealer-on-hover" :orientation "h" :space-evently false (eventbox :onhover "${EWW_CMD} update ${revealvar-name}=true" :onhoverlost "${EWW_CMD} update ${revealvar-name}=false" (box :space-evenly false (children :nth 0) (revealer :reveal revealvar :transition {transition ?: "slideright"} :duration {duration ?: "500ms"} (children :nth 1)))))) (defvar reveal_powermenu false) (defwidget powermenu [] (revealer-on-hover :revealvar reveal_powermenu :revealvar-name "reveal_powermenu" (button :onclick 'sp-powermenu' "") (powermenu_children))) (defwidget powermenu_children [] (box :class "reveal_children" :orientation "h" :space-evenly false :halign "center" (button :onclick 'sp-powermenu' "") (button :onclick 'sp-powermenu' "") (button :onclick 'sp-powermenu' "") (button :onclick 'sp-powermenu' ""))) (defpoll wireless_active :initial false :interval "1s" "scripts/network-status wireless") (defpoll wired_active :initial false :interval "1s" "scripts/network-status wired") (defvar reveal_network false) (defwidget network [] (revealer-on-hover :revealvar reveal_network :revealvar-name "reveal_network" (button :onclick 'nm-connection-editor' :class {wireless_active || wired_active ? "active" : ""} "") (network_children))) (defwidget network_children [] (box :class "reveal_children" :orientation "h" :space-evenly false :halign "center" (button :onclick {wireless_active ? 'scripts/network-updown wifi down' : 'scripts/network-updown wifi up'} :class {wireless_active ? "active" : ""} "") (button :onclick {wired_active ? 'scripts/network-updown ethernet down' : 'scripts/network-updown ethernet up'} :class {wired_active ? "active" : ""} "🖧"))) (defvar reveal_bluetooth false) (defpoll bluetooth_active :initial true :interval "5s" 'scripts/bt-status') (defwidget bluetooth [] (revealer-on-hover :revealvar reveal_bluetooth :revealvar-name "reveal_bluetooth" (button :onclick 'blueman-manager' :class {bluetooth_active ? "active" : ""} "") (bluetooth_children :array btDeviceArray))) (defpoll btDeviceArray :initial "${[1]}" :interval "5s" 'scripts/bt-devices') (defwidget bluetooth_children [array] (box :class "reveal_children" :orientation "h" :space-evenly true :halign "start" (for device in array (button :onclick {(device.connected == "yes") ? 'bluetoothctl disconnect "${device.address}"' : 'bluetoothctl connect "${device.address}"'} :class {(device.connected == "yes") ? "active" : ""} "${device.icon}")))) (defvar reveal_volume false) (defwidget volume [] (revealer-on-hover :revealvar reveal_volume :revealvar-name "reveal_volume" (button :onclick 'pavucontrol-qt --tab 3' {(volume_level == 0) ? "" : ((volume_level > 50) ? "" : "")}) (volume_children))) (defpoll volume_level :initial 0 :interval "1s" "scripts/volume-status") (defwidget volume_children [] (box :class "reveal_children" :orientation "h" :space-evenly false :halign "center" (scale :min 0 :max 100 :value {volume_level} :orientation "h" :onchange "wpctl set-volume @DEFAULT_AUDIO_SINK@ {}%;paplay 'volume.ogg'"))) (defvar reveal_battery false) (defwidget battery [] (revealer-on-hover :revealvar reveal_battery :revealvar-name "reveal_battery" (button :onclick 'pavucontrol-qt --tab 3' {(EWW_BATTERY.BAT0.status == "Charging") ? " ${EWW_BATTERY.BAT0.capacity}%" : " ${EWW_BATTERY.BAT0.capacity}%"}) (battery_children))) (defpoll battery_level :initial 0 :interval "1s" "scripts/battery-status") (defwidget battery_children [] (box :class "reveal_children" :orientation "h" :space-evenly false :halign "center" (progress :height 10 :valign "center" :value {EWW_BATTERY.BAT0.capacity} :orientation "h"))) (defvar reveal_tray false) (defwidget tray [] (revealer-on-hover :revealvar reveal_tray :revealvar-name "reveal_tray" {reveal_tray ? "" : ""} (tray_children))) (defwidget tray_children [] (box :class "tray_children" :orientation "h" :space-evenly false :halign "center" (systray :orientation "h" :space-evenly true :spacing 10 :prepend-new true))) (defpoll vpn_active :initial false :interval "5s" "scripts/vpn-status") (defvar reveal_vpn false) (defwidget vpn [] (revealer-on-hover :revealvar reveal_vpn :revealvar-name "reveal_vpn" (button :onclick 'notify-send "test"' :class {vpn_active ? "active" : ""} {vpn_active ? "" : ""}) (vpn_children))) (defpoll home_vpn_active :initial false :interval "5s" "scripts/vpn-status Home") (defpoll proton_vpn_active :initial false :interval "5s" "scripts/vpn-status Proton") (defwidget vpn_children [] (box :class "reveal_children" :orientation "h" :space-evenly false :halign "center" (button :onclick 'scripts/nmcli-vpn "HomeVPN"' :class {home_vpn_active ? "active" : ""} {home_vpn_active ? "" : ""}) (button :onclick 'scripts/nmcli-vpn "Proton SE-NL"' :class {proton_vpn_active ? "active" : ""} {proton_vpn_active ? "" : ""}))) (defvar reveal_sysmem false) (defwidget sysmem [] (revealer-on-hover :revealvar reveal_sysmem :revealvar-name "reveal_sysmem" (metric :label " " :value {EWW_RAM.used_mem_perc} :onchange "") (sysmem_children))) (defwidget sysmem_children [] (box :class "reveal_children" :orientation "h" :space-evenly false :halign "center" (metric :label " " :value {round((EWW_RAM.total_mem - EWW_RAM.free_mem) / EWW_RAM.total_mem,2) * 100} :onchange "") (metric :label " " :value {round((EWW_RAM.total_swap - EWW_RAM.free_swap) / EWW_RAM.total_swap,2) * 100} :onchange ""))) (defvar reveal_sysdisk false) (defwidget sysdisk [] (revealer-on-hover :revealvar reveal_sysdisk :revealvar-name "reveal_sysdisk" (metric :label "/home " :value {EWW_DISK["/home"].used_perc} :onchange "") (sysdisk_children))) (defwidget sysdisk_children [] (box :class "reveal_children" :orientation "h" :space-evenly false :halign "center" (metric :label "/ " :value {EWW_DISK["/"].used_perc} :onchange "") (metric :label "/boot " :value {EWW_DISK["/boot"].used_perc} :onchange ""))) (defwidget music [] (box :class "music" :orientation "h" :space-evenly false :halign "center" {music != "" ? "🎵${music}" : ""})) (defwidget metric [label value onchange] (box :orientation "h" :class "metric" :space-evenly false (box :class "label" label) (circular-progress :active {onchange != ""} :value value :start-at 0 :thickness 10 :clockwise true :onchange onchange))) (deflisten music :initial "" "playerctl --follow metadata --format '{{ artist }} - {{ title }}' || true") (defpoll volume :interval "1s" "scripts/getvol") (defpoll time :interval "10s" "date '+%H:%M %b %d, %Y'") (defwindow bar :windowtype "dock" :exclusive true :geometry (geometry :x "0%" :y "0%" :width "100%" :height "30px" :anchor "top center") :reserve (struts :side "top" :distance "4%") (bar)) (defwidget widgets [] (box :class "widgets" :orientation "v" :spacing 25 :width 300 :space-evenly false (rat) (weather :json weather_status))) (defpoll rat_image :interval "60s" 'scripts/randomrat') ;(defvar rat_image "/home/penelope/Pictures/Phone/Albums/Rattos/20211109_042550_IMG_9873.JPG") (defwidget rat [] (box :class "rat" :orientation "h" :width 300 :height 300 :style "background-image: url('${rat_image}');")) (defpoll weather_status :interval "600s" 'curl wttr.in/Eugene?format=j1') (defwidget weather [json] (box :class "weather" :orientation "v" :width 300 :height 125 :space-evenly true ; :spacing 20 "Eugene, OR | ${json.current_condition[0].weatherDesc[0].value}" "${json.weather[0].mintempF}°F / ${json.weather[0].maxtempF}°F" "${json.current_condition[0].temp_F}°F (feels like ${json.current_condition[0].FeelsLikeF}°F)" "${json.current_condition[0].humidity}% humidity")) (defwindow widgets :windowtype "normal" :exclusive false :geometry (geometry :x "10px" :y "10px" :width "10px" :height "10px" :anchor "top left") :stacking "bg" (widgets))