#!/bin/sh # Deterministic, context-aware pinentry selector # 1. Emacs — only when actually inside Emacs if [ -n "$INSIDE_EMACS" ] && command -v pinentry-emacs >/dev/null 2>&1; then exec pinentry-emacs "$@" fi # 2. macOS GUI if [ "$(uname -s)" = "Darwin" ]; then if [ -x /opt/homebrew/bin/pinentry-mac ]; then exec /opt/homebrew/bin/pinentry-mac "$@"; fi if [ -x /usr/local/bin/pinentry-mac ]; then exec /usr/local/bin/pinentry-mac "$@"; fi fi # 3. Linux GUI — only if a GUI session exists if [ -n "$WAYLAND_DISPLAY" ] || [ -n "$DISPLAY" ]; then if command -v pinentry-gnome3 >/dev/null 2>&1; then exec pinentry-gnome3 "$@"; fi if command -v pinentry-gtk-2 >/dev/null 2>&1; then exec pinentry-gtk-2 "$@"; fi if command -v pinentry-qt >/dev/null 2>&1; then exec pinentry-qt "$@"; fi fi # 4. TTY fallback if command -v pinentry-curses >/dev/null 2>&1; then exec pinentry-curses "$@" fi # 5. Last resort exec pinentry "$@"