A lightweight Qt panel/taskbar designed specifically for wlroots-based Wayland compositors, using the layer-shell protocol to anchor the dock at the bottom of the screen.
wl-dock is a Wayland desktop taskbar and panel application. It obtains the current window list through the wlr-foreign-toplevel-management-v1 protocol and displays task buttons and a clock as an overlay at the bottom of each connected display.
- Multi-monitor support: automatically creates a bottom dock for every screen.
- Window task buttons: dynamically generates task buttons from the toplevel list provided by
wlr-foreign-toplevel-management-v1. - Icon resolution: looks up the corresponding
.desktopfile based on the windowapp_idand loads the icon; falls back to a default icon if no match is found. - Activation switching: clicking a task button activates the corresponding window.
- Auto-hide behavior: the dock is hidden at a 1px height by default, expands when the mouse enters, and retracts after a short delay when the mouse leaves.
- Clock display: shows current time and date on the right side, refreshed aligned to the minute boundary.
- Qt6 Widgets: handles UI, event loop, and window management.
- LayerShellQt: displays the
wl-dockwindow as a layer-shell panel on Wayland. - Wayland protocol: uses
wayland-scannerto generate client code forwlr-foreign-toplevel-management-unstable-v1. - Multi-window single-process: creates one
DockWindowper screen while sharing a singleForeignToplevelManagerinstance.
src/main.cpp: application entry point, initializes Qt and LayerShellQt, and startsDockController.src/DockController.*: manages screens, creates/removes dock windows, and shares theForeignToplevelManagerand icon resolver.src/DockWindow.*: per-screen dock window, implements hide/expand logic and layer-shell configuration.src/TaskManager.*: manages the task button list and responds to toplevel add/remove/change events.src/TaskButton.*: custom button component that displays app icons and active state.src/ClockWidget.*: clock widget that shows current time and date.src/ForeignToplevelManager.*: independent Wayland connection integrated withwlr-foreign-toplevel-management-v1, listens to toplevel events.src/DesktopIconResolver.*: searches for.desktopfiles and resolves icon names or paths.
sudo apt install build-essential cmake pkgconf \
qt6-base-dev qt6-tools-dev qt6-wayland-dev \
wayland-protocols liblayershellqtinterface-devsudo apt install layer-shell-qt liblayershellqtinterface6wl-dock depends on a wlroots-compatible Wayland compositor and requires layer-shell protocol support.
cmake -B build
cmake --build build
./build/wl-dockIf the build directory already exists, you can simply run cmake --build build.
- Run
./build/wl-dock. - The application automatically detects the current Wayland screens and creates a dock at the bottom of each display.
- Move the mouse to the bottom of the screen to expand the dock.
- Click a task button to activate the corresponding window.
- When the mouse leaves the dock area or you click outside, the dock will automatically retract after a short delay.
- Supports Wayland only; it does not work on X11.
- Requires proper screen management and layer-shell support.
- The application does not quit automatically when the last window closes, so it can remain running in the background during TTY switches.
Contributions are welcome! If you want to join development, discuss features, or report issues, please:
- open an issue to start a discussion,
- submit a pull request with bug fixes or feature improvements,
- suggest UI and usability enhancements,
- help improve Wayland compatibility and layer-shell behavior.
We appreciate contributions from the community and encourage developers to participate in improving wl-dock.
wl-dock is licensed under the GNU General Public License v3.0 (GPL-3.0).
