enBoxer/examples
en 9052f61228 Item 4 (Grok round 4): Session game-launcher dropdown.
Master: "idk why you have a Teams/Lutris section. When I am under
session I should be able to select a list of games so you know how to
launch the correct game, currently you lack that list and drop down
option."

Implementation:

- src/games.rs (new module):
  * Game struct: { name, exe, args, env, cwd, note }.
  * load_all(path) -> Vec<Game>; returns empty list when the file
    does not exist (operator has not configured any games yet).
  * find(games, name) -> Option<Game> (case-sensitive, O(n)).
  * save_all(path, games) for the GUI Add-Game form.
  * default_path() -> ~/.config/enboxer/games.yaml.
  * Three unit tests (load_missing empty, find_by_name, YAML roundtrip).

- src/lib.rs: pub mod games registered.

- src/session.rs:
  * New IPC verb "launch-game NAME": spawns the picked game entry,
    records the child PID into Session.spawned_pids so refresh_slots
    matches the resulting window via the process-tree walk (Item 3).
  * New IPC verb "list-games": returns the joined names so the GUI
    can populate the dropdown without a second command.
  * launch_game function: tokio::process::Command-equivalent
    std::process::Command spawn, child PID captured via child.id(),
    dropped (OS keeps the process running; spawned_pids is the
    only thing we need).

- examples/games.yaml: shipped with an empty `games: []` plus a
  commented-out WoW example so operators have a starting point.

cargo test 103/103 (3 new games tests + the 100 from earlier);
clippy clean.
2026-09-17 05:43:21 +02:00
..
games.yaml Item 4 (Grok round 4): Session game-launcher dropdown. 2026-09-17 05:43:21 +02:00
hyprland.lua Initial enBoxer: mapped-key routing and Video FX on Hyprland. 2026-09-15 07:19:15 +02:00
profile.yaml Item 5+6 (Grok round 4): default profile name -> team, drop passthrough feature 2026-09-17 05:38:59 +02:00