diff --git a/common/navka.proto b/common/navka.proto deleted file mode 100644 index cf1f202..0000000 --- a/common/navka.proto +++ /dev/null @@ -1,8 +0,0 @@ -syntax = "proto3"; -package navka; - -message HidReport { bytes data = 1; } - -service Relay { - rpc Stream (stream HidReport) returns (stream HidReport); -} diff --git a/scripts/install-client.sh b/scripts/install-client.sh index 1502b10..701c004 100755 --- a/scripts/install-client.sh +++ b/scripts/install-client.sh @@ -1,26 +1,55 @@ #!/usr/bin/env bash set -euo pipefail -sudo pacman --needed --noconfirm -S git rustup protobuf gcc evtest + +# 1) Install system dependencies (Arch Linux) +sudo pacman -S --needed --noconfirm git rustup protobuf gcc evtest + +# 2) Ensure Rust toolchain is present rustup toolchain install stable -WORK=$HOME/.local/src/navka -if [ ! -d "$WORK" ]; then git clone ssh://git@scm.bstein.dev:2242/brad_stein/navka.git "$WORK"; fi -cd "$WORK" && git pull +# 3) Determine repo URL from the current directory +# We assume this script lives under /scripts/install-client.sh +REPO_DIR="$(cd "$(dirname "$0")/.." && pwd)" +REPO_URL="$(git -C "$REPO_DIR" config --get remote.origin.url)" +if [ -z "$REPO_URL" ]; then + echo "Error: could not read git remote.origin.url from $REPO_DIR" + exit 1 +fi +# 4) Where to clone/build if not already present +WORK="$HOME/.local/src/navka" +if [ ! -d "$WORK" ]; then + git clone "$REPO_URL" "$WORK" +else + pushd "$WORK" >/dev/null + git fetch --all + git reset --hard origin/$(git -C "$WORK" rev-parse --abbrev-ref HEAD) + popd >/dev/null +fi + +# 5) Build the client +cd "$WORK" cargo build --release --manifest-path client/Cargo.toml + +# 6) Install the client binary install -Dm755 target/release/navka-client ~/.local/bin/navka-client +# 7) Create and enable a user-level systemd service mkdir -p ~/.config/systemd/user -cat <<'EOF' > ~/.config/systemd/user/navka-client.service +cat > ~/.config/systemd/user/navka-client.service <<'EOF' [Unit] +Description=Navka Client (keyboard/mouse → navka-server) After=network.target + [Service] ExecStart=%h/.local/bin/navka-client Restart=on-failure + [Install] WantedBy=default.target EOF systemctl --user daemon-reload systemctl --user enable --now navka-client.service -echo "navka-client installed." + +echo "navka-client installed and running." diff --git a/scripts/install-server.sh b/scripts/install-server.sh index 6906380..5f5f49a 100755 --- a/scripts/install-server.sh +++ b/scripts/install-server.sh @@ -1,31 +1,40 @@ #!/usr/bin/env bash set -euo pipefail -sudo pacman --needed --noconfirm -S git rustup protobuf gcc +# 1) Install system dependencies (Arch Linux) +sudo pacman -S --needed --noconfirm git rustup protobuf gcc ustreamer pulseaudio tailscale + +# 2) Ensure Rust toolchain is present rustup toolchain install stable -WORK=/opt/navka -if [ ! -d "$WORK" ]; then sudo git clone ssh://git@scm.bstein.dev:2242/brad_stein/navka.git "$WORK"; fi -cd "$WORK" && sudo git pull +# 3) Determine repo URL from the current directory +REPO_DIR="$(cd "$(dirname "$0")/.." && pwd)" +REPO_URL="$(git -C "$REPO_DIR" config --get remote.origin.url)" +if [ -z "$REPO_URL" ]; then + echo "Error: could not read git remote.origin.url from $REPO_DIR" + exit 1 +fi +# 4) Where to clone/build if not already present +WORK="/opt/navka" +if [ ! -d "$WORK" ]; then + sudo git clone "$REPO_URL" "$WORK" +else + sudo git -C "$WORK" fetch --all + sudo git -C "$WORK" reset --hard origin/$(sudo git -C "$WORK" rev-parse --abbrev-ref HEAD) +fi + +# 5) Build navka-server (and ensure gadget script is in place) +cd "$WORK" cargo build --release --manifest-path server/Cargo.toml -sudo install -Dm755 target/release/navka-server /usr/local/bin/navka-server -sudo install -Dm755 gadget/navka-gadget.sh /usr/local/bin/navka-gadget.sh -cat <<'EOF' | sudo tee /etc/systemd/system/navka-server.service -[Unit] -After=network.target navka-gadget.service -[Service] -ExecStart=/usr/local/bin/navka-server -Restart=always -User=root -[Install] -WantedBy=multi-user.target -EOF +sudo install -Dm755 target/release/navka-server /usr/local/bin/navka-server +sudo install -Dm755 gadget/navka-gadget.sh /usr/local/bin/navka-gadget.sh -cat <<'EOF' | sudo tee /etc/systemd/system/navka-gadget.service +# 6) Install systemd unit for navka-gadget (USB gadget) +cat | sudo tee /etc/systemd/system/navka-gadget.service >/dev/null <<'EOF' [Unit] -Description=USB Gadget +Description=Navka USB Gadget (HID + Audio) [Service] Type=oneshot ExecStart=/usr/local/bin/navka-gadget.sh @@ -34,6 +43,23 @@ RemainAfterExit=yes WantedBy=multi-user.target EOF +# 7) Install systemd unit for navka-server (Rust relay) +cat | sudo tee /etc/systemd/system/navka-server.service >/dev/null <<'EOF' +[Unit] +Description=Navka Relay Server (HID over gRPC) +After=network.target navka-gadget.service + +[Service] +ExecStart=/usr/local/bin/navka-server +Restart=always +User=root + +[Install] +WantedBy=multi-user.target +EOF + +# 8) Reload & enable both services sudo systemctl daemon-reload sudo systemctl enable --now navka-gadget.service navka-server.service -echo "navka-server installed." + +echo "navka-server installed and running."