github santojon/Deck-Shelves v1.5.2
Deck Shelves v1.5.2

6 hours ago

Added

  • Sort for collection, tab and external shelves: the sort dropdown (alphabetical, last session, total playtime, release date, size on disk, Metacritic, Steam review score, recently added, random) is now available for all shelf source types, not only filter shelves. Sort is shown in the source tab of the shelf editor and saved per shelf. Default remains alphabetical (no extra field stored).
  • Random sort: new random sort option available for all shelf types — games are shuffled via Fisher-Yates on every resolve.
  • Surprise Me slider count: the slider label in the QAM now shows the current count in parentheses when it is greater than zero (e.g. "Surprise Me (3)"), making the configured value readable without opening the slider.
  • Select shelf for native recents replacement: when "Use shelf as Recents" is enabled, a new dropdown lets you pick any specific shelf instead of always using the first visible one. Defaults to "First visible shelf" when no shelf is selected.
  • SteamOS 3.9 compatibility check (checks/steamos/steamos-3.9.sh): new validation script covering ES2020+ target, @decky/api v3, no legacy ServerAPI, duck-typing patterns, FocusNavController/GamepadUI usage, vgp_* events, afterPatch/findInReactTree, DECKY_PLUGIN_SETTINGS_DIR, Python 3.10+ patterns, and no hardcoded SteamOS version strings. steamos-gamepadui.sh updated to cover 3.5–3.9.
  • GitHub issue templates: added [BUG], [FEATURE], and [ENHANCEMENT] issue templates under .github/ISSUE_TEMPLATE/, each with a "Related PRs" field for linking 0–n pull requests.
  • Native recents showFeaturedItem respects shelf toggles: when a shelf is used as native recents replacement, showFeaturedItem is now set based on shelf.highlightFirst / globalHighlightFirst instead of always defaulting to the native true. Disabling both toggles hides the hero-sized first card; enabling either shows it.

Fixed

  • Collections not loading in shelf editor: listCollections now reads from collectionStore.m_mapCollectionsFromStorage (a MobX ObservableMap with .keys() / .get()) as a fallback when userCollections is unavailable or throws. Collection objects from this map lack a top-level id field — the map key (m_strId) is injected explicitly before passing to normalize.
  • Non-Steam apps in native recents replacement: shelves containing non-Steam shortcuts (app type 1073741824) are now passed through to the native recents component instead of being pre-emptively blocked. If the native component crashes, the existing error trap still triggers markReplaceFailed and the error banner is shown. Fully native (no non-Steam apps) shelves continue to work as before.
  • Hero art bottom fade regression: restored maskImage / WebkitMaskImage on the outer ds-hero-background container, which was removed in v1.4.0. The native-style subtle 10% bottom fade (to page background over the last 5px) is back; the previous overlay-only approach covered 30% of the image.
  • Hero art envelope below shelf: increased hero height to extend 60px below the first shelf (in addition to 60px above), matching the original native behavior where the art visually envelopes the shelf row from both sides.
  • Playtime not shown for non-Steam shortcuts: removed the isSteam !== false guard in GameCard that gated the entire status/playtime block — non-Steam apps have playtime data available and it is now displayed normally.
  • Sort not applied on non-filter shelves: ShelfView was calling resolveShelfAppIds without passing the sort field, and sourceKey did not include sort — so changing sort on collection, tab, or external shelves had no effect and did not trigger a re-resolve. Both are now corrected.
  • Non-Steam duplicate apps: deduplicateNonSteam is now platform-aware — same-named shortcuts from different Unifideck platforms (e.g. "Adios" from GOG and "Adios" from Epic) are kept as separate entries; only same-named shortcuts on the same platform (true duplicates) are merged to a single entry.
  • Shelf cache missing sort key: the per-shelf localStorage cache is now keyed by shelf.id + sort, so changing sort on a non-filter shelf immediately shows the correctly-ordered result instead of briefly flashing the previously-cached order.
  • shelfKey ignoring sort in recents replacement: the cache key used to decide whether to re-resolve the active shelf for native recents substitution now includes the sort field, so changing sort on the selected shelf correctly invalidates the cache and triggers a fresh resolve.

Don't miss a new Deck-Shelves release

NewReleases is sending notifications on new releases.