Note: my work on this project has been discontinued. However, development work on this project has been picked up by Bobby Hamblin (~hamblingreen), on a seperate srht project. Checkout his fork which I endorse!
Framebufferphone is a new Linux phone project aimed at providing a low-level (framebuffer-based) yet accessible UI enviroment for Linux phones; building around and valuing using the TTY rather then forgoing it. Framebufferphone provides two components: fbp and f_scripts. fbp is the graphical framebuffer UI widget piece of the project, which can switch between two input modes: a "strings" mode and a "keyboard" mode. With the former mode being completly end-user scriptable. Meanwhile, f_scripts provides a number of canonical example standalone scripts built to be usable with fbp (but note no hard dependency exists). f_scripts can be used for many common smartphone-like functionalities like web browsing, making calls, watching videos, checking RSS feeds, etc.
Overall: conceptual simplicity, maintainability, and frugality are the
primary design tenants of the project. To this end, having low-mental load
and it being simple to understand the architectural design involved are
very imporant to the project's motivation. fbp
is built in Zig and is the sole binary the project distributes, its LOC
count is low and its FIFO interface is brain-dead simple. Meanwhile
f_scripts's scripts, which interface
with fbp via its FIFO, are each standalone and written in Oil
strict:all shopt, mainly based
read calls, and can be run even without fbp (since fbp is only an
optional dependency), thus making debugging and testing simple.
fbp is the graphical framebuffer-based phone UI widget component of framebufferphone project, designed to be used alongside your TTY. In terms of its design, it can be thought of as somewhat of a hybrid between dmenu & fbkeyboard. fbp exposes a on-screen touch keyboard interface, (scriptable) autocomplete / strings menu, rebinds the volumes keys to be usable for item selection, enables VT switching, and provides the user with a lock-mode. It uses low-level Linux APIs like uinput, the framebuffer drawing API, VT iotctls, and similar. fbp is written in Zig. It aims to be "just enough" of a UI to make using the terminal on mobile / on-the-go productive. Ofcourse it targets powerusers but it aims be simple enough for any lay(linux)person to understand and use practically.
f_scripts is the other half of framebufferphone project, which fbp interfaces with via fbp's FIFO interface. The purpose of f_scripts is to present provide a number of small readable Oil OSH shell scripts enabling shortcuts for common phone operations like using the modem for calls/texts, web-browsing, setting timer, browsing news, files, and more in a way such that the scripts are all dialog driven. As such, f_scripts autopopulates fbp's "strings" mode / menu by working with fbp's FIFO interface. This FIFO interface may also be interfaced with via own custom scripts as well (and this is a primary usecase of fbp), f_scripts simply provides canonical examples for you to learn from and which are also quite helpful in themselves.
Here's a high-level overview of some of the functionality that framebufferphone supports:
Framebufferphone is now available for
postmarketOS, as a pmbootstrap UI
option! Support is best on the Pinephone, but it should work with varying
degrees of functionality on other phones with framebuffer support. See
the guide here
for information on installing postmarketOS on your phone and ensure to
framebufferphone as your UI option.