#!/usr/bin/env bash # # Installe Zonza sur macOS (et Linux, pour la partie portable). # # ./install.sh # # Cree l'environnement, installe UNIQUEMENT ce qui sert a cette machine (les # marqueurs de requirements.txt s'en chargent), construit l'app macOS, puis lance # le diagnostic. Il ne masque aucune erreur : si une etape echoue, il s'arrete. set -euo pipefail cd "$(dirname "$0")" MINIMUM="3.11" PY="${PYTHON:-python3}" echo "→ Verification de Python…" command -v "$PY" >/dev/null || { echo "✗ '$PY' introuvable. Installe Python $MINIMUM ou plus, ou renseigne PYTHON=/chemin/vers/python3." >&2; exit 1; } "$PY" - <&2; exit 1; } import sys raise SystemExit(0 if sys.version_info >= tuple(int(n) for n in "$MINIMUM".split(".")) else 1) PYCODE echo " $("$PY" --version)" if [[ ! -d .venv ]]; then echo "→ Creation de l'environnement…" "$PY" -m venv .venv else echo "→ Environnement deja present, on le reutilise." fi echo "→ Installation des dependances de CETTE machine…" .venv/bin/python -m pip install --quiet --upgrade pip .venv/bin/python -m pip install --quiet -r requirements.txt echo " $(.venv/bin/python -m pip list 2>/dev/null | wc -l | tr -d ' ') paquets installes" if [[ "$(uname)" == "Darwin" ]]; then # Garde-fou : build_app.sh grave le chemin de CE dossier dans le binaire de # /Applications/Zonza.app. Si une Zonza y est deja installee depuis un AUTRE # dossier, reconstruire la detournerait vers ici — et changerait son cdhash, # ce qui REVOQUE silencieusement les autorisations macOS deja accordees. # Faute de ce garde-fou, un simple essai depuis une copie casse l'installation # en service (arrive le 2026-08-23, rattrape de justesse). CIBLE_ACTUELLE="" if [[ -x /Applications/Zonza.app/Contents/MacOS/zonza ]]; then CIBLE_ACTUELLE="$(strings /Applications/Zonza.app/Contents/MacOS/zonza 2>/dev/null | grep -m1 -E '/app\.py$' || true)" fi ICI="$(pwd)/app.py" if [[ -n "$CIBLE_ACTUELLE" && "$CIBLE_ACTUELLE" != "$ICI" ]]; then echo echo "⚠ Une Zonza est deja installee, et elle pointe ailleurs :" echo " installee ici : $CIBLE_ACTUELLE" echo " ce dossier : $ICI" echo echo " Reconstruire la detournerait vers ce dossier et REVOQUERAIT ses" echo " autorisations macOS (Accessibilite, Surveillance de l'entree)." echo " L'application n'est donc PAS reconstruite." echo echo " Si c'est bien ce que tu veux, lance : ZONZA_REMPLACER=1 ./install.sh" if [[ "${ZONZA_REMPLACER:-}" != "1" ]]; then CONSTRUIRE=0 else echo " ZONZA_REMPLACER=1 : reconstruction demandee explicitement." CONSTRUIRE=1 fi else CONSTRUIRE=1 fi if [[ "$CONSTRUIRE" == "1" ]]; then echo "→ Construction de Zonza.app…" ./build_app.sh fi fi echo "→ Diagnostic…" .venv/bin/python app.py --diagnostic || { echo echo "✗ Le diagnostic signale un probleme. Rien n'est casse : lis les lignes" echo " ci-dessus, elles disent laquelle des epreuves a echoue." >&2 exit 1 } cat <<'FIN' ✓ Installe. Il reste UNE chose que seul toi peux faire, et sans elle le raccourci ne fonctionnera pas : accorder les autorisations macOS. Reglages systeme > Confidentialite et securite • Accessibilite → ajoute /Applications/Zonza.app, puis active • Surveillance de l'entree → la meme chose Puis quitte Zonza par son icone 🎙️ et relance-la : l'autorisation n'est lue qu'au demarrage. Usage : Cmd+Ctrl+D pour demarrer et arreter la dictee. Journal : ~/Library/Logs/Zonza.log FIN