#!/usr/bin/env bash set -euo pipefail # ---------- paths ---------- SRC_DIR=$(pwd) # where the script is launched APPDIR=/opt/navka-relay VENV=$APPDIR/venv SERVICE=$HOME/.config/systemd/user/navka-relay.service USR=${SUDO_USER:-$USER} green(){ printf '\e[1;32m==>\e[0m %s\n' "$*"; } ############################################################################## green "1. Packages (python + evdev) …" ############################################################################## sudo pacman -Sy --needed --noconfirm python python-evdev >/dev/null ############################################################################## green "2. Install /opt/navka-relay …" ############################################################################## sudo mkdir -p "$APPDIR" sudo chown "$USR":"$USR" "$APPDIR" # use a symlink when run from dev folder so edits are live if [[ $SRC_DIR != "$APPDIR" ]]; then ln -sf "$SRC_DIR/navka-relay.sh" "$APPDIR/navka-relay.sh" fi chmod +x "$SRC_DIR/navka-relay.sh" ############################################################################## green "3. Build virtual-env (system pkgs visible) …" ############################################################################## if [[ ! -d $VENV/bin ]]; then python -m venv --system-site-packages "$VENV" fi # ensure evdev importable inside venv (pacman pkg provides it; pip fallback) "$VENV/bin/pip" install --quiet --disable-pip-version-check --upgrade pip >/dev/null "$VENV/bin/python" - <<'PY' import importlib, subprocess, sys try: importlib.import_module('evdev') except ImportError: subprocess.check_call([sys.executable, '-m', 'pip', 'install', 'evdev']) PY ############################################################################## green "4. systemd *user* unit …" ############################################################################## mkdir -p "$(dirname "$SERVICE")" cat >"$SERVICE" </dev/null 2>&1 || true green "✔ Install complete" cat <<'TXT' Start relay : systemctl --user start navka-relay Stop relay : systemctl --user stop navka-relay Manual run : /opt/navka-relay/navka-relay.sh Variables : NAVKA_IP=… NAVKA_PORT=… NAVKA_KBD=… navka-relay.sh TXT