diff --git a/.config/waybar/config.jsonc##hostname.cn-arch b/.config/waybar/config.jsonc##hostname.cn-arch
index cb72997..1150c82 100644
--- a/.config/waybar/config.jsonc##hostname.cn-arch
+++ b/.config/waybar/config.jsonc##hostname.cn-arch
@@ -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": "{}",
"weeks": "W{}",
"weekdays": "{}",
- "today": "{}"
- }
+ "today": "{}",
+ },
},
"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}",
+ },
}
diff --git a/.config/waybar/config.jsonc##hostname.cn-mate b/.config/waybar/config.jsonc##hostname.cn-mate
index 0578cf7..99c6eca 100644
--- a/.config/waybar/config.jsonc##hostname.cn-mate
+++ b/.config/waybar/config.jsonc##hostname.cn-mate
@@ -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}",
}
}
diff --git a/.config/waybar/scripts/alhp.sh b/.config/waybar/scripts/alhp.sh
index 5f83b55..d48cab2 100755
--- a/.config/waybar/scripts/alhp.sh
+++ b/.config/waybar/scripts/alhp.sh
@@ -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}'
diff --git a/.config/waybar/style.css##hostname.cn-arch b/.config/waybar/style.css##hostname.cn-arch
index 338888a..f6904f8 100644
--- a/.config/waybar/style.css##hostname.cn-arch
+++ b/.config/waybar/style.css##hostname.cn-arch
@@ -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;
}
diff --git a/.config/waybar/style.css##hostname.cn-mate b/.config/waybar/style.css##hostname.cn-mate
index 338888a..2a7f6ce 100644
--- a/.config/waybar/style.css##hostname.cn-mate
+++ b/.config/waybar/style.css##hostname.cn-mate
@@ -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;
}