Skip to main content
Version: 1.5

Installation

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

This guide covers installation of DankMaterialShell across different Linux distributions and methods.

Dependencies

  • quickshell (required) - The core framework
  • cava (optional) - Audio visualizer widget
  • dankcalendar (optional) - Complete desktop calendar app with native integration for DMS calendar widgets
  • dgop (optional) - System telemetry for resource widgets
  • dsearch (optional) - Filesystem search engine
  • matugen (optional) - Material Design color palette generation
  • niri (optional) - DMS Team's choice of Wayland compositor
  • qt6-multimedia (optional) - System sound feedback

For pre-built packages on Fedora, Debian, Ubuntu, and OpenSUSE, see the DankLinux Repository page.

note

Only Quickshell is required. All other dependencies are optional and enable specific features.

Arch & Derivatives

dms is available in the official Arch repositories (extra), and as a development package in the AUR.

sudo pacman -S dms-shell

These packages ship the shell, widgets, and CLI. Pair them with niri, hyprland, sway, mangowc, labwc, or miracle-wm packages from the official repositories for a complete desktop stack.

Fedora & CentOS

DankMaterialShell is available through COPR repositories for Fedora 41/42/43 rawhide and CentOS 10.

sudo dnf copr enable avengemedia/dms
sudo dnf install dms

The COPR repositories also provide companion packages such as quickshell-git, dankcalendar, matugen, and other utilities used by the default configuration.

Debian & Ubuntu

DankMaterialShell is available through Open Build Service (OBS) for Debian and Launchpad PPA for Ubuntu.

Debian

Packages are published on OBS for Debian 13 (Trixie), Debian Testing, and Debian Sid.

Select your release, then choose stable or development packages.

curl -fsSL https://download.opensuse.org/repositories/home:AvengeMedia:danklinux/Debian_13/Release.key | \
sudo gpg --dearmor -o /etc/apt/keyrings/danklinux.gpg
echo "deb [signed-by=/etc/apt/keyrings/danklinux.gpg] https://download.opensuse.org/repositories/home:/AvengeMedia:/danklinux/Debian_13/ /" | \
sudo tee /etc/apt/sources.list.d/danklinux.list

curl -fsSL https://download.opensuse.org/repositories/home:/AvengeMedia:/dms/Debian_13/Release.key | \
sudo gpg --dearmor -o /etc/apt/keyrings/avengemedia-dms.gpg
echo "deb [signed-by=/etc/apt/keyrings/avengemedia-dms.gpg] https://download.opensuse.org/repositories/home:/AvengeMedia:/dms/Debian_13/ /" | \
sudo tee /etc/apt/sources.list.d/avengemedia-dms.list

sudo apt update
sudo apt install dms

Ubuntu

Ubuntu 26.04 LTS+ (Resolute Raccoon) is supported via Launchpad PPA.

sudo add-apt-repository ppa:avengemedia/danklinux
sudo add-apt-repository ppa:avengemedia/dms
sudo apt update
sudo apt install dms
tip

Visit the DankLinux Repository page for OBS and PPA links and more information about available packages.
Add niri or niri-git to your system to get the best experience.

OpenSUSE & Derivatives

DankMaterialShell is available through the Open Build Service (OBS) for OpenSUSE Tumbleweed, Leap 16/16.1, and Slowroll.

Select your distribution, then choose stable or development packages.

sudo zypper addrepo https://download.opensuse.org/repositories/home:AvengeMedia:danklinux/openSUSE_Tumbleweed/home:AvengeMedia:danklinux.repo
sudo zypper addrepo https://download.opensuse.org/repositories/home:/AvengeMedia:/dms/openSUSE_Tumbleweed/home:AvengeMedia:dms.repo
sudo zypper refresh
sudo zypper install dms

Gentoo (Community)

Community Maintained

These overlays are maintained by the community, not the DMS team. For issues with the ebuilds, report to the respective overlay repositories.

DankMaterialShell is available on Gentoo through various community overlays.

Enable the official guru overlay, which packages DMS (gui-apps/dankmaterialshell) alongside companion tools gui-apps/dgop and gui-apps/danksearch.

sudo eselect repository enable guru
sudo emaint sync -r guru
sudo emerge --ask gui-apps/dankmaterialshell
note

The guru overlay packages are keyworded ~amd64, so you may need to accept the testing keyword. For example:

echo "gui-apps/dankmaterialshell ~amd64" | sudo tee -a /etc/portage/package.accept_keywords/dankmaterialshell

Alternative Overlays

If you prefer not to use guru, you can use one of these alternative stable overlays:

Provides a versioned ebuild (gui-wm/DankMaterialShell) pinned to stable releases:

sudo eselect repository add tdgentoo git https://github.com/timdodge/tdgentoo.git
sudo emaint sync -r tdgentoo
sudo emerge --ask gui-wm/DankMaterialShell

NixOS

tip

NixOS has dedicated documentation with two installation methods:

Solus

DankMaterialShell is available from the official Solus repository. Pair it with niri, hyprland, sway, or labwc packages from the official repositories for a complete desktop stack.

sudo eopkg install dankmaterialshell
tip

Install the niri-session, sway-session, or labwc-session packages for those compositors to appear in the session list for your greeter.

Void Linux

note

Void packages are pending submission to the official void-packages repository. Until they are merged upstream, you can install them from our self-hosted custom XBPS repositories or build them from source.

echo "repository=https://avengemedia.github.io/DankMaterialShell/current" | sudo tee /etc/xbps.d/dms.conf
echo "repository=https://avengemedia.github.io/DankLinux/current" | sudo tee /etc/xbps.d/danklinux.conf
sudo xbps-install -Su
sudo xbps-install -S dms
note

On the first sync, xbps-install will output our signing key fingerprint and ask you to type y to trust and import it. Verify that the key matches our official signing fingerprint.

Only quickshell is strictly required. Install optional features as desired — matugen (theming), cava (audio visualiser), danksearch (search), dankcalendar (calendar), qt6-multimedia (sounds) — and a compositor such as niri, hyprland, or sway. See the Void README for the full optional-dependency list and greeter setup.

Running Wayland from TTY (Without a Display Manager)

tip

If you use dms-greeter, all seat management, D-Bus initialization, and runtime directories are handled for you automatically. You only need the manual steps below if you choose to bypass display managers entirely and launch your compositor manually from a pure TTY shell.

If you choose to launch your compositor (like niri, Hyprland, or sway) directly from a TTY login prompt instead of using a display manager (like greetd), Void Linux requires some manual runtime configuration because it does not run systemd by default:

1. Configure Seat Management (seatd)

Wayland compositors require permissions to access input and graphics hardware devices directly. Void uses seatd for this:

# Install and enable the seatd daemon
sudo xbps-install -S seatd
sudo ln -s /etc/sv/seatd /var/service/

# Add your user to the seatd group to allow hardware access
sudo usermod -a -G _seatd $(whoami)

Note: You must log out of the TTY and log back in (or reboot) for your user group changes to take effect.

2. Start D-Bus and Launch the Session

A D-Bus session bus is required for desktop utilities (including the DMS daemon and panels) to communicate. Install and enable the system bus, then launch your compositor wrapped inside a D-Bus session:

# Install and enable the system-wide D-Bus service
sudo xbps-install -S dbus
sudo ln -s /etc/sv/dbus /var/service/

# Launch your compositor from the TTY command line:
dbus-run-session niri
# or
dbus-run-session Hyprland

3. Handle XDG_RUNTIME_DIR

Wayland sockets and configurations require XDG_RUNTIME_DIR to be defined. If it is not automatically set on your system (e.g. if you are not running elogind), add the following fallback script to your shell login configuration file (e.g., ~/.bash_profile or ~/.zprofile):

if [ -z "$XDG_RUNTIME_DIR" ]; then
export XDG_RUNTIME_DIR=/run/user/$(id -u)
if [ ! -d "$XDG_RUNTIME_DIR" ]; then
mkdir -p "$XDG_RUNTIME_DIR"
chmod 700 "$XDG_RUNTIME_DIR"
fi
fi

All Other Distributions

warning

This guide doesn't cover compositor installation. You need a compatible Wayland compositor (niri, Hyprland, sway, dwl/MangoWC, Miracle WM, etc.).

1. Install Essential Dependencies

Quickshell

If your distribution does not provide a quickshell package, you'll need to build it from source. Quickshell requires:

Base dependencies:

  • cmake, qt6base, qt6declarative, qtshadertools, pkg-config, cli11
  • Private Qt headers for qt6declarative (and qt6wayland on Qt < 6.10)
  • Qt 6.6 or newer

Key features and their dependencies:

  • Wayland support (enabled by default) - qt6wayland, wayland, wayland-protocols
  • Crash reporter (recommended) - google-breakpad
  • Jemalloc (recommended for better memory management) - jemalloc
  • System tray - qt6dbus
  • PAM authentication - pam

For complete build instructions and feature flags, see the Quickshell BUILD.md.

AccountsService

note

AccountsService is needed to persist user profile configurations such as profile pictures. Available in most repositories as accountsservice.

# Arch + Friends
sudo pacman -S accountsservice
# Fedora + Friends
sudo dnf install accountsservice
# Debian, Ubuntu + Friends
sudo apt install accountsservice
# openSUSE + Friends
sudo zypper install accountsservice
# Gentoo
sudo emerge --ask sys-apps/accountsservice

2. Clone the DMS Repository

git clone https://github.com/AvengeMedia/DankMaterialShell.git ~/dms

3. Compile & Install the DMS Backend

Requires GO 1.24+

cd ~/dms
sudo make install
note

To uninstall a source build, run sudo make uninstall from the repository directory.

4. Install Optional Integrations

Install optional components for full functionality using your distribution's package manager:

  • dgop - Detailed system metrics and process lists
  • dsearch - Filesystem search engine
  • matugen - Material Design color palette generation
  • i2c-tools - ddc monitor backlight control
  • dankcalendar - Desktop calendar integration
  • cava - Audio visualizer widget
  • qt6-multimedia - System sound feedback

Post Install

After completing installation:

  1. Generate compositor config (niri/Hyprland only): Run dms setup to create a starter configuration with DMS keybinds and autostart. Other compositors (sway, MangoWC, labwc, Miracle WM) are supported but require manual configuration.
  2. Enable the systemd service (recommended) or add dms run to your compositor config
  3. Configure your compositor keybinds - see the Keybinds & IPC guide
  4. Customize appearance via Themes
  5. Extend functionality with Plugins

See Managing Your Installation for detailed guidance on service management, environment variables, and updates.

DankInstall Users

If you used dankinstall, this is already configured. The installer runs systemctl --user enable --now dms during setup.

Enable autostart:

systemctl --user enable dms

Manual control:

# Start DMS now
systemctl --user start dms

# Check status
systemctl --user status dms

# View logs
journalctl --user -u dms -f

# Restart DMS
systemctl --user restart dms

# Disable autostart
systemctl --user disable dms
warning

If using systemd autostart, remove dms run / spawn "dms" "run" / exec-once=dms run from your compositor's configuration to avoid running DMS twice.

Compositor-Specific Systemd Setup

Different compositors have different levels of systemd session integration. Choose the section that matches your compositor.

Why use add-wants?

If you have multiple desktop environments installed (e.g., Plasma, GNOME, niri), using systemctl --user enable dms starts DMS in all of them. Using add-wants binds DMS to a specific compositor's service or session target, so it only runs where you want it. DMS won't launch when you log into Plasma or GNOME.

niri

niri has native systemd session integration. Bind DMS to niri's service:

systemctl --user add-wants niri.service dms

DMS starts when niri starts and stops when niri exits. It won't run in other sessions.

Hyprland

Hyprland doesn't initialize the systemd user session by default. You need to export the environment to systemd for user services to work.

Create a session target:

~/.config/systemd/user/hyprland-session.target
[Unit]
Description=Hyprland Session Target
Requires=graphical-session.target
After=graphical-session.target

Add to your Hyprland config (after any env = lines):

~/.config/hypr/hyprland.conf
exec-once = dbus-update-activation-environment --systemd --all
exec-once = systemctl --user start hyprland-session.target

Bind DMS to the session target:

systemctl --user add-wants hyprland-session.target dms

MangoWC

MangoWC is a dynamic tiling compositor based on dwl (wlroots). Like other wlroots compositors, it requires manual environment export for systemd user services.

Create a session target:

~/.config/systemd/user/mango-session.target
[Unit]
Description=MangoWC Session Target
Requires=graphical-session.target
After=graphical-session.target

Add to your MangoWC config:

~/.config/mango/config.conf
exec-once=dbus-update-activation-environment --systemd --all
exec-once=systemctl --user start mango-session.target

Bind DMS to the session:

systemctl --user add-wants mango-session.target dms

Sway

Sway (wlroots-based) needs the environment exported for systemd services.

Create a session target:

~/.config/systemd/user/sway-session.target
[Unit]
Description=Sway Session Target
Requires=graphical-session.target
After=graphical-session.target

Add to your Sway config:

~/.config/sway/config
exec dbus-update-activation-environment --systemd --all
exec systemctl --user start sway-session.target

Bind DMS to the session:

systemctl --user add-wants sway-session.target dms

Miracle WM

Miracle WM is a tiling Wayland compositor built on Mir. Like other compositors without native systemd session integration, it requires manual environment export.

Create a session target:

~/.config/systemd/user/miracle-wm-session.target
[Unit]
Description=Miracle WM Session Target
Requires=graphical-session.target
After=graphical-session.target

Bind DMS to the session:

systemctl --user add-wants miracle-wm-session.target dms