Hardware Design In Progress


smartphonesI'm tired of smartphones. As the years have worn on, the diversity of design in mobile devices has all pushed towards a slab of black glass, 6" capacitive touchscreen and that's that. Debates over whether or not the Notch is important. Debates over tenth-of-an-inch differences in screen size. It's gotten tedious.

As with most things in modern tech, these devices are walled gardens that serve as both external brain and voluntary surveillance device. Moving your texts from one phone to another made by a different manufacturer isn't a stock feature on both sides. Too much is obfuscated or locked down, and I'm bored of it.

Not to mention the addiction engine under the hood. The screen grows, and so do the distractions. The mobile device ceased to be a set of tools for life and became a tether and skinner box.

Some folks have moved towards using feature phones, commonly referred to as "dumbphones" - which I think is a mean-spirited term. The intent was that it's "the opposite of a smartphone" but that's assuming that the smartphone's naming is accurate. I'd prefer the term "zenphone" but Asus calls one of their glass slabs that, so it's out the window.

And it occurred to me that I didn't want a cell phone. I wanted a shellphone. Shell as in zsh or bash. A phone that I could use like an actual pocket terminal, but in a limited way to keep me looking at my screen less and at the world more.

So I got to thinking, as all good hackers do: can I make one?

As ever, the question isn't if or can but how.

The Hardware

All hardware should be readily available off-the shelf either in breakout boards or in through-hole components. I'm very bad at SMT soldering, so I don't really want to have to get too wild with tweezers. The simplest approach would be to use a candybar form factor, the time-honored layout of the immortal Nokias of old. I'm not going to worry too hard about how thick this device ends up being, because I kind of want it to be a janky brick of handheld telecom gear. So we're going to use breakout boards and perfboard to mount the whole thing.

Face Board (front)

I have an ILI9341 board with a 2.4" LCD screen on it, using an SPI interface. There's also a touchscreen controller on it for 2-point touch, so I can pinch/zoom if I really want to. I don't think I will, though. We'll wire up the touchscreen anyways, in case there ends up being a decent use case for it.

I also have a handful of 4x4 button matrices that have 6mm clicky pushbutton switches on them. Perfect - the button layout will be easy enough.

These boards will be mounted onto a single perfboard that will be the full size of the device overall. Faceboard (rear) will have rows of pin jacks on all sides to mate with Mainboard, which will have corresponding pin headers on all sides. This will create structural stability for the entire device.


FRONT: This will have an Adafruit Powerboost 1000C mounted on it to handle battery charging and powering the CPU, which is a Raspberry Pi Zero 2W. Additionally, there is a 4G/LTE modem test board using an SIM7600A-H modem (North American bands). This is probably going to be the most obnoxious part of this build, since cell carriers in North America are picky and full of themselves.

REAR: There will be a Pi Camera v2.1 5MP mounted. The flat ribbon CSI cable will be fed through a slot cut in the mainboard to loop back to the Raspi's CSI port. There will also be a single Neopixel Gem to serve as the device's camera flash and notification light. Additionally, with a layer of mounting tape, there will be a 2500mAh LiPo pack affixed - the mounting tape is to keep any of the solder joints from puncturing the LiPo.

The Software

I've chosen PostmarketOS as my base operating system, since it has good support on the pi0, is lightweight, and has the desktop environment I want to use. Since we're looking at a fairly simple Linux computer, with a focus on buttons for input rather than a touchscreen, we'll be using sxmo-de-sway for our environment. Swaywm is a tiling window manager, which draws all windows in an arranged manner on the screen. We'll be using it in a one-window-per-workspace configuration.

Function Package
Calls modemmanager
SMS modemmanager + weechat
MMS modemmanager + weechat
Matrix weechat + weechat-matrix
Camera hyperpixels
Photo gallery feh
Calculator bc
Weather curl wttr.in
2FA Authenticator cotp + zbarimg
News & Podcasts newsboat + podboat
Music Player cmus
Maps mepo
Bitcoin Wallet bitcoin-core
Fediverse Client tut
Gemini Browser amfora
Email mutt