eww
Create and manage custom desktop widgets
TLDR
Start the daemon
Open a widget
Close a widget
Reload the configuration
Kill the daemon
Print and watch logs
SYNOPSIS
eww [OPTIONS] SUBCOMMAND [ARGS...]
Common Subcommands:
eww open WINDOW_NAME [--no-daemon]
eww close WINDOW_NAME
eww update VARIABLE=VALUE [...]
eww reload
eww kill
eww windows
eww debug
PARAMETERS
--config PATH
Specifies an alternative path to the eww configuration directory. By default, it looks in $XDG_CONFIG_HOME/eww or ~/.config/eww.
--log-level LEVEL
Sets the logging verbosity for eww. Possible levels include trace, debug, info, warn, error.
--no-daemon
When used with eww open, prevents eww from running as a background daemon, keeping it in the foreground.
VARIABLE=VALUE
Used with eww update to set a value for a specific eww variable, which can then be displayed or used in widgets.
DESCRIPTION
eww (pronounced "eww") is a lightweight, fast, and highly customizable widget manager specifically designed for the Wayland display server.
It enables users to create dynamic and interactive graphical elements directly on their desktop, such as status bars, system monitors, notification pop-ups, and more. Unlike traditional desktop environments, eww provides a flexible framework that integrates seamlessly with existing Wayland compositors and tiling window managers (like Sway or Hyprland). Its core strength lies in its declarative configuration language, often referred to as "Yuck," which allows users to define the layout, appearance, and behavior of widgets using a Lisp-like syntax. This powerful configuration approach, combined with its ability to execute external commands and react to system events, makes eww an indispensable tool for building highly personalized and functional Wayland desktop setups. It's written in Rust, ensuring good performance and memory safety.
CAVEATS
eww is designed exclusively for the Wayland display server and does not function on X11.
Its highly customizable nature means there is a significant learning curve associated with its declarative configuration language, Yuck. While powerful, complex setups can require extensive configuration. Users typically need to manage external scripts or programs to feed data into eww variables for dynamic content.
CONFIGURATION LANGUAGE (YUCK)
eww uses a custom declarative configuration language called Yuck. Yuck is a Lisp-like language that defines windows, widgets, and their properties.
It supports various built-in widgets (e.g., box, label, button, scale, progress), allows for custom CSS styling, and can execute external commands or listen to events for dynamic content. Users define 'windows' (containers for widgets) and populate them with a hierarchical structure of widgets and their attributes. This separation allows for highly modular and reusable components.
INTEGRATION WITH SYSTEM DATA
A key feature of eww is its ability to display real-time system information.
It achieves this by defining 'variables' in its configuration. These variables can be updated programmatically by external shell scripts, command outputs, or daemon processes. For example, a script could periodically fetch CPU usage, battery status, or network speed, and eww would then render this information in a widget, providing a dynamic and interactive desktop experience.
HISTORY
eww is a relatively recent addition to the Linux customization landscape, emerging primarily due to the growing adoption and development of the Wayland display server.
Developed by ElKowar, it quickly gained popularity within the Wayland community, particularly among users of tiling window managers, who sought a powerful yet lightweight alternative to traditional desktop environments for creating highly personalized and performant interfaces. Its development in Rust was a strategic choice for performance and memory safety, aligning with the modern sensibilities of the Wayland ecosystem.