waybar - updated alhp-utils module

This commit is contained in:
2025-05-05 13:02:52 +02:00
parent a2a6395e95
commit 3771ca9115
5 changed files with 152 additions and 159 deletions

View File

@@ -1,18 +1,14 @@
{
"layer": "bottom",
"output": ["DP-1", "DP-2", "!HDMI-A-2"],
"position": "bottom",
"mod": "dock",
"exclusive": true,
"gtk-layer-shell": true,
"passthrough": false,
"height": 30,
"modules-left": [
"hyprland/workspaces"
],
"modules-center": [
"mpris",
"privacy"
],
"modules-left": ["hyprland/workspaces"],
"modules-center": ["mpris", "privacy"],
"modules-right": [
"custom/alhp",
"cpu",
@@ -23,18 +19,18 @@
"network",
"battery",
"tray",
"clock"
"clock",
],
"hyprland/workspaces": {
"icon-size": 32,
"spacing": 16,
"on-scroll-up": "hyprctl dispatch workspace r+1",
"on-scroll-down": "hyprctl dispatch workspace r-1"
"on-scroll-down": "hyprctl dispatch workspace r-1",
},
"cpu": {
"interval": 5,
"format": " {usage}%",
"max-length": 10
"max-length": 10,
},
"disk": {
"interval": 30,
@@ -42,14 +38,14 @@
"path": "/",
"tooltip": true,
"unit": "GB",
"tooltip-format": "Available {free} of {total}"
"tooltip-format": "Available {free} of {total}",
},
"memory": {
"interval": 10,
"format": " {percentage}%",
"max-length": 10,
"tooltip": true,
"tooltip-format": "RAM - {used:0.1f}GiB used"
"tooltip-format": "RAM - {used:0.1f}GiB used",
},
"wlr/taskbar": {
"format": "{icon} {title:.17}",
@@ -58,11 +54,11 @@
"on-click-middle": "close",
"tooltip-format": "{title}",
"ignore-list": [],
"on-click": "activate"
"on-click": "activate",
},
"tray": {
"icon-size": 18,
"spacing": 3
"spacing": 3,
},
"clock": {
"format": "{:%R | %d.%m.%Y}",
@@ -78,16 +74,16 @@
"days": "<span color='#ecc6d9'><b>{}</b></span>",
"weeks": "<span color='#99ffdd'><b>W{}</b></span>",
"weekdays": "<span color='#ffcc66'><b>{}</b></span>",
"today": "<span color='#ff6699'><b><u>{}</u></b></span>"
}
"today": "<span color='#ff6699'><b><u>{}</u></b></span>",
},
},
"actions": {
"on-click-right": "mode",
"on-click-forward": "tz_up",
"on-click-backward": "tz_down",
"on-scroll-up": "shift_up",
"on-scroll-down": "shift_down"
}
"on-scroll-down": "shift_down",
},
},
"network": {
"format-wifi": "{essid} ({signalStrength}%) {icon}",
@@ -97,37 +93,19 @@
"tooltip-format-wifi": "{essid} ({signalStrength}%) ",
"tooltip-format-ethernet": "{ifname} ",
"tooltip-format-disconnected": "Disconnected",
"format-icons": [
"󰤯 ",
"󰤟 ",
"󰤢 ",
"󰤢 ",
"󰤨 "
]
"format-icons": ["󰤯 ", "󰤟 ", "󰤢 ", "󰤢 ", "󰤨 "],
},
"battery": {
"states": {
"good": 95,
"warning": 30,
"critical": 20
"critical": 20,
},
"format": "{icon} {capacity}%",
"format-charging": " {capacity}%",
"format-plugged": " {capacity}%",
"format-alt": "{time} {icon}",
"format-icons": [
"󰂎",
"󰁺",
"󰁻",
"󰁼",
"󰁽",
"󰁾",
"󰁿",
"󰂀",
"󰂁",
"󰂂",
"󰁹"
]
"format-icons": ["󰂎", "󰁺", "󰁻", "󰁼", "󰁽", "󰁾", "󰁿", "󰂀", "󰂁", "󰂂", "󰁹"],
},
"pulseaudio": {
"format": "{volume}% {icon} ",
@@ -143,16 +121,11 @@
"phone-muted": "",
"portable": "",
"car": "",
"default": [
"",
""
]
"default": ["", ""],
},
"scroll-step": 5,
"on-click": "pwvucontrol",
"ignored-sinks": [
"Easy Effects Sink"
]
"ignored-sinks": ["Easy Effects Sink"],
},
"privacy": {
"icon-spacing": 4,
@@ -162,19 +135,19 @@
{
"type": "screenshare",
"tooltip": true,
"tooltip-icon-size": 12
"tooltip-icon-size": 12,
},
{
"type": "audio-out",
"tooltip": true,
"tooltip-icon-size": 12
"tooltip-icon-size": 12,
},
{
"type": "audio-in",
"tooltip": true,
"tooltip-icon-size": 12
}
]
"tooltip-icon-size": 12,
},
],
},
"mpris": {
"format": "{player_icon} {dynamic}",
@@ -183,11 +156,11 @@
"ellipsis": "…",
"player-icons": {
"default": "▶",
"mpv": "🎵"
"mpv": "🎵",
},
"status-icons": {
"paused": "⏸"
}
"paused": "⏸",
},
},
"bluetooth": {
"format": " {status}",
@@ -197,13 +170,14 @@
"tooltip-format": "{controller_alias}\t{controller_address}\n\n{num_connections} connected",
"tooltip-format-connected": "{controller_alias}\t{controller_address}\n\n{num_connections} connected\n\n{device_enumerate}",
"tooltip-format-enumerate-connected": "{device_alias}\t{device_address}",
"tooltip-format-enumerate-connected-battery": "{device_alias}\t{device_address}\t{device_battery_percentage}%"
"tooltip-format-enumerate-connected-battery": "{device_alias}\t{device_address}\t{device_battery_percentage}%",
},
"custom/alhp": {
"id": "custom-alhp",
"exec": "$HOME/.config/waybar/scripts/alhp.sh",
"format": "{} \uEB29 ",
"return-type": "json",
"interval": 60,
"tooltip": true
}
"tooltip": true,
"format": "{text}",
},
}

View File

@@ -191,10 +191,11 @@
"tooltip-format-enumerate-connected-battery": "{device_alias}\t{device_address}\t{device_battery_percentage}%"
},
"custom/alhp": {
"id": "custom-alhp",
"exec": "$HOME/.config/waybar/scripts/alhp.sh",
"format": "{} \uEB29 ",
"return-type": "json",
"interval": 60,
"tooltip": true
"tooltip": true,
"format": "{text}",
}
}

View File

@@ -1,28 +1,41 @@
#!/usr/bin/env bash
set -euo pipefail
IFS=$'\n\t'
# Retrieve JSON output from alhp.utils.
readonly ALHP_OUTPUT=$(alhp.utils -j)
ALHP_OUTPUT=$(alhp.utils -j)
total=$(jq -r '.total' <<<"$ALHP_OUTPUT")
mirror_stale=$(jq -r '.mirror_out_of_date' <<<"$ALHP_OUTPUT")
# Extract "total" as a string and read "packages" into a Bash array.
readonly total=$(echo "$ALHP_OUTPUT" | jq -r '.total | tostring')
readarray -t packages < <(echo "$ALHP_OUTPUT" | jq -r '.packages[]?')
# Initialize default tooltip and class.
tooltip=''
# defaults
text=""
tooltip='All good'
class='good'
# Use arithmetic evaluation to check if total is greater than 0.
if (( total > 0 )); then
class='bad'
# safe array even if packages is null
readarray -t packages < <(
jq -r '.packages // [] | .[]' <<<"$ALHP_OUTPUT"
)
# 1) Mirror stale? highest priority
if [[ "$mirror_stale" == "true" ]]; then
class="stale"
tooltip="Mirror is out of date"
# 2) Any pending PKGBUILDs?
elif (( total > 0 )); then
class="bad"
text="$tooltip"
tooltip=$(printf "%s\n" "${packages[@]}")
fi
# If there are any packages, join them with newline as separator.
if (( ${#packages[@]} > 0 )); then
tooltip=$(IFS=$'\n'; echo "${packages[*]}")
else
tooltip="All good"
fi
case "$class" in
good) icon="";;
stale) icon="󰏖";;
bad) icon="󰏗";;
esac
# Generate compact JSON output (all in one line) with jq.
jq -nc --arg text "$total" --arg class "$class" --arg tooltip "$tooltip" \
'{text: $text, class: $class, tooltip: $tooltip}'
# Emit compact JSON for Statusbar
jq -nc \
--arg text "$icon $text" \
--arg class "$class" \
--arg tooltip "$tooltip" \
'{text: $text, class: $class, tooltip: $tooltip}'

View File

@@ -1,9 +1,7 @@
/*base background color*/
@define-color bg_main rgba(25, 25, 25, 0.65);
@define-color bg_main_tooltip rgba(0, 0, 0, 0.7);
/*base background color of selections */
@define-color bg_hover rgba(200, 200, 200, 0.3);
/*base background color of active elements */
@@ -18,132 +16,133 @@
@define-color content_inactive rgba(255, 255, 255, 0.25);
* {
text-shadow: none;
box-shadow: none;
border: none;
border-radius: 0;
font-family: "Inconsolata Go Nerd Font";
font-size: 14px;
text-shadow: none;
box-shadow: none;
border: none;
border-radius: 0;
font-family: "Inconsolata Go Nerd Font";
font-size: 14px;
}
window#waybar {
background: @bg_main;
border-top: 1px solid @border_main;
color: @content_main;
background: @bg_main;
border-top: 1px solid @border_main;
color: @content_main;
}
tooltip {
font-size: 14px;
background: @bg_main_tooltip;
border-radius: 5px;
border-width: 1px;
border-style: solid;
border-color: @border_main;
font-size: 14px;
background: @bg_main_tooltip;
border-radius: 5px;
border-width: 1px;
border-style: solid;
border-color: @border_main;
}
tooltip label{
color: @content_main;
tooltip label {
color: @content_main;
}
.module {
margin-left: 2px;
margin-right: 2px;
margin-left: 2px;
margin-right: 2px;
}
#workspaces {
color: transparent;
margin-right: 1.5px;
margin-left: 1.5px;
color: transparent;
margin-right: 1.5px;
margin-left: 1.5px;
}
#workspaces button {
padding: 3px;
color: @content_inactive;
padding: 3px;
color: @content_inactive;
}
#workspaces button.active {
color: whitesmoke;
background: @bg_active;
color: whitesmoke;
background: @bg_active;
}
#workspaces button.focused {
color: @bg_active;
color: @bg_active;
}
#workspaces button.urgent {
background: rgba(255, 200, 0, 0.35);
color: @warning_color;
background: rgba(255, 200, 0, 0.35);
color: @warning_color;
}
#workspaces button:hover {
background: @bg_hover;
color: @content_main;
background: @bg_hover;
color: @content_main;
}
#cpu, #disk, #memory {
border-bottom: 1px solid grey;
padding-right: 5px;
padding-left: 5px;
#cpu,
#disk,
#memory {
border-bottom: 1px solid grey;
padding-right: 5px;
padding-left: 5px;
}
#tray{
padding-left: 5px;
padding-right: 5px;
#tray {
padding-left: 5px;
padding-right: 5px;
}
#tray > .passive {
border-bottom: none;
border-bottom: none;
}
#tray > .active {
}
#tray > .needs-attention {
border-bottom: 3px solid @warning_color;
border-bottom: 3px solid @warning_color;
}
#tray > widget {
transition: all 0.25s cubic-bezier(0.165, 0.84, 0.44, 1);
transition: all 0.25s cubic-bezier(0.165, 0.84, 0.44, 1);
}
#tray > widget:hover {
background: @bg_hover;
background: @bg_hover;
}
#pulseaudio {
border-bottom: 1px solid grey;
padding-right: 5px;
padding-left: 5px;
transition: all 0.25s cubic-bezier(0.165, 0.84, 0.44, 1);
border-bottom: 1px solid grey;
padding-right: 5px;
padding-left: 5px;
transition: all 0.25s cubic-bezier(0.165, 0.84, 0.44, 1);
}
#pulseaudio:hover {
background: @bg_hover;
background: @bg_hover;
}
#network {
border-bottom: 1px solid grey;
padding-right: 5px;
padding-left: 5px;
border-bottom: 1px solid grey;
padding-right: 5px;
padding-left: 5px;
}
#clock {
padding-right: 5px;
padding-left: 5px;
transition: all 0.25s cubic-bezier(0.165, 0.84, 0.44, 1);
padding-right: 5px;
padding-left: 5px;
transition: all 0.25s cubic-bezier(0.165, 0.84, 0.44, 1);
}
#clock:hover {
background: @bg_hover;
background: @bg_hover;
}
#privacy {
}
#privacy-item {
padding-left: 5px;
padding-right: 5px;
padding-left: 5px;
padding-right: 5px;
}
#privacy-item.screenshare {
background: #850404;
background: #850404;
}
#privacy-item.audio-in {
background: #6c045e;
background: #6c045e;
}
#privacy-item.audio-out {
background: #02605b;
background: #02605b;
}
#mpris {
padding-left: 5px;
padding-right: 5px;
padding-left: 5px;
padding-right: 5px;
}
#mpris.playing {
}
@@ -152,33 +151,33 @@ tooltip label{
#mpris.stopped {
}
#mpris.firefox {
border-bottom: 1px solid #fd8728;
border-bottom: 1px solid #fd8728;
}
#mpris.spotify {
border-bottom: 1px solid #17d860;
border-bottom: 1px solid #17d860;
}
#mpris.mpv {
border-bottom: 1px solid #420042;
border-bottom: 1px solid #420042;
}
#mpris.chromium {
border-bottom: 1px solid #1a73e8;
border-bottom: 1px solid #1a73e8;
}
#bluetooth {
padding-right: 5px;
padding-left: 5px;
padding-right: 5px;
padding-left: 5px;
}
#bluetooth.disabled {
border-bottom: 1px solid grey;
border-bottom: 1px solid grey;
}
#bluetooth.off {
border-bottom: 1px solid grey;
border-bottom: 1px solid grey;
}
#bluetooth.on {
border-bottom: 1px solid #0059fd;
border-bottom: 1px solid #0059fd;
}
#bluetooth.connected {
border-bottom: 1px solid #00b7fa;
border-bottom: 1px solid #00b7fa;
}
#bluetooth.discoverable {
}
@@ -187,16 +186,19 @@ tooltip label{
#bluetooth.pairable {
}
#bluetooth.no-controller {
background: darkred;
background: darkred;
}
#custom-alhp {
padding-left: 5px;
padding-right: 5px;
padding-left: 5px;
padding-right: 5px;
}
#custom-alhp.good {
border-bottom: 1px solid greenyellow;
border-bottom: 1px solid greenyellow;
}
#custom-alhp.stale {
border-bottom: 1px solid yellow;
}
#custom-alhp.bad {
border-bottom: 1px solid orangered;
border-bottom: 1px solid orangered;
}

View File

@@ -197,6 +197,9 @@ tooltip label{
#custom-alhp.good {
border-bottom: 1px solid greenyellow;
}
#custom-alhp.stale {
border-bottom: 1px solid yellow;
}
#custom-alhp.bad {
border-bottom: 1px solid orangered;
}