mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2025-12-06 05:25:41 -05:00
142 lines
4.4 KiB
Markdown
142 lines
4.4 KiB
Markdown
# DMS Backend & CLI
|
|
|
|
Go-based backend for DankMaterialShell providing system integration, IPC, and installation tools.
|
|
|
|
**See [root README](../README.md) 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**
|
|
- `wlr-gamma-control-unstable-v1` - Night mode and gamma control
|
|
- `wlr-screencopy-unstable-v1` - Screen capture for color picker
|
|
- `wlr-layer-shell-unstable-v1` - Overlay surfaces for color picker
|
|
- `wp-viewporter` - Fractional scaling support
|
|
- `dwl-ipc-unstable-v2` - dwl/MangoWC workspace integration
|
|
- `ext-workspace-v1` - Workspace protocol support
|
|
- `wlr-output-management-unstable-v1` - Display configuration
|
|
|
|
**DBus Interfaces**
|
|
- NetworkManager/iwd - Network management
|
|
- logind - Session control and inhibit locks
|
|
- accountsservice - User account information
|
|
- CUPS - Printer management
|
|
- Custom IPC via unix socket (JSON API)
|
|
|
|
**Hardware Control**
|
|
- DDC/CI protocol - External monitor brightness control (like `ddcutil`)
|
|
- Backlight control - Internal display brightness via `login1` or sysfs
|
|
- LED control - Keyboard/device LED management
|
|
- evdev input monitoring - Keyboard state tracking (caps lock, etc.)
|
|
|
|
**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.
|
|
|
|
```bash
|
|
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:**
|
|
```bash
|
|
make # Build dms CLI
|
|
make dankinstall # Build installer
|
|
make test # Run tests
|
|
```
|
|
|
|
**Distribution build:**
|
|
```bash
|
|
make dist # Build without update/greeter features
|
|
```
|
|
|
|
Produces `bin/dms-linux-amd64` and `bin/dms-linux-arm64`
|
|
|
|
**Installation:**
|
|
```bash
|
|
sudo make install # Install to /usr/local/bin/dms
|
|
```
|
|
|
|
## Development
|
|
|
|
**Setup pre-commit hooks:**
|
|
```bash
|
|
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:**
|
|
```bash
|
|
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
|
|
|
|
```bash
|
|
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. |