Merge Luma launcher fork into monorepo
Move trampoline files (boot-hook, watcher, overlay) into trampoline/ subdirectory. Add upstream Luma v2.3.1 source at repo root with our additions: - Page::Ha (4th nav tab) with placeholder empty state - HA tab config schema and default entity mapping (ha-home/) - Nav keys renamed: "home" → "start", new "ha" tab between Apps and Settings - All state.rs/view.rs/main.rs/tests.rs updated for 4-tab navigation Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
1 parent
bc3ca0f3b9
commit
cbea5a322f
204 files changed
+25056
-65
No files matched your search
@@ -1,79 +1,40 @@
|
||||
# luma-home
|
||||
# Luma Home
|
||||
|
||||
Replaces the LG webOS Home screen with [Luma](https://github.com/ecklf/lg-luma) on webOS 5/6 TVs rooted via [Homebrew Channel](https://github.com/nicko88/LG-Homebrew).
|
||||
Fork of [Luma](https://github.com/ecklf/lg-luma) — a native launcher for rooted LG webOS TVs — with a Home Assistant integration tab and webOS 5/6 Home button support.
|
||||
|
||||
## How it works
|
||||
## What's different from upstream
|
||||
|
||||
LG Home (`com.webos.app.home`) is a native QML app. This project bind-mounts a transparent web page over its directory so SAM sees a web-type Home. The web page immediately calls `WebOSServiceBridge` to launch Luma. A background watcher provides a fallback redirect via `luna-send` subscription.
|
||||
- **Home Assistant tab** — a fourth nav tab ("Home") with glass cards for controlling HA entities (lights, climate, scenes, vacuum, etc.) directly from the TV remote
|
||||
- **webOS 5/6 Home trampoline** — bind-mount overlay that redirects the Home button to Luma on older webOS versions (see `trampoline/`)
|
||||
- **Settings app theme** — transparent overlay for the webOS Settings app (see `settings-theme/`)
|
||||
|
||||
### Components
|
||||
## Structure
|
||||
|
||||
| File | On TV at | Purpose |
|
||||
|------|----------|---------|
|
||||
| `overlay/appinfo.json` | `/media/developer/luma-home/overlay/` | Home manifest — web type, transparent, no splash |
|
||||
| `overlay/index.html` | same | Minimal page that launches Luma via WebOSServiceBridge |
|
||||
| `boot-hook.sh` | `/media/developer/luma-home/` | Homebrew Channel boot hook — mounts overlay, restarts SAM, launches Luma |
|
||||
| `watcher.sh` | same | Background watcher — subscribes to foreground events, redirects Home→Luma |
|
||||
| Directory | What |
|
||||
|-----------|------|
|
||||
| `src/` | Rust source (SDL2 + OpenGL ES 2 renderer) |
|
||||
| `assets/` | Generated artwork, fonts, wallpapers |
|
||||
| `ha-home/` | HA tab config schema and default config |
|
||||
| `trampoline/` | webOS 5/6 Home button redirect (boot hook, watcher, overlay) |
|
||||
| `settings-theme/` | Transparent Settings app theme |
|
||||
|
||||
### Boot flow
|
||||
## Building
|
||||
|
||||
1. Homebrew Channel runs `boot-hook.sh` at cold boot
|
||||
2. Bind-mount replaces `/usr/palm/applications/com.webos.app.home` (RAM only — reboot without the hook restores stock)
|
||||
3. SAM restarts and reads the web manifest
|
||||
4. Luma launches as the initial app
|
||||
5. Watcher starts in the background
|
||||
|
||||
### Home button flow
|
||||
|
||||
1. User presses Home → system opens `com.webos.app.home` (our transparent web page)
|
||||
2. `index.html` JS fires `WebOSServiceBridge` → launches Luma
|
||||
3. Watcher catches the foreground change as backup → also launches Luma
|
||||
|
||||
## Requirements
|
||||
|
||||
- LG webOS TV rooted with Homebrew Channel (tested on webOS 6.5.3)
|
||||
- Luma v2.1.0+ installed as `com.ecklf.luma`
|
||||
- Telnet or SSH access to the TV
|
||||
|
||||
## Install
|
||||
See `development.md` for the full build guide. Quick summary:
|
||||
|
||||
```sh
|
||||
# Copy files to TV
|
||||
scp -r overlay/ boot-hook.sh watcher.sh root@<TV_IP>:/media/developer/luma-home/
|
||||
|
||||
# SSH into TV and install the boot hook
|
||||
chmod +x /media/developer/luma-home/boot-hook.sh /media/developer/luma-home/watcher.sh
|
||||
ln -sf /media/developer/luma-home/boot-hook.sh /var/lib/webosbrew/init.d/10-luma-home
|
||||
|
||||
# Run it now (or reboot)
|
||||
sh /media/developer/luma-home/boot-hook.sh
|
||||
nix develop # enter the dev shell with cross-compilation toolchain
|
||||
pnpm install # install JS tooling for asset generation
|
||||
pnpm assets # generate native artwork
|
||||
cargo build --release --features webos --target armv7-unknown-linux-gnueabi
|
||||
```
|
||||
|
||||
## Uninstall
|
||||
## Target TV
|
||||
|
||||
```sh
|
||||
# Remove boot hook
|
||||
rm /var/lib/webosbrew/init.d/10-luma-home
|
||||
- LG 65NANO813PA, webOS 6.5.3-47
|
||||
- Rooted via Homebrew Channel v0.7.3
|
||||
- Luma installed as `com.ecklf.luma`
|
||||
|
||||
# Kill watcher
|
||||
kill $(cat /tmp/luma-watcher.pid 2>/dev/null)
|
||||
## License
|
||||
|
||||
# Unmount overlay (or just reboot)
|
||||
umount /usr/palm/applications/com.webos.app.home
|
||||
```
|
||||
|
||||
## Known limitations
|
||||
|
||||
- Brief visual transition when pressing Home (web page loads before Luma appears)
|
||||
- `blockSystemApp` API (used by Luma's built-in Home integration for webOS 25/26) does not exist on webOS 5/6, so we use `systemctl restart sam` instead
|
||||
- Native Home replacement (Luma binary as Home directly) does not work on webOS 6 — SAM handles native system apps differently
|
||||
|
||||
## Future
|
||||
|
||||
Fork Luma and patch `home.cjs` to support webOS 5/6 natively — replace the version check and `blockSystemApp` calls with the `systemctl restart sam` approach proven here.
|
||||
|
||||
## Tested on
|
||||
|
||||
- LG 65NANO813PA, webOS 6.5.3-47 (kisscurl-koli)
|
||||
- Luma v2.1.0
|
||||
- Homebrew Channel v0.7.3
|
||||
Upstream Luma is MIT licensed. See `license` file.
|
||||
Reference in new issue
Block a user