Skip to main content
Version: 2.1

Overview & Architecture

Dux Shell

Overview & Architecture

Dux Shell (dms) is a Wayland desktop shell built with Quickshell and Go. It serves a purpose similar to GNOME Shell or KDE Plasma, providing a unified interface for launching applications, managing windows, managing hardware interfaces, notifications, and much more.

General Features​

  • Launcher (Apps, file search, web search, emoji search, calculations, and extendable with plugins)
  • System Tray
  • Notifications with grouping support
  • Network Management (via NetworkManager, iwd, systemd-networkd, or some hybrid setups)
  • VPN Management (via NetworkManager)
  • Bluetooth Management (via BlueZ)
  • Audio Management (via PipeWire)
  • Idle & Power Management
  • Brightness controls (Backlight, LEDs, and i2c/ddc)
  • Lock Screen
  • Process & System Monitoring
  • Theming (Light, Dark, Automatic Colors, Premade themes, and Custom Accent Colors)
  • Multi-monitor support
  • Gamma control (night mode)
  • Wallpaper management with transitions, multi-monitor support, and automatic transitioning.
  • Clipboard history manager
  • System sounds (such as notifications, volume changes, etc.)
  • Mpris media controls with audio visualization
  • Browser picker modal for URL handling with default browser selection
  • Dozens of widgets and plugins available to allow virtually any feature you can imagine.

There's really too much to list, but those are some of the highlights!

Architecture​

Dux Shell uses a client-server architecture where a Go backend (dms) manages system integrations and spawns the Quickshell-based UI as a child process. Communication happens over Unix socket using REQ/REP and PUB/SUB patterns.

Key Points:

  • dms spawns Quickshell as a child process
  • dms and Quickshell both integrate with Wayland and D-Bus APIs independently
  • dms fills gaps that Quickshell doesn't handle natively
  • Communication between QML app and dms backend happens via Unix socket

Component Overview​

ComponentRole
Dux Shell - QuickshellFrontend powering widgets, modals, and user experience.
Dux Shell - Backend (cli)Bridges DBus, Wayland, and plugin APIs - also a management CLI
dgopOptional system telemetry service used by resource widgets.
dsearchOptional filesystem search engine used by the Spotlight launcher.

Desktop Integration​

Dux Shell includes a browser picker modal that appears when URLs are activated within the shell.

Opening URLs​

You can open URLs directly from the terminal using the dms open command:

dms open https://duxlabs.dev

When a URL is opened, Dux Shell displays a modal dialog with a list of installed web browsers, allowing you to select your preferred browser or set a default for future URL openings.

Setting Default Web Browser​

To set Dux Shell as your default web browser handler:

xdg-settings set default-web-browser dms-open.desktop

File Associations​

You can configure file type associations using xdg-mime commands. For example, to set Dux Shell as the default handler for specific MIME types:

# Set as default for HTTP/HTTPS URLs
xdg-mime default dms-open.desktop x-scheme-handler/http
xdg-mime default dms-open.desktop x-scheme-handler/https

Desktop Entry​

The desktop entry file (dms-open.desktop) follows the freedesktop.org Desktop Entry Specification and allows Dux Shell to be launched from application menus and integrated with desktop environments.

Next Steps​

Continue with Installation to get Dux Shell running on your system.

Dux Shell is open source and welcomes contributions ranging from core code changes to new widgets and plugins to documentation improvements.