aboutsummaryrefslogtreecommitdiff
path: root/scripts/cmail-setup-finish.sh
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/cmail-setup-finish.sh')
-rwxr-xr-xscripts/cmail-setup-finish.sh54
1 files changed, 49 insertions, 5 deletions
diff --git a/scripts/cmail-setup-finish.sh b/scripts/cmail-setup-finish.sh
index de99101..3e119f6 100755
--- a/scripts/cmail-setup-finish.sh
+++ b/scripts/cmail-setup-finish.sh
@@ -15,8 +15,13 @@
# 2. Copies Bridge's self-signed cert → ~/.config/protonbridge.pem
# 3. Symlinks ~/projects/claude-templates/.ai/scripts/cmail-action.py
# → ~/.local/bin/cmail-action
-# 4. Enables + starts the protonmail-bridge user service
-# 5. Verifies Bridge is listening on 127.0.0.1:1143 / :1025
+# 4. Removes the leftover ~/.config/autostart/Proton Mail Bridge.desktop
+# stub (it double-launches Bridge alongside the systemd user service
+# and throws an "orphan instance" dialog every login)
+# 5. Installs a wait-for-dns drop-in so Bridge doesn't spam
+# name-resolution errors during the early-boot DNS race
+# 6. Enables + starts the protonmail-bridge user service
+# 7. Verifies Bridge is listening on 127.0.0.1:1143 / :1025
set -euo pipefail
@@ -61,12 +66,51 @@ mkdir -p "$HOME/.local/bin"
ln -sf "$cmail_action_src" "$HOME/.local/bin/cmail-action"
ok "linked $HOME/.local/bin/cmail-action → $cmail_action_src"
-# 5. Enable + start systemd user service
+# 5. Remove leftover XDG autostart stub
+# The systemd --user service is the canonical launcher. The autostart .desktop
+# starts a second Bridge instance that can't get the lock and pops up an
+# "orphan instance" dialog every login.
+info "removing orphan autostart launcher (if present)"
+autostart_stub="$HOME/.config/autostart/Proton Mail Bridge.desktop"
+if [ -f "$autostart_stub" ]; then
+ rm "$autostart_stub"
+ ok "removed $autostart_stub"
+else
+ ok "no autostart stub present"
+fi
+
+# 6. Install wait-for-dns drop-in
+# User-instance systemd doesn't carry network-online.target / nss-lookup.target,
+# so the packaged unit's After=network.target doesn't imply DNS readiness.
+# Bridge starts before the resolver is up and its first API calls all fail
+# until DNS comes online a few seconds later. The drop-in waits (bounded 30s)
+# for resolution before ExecStart. The leading '-' on ExecStartPre makes it
+# non-fatal, so an offline boot still starts the unit.
+info "installing wait-for-dns drop-in"
+dropin_dir="$HOME/.config/systemd/user/protonmail-bridge.service.d"
+dropin_file="$dropin_dir/wait-for-dns.conf"
+mkdir -p "$dropin_dir"
+cat > "$dropin_file" <<'EOF'
+[Service]
+ExecStartPre=-/bin/sh -c 'for i in $(seq 1 30); do getent hosts mail-api.proton.me >/dev/null 2>&1 && exit 0; sleep 1; done'
+EOF
+ok "wrote $dropin_file"
+systemctl --user daemon-reload
+ok "reloaded systemd user units"
+
+# 7. Enable + start systemd user service
info "enabling protonmail-bridge user service"
+was_active=0
+systemctl --user is-active --quiet protonmail-bridge.service && was_active=1
systemctl --user enable --now protonmail-bridge
-ok "service active"
+if [ "$was_active" = "1" ]; then
+ systemctl --user restart protonmail-bridge
+ ok "service active (restarted to pick up drop-in)"
+else
+ ok "service active"
+fi
-# 6. Verify
+# 8. Verify
info "verifying Bridge is listening"
if ss -ltn 2>/dev/null | grep -qE '127\.0\.0\.1:(1143|1025)'; then
ok "127.0.0.1:1143 + :1025 LISTEN"