Since I keep building more of them, here's a list of Linux apps I've made. Most of them are optimized for phone use. For simplicity I only list graphical applications here.

For any projects that don't have a seperate chat channel there's #blog:brixit.nl

Megapixels

The camera app for the PinePhone. Supports configuring the camera pipeline on the PinePhone to handle both the front and back camera, uses the raw bayer mode to get the highest quality pictures from the sensor. You can read about the development in part 1, part 2, part 3 and part 4 (source code)

#megapixels:brixit.nl

Powersupply

The Powersupply app was mainly made to help debugging the power and type-c drivers on the PinePhone. The power routing is quite complex and it would take some work for end-users to get the required debug info about the state of it. Also sometimes user interfaces show that the battery is charging based on if the usb cable is plugged in. The Powersupply app queries the state of the whole power and usb system through sysfs and shows the actual charge/discharge rate of the battery. It's also handy to see which power and data direction has been negotiated on the usb C port. (Source code)

Numberstation

This is an TOTP application for generating the 2FA tokens that are normally generated by Google Authenticator. New keys can be added by otpauth:// urls which are the things that are encoded in the QR codes for 2FA. The app registers and url-handler for the otpauth urls so it works nicely together with the QR code handeling in Megapixels (Source code)

Switcher

Switcher is a more complicated application that makes it possible to control Blackmagic Design ATEM video switchers/mixers from Linux. It's mainly so I can control my hardware using the PineTab since the official software is Windows/OSX only and doesn't support ARM. The network protocol is reverse engineered and documented to make this work. (Source code)

#openatem:brixit.nl

Readerview

This is a Gemini webbrowser written in GTK4. It's not super stable yet but allows browsing gemini sites on a touchscreen. (Source code)

Thumbdrives

This is the Linux phone clone of DriveDroid. It allows you to store .iso images of CDs on the phone and emulate an USB CD drive when plugged into another device. It allows you to create virtual thumbdrives that are stored as .img images and are emulated as USB Mass Storage devices and are writable. (Source code)

Wiremapper

Wiremapper is a Linux Phone app to control the Pockethernet network cable testers. These testers have no user interface except 4 leds and bluetooth and are normally controlled with an Android phone. The official android phone isn't very good honestly but at least with this app you can run the appropiate tests quickly and also use it from laptops. This app also required reverse engineering the protocol used to control the hardware. (Source code)

postmarketOS Tweaks

This is a settings utility inspired by Gnome-Tweaks to change settings in the mobile interfaces supported by postmarketOS. The settings pages are defined by config files instead of hardcoded in the application so the UI packages for postmarketOS can ship extra settings for installed apps/user interfaces. (Source code)

Shipments

An app that's developed desktop-first for once, but still works great on mobile. This application will track your shipments, currently only very limited support for package carriers. (Source code)

Utilities

Not full apps, but still nice utilities:

sysls: a custom directory listing tool that is optimized for showing data from the subdirectories in /sys. The main improvement is it shows the contents of the files.

$ sysls
/of_node
/power
/subsystem
/in_current0_label..... usbin_i
/in_current0_raw....... 235
/in_current0_scale..... 4604.492187500
/in_current1_label..... dcin_i
/in_current1_raw....... [-ENODATA]

lsplug: alternative for lsusb that can hide built-in devices and can show way more compact details about the connected devices.

# lsplug -r -d
USB 2-3  [0781:cfd2] SanDisk Corp. SDDR-399 Reader [110716551151]
   Device /dev/sdb
USB 1-8  [1050:0116] Yubico.com Yubikey NEO(-N) OTP+U2F+CCID
   Device /dev/usb/hiddev0
USB 1-4  [1a86:7523] QinHeng Electronics CH340 serial converter
   Device /dev/ttyUSB0

certtool: alternative for remembering the right openssl invocation to check TLS certificate info on a server. Also knows how to check the certificate on STARTTLS connections.

cert --imaps --smtps example.com
example.com  https  Certificate is expired (valid until 2021-09-30 22:54:11) 
             imaps  Certificate almost expired (19 days, 1:45:51.654055) 
             smtps  Certificate almost expired (19 days, 1:45:51.604624)

createaport: automatically generate an APKBUILD file from a repository url by guessing all information.

$ createaport https://gitlab.com/mobian1/devices/eg25-manager
pkgname=eg25-manager
pkgver=0.3.0
pkgrel=0
pkgdesc="Manager daemon for the Quectel EG25 mobile broadband modem"
url="https://gitlab.com/mobian1/devices/eg25-manager"
arch="all"
license="GPL-3.0"
source="https://gitlab.com/mobian1/devices/eg25-manager/-/archive/0.3.0/eg25-manager-0.3.0.tar.gz"
makedepends="meson libusb-dev glib-dev modemmanager-dev libgudev-dev libgpiod-dev"

build(){
	abuild-meson . output
	meson compile ${JOBS:+-j ${JOBS}} -C output
}

check(){
	meson test --no-rebuild -C output
}

package(){
	DESTDIR="$pkgdir" meson install --no-rebuild -C output
}

bootinfo: show ARM bootloader information on all the connected storage mediums and it includes the wipeboot utility to clear the bootloader.

$ sudo bootinfo
Found 'Sunxi/Allwinner eGON header' on /dev/mmcblk0 offset 8192B
Found 'Sunxi/Allwinner eGON header far' on /dev/mmcblk2 offset 131072B
Found 'Sunxi/Allwinner eGON header mmcboot' on /dev/mmcblk2boot0 offset 0B
    /dev/mmcblk2boot0 is not marked bootable!

$ sudo wipeboot -a /dev/mmcblk2
Found 'Sunxi/Allwinner eGON header far' on /dev/mmcblk2 offset 131072B
Do you want to clean the 1 sectors containing boot signatures?
Enter to continue, ctrl+c to abort

lsip6: show ipv6 addresses of devices on point-to-point links. This is useful to just connect something together on the network without configuring ip addresses at all.

$ lsip6
PINE64 PinePhone / postmarketOS     fe80::ac63:afff:fee4:78f5%enp0s20f0u4
  SHIFT SHIFT6mq / postmarketOS     fe80::50c1:98ff:fe88:cb0c%enp0s20f0u3

findtow: check if a storage medium has Tow-Boot shared storage partitions on it. Designed to be easily usable in shell scripts in the initramfs