Files
lumbridge-code/scripts/open-metal-lumbridge.sh
T
karti ab7543b9c6
CI / rust (push) Successful in 1m38s
Harden metal preview launcher
2026-08-31 16:19:50 -07:00

82 lines
3.0 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
repo_path=${LUMBRIDGE_REPO:-/home/metal/Desktop/Lumbridge Code/lumbridge}
window_title='Lumbridge · GPUI workspace'
bacon_title='Lumbridge · Bacon'
manifest_path="$repo_path/spikes/gpui-shell/Cargo.toml"
binary_path="$repo_path/spikes/gpui-shell/target/debug/lumbridge-spike-gpui"
if [[ ! -d "$repo_path/.git" ]]; then
echo "Lumbridge repository not found at $repo_path" >&2
exit 1
fi
export DISPLAY=${DISPLAY:-:0}
export XAUTHORITY=${XAUTHORITY:-/run/user/1000/gdm/Xauthority}
export XDG_RUNTIME_DIR=${XDG_RUNTIME_DIR:-/run/user/1000}
export DBUS_SESSION_BUS_ADDRESS=${DBUS_SESSION_BUS_ADDRESS:-unix:path=/run/user/1000/bus}
for command_name in wmctrl xdotool; do
if ! command -v "$command_name" >/dev/null 2>&1; then
echo "required command not found: $command_name" >&2
exit 1
fi
done
if [[ ! -x "$binary_path" ]]; then
if ! command -v cargo >/dev/null 2>&1; then
# Non-login Tailscale SSH commands do not inherit metal's Cargo PATH.
# shellcheck source=/dev/null
source /home/metal/.cargo/env
fi
if ! command -v cargo >/dev/null 2>&1; then
echo "required command not found: cargo" >&2
exit 1
fi
xkb_runtime=/usr/lib/x86_64-linux-gnu/libxkbcommon-x11.so.0
if [[ -e "$xkb_runtime" ]]; then
native_libs="$repo_path/spikes/gpui-shell/target/native-libs"
mkdir -p "$native_libs"
ln -sfn "$xkb_runtime" "$native_libs/libxkbcommon-x11.so"
export LIBRARY_PATH="$native_libs${LIBRARY_PATH:+:$LIBRARY_PATH}"
fi
cargo build --locked --manifest-path "$manifest_path"
fi
existing_id=$(wmctrl -l | awk -v title="$window_title" 'index($0, title) { print $1; exit }')
if [[ -z "$existing_id" ]]; then
"$binary_path" >"$XDG_RUNTIME_DIR/lumbridge-gpui.log" 2>&1 &
for _attempt in $(seq 1 80); do
existing_id=$(wmctrl -l | awk -v title="$window_title" 'index($0, title) { print $1; exit }')
[[ -n "$existing_id" ]] && break
sleep 0.1
done
fi
if [[ -z "$existing_id" ]]; then
echo "Lumbridge window did not become visible; see $XDG_RUNTIME_DIR/lumbridge-gpui.log" >&2
exit 1
fi
# Gigabyte G34WQC is 3440x1440 at X=0. Lumbridge owns its left half; Bacon
# remains visible beside it on the right half of the same monitor.
bacon_id=$(wmctrl -l | awk -v title="$bacon_title" 'index($0, title) { print $1; exit }')
if [[ -n "$bacon_id" ]]; then
wmctrl -i -r "$bacon_id" -b remove,maximized_vert,maximized_horz
# GNOME's X11 move coordinate is scaled on this display even though window
# sizes are not; 860 places the frame at physical X=1720.
wmctrl -i -r "$bacon_id" -e 0,860,0,1720,1400
fi
wmctrl -i -r "$existing_id" -b remove,maximized_vert,maximized_horz
wmctrl -i -r "$existing_id" -e 0,0,0,1720,1400
wmctrl -i -a "$existing_id"
# GPUI's undecorated X11 client ignores direct position requests under GNOME.
# Use the window manager's move interaction to settle it into the left half.
xdotool key alt+F7
sleep 0.15
xdotool mousemove 860 660 click 1
echo "Lumbridge is visible in window $existing_id on the left half of the Gigabyte display."