From beddf4eebafe842bcdb45a3e37396f1c2a415cf7 Mon Sep 17 00:00:00 2001 From: Craig Jennings Date: Tue, 10 Feb 2026 16:37:48 -0600 Subject: feat(waybar): split clock into date + world clock modules Replace single clock module with custom/date (calendar tooltip) and custom/worldclock (multi-timezone tooltip from worldclock.conf). Co-Authored-By: Claude Opus 4.6 --- dotfiles/hyprland/.local/bin/waybar-date | 19 ++++++++++++++ dotfiles/hyprland/.local/bin/waybar-worldclock | 35 ++++++++++++++++++++++++++ 2 files changed, 54 insertions(+) create mode 100755 dotfiles/hyprland/.local/bin/waybar-date create mode 100755 dotfiles/hyprland/.local/bin/waybar-worldclock (limited to 'dotfiles/hyprland/.local/bin') diff --git a/dotfiles/hyprland/.local/bin/waybar-date b/dotfiles/hyprland/.local/bin/waybar-date new file mode 100755 index 0000000..72a0000 --- /dev/null +++ b/dotfiles/hyprland/.local/bin/waybar-date @@ -0,0 +1,19 @@ +#!/bin/sh +# Waybar date module with two-month calendar tooltip +DATE=$(date '+%a, %b %d %Y') +TODAY=$(date '+%-d') +MONTH=$(date '+%B %Y') + +# Generate current month (with today highlighted) stacked above next month +NEXT_M=$(date -d 'next month' '+%-m') +NEXT_Y=$(date -d 'next month' '+%Y') +CUR=$(cal | sed "s/\b${TODAY}\b/${TODAY}<\/u><\/b><\/span>/") +NEXT=$(cal "$NEXT_M" "$NEXT_Y") +HIGHLIGHTED=$(printf '%s\n%s' "$CUR" "$NEXT") + +TOOLTIP="${HIGHLIGHTED}" + +# Escape for JSON +TOOLTIP=$(echo "$TOOLTIP" | sed ':a;N;$!ba;s/\n/\\n/g') + +printf '{"text": "%s", "tooltip": "%s"}\n' "$DATE" "$TOOLTIP" diff --git a/dotfiles/hyprland/.local/bin/waybar-worldclock b/dotfiles/hyprland/.local/bin/waybar-worldclock new file mode 100755 index 0000000..9801dad --- /dev/null +++ b/dotfiles/hyprland/.local/bin/waybar-worldclock @@ -0,0 +1,35 @@ +#!/bin/sh +# Waybar world clock module with configurable timezone tooltip +CONF="${HOME}/.config/waybar/worldclock.conf" + +# Local time for bar display +TEXT=$(date '+%I:%M %p %Z') +LOCAL_TZ=$(readlink /etc/localtime | sed 's|.*/zoneinfo/||') + +# Build tooltip from config file +if [ -f "$CONF" ]; then + LINES="" + while IFS='|' read -r tz label; do + # Skip comments and blank lines + case "$tz" in \#*|"") continue ;; esac + TIME=$(TZ="$tz" date '+%I:%M %p %Z') + LINE=$(printf "%-16s %s" "$label" "$TIME") + # Highlight local timezone in gold + if [ "$tz" = "$LOCAL_TZ" ]; then + LINE="${LINE}" + fi + if [ -z "$LINES" ]; then + LINES="$LINE" + else + LINES=$(printf "%s\n%s" "$LINES" "$LINE") + fi + done < "$CONF" + TOOLTIP="${LINES}" +else + TOOLTIP="No worldclock.conf found" +fi + +# Escape for JSON +TOOLTIP=$(echo "$TOOLTIP" | sed ':a;N;$!ba;s/\n/\\n/g') + +printf '{"text": "%s", "tooltip": "%s"}\n' "$TEXT" "$TOOLTIP" -- cgit v1.2.3