sol-r1-linux-game-mappings/template
Amir Alexander Abdelbaki 79c9ed94c4 Add per-game Sol-R1 Linux input mapping system with reusable template
Restructures around one folder per game, each with its own joyful
config, launch wrapper, and (if needed) a stateful daemon for physical
switches that need game-state feedback. template/ generalizes that
pattern (bare passthrough config, template wrapper, template daemon)
for mapping new games. space-engineers/ is the first instance, built
from the original mapping brief; find_codes.py is shared across games.
All device codes/keybinds/HUD calibration are still TODO pending
hardware access.
2026-07-13 10:19:27 +02:00
..
README.md Add per-game Sol-R1 Linux input mapping system with reusable template 2026-07-13 10:19:27 +02:00
input_converter_daemon.py Add per-game Sol-R1 Linux input mapping system with reusable template 2026-07-13 10:19:27 +02:00
joyful-config.yml Add per-game Sol-R1 Linux input mapping system with reusable template 2026-07-13 10:19:27 +02:00
launch-wrapper.sh Add per-game Sol-R1 Linux input mapping system with reusable template 2026-07-13 10:19:27 +02:00

README.md

Template - adding a new game

Copy this whole folder to ../<game-name>/ and work through it top to bottom.

  1. joyful-config.yml - bare 1:1 passthrough (every physical control mapped straight through, no remapping, no key emulation). Run find_codes.py (repo root) against the hardware and fill in every TODO_*. Get the game running with this first, so you have a known-good baseline before customizing anything.
  2. Customize the mapping for what the game actually needs: axis remaps, key emulation for toggles, buttons bound in the game's own control menu, etc. See ../space-engineers/ for a worked example (including the "throttle read as a trigger" class of bug this exists to fix).
  3. Do you need input_converter_daemon.py at all? Only if some physical control is a real on/off switch (not a momentary button) and the game only exposes the equivalent action as a stateless toggle key. If every control you're mapping is a stateless passthrough, delete input_converter_daemon.py, TODO-daemon-config.yaml (once created), and the daemon block in launch-wrapper.sh - joyful alone is enough, and you're done after step 2.
  4. If you do need it: rename the example config (input_converter_daemon.py --dump-example-config > <game>-daemon-config.yaml), fill in real evdev codes (find_codes.py), confirm the game's actual toggle keybinds in its own settings menu (never assume defaults), and calibrate HUD regions/colors with input_converter_daemon.py --sample X,Y. Point launch-wrapper.sh's DAEMON_CONFIG at it.
  5. launch-wrapper.sh - set as the Steam launch options: /path/to/<game>/launch-wrapper.sh %command%. Per-machine, not synced by Steam - repeat on every machine.