diff options
| author | Don Williams <don.e.williams@gmail.com> | 2026-08-11 02:41:54 -0400 |
|---|---|---|
| committer | Pinapelz <yukais@pinapelz.com> | 2026-08-29 21:41:34 -0700 |
| commit | 5b26f6efcea9e1ecb3c5abc5577ec0cad24721be (patch) | |
| tree | bb7fcaf33e7a2e7857b56084104deaf7b5a9b175 /config/hypr | |
| parent | f1694b519cd73d1bf2b2424ed893489cd1a8d8b3 (diff) | |
Adjusted waybar startup to prevent duplicate waybars
On branch development
Your branch is up to date with 'origin/development'.
Changes to be committed:
modified: CHANGELOG.md
modified: config/hypr/scripts/WaybarStartup.sh
Diffstat (limited to 'config/hypr')
| -rwxr-xr-x | config/hypr/scripts/WaybarStartup.sh | 80 |
1 files changed, 34 insertions, 46 deletions
diff --git a/config/hypr/scripts/WaybarStartup.sh b/config/hypr/scripts/WaybarStartup.sh index 7f8ee1e2..e1306f7d 100755 --- a/config/hypr/scripts/WaybarStartup.sh +++ b/config/hypr/scripts/WaybarStartup.sh @@ -15,6 +15,7 @@ SCRIPTSDIR="${XDG_CONFIG_HOME:-$HOME/.config}/hypr/scripts" is_waybar_running() { pgrep -x "waybar" >/dev/null 2>&1 || pgrep -x '\.waybar-wrapped' >/dev/null 2>&1 } + wait_for_waybar() { for _ in $(seq 1 80); do is_waybar_running && return 0 @@ -22,50 +23,11 @@ wait_for_waybar() { done return 1 } -ensure_wallust_waybar_colors() { - local colors_file="${XDG_CONFIG_HOME:-$HOME/.config}/waybar/wallust/colors-waybar.css" - [ -s "$colors_file" ] && return 0 - - if [ -x "$SCRIPTSDIR/WallustSwww.sh" ]; then - "$SCRIPTSDIR/WallustSwww.sh" >/dev/null 2>&1 || true - fi - - for _ in $(seq 1 40); do - [ -s "$colors_file" ] && return 0 - sleep 0.1 - done - return 1 -} -sync_portal_env() { - if command -v dbus-update-activation-environment >/dev/null 2>&1; then - dbus-update-activation-environment --systemd \ - WAYLAND_DISPLAY XDG_CURRENT_DESKTOP XDG_SESSION_DESKTOP XDG_SESSION_TYPE XDG_DATA_DIRS GSETTINGS_SCHEMA_DIR >/dev/null 2>&1 || true - fi - - if command -v systemctl >/dev/null 2>&1; then - systemctl --user import-environment \ - WAYLAND_DISPLAY XDG_CURRENT_DESKTOP XDG_SESSION_DESKTOP XDG_SESSION_TYPE XDG_DATA_DIRS GSETTINGS_SCHEMA_DIR >/dev/null 2>&1 || true - fi -} - -start_portal_services() { - command -v systemctl >/dev/null 2>&1 || return 0 - - systemctl --user start xdg-desktop-portal-hyprland.service >/dev/null 2>&1 || true - systemctl --user start xdg-desktop-portal.service >/dev/null 2>&1 || true - - for _ in $(seq 1 50); do - systemctl --user is-active --quiet xdg-desktop-portal.service && return 0 - sleep 0.1 - done - return 1 -} wait_for_wayland() { if [ -n "${WAYLAND_DISPLAY:-}" ] && [ -S "$runtime_dir/$WAYLAND_DISPLAY" ]; then return 0 fi - for _ in $(seq 1 30); do for socket in "$runtime_dir"/wayland-[0-9]*; do [ -S "$socket" ] || continue @@ -77,41 +39,67 @@ wait_for_wayland() { done sleep 0.1 done - return 1 } +sync_portal_env() { + if command -v dbus-update-activation-environment >/dev/null 2>&1; then + dbus-update-activation-environment --systemd \ + WAYLAND_DISPLAY XDG_CURRENT_DESKTOP XDG_SESSION_DESKTOP XDG_SESSION_TYPE XDG_DATA_DIRS GSETTINGS_SCHEMA_DIR >/dev/null 2>&1 || true + fi + if command -v systemctl >/dev/null 2>&1; then + systemctl --user import-environment \ + WAYLAND_DISPLAY XDG_CURRENT_DESKTOP XDG_SESSION_DESKTOP XDG_SESSION_TYPE XDG_DATA_DIRS GSETTINGS_SCHEMA_DIR >/dev/null 2>&1 || true + fi +} + ensure_wallust_waybar_colors() { local colors_file="${XDG_CONFIG_HOME:-$HOME/.config}/waybar/wallust/colors-waybar.css" mkdir -p "$(dirname "$colors_file")" 2>/dev/null || true - if [ ! -f "$colors_file" ]; then - touch "$colors_file" 2>/dev/null || true - fi + [ -f "$colors_file" ] || touch "$colors_file" 2>/dev/null || true if [ ! -s "$colors_file" ] && [ -x "$SCRIPTSDIR/WallustSwww.sh" ]; then "$SCRIPTSDIR/WallustSwww.sh" >/dev/null 2>&1 & fi } +# Use systemd to start waybar only when waybar.service is explicitly enabled. +# Returns 1 on Debian/systems with no enabled service so the caller falls +# through to start_waybar_direct. +start_waybar_via_systemd() { + command -v systemctl >/dev/null 2>&1 || return 1 + # Service must exist + systemctl --user cat waybar.service >/dev/null 2>&1 || return 1 + # Service must be enabled (not just installed) + local enabled_state + enabled_state="$(systemctl --user is-enabled waybar.service 2>/dev/null || true)" + case "$enabled_state" in + enabled|static) ;; + *) return 1 ;; + esac + systemctl --user start waybar.service >/dev/null 2>&1 || return 1 + wait_for_waybar +} + start_waybar_direct() { if command -v waybar >/dev/null 2>&1; then waybar >/dev/null 2>&1 & return 0 fi - if command -v .waybar-wrapped >/dev/null 2>&1; then .waybar-wrapped >/dev/null 2>&1 & return 0 fi - return 1 } main() { + # Brief wait so a systemd-managed waybar.service has time to appear + # before we check; avoids a race on distros with an enabled unit. + sleep 0.5 is_waybar_running && exit 0 wait_for_wayland || true sync_portal_env || true ensure_wallust_waybar_colors - if start_waybar_via_systemd || start_waybar_direct; then exit 0 fi |
