Files
OmniNX-Installer-Payload/PRESERVE_INI.md
niklascfw 59f103874c
All checks were successful
Build / Build (push) Successful in 17s
Preserve.ini for update cleanup, Hekate UI strings, docs
- Load sd:/config/omninx/preserve.ini during update mode cleanup to skip
  delete paths that overlap user-preserved prefixes (heap-backed path list).
- Document preserve.ini in PRESERVE_INI.md, README, and INSTALLATION_PROCESS.
- Prefer Hekate wording in main.c user messages for bootloader launch/errors.
- Extend update deletion list for exefs_patches (audio_mastervolume, SaltyNX_Fixes, logo).
2026-05-17 11:21:14 +02:00

2.3 KiB

User preserve list (preserve.ini)

Update mode only. During OmniNX update cleanup (selective deletion), any path listed here with a truthy value is not deleted. Paths that would remove a preserved path (parent directory) are skipped as well.

  • File: sd:/config/omninx/preserve.ini
  • If missing or invalid, behavior is unchanged (full update deletion list applies).

Format

Section [Preserve] (case-sensitive). Each line is path as key, enable flag as value:

[Preserve]
'sd:/ROMs'=1
sd:/switch/MyHomebrewFolder=0
sd:/backup/tools=1

Path (key)

  • Must start with sd:/ (after optional quoting).
  • Optional matching single or double quotes around the key are stripped (helps Ultrahand set-ini-val and readability).
  • Trailing slashes are normalized away (except the volume root).
  • sd:/ alone is rejected (too broad).
  • Minimum useful length after sd:/ is enforced (at least one more character).

Value (enable)

On if the value starts with 1, t, T, y, or Y (e.g. 1, true, yes). Anything else is off (path ignored).

Limits

  • Up to 96 preserved paths; longer keys truncated internally (~224 bytes per path).
  • Duplicate paths after normalization are skipped.
  • The list is allocated on the heap only while update cleanup runs (not a large static buffer in IPL IRAM), to avoid crowding hardware-adjacent memory used by Joy-Con UART and similar peripherals.

Overlap rules

For each delete candidate from deletion_lists_update.h, deletion is skipped if it overlaps any enabled preserve path:

  • Same path, or
  • Delete target is inside a preserved tree (preserved path is a prefix), or
  • Delete target is an ancestor of a preserved path (deleting it would remove the preserved data).

So preserving sd:/ROMs also blocks deleting sd:/ROMs/title if that were on the delete list, and blocks deleting sd:/ if sd:/ROMs is preserved.

Ultrahand

You can toggle entries with:

set-ini-val sd:/config/omninx/preserve.ini Preserve 'sd:/ROMs' 1

and 0 to disable. Use the same quoted path in the key argument as in your INI.

Clean install

Not used in clean install mode. preserve.ini is only read for update cleanup (update_mode_cleanup).