finish refactor, add docs and CI
CI / Build NRO (push) Failing after 1s
CI / Format check (push) Successful in 16s
CI / Layering check (push) Successful in 1s

This commit is contained in:
2026-04-27 01:49:41 +03:00
parent dc65a4c8a9
commit 17d1ba02df
48 changed files with 1977 additions and 1471 deletions
+88
View File
@@ -0,0 +1,88 @@
# NXST
Transfer save data between two Nintendo Switch consoles over local Wi-Fi.
Pick a game, pick a user. One Switch sends; the other receives. The sender backs up its own save first, so you can never lose data in transit.
---
## Install
1. Download `NXST.nro` from [Releases](../../releases).
2. Copy it to `/switch/NXST/NXST.nro` on your SD card.
3. Launch via hbmenu (hold R while starting any game, or Album).
Both Switches must be on the same Wi-Fi network. No router configuration needed — discovery uses UDP multicast.
---
## Usage
**Sender** (the Switch whose save you want to copy):
1. Open NXST → select a title → press **A****Transfer**.
2. Wait for "Waiting for receiver…" to change to "Transferring…".
**Receiver** (the Switch that will receive the save):
1. Open NXST → select the same title → press **A****Receive**.
2. Wait. The save is restored automatically when the transfer finishes.
Press **B** on either side to cancel mid-transfer.
Logs are written to `/switch/NXST/log.log`.
---
## Build
**Prerequisites:** [devkitPro](https://devkitpro.org/wiki/Getting_Started) with `switch-dev` and `switch-portlibs` packages, plus `cmake ≥ 3.20`.
```bash
# Clone with submodules (Plutonium UI)
git clone --recurse-submodules https://github.com/your-username/NXST.git
cd NXST
# Configure (once)
cmake --preset switch
# Build
cmake --build build
# Send to Switch via nxlink (Switch must be on same network, nxlink running)
cmake --build build --target send
```
Output: `build/NXST.nro`
---
## Architecture
See [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md) for the layer diagram, threading model, and key types.
See [`docs/PROTOCOL.md`](docs/PROTOCOL.md) for the wire protocol (UDP multicast discovery + TCP file stream).
```
ui/ — TitlesLayout, UsersLayout, TransferOverlay, HeaderBar
service/ — TransferService (all network threads and state)
infra/net/ — Socket RAII, sendAll/recvAll
infra/fs/ — io::backup, io::restore, directory iterator, RAII handles
infra/sys/ — nxst::log (printf-checked, timestamped)
domain/ — Title, Account, Result<T>, TransferState, protocol constants
```
---
## Credits
- **[Plutonium](https://github.com/XorTroll/Plutonium)** — Switch UI framework by XorTroll
- **[Checkpoint](https://github.com/BernardoGiordano/Checkpoint)** — save management library by Bernardo Giordano / FlagBrew; several files in `src/infra/fs/` and `src/domain/` are derived from Checkpoint
---
## License
GPLv3 — see [`LICENSE`](LICENSE).
NXST includes code derived from Checkpoint (GPLv3). All original NXST code is released under the same license to satisfy the GPL inheritance requirement.