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.
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.
- Stable Release
- Latest Development Build
sudo pacman -S dms-shell
paru -S dms-shell-git
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.
- Stable Release
- Latest Development Build
sudo dnf copr enable avengemedia/dms
sudo dnf install dms
sudo dnf copr enable avengemedia/dms-git
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.
- Debian 13 (Trixie)
- Debian Testing
- Debian Sid
- Stable Release
- Latest Development Build
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
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-git/Debian_13/Release.key | \
sudo gpg --dearmor -o /etc/apt/keyrings/avengemedia-dms-git.gpg
echo "deb [signed-by=/etc/apt/keyrings/avengemedia-dms-git.gpg] https://download.opensuse.org/repositories/home:/AvengeMedia:/dms-git/Debian_13/ /" | \
sudo tee /etc/apt/sources.list.d/avengemedia-dms-git.list
sudo apt update
sudo apt install dms-git
- Stable Release
- Latest Development Build
curl -fsSL https://download.opensuse.org/repositories/home:AvengeMedia:danklinux/Debian_Testing/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_Testing/ /" | \
sudo tee /etc/apt/sources.list.d/danklinux.list
curl -fsSL https://download.opensuse.org/repositories/home:/AvengeMedia:/dms/Debian_Testing/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_Testing/ /" | \
sudo tee /etc/apt/sources.list.d/avengemedia-dms.list
sudo apt update
sudo apt install dms
curl -fsSL https://download.opensuse.org/repositories/home:AvengeMedia:danklinux/Debian_Testing/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_Testing/ /" | \
sudo tee /etc/apt/sources.list.d/danklinux.list
curl -fsSL https://download.opensuse.org/repositories/home:/AvengeMedia:/dms-git/Debian_Testing/Release.key | \
sudo gpg --dearmor -o /etc/apt/keyrings/avengemedia-dms-git.gpg
echo "deb [signed-by=/etc/apt/keyrings/avengemedia-dms-git.gpg] https://download.opensuse.org/repositories/home:/AvengeMedia:/dms-git/Debian_Testing/ /" | \
sudo tee /etc/apt/sources.list.d/avengemedia-dms-git.list
sudo apt update
sudo apt install dms-git
- Stable Release
- Latest Development Build
curl -fsSL https://download.opensuse.org/repositories/home:AvengeMedia:danklinux/Debian_Unstable/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_Unstable/ /" | \
sudo tee /etc/apt/sources.list.d/danklinux.list
curl -fsSL https://download.opensuse.org/repositories/home:/AvengeMedia:/dms/Debian_Unstable/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_Unstable/ /" | \
sudo tee /etc/apt/sources.list.d/avengemedia-dms.list
sudo apt update
sudo apt install dms
curl -fsSL https://download.opensuse.org/repositories/home:AvengeMedia:danklinux/Debian_Unstable/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_Unstable/ /" | \
sudo tee /etc/apt/sources.list.d/danklinux.list
curl -fsSL https://download.opensuse.org/repositories/home:/AvengeMedia:/dms-git/Debian_Unstable/Release.key | \
sudo gpg --dearmor -o /etc/apt/keyrings/avengemedia-dms-git.gpg
echo "deb [signed-by=/etc/apt/keyrings/avengemedia-dms-git.gpg] https://download.opensuse.org/repositories/home:/AvengeMedia:/dms-git/Debian_Unstable/ /" | \
sudo tee /etc/apt/sources.list.d/avengemedia-dms-git.list
sudo apt update
sudo apt install dms-git
Ubuntu
Ubuntu 26.04 LTS+ (Resolute Raccoon) is supported via Launchpad PPA.
- Stable Release
- Latest Development Build
sudo add-apt-repository ppa:avengemedia/danklinux
sudo add-apt-repository ppa:avengemedia/dms
sudo apt update
sudo apt install dms
sudo add-apt-repository ppa:avengemedia/danklinux
sudo add-apt-repository ppa:avengemedia/dms-git
sudo apt update
sudo apt install dms-git
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.
- Tumbleweed
- Leap 16
- Leap 16.1
- Slowroll
- Stable Release
- Latest Development Build
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
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-git/openSUSE_Tumbleweed/home:AvengeMedia:dms-git.repo
sudo zypper refresh
sudo zypper install dms-git
- Stable Release
- Latest Development Build
sudo zypper addrepo https://download.opensuse.org/repositories/home:AvengeMedia:danklinux/16.0/home:AvengeMedia:danklinux.repo
sudo zypper addrepo https://download.opensuse.org/repositories/home:/AvengeMedia:/dms/16.0/home:AvengeMedia:dms.repo
sudo zypper refresh
sudo zypper install dms
sudo zypper addrepo https://download.opensuse.org/repositories/home:AvengeMedia:danklinux/16.0/home:AvengeMedia:danklinux.repo
sudo zypper addrepo https://download.opensuse.org/repositories/home:/AvengeMedia:/dms-git/16.0/home:AvengeMedia:dms-git.repo
sudo zypper refresh
sudo zypper install dms-git
- Stable Release
- Latest Development Build
sudo zypper addrepo https://download.opensuse.org/repositories/home:AvengeMedia:danklinux/16.1/home:AvengeMedia:danklinux.repo
sudo zypper addrepo https://download.opensuse.org/repositories/home:/AvengeMedia:/dms/16.1/home:AvengeMedia:dms.repo
sudo zypper refresh
sudo zypper install dms
sudo zypper addrepo https://download.opensuse.org/repositories/home:AvengeMedia:danklinux/16.1/home:AvengeMedia:danklinux.repo
sudo zypper addrepo https://download.opensuse.org/repositories/home:/AvengeMedia:/dms-git/16.1/home:AvengeMedia:dms-git.repo
sudo zypper refresh
sudo zypper install dms-git
- Stable Release
- Latest Development Build
sudo zypper addrepo https://download.opensuse.org/repositories/home:AvengeMedia:danklinux/openSUSE_Slowroll/home:AvengeMedia:danklinux.repo
sudo zypper addrepo https://download.opensuse.org/repositories/home:/AvengeMedia:/dms/openSUSE_Slowroll/home:AvengeMedia:dms.repo
sudo zypper refresh
sudo zypper install dms
sudo zypper addrepo https://download.opensuse.org/repositories/home:AvengeMedia:danklinux/openSUSE_Slowroll/home:AvengeMedia:danklinux.repo
sudo zypper addrepo https://download.opensuse.org/repositories/home:/AvengeMedia:/dms-git/openSUSE_Slowroll/home:AvengeMedia:dms-git.repo
sudo zypper refresh
sudo zypper install dms-git
Gentoo (Community)
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.
- Stable Release
- Latest Development Build
guru (Recommended)
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
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:
- tdgentoo
- dacyberduck
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
Provides DMS under dank-base/dankmaterialshell:
sudo eselect repository add dacyberduck git https://codeberg.org/dacyberduck/gentoo-overlay.git
sudo emaint sync -r dacyberduck
sudo emerge --ask dank-base/dankmaterialshell
quilat-overlay
Provides a live ebuild (gui-shell/dms-9999) tracking git master with OpenRC and systemd support.
sudo eselect repository add quilat-overlay git https://github.com/Graght/quilat-overlay.git
sudo emaint sync -r quilat-overlay
Choose the appropriate command for your init system:
- systemd
- OpenRC
sudo emerge --ask gui-shell/dms
sudo USE="-systemd" emerge --ask gui-shell/dms
NixOS
NixOS has dedicated documentation with two installation methods:
- Native nixpkgs installation - Recommended for NixOS 26.05+
- Flake-based installation - Use for home-manager, per-user installs, or quicker updates
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
Install the niri-session, sway-session, or labwc-session packages for those compositors to appear in the session list for your greeter.
Void Linux
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.
- DMS-Hosted Repository
- Build from Source
- Stable Release
- Latest Development Build
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
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-git
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.
If you prefer to build from source using xbps-src:
# Set up the Void packages tree (one time)
git clone --depth 1 https://github.com/void-linux/void-packages.git
cd void-packages
./xbps-src binary-bootstrap
# Copy in the DMS and DankLinux templates (adjust paths as needed)
cp -R ../DankLinux/distro/void/srcpkgs/* srcpkgs/
cp -R ../DankMaterialShell/distro/void/srcpkgs/* srcpkgs/
# Build the packages (dms requires dgop)
./xbps-src pkg dgop
./xbps-src pkg danksearch
./xbps-src pkg dms
./xbps-src pkg dms-greeter # optional greetd greeter
# Install the results
sudo xbps-install --repository=hostdir/binpkgs dms dgop
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)
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
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
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
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 listsdsearch- Filesystem search enginematugen- Material Design color palette generationi2c-tools- ddc monitor backlight controldankcalendar- Desktop calendar integrationcava- Audio visualizer widgetqt6-multimedia- System sound feedback
Post Install
After completing installation:
- Generate compositor config (niri/Hyprland only): Run
dms setupto create a starter configuration with DMS keybinds and autostart. Other compositors (sway, MangoWC, labwc, Miracle WM) are supported but require manual configuration. - Enable the systemd service (recommended) or add
dms runto your compositor config - Configure your compositor keybinds - see the Keybinds & IPC guide
- Customize appearance via Themes
- Extend functionality with Plugins
See Managing Your Installation for detailed guidance on service management, environment variables, and updates.
Systemd Integration (Recommended)
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
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.
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:
[Unit]
Description=Hyprland Session Target
Requires=graphical-session.target
After=graphical-session.target
Add to your Hyprland config (after any env = lines):
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:
[Unit]
Description=MangoWC Session Target
Requires=graphical-session.target
After=graphical-session.target
Add to your MangoWC config:
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:
[Unit]
Description=Sway Session Target
Requires=graphical-session.target
After=graphical-session.target
Add to your 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:
[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