#!/usr/bin/env bash # NovaIRC pour Linux — installe NovaIRC avec Wine, dans un dossier à part (rien n'est touché ailleurs). # Installer ou mettre à jour : curl -fsSL https://novairc.netlify.app/novairc-linux.sh | bash # Désinstaller : curl -fsSL https://novairc.netlify.app/novairc-linux.sh | bash -s -- --desinstaller set -euo pipefail SITE="https://novairc.netlify.app" DIR="$HOME/.local/share/novairc" # NovaIRC.exe, logo et « bouteille » Wine PREFIX="$DIR/wine" BIN="$HOME/.local/bin/novairc" DESKTOP="$HOME/.local/share/applications/novairc.desktop" say() { printf '\033[1;35m▸\033[0m %s\n' "$*"; } fail() { printf '\033[1;31m✖ %s\033[0m\n' "$*" >&2; exit 1; } if [ "${1:-}" = "--desinstaller" ]; then say "Désinstallation de NovaIRC…" rm -rf "$DIR" "$BIN" "$DESKTOP" say "NovaIRC est désinstallé. (Vos réglages Wine/NovaIRC étaient dans $DIR : supprimés aussi.)" exit 0 fi # ── Wine et winetricks ── if ! command -v wine >/dev/null 2>&1 || ! command -v winetricks >/dev/null 2>&1; then echo echo "NovaIRC a besoin de Wine et winetricks. Installez-les puis relancez cette commande :" if command -v apt >/dev/null 2>&1; then echo " sudo dpkg --add-architecture i386 && sudo apt update && sudo apt install -y wine wine32 wine64 winetricks" elif command -v dnf >/dev/null 2>&1; then echo " sudo dnf install -y wine winetricks" elif command -v pacman >/dev/null 2>&1; then echo " sudo pacman -S --needed wine winetricks (activez d'abord le dépôt multilib)" elif command -v zypper >/dev/null 2>&1; then echo " sudo zypper install wine winetricks" else echo " (avec le gestionnaire de paquets de votre distribution : wine et winetricks)"; fi echo exit 1 fi command -v curl >/dev/null 2>&1 || fail "curl est nécessaire." mkdir -p "$DIR" "$(dirname "$BIN")" "$(dirname "$DESKTOP")" export WINEPREFIX="$PREFIX" WINEARCH=win64 WINEDEBUG=-all # ── .NET Framework 4.8 (une seule fois, environ 10 minutes) ── if [ ! -f "$PREFIX/.novairc-pret" ]; then say "Préparation de Wine pour NovaIRC (.NET Framework 4.8 et polices) — environ 10 minutes, une seule fois…" # (sans ceci, Wine ouvre une fenêtre qui attend un clic pour installer Mono et Gecko, inutiles ici : .NET 4.8 les remplace) WINEDLLOVERRIDES="mscoree,mshtml=" wineboot -i >/dev/null 2>&1 || true winetricks -q --force dotnet48 corefonts || fail "winetricks n'a pas pu installer .NET 4.8. Réessayez, ou mettez Wine à jour." wineserver -w || true touch "$PREFIX/.novairc-pret" fi # Segoe UI n'existe pas ici : on indique à Wine une police qui a tous les symboles de NovaIRC (sinon : carrés vides) for f in "Segoe UI" "Segoe UI Semibold" "Segoe UI Black"; do wine reg add 'HKCU\Software\Wine\Fonts\Replacements' /v "$f" /t REG_MULTI_SZ /d 'DejaVu Sans Condensed\0DejaVu Sans\0Noto Sans\0Liberation Sans\0Arial Unicode MS\0Lucida Grande\0Helvetica Neue\0Arial' /f >/dev/null 2>&1 || true done # ── NovaIRC.exe (vérifié avec son empreinte SHA-256) ── say "Téléchargement de NovaIRC…" json="$(curl -fsSL "$SITE/version.json")" ver="$(printf '%s' "$json" | grep -o '"version": *"[^"]*"' | sed 's/.*"\([^"]*\)"$/\1/' || true)" sha="$(printf '%s' "$json" | grep -o '"sha256": *"[0-9a-f]*"' | sed 's/.*"\([0-9a-f]*\)"$/\1/' || true)" curl -fL --progress-bar "$SITE/NovaIRC.exe" -o "$DIR/NovaIRC.exe.tmp" if [ -n "$sha" ] && command -v sha256sum >/dev/null 2>&1; then got="$(sha256sum "$DIR/NovaIRC.exe.tmp" | cut -d' ' -f1)" [ "$got" = "$sha" ] || { rm -f "$DIR/NovaIRC.exe.tmp"; fail "Le fichier téléchargé est abîmé (empreinte différente). Réessayez."; } fi mv -f "$DIR/NovaIRC.exe.tmp" "$DIR/NovaIRC.exe" curl -fsSL "$SITE/logo-256.png" -o "$DIR/novairc.png" || true # ── lanceur et entrée dans le menu des applications ── cat > "$BIN" < "$DESKTOP" </dev/null 2>&1 && update-desktop-database "$(dirname "$DESKTOP")" >/dev/null 2>&1 || true echo say "NovaIRC ${ver:-} est installé !" echo " Lancez-le depuis le menu des applications, ou avec la commande : novairc" case ":$PATH:" in *":$HOME/.local/bin:"*) ;; *) echo " (ajoutez ~/.local/bin à votre PATH pour la commande « novairc »)";; esac