aboutsummaryrefslogtreecommitdiffstats
path: root/games/README.md
diff options
context:
space:
mode:
authorDanilo M. <danix@danix.xyz>2026-10-27 12:58:43 +0100
committerDanilo M. <danix@danix.xyz>2026-10-27 12:58:43 +0100
commita35688e2e3a4e94d0f43f2548dfa6384a1bf1276 (patch)
tree4c39412347f1877fc44d10fc4279f01339e65004 /games/README.md
parente320c1e0e4452d9bf4903d64e0dd3e1b3ced95d2 (diff)
downloadquickshell-a35688e2e3a4e94d0f43f2548dfa6384a1bf1276.tar.gz
quickshell-a35688e2e3a4e94d0f43f2548dfa6384a1bf1276.zip
games: the Steam library as an endless strip with a large preview
An overlay on DP-1: a looping PathView of slanted tiles along the bottom, the centred one shown large above it in Steam's hero art with its title. Installed games and non-Steam shortcuts come first, by last played; owned games that are not installed follow, framed in peach, and Enter installs them. Launches go through steam -silent so the Steam window stays down. games.py reads appmanifests, the binary shortcuts.vdf and Steam's library cache on every opening; owned games come from the Web API through a cache refreshed in the background. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Diffstat (limited to 'games/README.md')
-rw-r--r--games/README.md39
1 files changed, 39 insertions, 0 deletions
diff --git a/games/README.md b/games/README.md
new file mode 100644
index 0000000..26e592e
--- /dev/null
+++ b/games/README.md
@@ -0,0 +1,39 @@
+# games
+
+A game launcher on DP-1: an endless horizontal strip of small slanted
+tiles along the bottom, and the selected game, the one at the centre,
+shown large above it in Steam's wide hero art with its title. Installed
+games come first, most recently played first; owned games that are not
+installed follow, greyed and framed in peach. Non-Steam shortcuts added to
+Steam count as installed. A short library repeats to fill the loop.
+
+Left and Right or the wheel move, Enter or a click on the centre tile
+launches, a click on another tile selects it. Typing filters by name.
+Escape or a click on the background closes. Everything goes through
+`steam -silent steam://...`, so the Steam window stays down: `rungameid`
+for an installed game or shortcut (keeping its Proton and launch options),
+`install` for one that is not.
+
+`games.py` reads, on every opening:
+
+- installed games from the `appmanifest_*.acf` files of every library in
+ `steamapps/libraryfolders.vdf`, leaving out Proton and the runtimes;
+- shortcuts from the binary `userdata/<account>/config/shortcuts.vdf`,
+ whose game id is `appid << 32 | 0x02000000`;
+- covers and hero art from Steam's own `appcache/librarycache`, so
+ nothing is fetched for them. A tile with no cover shows the initial.
+
+Owned games need the Steam Web API (`IPlayerService/GetOwnedGames`), so
+they come from `~/.cache/keystone/games/owned.json`, which
+`games.py --refresh` rewrites in the background on every opening. The API
+key is read with `pass show "$GAMES_PASS_ENTRY"`; the SteamID is derived
+from the userdata account directory.
+
+## Running
+
+ qs -p ./games
+ qs -p ./games ipc call games toggle # bound to XF86Search
+
+## Check
+
+ /usr/bin/python3 games/games.py --check