Roguauto (ログアウト)
Roguauto is a lightweight and configurable power-menu daemon for Wayland, written in Rust.
The application runs as a persistent per-user daemon and displays a native
wlr-layer-shell
overlay when requested through its local ipc interface.
App features
- Lock, suspend, hibernate, reboot, shut down, and log out.
- Native Wayland rendering without GTK or inheritance from the system theme.
- A fully application-controlled visual style.
- TOML configuration with filesystem-based hot reloading.
- Keyboard and pointer navigation.
- A persistent system D-Bus connection to systemd-logind.
- A simple Unix-domain-socket daemon interface.
Compatibility
The compositor must support the wlr-layer-shell protocol.
The application was developed and tested primarily on Niri.
Other compositors implementing wlr-layer-shell, including
Hyprland, Sway, Labwc, KWin, etc, are expected to work.
GNOME Shell does not currently expose wlr-layer-shell, so it's not supported.
Power operations additionally require Linux, a working system D-Bus, and systemd-logind. Some actions may require authorization through PolicyKit.
Usage
The daemon is started with:
# A path to a config file can be optionally given.
rogu daemon [-c <file> | --config <file>]
In a second terminal window while the daemon is still running:
rogu show
rogu hide
rogu toggle
rogu quit
However, normally, you would want to start the daemon as part of your
compositor's startup or autostart processes. And then, bind a keyboard
shortcut to rogu toggle and/or the remaining commands.
Configuration
The app will try looking for a config file in 3 locations:
- the path given when starting the daemon,
$XDG_CONFIG_HOME/roguauto/config.toml,$HOME/.config/roguauto/config.toml.
Below is an example of what could go inside a configuration file:
[]
= "#192264"
= 160
= 18
= 25.0
[]
= "#a1a4a9"
= "#a0d0f0"
= 196
= 8
= 10.5
[]
= "#2d303a"
= "#f1f4f9"
= "JetBrains Mono" # use fonts that are installed on your machine.
= 20
= 300
= 25.0
[]
= 49
= 21.0
[]
= true # default value is already true.
The app itself has built-in defaults. Omitting any of the fields shown above will use the default value for that particular field. Hence, if a config file is not found, the defaults would all be used.
Architecture
The main thread runs a Calloop event loop responsible for:
- Wayland and Smithay Client Toolkit events,
- keyboard and pointer input,
- shared-memory buffer management,
- rendering,
- configuration reload notifications.
A Tokio runtime handles asynchronous work such as:
- systemd-logind calls through
zbus, - daemon IPC,
- other background I/O.
Results from asynchronous tasks are returned to the main thread through a Calloop channel. Wayland objects remain confined to the Calloop thread.
Rendering
The menu is rendered using shared-memory buffers with Tiny Skia.
Text shaping and glyph rasterization are performed using
Cosmic Text, while embedded SVG assets provide scalable action icons.
The renderer does not use GTK and therefore does not inherit the user's GTK theme. Colors, dimensions, typography, spacing, and corner radii are controlled by the application's configuration.
Contributing
Contributions are welcome from everyone. Please see the CONTRIBUTING guide for more details on how to get involved.
License
This project is licensed under the GNU General Public License v3.0 or later. See the LICENSE file for details.