core

module
v0.0.0-...-37f972d Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 31, 2025 License: MIT

README

DMS Backend & CLI

Go-based backend for DankMaterialShell providing system integration, IPC, and installation tools.

See root README for project overview and installation.

Components

dms CLI Command-line interface and daemon for shell management and system control.

dankinstall Distribution-aware installer with TUI for deploying DMS and compositor configurations on Arch, Fedora, Debian, Ubuntu, openSUSE, and Gentoo.

System Integration

Wayland Protocols (Client)

All Wayland protocols are consumed as a client - connecting to the compositor.

Protocol Purpose
wlr-gamma-control-unstable-v1 Night mode color temperature control
wlr-screencopy-unstable-v1 Screen capture for color picker/screenshot
wlr-layer-shell-unstable-v1 Overlay surfaces for color picker UI/screenshot
wlr-output-management-unstable-v1 Display configuration
wlr-output-power-management-unstable-v1 DPMS on/off CLI
wp-viewporter Fractional scaling support (color picker/screenshot UIs)
keyboard-shortcuts-inhibit-unstable-v1 Inhibit compositor shortcuts during color picker/screenshot
ext-data-control-v1 Clipboard history and persistence
ext-workspace-v1 Workspace integration
dwl-ipc-unstable-v2 dwl/MangoWC IPC for tags, outputs, etc.
DBus Interfaces

Client (consuming external services):

Interface Purpose
org.bluez Bluetooth management with pairing agent
org.freedesktop.NetworkManager Network management
net.connman.iwd iwd Wi-Fi backend
org.freedesktop.network1 systemd-networkd integration
org.freedesktop.login1 Session control, sleep inhibitors, brightness
org.freedesktop.Accounts User account information
org.freedesktop.portal.Desktop Desktop appearance settings (color scheme)
CUPS via IPP + D-Bus Printer management with job notifications

Server (implementing interfaces):

Interface Purpose
org.freedesktop.ScreenSaver Screensaver inhibit for video playback

Custom IPC via unix socket (JSON API) for shell communication.

Hardware Control
Subsystem Method Purpose
DDC/CI I2C direct External monitor brightness
Backlight logind or sysfs Internal display brightness
evdev /dev/input/event* Keyboard state (caps lock LED)
udev netlink monitor Backlight device updates (for OSD)
Plugin System
  • Plugin registry integration
  • Plugin lifecycle management
  • Settings persistence

CLI Commands

  • dms run [-d] - Start shell (optionally as daemon)
  • dms restart / dms kill - Manage running processes
  • dms ipc <command> - Send IPC commands (toggle launcher, notifications, etc.)
  • dms plugins [install|browse|search] - Plugin management
  • dms brightness [list|set] - Control display/monitor brightness
  • dms color pick - Native color picker (see below)
  • dms update - Update DMS and dependencies (disabled in distro packages)
  • dms greeter install - Install greetd greeter (disabled in distro packages)
Color Picker

Native Wayland color picker with magnifier, no external dependencies. Supports HiDPI and fractional scaling.

dms color pick              # Pick color, output hex
dms color pick --rgb        # Output as RGB (255 128 64)
dms color pick --hsv        # Output as HSV (24 75% 100%)
dms color pick --json       # Output all formats as JSON
dms color pick -a           # Auto-copy to clipboard

The on-screen preview displays the selected format. JSON output includes hex, RGB, HSL, HSV, and CMYK values.

Building

Requires Go 1.24+

Development build:

make              # Build dms CLI
make dankinstall  # Build installer
make test         # Run tests

Distribution build:

make dist         # Build without update/greeter features

Produces bin/dms-linux-amd64 and bin/dms-linux-arm64

Installation:

sudo make install  # Install to /usr/local/bin/dms

Development

Setup pre-commit hooks:

git config core.hooksPath .githooks

This runs gofmt, golangci-lint, tests, and builds before each commit when core/ files are staged.

Regenerating Wayland Protocol Bindings:

go install github.com/rajveermalviya/go-wayland/cmd/go-wayland-scanner@latest
go-wayland-scanner -i internal/proto/xml/wlr-gamma-control-unstable-v1.xml \
  -pkg wlr_gamma_control -o internal/proto/wlr_gamma_control/gamma_control.go

Module Structure:

  • cmd/ - Binary entrypoints (dms, dankinstall)
  • internal/distros/ - Distribution-specific installation logic
  • internal/proto/ - Wayland protocol bindings
  • pkg/ - Shared packages

Installation via dankinstall

curl -fsSL https://install.danklinux.com | sh

Supported Distributions

Arch, Fedora, Debian, Ubuntu, openSUSE, Gentoo (and derivatives)

Arch Linux Uses pacman for system packages, builds AUR packages via makepkg, no AUR helper dependency.

Fedora

Uses COPR repositories (avengemedia/danklinux, avengemedia/dms).

Ubuntu Requires PPA support. Most packages built from source (slow first install).

Debian Debian 13+ (Trixie). niri only, no Hyprland support. Builds from source.

openSUSE Most packages available in standard repos. Minimal building required.

Gentoo Uses Portage with GURU overlay. Automatically configures USE flags. Variable success depending on system configuration.

See installer output for distribution-specific details during installation.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL