Skip to content
Worxbend

Stand With UkraineBrowse every repository at worxbend.github.ioabout.worxbend.comTwitch worxbend

Worxbend logo

Tools for my own machine. Linux utilities, firmware, libraries, and a lot of things written twice.

I learn a system by building it, so some of these exist only because I wanted to understand something. Read the code before you run it. This page is a summary — the project site has every repo, searchable.

Start here

If you open one thing, open one of these. The rest is grouped below.

ProjectWhat it is
Scala librariesworxbend/worxbend → libs/commons/pretty-printoPretty-prints any Scala 3 value. Mark a field @Excluded or @Redacted and it prints the declared type without ever reading the value — the secret never enters the output path.
worxbend/worxbend → libs/commons/revealSame idea, derives PrettyPrintable, all resolved at compile time. Zero reflection, zero per-call cost, zero runtime deps. Enums, sealed traits, opaque types.
OBS & streamingworxbend/obs-statsbtop for OBS. CPU, frame pacing, encoder health, scenes, audio — live, in a terminal.
worxbend/obsctl · worxbend/obsctl-rsScript OBS from the shell. Written twice: Crystal, then Rust.
Air qualityworxbend/airgradient-desktop · ·-android · ·-cli · ·-paprOne sensor, read five ways: GTK, Android, CLI, e-paper, GNOME applet. LAN only, no cloud account.
Linux setupworxbend/fluxion.cr · w0rxbend/system-bootstrapWiped disk to working dev machine, driven from Git.
Hardwarew0rxbend/spycam + w0rxbend/instachronTwo halves of one link. ESP32-CAM pushes JPEG frames over a raw TCP socket; a Go server catches them.

🎛️ OBS and streaming tools

Everything that runs while the stream is live. Most of it drives OBS over obs-websocket.

ProjectWhat it doesBuilt with
worxbend/scenedeckDesktop window for Linux: switch scenes, toggle sources, start and stop the stream. Shipped on Snapcraft.Rust, GTK4
worxbend/obs-statsbtop for OBS health, live in a terminal.Rust, Ratatui
worxbend/obsctlCLI plus TUI for scenes, audio and profiles. A daemon keeps the socket warm so commands are instant.Crystal
worxbend/obsctl-rsSame controller, rewritten in Rust. Keyboard-driven, full screen.Rust, Ratatui
worxbend/multistream-managerFill one form, press Start Streaming once, go live on Twitch and YouTube together.Rust
worxbend/twiTwitch chat over IRC in a terminal. Multiple channels, 13 themes.Go
worxbend/ycYouTube live chat in a terminal, with the daily API quota on screen. 58 themes.Go
worxbend/streaming-tools-siteInteractive map of how these tools wire into OBS, Twitch and YouTube. obs.worxbend.comJavaScript, PixiJS
w0rxbend/obs-effectsAnimated transparent overlays, dropped into OBS as browser sources. obs-effects.worxbend.comTypeScript, PixiJS 8
w0rxbend/twitch-voxerReads chat aloud. Detects Ukrainian or English, pins one voice per chatter.Python
w0rxbend/twitch-vizerAlerts for follows, subs, cheers and raids, off Twitch EventSub.Python, TypeScript
w0rxbend/twitch-musicplayerGo service serves the library, browser front end plays it and draws the visualiser.Go, TypeScript
w0rxbend/chat-brawlType in chat, spawn into an on-screen fighting arena.TypeScript, PixiJS

⬡ Scala, the JVM and libraries

pretty-printo and reveal live in the worxbend monorepo, not in their own repos. Mill build, reusable pieces under libs/.

ProjectWhat it doesBuilt with
libs/commons/pretty-printoConfigurable string rendering for any value. @Excluded and @Redacted fields are described from their declared type, so the printer never touches the value — which is what makes redaction and null safe.Scala 3, Magnolia
libs/commons/revealThe successor, derived by macro. Omissions, redactions and type spellings are all decided during expansion. No reflection, no runtime deps. Enums, sealed families, opaque types.Scala 3 macros
w0rxbend/scalacvScala 3 API over OpenCV 4.13. Typed pipeline that frees native memory exactly once. DocsScala 3, OpenCV
worxbend/gitea-scala-clientTyped Gitea client, verified against the OpenAPI contract. SiteScala 3, ZIO 2
worxbend/codeberg4sCodeberg and Forgejo client returning plain Future. No effect system dragged into your build.Scala 3, sttp
w0rxbend/shieldSelf-hostable auth server, wire-compatible with SuperTokens clients.Scala 3, ZIO
w0rxbend/compression-flixLichess clock and move compression ported to Flix, byte-for-byte. One differing bit would invalidate every stored game.Flix
w0rxbend/scalachess-flixLichess chess rules in Flix, checked against the upstream fixtures. Not a drop-in replacement.Flix
w0rxbend/data-engineeringKafka, Kafka Connect and Flink sandbox, with a custom partitioner for the S3 sink.Scala, Kafka
worxbend/playgroundOne event-streaming service, three web frameworks, side by side.Scala 3, Kafka
worxbend/worxbendThe monorepo: small Scala apps, the libraries above, deploy recipes, notes.Scala, Mill

🛠️ Linux tooling and provisioning

Wiped disk to working dev machine, no manual steps. The same tool shows up four times in four languages. That is not accidental — rebuilding something you already understand is how you learn a language, because the problem stops being the problem.

ProjectWhat it doesBuilt with
worxbend/fluxion.crOne YAML file: packages, Flatpaks, dotfiles, fonts, binaries. Diffs the plan before it touches anything. CLI or TUI. SiteCrystal
w0rxbend/system-bootstrapMy real setup: Fedora, Arch and openSUSE. Packages, binaries, dotfiles, Nerd Fonts, terminals, Neovim, GNOME/COSMIC/Sway.Shell, Lua
worxbend/fluxionThe original, on the JVM. Records what it installed so the second run skips finished work. SiteJava
worxbend/binstallerSame prebuilt binaries on every machine from one profile. SHA-256 checked, lock file written. SiteScala 3, GraalVM
worxbend/nerd-fonts-installerNerd Fonts from one config file, with an interactive picker. SiteGo
worxbend/dotbot-go · worxbend/dotbot-scalaDotbot rewritten twice. The Scala one compiles to a static binary, so the target box needs no JVM.Go · Scala 3
w0rxbend/infrastructAn ARM homelab as files in Git: inventory, Ansible, K3s with Flux CD, Docker stacks, encrypted secrets.Python, Ansible
w0rxbend/ops-dashboardWatches that homelab. Exporters, VictoriaMetrics, Grafana, uptime checks, one browser dashboard.TypeScript, SolidJS

🌬️ IoT: air quality and TCP cameras

Firmware on small Wi-Fi boards, usually shipped with the server on the other end of the socket. Raw TCP, no broker, no cloud.

The ESP32-CAM link — three repos, one system

spycam is the camera half: ESP32-CAM firmware that captures JPEGs and pushes the newest one over a long-lived raw TCP socket, dropping stale frames and reconnecting on its own. instachron is the server half: a Go service that listens on that socket, stores frames, and republishes them over HTTP with restreaming, optional detection and upscaling, and a timelapse recorder. spycam-s3 is the camera half rebuilt for ESP32-S3, stamping a camera ID into every frame so several boards feed one server.

AirGradient

CO₂, PM2.5, temperature and humidity off an open-source indoor monitor. Every client below reads the device over LAN. No cloud account, no vendor app.

ProjectWhat it doesBuilt with
worxbend/airgradient-desktopLinux desktop window, live readings, monitor discovered on the network.Rust, GTK4
worxbend/airgradient-androidNative Android app. Dashboard plus notifications past a severity threshold.Kotlin, Compose
worxbend/airgradient-cliReads the desktop app's config, fetches once, prints compact.Rust
worxbend/airgradient-paprE-paper firmware. Portable readout with weather and forecast.C++, ESP32
worxbend/airgradient-gnome-extensionOne icon in the GNOME top bar, coloured by air quality, gauges in the popup.JavaScript
worxbend/airgradient-observabilitySelf-hosted metrics: collector scrapes the sensor into VictoriaMetrics, Grafana on top.TypeScript, Go
worxbend/tv-dashboardAlways-on TV dashboard: air quality, weather, indoor climate, agenda, system status.TypeScript, SolidJS
w0rxbend/neoncoreAddressable LED panel as an air-quality indicator. Readable across the room, no legend needed.C++, ESP32

Other boards

ProjectWhat it doesBuilt with
worxbend/frostfireESP32 across a PC power-button header. Remote power-on. Fixed-length pulses, relay off at boot, token required.C++
worxbend/frostfire-backendThe guarded service in front of that relay. Every request hits a safety policy before it reaches hardware.Python, FastAPI
w0rxbend/led-matrix-controllerESP8266 driving an 8x8 panel. Binary command protocol over TCP, falls back to its own AP when unconfigured.C++
w0rxbend/echoWebhook to LED panel. Post an event, rules pick an animation, echo pushes it over TCP and reconnects itself.Go

Project siteGitHub worxbendGitHub w0rxbendAbout Worxbend

No API stability, no release cadence, no support. Issues and small PRs welcome — Linux usability, packaging, docs, clear bugs. Anything that changes a project's direction will probably get a no.

Pinned Loading

  1. airgradient-gnome-extensionairgradient-gnome-extensionPublic

    GNOME Shell panel extension for the same AirGradient local-server workflow used by airgradient-desktop.

    JavaScript

  2. dotbot-godotbot-goPublic

    A Go implementation of Dotbot for managing dotfiles with declarative config, symlink creation, cleanup, directory creation, and shell commands.

    Go

  3. nerd-fonts-installernerd-fonts-installerPublic

    🎨 Nerd Fonts, installed the boring way — one config file, one command, every machine. A small, scriptable Go CLI with checksum-verified downloads and an interactive terminal picker.

    Go

  4. airgradient-desktopairgradient-desktopPublic

    Air Monitor is a GTK 4 + libadwaita desktop dashboard for an AirGradient device

    Rust

  5. scenedeckscenedeckPublic

    SceneDeck is a Linux desktop controller for OBS Studio. It is built with Rust, GTK4, libadwaita, Tokio, and the OBS WebSocket protocol

    Rust 2

  6. airgradient-androidairgradient-androidPublic

    Kotlin

Repositories

Showing 10 of 29 repositories

People

This organization has no public members. You must be a member to see who’s a part of this organization.

Top languages

Loading…

Most used topics

Loading…