From 2cfd4c662e2adc9deceeb24b4f18bb40f089418b Mon Sep 17 00:00:00 2001 From: Ahurac Date: Wed, 29 May 2024 16:24:43 +0200 Subject: [PATCH] config/eww ahrc-laptop : nouvelle version --- .../action/hyprland/nearby-workspace | 11 ++ config/eww-ahrc--laptop/eww.scss | 29 +++- config/eww-ahrc--laptop/eww.yuck | 142 ++++++++++++++---- config/eww-ahrc--laptop/listen/battery | 19 +++ config/eww-ahrc--laptop/listen/hypr | 21 +++ config/eww-ahrc--laptop/listen/network | 61 ++++++++ 6 files changed, 249 insertions(+), 34 deletions(-) create mode 100755 config/eww-ahrc--laptop/action/hyprland/nearby-workspace create mode 100755 config/eww-ahrc--laptop/listen/battery create mode 100755 config/eww-ahrc--laptop/listen/hypr create mode 100755 config/eww-ahrc--laptop/listen/network diff --git a/config/eww-ahrc--laptop/action/hyprland/nearby-workspace b/config/eww-ahrc--laptop/action/hyprland/nearby-workspace new file mode 100755 index 0000000..5387f72 --- /dev/null +++ b/config/eww-ahrc--laptop/action/hyprland/nearby-workspace @@ -0,0 +1,11 @@ +#!/usr/bin/env sh +case "$1" in + up) + hyprctl dispatch workspace +1 + ;; + down) + hyprctl dispatch workspace -1 + ;; + *) + ;; +esac diff --git a/config/eww-ahrc--laptop/eww.scss b/config/eww-ahrc--laptop/eww.scss index ec6ea84..1063606 100644 --- a/config/eww-ahrc--laptop/eww.scss +++ b/config/eww-ahrc--laptop/eww.scss @@ -1,9 +1,30 @@ -window { +window, menubar { background-color: rgba(0, 0, 0, 0); - color: #ffffff; +} + +window { + color: white; font-weight: bold; } -window > box { - margin: 0px 15px; +window > box > box > * { + padding: 0 10px; +} + +.workspace-button, .submap { + border-top: 2px solid white; +} + +.workspace-button:hover { + border-color: #80ff80; + color: #e0ffe0; +} + +.workspace-button > box { + padding-top: 3px; +} + +.workspace-current { + border-color: #00ff00; + color: #00f000; } diff --git a/config/eww-ahrc--laptop/eww.yuck b/config/eww-ahrc--laptop/eww.yuck index 9371272..42d4b0d 100644 --- a/config/eww-ahrc--laptop/eww.yuck +++ b/config/eww-ahrc--laptop/eww.yuck @@ -1,40 +1,122 @@ -(defwidget time [] - (eventbox :class "time" - "${formattime(EWW_TIME, "%Y-%m-%d | %H:%M:%S")}" +(deflisten batterystatus + :initial "unknown" + "listen/battery BAT1" +) + +(deflisten workspaces + :initial '{"current":1,"used":[1]}' + "listen/hypr workspace" +) + +(deflisten windowtitle + :initial '' + "listen/hypr activewindow" +) + +(deflisten submap + :initial '' + "listen/hypr submap" +) + +(deflisten network + :initial '{"state":"disconnected","infos":{}}' + "listen/network" +) + +(defvar battery-icon '{ + "unknown": "", + "critical": "", + "low": "", + "medium": "", + "high": "", + "full": "" +}') + +(defvar network-icon '{ + "disconnected": "󰲛", + "ethernet": "󰈀", + "wifi-terrible": "󰤯", + "wifi-bad": "󰤟", + "wifi-mediocre": "󰤢", + "wifi-good": "󰤥", + "wifi-excellent": "󰤨", + "tethering": "󰕓" +}') + +(defwidget workspaces [] + (eventbox :onscroll "action/hyprland/nearby-workspace {}" + (box :class "workspaces" + (for workspace in {workspaces.used} + (eventbox + :class "workspace-button ${workspace == workspaces.current ? "workspace-current" : ""}" + :onclick "hyprctl dispatch workspace ${workspace}" + (box :width 25 "${workspace}") + ) + ) ) + ) +) + +(defwidget submap [] + (eventbox :onclick "hyprctl dispatch submap reset" + (box :class "submap" "${submap}") + ) +) + +(defwidget window-title [] + (box "${windowtitle ?: ''}") +) + +(defwidget tray [] (box + (systray :icon-size 15 :spacing 10) +)) + +(defwidget time [] + "${formattime(EWW_TIME, "%Y-%m-%d")} ${formattime(EWW_TIME, "%H:%M:%S")}" +) + +; (defwidget sound [] "") +(defwidget network [] + "${network.state == "wireless" ? "${network-icon["wifi-${network.infos.signal}"]} ${network.infos.ssid}" : "${network-icon[network.state]}"}" ) (defwidget battery [] - (box - (label - :text "${EWW_BATTERY.BAT0.status == "Discharging" ? "󰂂" : "󰂅"}" - ) - (label :text "${EWW_BATTERY.BAT0.capacity} %") - ) + "${battery-icon[batterystatus]}${EWW_BATTERY.BAT1.status == "Charging" ? " " : ""} ${EWW_BATTERY.BAT1.capacity} %" ) (defwindow bar - :monitor 0 - :geometry (geometry - :x "0%" - :y "0%" - :width "100%" - :height "2.5%" - :anchor "bottom center" + :monitor 0 + :geometry (geometry + :anchor "bottom center" + :width "100%" + :height 25 + ) + :exclusive true + + (centerbox + (box + :halign "start" + :space-evenly false + :class "left" + + (workspaces) + (submap) + (window-title) ) - :stacking "fg" - :reserve (struts :distance "0px" :side "top") - :windowtype "dock" - :wm-ignore false - :exclusive true - :focusable false - (centerbox - (box :class "left") - (box :class "center" - (time) - ) - (box :class "right" :halign "end" - (battery) - ) + (box + :space-evenly false + :class "middle" + + (tray) (time) ) + (box + :halign "end" + :space-evenly false + :class "right" + + ; (sound) + (network) + (battery) + ) + ) ) diff --git a/config/eww-ahrc--laptop/listen/battery b/config/eww-ahrc--laptop/listen/battery new file mode 100755 index 0000000..8115944 --- /dev/null +++ b/config/eww-ahrc--laptop/listen/battery @@ -0,0 +1,19 @@ +#!/usr/bin/env sh +battery=$1 + +print_battery_status() { + battery_capacity=$(cat "/sys/class/power_supply/${battery}/capacity") \ + || exit + + if [ "$battery_capacity" -lt 25 ]; then echo critical + elif [ "$battery_capacity" -lt 50 ]; then echo low + elif [ "$battery_capacity" -lt 75 ]; then echo medium + elif [ "$battery_capacity" -lt 100 ]; then echo high + else echo full + fi +} + +while :; do + print_battery_status + sleep 20 +done diff --git a/config/eww-ahrc--laptop/listen/hypr b/config/eww-ahrc--laptop/listen/hypr new file mode 100755 index 0000000..f3dccd3 --- /dev/null +++ b/config/eww-ahrc--laptop/listen/hypr @@ -0,0 +1,21 @@ +#!/usr/bin/env sh +workspace() { + printf '{"current":%s,"used":%s}\n' \ + "$(hyprctl -j activeworkspace | jq -c '.id')" \ + "$(hyprctl -j workspaces | jq -c '.[].id' | sort -n | jq -sc)" +} + +activewindow() { + hyprctl -j activewindow | jq -c -r .title +} + +submap() { + echo "$event" | sed 's/^submap>>//' +} + +command -v "$1" > /dev/null || exit + +"$1" +socat -U STDOUT UNIX-CONNECT:"${XDG_RUNTIME_DIR}/hypr/${HYPRLAND_INSTANCE_SIGNATURE}/.socket2.sock" | stdbuf -o L grep -e "^${1}>>" | while read -r event; do + "$1" +done diff --git a/config/eww-ahrc--laptop/listen/network b/config/eww-ahrc--laptop/listen/network new file mode 100755 index 0000000..a779232 --- /dev/null +++ b/config/eww-ahrc--laptop/listen/network @@ -0,0 +1,61 @@ +#!/usr/bin/env sh +print_state() { + case "$1" in + eth*) + echo ethernet + ;; + wlan*) + echo wireless + ;; + usb*) + echo tethering + ;; + *) + echo disconnected + ;; + esac +} + +wifi_strength() { + if [ "$1" -le -80 ]; then echo terrible + elif [ "$1" -le -70 ]; then echo bad + elif [ "$1" -le -60 ]; then echo mediocre + elif [ "$1" -le -40 ]; then echo good + else echo excellent + fi +} + +print_infos() { + printf \{ + + if [ -n "$1" ]; then + route_line=$(ip route show dev "$1" | awk '($1 == "default") { print }') + + printf '"ip":"%s","gateway":"%s"' \ + "$(echo "$route_line" | awk '{ print $7 }')" \ + "$(echo "$route_line" | awk '{ print $3 }')" + + if [ "$state" = wireless ]; then + signal=$(iw dev "$1" link | awk '($1 == "signal:") { print $2}') + printf ',"signal":"%s","ssid":"%s"' \ + "$(wifi_strength "$signal")" \ + "$(iw dev wlan0 info | grep '^\s*ssid ' | xargs | cut -d \ -f 2-)" + fi + fi + + printf '}\n' +} + +print_network_status() { + device=$(ip route | awk '($1 == "default") { print $5 }') + state=$(print_state "$device") + + printf '{"state":"%s","infos":%s}\n' \ + "$state" \ + "$(print_infos "$device")" +} + +while :; do + print_network_status + sleep 5 +done