diff --git a/betterbird.sh b/betterbird.sh new file mode 100755 index 0000000..5d77898 --- /dev/null +++ b/betterbird.sh @@ -0,0 +1,70 @@ +#!/usr/bin/env bash +set -euo pipefail + +SRC_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +INSTALL_DIR="/opt/betterbird" + +echo "Installing Betterbird from $SRC_DIR to $INSTALL_DIR ..." + +sudo mkdir -p "$(dirname "$INSTALL_DIR")" +sudo cp -r "$SRC_DIR" "$INSTALL_DIR" + +sudo ln -sf "$INSTALL_DIR/betterbird" /usr/local/bin/betterbird + +sudo tee /usr/share/applications/betterbird.desktop > /dev/null </dev/null || true + +# --- i3 + polybar tray icon fix --- +# +# Betterbird gates its tray-icon feature behind mail.minimizeToTray.supportedDesktops, +# which defaults to "kde,gnome,pop:gnome,xfce,mate" and does not include i3. On top of +# that, within the whitelist it defaults to a StatusNotifierItem (SNI/AppIndicator) tray +# icon everywhere except "mate" -- but polybar's tray module only speaks the legacy +# XEmbed protocol, and this session has no StatusNotifierWatcher, so an SNI icon has +# nowhere to register. +# +# Fix: add "i3" to both prefs via user.js, which Betterbird force-applies at every +# startup (unlike prefs.js, which Betterbird overwrites from its own in-memory state +# and would silently drop a plain text edit). +THUNDERBIRD_CONFIG_DIR="$HOME/.config/thunderbird" +BB_PROFILE_DIR="$(find "$THUNDERBIRD_CONFIG_DIR" -maxdepth 1 -iname "*.default-default" -type d 2>/dev/null | head -1)" +if [ -z "$BB_PROFILE_DIR" ]; then + BB_PROFILE_DIR="$(find "$THUNDERBIRD_CONFIG_DIR" -maxdepth 1 -iname "*.default*" -type d 2>/dev/null | head -1)" +fi + +if [ -n "$BB_PROFILE_DIR" ]; then + echo "Applying i3/polybar tray icon fix to profile: $BB_PROFILE_DIR" + USER_JS="$BB_PROFILE_DIR/user.js" + touch "$USER_JS" + if ! grep -q "mail.minimizeToTray.supportedDesktops" "$USER_JS" 2>/dev/null; then + cat >> "$USER_JS" <<'EOF' + +// Betterbird gates its whole tray-icon feature behind a whitelist of +// XDG_CURRENT_DESKTOP values; add i3 so the feature isn't disabled outright. +user_pref("mail.minimizeToTray.supportedDesktops", "kde,gnome,pop:gnome,xfce,mate,i3"); + +// Within the whitelist, Betterbird still defaults to a StatusNotifierItem +// (SNI/AppIndicator) tray icon everywhere except "mate". polybar's tray +// module only speaks the legacy XEmbed protocol, so force the legacy icon +// for i3 too. +user_pref("mail.systemTrayNoSniSupport", "mate,i3"); +EOF + else + echo "Tray icon fix already present in $USER_JS, skipping." + fi +else + echo "No Betterbird profile found yet -- launch Betterbird once, then re-run this script to apply the i3/polybar tray icon fix." +fi + +echo "Done. Launch with 'betterbird' or from your application menu."