From f0d2926872c595a951a813303e059e3b258647a8 Mon Sep 17 00:00:00 2001 From: Andrew Zambazos <62979495+Bobbybear007@users.noreply.github.com> Date: Thu, 21 May 2026 20:11:18 +1200 Subject: [PATCH] Add mode READMEs and move Bigscreen app Add comprehensive READMEs for Bigscreen and Desktop modes, and relocate the Tauri frontend prototype into a new Bigscreen/ subdirectory. This moves package.json/package-lock, src, src-tauri, assets, views, styles and related files into Bigscreen/ to separate the controller-first shell from top-level docs. Update the root README.md to reframe the project as "NebulaOS", describe Bigscreen/Desktop modes, the vision, tech stack and development notes. This reorganizes the repo layout for clearer mode separation and documentation. --- Bigscreen/README-Bigscreen.md | 305 ++++++++ .../package-lock.json | 0 package.json => Bigscreen/package.json | 0 {src-tauri => Bigscreen/src-tauri}/.gitignore | 0 {src-tauri => Bigscreen/src-tauri}/Cargo.lock | 0 {src-tauri => Bigscreen/src-tauri}/Cargo.toml | 0 {src-tauri => Bigscreen/src-tauri}/build.rs | 0 .../src-tauri}/capabilities/default.json | 0 .../src-tauri}/icons/128x128.png | Bin .../src-tauri}/icons/128x128@2x.png | Bin .../src-tauri}/icons/32x32.png | Bin .../src-tauri}/icons/Square107x107Logo.png | Bin .../src-tauri}/icons/Square142x142Logo.png | Bin .../src-tauri}/icons/Square150x150Logo.png | Bin .../src-tauri}/icons/Square284x284Logo.png | Bin .../src-tauri}/icons/Square30x30Logo.png | Bin .../src-tauri}/icons/Square310x310Logo.png | Bin .../src-tauri}/icons/Square44x44Logo.png | Bin .../src-tauri}/icons/Square71x71Logo.png | Bin .../src-tauri}/icons/Square89x89Logo.png | Bin .../src-tauri}/icons/StoreLogo.png | Bin .../src-tauri}/icons/icon.icns | Bin .../src-tauri}/icons/icon.ico | Bin .../src-tauri}/icons/icon.png | Bin {src-tauri => Bigscreen/src-tauri}/src/lib.rs | 0 .../src-tauri}/src/library/commands.rs | 0 .../src-tauri}/src/library/db.rs | 0 .../src-tauri}/src/library/images.rs | 0 .../src-tauri}/src/library/metadata/mod.rs | 0 .../src-tauri}/src/library/mod.rs | 0 .../src-tauri}/src/library/models.rs | 0 .../src-tauri}/src/library/scanners/epic.rs | 0 .../src-tauri}/src/library/scanners/gog.rs | 0 .../src-tauri}/src/library/scanners/local.rs | 0 .../src-tauri}/src/library/scanners/mod.rs | 0 .../src-tauri}/src/library/scanners/steam.rs | 0 .../src-tauri}/src/main.rs | 0 .../src-tauri}/src/storage.rs | 0 .../src-tauri}/tauri.conf.json | 0 {src => Bigscreen/src}/assets/javascript.svg | 0 {src => Bigscreen/src}/assets/tauri.svg | 0 {src => Bigscreen/src}/core/gamepadProfile.js | 0 {src => Bigscreen/src}/core/guideSidebar.js | 0 {src => Bigscreen/src}/core/input.js | 0 {src => Bigscreen/src}/core/nav.js | 0 {src => Bigscreen/src}/core/passkey.js | 0 {src => Bigscreen/src}/core/router.js | 0 {src => Bigscreen/src}/core/sidebarData.js | 0 {src => Bigscreen/src}/core/state.js | 0 {src => Bigscreen/src}/core/users.js | 0 {src => Bigscreen/src}/index.html | 0 {src => Bigscreen/src}/main.js | 0 {src => Bigscreen/src}/styles.css | 0 {src => Bigscreen/src}/styles/base.css | 0 {src => Bigscreen/src}/styles/components.css | 0 {src => Bigscreen/src}/styles/guide.css | 0 .../src}/styles/shell-guidelines.md | 0 {src => Bigscreen/src}/styles/theme.css | 0 {src => Bigscreen/src}/views/home/home.css | 0 {src => Bigscreen/src}/views/home/home.html | 0 {src => Bigscreen/src}/views/home/home.js | 0 .../src}/views/library/library.css | 0 .../src}/views/library/library.html | 0 .../src}/views/library/library.js | 0 .../src}/views/library/libraryBridge.js | 0 .../src}/views/library/libraryComponents.js | 0 .../src}/views/library/libraryController.js | 0 .../src}/views/library/libraryFilters.js | 0 .../src}/views/library/libraryModel.js | 0 {src => Bigscreen/src}/views/lock/lock.css | 0 {src => Bigscreen/src}/views/lock/lock.html | 0 {src => Bigscreen/src}/views/lock/lock.js | 0 .../src}/views/onboarding/userSetup.css | 0 .../src}/views/onboarding/userSetup.js | 0 .../src}/views/overlays/guidePanel.css | 0 .../src}/views/overlays/guidePanel.js | 0 .../src}/views/overlays/keyboard.css | 0 .../src}/views/overlays/keyboard.js | 0 .../src}/views/overlays/powerMenu.css | 0 .../src}/views/overlays/powerMenu.html | 0 .../src}/views/overlays/powerMenu.js | 0 .../src}/views/placeholder/placeholder.js | 0 .../src}/views/settings/settings.css | 0 .../src}/views/settings/settings.html | 0 .../src}/views/settings/settings.js | 0 Desktop/README-Desktop.md | 271 +++++++ README.md | 720 ++++++++++-------- 87 files changed, 974 insertions(+), 322 deletions(-) create mode 100644 Bigscreen/README-Bigscreen.md rename package-lock.json => Bigscreen/package-lock.json (100%) rename package.json => Bigscreen/package.json (100%) rename {src-tauri => Bigscreen/src-tauri}/.gitignore (100%) rename {src-tauri => Bigscreen/src-tauri}/Cargo.lock (100%) rename {src-tauri => Bigscreen/src-tauri}/Cargo.toml (100%) rename {src-tauri => Bigscreen/src-tauri}/build.rs (100%) rename {src-tauri => Bigscreen/src-tauri}/capabilities/default.json (100%) rename {src-tauri => Bigscreen/src-tauri}/icons/128x128.png (100%) rename {src-tauri => Bigscreen/src-tauri}/icons/128x128@2x.png (100%) rename {src-tauri => Bigscreen/src-tauri}/icons/32x32.png (100%) rename {src-tauri => Bigscreen/src-tauri}/icons/Square107x107Logo.png (100%) rename {src-tauri => Bigscreen/src-tauri}/icons/Square142x142Logo.png (100%) rename {src-tauri => Bigscreen/src-tauri}/icons/Square150x150Logo.png (100%) rename {src-tauri => Bigscreen/src-tauri}/icons/Square284x284Logo.png (100%) rename {src-tauri => Bigscreen/src-tauri}/icons/Square30x30Logo.png (100%) rename {src-tauri => Bigscreen/src-tauri}/icons/Square310x310Logo.png (100%) rename {src-tauri => Bigscreen/src-tauri}/icons/Square44x44Logo.png (100%) rename {src-tauri => Bigscreen/src-tauri}/icons/Square71x71Logo.png (100%) rename {src-tauri => Bigscreen/src-tauri}/icons/Square89x89Logo.png (100%) rename {src-tauri => Bigscreen/src-tauri}/icons/StoreLogo.png (100%) rename {src-tauri => Bigscreen/src-tauri}/icons/icon.icns (100%) rename {src-tauri => Bigscreen/src-tauri}/icons/icon.ico (100%) rename {src-tauri => Bigscreen/src-tauri}/icons/icon.png (100%) rename {src-tauri => Bigscreen/src-tauri}/src/lib.rs (100%) rename {src-tauri => Bigscreen/src-tauri}/src/library/commands.rs (100%) rename {src-tauri => Bigscreen/src-tauri}/src/library/db.rs (100%) rename {src-tauri => Bigscreen/src-tauri}/src/library/images.rs (100%) rename {src-tauri => Bigscreen/src-tauri}/src/library/metadata/mod.rs (100%) rename {src-tauri => Bigscreen/src-tauri}/src/library/mod.rs (100%) rename {src-tauri => Bigscreen/src-tauri}/src/library/models.rs (100%) rename {src-tauri => Bigscreen/src-tauri}/src/library/scanners/epic.rs (100%) rename {src-tauri => Bigscreen/src-tauri}/src/library/scanners/gog.rs (100%) rename {src-tauri => Bigscreen/src-tauri}/src/library/scanners/local.rs (100%) rename {src-tauri => Bigscreen/src-tauri}/src/library/scanners/mod.rs (100%) rename {src-tauri => Bigscreen/src-tauri}/src/library/scanners/steam.rs (100%) rename {src-tauri => Bigscreen/src-tauri}/src/main.rs (100%) rename {src-tauri => Bigscreen/src-tauri}/src/storage.rs (100%) rename {src-tauri => Bigscreen/src-tauri}/tauri.conf.json (100%) rename {src => Bigscreen/src}/assets/javascript.svg (100%) rename {src => Bigscreen/src}/assets/tauri.svg (100%) rename {src => Bigscreen/src}/core/gamepadProfile.js (100%) rename {src => Bigscreen/src}/core/guideSidebar.js (100%) rename {src => Bigscreen/src}/core/input.js (100%) rename {src => Bigscreen/src}/core/nav.js (100%) rename {src => Bigscreen/src}/core/passkey.js (100%) rename {src => Bigscreen/src}/core/router.js (100%) rename {src => Bigscreen/src}/core/sidebarData.js (100%) rename {src => Bigscreen/src}/core/state.js (100%) rename {src => Bigscreen/src}/core/users.js (100%) rename {src => Bigscreen/src}/index.html (100%) rename {src => Bigscreen/src}/main.js (100%) rename {src => Bigscreen/src}/styles.css (100%) rename {src => Bigscreen/src}/styles/base.css (100%) rename {src => Bigscreen/src}/styles/components.css (100%) rename {src => Bigscreen/src}/styles/guide.css (100%) rename {src => Bigscreen/src}/styles/shell-guidelines.md (100%) rename {src => Bigscreen/src}/styles/theme.css (100%) rename {src => Bigscreen/src}/views/home/home.css (100%) rename {src => Bigscreen/src}/views/home/home.html (100%) rename {src => Bigscreen/src}/views/home/home.js (100%) rename {src => Bigscreen/src}/views/library/library.css (100%) rename {src => Bigscreen/src}/views/library/library.html (100%) rename {src => Bigscreen/src}/views/library/library.js (100%) rename {src => Bigscreen/src}/views/library/libraryBridge.js (100%) rename {src => Bigscreen/src}/views/library/libraryComponents.js (100%) rename {src => Bigscreen/src}/views/library/libraryController.js (100%) rename {src => Bigscreen/src}/views/library/libraryFilters.js (100%) rename {src => Bigscreen/src}/views/library/libraryModel.js (100%) rename {src => Bigscreen/src}/views/lock/lock.css (100%) rename {src => Bigscreen/src}/views/lock/lock.html (100%) rename {src => Bigscreen/src}/views/lock/lock.js (100%) rename {src => Bigscreen/src}/views/onboarding/userSetup.css (100%) rename {src => Bigscreen/src}/views/onboarding/userSetup.js (100%) rename {src => Bigscreen/src}/views/overlays/guidePanel.css (100%) rename {src => Bigscreen/src}/views/overlays/guidePanel.js (100%) rename {src => Bigscreen/src}/views/overlays/keyboard.css (100%) rename {src => Bigscreen/src}/views/overlays/keyboard.js (100%) rename {src => Bigscreen/src}/views/overlays/powerMenu.css (100%) rename {src => Bigscreen/src}/views/overlays/powerMenu.html (100%) rename {src => Bigscreen/src}/views/overlays/powerMenu.js (100%) rename {src => Bigscreen/src}/views/placeholder/placeholder.js (100%) rename {src => Bigscreen/src}/views/settings/settings.css (100%) rename {src => Bigscreen/src}/views/settings/settings.html (100%) rename {src => Bigscreen/src}/views/settings/settings.js (100%) create mode 100644 Desktop/README-Desktop.md diff --git a/Bigscreen/README-Bigscreen.md b/Bigscreen/README-Bigscreen.md new file mode 100644 index 0000000..0f6c555 --- /dev/null +++ b/Bigscreen/README-Bigscreen.md @@ -0,0 +1,305 @@ +# NebulaOS Bigscreen Mode + +Bigscreen Mode is the controller-first console interface for NebulaOS. + +It is designed for gaming PCs, handhelds, TVs, and couch-based setups where the primary input is a controller rather than a mouse and keyboard. + +Bigscreen Mode should feel like the main dashboard of a console, but with the freedom of a Linux PC underneath. + +--- + +## Purpose + +Bigscreen Mode exists to make NebulaOS feel native on gaming hardware. + +It provides: + +* A controller-first home screen +* A game and app library +* System settings +* Power controls +* Profile and lock screen flows +* Store and launcher integrations +* A fullscreen interface for TV and handheld use + +The goal is not to copy Steam Big Picture or Xbox exactly. + +The goal is to create an open, polished, flexible OS shell that feels good to use with a controller. + +--- + +## Current Features + +The current v0 prototype includes: + +* Lock screen with PIN keypad +* Controller and keyboard input support +* Home dashboard +* Library stub +* Settings stub +* Power overlay +* Controller focus management +* Keyboard mirror controls for development +* Xbox-inspired horizontal tile layout +* Dynamic nebula background stack +* Smooth focus transitions +* Shared top bar with profile and time display + +--- + +## Input Model + +Bigscreen Mode uses unified input actions instead of raw button handling. + +Core actions: + +```text +up +down +left +right +accept +back +menu +``` + +These actions can come from: + +* Controller D-pad +* Controller left stick +* Controller face buttons +* Keyboard arrow keys +* Enter +* Escape +* Backspace + +This keeps the UI consistent across controllers, keyboards, and future input devices. + +--- + +## Controller Mapping + +```text +D-pad / left stick: Navigate +A: Accept +B: Back +Start: Menu +``` + +Future mappings may include: + +```text +LB / RB: Switch tabs or rails +LT / RT: Page navigation +Guide button: Nebula overlay +Y: Search +X: Context action +``` + +--- + +## Design Goals + +Bigscreen Mode should be: + +* Fast +* Clear +* Controller-first +* Readable from a distance +* Comfortable on TVs +* Comfortable on handheld screens +* Smooth and polished +* Visually distinct from desktop Linux +* Easy to navigate without a mouse + +--- + +## UI Structure + +Bigscreen Mode is planned around the following major areas: + +```text +Bigscreen Mode +├── Lock Screen +├── Home +├── Library +├── Store +├── Apps +├── Settings +├── Downloads +├── Notifications +├── Power Menu +└── Profile Menu +``` + +--- + +## Home + +The Home screen is the main landing area. + +It should include: + +* Recent games +* Installed games +* Featured apps +* Continue playing section +* Quick settings +* Profile status +* Time and network status +* Download status +* Power menu access + +The current prototype uses a horizontal app tile rail with Library, Settings, and Power tiles. + +--- + +## Library + +The Library is the game and app management area. + +Initial v0 scope: + +* Display mock entries +* Display locally added games +* Launch local executables +* Store metadata locally +* Support controller navigation +* Separate games from apps + +Future scope: + +* Steam integration +* GOG integration +* Epic Games integration +* Proton and Wine configuration +* Per-game settings +* Save sync support +* Mod manager integration +* Metadata and artwork scraping + +--- + +## Settings + +Settings should expose system controls in a controller-friendly way. + +Planned categories: + +* Network +* Bluetooth +* Audio +* Display +* Controller +* Storage +* Accounts +* Appearance +* Updates +* System +* Desktop Mode + +The settings UI should avoid feeling like a desktop control panel. +It should feel like a native console settings app. + +--- + +## Lock Screen + +The lock screen currently supports a v0 PIN keypad. + +Current v0 PIN: + +```text +1234 +``` + +Future improvements: + +* User profiles +* Custom PINs +* Avatar selection +* Local account linking +* Parental controls +* Optional password fallback +* Automatic login into Bigscreen profile + +--- + +## Power Menu + +The power overlay should support: + +* Sleep +* Restart +* Shut down +* Log out +* Switch to Desktop Mode +* Return to login +* Restart Bigscreen shell + +Current v0 scope includes a power overlay that traps focus and closes with Back. + +--- + +## Technology + +Bigscreen Mode is built with: + +* Tauri +* HTML +* CSS +* JavaScript +* Rust backend through Tauri +* Web Gamepad API +* Nebula Core adapters + +--- + +## Run + +From the root of the repository: + +```bash +npm install +npm run dev +``` + +--- + +## Build + +```bash +npm run build +``` + +--- + +## Development Notes + +Bigscreen Mode is currently developed primarily on Windows for faster UI iteration. + +Linux testing is still required for: + +* Fullscreen behavior +* Session integration +* Controller detection +* System commands +* App launching +* Proton and Wine workflows +* Power controls + +--- + +## Success Criteria + +Bigscreen Mode is successful when: + +* The entire interface works with a controller +* Users can unlock the system +* Users can navigate Home +* Users can open Library +* Users can open Settings +* Users can launch games or apps +* Users can access power controls +* Users can switch to Desktop Mode +* The UI feels like a native OS shell, not a web app diff --git a/package-lock.json b/Bigscreen/package-lock.json similarity index 100% rename from package-lock.json rename to Bigscreen/package-lock.json diff --git a/package.json b/Bigscreen/package.json similarity index 100% rename from package.json rename to Bigscreen/package.json diff --git a/src-tauri/.gitignore b/Bigscreen/src-tauri/.gitignore similarity index 100% rename from src-tauri/.gitignore rename to Bigscreen/src-tauri/.gitignore diff --git a/src-tauri/Cargo.lock b/Bigscreen/src-tauri/Cargo.lock similarity index 100% rename from src-tauri/Cargo.lock rename to Bigscreen/src-tauri/Cargo.lock diff --git a/src-tauri/Cargo.toml b/Bigscreen/src-tauri/Cargo.toml similarity index 100% rename from src-tauri/Cargo.toml rename to Bigscreen/src-tauri/Cargo.toml diff --git a/src-tauri/build.rs b/Bigscreen/src-tauri/build.rs similarity index 100% rename from src-tauri/build.rs rename to Bigscreen/src-tauri/build.rs diff --git a/src-tauri/capabilities/default.json b/Bigscreen/src-tauri/capabilities/default.json similarity index 100% rename from src-tauri/capabilities/default.json rename to Bigscreen/src-tauri/capabilities/default.json diff --git a/src-tauri/icons/128x128.png b/Bigscreen/src-tauri/icons/128x128.png similarity index 100% rename from src-tauri/icons/128x128.png rename to Bigscreen/src-tauri/icons/128x128.png diff --git a/src-tauri/icons/128x128@2x.png b/Bigscreen/src-tauri/icons/128x128@2x.png similarity index 100% rename from src-tauri/icons/128x128@2x.png rename to Bigscreen/src-tauri/icons/128x128@2x.png diff --git a/src-tauri/icons/32x32.png b/Bigscreen/src-tauri/icons/32x32.png similarity index 100% rename from src-tauri/icons/32x32.png rename to Bigscreen/src-tauri/icons/32x32.png diff --git a/src-tauri/icons/Square107x107Logo.png b/Bigscreen/src-tauri/icons/Square107x107Logo.png similarity index 100% rename from src-tauri/icons/Square107x107Logo.png rename to Bigscreen/src-tauri/icons/Square107x107Logo.png diff --git a/src-tauri/icons/Square142x142Logo.png b/Bigscreen/src-tauri/icons/Square142x142Logo.png similarity index 100% rename from src-tauri/icons/Square142x142Logo.png rename to Bigscreen/src-tauri/icons/Square142x142Logo.png diff --git a/src-tauri/icons/Square150x150Logo.png b/Bigscreen/src-tauri/icons/Square150x150Logo.png similarity index 100% rename from src-tauri/icons/Square150x150Logo.png rename to Bigscreen/src-tauri/icons/Square150x150Logo.png diff --git a/src-tauri/icons/Square284x284Logo.png b/Bigscreen/src-tauri/icons/Square284x284Logo.png similarity index 100% rename from src-tauri/icons/Square284x284Logo.png rename to Bigscreen/src-tauri/icons/Square284x284Logo.png diff --git a/src-tauri/icons/Square30x30Logo.png b/Bigscreen/src-tauri/icons/Square30x30Logo.png similarity index 100% rename from src-tauri/icons/Square30x30Logo.png rename to Bigscreen/src-tauri/icons/Square30x30Logo.png diff --git a/src-tauri/icons/Square310x310Logo.png b/Bigscreen/src-tauri/icons/Square310x310Logo.png similarity index 100% rename from src-tauri/icons/Square310x310Logo.png rename to Bigscreen/src-tauri/icons/Square310x310Logo.png diff --git a/src-tauri/icons/Square44x44Logo.png b/Bigscreen/src-tauri/icons/Square44x44Logo.png similarity index 100% rename from src-tauri/icons/Square44x44Logo.png rename to Bigscreen/src-tauri/icons/Square44x44Logo.png diff --git a/src-tauri/icons/Square71x71Logo.png b/Bigscreen/src-tauri/icons/Square71x71Logo.png similarity index 100% rename from src-tauri/icons/Square71x71Logo.png rename to Bigscreen/src-tauri/icons/Square71x71Logo.png diff --git a/src-tauri/icons/Square89x89Logo.png b/Bigscreen/src-tauri/icons/Square89x89Logo.png similarity index 100% rename from src-tauri/icons/Square89x89Logo.png rename to Bigscreen/src-tauri/icons/Square89x89Logo.png diff --git a/src-tauri/icons/StoreLogo.png b/Bigscreen/src-tauri/icons/StoreLogo.png similarity index 100% rename from src-tauri/icons/StoreLogo.png rename to Bigscreen/src-tauri/icons/StoreLogo.png diff --git a/src-tauri/icons/icon.icns b/Bigscreen/src-tauri/icons/icon.icns similarity index 100% rename from src-tauri/icons/icon.icns rename to Bigscreen/src-tauri/icons/icon.icns diff --git a/src-tauri/icons/icon.ico b/Bigscreen/src-tauri/icons/icon.ico similarity index 100% rename from src-tauri/icons/icon.ico rename to Bigscreen/src-tauri/icons/icon.ico diff --git a/src-tauri/icons/icon.png b/Bigscreen/src-tauri/icons/icon.png similarity index 100% rename from src-tauri/icons/icon.png rename to Bigscreen/src-tauri/icons/icon.png diff --git a/src-tauri/src/lib.rs b/Bigscreen/src-tauri/src/lib.rs similarity index 100% rename from src-tauri/src/lib.rs rename to Bigscreen/src-tauri/src/lib.rs diff --git a/src-tauri/src/library/commands.rs b/Bigscreen/src-tauri/src/library/commands.rs similarity index 100% rename from src-tauri/src/library/commands.rs rename to Bigscreen/src-tauri/src/library/commands.rs diff --git a/src-tauri/src/library/db.rs b/Bigscreen/src-tauri/src/library/db.rs similarity index 100% rename from src-tauri/src/library/db.rs rename to Bigscreen/src-tauri/src/library/db.rs diff --git a/src-tauri/src/library/images.rs b/Bigscreen/src-tauri/src/library/images.rs similarity index 100% rename from src-tauri/src/library/images.rs rename to Bigscreen/src-tauri/src/library/images.rs diff --git a/src-tauri/src/library/metadata/mod.rs b/Bigscreen/src-tauri/src/library/metadata/mod.rs similarity index 100% rename from src-tauri/src/library/metadata/mod.rs rename to Bigscreen/src-tauri/src/library/metadata/mod.rs diff --git a/src-tauri/src/library/mod.rs b/Bigscreen/src-tauri/src/library/mod.rs similarity index 100% rename from src-tauri/src/library/mod.rs rename to Bigscreen/src-tauri/src/library/mod.rs diff --git a/src-tauri/src/library/models.rs b/Bigscreen/src-tauri/src/library/models.rs similarity index 100% rename from src-tauri/src/library/models.rs rename to Bigscreen/src-tauri/src/library/models.rs diff --git a/src-tauri/src/library/scanners/epic.rs b/Bigscreen/src-tauri/src/library/scanners/epic.rs similarity index 100% rename from src-tauri/src/library/scanners/epic.rs rename to Bigscreen/src-tauri/src/library/scanners/epic.rs diff --git a/src-tauri/src/library/scanners/gog.rs b/Bigscreen/src-tauri/src/library/scanners/gog.rs similarity index 100% rename from src-tauri/src/library/scanners/gog.rs rename to Bigscreen/src-tauri/src/library/scanners/gog.rs diff --git a/src-tauri/src/library/scanners/local.rs b/Bigscreen/src-tauri/src/library/scanners/local.rs similarity index 100% rename from src-tauri/src/library/scanners/local.rs rename to Bigscreen/src-tauri/src/library/scanners/local.rs diff --git a/src-tauri/src/library/scanners/mod.rs b/Bigscreen/src-tauri/src/library/scanners/mod.rs similarity index 100% rename from src-tauri/src/library/scanners/mod.rs rename to Bigscreen/src-tauri/src/library/scanners/mod.rs diff --git a/src-tauri/src/library/scanners/steam.rs b/Bigscreen/src-tauri/src/library/scanners/steam.rs similarity index 100% rename from src-tauri/src/library/scanners/steam.rs rename to Bigscreen/src-tauri/src/library/scanners/steam.rs diff --git a/src-tauri/src/main.rs b/Bigscreen/src-tauri/src/main.rs similarity index 100% rename from src-tauri/src/main.rs rename to Bigscreen/src-tauri/src/main.rs diff --git a/src-tauri/src/storage.rs b/Bigscreen/src-tauri/src/storage.rs similarity index 100% rename from src-tauri/src/storage.rs rename to Bigscreen/src-tauri/src/storage.rs diff --git a/src-tauri/tauri.conf.json b/Bigscreen/src-tauri/tauri.conf.json similarity index 100% rename from src-tauri/tauri.conf.json rename to Bigscreen/src-tauri/tauri.conf.json diff --git a/src/assets/javascript.svg b/Bigscreen/src/assets/javascript.svg similarity index 100% rename from src/assets/javascript.svg rename to Bigscreen/src/assets/javascript.svg diff --git a/src/assets/tauri.svg b/Bigscreen/src/assets/tauri.svg similarity index 100% rename from src/assets/tauri.svg rename to Bigscreen/src/assets/tauri.svg diff --git a/src/core/gamepadProfile.js b/Bigscreen/src/core/gamepadProfile.js similarity index 100% rename from src/core/gamepadProfile.js rename to Bigscreen/src/core/gamepadProfile.js diff --git a/src/core/guideSidebar.js b/Bigscreen/src/core/guideSidebar.js similarity index 100% rename from src/core/guideSidebar.js rename to Bigscreen/src/core/guideSidebar.js diff --git a/src/core/input.js b/Bigscreen/src/core/input.js similarity index 100% rename from src/core/input.js rename to Bigscreen/src/core/input.js diff --git a/src/core/nav.js b/Bigscreen/src/core/nav.js similarity index 100% rename from src/core/nav.js rename to Bigscreen/src/core/nav.js diff --git a/src/core/passkey.js b/Bigscreen/src/core/passkey.js similarity index 100% rename from src/core/passkey.js rename to Bigscreen/src/core/passkey.js diff --git a/src/core/router.js b/Bigscreen/src/core/router.js similarity index 100% rename from src/core/router.js rename to Bigscreen/src/core/router.js diff --git a/src/core/sidebarData.js b/Bigscreen/src/core/sidebarData.js similarity index 100% rename from src/core/sidebarData.js rename to Bigscreen/src/core/sidebarData.js diff --git a/src/core/state.js b/Bigscreen/src/core/state.js similarity index 100% rename from src/core/state.js rename to Bigscreen/src/core/state.js diff --git a/src/core/users.js b/Bigscreen/src/core/users.js similarity index 100% rename from src/core/users.js rename to Bigscreen/src/core/users.js diff --git a/src/index.html b/Bigscreen/src/index.html similarity index 100% rename from src/index.html rename to Bigscreen/src/index.html diff --git a/src/main.js b/Bigscreen/src/main.js similarity index 100% rename from src/main.js rename to Bigscreen/src/main.js diff --git a/src/styles.css b/Bigscreen/src/styles.css similarity index 100% rename from src/styles.css rename to Bigscreen/src/styles.css diff --git a/src/styles/base.css b/Bigscreen/src/styles/base.css similarity index 100% rename from src/styles/base.css rename to Bigscreen/src/styles/base.css diff --git a/src/styles/components.css b/Bigscreen/src/styles/components.css similarity index 100% rename from src/styles/components.css rename to Bigscreen/src/styles/components.css diff --git a/src/styles/guide.css b/Bigscreen/src/styles/guide.css similarity index 100% rename from src/styles/guide.css rename to Bigscreen/src/styles/guide.css diff --git a/src/styles/shell-guidelines.md b/Bigscreen/src/styles/shell-guidelines.md similarity index 100% rename from src/styles/shell-guidelines.md rename to Bigscreen/src/styles/shell-guidelines.md diff --git a/src/styles/theme.css b/Bigscreen/src/styles/theme.css similarity index 100% rename from src/styles/theme.css rename to Bigscreen/src/styles/theme.css diff --git a/src/views/home/home.css b/Bigscreen/src/views/home/home.css similarity index 100% rename from src/views/home/home.css rename to Bigscreen/src/views/home/home.css diff --git a/src/views/home/home.html b/Bigscreen/src/views/home/home.html similarity index 100% rename from src/views/home/home.html rename to Bigscreen/src/views/home/home.html diff --git a/src/views/home/home.js b/Bigscreen/src/views/home/home.js similarity index 100% rename from src/views/home/home.js rename to Bigscreen/src/views/home/home.js diff --git a/src/views/library/library.css b/Bigscreen/src/views/library/library.css similarity index 100% rename from src/views/library/library.css rename to Bigscreen/src/views/library/library.css diff --git a/src/views/library/library.html b/Bigscreen/src/views/library/library.html similarity index 100% rename from src/views/library/library.html rename to Bigscreen/src/views/library/library.html diff --git a/src/views/library/library.js b/Bigscreen/src/views/library/library.js similarity index 100% rename from src/views/library/library.js rename to Bigscreen/src/views/library/library.js diff --git a/src/views/library/libraryBridge.js b/Bigscreen/src/views/library/libraryBridge.js similarity index 100% rename from src/views/library/libraryBridge.js rename to Bigscreen/src/views/library/libraryBridge.js diff --git a/src/views/library/libraryComponents.js b/Bigscreen/src/views/library/libraryComponents.js similarity index 100% rename from src/views/library/libraryComponents.js rename to Bigscreen/src/views/library/libraryComponents.js diff --git a/src/views/library/libraryController.js b/Bigscreen/src/views/library/libraryController.js similarity index 100% rename from src/views/library/libraryController.js rename to Bigscreen/src/views/library/libraryController.js diff --git a/src/views/library/libraryFilters.js b/Bigscreen/src/views/library/libraryFilters.js similarity index 100% rename from src/views/library/libraryFilters.js rename to Bigscreen/src/views/library/libraryFilters.js diff --git a/src/views/library/libraryModel.js b/Bigscreen/src/views/library/libraryModel.js similarity index 100% rename from src/views/library/libraryModel.js rename to Bigscreen/src/views/library/libraryModel.js diff --git a/src/views/lock/lock.css b/Bigscreen/src/views/lock/lock.css similarity index 100% rename from src/views/lock/lock.css rename to Bigscreen/src/views/lock/lock.css diff --git a/src/views/lock/lock.html b/Bigscreen/src/views/lock/lock.html similarity index 100% rename from src/views/lock/lock.html rename to Bigscreen/src/views/lock/lock.html diff --git a/src/views/lock/lock.js b/Bigscreen/src/views/lock/lock.js similarity index 100% rename from src/views/lock/lock.js rename to Bigscreen/src/views/lock/lock.js diff --git a/src/views/onboarding/userSetup.css b/Bigscreen/src/views/onboarding/userSetup.css similarity index 100% rename from src/views/onboarding/userSetup.css rename to Bigscreen/src/views/onboarding/userSetup.css diff --git a/src/views/onboarding/userSetup.js b/Bigscreen/src/views/onboarding/userSetup.js similarity index 100% rename from src/views/onboarding/userSetup.js rename to Bigscreen/src/views/onboarding/userSetup.js diff --git a/src/views/overlays/guidePanel.css b/Bigscreen/src/views/overlays/guidePanel.css similarity index 100% rename from src/views/overlays/guidePanel.css rename to Bigscreen/src/views/overlays/guidePanel.css diff --git a/src/views/overlays/guidePanel.js b/Bigscreen/src/views/overlays/guidePanel.js similarity index 100% rename from src/views/overlays/guidePanel.js rename to Bigscreen/src/views/overlays/guidePanel.js diff --git a/src/views/overlays/keyboard.css b/Bigscreen/src/views/overlays/keyboard.css similarity index 100% rename from src/views/overlays/keyboard.css rename to Bigscreen/src/views/overlays/keyboard.css diff --git a/src/views/overlays/keyboard.js b/Bigscreen/src/views/overlays/keyboard.js similarity index 100% rename from src/views/overlays/keyboard.js rename to Bigscreen/src/views/overlays/keyboard.js diff --git a/src/views/overlays/powerMenu.css b/Bigscreen/src/views/overlays/powerMenu.css similarity index 100% rename from src/views/overlays/powerMenu.css rename to Bigscreen/src/views/overlays/powerMenu.css diff --git a/src/views/overlays/powerMenu.html b/Bigscreen/src/views/overlays/powerMenu.html similarity index 100% rename from src/views/overlays/powerMenu.html rename to Bigscreen/src/views/overlays/powerMenu.html diff --git a/src/views/overlays/powerMenu.js b/Bigscreen/src/views/overlays/powerMenu.js similarity index 100% rename from src/views/overlays/powerMenu.js rename to Bigscreen/src/views/overlays/powerMenu.js diff --git a/src/views/placeholder/placeholder.js b/Bigscreen/src/views/placeholder/placeholder.js similarity index 100% rename from src/views/placeholder/placeholder.js rename to Bigscreen/src/views/placeholder/placeholder.js diff --git a/src/views/settings/settings.css b/Bigscreen/src/views/settings/settings.css similarity index 100% rename from src/views/settings/settings.css rename to Bigscreen/src/views/settings/settings.css diff --git a/src/views/settings/settings.html b/Bigscreen/src/views/settings/settings.html similarity index 100% rename from src/views/settings/settings.html rename to Bigscreen/src/views/settings/settings.html diff --git a/src/views/settings/settings.js b/Bigscreen/src/views/settings/settings.js similarity index 100% rename from src/views/settings/settings.js rename to Bigscreen/src/views/settings/settings.js diff --git a/Desktop/README-Desktop.md b/Desktop/README-Desktop.md new file mode 100644 index 0000000..aa6492e --- /dev/null +++ b/Desktop/README-Desktop.md @@ -0,0 +1,271 @@ +# NebulaOS Desktop Mode + +Desktop Mode is the full Linux desktop experience for NebulaOS. + +It exists because NebulaOS should not only be a console-style interface. +It should also be a capable desktop operating system when the user needs one. + +Bigscreen Mode is for controller-first gaming and media. +Desktop Mode is for everything else. + +--- + +## Purpose + +Desktop Mode gives users access to a normal computer environment. + +It is designed for: + +* File management +* Web browsing +* Productivity +* Development +* Modding +* Troubleshooting +* Advanced settings +* Desktop gaming +* App management +* System maintenance + +NebulaOS should feel simple in Bigscreen Mode, but never locked down. + +Desktop Mode is what keeps NebulaOS flexible. + +--- + +## Recommended Foundation + +The recommended Desktop Mode foundation is: + +* Linux +* KDE Plasma +* SDDM +* Wayland where possible +* X11 fallback where needed +* Custom Nebula theme +* Custom Nebula session entries + +KDE Plasma is recommended because it is: + +* Highly customizable +* Friendly to Linux gaming workflows +* Themeable +* Mature +* Flexible +* Suitable for both desktop and handheld layouts + +--- + +## Design Direction + +Desktop Mode should feel: + +* Clean +* Smooth +* Modern +* Minimal +* Polished +* Fast +* Familiar +* Slightly futuristic + +The design should take inspiration from the clarity and polish of macOS while keeping the flexibility and openness of Linux. + +NebulaOS Desktop Mode should not look like a generic KDE install forever. +The long-term goal is to make it feel like a distinct Nebula desktop experience. + +--- + +## Desktop Mode Responsibilities + +Desktop Mode should provide: + +* File manager access +* Browser access +* Terminal access +* App launcher +* System settings +* Development tools +* Game modding tools +* Desktop game launching +* Access to Bigscreen Mode +* Advanced troubleshooting tools + +--- + +## Relationship to Bigscreen Mode + +NebulaOS has two main sessions: + +```text +Nebula Bigscreen +Nebula Desktop +``` + +### Bigscreen Mode + +Used for: + +* Controller navigation +* Game launching +* TV use +* Handheld use +* Couch workflows +* Simple settings +* Console-like experience + +### Desktop Mode + +Used for: + +* Mouse and keyboard use +* Advanced configuration +* Development +* File browsing +* Modding +* Productivity +* Troubleshooting + +Both modes should feel connected, but they should not try to do the same job. + +--- + +## Session Switching + +Long-term, NebulaOS should allow users to switch between modes easily. + +Possible flows: + +```text +Bigscreen Mode → Power Menu → Switch to Desktop Mode +Desktop Mode → App Launcher → Return to Bigscreen Mode +Login Screen → Choose Nebula Bigscreen or Nebula Desktop +``` + +The user should never feel trapped in either mode. + +--- + +## KDE Customization Goals + +Desktop Mode customization may include: + +* Nebula global theme +* Nebula icon theme +* Nebula cursor theme +* Nebula wallpaper set +* Custom SDDM theme +* Custom splash screen +* Custom panel layout +* Custom application launcher +* Custom desktop widgets +* Preinstalled Nebula apps +* Desktop shortcut for Bigscreen Mode + +--- + +## Suggested Desktop Layout + +A possible default layout: + +```text +Top panel +├── App launcher +├── Active window title +├── System tray +├── Network +├── Audio +├── Battery +└── Clock + +Desktop +├── Nebula wallpaper +├── Minimal icons +└── Optional widgets + +Dock or bottom panel +├── Browser +├── Files +├── Terminal +├── Settings +├── Nebula Bigscreen +└── Nebula Library +``` + +--- + +## Visual Identity + +Desktop Mode should share visual DNA with Bigscreen Mode. + +Shared elements may include: + +* Nebula gradients +* Deep blue and purple tones +* Soft glass panels +* Rounded corners +* Subtle glow +* Clean typography +* Space-inspired wallpapers +* Calm animation +* Consistent icon language + +Desktop Mode should be calmer and more practical than Bigscreen Mode, but still recognizably Nebula. + +--- + +## System Tools + +Desktop Mode may eventually include Nebula-specific tools such as: + +* Nebula Control Center +* Nebula Update Manager +* Nebula Library desktop app +* Nebula Browser +* Nebula Store +* Nebula Settings bridge +* Nebula account/profile manager +* Nebula system diagnostics + +--- + +## Development Goals + +Initial Desktop Mode goals: + +* Pick KDE Plasma as the base +* Create a Nebula desktop theme +* Create a Nebula SDDM login theme +* Add Bigscreen and Desktop sessions +* Add a launcher shortcut back into Bigscreen Mode +* Keep normal Linux tools available +* Avoid breaking standard KDE functionality + +--- + +## What Desktop Mode Should Avoid + +Desktop Mode should avoid: + +* Removing normal Linux functionality +* Hiding important system tools +* Making KDE harder to use +* Becoming too console-like +* Depending on Bigscreen Mode to function +* Locking users into one workflow + +Desktop Mode should be powerful, normal, and clean. + +--- + +## Success Criteria + +Desktop Mode is successful when: + +* Users can use NebulaOS like a normal Linux desktop +* KDE feels visually integrated with NebulaOS +* Bigscreen Mode can be launched easily +* Advanced settings are accessible +* Development and troubleshooting are possible +* The desktop feels polished instead of temporary +* The system still feels like one unified OS diff --git a/README.md b/README.md index df3731b..4453d1e 100644 --- a/README.md +++ b/README.md @@ -1,51 +1,290 @@ -# Nebula OS v0 – Windows-first Development Plan +# NebulaOS -## Nebula OS Prototype (Current) +NebulaOS is an open source Linux-based operating system experience built around two modes: -This repository now includes a working v0 Nebula OS prototype in the Tauri frontend (`src/`) with: +1. **Bigscreen Mode**: a controller-first console-style interface for games, apps, media, settings, and system navigation. +2. **Desktop Mode**: a clean KDE-based desktop experience for productivity, development, file management, and advanced system control. -- Lock Screen with controller/keyboard PIN keypad (`1234` for v0) -- Home dashboard tile grid (Library, Settings, Power) -- Settings split-pane stub (category list + content panel) -- Library stub view with controller back behavior -- Start/Menu power overlay that traps focus and closes with Back -- Unified input actions (`up/down/left/right/accept/back/menu`) from keyboard + gamepad +NebulaOS is not just a launcher, Steam skin, or Big Picture replacement. +It is a full OS experience designed to make Linux feel native on gaming PCs, handhelds, TV setups, and eventually dedicated console-like hardware. -### Dashboard refresh (Xbox-inspired Nebula) +The goal is to combine the best parts of console UX, desktop Linux, and modern operating system design into one flexible system. -The shell now uses a premium horizontal dashboard language inspired by console UI patterns: +--- -- Left-aligned horizontal app tile rail (Library, Settings, Power) -- Dynamic nebula background stack (gradient, starfield, fog, vignette) -- Shared top bar with reactive accent line and profile/time status -- Layered tile focus states (scale, cyan glow, ripple, elevation) -- Smooth page/focus transitions with cubic-bezier motion curves -- Immersive lock screen with large clock/date and input-revealed PIN panel -- Settings redesign with top category rail + card-based content panel +## Vision -Animation and component architecture notes are in [src/styles/shell-guidelines.md](src/styles/shell-guidelines.md). +NebulaOS is designed around a simple idea: -### Install +> A gaming OS should feel like a console when you are gaming, and like a real desktop when you need one. + +Most gaming-focused Linux setups are either: + +* Too desktop-oriented for controller use +* Too launcher-dependent +* Too tied to Steam +* Too limited when the user needs full desktop control + +NebulaOS aims to solve that by providing both: + +* A polished controller-first Bigscreen interface +* A proper Linux desktop mode + +The long-term goal is to create an OS that can work as: + +* A Steam Deck-style handheld interface +* A living room gaming console UI +* A gaming PC frontend +* A full Linux desktop +* A foundation for future Nebula hardware + +--- + +## Modes + +### Bigscreen Mode + +Bigscreen Mode is the main console-style experience. + +It is designed for: + +* Controllers +* TVs +* Handhelds +* Game launching +* App launching +* System settings +* Power controls +* Profiles +* Media-focused workflows + +Bigscreen Mode is built as a fullscreen Nebula shell using Tauri, HTML, CSS, JavaScript, and a controller-first navigation system. + +Current v0 features include: + +* Lock screen with controller and keyboard PIN keypad +* Home dashboard tile grid +* Library screen +* Settings screen +* Power overlay +* Unified input actions from keyboard and gamepad +* Xbox-inspired horizontal dashboard layout +* Dynamic nebula background visuals +* Controller focus states and smooth transitions + +Read more in: + +```text +bigscreen/README.md +``` + +--- + +### Desktop Mode + +Desktop Mode is the full Linux desktop experience. + +It is intended for: + +* File browsing +* Productivity +* Web browsing +* Development +* System configuration +* Troubleshooting +* Advanced settings +* Desktop gaming workflows + +The recommended Desktop Mode foundation is KDE Plasma because it is flexible, themeable, controller-adaptable, and already well-suited to Linux gaming environments. + +Desktop Mode should feel clean, modern, and polished, with a design direction inspired by the clarity and smoothness of macOS while keeping the flexibility of Linux. + +Read more in: + +```text +Desktop/README.md +``` + +--- + +## What NebulaOS Is + +NebulaOS is: + +* A Linux-based gaming operating system experience +* A controller-first shell for Bigscreen use +* A KDE-based desktop experience for normal computer use +* A unified game and app launcher +* A modular platform for Nebula apps +* An open alternative to proprietary gaming frontends +* A foundation for future console-like hardware + +--- + +## What NebulaOS Is Not + +NebulaOS is not: + +* A Steam skin +* A Steam Big Picture clone +* A launcher-only project +* A proprietary console OS +* A replacement for Linux itself +* A locked-down gaming environment + +NebulaOS should work with Steam, GOG, Epic Games, local apps, native Linux games, Proton, Wine, and other tools without depending on one company’s frontend. + +--- + +## Core Principles + +1. **Controller-first, not controller-compatible** + Bigscreen Mode should be designed from the ground up for controller navigation. + +2. **Desktop when needed** + Users should always be able to access a proper desktop environment. + +3. **Open and modular** + NebulaOS should be built from replaceable, understandable components. + +4. **Independent from proprietary launchers** + Store integrations should exist, but NebulaOS should have its own interface. + +5. **Console feel, PC freedom** + NebulaOS should feel simple and polished without removing user control. + +6. **Built for iteration** + v0 should be simple, but the architecture should leave room for long-term growth. + +--- + +## High-Level Architecture + +NebulaOS is split into several layers: + +```text +NebulaOS +├── Bigscreen Mode +│ ├── Nebula Home +│ ├── Nebula Library +│ ├── Controller Settings +│ ├── Power Menu +│ └── Profile / Lock Screen +│ +├── Desktop Mode +│ ├── KDE Plasma +│ ├── Nebula desktop theme +│ ├── Desktop apps +│ └── Advanced system tools +│ +├── Nebula Core +│ ├── Input +│ ├── Navigation +│ ├── Theme +│ ├── Glyphs +│ └── Shared UI logic +│ +└── System Integration Layer + ├── Game discovery + ├── App launching + ├── Store integrations + ├── Proton / Wine handling + ├── Network settings + ├── Audio settings + ├── Display settings + └── Power controls +``` + +--- + +## Technology Stack + +### Bigscreen Mode + +* Tauri +* HTML +* CSS +* JavaScript +* Rust backend through Tauri +* Web Gamepad API +* Nebula Core + +### Desktop Mode + +* Linux +* KDE Plasma +* SDDM +* Custom Nebula theme +* Custom session configuration +* Optional Nebula desktop tools + +### Game and App Layer + +Planned integrations include: + +* Native Linux apps +* Local executables +* Steam +* SteamCMD +* Proton +* Wine +* GOG +* Epic Games +* Legendary +* Heroic backend concepts +* Local metadata databases + +--- + +## Current Repository Status + +This repository currently contains the early NebulaOS v0 prototype. + +Current features include: + +* Tauri frontend shell +* Controller and keyboard input mapping +* Lock screen +* Home dashboard +* Library stub +* Settings stub +* Power overlay +* Nebula Core adapter structure +* Xbox-inspired dashboard refresh +* Windows-first development setup +* Linux build pathway + +The project is currently focused on building the Bigscreen shell first, while planning Desktop Mode as the second major pillar of the OS. + +--- + +## Install ```bash npm install ``` -### Run (dev) +--- + +## Run in Development ```bash npm run dev ``` -### Build +--- + +## Build ```bash npm run build ``` -### Linux prerequisites (Ubuntu/Debian) +--- -Install system dependencies required by Tauri/WebKit: +## Linux Prerequisites + +For Ubuntu, Debian, and related distributions, install the system dependencies required by Tauri and WebKit: ```bash sudo apt update @@ -62,48 +301,75 @@ sudo apt install -y \ libgtk-3-dev ``` -Install Node.js LTS and Rust (if not already installed), then run: +You will also need: + +* Node.js LTS +* Rust +* npm + +Then run: ```bash npm install npm run dev ``` -### Controller testing notes (Windows) +--- -- Connect an Xbox-compatible controller before launching dev mode. -- Navigation: D-pad or left stick. -- Actions: `A` = Accept, `B` = Back, `Start` = Menu. -- Keyboard mirror for development: arrow keys, Enter, Escape/Backspace. +## Controller Testing -### Nebula Core integration status +For development, connect an Xbox-compatible controller before launching the app. -`@nebulaproject/core` is installed and used through runtime adapters in: +### Controller Mapping -- `src/core/input.js` -- `src/core/nav.js` -- `src/core/state.js` +```text +D-pad / left stick: Navigate +A: Accept +B: Back +Start: Menu +``` -If Nebula Core exports are available, the shell uses them for input/navigation/glyphs/theme. -If not, local fallback adapters keep the shell fully functional. +### Keyboard Mirror -### Local Nebula Core development (Windows-safe) +```text +Arrow keys: Navigate +Enter: Accept +Escape / Backspace: Back +``` -Current npm package `@nebulaproject/core@0.1.3` re-exports internal `@nebula/*` packages that are not published, so local linking is recommended for active core development. +--- -1. Clone Nebula Core monorepo next to this repo. -2. Build Nebula Core packages. -3. Link from the core repo and consume in this repo: +## Nebula Core Integration + +NebulaOS uses `@nebulaproject/core` through runtime adapters. + +Current adapter files: + +```text +src/core/input.js +src/core/nav.js +src/core/state.js +``` + +If Nebula Core exports are available, NebulaOS uses them for input, navigation, glyphs, and theme handling. + +If they are unavailable, local fallback adapters keep the shell functional during development. + +--- + +## Local Nebula Core Development + +For active local development, clone Nebula Core next to this repository. ```bash # In Nebula-Core repo npm link -# In Nebula-OS repo +# In NebulaOS repo npm link @nebulaproject/core ``` -Alternative (more deterministic): use `file:` dependency in `package.json`: +Alternative deterministic setup using `file:` dependency: ```json { @@ -119,341 +385,151 @@ Then run: npm install ``` -### Linux VM build (high-level) - -- Install Rust, Node.js, and the Linux prerequisites above. -- Clone this repo in the Linux VM. -- Run `npm install`. -- Run `npm run dev` for integration checks in Linux session. -- Run `npm run build` to produce Linux artifacts. - -## Vision - -Nebula OS is a **controller-first, open source operating system experience** built on Linux. - -It has two equally important jobs: - -1. **A custom controller-first way to navigate the OS** (like a console shell) -2. **An open source library and launcher layer** for games and apps - -Nebula OS is not a skin that launches Steam. -It is an independent UI layer that: - -* Acts as the primary **controller-first shell** for the OS -* Provides a unified Home experience for **games, apps, and media** -* Integrates first-install Nebula apps such as **Nebula Browser** and **Nebula Launcher** -* Exposes **system settings** through controller-friendly panels -* Manages game libraries directly (Steam, GOG, Epic, and others) - -Nebula OS v0 focuses on building the foundation for this console-grade OS shell. - --- -# Core Principles +## Development Strategy -1. Controller-first, not controller-compatible -2. Replace proprietary frontends with an open interface -3. Separate system layer from UI layer -4. Build modular infrastructure for long-term independence -5. Develop iteratively, but architect for autonomy +NebulaOS is currently developed across two environments. ---- - -# What Nebula OS v0 Actually Is - -Nebula OS v0 consists of: - -* Base OS: Ubuntu LTS (or Ubuntu-based) -* Desktop Environment: KDE Plasma (recommended) -* Display Manager: SDDM -* Two login sessions: - - * Nebula Desktop - * Nebula Game UI -* Nebula OS (Tauri + HTML/CSS/JS) -* Nebula Library (core application responsible for: - - * Game discovery - * Installation - * Updates - * Launching - * Compatibility management) - -Unlike SteamOS, Nebula OS does not rely on launching Steam Big Picture. -Nebula Library is the primary game management layer. - ---- - -# High-Level Architecture - -## Desktop Mode - -A standard KDE session for: - -* Productivity workflows -* File browsing and system tools -* Development and troubleshooting -* Advanced configuration - -Desktop Mode remains a normal Linux desktop. - -## Game UI Mode - -A dedicated login session that launches **Nebula OS** fullscreen. - -Game UI Mode contains: - -* Lock screen with controller PIN entry -* Nebula Home dashboard -* Nebula Library -* Controller-friendly Settings -* Power and session controls - -Game UI Mode is the **console experience** for the entire OS. - -## System Integration Layer (behind the UI) - -Nebula OS needs a clean boundary between UI and system operations. - -Recommended approach: - -* A small privileged backend service (later) that exposes safe operations: - - * Wi-Fi and networking - * Audio and output device selection - * Display resolution and scaling - * Bluetooth pairing - * Storage overview - * Power controls -* The UI talks to that layer through a stable API - -v0 scope can start with non-privileged read-only data and a few safe commands. - ---- - -# Technology Stack - -## UI Layer - -* Tauri -* HTML -* CSS -* JavaScript - -Why Tauri: - -* Lightweight -* Native system integration via Rust backend -* Cross-platform development -* Efficient resource usage - -## Controller Input - -* Web Gamepad API -* Custom focus/navigation system - -Controller mappings: - -* D-pad / left stick: navigation -* A: activate -* B: back -* Start: menu -* Shoulder buttons: future navigation layers - -Keyboard mirrors controller during development. - ---- - -# Nebula OS – The OS UI Layer - -Nebula OS is the **controller-first OS shell**. - -It is the primary interface in Game UI Mode and should feel like a console dashboard, not a desktop. - -Nebula OS responsibilities: - -* Home dashboard (games, apps, recent activity) -* App launcher for integrated Nebula apps (Nebula Browser, Nebula Launcher, Nebula Library, Settings) -* System navigation (network, audio, display, storage, accounts) -* Power menu and session switching (Game UI ↔ Desktop) -* Notifications and downloads (later) -* Controller-first focus navigation everywhere - -Nebula OS is built with Tauri + HTML/CSS/JS. - ---- - -# Nebula Library – The Game and App Management Layer - -Nebula Library is the **content manager** inside Nebula OS. - -It is not a bridge to proprietary UIs. -It should eventually handle: - -* Steam installs via SteamCMD and/or open APIs -* GOG installs via open or community tooling -* Epic installs via open tooling (for example Legendary) -* Proton/Wine configuration and per-title settings -* Game launch parameters and runtime selection -* Updates, integrity checks, and metadata - -Initial v0 scope: - -* Library UI skeleton and data model -* Local entries (manual add) -* Launch local executables -* Foundation for compatibility and store backends - -Long-term direction: - -Nebula Library becomes a unified open source platform for managing games and apps. - ---- - -# Development Strategy - -Nebula OS is developed in two environments: - -## Windows (Primary UI Development) +### Windows Used for: -* Building Nebula OS UI -* Implementing controller navigation -* Designing lock screen -* Designing Library UI -* Building system state architecture +* UI development +* Controller navigation +* Lock screen work +* Library UI +* Settings UI +* Frontend architecture -UI and logic are platform-agnostic. - -## Linux VM (Integration & Replacement Layer) +### Linux VM Used for: -* Building Linux binaries -* Session integration -* SteamCMD integration testing -* Proton/Wine configuration -* System-level testing +* Linux builds +* Session testing +* KDE integration +* Fullscreen shell testing +* Proton and Wine experiments +* System service experiments -Rule: +The current workflow is: -Develop UI on Windows. -Build and test Linux features inside the VM. +```text +Design and build the UI on Windows. +Test OS-level behavior in Linux. +``` --- -# Phase Roadmap +## Roadmap -## Phase 1 – Nebula OS (Controller Console Layer) +### Phase 1: Bigscreen Shell -Objective: -Build a polished, console-grade Game UI independent of store integration. +Goal: Build a polished controller-first shell. Deliverables: -* Lock screen with PIN keypad +* Lock screen * Home dashboard -* Library screen (mock data) +* Library screen * Settings screen * Power menu -* Controller navigation grid system -* Fullscreen window behavior - -No external integrations yet. +* Controller navigation +* Fullscreen mode +* Basic app launching --- -## Phase 2 – Session Integration +### Phase 2: Desktop Mode Foundation -Objective: -Make Nebula OS a selectable login session. +Goal: Create the NebulaOS desktop environment experience. -Milestones: +Deliverables: -* Nebula Game UI appears at login -* Launches fullscreen -* Exiting returns to login -* Controller works reliably +* KDE Plasma setup +* Nebula theme +* SDDM login configuration +* Bigscreen and Desktop session entries +* Desktop-to-Bigscreen switching +* Basic Nebula desktop tools --- -## Phase 3 – Nebula Library Foundations +### Phase 3: Session Integration -Objective: -Begin true replacement behavior. +Goal: Make NebulaOS feel like a real OS experience. -Milestones: +Deliverables: -* Launch local Linux games -* Integrate Proton/Wine execution layer -* Add SteamCMD support for installing Steam titles -* Track installed game metadata -* Unified library view - -This is where Nebula begins diverging from SteamOS. +* Bigscreen session selectable from login +* Desktop session selectable from login +* Bigscreen launches fullscreen +* Exit to desktop or login +* Controller works reliably in Bigscreen Mode --- -## Phase 4 – Store Integrations +### Phase 4: Nebula Library Foundation -Objective: -Add real backend integration without proprietary UI. +Goal: Begin true game and app management. -Potential directions: +Deliverables: -* SteamCMD for Steam installs -* Legendary (Epic CLI) integration -* Heroic backend reuse (without UI dependency) -* OpenGOG community tools - -Nebula Library becomes the single UI. +* Local app database +* Installed games database +* Manual game adding +* Local executable launching +* Metadata structure +* Cover art and banner support +* Store backend abstraction --- -# Security Strategy +### Phase 5: Store and Compatibility Integrations -Game UI lock screen: +Goal: Turn Nebula Library into a real open game manager. -* Local PIN authentication -* Optional profile system (future) +Potential integrations: -Linux account authentication remains system-level. +* SteamCMD +* Proton +* Wine +* Legendary for Epic Games +* GOG tooling +* Heroic backend concepts +* Per-game compatibility settings --- -# What Nebula OS Is Not +## Success Criteria for v0 -* Not a Steam skin -* Not Big Picture mode -* Not a launcher aggregator -* Not dependent on proprietary UIs +NebulaOS v0 is successful when: -It is an open system layer that manages games directly. +* Bigscreen Mode can be launched fullscreen +* The entire shell is controller navigable +* The lock screen works +* The Home dashboard works +* The Library can display and launch local entries +* Settings has a usable controller-first structure +* Power controls exist +* Desktop Mode remains accessible +* Bigscreen and Desktop feel like two parts of the same OS --- -# Immediate Action Plan +## Long-Term Goal -1. Build Nebula OS UI on Windows -2. Implement controller navigation framework -3. Build lock screen system -4. Build Library UI skeleton -5. Set up Linux VM -6. Create Nebula Game UI login session -7. Begin local executable launching support -8. Research SteamCMD integration +NebulaOS should become a gaming OS that feels native, polished, and open. ---- +A user should be able to: -# Success Criteria for v0 +* Turn on a machine +* Pick up a controller +* Navigate the whole system +* Launch a game +* Switch to Desktop Mode when needed +* Manage apps, games, settings, and profiles +* Use the system without needing Steam Big Picture or a traditional desktop launcher -Nebula OS v0 is successful when: - -* You can log into Nebula Game UI -* The entire UI is controller navigable -* Lock screen works -* You can launch locally managed games -* You can return to Desktop Mode - -From there, Nebula Library evolves into a true open source game management platform. +NebulaOS is the bridge between a console experience and a real computer.