-
-
Notifications
You must be signed in to change notification settings - Fork 0
Tepris
An arcade Tetris remix — CRT/VHS post-processing, gamepad support, screen shake, and a fake BIOS boot sequence.
Upstream: velle999/tepris. Packaged for
SynapseOS as tepris, and on the ISO.
teprisOr TEPRIS in the start menu, under Games.
It is a browser game, but not one you open in a browser: the launcher runs it as
a dedicated app window through Firefox in app mode, against a private
profile at ~/.local/share/tepris/profile. Your high score lives in that
profile's localStorage.
Gamepads work — SynapseOS ships the udev rules, and the game reads the Gamepad API directly. See Gaming for controller notes.
Three details make the difference, and each one was a bug first.
It is not --kiosk. The obvious way to get a chrome-free game window is
kiosk mode, and it is the wrong one: kiosk is permanently fullscreen with no way
out, which left the game with no working windowed state and no way to quit. The
launcher runs an ordinary window and hides the tab strip and nav bar with
userChrome.css instead — so the game's own buttons control fullscreen and
quitting, and synui gives it a normal titlebar like any other app.
The URL ends in #app. That fragment is how the page knows it is running as
a dedicated window rather than a tab, which is what enables its quit button. Open
index.html without it and the button is correctly absent.
MOZ_APP_REMOTINGNAME=tepris sets Firefox's Wayland app_id. Without it
every Firefox-backed app on the system would report firefox, and synui's dock —
which matches <app_id>.desktop by basename — would give them all the same icon.
The game was silent for a release, and the cause was not the game. A fresh
Firefox profile blocks audible autoplay until a user gesture, so every sound
effect and the background music were rejected before they played. The launcher
now sets media.autoplay.default=0 and media.autoplay.blocking_policy=0,
which is safe here precisely because it is a dedicated single-app profile rather
than a browser.
There is deliberately no music on the attract screen — the BGM starts at game start. That is the game's design, not a leftover of the autoplay bug.
The launcher regenerates
user.json every launch rather than seeding it once. It holds no user data (your high score is inlocalStorage), so rewriting it means new prefs self-heal onto profiles created by an older launcher instead of being stuck with whatever they were first given.
The PKGBUILD pulls a pinned commit from the upstream repo rather than
vendoring sources — roll the app by bumping _commit and pkgrel, which means
the build needs network. The repo's Electron wrapper is Windows-only and
deliberately not packaged.
See also: Nexus P2P, Gaming, Building and Packaging.
Using it
- Installation
- Updating
- Software
- Files
- Keybindings
- Commands
- Nix
- Gaming
- DaVinci Resolve
- Secure Boot
- Troubleshooting
Customising it
Components
Apps
Hacking on it