Skip to main content

NixOS Installation

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

DankMaterialShell can be installed on NixOS using the NixOS module. This guide covers the native nixpkgs installation method.

NixOS Unstable Required

DankMaterialShell is currently only available in the unstable branch of nixpkgs. If you're on NixOS stable (currently 25.11), you'll need to use the Flake Installation method instead.

Installation

1. Enable NixOS Unstable

Ensure you're using NixOS unstable by setting your channel or flake input:

Using channels:

sudo nix-channel --add https://nixos.org/channels/nixos-unstable nixos
sudo nix-channel --update

Using flakes (in flake.nix):

{
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
};
}

2. Enable DankMaterialShell

In your NixOS configuration, enable DankMaterialShell:

programs.dms-shell.enable = true;

That's it! Rebuild your system and DankMaterialShell will be installed with sensible defaults.

Configuration Options

DankMaterialShell provides numerous configuration options to customize your installation. Here are the main options:

Feature Toggles

programs.dms-shell = {
enable = true;

systemd = {
enable = true; # Systemd service for auto-start
restartIfChanged = true; # Auto-restart dms.service when dms-shell changes
};

# Core features
enableSystemMonitoring = true; # System monitoring widgets (dgop)
enableClipboard = true; # Clipboard history manager
enableVPN = true; # VPN management widget
enableDynamicTheming = true; # Wallpaper-based theming (matugen)
enableAudioWavelength = true; # Audio visualizer (cava)
enableCalendarEvents = true; # Calendar integration (khal)
};

Custom Quickshell Package

If you need a specific version of Quickshell:

programs.dms-shell = {
enable = true;
quickshell.package = pkgs.quickshell; # or your custom package
};

Using Quickshell from Source

Recommended for Latest Features

Many features in DankMaterialShell rely on unreleased Quickshell features. For the best experience, you may want to use Quickshell built from source.

To use Quickshell from source, add it as a flake input:

{
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";

quickshell = {
url = "git+https://git.outfoxxed.me/quickshell/quickshell";
inputs.nixpkgs.follows = "nixpkgs";
};
};
}

Then use it in your configuration:

programs.dms-shell = {
enable = true;
quickshell.package = inputs.quickshell.packages.${pkgs.stdenv.hostPlatform.system}.quickshell;
};

Using Flake Package with NixOS Module

You can use the package from the DankMaterialShell flake while still using the native NixOS module. This allows you to get quicker updates while keeping the module configuration:

First, add the flake input to your flake.nix:

{
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";

dms = {
url = "github:AvengeMedia/DankMaterialShell/stable";
inputs.nixpkgs.follows = "nixpkgs";
};
};
}
Using Unstable Version

If you want to use the unstable (-git) version from the master branch for quicker updates, remove /stable from the URL:

dms.url = "github:AvengeMedia/DankMaterialShell";

However, be aware that the unstable version may not work properly and could contain breaking changes. The documentation may not reflect the latest changes in the unstable version.

Then use the flake package with the native module:

programs.dms-shell = {
enable = true;
package = inputs.dms.packages.${pkgs.stdenv.hostPlatform.system}.default;
};
warning

When using the flake package with the native nixpkgs module, some dependencies may not be automatically enabled by default, and certain configurations might be missing. You may need to manually install optional dependencies or adjust feature toggles to match your needs.

Plugins

Install DankMaterialShell plugins declaratively:

programs.dms-shell = {
enable = true;

plugins = {
DockerManager = {
src = pkgs.fetchFromGitHub {
owner = "LuckShiba";
repo = "DmsDockerManager";
rev = "v1.2.0";
sha256 = "sha256-VoJCaygWnKpv0s0pqTOmzZnPM922qPDMHk4EPcgVnaU=";
};
};
AnotherPlugin = {
enable = true;
src = pkgs.another-plugin;
};
};
};

Advanced Configuration

For a complete list of available options, check the module file in nixpkgs:

  • NixOS module: nixos/modules/programs/dms-shell.nix in nixpkgs

Rebuilding

After making configuration changes, rebuild your system:

sudo nixos-rebuild switch

Troubleshooting

DMS doesn't start automatically

Make sure you have systemd.enable = true set:

programs.dms-shell = {
enable = true;
systemd.enable = true;
};

Missing dependencies

Each feature has its own dependency set. If a feature isn't working, ensure the corresponding enable option is set to true. For example, clipboard history requires enableClipboard = true which installs cliphist and wl-clipboard.

Next Steps