Initial FrameAssistant baseline from the vrdashboard template

Template stripped to the overlay platform (examples, demo UI and Frame
test package removed), renamed to FrameAssistant, and working rules for
the project recorded in CLAUDE.md.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-05 00:06:58 +02:00
co-authored by Claude Opus 5.5
commit 4a5b09053e
63 changed files with 5193 additions and 0 deletions
+22
View File
@@ -0,0 +1,22 @@
# Runtime data for SteamVR. Staged into <build>/share/<project>/ (mirroring the install
# layout) so the binary can be run and registered straight from the build tree.
set(_share ${CMAKE_BINARY_DIR}/${VRDASH_SHARE_SUBDIR})
# Paths inside the manifest are relative to the manifest file itself. SteamVR reads the
# program path from a per-platform key and silently skips entries without one for its
# platform: binary_path_linux on x86-64, binary_path_linux_arm on aarch64 (Steam Frame).
if(CMAKE_SYSTEM_PROCESSOR MATCHES "^(aarch64|arm64|ARM64)$")
set(VRDASH_MANIFEST_BINARY_KEY binary_path_linux_arm)
else()
set(VRDASH_MANIFEST_BINARY_KEY binary_path_linux)
endif()
configure_file(manifest.vrmanifest.in ${_share}/manifest.vrmanifest @ONLY)
set(_input_files input/actions.json input/bindings_frame_controller.json)
foreach(_file ${_input_files})
configure_file(${_file} ${_share}/${_file} COPYONLY)
endforeach()
install(FILES ${_share}/manifest.vrmanifest DESTINATION ${VRDASH_SHARE_SUBDIR})
install(FILES ${_input_files} DESTINATION ${VRDASH_SHARE_SUBDIR}/input)
+31
View File
@@ -0,0 +1,31 @@
{
"default_bindings": [
{
"controller_type": "frame_controller",
"binding_url": "bindings_frame_controller.json"
}
],
"action_sets": [
{ "name": "/actions/dashboard", "usage": "single" }
],
"actions": [
{ "name": "/actions/dashboard/in/focus_next", "type": "boolean" },
{ "name": "/actions/dashboard/in/focus_previous", "type": "boolean" },
{ "name": "/actions/dashboard/in/increase", "type": "boolean" },
{ "name": "/actions/dashboard/in/decrease", "type": "boolean" },
{ "name": "/actions/dashboard/in/activate", "type": "boolean" },
{ "name": "/actions/dashboard/in/back", "type": "boolean" }
],
"localization": [
{
"language_tag": "en_US",
"/actions/dashboard": "Dashboard navigation",
"/actions/dashboard/in/focus_next": "Focus next control",
"/actions/dashboard/in/focus_previous": "Focus previous control",
"/actions/dashboard/in/increase": "Increase / move right",
"/actions/dashboard/in/decrease": "Decrease / move left",
"/actions/dashboard/in/activate": "Activate focused control",
"/actions/dashboard/in/back": "Back / cancel"
}
]
}
@@ -0,0 +1,42 @@
{
"action_manifest_version": 0,
"controller_type": "frame_controller",
"name": "Default Steam Frame bindings",
"description": "Left D-pad navigates focus and adjusts values, right A activates, right B goes back.",
"bindings": {
"/actions/dashboard": {
"sources": [
{
"path": "/user/hand/left/input/dpad_down",
"mode": "button",
"inputs": { "click": { "output": "/actions/dashboard/in/focus_next" } }
},
{
"path": "/user/hand/left/input/dpad_up",
"mode": "button",
"inputs": { "click": { "output": "/actions/dashboard/in/focus_previous" } }
},
{
"path": "/user/hand/left/input/dpad_right",
"mode": "button",
"inputs": { "click": { "output": "/actions/dashboard/in/increase" } }
},
{
"path": "/user/hand/left/input/dpad_left",
"mode": "button",
"inputs": { "click": { "output": "/actions/dashboard/in/decrease" } }
},
{
"path": "/user/hand/right/input/a",
"mode": "button",
"inputs": { "click": { "output": "/actions/dashboard/in/activate" } }
},
{
"path": "/user/hand/right/input/b",
"mode": "button",
"inputs": { "click": { "output": "/actions/dashboard/in/back" } }
}
]
}
}
}
+16
View File
@@ -0,0 +1,16 @@
{
"applications": [
{
"app_key": "@VRDASH_APP_KEY@",
"launch_type": "binary",
"@VRDASH_MANIFEST_BINARY_KEY@": "../../@CMAKE_INSTALL_BINDIR@/@VRDASH_EXECUTABLE_NAME@",
"is_dashboard_overlay": true,
"strings": {
"en_us": {
"name": "@VRDASH_DISPLAY_NAME@",
"description": "@VRDASH_DISPLAY_NAME@ dashboard overlay"
}
}
}
]
}