Skip to content

Commit

Permalink
Improve README, other minor fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
XorTroll committed Jul 2, 2024
1 parent f7973e3 commit f611ffc
Show file tree
Hide file tree
Showing 7 changed files with 183 additions and 51 deletions.
216 changes: 174 additions & 42 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<img alt="uLaunch" height="100" src="projects/uMenu/romfs/Logo.png">
</p
**uLaunch** is an open-source replacement for the *Nintendo Switch HOME menu* with a custom, homebrew-oriented one:
***uLaunch*** is an open-source, customizable and homebrew-oriented replacement for the *Nintendo Switch HOME menu*:
![Screenshot](screenshot.jpg)
Expand Down Expand Up @@ -36,84 +36,178 @@
</a>
</p>

### Want to find **themes** for uLaunch? Check the [r/uLaunchThemes subreddit](https://www.reddit.com/r/uLaunchThemes/)!
### Want to find **themes** for uLaunch? Check the [r/uLaunchThemes subreddit](https://www.reddit.com/r/uLaunchThemes/) or the [Discord server](https://discord.gg/3KpFyaH)!

### Want to make **themes** yourself? Want to know more about the **technical** side of the project? Check [our wiki](https://github.com/XorTroll/uLaunch/wiki)!

<h3>
Table of contents
</h3>
### Want to make your own uLaunch **themes**? Check the [wiki](https://github.com/XorTroll/uLaunch/wiki)!

- [Features](#features)
- [Custom features](#custom-features)
- [Implemented base features](#implemented-base-features)
- [Unimplemented base features](#unimplemented-base-features)
- [Planned to be implemented](#planned-to-be-implemented)
- [Not planned to be implemented (at least for now)](#not-planned-to-be-implemented-at-least-for-now)
- [Setup](#setup)
- [Installing uLaunch](#installing-ulaunch)
- [Removing uLaunch](#removing-ulaunch)
- [FAQ](#faq)
- [Components](#components)
- [uSystem](#usystem)
- [uMenu](#umenu)
- [uLoader](#uloader)
- [uManager](#umanager)
- [Building](#building)
- [Simple FAQ](#simple-faq)
- [Credits](#credits)

## Features

- Basic HOME menu aspects
### Custom features

- Foreground and background management: launch, suspend and close applications and library applets
List of unique extensions that the official HOME menu lacks:

- General channel handling (basic functionality): sleep, shutdown, reboot, HOME menu press detection...
- User login system (login once, use that user for everything)

- *Settings*
- Grid-like main menu, deeply inspired by the 3DS menu (and partially DSi/Wii menus as well), easier than ever to navigate and customize

- Various reimplemented system settings (several still need to be implemented)
- The grid can be resized like in 3DS menus

- A few uLaunch-specific settings
- Entries can be moved as desired

- *Users*
- Folders, subfolders...

- PC-like login: select a user once in the startup menu, use it for everything afterwards!
- Homebrew directly launchable straight from main menu as an applet or an application (using applications as donors)

- Create new users on the startup menu
- Extensive themeing support

- Show user page (in order to edit nickname/icon, browse friends...)
- Backgrounds, icons, etc.

- *Homebrew support*
- BGM and many sound effects

- Launch homebrew as applets (no need of using the *album*)
- Web browser easily accessible straight from main menu

- Launch homebrew as *applications* (requires selecting a *donor/takeover application*)
- Mii editor easily accessible straight from main menu

- Add homebrew entries to the main menu (thus making homebrew or even custom entries easily accessible, no more need of *forwarders*!)
- Screen capture to PC support via USB

- *UI*
- Display system version + Atmosphère version + EmuMMC presence independently, in a nicer way

- Grid-like menu, deeply inspired by the 3DS menu (and partially DSi/Wii menus as well), easier than ever to navigate and customize
- Better display when gamecard fails to mount

- **Themes** (our own, different to official HOME menu themes, way more vibrant and colorful!)
- 1080p resolution

- Custom icons, menu assets and graphics: custom backgrounds, images, colors, sizes, positions...

- Custom *background music** and *sound effects*
### Implemented base features

- **Folders** (and *subfolders*) in order to keep your main menu neatly organized
List of implemented official HOME menu features:

- Special menu entries, similar to old Nintendo console menus: settings, user page, album, mii editor, controllers, web browser...
- Application launching, suspending and closing

- *Miscellaneous extras*
- Applet launching and closing

- Browse the Internet (via the normally hidden web-applet) directly from the main menu!
- User page

- Toggle between uLaunch and the original HOME menu (no permanent removal), easily update uLaunch and more using our `uManager` homebrew tool!
- Controller support

- Stream the screen via USB (although at low speeds, about ~9 FPS) via `uScreen`! (mostly useful for taking quick screenshots, specially since uLaunch is able to capture more than SysDVR or usual game capture)
- Settings (only a handful are so far implemented):

- uLaunch is a 100% open-source **entire** reimplementation (of key components): this isn't some kind of HOME menu extension, injection, patch, etc.
- Console version

## Building
- Atmosphère version

This project is, like [Goldleaf](https://github.com/XorTroll/Goldleaf), based on my [Plutonium](https://github.com/XorTroll/Plutonium) UI libraries.
- EmuMMC presence

You will need *devkitPro*, *devkitA64*, *libnx* and all SDL2 libraries for Switch development (make sure their packages are installed): `switch-sdl2 switch-freetype switch-glad switch-libdrm_nouveau switch-sdl2_gfx switch-sdl2_image switch-sdl2_ttf switch-sdl2_mixer`
- Console nickname

Clone **recursively** this repo and just enter `make` in the command line. It should build everything and generate a `SdOut` folder whose contents sould directly be copied to the root of a console SD card.
- Console timezone

In order to only build a certain subproject, you can run `make` plus the subproject's name: `make usystem`, `make uloader`, `make umenu`, `make umanager`
- WiFi connection name/WiFi settings

- Console language

- Console information upload (enable/disable)

- Bluetooth (enable/disable)

- NFC (enable/disable)

- Automatic application download (enable/disable)

- Automatic console update (enable/disable)

- Wireless LAN (enable/disable)

- Console serial number

- Show console IP/MAC address

- General channel/applet messages (some of them aren't implemented yet):

- HOME button detection

- Power off, sleep, reboot

- SD card removal

- Gamecard failing to mount

### Unimplemented base features

List of not implemented official HOME menu features:

#### Planned to be implemented

- Auto-sleep after a certain amount of time

- Several unimplemented settings

- Several unimplemented general channel/applet messages

- Console updating

#### Not planned to be implemented (at least for now)

- eShop functionality

- Parental control

- Application (game) updates

## Setup

### Installing uLaunch

1. Download the latest release ZIP.

> Note: this project is released and meant to be used with Atmosphère, so use it with different CFWs at your own risk.
2. Copy everything inside the ZIP to the root of your SD card.

- If you have never used uLaunch or any kind of HOME menu replacement (NXThemes don't count) you wouldn't need to overwrite any files.

## Simple FAQ
- You don't need to remove your normal HOME menu themes (NXThemes) in order to install uLaunch. Those themes are at a `romfs` dir inside `contents/0100000000001000`, while uLaunch's only file in that folder is `contents/0100000000001000/exefs.nsp`.

3. Launch your CFW (using emuMMC or sysMMC shouldn't make a difference) and enjoy your new HOME menu!

### Removing uLaunch

> Important: make sure you don't remove anything else but the stuff mentioned here, in order to avoid any potential trouble!
1. If you'd like to keep your custom themes, menu entries, config, etc. then just use the `uManager` tool to disable uLaunch. This doesn't remove any data, allowing you to re-enable it back any moment.

2. If you'd like to remove everything permanently, then you will have to remove `atmosphere/contents/0100000000001000` and `ulaunch` folders on the SD card. If you also wish to remove `uManager`, then remove `switch/uManager.nro`.

> Note: if you use any HOME menu modification - like NXThemes - make sure you do not delete the entire `0100000000001000` folder, just the `exefs.nsp` file!
## FAQ

- uLaunch gives me a blackscreen. How can I fix it?

- First of all, make sure you're using the latest release of uLaunch.

- If new firmware updates or new Atmosphère versions have been released, you might need to wait for a new release to be dropped, and in the meantime you might be able to use dev/testing builds from our [Discord server](https://discord.gg/3KpFyaH).

- The *log files* uLaunch's components generate inside `ulaunch` folder can be really helpful when sharing your issue in Discord or GitHub. Make sure you don't reboot again into uLaunch, since the log files will be overwritten! Otherwise, just replicate the bug and share/copy the log files before reloading anything.

- In more extreme cases, uLaunch's blackscreens might also be caused due bad handling of invalid theme/entry JSON files. The JSONs might have been corrupted (due to ExFAT, other homebrews...) so try deleting them.

- Why can't I access the usual system settings, while I can access other normal system menus like the album, mii editor, user page, etc.?

Expand All @@ -133,18 +227,56 @@ In order to only build a certain subproject, you can run `make` plus the subproj

- Aside from the two excuses above, there is always room for further optimizations in uLaunch's code. Feel free to submit any issues of excessive lag/slowdowns, I'll do my best to improve it :)

## Components

### uSystem

uSystem is the *system applet process* replacement - the actual, literal HOME menu replacement - and serves as a *backend* for the actual menu the user will interact with (uMenu).

uSystem handles essential HOME menu functionality, like suspending/closing titles, closing applets, detecting power button or HOME button presses... it's very lightweight since it must always be running in the background.

It also communicates with uMenu for anything necessary via their `smi` communication system.

### uMenu

uMenu is a *library applet* (running temporarily over the *eShop applet* when launched) which is **the HOME menu the user will see and interact with**.

uMenu is launched and terminated by uSystem when necessary. In order to deal with special HOME menu functionality (closing titles, launching them...) it communicates with uSystem via their `smi` communication system.

### uLoader

uLoader is a custom [nx-hbloader](https://github.com/switchbrew/nx-hbloader/releases) implementation, which allows to easily *launch homebrew* as applets or applications or even to *choose homebrews* as some sort of file dialog.

### uManager

uManager is a homebrew NRO used for controlling key uLaunch aspects.

Only those tasks which cannot be performed outside uLaunch are controlled (like enabling or disabling uLaunch itself, hence why this is a separate NRO and not part of uMenu/etc), while everything else is controlled and managed on uLaunch itself.

## Building

> Note that [workflows](https://github.com/XorTroll/uLaunch/actions) automatically build and upload nightly builds for every commit!
This project is, like [Goldleaf](https://github.com/XorTroll/Goldleaf), based on my [Plutonium](https://github.com/XorTroll/Plutonium) UI libraries.

You will need *devkitPro*, *devkitA64*, *libnx* and all SDL2 libraries for Switch development (make sure their packages are installed): `switch-sdl2 switch-freetype switch-glad switch-libdrm_nouveau switch-sdl2_gfx switch-sdl2_image switch-sdl2_ttf switch-sdl2_mixer`

Clone **recursively** this repository and just enter `make` in the command line. It should build everything and generate a `SdOut` folder whose contents sould directly be copied to the root of a console SD card.

In order to only build a certain subproject, you can run `make` plus the subproject's name: `make usystem`, `make uloader`, `make umenu`, `make umanager`

## Credits

- SciresM for [Atmosphere-libs](https://github.com/Atmosphere-NX/Atmosphere-libs).

- Switchbrew team for [libnx](https://github.com/switchbrew/libnx) and [nx-hbloader](https://github.com/switchbrew/nx-hbloader), the base of `uLoader`.
- Switchbrew team for [libnx](https://github.com/switchbrew/libnx) and [nx-hbloader](https://github.com/switchbrew/nx-hbloader), the base of uLoader, as well as their wonderful [wiki](https://switchbrew.org/wiki/Main_Page).

- C4Phoenix for the original design of this project's logo.

- [Iconos8](https://iconos8.es/), [WallpaperAccess](https://wallpaperaccess.com/), [Flaticon](https://www.flaticon.com/), [Iconfinder](https://www.iconfinder.com/) and [Icon Archive](https://www.iconarchive.com/) as the bases for most of the icons used by the default menu theme.

- Several scene developers for their help with small issues or features.

- `uMenu` translations: [DDinghoya](https://github.com/DDinghoya) for Korean, [NedcloarBR](https://github.com/NedcloarBR) for Brazilian Portuguese
- uMenu/uManager translations: [DDinghoya](https://github.com/DDinghoya) for Korean, [NedcloarBR](https://github.com/NedcloarBR) for Brazilian Portuguese

- Everyone from my Discord and other places whose suggestions made this project a little bit better! Specially all the testers for being essential in reporting bugs and helping a lot with the project's development <3
Binary file modified assets/default-theme/AlbumEntryIcon.xcf
Binary file not shown.
Binary file modified projects/uMenu/romfs/default/ui/AlbumEntryIcon.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
12 changes: 6 additions & 6 deletions projects/uMenu/romfs/lang/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@
"set_ams_emummc": "EmuMMC present",
"set_console_nickname": "Console nickname",
"set_console_timezone": "Console timezone location",
"set_viewer_enabled": "USB screen viewer enabled",
"set_viewer_enabled": "USB screen capture enabled",
"set_wifi_none": "none (no WiFi connection)",
"set_wifi_name": "Connected WiFi network",
"set_console_lang": "Console language",
Expand All @@ -67,15 +67,15 @@
"set_wireless_lan": "Wireless LAN enabled",
"set_bluetooth": "Bluetooth enabled",
"set_usb_30": "USB 3.0 enabled",
"set_nfc": "NFC enabled (amiibo)",
"set_nfc": "NFC enabled",
"set_serial_no": "Console serial number",
"set_mac_addr": "MAC address",
"set_ip_addr": "IP address",
"swkbd_console_nick_guide": "Enter console nickname",
"set_viewer_info": "Only enable USB screen viewer support if you wish to use the PC screen viewer (uScreen) via USB cable.",
"set_viewer_enable_conf": "Would you like to enable USB screen viewer support?",
"set_viewer_disable_conf": "Would you like to disable USB screen viewer support?",
"set_changed_reboot": "USB screen viewer enabled. (A reboot is required, the option won't be used until then)",
"set_viewer_info": "Only enable USB screen capture support if you wish to use the PC screen viewer (uScreen) via USB cable.",
"set_viewer_enable_conf": "Would you like to enable USB screen capture support?",
"set_viewer_disable_conf": "Would you like to disable USB screen capture support?",
"set_changed_reboot": "USB screen capture enabled. (A reboot is required, the option won't be used until then)",
"startup_welcome_info": "Welcome! Please select a user.",
"startup_add_user": "Add user",
"theme_info_text": "Available themes",
Expand Down
2 changes: 1 addition & 1 deletion projects/uMenu/romfs/lang/es.json
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@
"set_wireless_lan": "LAN inalámbrica activada",
"set_bluetooth": "Bluetooth activado",
"set_usb_30": "USB 3.0 activado",
"set_nfc": "NFC activado (amiibo)",
"set_nfc": "NFC activado",
"set_serial_no": "Número de serie del sistema",
"set_mac_addr": "Dirección MAC",
"set_ip_addr": "Dirección IP",
Expand Down
2 changes: 1 addition & 1 deletion projects/uMenu/romfs/lang/ko.json
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@
"set_wireless_lan": "무선 LAN 활성화됨",
"set_bluetooth": "블루투스 활성화됨",
"set_usb_30": "USB 3.0 활성화됨",
"set_nfc": "NFC 활성화됨 (amiibo)",
"set_nfc": "NFC 활성화됨",
"set_serial_no": "콘솔 시리얼 번호",
"set_mac_addr": "MAC 주소",
"set_ip_addr": "IP 주소",
Expand Down
2 changes: 1 addition & 1 deletion projects/uMenu/romfs/lang/pt-BR.json
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@
"set_wireless_lan": "Wireless LAN habilitado",
"set_bluetooth": "Bluetooth habilitado",
"set_usb_30": "USB 3.0 habilitado",
"set_nfc": "NFC habilitado (amiibo)",
"set_nfc": "NFC habilitado",
"set_serial_no": "Número de série do console",
"set_mac_addr": "Endereço MAC",
"set_ip_addr": "Endereço IP",
Expand Down

0 comments on commit f611ffc

Please sign in to comment.