reorder: everythinggg

This commit is contained in:
Nova
2024-08-22 05:26:51 -04:00
parent f04a3eabbc
commit d67dc8fc4d
14 changed files with 238 additions and 195 deletions

View File

@@ -0,0 +1,37 @@
---
sidebar_position: 1
---
# Setup OpenXR Runtime
:::info
if you want to test stardust in flatscreen mode (in a window) without a headset or other OpenXR device, you can skip this step and start with [trying out telescope](bundled).
:::
Check the [hardware table](https://lvra.gitlab.io/docs/hardware/) to ensure your hardware and headset are compatible:
## SteamVR
You will likely want to use [Monado](#monado) instead, but if you need to the instructions are available.
:::warning
If you are on NixOS please consult https://lvra.gitlab.io/docs/distros/nixos/ before installing SteamVR.
:::
https://lvra.gitlab.io/docs/steamvr/ is a good starting point, but be aware that the stardust server cannot run as an overlay on top of other games due to SteamVR not implementing the OpenXR Overlay extension.
## Monado
If you've got a wired headset, this is generally the way to go.
### NixOS
It's generally easiest to follow the instructions at https://lvra.gitlab.io/docs/distros/nixos/ to install properly to the system.
### Other distros
[Envision](https://lvra.gitlab.io/docs/fossvr/envision/) is the XR launcher (like a minecraft launcher) of choice for open source XR and is overall better in practice than SteamVR.
# Test OpenXR Runtime
Try running [XRGears](https://gitlab.freedesktop.org/monado/demos/xrgears) and see if it works, you can get it from the system's package manager often.

View File

@@ -0,0 +1,30 @@
---
sidebar_position: 2
---
# Bundled setup
Telescope is a bundled Stardust setup that lets you 1-click run all the essentials for testing a setup out on an existing 2D computer.
## Nix
### Install Nix
For easy development and distribution this project uses the [nix package manager](https://nix.dev/).<br/>
This allows to ensure all dependency requirements are met.
If you do not have nix installed follow the instructions at https://nixos.org/download/#nix-install-linux.
:::warning
Make sure to have [flakes enabled](https://nixos.wiki/wiki/flakes).
:::
### Run Telescope
Because telescope itself is a nix flake, you simply have to run
```sh
nix run github:StardustXR/telescope
```
## Non-nix
An AppImage generated from the nix flake is currently WIP. Please check back later or do a [manual build.](manual)

View File

@@ -0,0 +1,26 @@
---
sidebar_position: 3
---
# Manual build/installation
Make sure all repos are cloned on the same branch (e.g. all main or all dev branch) to ensure stardust protocol compatibility.
## Server
Run and maybe install the server from https://github.com/StardustXR/server.
Follow the README.
## Clients
After the server is running, you'll need to run some clients. Here's a demo showing some off:
![A showcase of some different clients](/img/docs/clients/demo_01.mp4)
Non-exhaustive list of clients:
- [**flatland**](https://github.com/StardustXR/flatland): 3D panel UI (like window manager) for intercting with all your 2D apps
![A flat panel containing the prism launcher](/img/docs/clients/flatland.png)
- [**protostar**](https://github.com/StardustXR/protostar): App launcher library and examples including futuristic hexagon launcher
- [**black hole**](https://github.com/StardustXR/black-hole): Universal minimization of Stardust objects
- [**gravity**](https://github.com/StardustXR/gravity): Launch programs with a certain offset in 3D space
- [**magnetar**](https://github.com/StardustXR/magnetar): Example workspaces client
- [**atmosphere**](https://github.com/StardustXR/atmosphere): 3D environment with natural momentum-based movement
- [**comet**](https://github.com/StardustXR/comet): Annotate in 3D wherever you want amongst your other apps!

View File

@@ -0,0 +1,4 @@
{
"label": "Get Started",
"position": 1
}

View File

@@ -2,9 +2,9 @@
sidebar_position: 1 sidebar_position: 1
--- ---
# Overview # Brief Overview
Stardust XR _(formerly known as Stardust)_ is an XR [display server](https://itsfoss.com/display-server) designed for Linux-based systems<!-- (possibly most unix-based too, but untested)-->.<br/> Stardust XR is an XR [display server](https://itsfoss.com/display-server) designed for Linux-based systems<!-- (possibly most unix-based too, but untested)-->.<br/>
Unlike traditional display servers that focus on 2D screens, Stardust XR introduces new conventions to utilize unbounded 3D space in virtual or real environments. Unlike traditional display servers that focus on 2D screens, Stardust XR introduces new conventions to utilize unbounded 3D space in virtual or real environments.
## Priorities ## Priorities
@@ -24,7 +24,64 @@ Unlike traditional display servers that focus on 2D screens, Stardust XR introdu
## Architecture ## Architecture
![simplified architecture diagram](/img/docs/simplified-architecture.png) ```mermaid
graph LR
OpenXR
OpenXR -->|Frame Data| StereoKit
OpenXR -->|Input Data| StereoKit
subgraph Server[Stardust Server]
StereoKit[StereoKit]
InternalSceneGraph[Internal Scenegraph]
WC1[Wayland Client 1]
DBusConnection[D-Bus Connection]
ClientSceneGraph -->|Drawable Objects| StereoKit
StereoKit -->|Controller, Hand & HMD Data| InternalSceneGraph
InternalSceneGraph -->|Panel Items| ClientSceneGraph
InternalSceneGraph -->|Controller, Hand & HMD Export| DBusConnection
WC1 -->|Panel Item| InternalSceneGraph
WC1 -->|Textures| StereoKit
StereoKit -->|EGL Context| WC1
ClientSceneGraph --> C1
subgraph C1[Stardust Client 1]
ClientSceneGraph[Client Scenegraph]
end
end
StardustSocket[Stardust Socket]
SessionBus[D-Bus Session Bus]
WaylandSocket[Wayland Socket]
WC1 --> WaylandSocket
WaylandSocket --> WC1
DBusConnection --> SessionBus
C1 --> StardustSocket
subgraph StardustClient[Stardust Client 1]
Fusion
Molecules
UserCode[User Code]
Fusion --> Molecules
Fusion --> UserCode
Molecules --> UserCode
subgraph Fusion
libstardustxr[stardust-xr library]
end
end
StardustSocket --> libstardustxr
SessionBus -->|HMD Spatial Reference| Fusion
WaylandClient[Wayland Client]
WaylandSocket --> WaylandClient
WaylandClient --> WaylandSocket
```
## Projects & Components ## Projects & Components

View File

@@ -1,5 +1,5 @@
--- ---
sidebar_position: 4 sidebar_position: 3
--- ---
# Making Clients # Making Clients

View File

@@ -0,0 +1,4 @@
{
"label": "Dive deeper",
"position": 2
}

View File

@@ -1,86 +0,0 @@
---
sidebar_position: 1
---
# Tutorial
## Setup OpenXR
:::note
if you have no headset or other OpenXR device, you can skip this step and start with [installing nix](#install-nix).
:::
### SteamVR
#### Archlinux
TODO
#### NixOS
TODO
#### Others
TODO: collect links for setup on different distrons
### [Monado](https://monado.dev/)
#### Archlinux
TODO
#### NixOS
TODO
#### Others
TODO: collect links for setup on different distrons
## Install nix
For easy development and distribution this project uses the [nix package manager](https://nix.dev/).<br/>
This allows to ensure all dependency requirements are met.
:::info
Make sure to have [flakes enabled](https://nixos.wiki/wiki/flakes).
:::
You can install nix on all common linux systems:
#### Archlinux
```shell
# install git and nix
sudo pacman -Sy git nix
# enable flakes
echo 'experimental-features = nix-command flakes' | sudo tee -a /etc/nix/nix.conf
# enable nix daemon service
sudo systemctl enable nix-daemon.service
# add the current user to nix-users group
sudo usermod -aG nix-users $(id -un)
# reboot to apply user and service changes
sudo systemctl reboot
```
#### NixOS
TODO
#### Others
TODO: collect links for setup on different distrons
## Run Demo
1. clone https://github.com/StardustXR/telescope
2. make sure your OpenXR device works (if 2D mode is not used)
3. run `nix run .`
## Run wayland client
```shell
# run demo.mp4 video in a loop within Stardust
WAYLAND_DISPLAY=wayland-0 DISPLAY= mpv Downloads/demo.mp4 --loop
```

View File

@@ -1,17 +0,0 @@
---
sidebar_position: 3
---
# Setup
First you need to install and run the server from https://github.com/StardustXR/server. Follow the README. If you have issues getting OpenXR to work, try running https://gitlab.freedesktop.org/monado/demos/xrgears first.
After the server is running, you'll need to run some clients. Here's a demo showing some off:
![A showcase of some different clients](/img/docs/clients/demo_01.mp4)
Non-exhaustive list of clients:
- [Flatland](https://github.com/StardustXR/flatland): A panel item UI (XR equivalent of a window manager) so you can interact with your apps using virtual touchscreens. To show Wayland apps, run them with the proper `WAYLAND_DISPLAY` environment variable, in the server's startup script, or use a stardust launcher such as gravity or protostar. Flatland works great in 3DoF or 6DoF with direct touch and pointer interaction.
![A flat panel containing the prism launcher](/img/docs/clients/flatland.png)
- [Gravity](https://github.com/StardustXR/gravity): Command line tool to launch programs inside of stardust at a particular offset in space. This is nestable so you can run a script using gravity, and then gravity inside that script to make a whole composed setup out of thin air! It also ensures that everything launched through it will properly connect to the stardust server, such as wayland clients.
- [Protostar](https://github.com/StardustXR/protostar): Prototype app launcher library/examples. Grab app icons and drop them in space to launch apps where they're dropped.
- [Magnetar](https://github.com/StardustXR/magnetar): Workspaces in 3D. Any object inside the rings will move with them, so you can move a bunch of stuff out of the way temporarily when you don't need it.

View File

@@ -1,4 +0,0 @@
{
"label": "Getting Started",
"position": 2
}

View File

@@ -1,22 +1,22 @@
const lightCodeTheme = require('prism-react-renderer/themes/vsLight'); const lightCodeTheme = require("prism-react-renderer/themes/vsLight");
const darkCodeTheme = require('prism-react-renderer/themes/vsDark'); const darkCodeTheme = require("prism-react-renderer/themes/vsDark");
/** @type {import('@docusaurus/types').DocusaurusConfig} */ /** @type {import('@docusaurus/types').DocusaurusConfig} */
module.exports = { module.exports = {
title: 'Stardust XR', title: "Stardust XR",
tagline: 'We Fight for the Users!', tagline: "We Fight for the Users!",
url: 'https://stardustxr.org', url: "https://stardustxr.org",
baseUrl: '/', baseUrl: "/",
trailingSlash: false, trailingSlash: false,
onBrokenLinks: 'throw', onBrokenLinks: "throw",
onBrokenMarkdownLinks: 'warn', onBrokenMarkdownLinks: "warn",
favicon: 'img/favicon.ico', favicon: "img/favicon.ico",
organizationName: 'StardustXR', // Usually your GitHub org/user name. organizationName: "StardustXR", // Usually your GitHub org/user name.
projectName: 'website', // Usually your repo name. projectName: "website", // Usually your repo name.
markdown: { markdown: {
mermaid: true, mermaid: true,
}, },
themes: ['@docusaurus/theme-mermaid'], themes: ["@docusaurus/theme-mermaid"],
themeConfig: { themeConfig: {
colorMode: { colorMode: {
defaultMode: "dark", defaultMode: "dark",
@@ -24,105 +24,99 @@ module.exports = {
respectPrefersColorScheme: false, respectPrefersColorScheme: false,
}, },
navbar: { navbar: {
title: 'Stardust XR', title: "Stardust XR",
logo: { logo: {
alt: 'Stardust XR logo, a yellow astroid with smaller white astroids around it', alt: "Stardust XR logo, a yellow astroid with smaller white astroids around it",
src: 'img/icon.webp', src: "img/icon.webp",
}, },
items: [ items: [
{ {
href: '/roadmap', href: "/roadmap",
position: 'left', position: "left",
label: 'Roadmap', label: "Roadmap",
}, },
{ {
type: 'doc', href: "https://twitter.com/stardustxr",
docId: 'overview', label: "Twitter",
position: 'left', position: "right",
label: 'Docs',
}, },
{ {
href: 'https://twitter.com/stardustxr', href: "https://discord.gg/A9w7fKE",
label: 'Twitter', label: "Discord",
position: 'right', position: "right",
}, },
{ {
href: 'https://discord.gg/A9w7fKE', href: "https://matrix.to/#/#stardustxr:matrix.org",
label: 'Discord', label: "Matrix",
position: 'right', position: "right",
}, },
{ {
href: 'https://matrix.to/#/#stardustxr:matrix.org', href: "https://github.com/StardustXR",
label: 'Matrix', label: "GitHub",
position: 'right', position: "right",
}, },
{ {
href: 'https://github.com/StardustXR', href: "https://github.com/sponsors/technobaboo",
label: 'GitHub', label: "Sponsor This",
position: 'right', position: "right",
},
{
href: 'https://github.com/sponsors/technobaboo',
label: 'Sponsor This',
position: 'right',
}, },
], ],
}, },
footer: { footer: {
style: 'dark', style: "dark",
links: [ links: [
{ {
title: 'Docs', title: "Docs",
items: [ items: [
{ {
label: 'Roadmap', label: "Roadmap",
href: 'roadmap', href: "roadmap",
}, },
{ {
label: 'Getting Started', label: "Getting Started",
to: '/docs/getting-started/tutorial', to: "/docs/get-started/setup-openxr",
}, },
], ],
}, },
{ {
title: 'Community', title: "Community",
items: [ items: [
{ {
label: 'Discord', label: "Discord",
href: 'https://discord.gg/A9w7fKE', href: "https://discord.gg/A9w7fKE",
}, },
{ {
label: 'Matrix', label: "Matrix",
href: 'https://matrix.to/#/#stardustxr:matrix.org', href: "https://matrix.to/#/#stardustxr:matrix.org",
}, },
{ {
label: 'Twitter', label: "Twitter",
href: 'https://twitter.com/stardustxr', href: "https://twitter.com/stardustxr",
}, },
{ {
label: 'Stardust XR (GitHub)', label: "Stardust XR (GitHub)",
href: 'https://github.com/StardustXR', href: "https://github.com/StardustXR",
}, },
{ {
label: 'Sponsor This', label: "Sponsor This",
href: 'https://github.com/sponsors/technobaboo', href: "https://github.com/sponsors/technobaboo",
}, },
], ],
}, },
{ {
title: 'Code', title: "Code",
items: [ items: [
{ {
label: 'Stardust XR (Server)', label: "Stardust XR (Server)",
href: 'https://github.com/StardustXR/stardust-xr-server', href: "https://github.com/StardustXR/stardust-xr-server",
}, },
{ {
label: 'stardust-xr (includes Fusion)', label: "stardust-xr (includes Fusion)",
href: 'https://github.com/StardustXR/stardust-xr', href: "https://github.com/StardustXR/stardust-xr",
}, },
{ {
label: 'Flatland', label: "Flatland",
href: 'https://github.com/StardustXR/flatland', href: "https://github.com/StardustXR/flatland",
}, },
], ],
}, },
@@ -136,16 +130,15 @@ module.exports = {
}, },
presets: [ presets: [
[ [
'@docusaurus/preset-classic', "@docusaurus/preset-classic",
{ {
docs: { docs: {
sidebarPath: require.resolve('./sidebars.js'), sidebarPath: require.resolve("./sidebars.js"),
// Please change this to your repo. // Please change this to your repo.
editUrl: editUrl: "https://github.com/StardustXR/website/edit/main/",
'https://github.com/StardustXR/website/edit/main/',
}, },
theme: { theme: {
customCss: require.resolve('./src/css/custom.css'), customCss: require.resolve("./src/css/custom.css"),
}, },
}, },
], ],

View File

@@ -1,17 +1,17 @@
import React from 'react'; import React from "react";
import clsx from 'clsx'; import clsx from "clsx";
import Layout from '@theme/Layout'; import Layout from "@theme/Layout";
import Link from '@docusaurus/Link'; import Link from "@docusaurus/Link";
import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; import useDocusaurusContext from "@docusaurus/useDocusaurusContext";
import styles from './index.module.css'; import styles from "./index.module.css";
import HomepageFeatures from '../components/HomepageFeatures'; import HomepageFeatures from "../components/HomepageFeatures";
import Carousel from '../components/Carousel'; import Carousel from "../components/Carousel";
import 'react-responsive-carousel/lib/styles/carousel.min.css'; import "react-responsive-carousel/lib/styles/carousel.min.css";
function HomepageHeader() { function HomepageHeader() {
const {siteConfig} = useDocusaurusContext(); const { siteConfig } = useDocusaurusContext();
return ( return (
<header className={clsx('hero hero--primary', styles.heroBanner)}> <header className={clsx("hero hero--primary", styles.heroBanner)}>
<div className="container"> <div className="container">
<link rel="me" href="https://fosstodon.org/@stardustxr"></link> <link rel="me" href="https://fosstodon.org/@stardustxr"></link>
<h1 className="hero__title">{siteConfig.title}</h1> <h1 className="hero__title">{siteConfig.title}</h1>
@@ -19,7 +19,8 @@ function HomepageHeader() {
<div className={styles.buttons}> <div className={styles.buttons}>
<Link <Link
className="button button--secondary button--lg" className="button button--secondary button--lg"
to="/docs/getting-started/tutorial"> to="/docs/get-started/setup-openxr"
>
Get Started Get Started
</Link> </Link>
</div> </div>
@@ -29,11 +30,9 @@ function HomepageHeader() {
} }
export default function Home() { export default function Home() {
const {siteConfig} = useDocusaurusContext(); const { siteConfig } = useDocusaurusContext();
return ( return (
<Layout <Layout image="img/icon.gif" description="XR Display Server">
image="img/icon.gif"
description="XR Display Server">
<HomepageHeader /> <HomepageHeader />
<main> <main>
<HomepageFeatures /> <HomepageFeatures />