#!/usr/bin/env bash set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)" APPDIR="$SCRIPT_DIR/AppDir" VERSION="${1:-0.1.0}" echo "=== Building Viet+ AppImage v${VERSION} ===" # Clean rm -rf "$APPDIR" mkdir -p "$APPDIR/usr/bin" mkdir -p "$APPDIR/usr/share/applications" mkdir -p "$APPDIR/usr/share/icons/hicolor/256x256/apps" mkdir -p "$APPDIR/usr/share/doc/vietc" mkdir -p "$APPDIR/etc/vietc" # Build binaries echo "[1/5] Building binaries..." cd "$PROJECT_ROOT" if pkg-config --exists x11 xtst 2>/dev/null; then cargo build --release --features "x11,wayland" echo " Built with x11 + wayland" else cargo build --release --features wayland echo " Built with wayland only (X11 libs not found)" fi cd "$SCRIPT_DIR" cd "$PROJECT_ROOT/ui" && cargo build --release 2>/dev/null && cd "$SCRIPT_DIR" || echo " UI build skipped (missing GTK4 libs)" cd "$PROJECT_ROOT" # Copy binaries echo "[2/5] Installing binaries..." cp target/release/vietc "$APPDIR/usr/bin/" cp target/release/vietc-cli "$APPDIR/usr/bin/" [ -f ui/target/release/vietc-settings ] && cp ui/target/release/vietc-settings "$APPDIR/usr/bin/" [ -f ui/target/release/vietc-tray ] && cp ui/target/release/vietc-tray "$APPDIR/usr/bin/" # Desktop integration echo "[3/5] Installing desktop integration..." cp "$SCRIPT_DIR/vietc.desktop" "$APPDIR/usr/share/applications/" # Generate SVG icon cat > "$APPDIR/usr/share/icons/hicolor/256x256/apps/vietc.svg" << 'SVGEOF' VN SVGEOF # Convert SVG to PNG if rsvg-convert available if command -v rsvg-convert &>/dev/null; then rsvg-convert -w 256 -h 256 "$APPDIR/usr/share/icons/hicolor/256x256/apps/vietc.svg" \ -o "$APPDIR/usr/share/icons/hicolor/256x256/apps/vietc.png" rm "$APPDIR/usr/share/icons/hicolor/256x256/apps/vietc.svg" fi # Copy icon to AppDir root for appimagetool cp "$APPDIR/usr/share/icons/hicolor/256x256/apps/vietc."{png,svg} "$APPDIR/" 2>/dev/null || true # Config echo "[4/5] Installing config..." cp "$PROJECT_ROOT/vietc.toml" "$APPDIR/etc/vietc/config.toml" cp "$PROJECT_ROOT/README.md" "$APPDIR/usr/share/doc/vietc/" # Systemd service mkdir -p "$APPDIR/usr/lib/systemd/user" cp "$PROJECT_ROOT/vietc.service" "$APPDIR/usr/lib/systemd/user/" # Desktop file in AppDir root cp "$APPDIR/usr/share/applications/vietc.desktop" "$APPDIR/" echo "[5/5] AppDir ready at: $APPDIR" echo "" echo "To build AppImage:" echo " appimagetool $APPDIR Viet+-${VERSION}-x86_64.AppImage"