Ironbar includes a simple IPC server which can be used to control it programmatically at runtime. It also includes a command line interface, which can be used for interacting with the IPC server. # CLI This is shipped as part of the `ironbar` binary. To view commands, you can use `ironbar --help`. You can also view help per-command, for example using `ironbar set --help`. Responses are handled by writing their type to stdout, followed by any value starting on the next line. Error responses are written to stderr in the same format. Example: ```shell $ ironbar set subject world ok $ ironbar get subject ok world ``` # IPC The server listens on a Unix socket. This can usually be found at `/run/user/$UID/ironbar-ipc.sock`. Commands and responses are sent as JSON objects, denoted by their `type` key. The message buffer is currently limited to `1024` bytes. Particularly large messages will be truncated or cause an error. The full spec can be found below. ## Libraries - [Luajit](https://github.com/A-Cloud-Ninja/ironbar-ipc-luajit) - Maintained by [@A-Cloud-Ninja](https://github.com/A-Cloud-Ninja) ## Commands ### `ping` Sends a ping request to the IPC. Responds with `ok`. ```json { "type": "ping" } ``` ### `inspect` Opens the GTK inspector window. Responds with `ok`. ```json { "type": "inspect" } ``` ### `reload` Restarts the bars, reloading the config in the process. The IPC server and main GTK application are untouched. Responds with `ok`. ```json { "type": "reload" } ``` ### `get` Gets an [ironvar](ironvars) value. Responds with `ok_value` if the value exists, otherwise `error`. ```json { "type": "get", "key": "foo" } ``` ### `set` Sets an [ironvar](ironvars) value. Responds with `ok`. ```json { "type": "set", "key": "foo", "value": "bar" } ``` ### `load_css` Loads an additional CSS stylesheet, with hot-reloading enabled. Responds with `ok` if the stylesheet exists, otherwise `error`. ```json { "type": "load_css", "path": "/path/to/style.css" } ``` ### `set_visible` Sets a bar's visibility. Responds with `ok` if the bar exists, otherwise `error`. ```json { "type": "set_visible", "bar_name": "bar-123", "visible": true } ``` ### `get_visible` Gets a bar's visibility. Responds with `ok_value` and the visibility (`true`/`false`) if the bar exists, otherwise `error`. ```json { "type": "get_visible", "bar_name": "bar-123" } ``` ### `toggle_popup` Toggles the open/closed state for a module's popup. Since each bar only has a single popup, any open popup on the bar is closed. Responds with `ok` if the popup exists, otherwise `error`. ```json { "type": "toggle_popup", "bar_name": "bar-123", "name": "clock" } ``` ### `open_popup` Sets a module's popup open, regardless of its current state. Since each bar only has a single popup, any open popup on the bar is closed. Responds with `ok` if the popup exists, otherwise `error`. ```json { "type": "open_popup", "bar_name": "bar-123", "name": "clock" } ``` ### `close_popup` Sets the popup on a bar closed, regardless of which module it is open for. Responds with `ok` if the popup exists, otherwise `error`. ```json { "type": "close_popup", "bar_name": "bar-123" } ``` ## Responses ### `ok` The operation completed successfully, with no response data. ```json { "type": "ok" } ``` ### `ok_value` The operation completed successfully, with response data. ```json { "type": "ok_value", "value": "lorem ipsum" } ``` ### `error` The operation failed. Message is optional. ```json { "type": "error", "message": "lorem ipsum" } ```