Files
bananarchy/README.md
T

13 KiB

Bananarchy Linux

Bananarchy Banner

Bananarchy is a keypad-first Linux distribution hardforked from postmarketOS (v26.06 / Alpine edge armv7), purpose-built for Qualcomm MSM8905 (Snapdragon 205) and Qualcomm MSM8909 (Snapdragon 210) smart feature phones with 240x320 QVGA non-touch displays and physical 12-key T9 keypads.

See The Bananarchy Manifesto for the rationale behind this entire project.

Bananarchy targets an ultra-lightweight Sxmo X11 (sxmo-de-dwm) environment (with all Wayland components removed), featuring:

  • Cross-compiled Xlibre (X11Libre/xserver 25.2.0) display server: modesetting KMS + ShadowFB Damage partial-rectangle SPI transfers, software cursor fallback, and rootless elogind integration.
  • Patched sxmo-dwm: 240x320 vertical bstack layout, 24px Pango status bar with an overflow-protected right-aligned clock, and direct C SW_LID slider and locked-key wake handling in < 2 ms.
  • Patched sxmo-dmenu: 240x320 full-width 9-line vertical menu flush below the 24px top bar with a #383838 search bar, #005577 prompt badge, and XIM fcitx5-t9 text input in < 15 ms.
  • XDrawer global phone controls drawer (xdrawer): lightweight 240x320 C++17 X11/Pango/ALSA overlay invoked from anywhere by pressing both softkeys simultaneously, providing instant sliders and toggles for speaker volume, earpiece volume, flashlight, sound mute, microphone mute, screen brightness, and keypad backlight.
  • Patched sxmo-st terminal (pixelsize=18): HarfBuzz (libharfbuzz) OpenType ligature shaping (liga, calt, clig, dlig) and XIM support.
  • Typography: non-Nerd Fira Code (font-fira-code) with ligatures as the primary system and terminal font (with DejaVu SansM Nerd Font used strictly as an icon fallback).
  • Custom 6-mode fcitx5-t9 input engine: fixed bottom candidate bar (X=1, Y=290, W=238, H=30) with a constant 28-character monospace preedit layout supporting lowercase, one-shot Shift, Caps Lock, all 32 ASCII punctuation symbols, terminal control codes (^A-^Z, Esc, Tab, F1-F12), and direct numeric entry with live top-bar mode indication ([abc], [Abc], [ABC], [Sym], [Ctl], [123]).
  • Low memory footprint: sub-95 MB idle RAM usage on 512 MB devices.
  • Full Qualcomm QDSP6/Q6Voice audio & modem routing: loudspeaker, earpiece speaker, and internal/headset microphones with PM8909 WCD analog codec 2.8V micbias, +6 dB EAR PA gain, and GSM/WCDMA/LTE voice routing (ModemManager + q6voiced).
  • Rear 2MP camera support: msm8905-cam V4L2 driver for GalaxyCore GC2395 + MSM8909 CAMSS on /dev/video0 and the bananarchy-photo CLI/Sxmo app.
  • Pre-integrated Bantam AI agent: cross-compiled from https://code.luxferre.top/luxferre/bantam-cpp.
  • Complete on-device development & scripting stack: git, gcc/g++, make, GNU coreutils, nano ($EDITOR, pre-configured in /etc/nanorc with -FEDSMAGic/max%_T2), ed, less ($PAGER="less -RXF"), rlwrap, janet + jpm, perl + IO::Socket::SSL, tcl + tcllib/tcl-tls/sqlite-tcl, sqlite, i2c-tools, and v4l-utils.

The current Bananarchy version is v0.0.1.


Supported MSM8909 / MSM8905 devices

Device Codename SoC CPU / RAM Display & panel firmware Device tree (.dtb)
Nokia 8110 4G nokia-argon Qualcomm MSM8905 (SD205) 2x Cortex-A7 @ 1.1 GHz, 512 MB 2.4" 240x320 SPI (nokia,argon-gc9305-v2-panel.bin) qcom-msm8905-nokia-argon.dtb
Nokia 2720 Flip nokia-beatles Qualcomm MSM8905 (SD205) 2x Cortex-A7 @ 1.1 GHz, 512 MB 2.8" 240x320 SPI (nokia,beatles-gc9305-panel.bin) qcom-msm8905-nokia-beatles.dtb
Nokia 800 Tough nokia-tough (nokia-coconut) Qualcomm MSM8905 (SD205) 2x Cortex-A7 @ 1.1 GHz, 512 MB 2.4" 240x320 SPI (nokia,coconut-gc9305-panel.bin) qcom-msm8905-nokia-coconut.dtb
Nokia 8000 4G nokia-sparkler Qualcomm MSM8909 (SD210) 4x Cortex-A7 @ 1.1 GHz, 512 MB 2.8" 240x320 SPI (nokia,sparkler-gc9307-hlt-28-panel.bin) qcom-msm8909-nokia-sparkler.dtb
Nokia 6300 4G (sibling) nokia-leo Qualcomm MSM8909 (SD210) 4x Cortex-A7 @ 1.1 GHz, 512 MB 2.4" 240x320 SPI (nokia,leo-gc9305-hlt-24-panel.bin) qcom-msm8909-nokia-leo.dtb

Repository structure

bananarchy/
├── README.md                              # Project architecture, build system, and quickstart guide
├── MANIFESTO.md                           # The Bananarchy Manifesto
├── MANUAL.md                              # Complete flashing, keypad, T9, camera, audio, Bantam, and modem manual
├── flash-edl.sh                           # Automated USB EDL flasher wrapper (sudo + ModemManager handling)
├── flash-edl.py                           # Multi-device Qualcomm Sahara/Firehose EDL flasher
├── rebuild-image.sh                       # Builds boot.img, MBR raw .img, and Android .sparse.img
├── chroot-shell.sh                        # Rootless Docker armv7 package & rootfs customization shell
├── artwork/                               # Bananarchy master icon, generated icons, wallpapers, and splashes
│   ├── icon-large.png                     # Master 1024x1024 Bananarchy emblem
│   ├── icon-{512..16}.png                 # Downsampled RGB square icons
│   ├── icon-transparent-{512..32}.png     # Alpha-keyed RGBA icons for UI themes
│   ├── favicon.ico                        # Multi-resolution ICO
│   ├── wallpaper-240x320.png / .jpg       # Default Sxmo 240x320 portrait wallpaper
│   ├── wallpaper-240x320-centered.png/.jpg# Centered 240x320 portrait wallpaper
│   ├── wallpaper-320x240.png / .jpg       # Landscape 320x240 QVGA wallpaper
│   ├── wallpaper-240x240.png              # Square 240x240 wallpaper (Nokia 2720 Flip external display)
│   ├── splash-240x320.png / .ppm          # 240x320 boot splash image
│   └── banner-800x240.png                 # Project header banner
├── bootloader/
│   ├── lk2nd-msm8909.img                  # lk2nd secondary bootloader for MSM8905/MSM8909
│   └── loaders/
│       └── 8110.mbn                       # Qualcomm Sahara/Firehose programmer (05c6:9008)
├── devices/                               # Device definitions, DTBs, and MIPI-DBI panel init sequences
│   ├── common-msm8909/                    # Shared udev keypad rules, WirePlumber S16LE, ALSA UCM2, zram
│   ├── nokia-argon/                       # Nokia 8110 4G device package, DTS/DTB, and GC9305 panel init
│   ├── nokia-beatles/                     # Nokia 2720 Flip device package, DTS/DTB, and GC9305 panel init
│   ├── nokia-tough/                       # Nokia 800 Tough device package, DTS/DTB, and GC9305 panel init
│   └── nokia-sparkler/                    # Nokia 8000 4G & 6300 4G device package, DTS/DTB, and GC9307/9305 init
├── patches/
│   ├── kernel/
│   │   ├── 0001-msm8909-qdsp6-voice-sound-nokia-argon-6.12.patch
│   │   ├── 0002-msm8905-nokia-beatles-and-coconut-dts.patch
│   │   └── config-bananarchy-msm8909.armv7
│   ├── edl/
│   │   └── 0001-edl-msm8909-32bit-elf-and-multi-cmd-firehose.patch
│   ├── sxmo/
│   │   └── 0001-bananarchy-sxmo-240x320-keypad-ui.patch
│   ├── xlibre/
│   │   ├── 0001-xlibre-msm8905-spi-drm-and-shared-vt.patch
│   │   ├── 0002-xf86-input-libinput-xlibre25.patch
│   │   └── 0003-xf86-video-fbdev-xlibre25.patch
│   └── fcitx5-t9/
│       └── 0001-bananarchy-multimode-t9-and-fcitx5-5.1.19.patch
├── src/
│   ├── sxmo-dwm/                          # Patched sxmo-dwm (240x320 bstack, Pango bar, direct C SW_LID & locked-key wake)
│   ├── sxmo-dmenu/                        # Patched sxmo-dmenu (240x320 vertical 9-line menu, #383838 search bar, XIM fcitx5-t9)
│   ├── sxmo-st/                           # Patched sxmo-st terminal with HarfBuzz Fira Code ligature shaping & XIM
│   ├── xf86-input-libinput/               # X11Libre xf86-input-libinput DDX driver
│   ├── xf86-video-fbdev/                  # X11Libre xf86-video-fbdev fallback DDX driver
│   ├── fcitx5-t9/                         # C++20 source of Bananarchy's 6-mode fcitx5-t9 input method
│   ├── leds-msm8905-torch/                # Kernel driver for SY7807 rear torch LED, WCD codec init & PM8909 PON shutdown
│   └── msm8905-cam/                       # Kernel V4L2 driver for GC2395 2MP rear camera & MSM8909 CAMSS (/dev/video0)
├── overlay/
│   └── rootfs/                            # Complete Bananarchy rootfs overlay (OS branding, Sxmo X11, audio, camera, T9)
├── prebuilt/
│   ├── xlibre/                            # Prebuilt armv7 Xlibre Xorg binary and modesetting/libinput/fbdev DDX modules
│   ├── sxmo-x11/                          # Prebuilt armv7 patched dwm, dmenu, and st (with HarfBuzz ligatures)
│   ├── kernel-6.12.1-msm8916/             # Prebuilt QDSP6/Q6Voice .ko, torch .ko, camera .ko, and 5 device DTBs
│   ├── fcitx5-t9/                         # Prebuilt armv7 libt9.so and fcitx5 addon/inputmethod configs
│   └── bantam/                            # Prebuilt armv7 bantam AI agent binary
└── scripts/
    ├── generate-artwork.py                # Generates all wallpapers, icons, and splashes from icon-large.png
    ├── mipi-dbi-cmd.py                    # Compiles MIPI-DBI panel .txt init sequences into .bin firmware
    ├── build-xlibre.sh                    # Cross-compiles Xlibre + xf86-input-libinput + xf86-video-fbdev for armv7 Cortex-A7
    ├── build-sxmo-x11.sh                  # Cross-compiles patched sxmo-st (HarfBuzz ligatures), sxmo-dmenu (XIM), and sxmo-dwm
    ├── build-kernel-audio.sh              # Cross-compiles Linux 6.12.1-msm8916 QDSP6/torch/camera modules & DTBs
    ├── build-fcitx5-t9.sh                 # Cross-compiles src/fcitx5-t9 for armv7
    ├── build-bantam.sh                    # Fetches master from https://code.luxferre.top/luxferre/bantam-cpp & cross-compiles for armv7
    ├── apply-bananarchy-overlay.sh        # Applies overlay, prebuilts, artwork, and device DTB to rootfs
    └── configure-rootfs-from-scratch.sh   # Full rootfs configuration script from base Alpine/pmOS packages

Build & customization workflow

1. Regenerate artwork assets

Whenever artwork/icon-large.png is updated, regenerate all icons, 240x320 wallpapers, and boot splashes:

./scripts/generate-artwork.py

2. Recompile core components (optional — prebuilts included)

All components are pre-compiled in prebuilt/ and overlay/rootfs/, and can be rebuilt from source at any time using rootless Docker (alpine:3.24):

# Rebuild cross-compiled Xlibre (X11Libre/xserver) + libinput/fbdev DDX drivers
./scripts/build-xlibre.sh

# Rebuild patched sxmo-st (HarfBuzz Fira Code ligatures), sxmo-dmenu (XIM), and sxmo-dwm
./scripts/build-sxmo-x11.sh

# Rebuild multi-mode fcitx5-t9 input engine (src/fcitx5-t9 -> prebuilt/fcitx5-t9)
./scripts/build-fcitx5-t9.sh

# Fetch latest master from https://code.luxferre.top/luxferre/bantam-cpp and cross-compile Bantam AI agent
./scripts/build-bantam.sh

# Rebuild Linux 6.12.1-msm8916 QDSP6/Q6Voice audio modules, torch LED module, camera module & DTBs
./scripts/build-kernel-audio.sh

3. Customize rootfs packages or configs

./chroot-shell.sh
# Inside the container shell:
#   pkg-add <pkg>
#   pkg-del <pkg>
#   pkg-search <pattern>

4. Build flashable device images

# Build for Nokia 8110 4G (default)
./rebuild-image.sh nokia-argon

# Or build for Nokia 2720 Flip, Nokia 800 Tough, or Nokia 8000 4G:
./rebuild-image.sh nokia-beatles --mkinitfs
./rebuild-image.sh nokia-tough --mkinitfs
./rebuild-image.sh nokia-sparkler --mkinitfs

Output images are written to images/:

  • images/bananarchy-<device>.img (raw partitioned MBR image for EDL userdata or microSD card)
  • images/bananarchy-<device>.sparse.img (Android sparse image for fastboot flash userdata)
  • images/boot-bananarchy-<device>.img (kernel + initramfs + DTB boot image)

Flashing via USB EDL (05c6:9008)

sudo ./flash-edl.sh nokia-argon

See MANUAL.md for complete EDL, Fastboot, and microSD installation instructions, keypad navigation shortcuts, and the multi-mode T9 reference.

Credits

All Bananarchy-specific components were initially created by Luxferre and released into the public domain with no warranties.

Alpine Linux, postmarketOS/Nura and other third-party components are guided by their respective licensing terms.