@loon Following up on this, I'm now remembering how annoying I find the "modes" model of rofi, really from the first time you run it without args.
One of the architectural decisions I love about #dmenu (and where my preferences overlap with Suckless in general) is that dmenu itself doesn't care what you're picking between or what you do with it, kinda same model as #fzf. This means that dmenu_run can be a pretty trivial wrapper script that, if pressed, you could probably faithfully rewrite in 20 minutes, give or take the caching feature.
Rofi, on the other hand, incorporates that complexity into a single do-everything program that becomes immediately byzantine to understand or navigate. I bet you could achieve 90% of the same functionality by having an input standard (even something like JSON) that's more advanced than mere lines, allowing for icons and such, while outsourcing the mode-specific complexity.
The one thing I do like, though, is that you can search by program description, like "term".