Shizcow / dmenu-rs

A pixel perfect port of dmenu, rewritten in Rust with extensive plugin support
GNU General Public License v3.0
202 stars 9 forks source link
dmenu

dmenu-rs - dynamic menu

dmenu is an efficient dynamic menu for X.
dmenu-rs is a 1:1 port of dmenu rewritten in Rust. It looks, feels, and runs pixel-for-pixel exactly the same.
It also has plugin support for easy modification.

State of the project

The master branch is a stable, feature complete product. It it not unmaintained; it's finished.

There is a small and ever-shrinking chance that this will be updated or overhauled in the distant future. It is much more likely that I will write a spiritual successor from scratch, but that won't happen until at least 2023.

Why Rust?

Inspiration

This project started with dmenu-calc. Initially, I wanted much more function than what is provided by bc. However, I found the bottleneck to be a lack of functionality and modability in dmenu(1) itself. So, the choice I had was to either mod dmenu(1) or rewrite it. Because dmenu source is horrendously annoying to read, I decided to rewrite it in a language which lends itself to writing code that is easier to modify. There are other languages for this, but I like Rust.

Improvements

As mentioned earlier, dmenu-rs runs exactly the same as dmenu. However, there are some significant performance enhancements under the hood. The most impactful is memory usage: dmenu-rs uses 21.65% less memory[1], while managing it much more safely without any performance impacts. The other large improvement is plugin support; read below.

Plugins

dmenu-rs leverages rust crates overrider and proc_use to provide an easy to write and powerful plugin system. The end-result are plugins which are dead-simple to enable.
For a list of available plugins and more info on enabling plugins, run make plugins.
For more info on developing plugins, read the plugin guide.

Requirements

Installation

Standalone

Edit config.mk to match your local setup (dmenu is installed into the /usr/local namespace by default).

Afterwards enter the following command to build dmenu:
make
Then, to install (if necessary as root):
make install

Distros

dmenu-rs is available from the following sources:

If you'd like for this to be available on another distro, raise an issue or submit a pull request with a README change pointing to the released package.

Running dmenu

See the man page for details. For a quick test, run:
make test



[1]: According to valgrind(1)