mirror of
https://github.com/InstanceBrick/nightcap.git
synced 2026-10-27 20:01:21 +01:00
169 lines
6.6 KiB
Markdown
169 lines
6.6 KiB
Markdown
# Install on Steam Frame
|
|
|
|
## Requirements
|
|
|
|
- Steam Frame running its ARM64 Linux desktop, with Steam and SteamVR installed.
|
|
- Native SteamVR at `/opt/steamvr`, including `steamxr_linuxarm64.json`.
|
|
- The Frame's Turnip/Freedreno Vulkan driver under `/usr/lib` and its Vulkan ICD
|
|
under `/usr/share/vulkan/icd.d`.
|
|
- Rootless Podman, Git, Python 3 and a C++17 compiler on the Frame.
|
|
- `zstd` for importing the compressed ARM64 release archive.
|
|
- A Linux filesystem for the checkout, internet access and space for the source,
|
|
Fedora build image and a separate Roblox client download.
|
|
|
|
The runtime uses Fedora 44 ARM64 in a rootless container. Keep the Frame's
|
|
own graphics drivers: the launcher mounts them into the container. Building
|
|
from source also needs a case-sensitive Linux checkout because some Android
|
|
headers differ only by letter case. The source and ARM64 build are public.
|
|
|
|
## 1. Get the source
|
|
|
|
```bash
|
|
git clone --branch steam-frame --recurse-submodules \
|
|
https://github.com/InstanceBrick/nightcap.git \
|
|
"$HOME/.local/share/nightcap-steam-frame-src"
|
|
cd "$HOME/.local/share/nightcap-steam-frame-src"
|
|
```
|
|
|
|
## 2. Install the ARM64 image
|
|
|
|
Download `nightcap-steam-frame-arm64.oci.tar.zst` and its `.sha256` file from
|
|
[Releases](https://github.com/InstanceBrick/nightcap/releases). From the
|
|
directory containing both files:
|
|
|
|
```bash
|
|
set -euo pipefail
|
|
sha256sum -c nightcap-steam-frame-arm64.oci.tar.zst.sha256
|
|
zstd -dc nightcap-steam-frame-arm64.oci.tar.zst | podman load
|
|
```
|
|
|
|
The archive imports as `localhost/nightcap-vr-arm64:frame-foveated`. It contains
|
|
the ARM64 Nightcap runtime and its Fedora dependencies, with no Roblox client,
|
|
personal data, SteamVR installation or proprietary graphics drivers.
|
|
|
|
To build the same image from source instead:
|
|
|
|
```bash
|
|
podman build --arch arm64 --jobs 1 \
|
|
-f packaging/steam-frame/Containerfile \
|
|
-t localhost/nightcap-vr-arm64:frame-foveated .
|
|
```
|
|
|
|
This builds Nightcap and its helpers from source. It does not download or bundle
|
|
Roblox. The image tag is also the one used by the Frame launcher.
|
|
|
|
## 3. Install the launcher and refresh-rate helper
|
|
|
|
```bash
|
|
python3 tools/steam_frame/install_launcher.py
|
|
mkdir -p "$HOME/.local/share/nightcap-vr-arm64/data/tools"
|
|
c++ -std=c++17 -O2 tools/frame_video_settings/refresh_rate.cc -ldl \
|
|
-o "$HOME/.local/share/nightcap-vr-arm64/data/tools/refresh_rate"
|
|
```
|
|
|
|
The application menu entry is **Nightcap Roblox VR**.
|
|
|
|
## 4. Download the compatible Roblox client
|
|
|
|
Close Nightcap first. Prepare its data directory and copy the initial settings
|
|
only if no configuration exists yet:
|
|
|
|
```bash
|
|
frame_data="$HOME/.local/share/nightcap-vr-arm64/data"
|
|
mkdir -p "$frame_data/.config/mocktail"
|
|
if [ ! -f "$frame_data/.config/mocktail/config.yaml" ]; then
|
|
cp config/steam-frame.example.yaml "$frame_data/.config/mocktail/config.yaml"
|
|
fi
|
|
podman run --rm --arch arm64 --userns=keep-id \
|
|
--security-opt label=disable \
|
|
-v "$frame_data:/data:rw" \
|
|
-e HOME=/data -e XDG_CONFIG_HOME=/data/.config \
|
|
-e XDG_DATA_HOME=/data/.local/share -e XDG_CACHE_HOME=/data/.cache \
|
|
--entrypoint /opt/nightcap-vr-arm64/lib64/mocktail/mocktail_updater \
|
|
localhost/nightcap-vr-arm64:frame-foveated \
|
|
update --no-latest-check --skip-canary
|
|
```
|
|
|
|
The updater downloads the newest ARM64 client supported by the included catalog.
|
|
The command retains APK signature, architecture, build identity and payload
|
|
integrity checks. `--skip-canary` skips the separate desktop graphics test; VR
|
|
starts through the Frame launcher in the next step. Client files stay in your
|
|
local data directory.
|
|
|
|
## 5. Launch in VR and add to Steam
|
|
|
|
Start SteamVR and connect the headset, then open **Nightcap Roblox VR** from the
|
|
application menu. Sign in through Roblox's normal interface.
|
|
|
|
To add the Steam shortcut automatically, enable Steam's local browser debugging
|
|
endpoint at `127.0.0.1:8080`, keep Steam running and use:
|
|
|
|
```bash
|
|
python3 tools/steam_frame/register_steam_shortcut.py
|
|
```
|
|
|
|
The script creates or reuses the launcher shortcut, sets its Nightcap icon and
|
|
marks it as a VR application. It saves the generated identity locally. If the
|
|
endpoint is unavailable, use Steam's **Add a Non-Steam Game** dialog and select
|
|
`~/.local/bin/nightcap-vr-arm64`, then mark the shortcut as a VR application.
|
|
|
|
## 6. Add the SteamVR Video controls
|
|
|
|
The settings integration supports a specific SteamVR dashboard revision. It
|
|
checks the installed dashboard before applying changes and leaves other
|
|
revisions untouched. Valve dashboard files are read from your local installation.
|
|
|
|
With SteamVR closed and the original dashboard files visible:
|
|
|
|
```bash
|
|
mkdir -p frame-ui-local/originals frame-ui-local/generated
|
|
cp /opt/steamvr/resources/webinterface/dashboard/chunk~8012d0c89.js \
|
|
frame-ui-local/originals/steamvr-dashboard.original.js
|
|
cp /opt/steamvr/resources/webinterface/dashboard/systemui.html \
|
|
frame-ui-local/originals/steamvr-systemui.original.html
|
|
cp /opt/steamvr/resources/webinterface/dashboard/settings_desktop.html \
|
|
frame-ui-local/originals/steamvr-settings_desktop.original.html
|
|
python3 tools/steam_frame/prepare_video_ui.py \
|
|
frame-ui-local/originals frame-ui-local/generated
|
|
sudo python3 tools/steam_frame/install_video_ui.py frame-ui-local/generated
|
|
```
|
|
|
|
Start SteamVR again. The settings are described in [Video settings](SETTINGS.md).
|
|
The service mounts three generated files read-only; the original SteamVR files
|
|
are preserved. If upgrading an existing installation, reuse your saved original
|
|
files instead of copying the already patched dashboard.
|
|
|
|
## Update Nightcap
|
|
|
|
Close Nightcap before replacing its image or launcher. Pull the `steam-frame`
|
|
branch, then load the new ARM64 release archive as in step 2 and rerun the
|
|
launcher installer. Existing Roblox downloads, sign-in state and settings stay
|
|
in the separate data directory.
|
|
|
|
For source builds, pull this branch and rebuild under a temporary image tag:
|
|
|
|
```bash
|
|
git pull --ff-only
|
|
git submodule update --init --recursive
|
|
podman build --arch arm64 --jobs 1 \
|
|
-f packaging/steam-frame/Containerfile \
|
|
-t localhost/nightcap-vr-arm64:next .
|
|
podman tag localhost/nightcap-vr-arm64:frame-foveated \
|
|
localhost/nightcap-vr-arm64:previous
|
|
podman tag localhost/nightcap-vr-arm64:next \
|
|
localhost/nightcap-vr-arm64:frame-foveated
|
|
python3 tools/steam_frame/install_launcher.py
|
|
```
|
|
|
|
Existing Roblox downloads, sign-in state and settings remain in the data
|
|
directory. To install a newly supported Roblox client, repeat step 4 after
|
|
updating Nightcap. Automatic client updates are off in the supplied Frame
|
|
configuration, since the ARM64 VR bridge needs matching client interfaces.
|
|
|
|
To restore the previous Nightcap image with the app closed:
|
|
|
|
```bash
|
|
podman tag localhost/nightcap-vr-arm64:previous \
|
|
localhost/nightcap-vr-arm64:frame-foveated
|
|
```
|