VR keyboard: swipe typing, suggestions, Backspace drag (keyboard.vr.*)

Opt-in with steamFrame.keyboard.vr.enable; swipe, autocorrect and
completion suggestions, Backspace drag and haptics are on under it.
- vr-keyboard/patch.js (Steam UI): swipe decoder, a model of what the
  keyboard typed, suggestions that only replace what they typed, Backspace
  drag with word detents and retyping; checks its Steam internals by
  signature (signatures.json: vr-keyboard) and stays stock otherwise.
- vr-keyboard/panel.js (SteamVR systemui) + relay.mjs (user service
  vr-keyboard-relay): the suggestion strip as a dashboard panel below or
  above the keyboard (signatures: vr-keyboard-panel).
- Dictionary built from nixpkgs' wordfreq and hunspellDicts; default: the
  keyboard.layout language (de, fr, es, it, nl, pt, sv) plus English.
- Tests: keyboard.vr.checks and the flake check vr-keyboard.
This commit is contained in:
Pierre Kisters committed 2026-09-28 04:42:13 +02:00
1 parent c672cffc9e
commit ee020d39d5
17 files changed
+2371

No files matched your search

+16
View File
@@ -16,6 +16,7 @@
portal = ./modules/portal.nix;
keyboard-layout = ./modules/keyboard-layout.nix;
steam-keyboard-patch = ./modules/steam-keyboard-patch.nix;
vr-keyboard = ./modules/vr-keyboard.nix;
hidden-apps = ./modules/hidden-apps.nix;
steam-ui-patches = ./modules/steam-ui-patches.nix;
launcher-menu = ./modules/launcher-menu.nix;
@@ -37,6 +38,21 @@
default = { imports = builtins.attrValues modules; };
};
# Tests of the VR keyboard (text model, corrector, swipe decoder on the
# default German + English dictionary): nix flake check
checks = nixpkgs.lib.genAttrs [ "aarch64-linux" "x86_64-linux" ] (system: {
vr-keyboard = (import ./modules/vr-keyboard/build.nix {
pkgs = nixpkgs.legacyPackages.${system};
dictionary = {
languages = map (l: l // { keepFrequentAbove = 4.0; }) [
{ language = "de"; hunspell = "de_DE"; words = 60000; frequencyOffset = 0.0; }
{ language = "en"; hunspell = "en_US"; words = 40000; frequencyOffset = -0.3; }
];
contractions = true; extraWords = [ ]; extraWordsFrequency = 5.0; extraWordFiles = [ ]; excludeWords = [ ];
};
}).checks;
});
# nix flake init -t github:lhns/steam-frame-nix
templates.default = {
path = ./template;