The Base42 hackable desktop: self-written replacements
for the day-to-day system software we use, in the suckless spirit —
small C programs, compiled-in configuration, minimal dependencies,
-Wall -Wextra -pedantic clean.
It comes in two shapes:
- A distro. hos is the hackable tools as a bootable live ISO, from the kernel up: hos's own init, initramfs, boot scripts, service manager and installer over packages and a kernel from the Void repositories — the whole desktop as an operating system, sources included.
- Separate apps. Every tool lives in its own repository, builds on its own, and runs on any Linux desktop. They interoperate only through standard protocols (EWMH, XEmbed, D-Bus, OSC escape sequences, sendmail-compatible SMTP), so each one can replace — or be replaced by — its third-party counterpart. Use one, a few, or all of them.
This meta-repo ties the pieces together. The submodule pins are a known-good set: these exact commits run together as a live desktop session, and are what a hos ISO is built from.
| Project | What it is |
|---|---|
| hed | Terminal text editor, plugin-first architecture, tree-sitter highlighting, swappable vim/emacs/vscode keymaps |
| hterm | SDL2 terminal emulator; SDL-free emulator core with headless tests |
| hwm | Scrollable-column (niri-style layout, dwm-style construction) X11 tiling window manager |
| hws | Niri-style workspace/window overview overlay for X11 (EWMH, live composited thumbnails) |
| htray | System tray + status bar overlay for X11 (XEmbed, single file) |
| hnd | Desktop notification daemon (org.freedesktop.Notifications over raw libdbus, single file) |
| hbg | Background setter/rotator: cover-scales images onto each monitor, esetroot pixmap protocol (single file) |
| hmenu | Rofi-style launcher (item lists from shell commands, matching delegated to fzf --filter, single file) |
| hml | Mail in one binary: IMAP/Maildir sync with mbsync-compatible on-disk state, SMTP send, notmuch-style search index (SQLite FTS5) |
| hstt | Speech-to-text dictation: hotkey-toggled recording, local whisper.cpp transcription, types into the focused window (single file) |
| hweb | Vim-like WebKitGTK browser: one window per process, modal keys, events on stdout / commands on stdin |
| hai | Hackable AI: agentic loop in C for any OpenAI-compatible model (tool calling, SSE streaming), daemon + client, speaks and listens through piper and hstt |
| hsm | Runit-style service supervisor (daemon hsmd + client hsm); runs as PID 1 on hos |
hos turns the toolset into a bootable
live ISO: packages and kernel from the Void repositories (xbps), and
above them hos's own — a static C init in an initramfs it builds itself,
hsmd as pid 1 with hos's boot scripts, a grub menu, an installer — with
the tools' sources on the ISO at /usr/src/hackable and binaries
symlinked into /bin. Boot it, edit the source, make, and you are
running your change. The ISO is described by PACKAGES, SERVICES,
IGNORE, overlay/ and init/; no void-mklive, no dracut.
cd hos
make iso # build the ISO (no sudo: root work runs in a user namespace)
make qemu # boot the newest ISO under kvmgit clone --recursive https://github.com/42dotmk/hackable
cd hackable
make # build every project
make install # symlink everything into ~/.local/bin (no sudo)
make hwm # or build (and cd hwm && make install) just oneEach subproject's own README covers its usage and per-project install. Nothing here assumes the rest of the set is present.
- Pure C11, minimal dependencies; the compiler flags are the linter.
- Configuration is compiled in (
config.h): change the source, recompile. Exception in progress: hmenu pilotshconf, a tiny reader that overlays~/.config/hackable/<tool>.confonto the compiled-in defaults; if it holds, the other tools adopt it. makebuilds,make installsymlinks into~/.local/bin,make cleancleans — in every repo.- The tools interoperate only through standard protocols, so each remains usable with third-party counterparts.