Files
mesh-catalog/modules/dmenu
jschoubben 125929dbc4
mesh/delivery ready: it is merged on the Approve
mesh/check failed (12): unit: ..a consumer faile…; and 11 more | 125929dbc459 on fd4931a75261 | judged by the candidate's mesh-build-go at 9fe836e155bd
mesh/delivery-group group feat/registry-milestone rejected: composed together: the checker's verdict at the members' heads (3a038b9f8b4d): unit: ..a consumer f…
Pin mesh-sdk 05b3e2e1b94f and mesh-contracts ae5266e77639, the group's final heads, in every Go module (issue 1966)
Claude-Session: https://claude.ai/code/session_01JG73KJNrH5EgFXMKKYSrig
2026-11-04 18:46:38 +01:00
..

dmenu

The suckless menu, as a module (novox/hq research 026/04: "dmenu is a module of its own (official repositories), able to hold the same seat on a machine that wants it"; to-be 42 phase 2 step 7).

Owns

what where
dmenu, dmenu_run, dmenu_path, stest package dmenu (official repositories)

Improves: two broken calls work by existing

Research 026/04 measured "plain dmenu in two places" in the operator's configuration, with dmenu installed on neither workstation, so both failed. Measured again on 2026-10-04, the two are one line on each workstation, in the notifier's configuration:

  • ~/.config/dunst/dunstrc: dmenu = /usr/bin/dmenu -p dunst:

It is the menu dunst opens to pick a notification's action or link. Every other menu in the operator's scripts calls rofi -dmenu. Once this module installs the package, /usr/bin/dmenu exists and that menu opens. The dunst module may later point the line at the launcher seat's command instead (below). The line is that module's to own, so this module does not touch it.

The seat it would hold: not claimed yet

Research 026/04 gives node-launcher to rofi, with a dmenu-compatible command as part of its protocol, and lets dmenu hold the same seat on a machine that wants it. The seat is not in the controller's seat table yet, and a claim on an unknown seat is refused. So this module claims nothing. Its tool dmenu_menu is shaped like the seat's menu verb (research 026/05): show a list, answer the chosen line. When the seat is recorded, the claim is one line here, serving menu.

Tools

All answer JSON. (r) reads; (d) acts in the operator's session.

tool what
dmenu_menu (d) show up to 1000 choices, with a prompt, as one line or a vertical list, case-insensitive by default. Answers the chosen line and its index; a typed line that is not a choice (typed); cancelled when dismissed; timed_out when not answered in time (default 20 s, at most 25, below the runtime's 30 s call limit)
dmenu_session (r) the session the menu would appear in and how it was found, or why there is none; dmenu's version

Reaching the session works as the xclip module's README describes: the runtime runs as the account with no session words, and session.go finds the account's display and cookie from its own processes. With no session, the tool says so and shows nothing. A keyboard held by another program (a locked screen, an open menu) is answered as such.

The menu draws in fontconfig's monospace at dmenu's default size, which the fonts module makes JetBrains Mono Nerd Font.

What changes when it is assigned

On both workstations, the dmenu package is installed, which neither has today. Nothing else.

Leaves as found

The notifier's configuration, and every rofi -dmenu call in the operator's scripts.