niklascfw 664216fa11 Move pack files instead of copying; one file-op core for all modes
Install: staging and sd:/ are on the same card, so pack folders are now
moved with f_rename (a missing target folder moves in one step, existing
ones are merged file by file). Copying is only a per-entry fallback.
The staging cleanup afterwards only removes empty folders.

Deletion: one f_stat per list entry, no full recursive count before
deleting; large folders are detected with a probe that stops after 51
entries. Progress lines count processed entries instead of needing an
extra pass for a total.

Six copy/delete walkers (fs.c + install.c) are replaced by fs_delete_tree,
fs_move_tree and fs_move_file sharing one path buffer and one copy buffer
per run; the 'alternative copy method' retry is gone. extras/hekate-ams-pro
is moved too. Backups keep copy semantics.
2026-11-12 22:57:26 +01:00
2026-09-13 23:02:27 +02:00
2026-11-12 19:16:11 +01:00

OmniNX Installer Payload

To properly use this payload, download the latest OmniNX Release: https://git.niklascfw.de/OmniNX/OmniNX/releases

A minimal payload for installing OmniNX CFW Pack files on Nintendo Switch outside of Horizon OS.

Based on TegraExplorer and hekate by CTCaer, naehrwert, and shchmue.
Based on HATS-Installer-Payload by sthetix.

Features

  • Automatic Variant Detection: Detects which OmniNX pack variant is present (Standard/Light/OC)
  • Smart Installation Modes:
    • Update Mode: Selective deletion when OmniNX is already installed
    • Clean Install: Full wipe with backup/restore of user data (DBI dbi.config, prod.keys)
  • Version Detection: Detects installed OmniNX version via marker files (1.0.0s, 1.0.0l, 1.0.0oc)
  • Progress Display: Visual status messages during installation
  • Error Handling: Detailed error reporting on screen
  • Payload Chaining: Automatically launch hekate after installation

Documentation

For detailed information about the installation process, see:

  • INSTALLATION_PROCESS.md - Complete step-by-step breakdown of everything checked and done during installation/update
  • DEBUG_INI.md - Optional sd:/config/omninx/debug.ini parameters to skip install steps (for testing)
  • PRESERVE_INI.md - Optional sd:/config/omninx/preserve.ini to skip deleting chosen paths in update mode

Installation Modes

Update Mode (OmniNX Detected)

  • Detected when version marker files (1.0.0s, 1.0.0l, or 1.0.0oc) are found
  • Performs selective deletion of specific directories/files
  • Optional sd:/config/omninx/preserve.ini: user-listed sd:/… paths (with =1) are excluded from that cleanup (see PRESERVE_INI.md)
  • Preserves user data, savegames, and installed games
  • Updates only necessary CFW components

Clean Install (No OmniNX Detected)

  • Detected when no version marker files are found
  • Performs full wipe of /atmosphere, /bootloader, /config, and /switch
  • Backs up and restores:
    • sd:/switch/DBI/dbi.config → preserved (not the whole DBI folder)
    • sd:/switch/prod.keys → preserved
  • Fresh installation of all CFW components

Building

Prerequisites

  • devkitARM - ARM toolchain for Nintendo Switch development
  • BDK - Blue Development Kit (included in this repo)

Build Commands

make clean
make

The built payload will be output to output/OmniNX-Installer.bin.

CI / GitHub Actions

Every push triggers a build. The .bin file is produced and attached as a workflow artifact (Actions tab → select run → Artifacts).

Usage

1. Extract OmniNX Pack to SD Card

Extract the OmniNX pack zip file directly to your SD card. The pack should contain one of:

sd:/OmniNX Standard/
├── atmosphere/
├── bootloader/
├── config/
├── switch/
├── TegraExplorer/
├── warmboot_mariko/
├── boot.dat
├── boot.ini
├── exosphere.ini
├── hbmenu.nro
├── loader.bin
├── payload.bin
└── 1.0.0s

Or sd:/OmniNX Light/ or sd:/OmniNX OC/ for other variants.

Important: Extract both the OmniNX pack zip AND this payload to your SD card.

2. Launch Payload

Use hekate or another bootloader to launch the payload:

  1. Place omninx-installer.bin in sd:/bootloader/payloads/
  2. Launch the payload from hekate's payload menu
  3. The payload will automatically:
    • Detect which pack variant is present
    • Detect if OmniNX is already installed
    • Perform appropriate installation (update or clean)
    • Launch hekate after completion

3. What Happens

  1. Payload mounts the SD card
  2. Detects current OmniNX installation (if any)
  3. Detects which pack variant is on SD card
  4. Determines installation mode (update vs clean)
  5. Performs cleanup based on mode:
    • Update: Selective deletion of specific paths
    • Clean: Full wipe with backup/restore
  6. Copies files from pack directory to SD root
  7. Creates version marker file
  8. Cleans up old version markers
  9. Launches hekate (sd:/bootloader/update.bin)

Variant Support

The payload supports three OmniNX variants:

  • Standard – sd:/OmniNX Standard/
  • Light – sd:/OmniNX Light/
  • OC – sd:/OmniNX OC/

The payload detects the pack variant from the staging directory presence and detects the current installation (variant + version) from sd:/config/omninx/manifest.ini (current_pack and version keys).

Project Structure

OmniNX-Installer-Payload/
├── source/              # Main source code
│   ├── main.c          # Entry point and main flow
│   ├── version.c       # Version/variant detection
│   ├── version.h
│   ├── install.c       # Installation logic
│   ├── install.h
│   ├── backup.c        # Backup/restore operations
│   ├── backup.h
│   ├── deletion_lists.h # Arrays of paths to delete
│   ├── fs.c            # File system operations
│   ├── fs.h
│   ├── gfx.c           # Graphics utilities
│   ├── gfx.h
│   ├── nx_sd.c         # SD card operations
│   ├── nx_sd.h
│   ├── link.ld         # Linker script
│   └── start.S         # Startup assembly
├── bdk/                # Blue Development Kit
├── Makefile            # Build configuration
├── VERSION             # Version file
└── README.md           # This file

License

This project is based on TegraExplorer and hekate. Please refer to those projects for their respective licenses.

Credits

S
Description
No description provided
Readme
3 MiB
0 Stars 2 Watchers 0 Forks
Languages
C 94.6%
C++ 2.8%
C# 2%
Assembly 0.2%
Makefile 0.2%
Other 0.2%