Mobile linux UI that runs in the framebuffer and is efficient, minimalistic, scriptable. Works best on the Pinephone.

8314677 Remove uneeded variable

~mil pushed to ~mil/fbp git

2 days ago
2 days ago


Disclaimer: Framebufferphone is currently considered pre-alpha, pre 0.1 software. Approach with caution! The intended audience for this is largely people who want to test, hack on this, or get involved. This message will remain here until the 0.1 release at which point integration with pmbootstrap (as a postmarket-ui option is planned).

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 OSH using strict:all shopt, mainly based on 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.

#What's supported?

Here's a high-level overview of some of the functionality that framebufferphone supports:

  • Phone: calls/text incoming/outgoing through mmcli via f_phone
  • Web browsing: graphical mode through netsurf's framebuffer interface via f_web
  • Maps: graphical OSM maps through mepo via f_maps
  • Games: play moonbugy via f_game
  • Files: interactive filebrowser via f_files
  • Networks: manage wifi/gsm networks via f_networks
  • Battery indicator: shown in fbp's UI in the statusbar
  • Lock mode: deep sleep / CRUST via fbp lock mode
  • VT switching: switch between VTs using the volume keys in fbp lock mode
  • Multiple device support: best compatibility on the Pinephone, but generally works on pmOS devices
  • Custom scripting: very easy via fbp's FIFO interface

#See Also

User Documentation: