#!/bin/sh # run.sh — build, ensure the keyboard is accessible, and launch the web editor. # # On the first run it asks for your doas password once to install a udev rule # (and fix the current device node). After that, access is persistent and no # password is needed. Pass extra flags through to hhkb-web, e.g. ./run.sh -open=false set -u cd "$(dirname "$0")" echo "[1/3] building hhkb-web…" go build -o hhkb-web ./cmd/hhkb-web || { echo "build failed"; exit 1; } # Locate the HHKB (USB vendor 04fe) hidraw nodes. node="" for n in /dev/hidraw*; do [ -e "$n" ] || continue if grep -q 000004FE "/sys/class/hidraw/${n##*/}/device/uevent" 2>/dev/null; then node="$n" break fi done if [ -z "$node" ]; then echo "[2/3] no HHKB detected (is it plugged in?) — starting anyway." elif [ -r "$node" ] && [ -w "$node" ]; then echo "[2/3] keyboard already accessible — no password needed." else echo "[2/3] granting access (doas password needed once)…" doas sh -c ' mkdir -p /etc/udev/rules.d printf "%s\n" "KERNEL==\"hidraw*\", ATTRS{idVendor}==\"04fe\", MODE=\"0660\", GROUP=\"input\"" \ > /etc/udev/rules.d/70-hhkb.rules udevadm control --reload-rules udevadm trigger for n in /dev/hidraw*; do grep -q 000004FE "/sys/class/hidraw/${n##*/}/device/uevent" 2>/dev/null \ && chgrp input "$n" && chmod g+rw "$n" done true ' && echo " done — rule installed, future runs need no password." \ || echo " setup failed; the editor will show the access banner." fi pkill -x hhkb-web 2>/dev/null || true # stop any previous instance so the new build is served echo "[3/3] http://127.0.0.1:8080" exec ./hhkb-web "$@"