2026-10-19 09:23:54 +03:00
2026-10-19 09:23:54 +03:00
2026-10-19 09:23:54 +03:00
2026-10-19 09:23:54 +03:00
2026-10-19 09:23:54 +03:00
2026-10-19 09:23:54 +03:00
2026-10-19 09:23:54 +03:00
2026-10-19 09:23:54 +03:00

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 with native C/C++ plugin architecture: 240x320 vertical bstack layout, 24px Pango status bar with an overflow-protected right-aligned clock, transparent-backgrounded "Menu" and "Names" desktop softkey labels, direct C SW_LID slider and locked-key wake handling in < 2 ms, and a dynamic .so plugin API (dwm_plugin.h) with preloaded resident daemons (--preload) and non-blocking FIFO IPC (< 10 ms wakeup latency).
  • Preloaded 240x320 keypad-driven DWM plugins (xdrawer, dialer, calllog, contacts):
    • XDrawer (xdrawer.so / xdrawer): global phone controls 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.
    • Dialer (dialer.so / xdialer): opens automatically from the idle desktop when pressing any 0–9, *, or # key (inserting that character immediately), with live T9/number contact filtering, hold-0 for +, and single-press Call dialing.
    • Call Log (calllog.so / xcalllog): opens automatically from the idle desktop when pressing the Call (green) button, with All / Missed / In / Out tabs, contact resolution, call durations, and instant redial.
    • Contacts (contacts.so / xcontacts): full-featured phonebook application opened from the idle desktop via the Right softkey (Names) or from the Sxmo menu, integrated with ~/.config/sxmo/contacts.tsv (live T9/number search, call/SMS/dialer actions, built-in contact editor with keypad multi-tap name entry and recent-caller number picker, and contact deletion).
  • Patched sxmo-dmenu: 240x320 full-screen 10-line vertical menu (240x296 flush below the 24px top bar) with a #383838 search bar, #005577 prompt badge, and XIM fcitx5-t9 text input in < 15 ms.
  • 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, desktop softkey bar & plugin API)
│   ├── dwm-plugins/                       # DWM plugins (dialer.so, calllog.so, contacts.so), shared phone/TSV lib & runner
│   ├── xdrawer/                           # XDrawer global phone controls DWM plugin (xdrawer.so / xdrawer)
│   ├── sxmo-dmenu/                        # Patched sxmo-dmenu (240x320 full-screen 10-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.

S
Description
A freedom-first hardfork of postmarketOS aimed at ex-KaiOS keypad smartphones from Nokia etc
https://bananarchy.top Readme
16 MiB
Languages
C 50.7%
C++ 25.8%
Shell 15.3%
Roff 6.1%
Python 0.9%
Other 1.2%