Linux & Open Source Developer. I write cross-platform apps, port mainline kernels onto phones, and keep a homelab running. Lately most of that involves AI agents.
Most of what I build starts as a problem on my own machine. A game that refused to run at the refresh rate I paid for. A phone sitting in a drawer with a kernel nobody had touched since 2019. So the repos here are tools I open, not demos I parked.
The work lands in four places, unevenly. Apps first, because that's what people touch. Kernels and drivers next, because mine kept not having drivers. Homelab after that, since nobody else was going to run it. AI agents are the newest corner and the one I'd rather show than explain.
- 🐧 Daily driver: Arch Linux on Wayland, running a kernel I built
- 📱 Android: mainline kernel ports, device trees, touch and panel drivers, Magisk modules
- 🖥️ Homelab: Proxmox VE, KVM/QEMU, PXE installs, a NAS, 10GbE between boxes
- 🤖 AI: local inference, agent harnesses (OpenCode, DSH), one AstrBot plugin
- 🔧 Most of these repos exist because I needed them. That's the whole reason
Four repos I'd point at first. Each card says what runs today, what's half done, and what I haven't started. "In progress" on its own tells you nothing.
|
OpenRoadScope — 🚗 source OBD-II telemetry for cars. An ELM327 adapter talks over USB, Bluetooth SPP or RJ45, a Python sidecar turns it into JSON-RPC, and an Electron window draws it. Works now: live gauges and history charts, drag-and-drop dashboard with presets and
import/export, DTC read/clear, VIN, zh/en, dark and light, and a drive simulator so you can develop
without a car. Current build is Still open: it hasn't spent six hours plugged into a real car yet. PID refresh rate is capped by whatever the adapter can push, not by the app. The Android build shares the renderer and lags the desktop one.
|
Hyps Hub — 🎮 source A Qt 6 / QML desktop client for Hyps, the command-line tool I use to lift frame-rate caps in games on Linux. The CLI stays the source of truth; the GUI is an adapter around it. Works now: first-run wizard that clones its own Hyps copy, runtime isolated under XDG dirs so it
never touches Still open: Linux only. Upstream changes its config contract every few releases and I have to keep following it.
|
|
oxygen-linux — 📱 local repo, not published yet Mainline Linux on a Xiaomi Mi Max2 (msm8953). Started as a weekend experiment; it boots. Works now: kernel 7.3 with a 263-file msm8953 patch set forward-ported, KWin on Wayland, the 1080p DSI panel, ft5x06 touch, Wi-Fi on 5 GHz, Bluetooth, USB gadget networking and serial, and Adreno 506 through freedreno. glmark2 reaches 120 fps with vsync off, which mostly proved the bottleneck is frame scheduling, not the GPU. Partial: audio (the amp driver isn't ported, so the speaker is silent), charging (battery gauge never shows up), sensors. Not started: camera, modem/SIM, hardware video decode.
|
KBkernel-cachy — 🧬 source Kernel recipes and builds, not a fork with a commit history. CachyOS base, BORE scheduler, ThinLTO, x86-64-v3. Works now: every release ships the package and the recipe it came from, with source hashes
pinned in Still open: no binary repo, no automated test beyond "it boots and I keep using it".
|
Borrowed from Evangelion, then made boring on purpose. It's a gate in front of risky tool calls. Three reviewers see the same proposal separately, with different information slices rather than different personalities. All three have to approve, and approval produces a single-use ticket bound to one effect set, good for 60 seconds.
Works now: pre-execute hook in the tool pipeline (not a prompt, so it can't be talked around), risk tiering, parallel review, arbitration, monotonic guard on the effect set, JSONL audit log with sensitive fields redacted, plus tests and two written reports.
The catch: all three reviewers run on the same model by default. Slicing the information lowers correlation; it doesn't remove it. Real independence needs a different model or a rule engine behind BALTHASAR. That's a config option today, not a finished feature.
Smaller things, forks, one-off fixes. Forks are marked, so you can tell what I wrote and what I only rebuilt.
| Project | What it is |
|---|---|
| r730-fanctl | IPMI fan control for a Dell R730, percentage-based curves, English and Chinese output |
| Xiaomi-10-Ultra-touch-flip-patch | Fixes inverted touch after panel swaps on that phone |
| magisk-touch-invert-for-xiaomi-10-ultra | Same fix, packaged as a Magisk module |
| mkdtboimg | Build DTBO images, mirrored because the AOSP script is hard to find |
| ESP32-Bluetooth-Music-Controller | Hardware media keys over BLE |
| ESP32-Buzzer-Haruhikage | A buzzer that plays 春日影. It was a dare |
| SPlayer-Next | Fork. Music player with lyric support; I keep a build for my own machine |
| Hyps | Not mine. The CLI Hyps Hub wraps. Frame-rate unlocking scripts |
| local_pxe_system | PXE in Docker. pxe up, then a machine installs itself |
| astrbot_plugin_announcement | AstrBot plugin with a web dashboard. Written in an evening with agents |
| TWRP device trees (CS611, MT6739) | Recovery trees for cheap phones, mostly forks of builder actions |
No proficiency bars. Sorted by how often I reach for a thing, not by how good it sounds in a list.
| Tier | What's in it |
|---|---|
| Daily | Arch Linux, Wayland (KWin, niri on the side), bash, TypeScript, Vue 3, Electron, Git |
| Regularly | Python, C++ with Qt 6 / QML, CMake, systemd and udev, pacman and AUR packaging, Docker, Proxmox VE, QEMU/KVM, SQLite |
| Per project | Rust, C, kernel tooling (clang/LLD, dtc, mkbootimg), Gradle and Android, ESP-IDF, ipmitool |
| Read more than write | OpenWrt, OpenVPN, PXE boot chains, Wine and Proton internals, DPU and DRM internals |
Build logs go on k-black.top, source in articles. The msm8953 port, custom CachyOS kernels, the R730 fan curve, Hyps Hub's design decisions, and two rewrites of this site that I'd do differently now.
- Amp driver and battery gauge on the Mi 6X port. Right now it's a phone that only browses
- Whether three reviewers disagreeing ever beats one deciding. Logging every case either way
- Making CLI tools usable without a terminal, and without slowing them down
- Moving the homelab to PXE so reinstalling a box stops eating an afternoon
Homelab architecture · Android flashing and rooting · Minecraft servers · anime & 二次元 · performance tuning · hardware DIY
