#!/usr/bin/env bash # BackTunnel installer (scripts, man page, completions, Dolphin service menus) set -euo pipefail PREFIX=${PREFIX:-/usr} DESTDIR=${DESTDIR:-} BINDIR="$DESTDIR$PREFIX/bin" MANDIR="$DESTDIR$PREFIX/share/man/man1" KIO_SM="$DESTDIR$PREFIX/share/kio/servicemenus" KSVC5="$DESTDIR$PREFIX/share/kservices5/ServiceMenus" APPDIR="$DESTDIR$PREFIX/share/applications" BCOMP="$DESTDIR$PREFIX/share/bash-completion/completions" SHARE_DIR="$DESTDIR$PREFIX/share/backtunnel" ETC_DIR="$DESTDIR/etc/backtunnel" say() { printf '[BackTunnel] %s\n' "$@"; } # --- Create dirs --- install -d -m 755 "$BINDIR" "$MANDIR" "$KIO_SM" "$KSVC5" "$BCOMP" "$SHARE_DIR" "$APPDIR" install -d -m 755 "$ETC_DIR" # --- Install binaries --- for f in \ scripts/backtunnel-share \ scripts/backtunnel-access \ scripts/backtunnel-share-gui \ scripts/backtunnel-access-gui \ scripts/backtunnel-open-term \ scripts/backtunnel-share-tui \ scripts/backtunnel-access-tui \ scripts/backtunnel-keys \ scripts/backtunnel-authorize \ scripts/backtunnel-auth-setup do if [[ -f "$f" ]]; then install -m 755 "$f" "$BINDIR/$(basename "$f")" say "Installed $(basename "$f")" fi done # --- Man page --- if [[ -f man/backtunnel.1 ]]; then install -m 644 man/backtunnel.1 "$MANDIR/backtunnel.1" say "Installed man page" fi # --- Bash completion (same file serves both commands) --- if [[ -f completions/backtunnel.bash ]]; then install -m 644 completions/backtunnel.bash "$BCOMP/backtunnel-share" install -m 644 completions/backtunnel.bash "$BCOMP/backtunnel-access" say "Installed bash completions" fi # --- Dolphin service menus (Plasma 6 primary, Plasma 5 fallback) --- if [[ -f servicemenus/backtunnel_share.desktop ]]; then install -m 644 servicemenus/backtunnel_share.desktop "$KIO_SM/backtunnel_share.desktop" install -m 644 servicemenus/backtunnel_share.desktop "$KSVC5/backtunnel_share.desktop" say "Installed Dolphin: Share" fi if [[ -f servicemenus/backtunnel_access.desktop ]]; then install -m 644 servicemenus/backtunnel_access.desktop "$KIO_SM/backtunnel_access.desktop" install -m 644 servicemenus/backtunnel_access.desktop "$KSVC5/backtunnel_access.desktop" say "Installed Dolphin: Access" fi # --- Optional desktop launcher --- if [[ -f desktop/backtunnel.desktop ]]; then install -m 644 desktop/backtunnel.desktop "$APPDIR/backtunnel.desktop" say "Installed desktop launcher" fi # --- Profiles defaults --- if [[ -f docs/profiles.ini.example ]]; then install -m 644 docs/profiles.ini.example "$SHARE_DIR/profiles.ini" # install system default if not present (don’t overwrite local admin config) if [[ ! -f "$ETC_DIR/profiles.ini" ]]; then install -m 644 docs/profiles.ini.example "$ETC_DIR/profiles.ini" say "Installed default /etc/backtunnel/profiles.ini" else say "Preserved existing /etc/backtunnel/profiles.ini" fi fi # --- Refresh desktop/KDE cache (best-effort; skip during DESTDIR packaging) --- if [[ -z "${DESTDIR}" ]]; then if command -v update-desktop-database >/dev/null 2>&1; then say "Refreshing desktop database..." update-desktop-database -q || true fi if command -v kbuildsycoca6 >/dev/null 2>&1; then say "Rebuilding KDE sycoca (Plasma 6)..." kbuildsycoca6 --noincremental >/dev/null 2>&1 || true elif command -v kbuildsycoca5 >/dev/null 2>&1; then say "Rebuilding KDE sycoca (Plasma 5)..." kbuildsycoca5 --noincremental >/dev/null 2>&1 || true fi fi say "Install complete."