Skip to main content
Version: 1.6

Overview & Architecture

██████╗ ███╗   ███╗███████╗
██╔══██╗████╗ ████║██╔════╝
██║  ██║██╔████╔██║███████╗
██║  ██║██║╚██╔╝██║╚════██║
██████╔╝██║ ╚═╝ ██║███████║
╚═════╝ ╚═╝     ╚═╝╚══════╝

DankMaterialShell (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​

DankMaterialShell 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
DankMaterialShell - QuickshellFrontend powering widgets, modals, and user experience.
DankMaterialShell - 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​

DankMaterialShell 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://danklinux.com

When a URL is opened, DankMaterialShell 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 DankMaterialShell 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 DankMaterialShell 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 DankMaterialShell to be launched from application menus and integrated with desktop environments.

Next Steps​

Continue with Installation to get DankMaterialShell running on your system.

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