diff --git a/linux/install.sh b/linux/install.sh index 4577cca..cc90f90 100755 --- a/linux/install.sh +++ b/linux/install.sh @@ -1,49 +1,75 @@ #!/usr/bin/env bash -# Set up Blitztext for Linux: create a venv, install deps, check host tools, -# and write the default config. Run from the linux/ directory. +# Install Blitztext for Linux (no root needed). +# +# Creates a self-contained venv at ~/.local/lib/blitztext (outside any CIFS +# share, using --copies so no symlinks are needed), copies the package into it, +# and writes a launcher to ~/.local/bin/blitztext. The source folder can be +# deleted after this script finishes. set -euo pipefail cd "$(dirname "$0")" -VENV=".venv" +APPDIR="$HOME/.local/lib/blitztext" +VENV="$APPDIR/venv" +BIN="$HOME/.local/bin/blitztext" echo "==> Checking host tools" need_pkg=() -command -v xdotool >/dev/null || need_pkg+=("xdotool") +command -v xdotool >/dev/null || need_pkg+=("xdotool") command -v notify-send >/dev/null || need_pkg+=("libnotify-bin") if ! command -v pw-record >/dev/null && ! command -v arecord >/dev/null && ! command -v parecord >/dev/null; then - need_pkg+=("pipewire-bin (or alsa-utils)") + need_pkg+=("pipewire-bin (or alsa-utils)") fi -if ((${#need_pkg[@]})); then - echo " Missing host tools: ${need_pkg[*]}" - echo " On Ubuntu/Debian: sudo apt install xdotool libnotify-bin pipewire-bin" - echo " (continuing — install them before running the daemon)" +if (( ${#need_pkg[@]} )); then + echo " Missing host tools: ${need_pkg[*]}" + echo " On Ubuntu/Debian: sudo apt install xdotool libnotify-bin pipewire-bin" + echo " (continuing — install them before running the app)" fi -# --system-site-packages lets the venv see an apt-installed PyGObject (python3-gi) -# for the optional system-tray mode; harmless if it's not installed. echo "==> Creating venv at $VENV" -python3 -m venv --system-site-packages "$VENV" +mkdir -p "$APPDIR" +# --copies avoids lib64->lib symlinks that fail on CIFS/SMB shares. +# --system-site-packages lets the venv see apt-installed python3-gi for the tray. +python3 -m venv --copies --system-site-packages "$VENV" "$VENV/bin/pip" install --upgrade pip -q -"$VENV/bin/pip" install -r requirements.txt +"$VENV/bin/pip" install -q -r requirements.txt + +echo "==> Installing blitztext package" +# Copy the package into site-packages so this source folder can be deleted. +cp -r blitztext "$VENV/lib/python"*/site-packages/ echo "==> Writing default config (if absent)" "$VENV/bin/python" -m blitztext config-path +echo "==> Installing launcher → $BIN" +mkdir -p "$(dirname "$BIN")" +cat > "$BIN" </dev/null || true + cat <