Always broadcasting.
DHH FM puts David Heinemeier Hansson's public X activity in the Omarchy Quattro bar: a compact feed, rolling 24-hour statistics, and a tiny animated station ident that lights up when the signal is busy.
Early preview: the UI and source adapter foundation are in place. X developer access or a user-supplied RSS-compatible endpoint is required for live data.
- Recognizable DHH cutout with a subtle head turn and hinged South Park-style paper jaw.
- Time-aware station states: On air, Brief intermission, Between takes, Awfully quiet, Probably sleeping, Radio silence, and Check the transmitter.
- DHH's head and paper jaw animate only while the latest transmission is no more than 15 minutes old.
- Pulsing unread indicator for transmissions that have arrived since the panel was last opened.
- Smooth wheel, touchpad, and drag scrolling through the transmission feed.
- Feed filters for all transmissions, posts, and replies.
- Threaded reply timeline showing the original author, post, timestamp, and DHH's response.
- Rolling 24-hour post and reply counts.
- Public engagement and view totals when the source supplies them.
- Open a transmission, launch X's reply composer, or copy its link.
- Ten-minute background refresh with a local seven-day cache.
- Honest stale, partial-history, and source-error states.
- No browser cookies, X password, or posting permission.
DHH FM reports public engagement—not estimated reach. True reach is private analytics and the plugin does not invent it.
omarchy plugin add https://github.com/lgse/dhh-fm.git --enableIf needed, add it to the bar explicitly:
omarchy bar plugin add lgse.dhh-fm --section rightOpen DHH FM and paste the Bearer Token from your X developer app into the connection gate. The feed and DHH station ident remain locked until the helper successfully validates the token against X API v2. Credentials travel to the helper over stdin—not process arguments—and are stored locally with mode 0600 only after validation:
~/.config/omarchy/dhh-fm/config.json
Paste the X developer app's Bearer Token into the widget. No callback or user sign-in flow is required. DHH_FM_X_BEARER_TOKEN remains available as an advanced environment override.
The adapter requests DHH's latest 100 public posts and public metrics through X API v2. Available endpoints, quotas, fields, and pricing are controlled by X and may vary by developer tier.
After connection, middle-click the bar ident or use the panel refresh button to update immediately. Temporary network failures use the local cache; authentication failures return the panel to the connection gate.
Normalized public posts are cached at:
~/.cache/omarchy/dhh-fm/feed.json
The cache keeps the panel useful during temporary network or provider failures. It contains only normalized public posts and public metrics. The latest seen timestamp is stored separately under ~/.local/state/omarchy/dhh-fm/ so unread status survives shell restarts.
- Left-click: open or close DHH FM.
- Middle-click: refresh the feed.
- Transmission card: open on X.
- Reply: open X's browser reply composer.
- Copy: copy the public post URL with
wl-copy.
- Omarchy Quattro
- Python 3
wl-copyfromwl-clipboardfor copy-link actions- Either X API v2 access or a user-configured RSS-compatible endpoint
npm test
omarchy plugin validate .
qmllint -I "$OMARCHY_PATH/shell" BarWidget.qml Panel.qml Service.qml DhhAvatar.qmlThe helper can be exercised without loading the plugin:
python3 dhh-fm.py refresh | python3 -m json.toolSee docs/PRODUCT.md for product voice, data principles, and future ideas.
Omarchy plugins run as unsandboxed code inside omarchy-shell; review third-party code before enabling it. DHH FM does not read browser profiles, browser cookies, or X session credentials. Replying is handed to the user's browser rather than performed by the plugin.
DHH FM is an unofficial, lighthearted public-feed reader. It is not affiliated with or endorsed by David Heinemeier Hansson, 37signals, Omarchy, or X Corp. Names and marks belong to their respective owners.