frametop

Working on Frametop

Rules for people and coding agents changing this repo. The README covers what Frametop is and how to install it; docs/reference.md covers each component, and docs/design.md records how SteamVR on the Frame behaves and why things are built the way they are. Read its notes on SteamVR before changing how the screens, the pointer, or the input relay talk to SteamVR.

Two ways to run the scripts

Every script works in both modes, and must keep working in both:

scripts/sync.sh                          # PC -> ~/dev/frametop on the Frame
scripts/frame.sh -C <dir> '<build cmd>'  # runs in the "dev" Fedora distrobox
scripts/frame.sh --host '<cmd>'          # runs on the SteamOS host

The headset may be in use

A Steam Frame is someone’s personal headset, and they may be wearing it while you work.

SteamOS updates

A SteamOS update replaces SteamVR, KWin, and gamescope with the rest of the OS image. When a change starts depending on something from the image (a host file, an OpenVR interface outside the bundled header, an undocumented layout or output format, a SteamVR or KWin quirk), add a check for it to scripts/update-check.py, or a retest hint for its package there. docs/design.md has the background.

The image (pack/)

pack/Containerfile builds Frametop as an OCI image, the groundwork for installing without building on the headset; no installer uses it yet. pack/design.md explains why and what is open, and pack/README.md documents the specifics. Rules:

Names

User-facing names are “Frametop”, “Frametop Display Settings”, and “Frametop Input Settings”. Programs and files use the ft- / ft_ prefix (ft-screens, ft-pointer, ft-layout, the ft_pointer driver); config, units, and overlay keys use frametop. Program names must stay within 15 characters: Linux truncates process names there, and the scripts find programs with pgrep -x / pkill -x.