diff --git a/ahrc-laptop/eww/eww.scss b/ahrc-laptop/eww/eww.scss index 0fb8e86..0b40dec 100644 --- a/ahrc-laptop/eww/eww.scss +++ b/ahrc-laptop/eww/eww.scss @@ -1,21 +1,40 @@ +$edge_padding: 10px; + window { font-weight: bold; background-color: rgba(0, 0, 0, 0); } +.main > box > * { + margin-left: 10px; +} + +.main > box > :first-child { + margin-left: 0px; +} + .left { - padding-left: 5px; + padding-left: $edge_padding; +} + +.right { + padding-right: $edge_padding; } .workspaces { font-family: Hack Nerd Font; } -.workspace-button:hover { - color: #c0ffc0; - transition: color 0.2s; -} - .workspace-active { color: #20ff20; } + +:hover { + color: #c0ffc0; + transition: color 500ms; + transition: font-size 50ms; +} + +:active { + font-size: 10pt; +} diff --git a/ahrc-laptop/eww/eww.yuck b/ahrc-laptop/eww/eww.yuck index 7d49bc7..6d20f75 100644 --- a/ahrc-laptop/eww/eww.yuck +++ b/ahrc-laptop/eww/eww.yuck @@ -1,35 +1,136 @@ -(deflisten workspaces +(deflisten workspaces-status :initial "[]" "./listen/niri/workspaces" ) -(defvar workspace-icon '{ +(deflisten window-title "./listen/niri/window-title") + +(deflisten notifications-status + :initial '{"dnd": false, "count": 0}' + + "swaync-client --subscribe" +) + +(defvar workspaces-icon '{ "admin": "", "everything": "", "apps": "" }') +(defvar notifications-icon '{ + "nothing": "", + "new": "", + "dnd": "" +}') + +(defvar battery-icon '{ + "Discharging": { + "0": "󰂎", + "10": "󰁺", + "20": "󰁻", + "30": "󰁼", + "40": "󰁽", + "50": "󰁾", + "60": "󰁿", + "70": "󰂀", + "80": "󰂁", + "90": "󰂂", + "100": "󰁹" + }, + "Charging": { + "0": "󰢟", + "10": "󰢜", + "20": "󰂆", + "30": "󰂇", + "40": "󰂈", + "50": "󰢝", + "60": "󰂉", + "70": "󰢞", + "80": "󰂊", + "90": "󰂋", + "100": "󰂅" + } +}') + (defwidget workspaces [] (box :class "workspaces" - (for workspace in {workspaces} + (for workspace in {workspaces-status} (eventbox :onclick "niri msg action focus-workspace ${workspace.idx}" :width 25 - :class "workspace-button${workspace.is_active ? " workspace-active" : ""}" + :class "${workspace.is_active ? " workspace-active" : ""}" - "${"${workspace-icon?.[workspace.name]}" ?: ""} " + "${"${workspaces-icon?.[workspace.name]}" ?: ""} " ) ) ) ) +(defwidget window-title [] + (box (label + :limit-width 80 + :text "${window-title ?: ""}" + )) +) + +(defwidget notifications [] + (box (eventbox + :onclick "swaync-client --toggle-panel" + :onmiddleclick "swaync-client --close-all" + :onrightclick "swaync-client --toggle-dnd" + :width 25 + + (label + :class "icons" + :text "${notifications-status.dnd + ? "${notifications-icon.dnd}" + : notifications-status.count > 0 + ? "${notifications-icon.new}" + : "${notifications-icon.nothing}"} ${notifications-status.count}" + ) + )) +) + (defwidget time [] "${formattime(EWW_TIME, "%Y-%m-%d")} ${formattime(EWW_TIME, "%H:%M:%S")}" ) +(defwidget tray [] + (box (systray + :icon-size 15 + :spacing 10 + )) +) + +(defwidget battery [] + (label + :text "${EWW_BATTERY.BAT0.capacity == 100 + ? "${battery-icon[EWW_BATTERY.BAT0.status]["100"]}" + : EWW_BATTERY.BAT0.capacity >= 90 + ? "${battery-icon[EWW_BATTERY.BAT0.status]["90"]}" + : EWW_BATTERY.BAT0.capacity >= 80 + ? "${battery-icon[EWW_BATTERY.BAT0.status]["80"]}" + : EWW_BATTERY.BAT0.capacity >= 70 + ? "${battery-icon[EWW_BATTERY.BAT0.status]["70"]}" + : EWW_BATTERY.BAT0.capacity >= 60 + ? "${battery-icon[EWW_BATTERY.BAT0.status]["60"]}" + : EWW_BATTERY.BAT0.capacity >= 50 + ? "${battery-icon[EWW_BATTERY.BAT0.status]["50"]}" + : EWW_BATTERY.BAT0.capacity >= 40 + ? "${battery-icon[EWW_BATTERY.BAT0.status]["40"]}" + : EWW_BATTERY.BAT0.capacity >= 30 + ? "${battery-icon[EWW_BATTERY.BAT0.status]["30"]}" + : EWW_BATTERY.BAT0.capacity >= 20 + ? "${battery-icon[EWW_BATTERY.BAT0.status]["20"]}" + : EWW_BATTERY.BAT0.capacity >= 10 + ? "${battery-icon[EWW_BATTERY.BAT0.status]["10"]}" + : "${battery-icon[EWW_BATTERY.BAT0.status]["0"]}"} ${EWW_BATTERY.BAT0.capacity}%" + ) +) + (defwindow dock :monitor 0 :geometry (geometry @@ -43,22 +144,32 @@ :exclusive true (centerbox + :class "main" + (box :class "left" :halign "start" :space-evenly false (workspaces) + (window-title) ) (box :class "middle" + :space-evenly false + (tray) (time) + (notifications) ) (box :class "right" + :halign "end" + :space-evenly false + + (battery) ) ) ) diff --git a/ahrc-laptop/eww/listen/niri/window-title b/ahrc-laptop/eww/listen/niri/window-title new file mode 100755 index 0000000..bc750fc --- /dev/null +++ b/ahrc-laptop/eww/listen/niri/window-title @@ -0,0 +1,4 @@ +#!/usr/bin/env sh +niri msg event-stream | grep --extended-regexp --line-buffered '^Window (focus|opened or) changed: ' | while read -r _line; do + niri msg --json focused-window | jq --raw-output '.title' +done