diff options
Diffstat (limited to 'README.md')
| -rw-r--r-- | README.md | 48 |
1 files changed, 48 insertions, 0 deletions
@@ -7,3 +7,51 @@ Build ----- $ rebar3 compile + +Live-reload (rebuilding the menu when `.desktop` files change) uses +the `fs` library, which on Linux shells out to `inotifywait`. Install +the `inotify-tools` package for this to work; without it the daemon +still serves the menu it built at startup, it just won't notice +later changes until restarted. + +Running locally +---------------- + +The app is a long-running daemon: it scans your XDG application +directories once at startup, caches the rendered menu in memory, and +serves it over a Unix domain socket at +`$XDG_RUNTIME_DIR/er_xdg_pipe_menu.sock` (falling back to +`/tmp/er_xdg_pipe_menu-$USER.sock` if `XDG_RUNTIME_DIR` isn't set), +rebuilding the cache whenever a watched `.desktop` file changes. + +For a quick manual run (e.g. while developing): + + $ rebar3 shell --eval "application:ensure_all_started(er_xdg_pipe_menu)." + +To have it start automatically with your session, add a systemd +user unit, e.g. `~/.config/systemd/user/er-xdg-pipe-menu.service`: + + [Unit] + Description=XDG pipe menu daemon + + [Service] + WorkingDirectory=/path/to/er-xdg-pipe-menu + ExecStart=/usr/bin/rebar3 shell --eval "application:ensure_all_started(er_xdg_pipe_menu)." + Restart=on-failure + + [Install] + WantedBy=default.target + +then enable it with `systemctl --user enable --now er-xdg-pipe-menu`. + +Openbox itself doesn't talk to the socket directly -- it invokes +`bin/er_xdg_pipe_menu_menu` as the pipe menu command, which connects +to the daemon's socket and prints whatever comes back (or, if the +daemon isn't running, falls back to scanning/rendering inline so the +menu still works). Point a pipe menu at it in `~/.config/openbox/menu.xml`: + + <menu id="apps" label="Applications" execute="/path/to/er-xdg-pipe-menu/bin/er_xdg_pipe_menu_menu" /> + +The script resolves its own location to find the compiled code, so +it works from an absolute path as long as the repo's `_build` +directory (from `rebar3 compile`) is alongside it. |
