Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
54 commits
Select commit Hold shift + click to select a range
49c2f3e
Offline RetroAchievements Support (#707)
clintonium-119 May 12, 2026
e0b0013
squash pick DrFlarp/shaders_origtexture (generic_video.c only) (#720)
frysee May 12, 2026
1860006
Pre- and Post App/ROM launch hooks (#690)
Helaas May 12, 2026
02d3dc0
fix: crash on out-of-bound access when loading cheats (#718)
nborodikhin May 12, 2026
7dd51d9
Feature/podman (#711)
carroarmato0 May 12, 2026
8cc8110
Clarified hooks
frysee May 14, 2026
6990d47
feat: Replace userspace CPU governor with kernel scaling governors (#…
pvaibhav May 14, 2026
afb3783
fix: slowdowns on Auto cpu speed (#727)
pvaibhav May 17, 2026
2a9c0d4
refactor: break minarch.c monolith into focused modules (#721)
carroarmato0 May 18, 2026
a3bcf9d
fix: defer Rewind_init until after core initialization to prevent cra…
Helaas May 19, 2026
e9e9113
fix: cpu stuck in performance mode on fresh install (#733)
pvaibhav May 20, 2026
2a5a53c
fix: call readyResume when navigating to a directory via Quick Menu (…
carroarmato0 May 26, 2026
44461cb
feat: support custom fonts in system settings (#729)
ericreinsmidt May 26, 2026
14cae47
feat: font style is now configurable (fixes #748) (#749)
frysee May 27, 2026
d4c01a3
fix: properly detect usb-c cards plugged in before booting (#750)
frysee May 27, 2026
28b7a30
fix: wrong label on game switcher entries w/o save state (#751)
frysee May 27, 2026
11c38be
Merge branch 'main' into my355-latest
apommel May 31, 2026
66e16a2
my355: Adjustments for kernel CPU governors and hooks
apommel Jun 3, 2026
393e222
feat: Port usb-c cards improvements to my355 and use tinyalsa for spe…
apommel Jun 4, 2026
1fbe2b8
fix: Correctly detect Jack and HDMI on my355 at boot
apommel Jun 4, 2026
c24b36d
feat: White point colour correction for tg5040 (#760)
pvaibhav Jun 28, 2026
dfb02b0
Feat: Alpha channel for theme colors and better pill sprite handling …
frysee Jul 3, 2026
372f92c
fix: refresh a2600 core patches for tg5040/tg5050
Copilot Jul 5, 2026
57e53bb
chore: remove unmaintained platforms
frysee Jul 5, 2026
d98888a
Update README with license transition notice
frysee Jul 8, 2026
1ff26e4
Add a missing quote in hook command parser
apommel Jul 8, 2026
1a73536
Merge branch 'main' into my355-latest-rebase
apommel Jul 8, 2026
d392978
my355: No-op functions for white point calibration
apommel Jul 8, 2026
c532ade
my355: refresh a2600 core patch
apommel Jul 8, 2026
f00f430
Chore(deps): Bump actions/checkout from 4.2.2 to 7.0.0 (#768)
dependabot[bot] Jul 9, 2026
410c159
Chore(deps): Bump softprops/action-gh-release from 2 to 3 (#767)
dependabot[bot] Jul 9, 2026
0d32f0d
feat: configurable button hint styles (#763)
frysee Jul 9, 2026
347bfd2
Chore(deps): Bump actions/upload-artifact from 4.6.2 to 7.0.1 (#771)
dependabot[bot] Jul 9, 2026
0012958
Chore(deps): Bump actions/attest-build-provenance from 2.3.0 to 4.1.1…
dependabot[bot] Jul 9, 2026
1672c89
Chore(deps): Bump actions/download-artifact from 4.3.0 to 8.0.1 (#770)
dependabot[bot] Jul 9, 2026
a3f75b8
Merge branch 'main' into my355-latest-rebase
apommel Jul 9, 2026
f91a135
Align my355 launch.sh with other platforms
apommel Jul 9, 2026
0719464
feat: Trimui Brick Pro support (tg4040) (#766)
frysee Jul 10, 2026
89843ef
fix: Don't resume from suspent when lid is closed
apommel Jul 10, 2026
11820a6
my355: add Wi-Fi and BT stop and resume at suspend
apommel Jul 10, 2026
8690158
my355: various fixes
apommel Jul 10, 2026
3bca8b7
fix: unify color parsing (#774)
frysee Jul 10, 2026
d47fb07
fix: trigger LEDs not addressable
frysee Jul 10, 2026
cdeee49
Merge branch 'main' into my355-latest-rebase
apommel Jul 11, 2026
e981d18
fix: L4 and R4 buttons for my355 (NA)
apommel Jul 11, 2026
bade2a4
feat: minput now visualizes stick movements
frysee Jul 12, 2026
45406e1
fix: white point calibration resetting itself
frysee Jul 12, 2026
cd8d31d
fix: playstation symbol mapping for X/Y
frysee Jul 12, 2026
64160e9
fix: brick pro display calibration to be closer to regular Brick
frysee Jul 12, 2026
a2cff6d
fix: cardinal symbol mapping for X/Y
frysee Jul 12, 2026
9dffb9e
fix: L4 and R4 button mappings (#776)
frysee Jul 12, 2026
f524d3b
build: add CONTAINER_MOUNT_OPTS to toolchain container runs (#779)
Pobega Jul 16, 2026
6056a87
Merge remote-tracking branch 'upstream/main' into my355-latest-rebase
apommel Jul 17, 2026
ae262ee
fix(suspend): allow charging on my355 when lid is closed
apommel Jul 17, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 11 additions & 11 deletions .github/workflows/ci.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ jobs:
release-name: ${{ steps.release-name.outputs.RELEASE_NAME }}
steps:
- name: Checkout
uses: actions/checkout@v4.2.2
uses: actions/checkout@v7.0.0
with:
fetch-depth: 0

Expand All @@ -46,7 +46,7 @@ jobs:

steps:
- name: Checkout
uses: actions/checkout@v4.2.2
uses: actions/checkout@v7.0.0

- name: Generate cores matrix
id: cores
Expand All @@ -69,7 +69,7 @@ jobs:
core: ${{ fromJson(needs.core-matrix.outputs.cores) }}
steps:
- name: Checkout
uses: actions/checkout@v4.2.2
uses: actions/checkout@v7.0.0

- name: Setup
run: make setup
Expand All @@ -78,7 +78,7 @@ jobs:
run: make build-core CORE=${{ matrix.core }}

- name: Upload core
uses: actions/upload-artifact@v4.6.2
uses: actions/upload-artifact@v7.0.1
with:
name: core-${{ matrix.toolchain }}-${{ matrix.core }}.zip
path: workspace/${{ env.PLATFORM }}/cores/output/
Expand All @@ -92,7 +92,7 @@ jobs:
RELEASE_NAME: ${{ needs.prepare.outputs.release-name }}
steps:
- name: Checkout
uses: actions/checkout@v4.2.2
uses: actions/checkout@v7.0.0

- name: Install dependencies
run: |
Expand All @@ -103,7 +103,7 @@ jobs:
run: make setup

- name: Download Cores (tg5040)
uses: actions/download-artifact@v4.3.0
uses: actions/download-artifact@v8.0.1
with:
path: workspace/tg5040/cores/output/
pattern: core-tg5040-*
Expand All @@ -115,7 +115,7 @@ jobs:
PLATFORM: tg5040

- name: Download Cores (tg5050)
uses: actions/download-artifact@v4.3.0
uses: actions/download-artifact@v8.0.1
with:
path: workspace/tg5050/cores/output/
pattern: core-tg5050-*
Expand Down Expand Up @@ -145,19 +145,19 @@ jobs:
run: make package

- name: Upload All
uses: actions/upload-artifact@v4.6.2
uses: actions/upload-artifact@v7.0.1
with:
name: ${{ env.RELEASE_NAME }}-all.zip
path: releases/${{ env.RELEASE_NAME }}-all.zip

- name: Upload Base
uses: actions/upload-artifact@v4.6.2
uses: actions/upload-artifact@v7.0.1
with:
name: ${{ env.RELEASE_NAME }}-base.zip
path: releases/${{ env.RELEASE_NAME }}-base.zip

- name: Upload Extras
uses: actions/upload-artifact@v4.6.2
uses: actions/upload-artifact@v7.0.1
with:
name: ${{ env.RELEASE_NAME }}-extras.zip
path: releases/${{ env.RELEASE_NAME }}-extras.zip
Expand All @@ -169,7 +169,7 @@ jobs:
echo '::warning title=Attest skipped::Attest action requires permissions and is performed only for main branch.'

- name: Attest Build Provenance
uses: actions/attest-build-provenance@v2.3.0
uses: actions/attest-build-provenance@v4.1.1
if: github.ref == 'refs/heads/main'
with:
subject-path: |
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/dev.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ jobs:

steps:
- name: Checkout
uses: actions/checkout@v4.2.2
uses: actions/checkout@v7.0.0

- name: Install dependencies
run: |
Expand All @@ -41,7 +41,7 @@ jobs:

steps:
- name: Checkout
uses: actions/checkout@v4.2.2
uses: actions/checkout@v7.0.0

- name: Install dependencies
run: |
Expand Down
28 changes: 14 additions & 14 deletions .github/workflows/release.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ jobs:
release-name: ${{ steps.release-name.outputs.RELEASE_NAME }}
steps:
- name: Checkout
uses: actions/checkout@v4.2.2
uses: actions/checkout@v7.0.0
with:
fetch-depth: 0

Expand Down Expand Up @@ -65,7 +65,7 @@ jobs:

steps:
- name: Checkout
uses: actions/checkout@v4.2.2
uses: actions/checkout@v7.0.0

- name: Generate cores matrix
id: cores
Expand All @@ -88,7 +88,7 @@ jobs:
core: ${{ fromJson(needs.core-matrix.outputs.cores) }}
steps:
- name: Checkout
uses: actions/checkout@v4.2.2
uses: actions/checkout@v7.0.0

- name: Setup
run: make setup
Expand All @@ -97,7 +97,7 @@ jobs:
run: make build-core CORE=${{ matrix.core }}

- name: Upload core
uses: actions/upload-artifact@v4.6.2
uses: actions/upload-artifact@v7.0.1
with:
name: core-${{ matrix.toolchain }}-${{ matrix.core }}.zip
path: workspace/${{ env.PLATFORM }}/cores/output/
Expand All @@ -111,7 +111,7 @@ jobs:
RELEASE_NAME: ${{ needs.prepare.outputs.release-name }}
steps:
- name: Checkout
uses: actions/checkout@v4.2.2
uses: actions/checkout@v7.0.0

- name: Install dependencies
run: |
Expand All @@ -122,7 +122,7 @@ jobs:
run: make setup

- name: Download Cores (tg5040)
uses: actions/download-artifact@v4.3.0
uses: actions/download-artifact@v8.0.1
with:
path: workspace/tg5040/cores/output/
pattern: core-tg5040-*
Expand All @@ -134,7 +134,7 @@ jobs:
PLATFORM: tg5040

- name: Download Cores (tg5050)
uses: actions/download-artifact@v4.3.0
uses: actions/download-artifact@v8.0.1
with:
path: workspace/tg5050/cores/output/
pattern: core-tg5050-*
Expand Down Expand Up @@ -164,19 +164,19 @@ jobs:
run: make package

- name: Upload All
uses: actions/upload-artifact@v4.6.2
uses: actions/upload-artifact@v7.0.1
with:
name: ${{ env.RELEASE_NAME }}-all.zip
path: releases/${{ env.RELEASE_NAME }}-all.zip

- name: Upload Base
uses: actions/upload-artifact@v4.6.2
uses: actions/upload-artifact@v7.0.1
with:
name: ${{ env.RELEASE_NAME }}-base.zip
path: releases/${{ env.RELEASE_NAME }}-base.zip

- name: Upload Extras
uses: actions/upload-artifact@v4.6.2
uses: actions/upload-artifact@v7.0.1
with:
name: ${{ env.RELEASE_NAME }}-extras.zip
path: releases/${{ env.RELEASE_NAME }}-extras.zip
Expand All @@ -188,7 +188,7 @@ jobs:
echo '::warning title=Attest skipped::Attest action requires permissions and is performed only for main branch.'

- name: Attest Build Provenance
uses: actions/attest-build-provenance@v2.3.0
uses: actions/attest-build-provenance@v4.1.1
if: github.ref == 'refs/heads/main'
with:
subject-path: |
Expand All @@ -203,12 +203,12 @@ jobs:
runs-on: ubuntu-24.04-arm
steps:
- name: Checkout
uses: actions/checkout@v4.2.2
uses: actions/checkout@v7.0.0
with:
fetch-depth: 0

- name: Download Release Artifacts
uses: actions/download-artifact@v4.3.0
uses: actions/download-artifact@v8.0.1
with:
path: releases/
pattern: NextUI-*
Expand All @@ -224,7 +224,7 @@ jobs:
GIT_NEXT_TAG: ${{ needs.prepare.outputs.next-tag }}

- name: Release
uses: softprops/action-gh-release@v2
uses: softprops/action-gh-release@v3
with:
files: releases/*
generate_release_notes: true
Expand Down
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -41,3 +41,8 @@ audiomon.elf

workspace/hash.txt
workspace/readmes
workspace/.container_runtime

AGENTS.md
CLAUDE.md
.worktrees/
87 changes: 87 additions & 0 deletions HOOKS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
# About NextUI hooks

## The idea

Hooks are platform-specific, just like paks. The launcher reads them from:

```
$USERDATA_PATH/.hooks/
boot.d/ # scripts run on boot
pre-launch.d/ # scripts run before launch
post-launch.d/ # scripts run after launch exits
pre-sleep.d/ # scripts run before device goes to sleep
post-resume.d/ # scripts run after device wakes from sleep
```

On device, `USERDATA_PATH` resolves to:

```
/mnt/SDCARD/.userdata/$PLATFORM
```

So the actual hook directories on device are:

```
/mnt/SDCARD/.userdata/<platform>/.hooks/pre-launch.d/
/mnt/SDCARD/.userdata/<platform>/.hooks/post-launch.d/

```

Example installed hook path:

```
/mnt/SDCARD/.userdata/tg5040/.hooks/post-launch.d/shortcuts-resume.sh

```

If these directories don't exist, nothing happens and there is no overhead.

## Environment variables

Hook scripts inherit all standard NextUI environment variables (`SDCARD_PATH`, `PLATFORM`, `USERDATA_PATH`, `SHARED_USERDATA_PATH`, etc.) plus these launch-specific ones:

| Variable | Description |
|---|---|
| `HOOK_PHASE` | `pre` or `post` |
| `HOOK_TYPE` | `rom` or `pak` |
| `HOOK_CMD` | The raw launch command |
| `HOOK_EMU_PATH` | Path to the emulator or pak `launch.sh` |
| `HOOK_ROM_PATH` | Path to the ROM file (empty for pak launches) |
| `HOOK_LAST` | Contents of `/tmp/last.txt` (the last selected menu entry) |

These can then be used by the underlying Pak to ingest information about the hook that just occurred.

## Writing a hook script

A hook script is any executable `.sh` file in one of the hook directories. Scripts run in alphabetical order.

```sh
#!/bin/sh
# my-hook.sh — log every ROM launch

[ "$HOOK_TYPE" = "rom" ] || exit 0
echo "$(date): launched $HOOK_ROM_PATH" >> "$LOGS_PATH/launches.log"
```

## Rules

- Each script runs in a subshell. A crash or non-zero exit will not affect the launcher or other hooks.
- Script output (stdout/stderr) is suppressed. If you need logging, write to your own log file.
- Pre-launch hooks cannot cancel the launch. They are for observation and setup only.
- Keep hooks fast. A slow hook delays the launch or the return to the menu.
- Unlike auto.sh, each pak should manage their own hook and use a descriptive filename to avoid collisions.


## Example: sync after ROM exit

```sh
#!/bin/sh
# shortcuts-resume.sh — one-shot resume metadata sync after a ROM exits

[ "$HOOK_TYPE" = "rom" ] || exit 0

SHORTCUTS_PAK="$SDCARD_PATH/Tools/$PLATFORM/Shortcuts.pak"
[ -x "$SHORTCUTS_PAK/shortcuts" ] || exit 0

"$SHORTCUTS_PAK/shortcuts" --resume-sync-hook >> "$LOGS_PATH/shortcuts-resume-sync.txt" 2>&1
```
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
<h1>This project is currently undergoing a license transition. See [#765](https://github.com/LoveRetro/NextUI/issues/765) for details.</h1>

<div align="center">

<img width=128px src="github/logo_outline.png">
Expand Down Expand Up @@ -120,6 +122,7 @@ Our wiki has a [list of all available Paks](https://nextui.loveretro.games/pak-s

- [josegonzalez](https://github.com/josegonzalez) for [minui-keyboard](https://github.com/josegonzalez/minui-keyboard)
- [knulli-cfw](https://github.com/knulli-cfw)/[Mikhailzrick](https://github.com/Mikhailzrick) for [fan-control-daemon](https://github.com/knulli-cfw/knulli-linux/commit/5c1b4724330b59cbe8af79d0a7f1dac86f1c221a)
- [Kenney](www.kenney.nl) for [Input Prompts](https://kenney.nl/assets/input-prompts)

---

Expand Down
3 changes: 0 additions & 3 deletions github/README.md

This file was deleted.

13 changes: 0 additions & 13 deletions github/generate_screenshots.sh

This file was deleted.

Binary file removed github/logo.png
Binary file not shown.
Binary file removed github/logo_outline.png
Binary file not shown.
Binary file removed github/minui-clock.png
Binary file not shown.
Binary file removed github/minui-main.png
Binary file not shown.
Binary file removed github/minui-menu-gbc.png
Binary file not shown.
Binary file removed github/minui-menu-md.png
Binary file not shown.
Binary file removed github/minui-menu-options-controls.png
Binary file not shown.
Binary file removed github/minui-menu-options-core.png
Binary file not shown.
Binary file removed github/minui-menu-options-frontend.png
Binary file not shown.
Binary file removed github/minui-menu-options-shortcuts.png
Binary file not shown.
Binary file removed github/minui-menu-p8.png
Binary file not shown.
Binary file removed github/minui-menu-ps.png
Binary file not shown.
Binary file removed github/minui-menu-sfc.png
Binary file not shown.
Binary file removed github/minui-menu-sgb.png
Binary file not shown.
Binary file removed github/minui-menu-vb.png
Binary file not shown.
3 changes: 2 additions & 1 deletion makefile
Original file line number Diff line number Diff line change
Expand Up @@ -125,8 +125,9 @@ ifneq (,$(filter $(PLATFORM),tg5040 tg5050 my355))
cp ./workspace/all/minarch/build/$(PLATFORM)/liblzma.so.* ./build/SYSTEM/$(PLATFORM)/lib/
cp ./workspace/all/minarch/build/$(PLATFORM)/libzstd.so.* ./build/SYSTEM/$(PLATFORM)/lib/

# libchdr for RetroAchievements CHD hashing
# libchdr and libcrypto for RetroAchievements
cp ./workspace/all/minarch/build/$(PLATFORM)/libchdr.so.* ./build/SYSTEM/$(PLATFORM)/lib/
cp ./workspace/all/minarch/build/$(PLATFORM)/libcrypto.so.* ./build/SYSTEM/$(PLATFORM)/lib/

ifneq (,$(filter $(PLATFORM),tg5040 my355))
# liblz4 for Rewind support
Expand Down
Loading