# Quest App Launcher [![Build](https://github.com/HooverHigh/QuestAppLauncher/actions/workflows/build.yml/badge.svg?branch=master)](https://github.com/HooverHigh/QuestAppLauncher/actions/workflows/build.yml) A VR home-screen replacement for Meta Quest 2, built in Unity by [oxmc](https://github.com/oxmc) for Hoover High School. Replaces the default Quest shell with a fully configurable app grid — custom icons, renamed apps, user-defined tabs, and automatic asset updates from any HTTP or GitHub source. ## Features - Scrollable grid of all installed apps, configurable rows × columns - Auto-categorized tabs (Quest / 2D) and user-defined custom tabs - App name overrides and custom icons via JSON or zip icon packs - Asset auto-update from GitHub releases or any plain HTTP endpoint — not just one source, any number of repos can be configured - Sort by alphabetical or most recently used - Configurable background skybox - Managed policy support for IT/MDM deployments (hidden apps, name overrides, wallpaper, disable settings) - Memory-efficient lazy icon loading — textures are loaded/unloaded based on scroll position ## Requirements - Meta Quest 2 - Unity (see `ProjectSettings/ProjectVersion.txt` for version) - Meta XR SDK (included via Package Manager) ## Building Builds are handled entirely by GitHub Actions — there is no local build command. - **`build.yml`** — runs tests (on master), builds the Android APK, uploads to GitHub Releases as `HooverHighQuestAppLauncher.apk` - **`activation.yml`** — manual trigger to request a Unity license activation file ## Source Structure | Path | Description | |------|-------------| | `Assets/Scenes/QuestAppLauncher.unity` | Main scene | | `Assets/Plugins/Android/AppInfo.java` | Android plugin: enumerates installed apps, extracts icons, reads usage stats via JNI | | `Assets/Scripts/` | C# scripts: grid layout, app processing, settings, downloads | | `Assets/OVRInputSelection/` | Controller ray input and pointer visualization | | `.github/workflows/` | CI build and license activation workflows | ## Configuration Settings are stored in `config.json` in the app's persistent data path on-device. The file is created with defaults on first run and can be pushed via `adb`: ```bash adb push config.json /sdcard/Android/data/dev.oxmc.QuestAppLauncher/files/ ``` Key settings: - **Grid size** — rows × columns (1–10 each) - **Sort mode** — `az` (alphabetical) or `mostRecent` - **Show 2D apps** — toggle non-VR apps on or off - **Auto category** — places Quest / 2D apps into auto tabs; position: `top`, `left`, `right`, or `off` - **Custom category** — user-defined tabs from `appnames.json`; same position options - **Background** — path to a skybox image, or `"default"` - **Auto update** — checks configured repos for new icon packs and app name files on startup - **Download repos** — list of asset sources; supports GitHub releases (`type: "github"`) and any plain HTTP manifest endpoint (`type: "http"`) — multiple sources can be combined ### Custom app names and icons Place `appnames.json` (or `appnames*.json`) in the persistent data path to rename apps and assign them to tabs. Place `iconpack*.zip` files (containing `.jpg` entries) or individual `.jpg` files to override icons. See [docs.md](docs.md) for the full format reference, all config fields, managed policy details, and useful `adb` commands. ## Credits - [tverona1](https://github.com/tverona1) — original creator - noxx — original app icon