App Details
WARNING: This will overwrite Tesla Menu if already installed. Includes ppkantorski's nx-ovlloader fork.
Ultrahand Overlay is a Tesla Menu replacement built from the ground up off of libtesla that provides powerful C/C++ commands through the usage of its own custom interpretive programming language (similar to Shell/BASH). It is a versatile tool that enables you to create and share custom command-based packages, providing enhanced functionality for managing files and directories on your SD card.
With Ultrahand, you have the flexibility to customize and shape your file management system according to your needs, empowering you with greater control over your system configurations.
Support the dev on Ko-fi: https://ko-fi.com/ppkantorski
Screenshots
Changelog
v2.3.0
List of changes:
1. Numerous improvements to the notifications implementation.
- Notification options have been moved to the Notifications Menu (in System Settings).
- Multiple notifications can be shown at once (up to the Max Slots value).
- When using 4MB overlay memory, max slots is capped at 4, otherwise it is capped at 8. (default value 4)
- API Notifications (formerly known as External Notifications) are formatted as follows:
json
{
"text": "This is an example notification.",
"font_size": 24, optional
"split_type": "word" optional, word by default
"alignment": "left", optional, center by default without a title
"duration": 4000, optional duration in ms
"title": "Example App", optional, allows show_time
"show_time": "true", optional, true by default
"priority": 20, optional (ideally not modified)
}
- Stored in /config/ultrahand/notifications/{APP_ID}-{UNIQUE_ID}.notify (JSON format)
- API Notifications can be filtered with the existence of /config/ultrahand/flag/notifications/{APP_ID}.flag.
- Notification icons are now supported and must be 50x50 RGBA format with {APP_ID} matching the notification json.
- /config/ultrahand/assets/notifications/{APP_ID}.rgba
- Package command notify / notification and notify-now / notification-now has been expanded.
- notify [FONT_SIZE] [TEXT_ALIGNMENT] [SPLIT_TYPE] [DURATION_MS] [TITLE] [SHOW_TIME] [APP_NAME]
- : the main notification message text. (only 4 lines can be displayed)
- [FONT_SIZE]: an integer value in range 8 to 48 (24 by default with a title, 26 without a title).
- [TEXT_ALIGNMENT]: either left, center, or right.
- By default, without a title it is center and with one it is left.
- [SPLIT_TYPE]: either word or char.
- [DURATION_MS]: the duration for the prompt in milliseconds. (500 min, 4000 by default)
- A duration value of 0 will keep the prompt displayed indefinitely until dismissal.
- [TITLE]: a title for the notification.
- [SHOW_TIME]: a true/false value for showing the timestamp alongside the title. (requires a title)
- [APP_NAME]: allows the notification command to use an icon (used if present)
- To use an app name without a title, title must be an empty string ("").
- notify-now follows the same pattern as notify but always displays in slot 0 with immediate priority.
- Sidenote:- All [] parameters are optional and are interpreted based upon their value and order.
- New notification sound effect /config/ultrahand/sounds/notification.wav.
- The Silence Notifications toggle disables notification sound effects.
- Notifications can be dismissed with KEY_MINUS clicks, as well as via direct touch.
- API toggle hotkey (hold KEY_MINUS for 4s) allows disabling API Notifications on demand easily.
- The API toggle hotkey can be enabled / disabled in the Notifications Menu.
2. New theme colors notification_title_color, notification_time_color, and unfocused_color.
- notification_title_color is the color for the notification titles.
- notification_time_color is the color for the notification timestamps.
- unfocused_color is the color KEY_A+" OK" is displayed with at the bottom of the overlay when no items are in focus.
3. New package command touch, called touch .
- Command creates an empty text file according to the file path if the file does not exist.
4. New Packages Menu toggle (in Miscellaneous) for hiding the packages menu completely.
5. Timestamp placeholder {timestamp()} (with no formatting parameter) can now also be called as {timestamp}.
6. System RAM previews now automatically change with Overlay Memory adjustments in the System Settings menu.
7. Sound effects can now use 8000 Hz, 11025 Hz, 16000 Hz, 22050 Hz, 32000 Hz, and 44100 Hz 16-bit PCM wav files in addition to 48000 Hz.
8. Feedback (haptics + sound) is now processed on its own background thread for improved performance and reliability.
9. Improvements to haptics in handheld mode.
10. Cleanup of language json's (removal of unused / unnecessary variables).
11. Bug fix for internet connection checks in download calls.
12. Various list class corrections / improvements.
13. Various code optimizations, bug fixes, and improvements.
v2.2.9
Stability Update
List of changes:
1. Overlay freeze bug fix triggered when entering the packages menu with GDB debugging- enabled in Atmosphere.
- When enable_htc = u8!0x0 and enable_standalone_gdbstub = u8!0x1 are present in the system_settings.ini, prior versions can freeze / become unresponsive when entering the packages menu (or any package in general) while within an application / game.
- This was because getBuildIdAsString (updated among the general placeholders) was relying on dmnt:cht which conflicts directly with the standalone GDB stub.
2. libnx has been updated to latest.
v2.2.8
List of changes:
1. All language font glyphs are now accessible regardless of the specified language (libultrahand fix).
- Special thanks to @tomvita.
2. Packages can now utilize language translation json's (similar to libultrahand overlay language translations).
- Language json's go within the lang folder within the package's main folder and are utilized based upon the current selected overlay language.
- Translations are based upon drawString calls with keys being the original text and values being the translations.
3. New package command option headers.
- ;state= works with values handheld or docked and will only draw the list item if in handheld or docked accordingly.
- ;hos_version= works with version values or with comparison signs >=, , =, , .
6. Changes to root package boot package behavior (/switch/.packages/boot_package.ini).
- The on-boot entry now triggers specified commands once on system startup (similar to how boot used to function).
- The boot entry now triggers once when the Packages Menu is entered, as well as once on the Packages Menu after overlay hiding has triggered.
7. New Sounds manager for selecting overlay system sound effects (bundled in .zip's).
- Sound zip packs go in /config/ultrahand/.sounds/ (files must be around the same size as the default sounds pack).
- The Sound Effects toggle has been removed from the Features page.
- The NO_SOUND_EFFECTS_UPDATES update flag has now been removed (no longer necessary).
8. Update to Overlay Info, with info properly translated in each supported language.
- New project developer animation on the "Software Update" page.
- Languages update command in the Software Update menu has been removed (now unnecessary).
11. Text wrapping for tables has been significantly revised to properly handle asian characters on split as well as implement hyphens for other languages when split by character.
- Indent symbols for continued lines utilizing indents now properly indent their start position based upon the indentation of the previous line (for easier viewing of code).
10. Scrolling category headers now properly resume scroll state during regular goBack calls (libultrahand fix).
11. Now including patches from Master Volume: https://github.com/averne/MasterVolume for unbounded volume sliding from 100% to 150% using the volume command.
12. Download commands now verify internet access on network connection (to prevent hanging while on a network without internet access).
13. The "hold A to execute" list item behavior has been reduced from 4s to 3s to trigger.
14. TrackBar unlocking / locking feedback tweaks.
15. Script overlay freeze- bug fix (placeholder replacement infinite loop bug fix).
16. Various boundary case fixes to the List class in libultrahand.
17. Bug fix for package version labels not being displayed clean- with Clean Versions enabled.
18. Improvements to image rendering (libultrhaand).
19. Various additional bug fixes and code optimizations.
New Contributors
- @tomvita made their first contribution in https://github.com/ppkantorski/Ultrahand-Overlay/pull/296
v2.2.7
List of changes:
1. Critical bug fix for touch navigation (crash fix).
- Touch navigation redirection for direct touch on list items (in libultrahand v2.2.3 -> v2.2.5) could trigger crashes randomly (pointer still referenced before deconstruction).
2. New settings toggle for startup notifications (Startup Notifications; on by default).
- New restart notification for nx-ovlloader memory settings changes.
- Proper restart vs startup condition isolations.
3. Notifications toggle has been renamed to External Notifications and will only be applied to JSON based notifications.
4. The "hold A to execute" behavior now works via touch.
- Hold duration has been reduced to 4 seconds.
5. Package command pchtxt2cheat now accepts names for the cheats being converted (fix).
- Called pchtxt2cheat [CHEAT_NAME].
6. Table scrolling with KEY_UP / KEY_DOWN clicks have been slightly refined.
7. Socket is now initialized and exited per download.
- This should free up more working memory / reduce memory pressure for packages and Ultrahand in general.
8. Software updates now automatically reload Ultrahand on exit from the update menu (rather than on exits from the settings menu).
9. Multiple list corrections, focus resuming, touch related bug fixes, and more.
v2.2.6
Stability Update
List of changes:
- Sequential placeholder replacement bug fixes (for package commands).
v2.2.5
Stability Update
List of changes:
1. Critical bug fix causing crashes on the packages / package menu when not on Wi-Fi.
2. unpackDeviceInfo sequencing correction.
3. Added curl_global_cleanup to exitServices (to cleanup curl global resources on app exit).
4. Buffer initialization correction for download / unzip functions.
v2.2.4
List of changes:
1. OverlayFrame titles now auto-scroll when too long or covered by the widget (just like subtitles).
2. Copy, move, and delete wildcard commands now support -filter (path to a text file containing a list of files / folders to be filtered from pattern resolution).
3. -filter now properly resolves ./ and ../ paths and no longer require hardcoded sdmc:/ in the file / folder paths.
4. Fixed script overlay for track bars.
v2.2.3
List of changes:
1. Improvements to the List class in libultrahand.
- No more pointer caching (less memory usage, faster openings / list to list transitions, more consistent behavior).
- Proper "wall" handling for initial clicks that select the first / last ListItems (no instant wrap around until subsequent clicks).
- Theme variable trackbar_color is now scrollbar_color + new color scrollbar_wall_color (triggered when tapping ends of the list).
- Updates to ultra.ini and ultra-blue.ini themes (as well as default).
- Themes will need to be re-applied for changes to be applied.
- Fixes to the "immediate focus" implementation introduced in v2.2.2.
2. New package command header ;footer= and ;footer_highlight=.
- ;footer= allows users to pre-define a default footer value for a package command (to be used, stored, and set when no footer exists in the config.ini for the package.
- ;footer_highlight= is a true / false parameter that will draw the footer with the highlight color when on.
- footer_highlight is also a new key to be used in the config.ini for manually configuring the footer highlight for the command.
3. Hold mode ;mode=hold is no longer a command mode and can now be set for default, option, and slot commands via ;hold=true.
- The default generated package.ini now uses this command header.
- Users may want to delete their /switch/.packages/package.ini and have Ultrahand re-generate it if they are still using the old package.ini.
- Side-note:- If using ;mode=hold, users will need to update their commands to leverage ;hold=true instead.
4. Fixes to the placeholder parsing implementation.
- Proper handling and resolution sequencing of unresolved placeholders.
- Placeholder methods before the _source definitions are now carried over to the rest of the commands (rather than reset).
5. Touch improvements to track-bars.
6. Optimizations to command menu drawings.
7. Various corrections, bug fixes, and improvements.
v2.2.2
Stability Update
List of changes:
1. Proper fix for default combo initializations (on fresh installs).
- Launch combo is first checked and loaded from /config/tesla/config.ini.
- If the Tesla combo does not exist, and no combo in /config/ultrahand/config.ini exists, users can use the default Tesla combo (L+DDOWN+RS) or the default Ultrahand combo (ZL+ZR+DDOWN) for initializing their default combo.
- Once initialized, Ultrahand will assume the combo the user used until changed in the Settings menu.
2. Bug fix for returning from an overlay while touch is still in progress (multiple cursors).
- If foreground is in focus and a button is clicked while touch is in progress, input will now be prevented (with button click feedback).
3. Bug fix for returning to the overlay menu after using an overlay launch combo and exiting the overlay (KEY_B click).
- Before the jumpToItem implementation would kick in on the next launch of Ultrahand after closing the overlay, causing the cursor to shift unnecessarily to the last open overlay title on the overlay menu.
4. Bug fix for widget settings not auto-loading on first fresh install launch.
v2.2.1
List of changes:
1. New command mode ;mode=hold for triggering a "hold A to execute" type response (similar to default).
- The pre-generated package.ini now utilizes ;mode=hold for its shutdown command.
2. New commands set-ini-val-matching-key, remove-ini-key-matching-key, and path_exists.
- set-ini-val-matching-key will set an ini value to all ini sections that include the matching pattern key.
- Called set-ini-val-matching-key .
- remove-ini-key-matching-key will remove all key value pairs from an ini from sections that include a matching pattern key.
- Called remove-ini-key-matching-key .
- path_exists will return command success or failure based upon if the path provided exists or not.
- Called path_exists .
- Can be quite useful when chained within try: blocks.
3. Placeholder replacement improvements for chaining with a source command.
- In addition to ini_file (like before), users can now use the full catalogue of placeholders and chain them with their _source method definition.
- Various improvements to placeholder replacements.
4. Slight refinements to list_file_source to include newlines when chained with tables.
- Slight formatting improvements for tables on the ScriptOverlay.
5. New package Memory Kit: https://github.com/ppkantorski/Memory-Kit (latest revision of the old Memory Config: https://github.com/ppkantorski/Ultrahand-Overlay/tree/main/examples/Memory%20Config package example; Ultrahand v2.2.1+ only).
- This package includes the mesosphere.bin memory hack: https://github.com/Craftyawesome/Atmosphere/tree/memory-hack (1.85 MB + stripped).
- Keep in mind that the stripped version will break the web browser, which will cause crashes on certain games and apps that utilize the web browser.
- The 1.85 MB version however should not have any issues.
- Regular users should not- touch the Configure Commands tab as it is strictly available for development and testing of memory configurations for the libultrahand.
6. Improvement to haptics (stronger and more consistent feedback).
7. Bug fix for combos on forced AMS v1.10+ support overlays.
- Combos were not working properly for overlays with forced support.
- Forced AMS v1.10+ support is not recommended, but can still be used with manual patching overlay binaries.
- It is highly recommended that all overlays get recompiled for proper AMS v1.10+ support.
8. New unsupported warning notification displayed when trying to launch an unsupported overlay.
9. All pages now get drawn with the cursor automatically set (no cursor flickering into view).
10. Bug fix for sluggish table scrolling after triggering a jump / wrap to bottom.
11. Bug fix for exit sound + haptics kicking in when combo launching an overlay during a notification.
12. Bug fix for degrees symbol on Chinese fonts.
13. Slight optimizations to stbtt_FindGlyphIndex_impl.
14. Various additional tweaks, bug fixes and corrections.
v2.2.0
List of changes:
1. New overlay heap size configurations with automatic reloads (in the System Settings menu).
- Default heap size for HOS 21+ is now set to 4MB (displayed as nx-ovlloader-).
- Although rare, some overlays may not work properly on 4MB (without a fix implemented).
- To fix some of these overlays, they should be using socketInitialize instead of socketInitializeDefault (if utilized).
- Overlays should also not be utilizing a full 1280x720p framebuffer when on 4MB.
- Default heap size for HOS 20 is now set to 6MB (displayed as nx-ovlloader).
- Default heap size for HOS 19 and lower is now set to 8MB (displayed as nx-ovlloader+).
- Users can also add a 4th higher option by adding to /config/ultrahand/config.ini a new section memory with key custom_overlay_memory_MB and an integer value (2MB intervals greater than 8MB only).
- After adding that entry, a 4th memory option will appear (displayed as nx-ovlloaderĂ—).
- If Ultrahand deems there is not enough memory (at least 5.3 MB free after potential changes), then changes will not be applied.
2. Users can now completely exit the overlay system from the System Settings menu.
- This will recover all memory consumed by nx-ovlloader / Ultrahand Overlay.
- Users can then use Ultrahand-Reload.nro from homebrew launcher (now bundled with nx-ovlloader) to restart / reset nx-ovlloader without rebooting.
3. Commands move, copy, delete, and dot-clean memory optimizations.
- Larger deletes, moves, and copies than v2.1.8 are now possible (even on a 4MB heap).
- dot-clean now also removes all .DS_Store files for the specified directory (and subdirectories).
4. Now bundled with nx-ovlloader v2.0.0: https://github.com/ppkantorski/nx-ovlloader/releases/tag/v2.0.0 (which includes the new helper module nx-ovlreloader: https://github.com/ppkantorski/nx-ovlreloader).
- nx-ovlloader+ compilation has been discontinued (no longer necessary).
- The nx-ovloader+ zip on v2.0.0 is the same as nx-ovlloader.
- It is provided for now during a grace period to ensure users can easily update from the system settings menu.
- In the future after nx-ovlloader v2.0.0, if not on Ultrahand Overlay v2.2.0+, update methods might- be broken.
- Side-note:- Users no longer need the /config/ultrahand/expansion/ folder and can safely delete it after updating.
5. Software updates now have the option to download a temporary update.ini command file (if provided on release) for micro managing the installation / update process.
- Software updates instructions have also been slightly reworked for easier management.
6. Command exec now can be called with any package ini file (in addition to boot_package.ini like before).
- Users can call this with exec [ULTRAHAND_INI_FILE_PATH].
- ULTRAHAND_INI_FILE_PATH in this case is an optional parameter, the path to the package ini file containing the command entry.
- When not provided, it will assume commands from boot_package.ini (just like before).
7. Slight improvements to notifications (new tsl::notification->showNow implementation).
- This allows instant display of the notification without waiting for the last notification to transition.
- Packages can also use showNow via notify-now or notification-now (called the same way as notify / notification).
8. Sound effects now work on 6MB+ overlay heap sizes (disabled on 4MB).
9. Improvements to TrackBar touch.
10. Improvements to touch haptics (now to trigger on touch).
11. Improvements rounded rects and circles (slightly more refined AA).
12. Changes to socket initialization for improved memory usage (enables downloads on 4MB and improved memory).
13. Bug fix for haptics becoming disabled after sleep.
14. Bug fix for ;display_title= in packages interfering with proper returns to the last selected list item on the menu (as seen with returning from Alchemist).
15. Various tweaks, optimizations, bug fixes, and corrections.