config.json
PlayShelf keeps its settings in sd:/config/playshelf/config.json (./playshelf_data/config.json for the desktop simulator). Every key is optional: a missing one, or one of the wrong type, keeps its default, and a value out of range goes back to its default, one key at a time. A file that cannot be read at all is kept aside as config.json.bad (the previous one as config.json.bad.1) and the defaults are used. The file is written whole each time, through config.json.tmp.
| Key | Values | Default | What it sets |
|---|---|---|---|
schema |
1 |
1 |
The layout of this file |
language |
system or a language code (en-US, fr, fr-CA, de, es, es-419, it, nl, pt, pt-BR, ru, ja, ko, zh-Hans, zh-Hant) |
system |
Preferences › Language: the console's own, or one forced |
theme |
system, light, dark |
dark |
Preferences › Theme |
theme_file |
"", builtin:<preset> (high-contrast-dark, high-contrast-light, ocean, amethyst, sand, a season such as halloween, or seasonal, which follows the calendar) or the path of a theme file |
"" |
Preferences › Palette: PlayShelf's own colours (""), one of the presets, or a file of the themes folder (Themes). A file that styles only the light or the dark theme also sets that theme; one that cannot be read leaves PlayShelf's own colours |
text_size |
auto, normal, large |
auto |
Preferences › Text size: auto is larger while docked |
effects |
auto, full, reduced |
auto |
Preferences › Visual effects: auto keeps the lighter effects off the dock |
intro |
true, false |
true |
The loading screen stays 2 s at start-up |
start_tab |
home, library, catalogue, preferences, about |
home |
Preferences › Start on |
support_reminder |
true, false |
true |
"Support PlayShelf" once a month at start-up |
keep_awake |
true, false |
true |
Downloads › Stay awake while downloading: the console does not go to sleep by itself while downloads run |
connections |
1 to 8 |
4 |
Downloads › Connections per download: how many requests a download makes at once, each for a 4 MB piece of the package taken in turn; more help with a server that serves each connection slowly. The packages are still installed one after the other. The title database's packs are fetched the same way |
prefetch |
0 to 2 |
0 |
Downloads › Fetch ahead: while a package installs, the next ones (as many) are fetched into cache/prefetch/ when the SD card has room for them and their install (1 GiB to spare); their install starts from the file, the rest from the server. A file goes once its package is installed or removed |
title_sources |
a list of https:// addresses, 8 at most |
CyberFoil-DB's manifest (https://github.com/luketanti/CyberFoil-DB/releases/latest/download/offline_db_manifest.json), then NXMeta's Tinfoil index (https://nx-meta.nlib.cc/index.json) and Ghostland's title list (https://data.ghostland.at/nx/owned.json) |
Preferences › Title database › Sources: the title databases, in their order; the first that knows a game names it (its icon: the first that has one). A source is a CyberFoil-DB manifest (its packs checked by the SHA-256 it gives before they are used) or a title list (a JSON object of title ids, each with its Game Name, Version and Size, or a Tinfoil index's titledb with name, publisher, releaseDate, version and size: no icons, HTTPS alone vouching for it, read as it streams and made a titles pack). []: no database. Each source is kept in titledb/<hash of its address>/ of the data folder |
nlib_api |
true, false |
true |
Preferences › Title database › Icons and game pages from Nlib API: Nlib API is asked, for base games only and one game at a time, for a game's icon that neither its server nor the title databases have (…/nx/<title id>/icon/256, for the games on screen) and, on a game's page, for its details in PlayShelf's language (publisher, year, categories, summary, description: kept a week in cache/nlib/), its banner and its screenshots (kept with the icons in cache/library_icons/). What it says of a game beyond the text (publisher, developer, date, genres, players, languages, age rating, demo) is kept for good in nlib/facts.json of the data folder, gathered as the games show: a page opened, and the covers on screen, one game at a time. A game it does not know is not asked again until PlayShelf restarts |
popular_online |
true, false |
true |
Preferences › Title database › Popular games from Wikipedia: Home's Popular on your servers and Trending rows read popular.json (how well known each game is and whether it is read more lately, from Wikidata and Wikipedia's pageviews: Popular games). PlayShelf comes with one; on, the newest one is fetched once a day from the project's repository (https://cdn.jsdelivr.net/gh/JigSawFr/PlayShelf@main/resources/data/popular.json), kept in cache/popular.json, and used when it was made later. Off, only the one PlayShelf came with |
support_reminded |
YYYY-MM-DD |
none | The day of the last reminder |
seen_version |
a version | none | The version whose "What's new" was shown |
crash_seen |
a crash file's name | none | The newest crash file already said |
update_daily |
true, false |
false |
Preferences › Check for updates every day |
update_via |
inplace, auto, sphaira, appstore, manual |
none | Preferences › Update with (none: asked at the first update) |
update_checked |
YYYY-MM-DD |
none | The day of the last check |
update_latest |
a version | none | The latest release the last check found |
update_snooze_version |
a version | none | The release Later was chosen for on the update screen… |
update_snooze_until |
YYYY-MM-DD |
none | …and until when (30 days at most) |
dev_mode |
true, false |
false |
The developer tools (seven presses of Ⓨ on About › Version) |
frame_stats |
true, false |
false |
Developer › Frame statistics |
cadran_glow |
true, false |
true |
Developer › Background glow |
library_view |
grid, list |
grid |
Library, Ⓨ: the games as covers or as a list |
dev_builds_order |
newest, number |
newest |
The order of the pull requests in Install another build |
logs_keep |
0, 5, 10, 20, 50 |
20 |
The reports and crash files kept, by number (0: no limit) |
logs_keep_days |
0, 7, 30, 90, 365 |
0 |
…by age in days |
logs_keep_mb |
0, 1, 5, 20 |
0 |
…by size in MB |
The GitHub sign-in of the developer tools is kept apart, in sd:/config/playshelf/github_token, sealed for this console: encrypted (AES-128-CTR) and authenticated (HMAC-SHA256) with keys derived from the console's own key (source/kit/util/secret_box.hpp), so a copy of the SD card opens nothing on another console. A token an older version kept as it is is sealed the first time it is read.