77 lines
2.5 KiB
Bash
77 lines
2.5 KiB
Bash
|
|
#!/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" <<EOF
|
||
|
|
[Unit]
|
||
|
|
Description=Navka keyboard relay
|
||
|
|
After=network.target
|
||
|
|
|
||
|
|
[Service]
|
||
|
|
Type=simple
|
||
|
|
ExecStart=/opt/navka-relay/navka-relay.sh
|
||
|
|
Restart=on-failure
|
||
|
|
EnvironmentFile=%h/.config/navka-relay.env
|
||
|
|
|
||
|
|
[Install]
|
||
|
|
WantedBy=default.target
|
||
|
|
EOF
|
||
|
|
|
||
|
|
systemctl --user daemon-reload
|
||
|
|
systemctl --user enable navka-relay >/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
|
||
|
|
|