mirror of
https://github.com/lhns/steam-frame-nix.git
synced 2026-10-06 01:00:13 +02:00
Every module imports cleanup.nix (also exported as homeManagerModules.cleanup), which - puts steam-frame-nix-cleanup (install.sh cleanup) on PATH; - runs `cleanup --orphans --quiet` after linkGeneration on every switch, keeping what the configuration still uses (steamFrame.cleanup.keep, set by the modules: debugger while steamvrDebugger is on, the Firefox desktop profile's user.js while its fix applies); in a dry run it runs with --dry-run; - runs `cleanup --all` instead when Home Manager's `uninstall = true;` is set (the manual uninstall route); - removes links of older versions at paths Home Manager is about to own before checkLinkTargets (steamFrame.cleanup.migrateLinks), which would count as collisions otherwise. install.sh cleanup gains --quiet (only actions, deferrals and warnings; the header only when something is printed). The Jellyfin module's own removal of the old shim copy goes: cleanup does it.
59 lines
2.3 KiB
Nix
59 lines
2.3 KiB
Nix
# Steam's VR keyboard can only send text (ControllerKeyboardSetKeyState throws
|
|
# "Unknown method" in VR), and its layouts are hardcoded.
|
|
# - patch.js (injected over CEF DevTools, 127.0.0.1:8080) adds a bottom row
|
|
# Esc Ctrl Alt [space] AltGr ← ↑ ↓ → (AltGr+arrows = Pos1/PgUp/PgDn/End) and
|
|
# hands chords, Shift+arrows and characters Steam would turn into "1"
|
|
# (non-ASCII, AltGr/dead keys) to the helper. AltGr + the key left of
|
|
# Backspace = Delete.
|
|
# - helper.mjs keeps it injected, sends those keys with xdotool on :0 (an
|
|
# allowlist: no ASCII text, no Enter) and unpatches on stop.
|
|
# Tested with Steam client 1790377368 (UI build 11041156).
|
|
{ config, pkgs, lib, ... }:
|
|
let
|
|
patch = (import ./lib { inherit pkgs; }).mkPatch {
|
|
name = "steam-keyboard-patch";
|
|
src = ./steam-keyboard-patch/patch.js;
|
|
};
|
|
cfg = config.steamFrame.keyboard.vr.extraKeys;
|
|
in {
|
|
imports = [
|
|
./session.nix ./cleanup.nix
|
|
(lib.mkRenamedOptionModule
|
|
[ "steamFrame" "steamKeyboardPatch" "enable" ]
|
|
[ "steamFrame" "keyboard" "vr" "extraKeys" "enable" ])
|
|
];
|
|
|
|
options.steamFrame.keyboard.vr.extraKeys.enable = lib.mkEnableOption ''
|
|
Esc/Ctrl/Alt, arrow keys, Ctrl/Alt chords (held while toggled) and
|
|
AltGr/non-ASCII characters on Steam's VR keyboard (Steam UI patch plus an
|
|
xdotool helper service); off reverts it on the next switch'';
|
|
|
|
config = lib.mkMerge [
|
|
(lib.mkIf cfg.enable {
|
|
systemd.user.services.steam-keyboard-patch = {
|
|
Unit.Description = "Modifier keys for Steam's VR keyboard (CEF patch + xdotool)";
|
|
Service = {
|
|
ExecStart = lib.escapeShellArgs [
|
|
"${pkgs.nodejs}/bin/node"
|
|
"${./steam-keyboard-patch/helper.mjs}"
|
|
"${patch}"
|
|
"${./steam-keyboard-patch/unpatch.js}"
|
|
"${pkgs.xdotool}/bin/xdotool"
|
|
];
|
|
Restart = "always";
|
|
RestartSec = 5;
|
|
TimeoutStopSec = 5; # the helper unpatches Steam's UI on SIGTERM
|
|
};
|
|
Install.WantedBy = [ "default.target" ];
|
|
};
|
|
|
|
# Restart on switch to re-inject a changed patch.
|
|
steamFrame.session.services.restart = [ "steam-keyboard-patch.service" ];
|
|
})
|
|
# Disabled: stopping the helper reverts the patch right away.
|
|
(lib.mkIf (!cfg.enable) {
|
|
steamFrame.session.services.stop = [ "steam-keyboard-patch.service" ];
|
|
})
|
|
];
|
|
}
|