ワンクリックで
dankms
DankMaterialShell (DMS) Skill
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
DankMaterialShell (DMS) Skill
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
Read, write, search and reorganise notes in the local Obsidian vaults. Use for anything touching ~/Documents/R3_vault, ~/Documents/Synechron or ~/Documents/My_Obsidian_Vault/Privat — finding notes, adding or editing content, renaming/moving notes without breaking links, and daily notes. Triggers on "my notes", "my vault", "Obsidian", "write this up in my notes", or a request to look something up in personal documentation.
Manage DNS records for the user's GoDaddy-registered domains. Add/upsert, delete, list, look up specific records, verify a stored record matches an expected value, and check public DNS resolution via dig. Triggers on `/dns`, requests to add/change/check A, AAAA, CNAME, MX, TXT, NS, SRV records on the user's domains, debugging DNS propagation, or auditing what's set at GoDaddy vs what's resolving in the wild.
Operate Google Workspace from the terminal via the `gog` CLI (gogcli). Use for checking and replying to Gmail, managing Google Tasks, reading and creating Calendar events, Google Chat (spaces/DMs/messages), Meet spaces, Contacts, Drive/Docs/Sheets, and more. Triggers on `/gog`, `/gog mail`, `/gog tasks`, `/gog events`, `/gog chat`, `/gog meet`, or any request to check/read/reply/send email, list or add tasks, see today's agenda, or message someone on Chat for the user's Google account.
Agenix Skill
cargo2nix Skill
COSMIC Desktop Environment Skill
| name | dankms |
| version | 1 |
| description | DankMaterialShell (DMS) Skill |
A specialized skill for configuring and customizing DankMaterialShell with Wayland compositors (MangoWC, Niri, Hyprland, Sway, labwc), providing expert guidance on this complete desktop shell replacement built with Quickshell & Go.
Purpose: Provide comprehensive support for DankMaterialShell configuration, theming, and integration with Wayland compositors in NixOS.
Invoke When:
DankMaterialShell (DMS) is a complete desktop shell for Wayland compositors that replaces waybar, swaylock, swayidle, mako, fuzzel, polkit, and everything else you'd normally stitch together to make a desktop.
Built With:
Key Philosophy: Instead of combining multiple separate tools (waybar + mako + fuzzel + swaylock + etc.), DMS provides a unified, cohesive desktop experience.
Project: AvengeMedia/DankMaterialShell Website: danklinux.com Documentation: danklinux.com/docs
DMS Replaces:
| Traditional Tool | DMS Component | Purpose |
|---|---|---|
| waybar | DMS Panels | Status bar and panels |
| swaylock | DMS Session | Screen lock |
| swayidle | DMS Session | Idle detection |
| mako/dunst | DMS Notifications | Notification system |
| fuzzel/rofi | DMS Spotlight | Application launcher |
| polkit-agent | DMS Polkit | Authentication |
| nm-applet | DMS Control Center | Network management |
| blueman | DMS Control Center | Bluetooth management |
| pavucontrol | DMS Control Center | Audio control |
Three-Part Architecture:
Quickshell (QML Interface)
Core (Go Backend)
dms CLI for shell controlDistro (Packaging)
# Automatic installation for most distros
curl -fsSL https://install.danklinux.com | sh
# Supports: Arch, Fedora, Debian, Ubuntu, openSUSE, Gentoo
# flake.nix
{
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
home-manager = {
url = "github:nix-community/home-manager";
inputs.nixpkgs.follows = "nixpkgs";
};
# Add DankMaterialShell
dms = {
url = "github:AvengeMedia/DankMaterialShell";
inputs.nixpkgs.follows = "nixpkgs";
};
};
outputs = { nixpkgs, home-manager, dms, ... }: {
nixosConfigurations.hostname = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
modules = [
home-manager.nixosModules.home-manager
{
home-manager.users.username = {
# Import DMS home-manager module
imports = [ dms.homeModules.dankMaterialShell.default ];
# Enable DankMaterialShell
programs.dankMaterialShell = {
enable = true;
# Compositor integration
compositor = "niri"; # or "hyprland", "mangowc", "sway", "labwc"
# Theming
theming = {
matugen.enable = true; # Wallpaper-based theming
dank16.enable = true; # Color scheme generation
};
# Components
components = {
panels.enable = true;
spotlight.enable = true;
notifications.enable = true;
controlCenter.enable = true;
session.enable = true;
polkit.enable = true;
};
};
};
}
];
};
};
}
# Binary package
yay -S dms-shell-bin
# Git version
yay -S dms-shell-git
# Clone repository
git clone https://github.com/AvengeMedia/DankMaterialShell.git
cd DankMaterialShell
# Build Go backend
cd core
make
make dankinstall
# Run Quickshell
cd ..
quickshell -p quickshell/
DMS works best with these compositors (full workspace switching, overview integration, monitor management):
Other Wayland compositors work with reduced features.
# home.nix
{ config, pkgs, ... }:
{
# Configure Niri
programs.niri.settings = {
# Disable built-in components (DMS replaces them)
# No need for waybar, etc.
# Spawn DMS at startup
spawn-at-startup = [
{ command = [ "dms" "run" ]; }
];
# DMS handles panels, so adjust struts
layout.struts = {
top = 40; # DMS panel height
bottom = 0;
left = 0;
right = 0;
};
# Remove keybindings that conflict with DMS
binds = {
# Let DMS handle launcher
# "Mod+Space" removed
# DMS Spotlight toggle
"Mod+Space".action = spawn "dms" "ipc" "call" "spotlight" "toggle";
# DMS Control Center
"Mod+Shift+C".action = spawn "dms" "ipc" "call" "controlcenter" "toggle";
# DMS lock screen
"Mod+L".action = spawn "dms" "ipc" "call" "session" "lock";
};
};
# Enable DankMaterialShell
programs.dankMaterialShell = {
enable = true;
compositor = "niri";
};
}
# home.nix
{ config, pkgs, ... }:
{
# Configure Hyprland
wayland.windowManager.hyprland.settings = {
# Spawn DMS at startup
exec-once = [
"dms run"
];
# DMS keybindings
bind = [
# Launcher
"SUPER, Space, exec, dms ipc call spotlight toggle"
# Control Center
"SUPER_SHIFT, C, exec, dms ipc call controlcenter toggle"
# Lock screen
"SUPER, L, exec, dms ipc call session lock"
# Volume (DMS handles OSD)
", XF86AudioRaiseVolume, exec, dms ipc call audio setvolume +5"
", XF86AudioLowerVolume, exec, dms ipc call audio setvolume -5"
", XF86AudioMute, exec, dms ipc call audio togglemute"
# Brightness (DMS handles OSD)
", XF86MonBrightnessUp, exec, dms brightness set +10"
", XF86MonBrightnessDown, exec, dms brightness set -10"
];
# Layer rules for DMS panels
layerrule = [
"blur, dms-panel"
"ignorezero, dms-panel"
];
# Window rules for DMS components
windowrulev2 = [
"float, class:^(dms-spotlight)$"
"center, class:^(dms-spotlight)$"
"stayfocused, class:^(dms-spotlight)$"
"float, class:^(dms-controlcenter)$"
"move 100%-420 60, class:^(dms-controlcenter)$"
"size 400 800, class:^(dms-controlcenter)$"
];
};
# Enable DankMaterialShell
programs.dankMaterialShell = {
enable = true;
compositor = "hyprland";
};
}
# ~/.config/mango/config.conf
# Spawn DMS at startup
spawn-at-startup "dms run"
# DMS keybindings
bind=SUPER,Space,spawn,dms ipc call spotlight toggle
bind=SUPER_SHIFT,c,spawn,dms ipc call controlcenter toggle
bind=SUPER,l,spawn,dms ipc call session lock
# Volume with DMS OSD
bind=,XF86AudioRaiseVolume,spawn,dms ipc call audio setvolume +5
bind=,XF86AudioLowerVolume,spawn,dms ipc call audio setvolume -5
bind=,XF86AudioMute,spawn,dms ipc call audio togglemute
# Brightness with DMS OSD
bind=,XF86MonBrightnessUp,spawn,dms brightness set +10
bind=,XF86MonBrightnessDown,spawn,dms brightness set -10
# ============ Shell Management ============
dms run # Start DankMaterialShell
dms stop # Stop DankMaterialShell
dms restart # Restart DankMaterialShell
dms version # Show version info
# ============ IPC Commands ============
# Spotlight (Launcher)
dms ipc call spotlight toggle # Toggle launcher
dms ipc call spotlight show # Show launcher
dms ipc call spotlight hide # Hide launcher
# Control Center
dms ipc call controlcenter toggle # Toggle control center
dms ipc call controlcenter show # Show control center
dms ipc call controlcenter hide # Hide control center
# Notifications
dms ipc call notifications show # Show notification center
dms ipc call notifications clear # Clear all notifications
dms ipc call notifications dismiss # Dismiss latest
# Audio
dms ipc call audio setvolume 50 # Set volume to 50%
dms ipc call audio setvolume +5 # Increase volume
dms ipc call audio setvolume -5 # Decrease volume
dms ipc call audio togglemute # Toggle mute
dms ipc call audio getsources # List audio sources
dms ipc call audio getsinks # List audio sinks
# Session
dms ipc call session lock # Lock screen
dms ipc call session unlock # Unlock screen
dms ipc call session logout # Logout
dms ipc call session suspend # Suspend system
dms ipc call session reboot # Reboot system
dms ipc call session shutdown # Shutdown system
# Wallpaper
dms ipc call wallpaper set /path/to/image.jpg
dms ipc call wallpaper next # Next wallpaper
dms ipc call wallpaper previous # Previous wallpaper
dms ipc call wallpaper random # Random wallpaper
# Theme
dms ipc call theme set dark # Set dark theme
dms ipc call theme set light # Set light theme
dms ipc call theme set auto # Auto theme (time-based)
dms ipc call theme list # List available themes
# Night Mode
dms ipc call nightmode toggle # Toggle night mode
dms ipc call nightmode set 3500 # Set color temperature
# ============ Display Management ============
dms brightness list # List displays
dms brightness get # Get current brightness
dms brightness set 50 # Set brightness to 50%
dms brightness set +10 # Increase brightness
dms brightness set -10 # Decrease brightness
# ============ Plugin System ============
dms plugins search <query> # Search plugin registry
dms plugins list # List installed plugins
dms plugins install <plugin> # Install plugin
dms plugins remove <plugin> # Remove plugin
dms plugins update # Update all plugins
# ============ Configuration ============
dms config get <key> # Get config value
dms config set <key> <value> # Set config value
dms config reset # Reset to defaults
# ============ Debugging ============
dms debug logs # Show logs
dms debug status # Show system status
dms debug reload # Reload configuration
#!/bin/bash
# Example: Volume control with notification
case "$1" in
up)
dms ipc call audio setvolume +5
;;
down)
dms ipc call audio setvolume -5
;;
mute)
dms ipc call audio togglemute
;;
esac
DMS automatically generates color schemes from your wallpaper using matugen and dank16.
How It Works:
Configuration:
# home.nix
programs.dankMaterialShell = {
theming = {
# Enable automatic wallpaper-based theming
matugen = {
enable = true;
mode = "auto"; # or "dark", "light"
scheme = "content"; # or "expressive", "neutral", "vibrant"
contrast = 0.0; # -1.0 to 1.0
};
# Enable dank16 color scheme
dank16.enable = true;
# Custom matugen templates
customTemplates = [
"/home/user/.config/matugen/templates/myapp.toml"
];
};
# Initial wallpaper
wallpaper = "/home/user/Pictures/wallpaper.jpg";
};
Disable Matugen (if needed):
# Environment variable
export DMS_DISABLE_MATUGEN=1
# Then start DMS
dms run
Custom Themes:
# List available themes
dms ipc call theme list
# Pre-made themes:
# - Cyberpunk Electric
# - Hotline Miami
# - Miami Vice
# - Material Design 3 (default)
# Set custom theme
dms ipc call theme set "Cyberpunk Electric"
Manual Theme Creation:
# Create custom Material Design 3 theme
programs.dankMaterialShell.theming = {
customTheme = {
name = "My Custom Theme";
colors = {
primary = "#89b4fa";
secondary = "#cba6f7";
tertiary = "#f5c2e7";
error = "#f38ba8";
background = "#1e1e2e";
surface = "#313244";
onPrimary = "#11111b";
onSecondary = "#11111b";
onTertiary = "#11111b";
onError = "#11111b";
onBackground = "#cdd6f4";
onSurface = "#cdd6f4";
};
};
};
Powerful search supporting:
Configuration:
programs.dankMaterialShell.spotlight = {
enable = true;
keybind = "Super+Space";
# Search providers
providers = {
applications = true;
files = true;
emojis = true;
windows = true;
calculator = true;
web = true;
};
# File search paths
fileSearchPaths = [
"~/Documents"
"~/Downloads"
"~/Pictures"
];
# Appearance
width = 600;
maxResults = 8;
fuzzyMatching = true;
};
Usage:
# Toggle spotlight
dms ipc call spotlight toggle
# Or use keybind (default: Super+Space)
Unified interface for system settings:
Configuration:
programs.dankMaterialShell.controlCenter = {
enable = true;
keybind = "Super+Shift+C";
# Modules
modules = {
network = true;
bluetooth = true;
audio = true;
brightness = true;
nightMode = true;
power = true;
};
# Appearance
width = 400;
height = 800;
position = "top-right";
};
Rich notification system with:
Configuration:
programs.dankMaterialShell.notifications = {
enable = true;
# Position
position = "top-right";
offset = {
x = 10;
y = 60;
};
# Behavior
timeout = 5000; # 5 seconds
maxNotifications = 5;
grouping = true;
# Do Not Disturb
dnd = {
enable = true;
schedule = {
start = "22:00";
end = "07:00";
};
};
};
Handles:
Configuration:
programs.dankMaterialShell.session = {
enable = true;
# Lock screen
lock = {
wallpaper = "current"; # or path to image
showClock = true;
showDate = true;
blurBackground = true;
};
# Idle detection
idle = {
timeout = 300; # 5 minutes
actions = {
lock = true;
dpms = true;
};
};
# Auto-suspend
suspend = {
enable = true;
timeout = 1800; # 30 minutes
# Different timeouts for AC/battery
acTimeout = 3600; # 1 hour on AC
batteryTimeout = 900; # 15 minutes on battery
};
};
Status panels with widgets:
Configuration:
programs.dankMaterialShell.panels = {
enable = true;
# Top panel
top = {
height = 40;
modules = {
left = [
"workspaces"
"window-title"
];
center = [
"clock"
];
right = [
"system-tray"
"audio"
"network"
"battery"
"power-menu"
];
};
};
# Optional bottom panel
bottom = {
enable = false;
height = 30;
};
# Appearance
backgroundColor = "rgba(30, 30, 46, 0.9)";
foregroundColor = "#cdd6f4";
accentColor = "#89b4fa";
};
MPRIS player controls:
Configuration:
programs.dankMaterialShell.media = {
enable = true;
# Player controls in panel
showInPanel = true;
# Media popup
popup = {
enable = true;
timeout = 3000; # 3 seconds
position = "top-center";
};
};
Calendar synchronization and weather widgets.
Configuration:
programs.dankMaterialShell = {
calendar = {
enable = true;
provider = "google"; # or "outlook", "caldav"
# Authentication configured separately
};
weather = {
enable = true;
location = "New York, NY";
provider = "openweathermap";
apiKey = "/run/secrets/openweather-api";
units = "metric"; # or "imperial"
};
};
Clipboard history with:
Configuration:
programs.dankMaterialShell.clipboard = {
enable = true;
keybind = "Super+V";
# History
maxItems = 100;
persistHistory = true;
historyPath = "~/.local/share/dms/clipboard";
# Features
imageSupport = true;
searchEnabled = true;
};
# Search plugins
dms plugins search music
# List categories
dms plugins categories
# Show plugin details
dms plugins info spotify-control
# Install plugin
dms plugins install spotify-control
# Update plugins
dms plugins update
# Remove plugin
dms plugins remove spotify-control
programs.dankMaterialShell.plugins = {
enable = true;
# List of plugins from registry
installed = [
"spotify-control"
"github-notifications"
"pomodoro-timer"
"weather-extended"
];
# Custom plugins
custom = [
{
name = "my-custom-plugin";
src = ./plugins/my-plugin;
}
];
};
// ~/.local/share/dms/plugins/my-plugin/main.qml
import Quickshell
import DMS.Core
DmsPlugin {
id: plugin
pluginId: "my-plugin"
name: "My Custom Plugin"
version: "1.0.0"
author: "Your Name"
// Plugin implementation
Component.onCompleted: {
console.log("My plugin loaded!")
}
}
# home.nix
{ config, pkgs, inputs, ... }:
{
imports = [
inputs.dms.homeModules.dankMaterialShell.default
];
# DankMaterialShell configuration
programs.dankMaterialShell = {
enable = true;
# Compositor integration
compositor = "niri"; # or "hyprland", "mangowc", "sway"
# Theming
theming = {
matugen = {
enable = true;
mode = "auto";
scheme = "content";
};
dank16.enable = true;
};
wallpaper = "/home/user/Pictures/wallpaper.jpg";
# Components
spotlight = {
enable = true;
keybind = "Super+Space";
providers = {
applications = true;
files = true;
emojis = true;
calculator = true;
};
};
controlCenter = {
enable = true;
keybind = "Super+Shift+C";
modules = {
network = true;
bluetooth = true;
audio = true;
brightness = true;
nightMode = true;
};
};
notifications = {
enable = true;
position = "top-right";
timeout = 5000;
};
session = {
enable = true;
lock.blurBackground = true;
idle.timeout = 300;
suspend.enable = true;
};
panels = {
enable = true;
top = {
height = 40;
modules = {
left = [ "workspaces" "window-title" ];
center = [ "clock" ];
right = [ "system-tray" "audio" "network" "battery" ];
};
};
};
media.enable = true;
clipboard.enable = true;
weather = {
enable = true;
location = "New York, NY";
};
# Plugins
plugins = {
enable = true;
installed = [
"spotify-control"
"github-notifications"
];
};
};
# Additional packages for DMS
home.packages = with pkgs; [
# Theming dependencies
matugen
imagemagick
# Optional enhancements
playerctl # Media control
brightnessctl # Brightness control
pamixer # Audio control
];
# Environment variables
home.sessionVariables = {
# Disable matugen if needed
# DMS_DISABLE_MATUGEN = "1";
};
}
# configuration.nix
{ config, pkgs, inputs, ... }:
{
# Enable required services
services = {
dbus.enable = true;
udisks2.enable = true;
upower.enable = true;
};
# Security for polkit
security.polkit.enable = true;
# Audio
services.pipewire = {
enable = true;
alsa.enable = true;
pulse.enable = true;
};
# Network
networking.networkmanager.enable = true;
# Bluetooth
hardware.bluetooth.enable = true;
services.blueman.enable = false; # DMS handles Bluetooth
# Fonts (for DMS UI)
fonts.packages = with pkgs; [
(nerdfonts.override { fonts = [ "JetBrainsMono" "FiraCode" ]; })
noto-fonts
noto-fonts-emoji
];
}
# Switch between compositors easily
let
currentCompositor = "niri"; # Change this variable
in
{
programs.dankMaterialShell = {
enable = true;
compositor = currentCompositor;
};
# Compositor-specific configuration
programs.niri.enable = currentCompositor == "niri";
wayland.windowManager.hyprland.enable = currentCompositor == "hyprland";
}
# Compositor-specific keybinds for DMS
wayland.windowManager.hyprland.settings.bind =
lib.optionals config.programs.dankMaterialShell.enable [
"SUPER, Space, exec, dms ipc call spotlight toggle"
"SUPER_SHIFT, C, exec, dms ipc call controlcenter toggle"
"SUPER, L, exec, dms ipc call session lock"
];
# Sync DMS theme with system theme
programs.dankMaterialShell.theming = {
matugen.mode = if config.stylix.polarity == "dark" then "dark" else "light";
};
# Or use Stylix with DMS
stylix = {
enable = true;
image = config.programs.dankMaterialShell.wallpaper;
};
# Ensure DMS starts with compositor
systemd.user.services.dankMaterialShell = {
Unit = {
Description = "DankMaterialShell Desktop Environment";
After = [ "graphical-session.target" ];
PartOf = [ "graphical-session.target" ];
};
Service = {
ExecStart = "${pkgs.dankMaterialShell}/bin/dms run";
Restart = "on-failure";
};
Install.WantedBy = [ "graphical-session.target" ];
};
# Create plugin directory
mkdir -p ~/.local/share/dms/plugins/my-plugin
# Create plugin manifest
cat > ~/.local/share/dms/plugins/my-plugin/plugin.json <<EOF
{
"id": "my-plugin",
"name": "My Plugin",
"version": "1.0.0",
"author": "Your Name",
"description": "Plugin description",
"main": "main.qml"
}
EOF
# Create plugin QML
# Edit ~/.local/share/dms/plugins/my-plugin/main.qml
# Reload DMS
dms restart
Problem: DankMaterialShell fails to launch
Solution:
# Check logs
journalctl --user -u dankMaterialShell -f
# Run directly for debugging
dms run --debug
# Check dependencies
dms debug status
# Verify Quickshell installation
which quickshell
quickshell --version
Problem: DMS doesn't integrate with compositor
Solution:
# Explicitly set compositor
programs.dankMaterialShell.compositor = "niri";
# Verify compositor is running
echo $WAYLAND_DISPLAY
pgrep -a niri
# Check compositor-specific integration
dms debug compositor
Problem: Wallpaper colors not applied
Solution:
# Verify matugen is installed
which matugen
matugen --version
# Check if matugen is enabled
echo $DMS_DISABLE_MATUGEN # Should be empty or unset
# Manually trigger theme generation
dms ipc call wallpaper set /path/to/image.jpg
# Check theme files
ls -la ~/.config/gtk-3.0/
ls -la ~/.config/qt5ct/
ls -la ~/.config/alacritty/
Problem: Launcher won't open
Solution:
# Test IPC
dms ipc call spotlight toggle
# Check if process is running
ps aux | grep dms
# Verify keybind
# Check compositor keybinding configuration
# Restart DMS
dms restart
Problem: No notifications appear
Solution:
# Check notification daemon
systemctl --user status dms-notifications
# Test notification
notify-send "Test" "This is a test notification"
# Check DMS notification settings
dms config get notifications.enable
# Verify Do Not Disturb is off
dms ipc call notifications dnd off
Problem: Control center modules not loading
Solution:
# Verify system services are enabled
services.networkmanager.enable = true;
hardware.bluetooth.enable = true;
services.pipewire.enable = true;
# Check module configuration
programs.dankMaterialShell.controlCenter.modules = {
network = true;
bluetooth = true;
audio = true;
};
# Rebuild and test
home-manager switch
Problem: DMS using excessive resources
Solution:
# Check resource usage
dms debug status
# Disable matugen if needed
export DMS_DISABLE_MATUGEN=1
dms restart
# Reduce panel update frequency
# Edit panel configuration
# Disable unused components
programs.dankMaterialShell = {
media.enable = false; # If not needed
weather.enable = false;
};
Use DMS as complete replacement
# Remove individual tools
# programs.waybar.enable = false;
# services.mako.enable = false;
# programs.rofi.enable = false;
# Enable DMS
programs.dankMaterialShell.enable = true;
Enable matugen for cohesive theming
theming.matugen.enable = true;
Configure compositor integration
compositor = "niri"; # Match your compositor
Use IPC for custom scripts
dms ipc call spotlight toggle
Leverage plugin system
plugins.installed = [ "useful-plugin" ];
Enable relevant components
# Only enable what you need
media.enable = true;
weather.enable = false;
Use declarative configuration
# NixOS declarative config
programs.dankMaterialShell = { };
Set up systemd integration
# Ensure proper startup
Configure keybindings in compositor
# Bind DMS IPC calls to keys
Keep DMS updated
dms plugins update
# Or rebuild NixOS configuration
Don't mix DMS with individual tools
# ❌ Bad - conflicts
programs.dankMaterialShell.enable = true;
programs.waybar.enable = true; # DMS replaces this
# ✅ Good - DMS only
programs.dankMaterialShell.enable = true;
Don't disable matugen without reason
# ❌ Loses automatic theming
# ✅ Keep enabled for best experience
theming.matugen.enable = true;
Don't forget compositor integration
# ❌ No compositor set
# ✅ Specify compositor
compositor = "hyprland";
Don't skip required system services
# ❌ Missing services
# ✅ Enable required services
services.networkmanager.enable = true;
hardware.bluetooth.enable = true;
Don't ignore IPC capabilities
# ❌ Manual tool launching
fuzzel
# ✅ Use DMS IPC
dms ipc call spotlight toggle
Don't hardcode paths
# ❌ Hardcoded
wallpaper = "/home/user/Pictures/wall.jpg";
# ✅ Use variable
wallpaper = "${config.home.homeDirectory}/Pictures/wallpaper.jpg";
Don't disable all components
# ❌ Why use DMS then?
# ✅ Use at least core components
# Shell management
dms run # Start DMS
dms stop # Stop DMS
dms restart # Restart DMS
dms version # Version info
# IPC
dms ipc call <component> <action> [args]
# Brightness
dms brightness list # List displays
dms brightness get # Current brightness
dms brightness set <value> # Set brightness
# Plugins
dms plugins search <query> # Search registry
dms plugins install <plugin> # Install plugin
dms plugins remove <plugin> # Remove plugin
dms plugins update # Update plugins
# Config
dms config get <key> # Get value
dms config set <key> <value> # Set value
# Debug
dms debug logs # Show logs
dms debug status # System status
# Spotlight
spotlight toggle|show|hide
# Control Center
controlcenter toggle|show|hide
# Notifications
notifications show|clear|dismiss
# Audio
audio setvolume|togglemute|getsources|getsinks
# Session
session lock|unlock|logout|suspend|reboot|shutdown
# Wallpaper
wallpaper set|next|previous|random
# Theme
theme set|list
# Night Mode
nightmode toggle|set
Ready to configure DankMaterialShell! Let me know what you need help with. 🎨