branding: rebrand to dux

This commit is contained in:
bbedward committed 2026-10-20 12:23:25 -04:00
1 parent 788b722702
commit 789a968cde
537 files changed
+1756 -1459

No files matched your search

+2 -2
View File
@@ -8,7 +8,7 @@ Each skill is a directory with a `SKILL.md` entrypoint, optional reference docs,
| Skill | Description |
|-------|-------------|
| [dms-plugin-dev](dms-plugin-dev/) | Develop plugins for DankMaterialShell - covers all 4 plugin types (widget, daemon, launcher, desktop), manifest creation, QML components, settings UI, data persistence, theme integration, and PopoutService usage. |
| [dms-plugin-dev](dms-plugin-dev/) | Develop plugins for Dux Shell - covers all 4 plugin types (widget, daemon, launcher, desktop), manifest creation, QML components, settings UI, data persistence, theme integration, and PopoutService usage. |
## Installation
@@ -28,7 +28,7 @@ ln -s ../../.agents/skills/dms-plugin-dev .claude/skills/dms-plugin-dev
**Personal** (all your projects):
```bash
ln -s /path/to/DankMaterialShell/.agents/skills/dms-plugin-dev ~/.claude/skills/dms-plugin-dev
ln -s /path/to/dms/.agents/skills/dms-plugin-dev ~/.claude/skills/dms-plugin-dev
```
After linking, the skill appears in Claude Code's `/` menu as `/dms-plugin-dev`, and Claude loads it automatically when you ask about DMS plugin development.
+8 -8
View File
@@ -1,7 +1,7 @@
---
name: dms-plugin-dev
description: >
Develop plugins for DankMaterialShell (DMS), a QML-based Linux desktop shell built on
Develop plugins for Dux Shell (DMS), a QML-based Linux desktop shell built on
Quickshell. Supports widget (bar, dock + Control Center), daemon (background service),
launcher (search + actions), desktop (draggable desktop widgets), dash (dash tab),
dashCard (dash overview card), and composite (multi-surface) plugins. Covers manifest
@@ -11,33 +11,33 @@ description: >
or debug a DMS plugin, or asks about the DMS plugin API.
compatibility: Designed for Claude Code (or similar products)
metadata:
author: DankMaterialShell
author: Dux Shell
version: "1.2"
domain: qml-desktop-development
framework: DankMaterialShell
framework: Dux Shell
languages: qml, javascript
allowed-tools: Bash Read Write Edit
---
# DankMaterialShell Plugin Development
# Dux Shell Plugin Development
## Overview
DMS plugins extend the desktop shell with bar and dock widgets, background services, launcher
integrations, desktop widgets, and dash tabs and cards. Plugins are QML components discovered from
`~/.config/DankMaterialShell/plugins/`.
`~/.config/dms/plugins/`.
**Minimum plugin structure:**
```
~/.config/DankMaterialShell/plugins/YourPlugin/
~/.config/dms/plugins/YourPlugin/
plugin.json # Required: manifest with metadata
YourComponent.qml # Required: main QML component
YourSettings.qml # Optional: settings UI
*.js # Optional: JavaScript utilities
```
**Plugin registry:** Community plugins are available at https://plugins.danklinux.com/
**Plugin registry:** Community plugins are available at https://plugins.duxlabs.dev/
**Plugin types:**
@@ -480,7 +480,7 @@ Always use `Theme.*` properties from `qs.Common` - never hardcode colors or size
- Radius: `Theme.cornerRadius`, `Theme.cornerRadiusSmall`, `Theme.cornerRadiusLarge`
- Icons: `Theme.iconSizeSmall` (16), `Theme.iconSize` (24), `Theme.iconSizeLarge` (32)
**Common widgets from `qs.Widgets`:** `StyledText`, `StyledRect`, `DankIcon`, `DankButton`, `DankToggle`, `DankTextField`, `DankSlider`, `DankGridView`, `CachingImage`.
**Common widgets from `qs.DCommon.Widgets`:** `StyledText`, `StyledRect`, `DIcon`, `DButton`, `DToggle`, `DTextField`, `DSlider`, `DGridView`, `CachingImage`. The old `Dank*` names in `qs.Widgets` are deprecated.
See [theme-reference.md](references/theme-reference.md) for the complete property list.
@@ -1,8 +1,8 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"$id": "https://danklinux.com/schemas/plugin.json",
"title": "DankMaterialShell Plugin Manifest",
"description": "Schema for DankMaterialShell plugin.json manifest files",
"$id": "https://duxlabs.dev/schemas/plugin.json",
"title": "Dux Shell Plugin Manifest",
"description": "Schema for Dux Shell plugin.json manifest files",
"type": "object",
"required": [
"id",
@@ -43,7 +43,7 @@ PluginSettings {
pluginId: "exampleVariants"
// Variant creation UI
DankButton {
DButton {
text: "Add New Instance"
onClicked: {
var id = "variant_" + Date.now()
@@ -32,6 +32,7 @@ Add the optional `dash` block for labels, card size and options (see plugin-mani
import QtQuick
import qs.Common
import qs.Widgets
import qs.DCommon.Widgets
import qs.Modules.Plugins
import qs.Modules.DankDash
@@ -79,7 +80,7 @@ DashTabComponent {
color: Theme.surfaceText
}
DankButton {
DButton {
id: button
text: I18n.trFor("myPlugin", "Refresh")
onClicked: root.refresh()
@@ -174,7 +174,7 @@ Retrieve a plugin's installation directory at runtime:
var dir = pluginService.getPluginPath(pluginId)
```
Returns the absolute path to the plugin's directory (e.g., `~/.config/DankMaterialShell/plugins/MyPlugin`), or an empty string if the plugin is not found. Useful for loading bundled assets (images, data files) relative to the plugin's location.
Returns the absolute path to the plugin's directory (e.g., `~/.config/dms/plugins/MyPlugin`), or an empty string if the plugin is not found. Useful for loading bundled assets (images, data files) relative to the plugin's location.
## Important Notes
@@ -83,11 +83,12 @@ Theme.popupBackground() // Popup background with proper opacity
```qml
import qs.Widgets
import qs.DCommon.Widgets
Row {
spacing: Theme.spacingS
DankIcon {
DIcon {
name: "icon_name"
color: Theme.onSurface
font.pixelSize: Theme.iconSize
@@ -151,7 +152,7 @@ StyledRect {
anchors.centerIn: parent
spacing: Theme.spacingS
DankIcon {
DIcon {
name: "star"
color: Theme.surfaceText
font.pixelSize: Theme.iconSize
@@ -191,17 +192,17 @@ font.pixelSize: 14 // Use Theme.fontSizeMedium
|--------|-------------|
| `StyledText` | Themed text with proper color defaults |
| `StyledRect` | Themed rectangle |
| `DankIcon` | Material Symbols icon renderer |
| `DIcon` | Material Symbols icon renderer |
| `DankNFIcon` | Nerd Font icon renderer |
| `DankButton` | Themed button |
| `DankToggle` | Toggle switch |
| `DankTextField` | Text input field |
| `DankSlider` | Slider control |
| `DankDropdown` | Dropdown menu |
| `DankGridView` | Grid layout view |
| `DankListView` | List layout view |
| `DankFlickable` | Scrollable container |
| `DankTabBar` | Tab bar navigation |
| `DButton` | Themed button |
| `DToggle` | Toggle switch |
| `DTextField` | Text input field |
| `DSlider` | Slider control |
| `DDropdown` | Dropdown menu |
| `DGridView` | Grid layout view |
| `DListView` | List layout view |
| `DFlickable` | Scrollable container |
| `DTabBar` | Tab bar navigation |
| `DankCollapsibleSection` | Collapsible content section |
| `DankTooltip` | Hover tooltip |
| `DankNumberStepper` | Number +/- control |
@@ -59,7 +59,7 @@ horizontalBarPill: Component {
anchors.centerIn: parent
spacing: Theme.spacingS
DankIcon {
DIcon {
name: "star"
color: Theme.surfaceText
font.pixelSize: Theme.iconSize
@@ -92,7 +92,7 @@ verticalBarPill: Component {
anchors.centerIn: parent
spacing: Theme.spacingS
DankIcon {
DIcon {
name: "star"
color: Theme.surfaceText
font.pixelSize: Theme.iconSizeSmall
@@ -261,7 +261,7 @@ PluginComponent {
padding: Theme.spacingM
spacing: Theme.spacingM
DankButton {
DButton {
text: I18n.trFor("myPlugin", "Close")
onClicked: root.surfaceContext.dismissExpansion()
}
@@ -311,6 +311,7 @@ import QtQuick
import Quickshell
import qs.Common
import qs.Widgets
import qs.DCommon.Widgets
import qs.Services
import qs.Modules.Plugins
@@ -367,7 +368,7 @@ PluginComponent {
PopoutComponent {
headerText: "Emoji Picker"
DankGridView {
DGridView {
width: parent.width
height: 300
cellWidth: 50
+1 -1
View File
@@ -6,7 +6,7 @@ body:
- type: markdown
attributes:
value: |
## DankMaterialShell Bug Report
## Dux Shell Bug Report
Limit your report to one issue per submission unless similarly related
- type: dropdown
id: compositor
+1 -1
View File
@@ -6,7 +6,7 @@ body:
- type: markdown
attributes:
value: |
## DankMaterialShell Feature Request
## Dux Shell Feature Request
- type: textarea
id: feature_description
attributes:
+2 -2
View File
@@ -1,12 +1,12 @@
name: Support Request
description: Help with installation, usage, or general questions about DankMaterialShell
description: Help with installation, usage, or general questions about Dux Shell
labels:
- support
body:
- type: markdown
attributes:
value: |
## DankMaterialShell Support Request
## Dux Shell Support Request
- type: dropdown
id: compositor
attributes:
+1 -1
View File
@@ -28,4 +28,4 @@
- [ ] New user-facing strings are wrapped in `I18n.tr()` with translator context, reusing existing terms where possible
- [ ] Go changes: ran `make fmt`, added/updated tests, `make test` passes, and `go mod tidy` is clean
- [ ] QML changes: ran `make lint-qml` with no new warnings
- [ ] I have opened a corresponding pull request in dlx-docs to document any new behaviors: https://github.com/AvengeMedia/DankLinux-Docs
- [ ] I have opened a corresponding pull request in dlx-docs to document any new behaviors: https://github.com/duxlabs-dev/dux-docs
+1 -1
View File
@@ -38,7 +38,7 @@ jobs:
submodule_rev=$(git ls-tree HEAD dank-qml-common --object-only)
flake_rev=$(python3 -c "import json; print(json.load(open('flake.lock'))['nodes']['dank-qml-common']['locked']['rev'])")
[ "$submodule_rev" = "$flake_rev" ] && { echo "flake.lock already matches $submodule_rev"; exit 0; }
nix flake lock --override-input dank-qml-common "github:AvengeMedia/dank-qml-common/$submodule_rev"
nix flake lock --override-input dank-qml-common "github:duxlabs-dev/dux-qml-common/$submodule_rev"
- name: Commit and push flake.lock update
env:
+1 -1
View File
@@ -42,7 +42,7 @@ jobs:
prune:
name: Prune archive snapshots
runs-on: ubuntu-latest
if: github.repository == 'AvengeMedia/DankMaterialShell'
if: github.repository == 'duxlabs-dev/dux-shell'
env:
AWS_ACCESS_KEY_ID: ${{ secrets.R2_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.R2_SECRET_ACCESS_KEY }}
+11 -11
View File
@@ -280,7 +280,7 @@ jobs:
## Installation
```bash
curl -fsSL https://install.danklinux.com | sh
curl -fsSL https://install.duxlabs.dev | sh
```
## Assets
@@ -420,7 +420,7 @@ jobs:
# Create installation guide
cat > _temp_full/INSTALL.md << 'EOFINSTALL'
# DankMaterialShell Installation
# Dux Shell Installation
## Requirements
@@ -458,8 +458,8 @@ jobs:
## Configuration
- Settings are stored in `~/.config/DankMaterialShell/settings.json`
- Plugins go in `~/.config/DankMaterialShell/plugins/`
- Settings are stored in `~/.config/dms/settings.json`
- Plugins go in `~/.config/dms/plugins/`
- See the documentation in the `dms/` directory for more details
## Troubleshooting
@@ -531,13 +531,13 @@ jobs:
fail-fast: false
matrix:
repo:
- dgop
- dankgo
- dank-qml-common
- dankcalendar
- danksearch
- dank-greeter
- dfiles
- dux-gop
- dux-go
- dux-qml-common
- dux-calendar
- dux-search
- dux-greeter
- dux-files
steps:
- name: Create GitHub App token
id: app_token
+1 -1
View File
@@ -78,7 +78,7 @@ jobs:
echo "📦 Downloading DMS QML source for v${VERSION}..."
# Download DMS QML source
wget "https://github.com/AvengeMedia/DankMaterialShell/releases/download/v${VERSION}/dms-qml.tar.gz" || {
wget "https://github.com/duxlabs-dev/dux-shell/releases/download/v${VERSION}/dms-qml.tar.gz" || {
echo "❌ Failed to download dms-qml.tar.gz for v${VERSION}"
exit 1
}
+3 -3
View File
@@ -23,7 +23,7 @@ jobs:
check-updates:
name: Check for updates
runs-on: ubuntu-latest
if: github.repository == 'AvengeMedia/DankMaterialShell'
if: github.repository == 'duxlabs-dev/dux-shell'
outputs:
has_updates: ${{ steps.check.outputs.has_updates }}
@@ -61,7 +61,7 @@ jobs:
# Helper function to check dms stable tag
# Sets LATEST_TAG variable in parent scope if update needed
check_dms_stable() {
LATEST_TAG=$(curl -s https://api.github.com/repos/AvengeMedia/DankMaterialShell/releases/latest | grep '"tag_name"' | sed 's/.*"tag_name": "\([^"]*\)".*/\1/' || echo "")
LATEST_TAG=$(curl -s https://api.github.com/repos/duxlabs-dev/dux-shell/releases/latest | grep '"tag_name"' | sed 's/.*"tag_name": "\([^"]*\)".*/\1/' || echo "")
local OBS_SPEC=$(curl -s -u "$OBS_USERNAME:$OBS_PASSWORD" "https://api.opensuse.org/source/home:AvengeMedia:dms/dms/dms.spec" 2>/dev/null || echo "")
local OBS_VERSION=$(echo "$OBS_SPEC" | grep "^Version:" | awk '{print $2}' | xargs || echo "")
@@ -192,7 +192,7 @@ jobs:
# Determine version for dms stable using the API
# GITHUB_REF is unreliable when "Use workflow from" a tag; API works from any ref
if [[ "${{ github.event.inputs.package }}" == "dms" ]] || [[ "${{ github.event.inputs.package }}" == "all" ]]; then
LATEST_TAG=$(curl -s https://api.github.com/repos/AvengeMedia/DankMaterialShell/releases/latest | grep '"tag_name"' | sed 's/.*"tag_name": "\([^"]*\)".*/\1/' || echo "")
LATEST_TAG=$(curl -s https://api.github.com/repos/duxlabs-dev/dux-shell/releases/latest | grep '"tag_name"' | sed 's/.*"tag_name": "\([^"]*\)".*/\1/' || echo "")
if [[ -n "$LATEST_TAG" ]]; then
echo "version=$LATEST_TAG" >> $GITHUB_OUTPUT
echo "Using latest release from API: $LATEST_TAG"
+1 -1
View File
@@ -23,7 +23,7 @@ jobs:
check-updates:
name: Check package/series updates
runs-on: ubuntu-latest
if: github.repository == 'AvengeMedia/DankMaterialShell'
if: github.repository == 'duxlabs-dev/dux-shell'
outputs:
has_updates: ${{ steps.check.outputs.has_updates }}
+1 -1
View File
@@ -61,7 +61,7 @@ jobs:
name: Build & Deploy XBPS packages
runs-on: ubuntu-latest
needs: preflight
if: github.repository == 'AvengeMedia/DankMaterialShell' && needs.preflight.outputs.should_build == 'true'
if: github.repository == 'duxlabs-dev/dux-shell' && needs.preflight.outputs.should_build == 'true'
env:
AWS_ACCESS_KEY_ID: ${{ secrets.R2_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.R2_SECRET_ACCESS_KEY }}
+1 -1
View File
@@ -64,7 +64,7 @@ AGENTS-temp.md
niri-colors.generated.kdl
ghostty-colors.generated.conf
# Notepad files (should be in ~/.local/state/DankMaterialShell/)
# Notepad files (should be in ~/.local/state/dms/)
untitled-*.txt
file:*
notepad-files/
+1 -1
View File
@@ -1,4 +1,4 @@
[submodule "dank-qml-common"]
path = dank-qml-common
url = https://github.com/AvengeMedia/dank-qml-common.git
url = https://github.com/duxlabs-dev/dux-qml-common.git
branch = master
+2 -2
View File
@@ -5,7 +5,7 @@ DMS is an open-source desktop shell for Wayland compositors on linux, built to w
## Repo Structure
- core/ - Go. `cmd/dms` runs quickshell, CLI utilities, and the unix socket server the UI depends on. `cmd/dankinstall` is a separate installer TUI.
- quickshell/ - the entire UI: Common/ (singletons, Theme, settings), Services/ (system and core access), Modules/ (bar, dock, lock, ...), Modals/, Widgets/ (Dank* components), PLUGINS/, translations/
- quickshell/ - the entire UI: Common/ (singletons, Theme, settings), Services/ (system and core access), Modules/ (bar, dock, lock, ...), Modals/, Widgets/ (shell-specific widgets and deprecated Dank* shims), PLUGINS/, translations/
- dank-qml-common/ - submodule of shared QML widgets
- docs/, distro/ - IPC and theme docs, packaging
@@ -18,7 +18,7 @@ DMS is an open-source desktop shell for Wayland compositors on linux, built to w
- The shell runs 24/7. Audit every change for idle CPU, extra processes, timers, and retained memory.
- `core` and `quickshell` share the socket protocol. Changing one means checking the other.
- QML uses Theme tokens, never hardcoded colors, spacing, or constants.
- Use the Dank* wrappers in Widgets/ instead of raw ListView/Flickable/ScrollView.
- Use the D* widgets from qs.DCommon.Widgets (DListView, DFlickable, and so on) instead of raw ListView/Flickable/ScrollView. The Dank* names in Widgets/ are deprecated shims.
- User-facing text goes through I18n.tr(). Reuse catalog terms. Never edit translation catalogs.
- Guard clauses, early returns.
- Comment only what the code cannot say: a non-obvious why, a trap, a workaround. Never narrate what the code does or restate a name. Keep it to a line or two, and delete useless or paragraph comments you come across.
+5 -5
View File
@@ -6,10 +6,10 @@ To contribute fork this repository, make your changes, and open a pull request.
## Setup
Clone with submodules — the shared widget library ([dank-qml-common](https://github.com/AvengeMedia/dank-qml-common)) is vendored at `dank-qml-common/` and symlinked into `quickshell/DCommon`:
Clone with submodules — the shared widget library ([dank-qml-common](https://github.com/duxlabs-dev/dux-qml-common)) is vendored at `dank-qml-common/` and symlinked into `quickshell/DCommon`:
```bash
git clone --recurse-submodules https://github.com/AvengeMedia/DankMaterialShell.git
git clone --recurse-submodules https://github.com/duxlabs-dev/dux-shell.git
# or, in an existing clone:
git submodule update --init
```
@@ -54,7 +54,7 @@ make run # dev build, then launch against the live quickshell/ tree
The UI config dir resolves in order: `-c <dir>`, `DMS_SHELL_DIR`, the dir a running instance is using, then the embedded UI. Each candidate must contain `shell.qml`. `make run` uses `-c $(pwd)/quickshell`, so QML edits hot-reload from the working tree.
The Go core depends on [dankgo](https://github.com/AvengeMedia/dankgo) for logging, XDG paths, the IPC transport, and the quickshell process lifecycle. To develop against a local dankgo checkout, create a gitignored `go.work` at the repo root:
The Go core depends on [dankgo](https://github.com/duxlabs-dev/dux-go) for logging, XDG paths, the IPC transport, and the quickshell process lifecycle. To develop against a local dankgo checkout, create a gitignored `go.work` at the repo root:
```
go work init ./core ../dankgo
@@ -71,12 +71,12 @@ Everything under `quickshell/DCommon/` (core widgets, the file browser, scroll p
The submodule URL in `.gitmodules` is HTTPS so CI and anonymous clones keep working. To push over SSH instead of being prompted for credentials, add a push rewrite to your git config — fetches stay HTTPS, pushes use SSH:
```bash
git config --global url."[email protected]:AvengeMedia/".pushInsteadOf "https://github.com/AvengeMedia/"
git config --global url."[email protected]:duxlabs-dev/".pushInsteadOf "https://github.com/duxlabs-dev/"
```
Shared widgets read app-provided singletons (`Theme`, `SettingsData`, ...) through a documented contract — see the dank-qml-common README. If your change needs a new contract property, add it to the library's stub singletons in the same PR, then to `quickshell/Common/` here when you bump.
Files in `quickshell/Widgets/`, `quickshell/Common/`, and `quickshell/Modals/FileBrowser/` that moved to the library remain in place as thin wrappers, so `import qs.Widgets`, `qs.Common`, and `qs.Modals.FileBrowser` keep working for the shell and for plugins.
Files in `quickshell/Widgets/`, `quickshell/Common/`, and `quickshell/Modals/FileBrowser/` that moved to the library remain in place as thin wrappers, so existing `qs.Widgets`, `qs.Common`, and `qs.Modals.FileBrowser` imports keep working for the shell and for plugins. The `Dank*` widget names are deprecated: each one logs a warning naming its replacement. New code imports `qs.DCommon.Widgets` and uses the `D*` names (`DButton`, `DIcon`, `DListView`, and so on).
## VSCode Setup
+10 -6
View File
@@ -1,4 +1,4 @@
# Root Makefile for DankMaterialShell (DMS)
# Root Makefile for Dux Shell (DMS)
# Orchestrates building, installation, and systemd management
# Build configuration
@@ -83,15 +83,17 @@ endif
install-icon:
@echo "Installing icon..."
@install -D -m 644 $(ASSETS_DIR)/com.danklinux.dms.svg $(ICON_DIR)/com.danklinux.dms.svg
@install -D -m 644 $(ASSETS_DIR)/dev.duxlabs.shell.svg $(ICON_DIR)/dev.duxlabs.shell.svg
@rm -f $(ICON_DIR)/com.danklinux.dms.svg
@gtk-update-icon-cache -q $(DATA_DIR)/icons/hicolor 2>/dev/null || true
@echo "Icon installed"
install-desktop:
@echo "Installing desktop entries..."
@install -D -m 644 $(ASSETS_DIR)/dms-open.desktop $(APPLICATIONS_DIR)/dms-open.desktop
@install -D -m 644 $(ASSETS_DIR)/com.danklinux.dms.desktop $(APPLICATIONS_DIR)/com.danklinux.dms.desktop
@install -D -m 644 $(ASSETS_DIR)/com.danklinux.dms.notepad.desktop $(APPLICATIONS_DIR)/com.danklinux.dms.notepad.desktop
@install -D -m 644 $(ASSETS_DIR)/dev.duxlabs.shell.desktop $(APPLICATIONS_DIR)/dev.duxlabs.shell.desktop
@install -D -m 644 $(ASSETS_DIR)/dev.duxlabs.shell.notepad.desktop $(APPLICATIONS_DIR)/dev.duxlabs.shell.notepad.desktop
@rm -f $(APPLICATIONS_DIR)/com.danklinux.dms.desktop $(APPLICATIONS_DIR)/com.danklinux.dms.notepad.desktop
@update-desktop-database -q $(APPLICATIONS_DIR) 2>/dev/null || true
@echo "Desktop entries installed"
@@ -127,6 +129,7 @@ uninstall-systemd:
uninstall-icon:
@echo "Removing icon..."
@rm -f $(ICON_DIR)/dev.duxlabs.shell.svg
@rm -f $(ICON_DIR)/com.danklinux.dms.svg
@rm -f $(ICON_DIR)/danklogo.svg
@gtk-update-icon-cache -q $(DATA_DIR)/icons/hicolor 2>/dev/null || true
@@ -135,8 +138,9 @@ uninstall-icon:
uninstall-desktop:
@echo "Removing desktop entries..."
@rm -f $(APPLICATIONS_DIR)/dms-open.desktop
@rm -f $(APPLICATIONS_DIR)/com.danklinux.dms.desktop
@rm -f $(APPLICATIONS_DIR)/com.danklinux.dms.notepad.desktop
@rm -f $(APPLICATIONS_DIR)/dev.duxlabs.shell.desktop
@rm -f $(APPLICATIONS_DIR)/dev.duxlabs.shell.notepad.desktop
@rm -f $(APPLICATIONS_DIR)/com.danklinux.dms.desktop $(APPLICATIONS_DIR)/com.danklinux.dms.notepad.desktop
@update-desktop-database -q $(APPLICATIONS_DIR) 2>/dev/null || true
@echo "Desktop entries removed"
+31 -31
View File
@@ -1,32 +1,32 @@
# DankMaterialShell
# Dux Shell
<div align="center">
<a href="https://danklinux.com">
<img src="assets/danklogo.svg" alt="DankMaterialShell" width="200">
<a href="https://duxlabs.dev">
<img src="assets/danklogo.svg" alt="Dux Shell" width="200">
</a>
### A modern desktop shell for Wayland
Built with [Quickshell](https://quickshell.org/) and [Go](https://go.dev/)
[![Documentation](https://img.shields.io/badge/docs-danklinux.com-9ccbfb?style=for-the-badge&labelColor=101418)](https://danklinux.com/docs)
[![GitHub stars](https://img.shields.io/github/stars/AvengeMedia/DankMaterialShell?style=for-the-badge&labelColor=101418&color=ffd700)](https://github.com/AvengeMedia/DankMaterialShell/stargazers)
[![GitHub License](https://img.shields.io/github/license/AvengeMedia/DankMaterialShell?style=for-the-badge&labelColor=101418&color=b9c8da)](https://github.com/AvengeMedia/DankMaterialShell/blob/master/LICENSE)
[![GitHub release](https://img.shields.io/github/v/release/AvengeMedia/DankMaterialShell?style=for-the-badge&labelColor=101418&color=9ccbfb)](https://github.com/AvengeMedia/DankMaterialShell/releases)
[![Documentation](https://img.shields.io/badge/docs-duxlabs.dev-9ccbfb?style=for-the-badge&labelColor=101418)](https://duxlabs.dev/docs)
[![GitHub stars](https://img.shields.io/github/stars/duxlabs-dev/dux-shell?style=for-the-badge&labelColor=101418&color=ffd700)](https://github.com/duxlabs-dev/dux-shell/stargazers)
[![GitHub License](https://img.shields.io/github/license/duxlabs-dev/dux-shell?style=for-the-badge&labelColor=101418&color=b9c8da)](https://github.com/duxlabs-dev/dux-shell/blob/master/LICENSE)
[![GitHub release](https://img.shields.io/github/v/release/duxlabs-dev/dux-shell?style=for-the-badge&labelColor=101418&color=9ccbfb)](https://github.com/duxlabs-dev/dux-shell/releases)
[![Arch version](https://img.shields.io/archlinux/v/extra/x86_64/dms-shell?style=for-the-badge&labelColor=101418&color=9ccbfb)](https://archlinux.org/packages/extra/x86_64/dms-shell/)
[![AUR version (git)](<https://img.shields.io/aur/version/dms-shell-git?style=for-the-badge&labelColor=101418&color=9ccbfb&label=AUR%20(git)>)](https://aur.archlinux.org/packages/dms-shell-git)
[![Ko-Fi donate](https://img.shields.io/badge/donate-kofi?style=for-the-badge&logo=ko-fi&logoColor=ffffff&label=ko-fi&labelColor=101418&color=f16061&link=https%3A%2F%2Fko-fi.com%2Fdanklinux)](https://ko-fi.com/danklinux)
</div>
DankMaterialShell is a complete desktop shell for [niri](https://github.com/YaLTeR/niri), [Hyprland](https://hyprland.org/), [MangoWC](https://github.com/DreamMaoMao/mangowc), [Sway](https://swaywm.org), [labwc](https://labwc.github.io/), [Scroll](https://github.com/dawsers/scroll), [Miracle WM](https://github.com/miracle-wm-org/miracle-wm), and other Wayland compositors. It replaces waybar, swaylock, swayidle, mako, fuzzel, polkit, and everything else you'd normally stitch together to make a desktop.
Dux Shell is a complete desktop shell for [niri](https://github.com/YaLTeR/niri), [Hyprland](https://hyprland.org/), [MangoWC](https://github.com/DreamMaoMao/mangowc), [Sway](https://swaywm.org), [labwc](https://labwc.github.io/), [Scroll](https://github.com/dawsers/scroll), [Miracle WM](https://github.com/miracle-wm-org/miracle-wm), and other Wayland compositors. It replaces waybar, swaylock, swayidle, mako, fuzzel, polkit, and everything else you'd normally stitch together to make a desktop.
## Repository Structure
This is a monorepo containing both the shell interface and the core backend services:
```
DankMaterialShell/
dux-shell/
├── quickshell/ # QML-based shell interface
│ ├── Modules/ # UI components (panels, widgets, overlays)
│ ├── Services/ # System integration (audio, network, bluetooth)
@@ -70,14 +70,14 @@ https://github.com/user-attachments/assets/d310418b-cc44-4ace-ac0d-2fc0c851291d
## Installation
```bash
curl -fsSL https://install.danklinux.com | sh
curl -fsSL https://install.duxlabs.dev | sh
```
One command installs DMS and all dependencies on Arch, Fedora, Debian, Ubuntu, openSUSE, or Gentoo.
**FreeBSD:** native support is included in-tree; see [distro/freebsd/README.md](distro/freebsd/README.md) for supported integrations and setup notes.
**[Manual installation guide](https://danklinux.com/docs/dankmaterialshell/installation)**
**[Manual installation guide](https://duxlabs.dev/docs/dms/installation)**
## Features
@@ -85,10 +85,10 @@ One command installs DMS and all dependencies on Arch, Fedora, Debian, Ubuntu, o
Wallpaper-based color schemes that automatically theme GTK, Qt, terminals, editors (vscode, vscodium), and more using [matugen](https://github.com/InioX/matugen) and dank16.
**System Monitoring**
Real-time CPU, RAM, GPU metrics and temperatures built into the dms daemon (powered by [dgop](https://github.com/AvengeMedia/dgop)). Process list with search and management.
Real-time CPU, RAM, GPU metrics and temperatures built into the dms daemon (powered by [dgop](https://github.com/duxlabs-dev/dux-gop)). Process list with search and management.
**Powerful Launcher**
Spotlight-style search for applications, files ([dsearch](https://github.com/AvengeMedia/danksearch)), emojis, running windows, calculator, and commands. Extensible with plugins.
Spotlight-style search for applications, files ([dsearch](https://github.com/duxlabs-dev/dux-search)), emojis, running windows, calculator, and commands. Extensible with plugins.
**Control Center**
Unified interface for network, Bluetooth, audio devices, display settings, and night mode.
@@ -100,18 +100,18 @@ Notification center with grouping, rich text support, and keyboard navigation.
MPRIS player controls, calendar sync, weather widgets, and clipboard history with image previews.
**Session Management**
Lock screen, idle detection, auto-lock/suspend with separate AC/battery settings, and a settings front-end for [dank-greeter](https://github.com/AvengeMedia/dank-greeter).
Lock screen, idle detection, auto-lock/suspend with separate AC/battery settings, and a settings front-end for [dank-greeter](https://github.com/duxlabs-dev/dux-greeter).
**Plugin System**
Extend functionality with the [plugin registry](https://plugins.danklinux.com). DMS keeps
`~/.config/DankMaterialShell/plugins.lock.json` synchronized with managed plugin installs and
Extend functionality with the [plugin registry](https://plugins.duxlabs.dev). DMS keeps
`~/.config/dms/plugins.lock.json` synchronized with managed plugin installs and
their exact Git commits, so the same plugins can be reproduced on another machine.
## Supported Compositors
Works best with [niri](https://github.com/YaLTeR/niri), [Hyprland](https://hyprland.org/), [Sway](https://swaywm.org/), [MangoWC](https://github.com/DreamMaoMao/mangowc), [labwc](https://labwc.github.io/), [Scroll](https://github.com/dawsers/scroll), and [Miracle WM](https://github.com/miracle-wm-org/miracle-wm) with full workspace switching, overview integration, and monitor management. Other Wayland compositors work with reduced features.
[Compositor configuration guide](https://danklinux.com/docs/dankmaterialshell/compositors)
[Compositor configuration guide](https://duxlabs.dev/docs/dms/compositors)
## Command Line Interface
@@ -128,26 +128,26 @@ dms plugins lock # Refresh the portable plugin lockfile
dms plugins restore ~/plugins.lock.json
```
[Full CLI and IPC documentation](https://danklinux.com/docs/dankmaterialshell/keybinds-ipc)
[Full CLI and IPC documentation](https://duxlabs.dev/docs/dms/keybinds-ipc)
## Documentation
- **Website:** [danklinux.com](https://danklinux.com)
- **Docs:** [danklinux.com/docs](https://danklinux.com/docs/)
- **Theming:** [Application themes](https://danklinux.com/docs/dankmaterialshell/application-themes) | [Custom themes](https://danklinux.com/docs/dankmaterialshell/custom-themes)
- **Plugins:** [Development guide](https://danklinux.com/docs/dankmaterialshell/plugins-overview)
- **Website:** [duxlabs.dev](https://duxlabs.dev)
- **Docs:** [duxlabs.dev/docs](https://duxlabs.dev/docs/)
- **Theming:** [Application themes](https://duxlabs.dev/docs/dms/application-themes) | [Custom themes](https://duxlabs.dev/docs/dms/custom-themes)
- **Plugins:** [Development guide](https://duxlabs.dev/docs/dms/plugins-overview)
- **Support:** [Ko-fi](https://ko-fi.com/danklinux)
## Dank Projects
DMS is one piece of the suite. The rest lives in its own repos:
- [dank-greeter](https://github.com/AvengeMedia/dank-greeter) - greetd login screen with the Dank Material aesthetic. The Greeter tab in DMS settings is the front-end for it.
- [dankcalendar](https://github.com/AvengeMedia/dankcalendar) - Local, Google, Microsoft, and CalDAV calendars for the dank desktop.
- [dgop](https://github.com/AvengeMedia/dgop) - System monitoring TUI and Go library; its library powers the process list and dashboard widgets inside the dms daemon.
- [dsearch](https://github.com/AvengeMedia/danksearch) - Fast file search that powers file results in the launcher.
- [dank-qml-common](https://github.com/AvengeMedia/dank-qml-common) - Shared QML widgets and components used by DMS, dank-greeter, and dankcalendar.
- [dankgo](https://github.com/AvengeMedia/dankgo) - Common Go modules behind the single binary apps.
- [dank-greeter](https://github.com/duxlabs-dev/dux-greeter) - greetd login screen with the Dank Material aesthetic. The Greeter tab in DMS settings is the front-end for it.
- [dankcalendar](https://github.com/duxlabs-dev/dux-calendar) - Local, Google, Microsoft, and CalDAV calendars for the dank desktop.
- [dgop](https://github.com/duxlabs-dev/dux-gop) - System monitoring TUI and Go library; its library powers the process list and dashboard widgets inside the dms daemon.
- [dsearch](https://github.com/duxlabs-dev/dux-search) - Fast file search that powers file results in the launcher.
- [dank-qml-common](https://github.com/duxlabs-dev/dux-qml-common) - Shared QML widgets and components used by DMS, dank-greeter, and dankcalendar.
- [dankgo](https://github.com/duxlabs-dev/dux-go) - Common Go modules behind the single binary apps.
## Development
@@ -177,7 +177,7 @@ quickshell -p quickshell/
```nix
{
inputs.dms.url = "github:AvengeMedia/DankMaterialShell";
inputs.dms.url = "github:duxlabs-dev/dux-shell";
# Use in home-manager or NixOS configuration
imports = [ inputs.dms.homeModules.dank-material-shell ];
@@ -193,7 +193,7 @@ Contributions welcome. Bug fixes, widgets, features, documentation, and plugins
3. Test thoroughly
4. Open a pull request
For documentation contributions, see [DankLinux-Docs](https://github.com/AvengeMedia/DankLinux-Docs).
For documentation contributions, see [DankLinux-Docs](https://github.com/duxlabs-dev/dux-docs).
## Credits
@@ -206,7 +206,7 @@ For documentation contributions, see [DankLinux-Docs](https://github.com/AvengeM
## Star History
[![Star History Chart](https://star-history.dera.page/svg?repos=AvengeMedia/DankMaterialShell&type=date&legend=top-left)](https://star-history.dera.page/#AvengeMedia/DankMaterialShell&type=date&legend=top-left)
[![Star History Chart](https://star-history.dera.page/svg?repos=duxlabs-dev/dux-shell&type=date&legend=top-left)](https://star-history.dera.page/#duxlabs-dev/dux-shell&type=date&legend=top-left)
## License
@@ -1,10 +1,10 @@
[Desktop Entry]
Type=Application
Name=DankMaterialShell
Name=Dux Shell
GenericName=Desktop Shell
Comment=Material 3 inspired shell for Wayland compositors
Exec=dms run
Icon=com.danklinux.dms
Icon=dev.duxlabs.shell
Terminal=false
NoDisplay=true
StartupNotify=false
@@ -4,7 +4,7 @@ Name=DMS Notepad
GenericName=Text Editor
Comment=Quick notes and text files in the dank desktop shell
Exec=dms ipc call notepad openFile %f
Icon=com.danklinux.dms
Icon=dev.duxlabs.shell
Terminal=false
NoDisplay=true
Categories=Utility;TextEditor;
File renamed without changes.
+1 -1
View File
@@ -3,7 +3,7 @@ Type=Application
Name=DMS
Comment=Select an application to open links and files
Exec=dms open %u
Icon=com.danklinux.dms
Icon=dev.duxlabs.shell
Terminal=false
NoDisplay=true
MimeType=x-scheme-handler/http;x-scheme-handler/https;x-scheme-handler/dms;text/html;application/xhtml+xml;
+1 -1
View File
@@ -1,5 +1,5 @@
[Unit]
Description=Dank Material Shell (DMS)
Description=Dux Shell (DMS)
PartOf=graphical-session.target
After=graphical-session.target
Requisite=graphical-session.target
+10 -10
View File
@@ -6,13 +6,13 @@ template: testify
template-data:
unroll-variadic: true
packages:
github.com/AvengeMedia/DankMaterialShell/core/internal/geolocation:
github.com/duxlabs-dev/dux-shell/core/internal/geolocation:
config:
dir: internal/mocks/geolocation
pkgname: mocks_geolocation
interfaces:
Client: {}
github.com/AvengeMedia/DankMaterialShell/core/internal/server/cups:
github.com/duxlabs-dev/dux-shell/core/internal/server/cups:
config:
dir: internal/mocks/cups
pkgname: mocks_cups
@@ -22,46 +22,46 @@ packages:
config:
dir: internal/mocks/cups_pkhelper
pkgname: mocks_cups_pkhelper
github.com/AvengeMedia/DankMaterialShell/core/internal/server/evdev:
github.com/duxlabs-dev/dux-shell/core/internal/server/evdev:
config:
dir: internal/mocks/evdev
pkgname: mocks_evdev
interfaces:
EvdevDevice: {}
github.com/AvengeMedia/DankMaterialShell/core/internal/server/network:
github.com/duxlabs-dev/dux-shell/core/internal/server/network:
config:
dir: internal/mocks/network
pkgname: mocks_network
interfaces:
Backend: {}
github.com/AvengeMedia/DankMaterialShell/core/internal/server/wlcontext:
github.com/duxlabs-dev/dux-shell/core/internal/server/wlcontext:
config:
dir: internal/mocks/wlcontext
pkgname: mocks_wlcontext
interfaces:
WaylandContext: {}
github.com/AvengeMedia/DankMaterialShell/core/internal/utils:
github.com/duxlabs-dev/dux-shell/core/internal/utils:
config:
dir: internal/mocks/utils
pkgname: mocks_utils
interfaces:
AppChecker: {}
github.com/AvengeMedia/DankMaterialShell/core/internal/version:
github.com/duxlabs-dev/dux-shell/core/internal/version:
config:
dir: internal/mocks/version
pkgname: mocks_version
interfaces:
VersionFetcher: {}
github.com/AvengeMedia/dankgo/wayland/client:
github.com/duxlabs-dev/dux-go/wayland/client:
config:
dir: internal/mocks/wlclient
pkgname: mocks_wlclient
interfaces:
WaylandDisplay: {}
github.com/AvengeMedia/DankMaterialShell/core/internal/plugins:
github.com/duxlabs-dev/dux-shell/core/internal/plugins:
interfaces:
GitClient: {}
github.com/AvengeMedia/DankMaterialShell/core/internal/server/brightness:
github.com/duxlabs-dev/dux-shell/core/internal/server/brightness:
config:
dir: internal/mocks/brightness
pkgname: mocks_brightness
+9 -9
View File
@@ -1,6 +1,6 @@
# DMS Backend & CLI
Go-based backend for DankMaterialShell providing system integration, IPC, and installation tools.
Go-based backend for Dux Shell providing system integration, IPC, and installation tools.
**See [root README](../README.md) for project overview and installation.**
@@ -78,7 +78,7 @@ Custom IPC via unix socket (JSON API) for shell communication.
- `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` - Deprecated; forwards to the standalone [dms-greeter](https://github.com/AvengeMedia/dank-greeter) binary
- `dms greeter` - Deprecated; forwards to the standalone [dms-greeter](https://github.com/duxlabs-dev/dux-greeter) binary
### Color Picker
@@ -132,10 +132,10 @@ This runs gofmt, golangci-lint, tests, and builds before each commit when `core/
**Regenerating Wayland Protocol Bindings:**
Protocol XML files live in `internal/proto/xml/`. Bindings are generated with the [dankgo](https://github.com/AvengeMedia/dankgo) `go-wayland-scanner`:
Protocol XML files live in `internal/proto/xml/`. Bindings are generated with the [dankgo](https://github.com/duxlabs-dev/dux-go) `go-wayland-scanner`:
```bash
go run github.com/AvengeMedia/dankgo/cmd/go-wayland-scanner@latest \
go run github.com/duxlabs-dev/dux-go/cmd/go-wayland-scanner@latest \
-i internal/proto/xml/wlr-gamma-control-unstable-v1.xml \
-pkg wlr_gamma_control -o internal/proto/wlr_gamma_control/gamma_control.go
```
@@ -152,7 +152,7 @@ go run github.com/AvengeMedia/dankgo/cmd/go-wayland-scanner@latest \
**Interactive (TUI):**
```bash
curl -fsSL https://install.danklinux.com | sh
curl -fsSL https://install.duxlabs.dev | sh
```
**Headless (unattended):**
@@ -160,9 +160,9 @@ curl -fsSL https://install.danklinux.com | sh
Headless mode requires cached credentials or a passwordless rule for your privilege escalation tool (sudo, doas, or run0). With sudo, run `sudo -v` first:
```bash
sudo -v && curl -fsSL https://install.danklinux.com | sh -s -- -c niri -t ghostty -y
sudo -v && curl -fsSL https://install.danklinux.com | sh -s -- -c hyprland -t kitty --dms-greeter -y
sudo -v && curl -fsSL https://install.danklinux.com | sh -s -- -c niri -t ghostty --git-deps niri,quickshell --all-features -y
sudo -v && curl -fsSL https://install.duxlabs.dev | sh -s -- -c niri -t ghostty -y
sudo -v && curl -fsSL https://install.duxlabs.dev | sh -s -- -c hyprland -t kitty --dms-greeter -y
sudo -v && curl -fsSL https://install.duxlabs.dev | sh -s -- -c niri -t ghostty --git-deps niri,quickshell --all-features -y
```
| Flag | Short | Description |
@@ -225,6 +225,6 @@ Most packages available in standard repos. Minimal building required.
Uses Portage with GURU overlay. Automatically configures USE flags. Variable success depending on system configuration.
**Void Linux**
Uses XBPS with the DMS and DankLinux self-hosted repositories.
Uses XBPS with the DMS and Dux Linux self-hosted repositories.
See installer output for distribution-specific details during installation.
+5 -5
View File
@@ -5,10 +5,10 @@ import (
"os"
"strings"
"github.com/AvengeMedia/DankMaterialShell/core/internal/headless"
"github.com/AvengeMedia/DankMaterialShell/core/internal/log"
"github.com/AvengeMedia/DankMaterialShell/core/internal/tui"
tea "github.com/charmbracelet/bubbletea"
"github.com/duxlabs-dev/dux-shell/core/internal/headless"
"github.com/duxlabs-dev/dux-shell/core/internal/log"
"github.com/duxlabs-dev/dux-shell/core/internal/tui"
"github.com/spf13/cobra"
)
@@ -33,8 +33,8 @@ var (
var rootCmd = &cobra.Command{
Use: "dankinstall",
Short: "Install DankMaterialShell and its dependencies",
Long: `dankinstall sets up DankMaterialShell with your chosen compositor and terminal.
Short: "Install Dux Shell and its dependencies",
Long: `dankinstall sets up Dux Shell with your chosen compositor and terminal.
Without flags, it launches an interactive TUI. Providing either --compositor
or --term activates headless (unattended) mode, which requires both flags.
+2 -2
View File
@@ -8,8 +8,8 @@ import (
"path/filepath"
"strings"
"github.com/AvengeMedia/DankMaterialShell/core/internal/log"
sharedpam "github.com/AvengeMedia/DankMaterialShell/core/internal/pam"
"github.com/duxlabs-dev/dux-shell/core/internal/log"
sharedpam "github.com/duxlabs-dev/dux-shell/core/internal/pam"
"github.com/spf13/cobra"
)
+2 -2
View File
@@ -4,7 +4,7 @@ import (
"fmt"
"os"
"github.com/AvengeMedia/DankMaterialShell/core/internal/backup"
"github.com/duxlabs-dev/dux-shell/core/internal/backup"
"github.com/spf13/cobra"
)
@@ -17,7 +17,7 @@ var backupCmd = &cobra.Command{
var backupCreateCmd = &cobra.Command{
Use: "create",
Short: "Create a tar.gz backup of ~/.config/DankMaterialShell (settings, plugins, themes)",
Short: "Create a tar.gz backup of ~/.config/dms (settings, plugins, themes)",
Args: cobra.NoArgs,
Run: runBackupCreate,
}
+1 -1
View File
@@ -4,7 +4,7 @@ import (
"fmt"
"os"
"github.com/AvengeMedia/DankMaterialShell/core/internal/blur"
"github.com/duxlabs-dev/dux-shell/core/internal/blur"
"github.com/spf13/cobra"
)
+2 -2
View File
@@ -5,8 +5,8 @@ import (
"strings"
"time"
"github.com/AvengeMedia/DankMaterialShell/core/internal/log"
"github.com/AvengeMedia/DankMaterialShell/core/internal/server/brightness"
"github.com/duxlabs-dev/dux-shell/core/internal/log"
"github.com/duxlabs-dev/dux-shell/core/internal/server/brightness"
"github.com/spf13/cobra"
)
+3 -3
View File
@@ -8,11 +8,11 @@ import (
"strings"
"sync"
"github.com/AvengeMedia/DankMaterialShell/core/internal/highlight"
"github.com/AvengeMedia/DankMaterialShell/core/internal/highlight/lexers"
"github.com/AvengeMedia/DankMaterialShell/core/internal/highlight/styles"
"github.com/alecthomas/chroma/v2"
"github.com/alecthomas/chroma/v2/formatters/html"
"github.com/duxlabs-dev/dux-shell/core/internal/highlight"
"github.com/duxlabs-dev/dux-shell/core/internal/highlight/lexers"
"github.com/duxlabs-dev/dux-shell/core/internal/highlight/styles"
"github.com/spf13/cobra"
"github.com/yuin/goldmark"
"github.com/yuin/goldmark/extension"
+4 -4
View File
@@ -28,10 +28,10 @@ import (
_ "golang.org/x/image/tiff"
_ "golang.org/x/image/webp"
"github.com/AvengeMedia/DankMaterialShell/core/internal/clipboard"
"github.com/AvengeMedia/DankMaterialShell/core/internal/log"
"github.com/AvengeMedia/dankgo/ipc"
"github.com/AvengeMedia/dankgo/wlclipboard"
"github.com/duxlabs-dev/dux-go/ipc"
"github.com/duxlabs-dev/dux-go/wlclipboard"
"github.com/duxlabs-dev/dux-shell/core/internal/clipboard"
"github.com/duxlabs-dev/dux-shell/core/internal/log"
"github.com/spf13/cobra"
)
+4 -4
View File
@@ -5,9 +5,9 @@ import (
"os"
"runtime/debug"
"github.com/AvengeMedia/DankMaterialShell/core/internal/clipboard"
"github.com/AvengeMedia/DankMaterialShell/core/internal/colorpicker"
"github.com/AvengeMedia/DankMaterialShell/core/internal/site"
"github.com/duxlabs-dev/dux-shell/core/internal/clipboard"
"github.com/duxlabs-dev/dux-shell/core/internal/colorpicker"
"github.com/duxlabs-dev/dux-shell/core/internal/site"
"github.com/spf13/cobra"
)
@@ -27,7 +27,7 @@ var colorCmd = &cobra.Command{
This is the screen eyedropper CLI. To open the in-shell color modal, use:
dms ipc call color-picker toggle
See: ` + site.Docs + "/dankmaterialshell/keybinds-ipc",
See: ` + site.Docs + "/dms/keybinds-ipc",
}
var colorPickCmd = &cobra.Command{
+7 -7
View File
@@ -6,12 +6,12 @@ import (
"regexp"
"strings"
"github.com/AvengeMedia/DankMaterialShell/core/internal/log"
"github.com/AvengeMedia/DankMaterialShell/core/internal/plugins"
"github.com/AvengeMedia/DankMaterialShell/core/internal/server"
"github.com/AvengeMedia/DankMaterialShell/core/internal/server/sysupdate"
"github.com/AvengeMedia/DankMaterialShell/core/internal/shellembed"
"github.com/AvengeMedia/DankMaterialShell/core/internal/site"
"github.com/duxlabs-dev/dux-shell/core/internal/log"
"github.com/duxlabs-dev/dux-shell/core/internal/plugins"
"github.com/duxlabs-dev/dux-shell/core/internal/server"
"github.com/duxlabs-dev/dux-shell/core/internal/server/sysupdate"
"github.com/duxlabs-dev/dux-shell/core/internal/shellembed"
"github.com/duxlabs-dev/dux-shell/core/internal/site"
"github.com/spf13/cobra"
)
@@ -29,7 +29,7 @@ var ipcCmd = &cobra.Command{
dms ipc call <target> <function> [args...] invoke a command
dms ipc list list all targets and functions
Full reference: ` + site.Docs + "/dankmaterialshell/keybinds-ipc",
Full reference: ` + site.Docs + "/dms/keybinds-ipc",
ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) {
return getShellIPCCompletions(args, toComplete), cobra.ShellCompDirectiveNoFileComp
},
+4 -4
View File
@@ -7,10 +7,10 @@ import (
"path/filepath"
"strings"
"github.com/AvengeMedia/DankMaterialShell/core/internal/log"
"github.com/AvengeMedia/DankMaterialShell/core/internal/luaconfig"
"github.com/AvengeMedia/DankMaterialShell/core/internal/mangoconf"
"github.com/AvengeMedia/DankMaterialShell/core/internal/utils"
"github.com/duxlabs-dev/dux-shell/core/internal/log"
"github.com/duxlabs-dev/dux-shell/core/internal/luaconfig"
"github.com/duxlabs-dev/dux-shell/core/internal/mangoconf"
"github.com/duxlabs-dev/dux-shell/core/internal/utils"
"github.com/spf13/cobra"
)
+2 -2
View File
@@ -4,8 +4,8 @@ import (
"fmt"
"strings"
"github.com/AvengeMedia/DankMaterialShell/core/internal/dank16"
"github.com/AvengeMedia/DankMaterialShell/core/internal/log"
"github.com/duxlabs-dev/dux-shell/core/internal/dank16"
"github.com/duxlabs-dev/dux-shell/core/internal/log"
"github.com/spf13/cobra"
)
+3 -3
View File
@@ -10,9 +10,9 @@ import (
"strings"
"time"
"github.com/AvengeMedia/DankMaterialShell/core/internal/dmenuipc"
"github.com/AvengeMedia/DankMaterialShell/core/internal/log"
"github.com/AvengeMedia/DankMaterialShell/core/internal/qsipc"
"github.com/duxlabs-dev/dux-shell/core/internal/dmenuipc"
"github.com/duxlabs-dev/dux-shell/core/internal/log"
"github.com/duxlabs-dev/dux-shell/core/internal/qsipc"
"github.com/spf13/cobra"
"github.com/spf13/pflag"
)
+1 -1
View File
@@ -4,7 +4,7 @@ import (
"reflect"
"testing"
"github.com/AvengeMedia/DankMaterialShell/core/internal/dmenuipc"
"github.com/duxlabs-dev/dux-shell/core/internal/dmenuipc"
)
func TestParseIndexSpec(t *testing.T) {
+15 -15
View File
@@ -14,19 +14,19 @@ import (
"slices"
"strings"
"github.com/AvengeMedia/DankMaterialShell/core/internal/blur"
"github.com/AvengeMedia/DankMaterialShell/core/internal/clipboard"
"github.com/AvengeMedia/DankMaterialShell/core/internal/config"
"github.com/AvengeMedia/DankMaterialShell/core/internal/distros"
"github.com/AvengeMedia/DankMaterialShell/core/internal/mangoconf"
"github.com/AvengeMedia/DankMaterialShell/core/internal/matugen"
"github.com/AvengeMedia/DankMaterialShell/core/internal/server/brightness"
"github.com/AvengeMedia/DankMaterialShell/core/internal/server/network"
"github.com/AvengeMedia/DankMaterialShell/core/internal/site"
"github.com/AvengeMedia/DankMaterialShell/core/internal/tui"
"github.com/AvengeMedia/DankMaterialShell/core/internal/utils"
"github.com/AvengeMedia/DankMaterialShell/core/internal/version"
"github.com/charmbracelet/lipgloss"
"github.com/duxlabs-dev/dux-shell/core/internal/blur"
"github.com/duxlabs-dev/dux-shell/core/internal/clipboard"
"github.com/duxlabs-dev/dux-shell/core/internal/config"
"github.com/duxlabs-dev/dux-shell/core/internal/distros"
"github.com/duxlabs-dev/dux-shell/core/internal/mangoconf"
"github.com/duxlabs-dev/dux-shell/core/internal/matugen"
"github.com/duxlabs-dev/dux-shell/core/internal/server/brightness"
"github.com/duxlabs-dev/dux-shell/core/internal/server/network"
"github.com/duxlabs-dev/dux-shell/core/internal/site"
"github.com/duxlabs-dev/dux-shell/core/internal/tui"
"github.com/duxlabs-dev/dux-shell/core/internal/utils"
"github.com/duxlabs-dev/dux-shell/core/internal/version"
"github.com/godbus/dbus/v5"
"github.com/spf13/cobra"
)
@@ -166,7 +166,7 @@ func (c category) String() string {
const (
checkNameMaxLength = 21
doctorDocsURL = site.Docs + "/dankmaterialshell/cli-doctor"
doctorDocsURL = site.Docs + "/dms/cli-doctor"
)
type checkResult struct {
@@ -1407,7 +1407,7 @@ func checkAdwGtk3() checkResult {
func checkConfigurationFiles() []checkResult {
configDir, _ := os.UserConfigDir()
cacheDir, _ := os.UserCacheDir()
dmsDir := "DankMaterialShell"
dmsDir := "dms"
configFiles := []struct{ name, path string }{
{"settings.json", filepath.Join(configDir, dmsDir, "settings.json")},
@@ -1826,7 +1826,7 @@ func checkFonts() []checkResult {
displayFontFamily := defaultDoctorDisplayFamily
if configDir, err := os.UserConfigDir(); err == nil {
settingsPath := filepath.Join(configDir, "DankMaterialShell", "settings.json")
settingsPath := filepath.Join(configDir, "dms", "settings.json")
if data, err := os.ReadFile(settingsPath); err == nil {
var settings struct {
FontFamily string `json:"fontFamily"`
+1 -1
View File
@@ -9,7 +9,7 @@ import (
"strings"
"testing"
"github.com/AvengeMedia/DankMaterialShell/core/internal/mangoconf"
"github.com/duxlabs-dev/dux-shell/core/internal/mangoconf"
)
func TestQuickshellVersionFailureDetails(t *testing.T) {
+1 -1
View File
@@ -7,7 +7,7 @@ import (
"strings"
"time"
"github.com/AvengeMedia/DankMaterialShell/core/internal/netfetch"
"github.com/duxlabs-dev/dux-shell/core/internal/netfetch"
"github.com/spf13/cobra"
)
+1 -1
View File
@@ -3,7 +3,7 @@ package main
import (
"fmt"
"github.com/AvengeMedia/DankMaterialShell/core/internal/log"
"github.com/duxlabs-dev/dux-shell/core/internal/log"
"github.com/spf13/cobra"
)
+17 -17
View File
@@ -13,21 +13,21 @@ import (
"strings"
"time"
"github.com/AvengeMedia/DankMaterialShell/core/internal/distros"
"github.com/AvengeMedia/DankMaterialShell/core/internal/errdefs"
"github.com/AvengeMedia/DankMaterialShell/core/internal/log"
"github.com/AvengeMedia/DankMaterialShell/core/internal/netfetch"
"github.com/AvengeMedia/DankMaterialShell/core/internal/privesc"
"github.com/AvengeMedia/DankMaterialShell/core/internal/server/sysupdate"
"github.com/AvengeMedia/DankMaterialShell/core/internal/utils"
"github.com/AvengeMedia/DankMaterialShell/core/internal/version"
"github.com/duxlabs-dev/dux-shell/core/internal/distros"
"github.com/duxlabs-dev/dux-shell/core/internal/errdefs"
"github.com/duxlabs-dev/dux-shell/core/internal/log"
"github.com/duxlabs-dev/dux-shell/core/internal/netfetch"
"github.com/duxlabs-dev/dux-shell/core/internal/privesc"
"github.com/duxlabs-dev/dux-shell/core/internal/server/sysupdate"
"github.com/duxlabs-dev/dux-shell/core/internal/utils"
"github.com/duxlabs-dev/dux-shell/core/internal/version"
"github.com/spf13/cobra"
)
var updateCmd = &cobra.Command{
Use: "update",
Short: "Update DankMaterialShell to the latest version",
Long: "Update DankMaterialShell to the latest version using the appropriate package manager for your distribution",
Short: "Update Dux Shell to the latest version",
Long: "Update Dux Shell to the latest version using the appropriate package manager for your distribution",
PreRunE: shellApp.ResolveConfig,
Run: func(cmd *cobra.Command, args []string) {
runUpdate()
@@ -36,7 +36,7 @@ var updateCmd = &cobra.Command{
var updateCheckCmd = &cobra.Command{
Use: "check",
Short: "Check if updates are available for DankMaterialShell",
Short: "Check if updates are available for Dux Shell",
Long: "Check for available updates without performing the actual update",
Run: func(cmd *cobra.Command, args []string) {
runUpdateCheck()
@@ -44,7 +44,7 @@ var updateCheckCmd = &cobra.Command{
}
func runUpdateCheck() {
fmt.Println("Checking for DankMaterialShell updates...")
fmt.Println("Checking for Dux Shell updates...")
fmt.Println()
shell := sysupdate.ProbeShell(context.Background(), Version)
@@ -169,7 +169,7 @@ func updateArchLinux() error {
return updateOtherDistros()
}
fmt.Printf("This will update DankMaterialShell using %s.\n", helper)
fmt.Printf("This will update Dux Shell using %s.\n", helper)
if !confirmUpdate() {
return errdefs.ErrUpdateCancelled
}
@@ -224,7 +224,7 @@ func updateOtherDistros() error {
fmt.Println("\nThis will update:")
fmt.Println(" 1. The dms binary from GitHub releases")
fmt.Println(" 2. DankMaterialShell configuration using git")
fmt.Println(" 2. Dux Shell configuration using git")
if !confirmUpdate() {
return errdefs.ErrUpdateCancelled
}
@@ -385,7 +385,7 @@ func offerReclone(dmsPath string) bool {
}
fmt.Println("Cloning fresh copy...")
cloneCmd := exec.Command("git", "clone", "--recurse-submodules", "https://github.com/AvengeMedia/DankMaterialShell.git", dmsPath)
cloneCmd := exec.Command("git", "clone", "--recurse-submodules", "https://github.com/duxlabs-dev/dux-shell.git", dmsPath)
cloneCmd.Stdout = os.Stdout
cloneCmd.Stderr = os.Stderr
if err := cloneCmd.Run(); err != nil {
@@ -449,8 +449,8 @@ func updateDMSBinary() error {
}
defer os.RemoveAll(tempDir)
binaryURL := fmt.Sprintf("https://github.com/AvengeMedia/DankMaterialShell/releases/download/%s/dms-cli-%s.gz", version, arch)
checksumURL := fmt.Sprintf("https://github.com/AvengeMedia/DankMaterialShell/releases/download/%s/dms-cli-%s.gz.sha256", version, arch)
binaryURL := fmt.Sprintf("https://github.com/duxlabs-dev/dux-shell/releases/download/%s/dms-cli-%s.gz", version, arch)
checksumURL := fmt.Sprintf("https://github.com/duxlabs-dev/dux-shell/releases/download/%s/dms-cli-%s.gz.sha256", version, arch)
binaryPath := filepath.Join(tempDir, "dms.gz")
checksumPath := filepath.Join(tempDir, "dms.gz.sha256")
+4 -4
View File
@@ -6,8 +6,8 @@ import (
"os/exec"
"syscall"
"github.com/AvengeMedia/DankMaterialShell/core/internal/distros"
"github.com/AvengeMedia/DankMaterialShell/core/internal/site"
"github.com/duxlabs-dev/dux-shell/core/internal/distros"
"github.com/duxlabs-dev/dux-shell/core/internal/site"
"github.com/spf13/cobra"
)
@@ -59,9 +59,9 @@ func greeterPackageInstallHint() string {
switch config.Family {
case distros.FamilyDebian:
return "Install with 'sudo apt install dms-greeter' (requires DankLinux OBS repo — see " + site.Docs + "/dankgreeter/installation#debian)"
return "Install with 'sudo apt install dms-greeter' (requires Dux Linux OBS repo — see " + site.Docs + "/dms-greeter/installation#debian)"
case distros.FamilySUSE:
return "Install with 'sudo zypper install dms-greeter' (requires DankLinux OBS repo — see " + site.Docs + "/dankgreeter/installation#opensuse)"
return "Install with 'sudo zypper install dms-greeter' (requires Dux Linux OBS repo — see " + site.Docs + "/dms-greeter/installation#opensuse)"
case distros.FamilyUbuntu:
return "Install with 'sudo apt install dms-greeter' (requires ppa:avengemedia/danklinux: sudo add-apt-repository ppa:avengemedia/danklinux)"
case distros.FamilyFedora:
+4 -4
View File
@@ -8,10 +8,10 @@ import (
"strconv"
"strings"
"github.com/AvengeMedia/DankMaterialShell/core/internal/icc"
"github.com/AvengeMedia/DankMaterialShell/core/internal/log"
"github.com/AvengeMedia/DankMaterialShell/core/internal/server/wayland"
"github.com/AvengeMedia/dankgo/ipc"
"github.com/duxlabs-dev/dux-go/ipc"
"github.com/duxlabs-dev/dux-shell/core/internal/icc"
"github.com/duxlabs-dev/dux-shell/core/internal/log"
"github.com/duxlabs-dev/dux-shell/core/internal/server/wayland"
"github.com/spf13/cobra"
)
+4 -4
View File
@@ -10,10 +10,10 @@ import (
"slices"
"strconv"
"github.com/AvengeMedia/DankMaterialShell/core/internal/keybinds"
"github.com/AvengeMedia/DankMaterialShell/core/internal/keybinds/providers"
"github.com/AvengeMedia/DankMaterialShell/core/internal/log"
"github.com/AvengeMedia/DankMaterialShell/core/internal/wayland/keymap"
"github.com/duxlabs-dev/dux-shell/core/internal/keybinds"
"github.com/duxlabs-dev/dux-shell/core/internal/keybinds/providers"
"github.com/duxlabs-dev/dux-shell/core/internal/log"
"github.com/duxlabs-dev/dux-shell/core/internal/wayland/keymap"
"github.com/spf13/cobra"
)
+1 -1
View File
@@ -5,7 +5,7 @@ import (
"fmt"
"testing"
"github.com/AvengeMedia/DankMaterialShell/core/internal/keybinds/providers"
"github.com/duxlabs-dev/dux-shell/core/internal/keybinds/providers"
)
func TestKeybindEditFailure(t *testing.T) {
+3 -3
View File
@@ -8,9 +8,9 @@ import (
"os"
"time"
"github.com/AvengeMedia/DankMaterialShell/core/internal/log"
"github.com/AvengeMedia/DankMaterialShell/core/internal/matugen"
"github.com/AvengeMedia/dankgo/ipc"
"github.com/duxlabs-dev/dux-go/ipc"
"github.com/duxlabs-dev/dux-shell/core/internal/log"
"github.com/duxlabs-dev/dux-shell/core/internal/matugen"
"github.com/spf13/cobra"
)
+2 -2
View File
@@ -7,8 +7,8 @@ import (
"strings"
"time"
"github.com/AvengeMedia/DankMaterialShell/core/internal/notify"
"github.com/AvengeMedia/dankgo/ipc"
"github.com/duxlabs-dev/dux-go/ipc"
"github.com/duxlabs-dev/dux-shell/core/internal/notify"
"github.com/godbus/dbus/v5"
"github.com/spf13/cobra"
"github.com/spf13/pflag"
+2 -2
View File
@@ -8,8 +8,8 @@ import (
"path/filepath"
"strings"
"github.com/AvengeMedia/DankMaterialShell/core/internal/log"
"github.com/AvengeMedia/dankgo/ipc"
"github.com/duxlabs-dev/dux-go/ipc"
"github.com/duxlabs-dev/dux-shell/core/internal/log"
"github.com/spf13/cobra"
)
+3 -3
View File
@@ -6,9 +6,9 @@ import (
"os"
"strings"
"github.com/AvengeMedia/DankMaterialShell/core/internal/clipboard"
"github.com/AvengeMedia/DankMaterialShell/core/internal/qrcode"
"github.com/AvengeMedia/dankgo/ipc"
"github.com/duxlabs-dev/dux-go/ipc"
"github.com/duxlabs-dev/dux-shell/core/internal/clipboard"
"github.com/duxlabs-dev/dux-shell/core/internal/qrcode"
"github.com/mattn/go-isatty"
"github.com/spf13/cobra"
)
+1 -1
View File
@@ -4,7 +4,7 @@ import (
"encoding/json"
"fmt"
"github.com/AvengeMedia/DankMaterialShell/core/internal/log"
"github.com/duxlabs-dev/dux-shell/core/internal/log"
"github.com/spf13/cobra"
)
+2 -2
View File
@@ -3,8 +3,8 @@ package main
import (
"fmt"
"github.com/AvengeMedia/DankMaterialShell/core/internal/log"
"github.com/AvengeMedia/DankMaterialShell/core/internal/registries"
"github.com/duxlabs-dev/dux-shell/core/internal/log"
"github.com/duxlabs-dev/dux-shell/core/internal/registries"
"github.com/spf13/afero"
"github.com/spf13/cobra"
)
+1 -1
View File
@@ -7,7 +7,7 @@ import (
var rootCmd = &cobra.Command{
Use: "dms",
Short: "dms CLI",
Long: "dms is the DankMaterialShell management CLI and backend server.",
Long: "dms is the Dux Shell management CLI and backend server.",
}
func init() {
+4 -4
View File
@@ -11,10 +11,10 @@ import (
"runtime/debug"
"strings"
"github.com/AvengeMedia/DankMaterialShell/core/internal/clipboard"
"github.com/AvengeMedia/DankMaterialShell/core/internal/notify"
"github.com/AvengeMedia/DankMaterialShell/core/internal/qsipc"
"github.com/AvengeMedia/DankMaterialShell/core/internal/screenshot"
"github.com/duxlabs-dev/dux-shell/core/internal/clipboard"
"github.com/duxlabs-dev/dux-shell/core/internal/notify"
"github.com/duxlabs-dev/dux-shell/core/internal/qsipc"
"github.com/duxlabs-dev/dux-shell/core/internal/screenshot"
"github.com/spf13/cobra"
)
+1 -1
View File
@@ -6,7 +6,7 @@ import (
"fmt"
"testing"
"github.com/AvengeMedia/DankMaterialShell/core/internal/screenshot"
"github.com/duxlabs-dev/dux-shell/core/internal/screenshot"
)
func thumbnailTestBuffer(t testing.TB, width, height int) *screenshot.ShmBuffer {
+1 -1
View File
@@ -8,7 +8,7 @@ import (
"sort"
"strings"
"github.com/AvengeMedia/DankMaterialShell/core/internal/log"
"github.com/duxlabs-dev/dux-shell/core/internal/log"
"github.com/spf13/cobra"
)
+7 -7
View File
@@ -8,13 +8,13 @@ import (
"path/filepath"
"strings"
"github.com/AvengeMedia/DankMaterialShell/core/internal/config"
"github.com/AvengeMedia/DankMaterialShell/core/internal/deps"
"github.com/AvengeMedia/DankMaterialShell/core/internal/distros"
"github.com/AvengeMedia/DankMaterialShell/core/internal/log"
"github.com/AvengeMedia/DankMaterialShell/core/internal/mangoconf"
"github.com/AvengeMedia/DankMaterialShell/core/internal/privesc"
"github.com/AvengeMedia/DankMaterialShell/core/internal/utils"
"github.com/duxlabs-dev/dux-shell/core/internal/config"
"github.com/duxlabs-dev/dux-shell/core/internal/deps"
"github.com/duxlabs-dev/dux-shell/core/internal/distros"
"github.com/duxlabs-dev/dux-shell/core/internal/log"
"github.com/duxlabs-dev/dux-shell/core/internal/mangoconf"
"github.com/duxlabs-dev/dux-shell/core/internal/privesc"
"github.com/duxlabs-dev/dux-shell/core/internal/utils"
"github.com/spf13/cobra"
)
+2 -2
View File
@@ -3,8 +3,8 @@ package main
import (
"fmt"
"github.com/AvengeMedia/DankMaterialShell/core/internal/config"
"github.com/AvengeMedia/DankMaterialShell/core/internal/deps"
"github.com/duxlabs-dev/dux-shell/core/internal/config"
"github.com/duxlabs-dev/dux-shell/core/internal/deps"
"github.com/spf13/cobra"
)
+5 -5
View File
@@ -11,14 +11,14 @@ import (
"syscall"
"time"
"github.com/AvengeMedia/DankMaterialShell/core/internal/backup"
"github.com/AvengeMedia/DankMaterialShell/core/internal/deps"
"github.com/AvengeMedia/DankMaterialShell/core/internal/distros"
"github.com/AvengeMedia/DankMaterialShell/core/internal/privesc"
"github.com/duxlabs-dev/dux-shell/core/internal/backup"
"github.com/duxlabs-dev/dux-shell/core/internal/deps"
"github.com/duxlabs-dev/dux-shell/core/internal/distros"
"github.com/duxlabs-dev/dux-shell/core/internal/privesc"
"github.com/spf13/cobra"
)
const switchDMSDep = "dms (DankMaterialShell)"
const switchDMSDep = "dms (Dux Shell)"
// The greeter runs the shell's QML, so it moves with dms or the login screen can break.
var switchFamily = []string{switchDMSDep, "quickshell", "dms-greeter"}
+4 -4
View File
@@ -10,11 +10,11 @@ import (
"strings"
"time"
"github.com/AvengeMedia/DankMaterialShell/core/internal/log"
"github.com/AvengeMedia/DankMaterialShell/core/internal/lowprio"
"github.com/AvengeMedia/DankMaterialShell/core/internal/server/sysupdate"
"github.com/AvengeMedia/dankgo/ipc"
"github.com/charmbracelet/lipgloss"
"github.com/duxlabs-dev/dux-go/ipc"
"github.com/duxlabs-dev/dux-shell/core/internal/log"
"github.com/duxlabs-dev/dux-shell/core/internal/lowprio"
"github.com/duxlabs-dev/dux-shell/core/internal/server/sysupdate"
"github.com/spf13/cobra"
)
+2 -2
View File
@@ -4,8 +4,8 @@ import (
"fmt"
"strings"
"github.com/AvengeMedia/DankMaterialShell/core/internal/config"
"github.com/AvengeMedia/DankMaterialShell/core/internal/deps"
"github.com/duxlabs-dev/dux-shell/core/internal/config"
"github.com/duxlabs-dev/dux-shell/core/internal/deps"
"github.com/spf13/cobra"
)
+2 -2
View File
@@ -5,8 +5,8 @@ import (
"fmt"
"os"
"github.com/AvengeMedia/DankMaterialShell/core/internal/log"
"github.com/AvengeMedia/dankgo/trash"
"github.com/duxlabs-dev/dux-go/trash"
"github.com/duxlabs-dev/dux-shell/core/internal/log"
"github.com/spf13/cobra"
)
+5 -5
View File
@@ -8,11 +8,11 @@ import (
"strings"
"time"
"github.com/AvengeMedia/DankMaterialShell/core/internal/log"
"github.com/AvengeMedia/DankMaterialShell/core/internal/mangoconf"
"github.com/AvengeMedia/DankMaterialShell/core/internal/utils"
"github.com/AvengeMedia/DankMaterialShell/core/internal/windowrules"
"github.com/AvengeMedia/DankMaterialShell/core/internal/windowrules/providers"
"github.com/duxlabs-dev/dux-shell/core/internal/log"
"github.com/duxlabs-dev/dux-shell/core/internal/mangoconf"
"github.com/duxlabs-dev/dux-shell/core/internal/utils"
"github.com/duxlabs-dev/dux-shell/core/internal/windowrules"
"github.com/duxlabs-dev/dux-shell/core/internal/windowrules/providers"
"github.com/spf13/cobra"
)
+2 -2
View File
@@ -5,8 +5,8 @@ import (
"sync"
"time"
"github.com/AvengeMedia/DankMaterialShell/core/internal/proto/wlr_output_power"
wlclient "github.com/AvengeMedia/dankgo/wayland/client"
wlclient "github.com/duxlabs-dev/dux-go/wayland/client"
"github.com/duxlabs-dev/dux-shell/core/internal/proto/wlr_output_power"
)
type cmd struct {
+2 -2
View File
@@ -9,8 +9,8 @@ import (
"strings"
"sync"
"github.com/AvengeMedia/DankMaterialShell/core/internal/clipolicy"
"github.com/AvengeMedia/DankMaterialShell/core/internal/privesc"
"github.com/duxlabs-dev/dux-shell/core/internal/clipolicy"
"github.com/duxlabs-dev/dux-shell/core/internal/privesc"
"github.com/spf13/afero"
"github.com/spf13/cobra"
)
+1 -1
View File
@@ -4,7 +4,7 @@ import (
"encoding/json"
"testing"
"github.com/AvengeMedia/DankMaterialShell/core/internal/clipolicy"
"github.com/duxlabs-dev/dux-shell/core/internal/clipolicy"
)
func TestDefaultImmutablePolicyAllowsSyncButBlocksEnable(t *testing.T) {
+9 -2
View File
@@ -5,8 +5,9 @@ package main
import (
"os"
"github.com/AvengeMedia/DankMaterialShell/core/internal/clipboard"
"github.com/AvengeMedia/DankMaterialShell/core/internal/log"
"github.com/duxlabs-dev/dux-shell/core/internal/clipboard"
"github.com/duxlabs-dev/dux-shell/core/internal/log"
"github.com/duxlabs-dev/dux-shell/core/internal/utils"
)
var Version = "dev"
@@ -33,6 +34,12 @@ func main() {
log.Fatal("This program should not be run as root. Exiting.")
}
if os.Geteuid() != 0 {
for _, err := range utils.MigrateLegacyDirs() {
log.Warnf("dms dir migration: %v", err)
}
}
os.Args = normalizeDmenuArgv(os.Args)
if err := rootCmd.Execute(); err != nil {
log.Fatal(err)
+9 -2
View File
@@ -5,8 +5,9 @@ package main
import (
"os"
"github.com/AvengeMedia/DankMaterialShell/core/internal/clipboard"
"github.com/AvengeMedia/DankMaterialShell/core/internal/log"
"github.com/duxlabs-dev/dux-shell/core/internal/clipboard"
"github.com/duxlabs-dev/dux-shell/core/internal/log"
"github.com/duxlabs-dev/dux-shell/core/internal/utils"
)
var Version = "dev"
@@ -29,6 +30,12 @@ func main() {
log.Fatal("This program should not be run as root. Exiting.")
}
if os.Geteuid() != 0 {
for _, err := range utils.MigrateLegacyDirs() {
log.Warnf("dms dir migration: %v", err)
}
}
os.Args = normalizeDmenuArgv(os.Args)
if err := rootCmd.Execute(); err != nil {
log.Fatal(err)
+2 -2
View File
@@ -3,8 +3,8 @@ package main
import (
"fmt"
"github.com/AvengeMedia/DankMaterialShell/core/internal/proto/wlr_output_management"
wlclient "github.com/AvengeMedia/dankgo/wayland/client"
wlclient "github.com/duxlabs-dev/dux-go/wayland/client"
"github.com/duxlabs-dev/dux-shell/core/internal/proto/wlr_output_management"
)
type randrOutput struct {
+14 -11
View File
@@ -8,11 +8,12 @@ import (
"net"
"os"
"path/filepath"
"strings"
"time"
"github.com/AvengeMedia/DankMaterialShell/core/internal/server"
"github.com/AvengeMedia/DankMaterialShell/core/internal/utils"
"github.com/AvengeMedia/dankgo/ipc"
"github.com/duxlabs-dev/dux-go/ipc"
"github.com/duxlabs-dev/dux-shell/core/internal/server"
"github.com/duxlabs-dev/dux-shell/core/internal/utils"
)
// maxIPCMessageSize allows room for a 50 MB clipboard entry plus JSON/base64
@@ -121,16 +122,18 @@ func getServerSocketPath() string {
entries, err := os.ReadDir(runtimeDir)
if err != nil {
return filepath.Join(runtimeDir, "danklinux.sock")
return server.GetSocketPath()
}
for _, entry := range entries {
name := entry.Name()
if name == "danklinux.sock" {
return filepath.Join(runtimeDir, name)
}
if len(name) > 10 && name[:10] == "danklinux-" && filepath.Ext(name) == ".sock" {
return filepath.Join(runtimeDir, name)
for _, id := range []string{"dms", "danklinux"} {
for _, entry := range entries {
name := entry.Name()
if filepath.Ext(name) != ".sock" {
continue
}
if name == id+".sock" || strings.HasPrefix(name, id+"-") {
return filepath.Join(runtimeDir, name)
}
}
}
+1 -1
View File
@@ -8,7 +8,7 @@ import (
"testing"
"time"
"github.com/AvengeMedia/dankgo/ipc"
"github.com/duxlabs-dev/dux-go/ipc"
)
func fakeServer(t *testing.T, handle func(net.Conn)) {
+5 -5
View File
@@ -13,9 +13,9 @@ import (
"sync"
"time"
"github.com/AvengeMedia/DankMaterialShell/core/internal/log"
"github.com/AvengeMedia/DankMaterialShell/core/internal/qsipc"
"github.com/AvengeMedia/DankMaterialShell/core/internal/site"
"github.com/duxlabs-dev/dux-shell/core/internal/log"
"github.com/duxlabs-dev/dux-shell/core/internal/qsipc"
"github.com/duxlabs-dev/dux-shell/core/internal/site"
)
type ipcTargets map[string]map[string][]string
@@ -228,7 +228,7 @@ func printIPCHelpFailure(err error) {
fmt.Printf(" %v\n", err)
}
fmt.Println()
fmt.Println(" Full docs: " + site.Docs + "/dankmaterialshell/keybinds-ipc")
fmt.Println(" Full docs: " + site.Docs + "/dms/keybinds-ipc")
fmt.Println(" Try: dms ipc call <target> <function>")
}
@@ -243,7 +243,7 @@ func ensureFontCache() {
var fontsToCheck []string
if configDir, err := os.UserConfigDir(); err == nil {
settingsPath := filepath.Join(configDir, "DankMaterialShell", "settings.json")
settingsPath := filepath.Join(configDir, "dms", "settings.json")
if data, err := os.ReadFile(settingsPath); err == nil {
var settings struct {
FontFamily string `json:"fontFamily"`
+10 -9
View File
@@ -6,19 +6,20 @@ import (
"os"
"strings"
"github.com/AvengeMedia/DankMaterialShell/core/internal/config"
"github.com/AvengeMedia/DankMaterialShell/core/internal/gpu"
"github.com/AvengeMedia/DankMaterialShell/core/internal/log"
"github.com/AvengeMedia/DankMaterialShell/core/internal/server"
"github.com/AvengeMedia/DankMaterialShell/core/internal/shellembed"
"github.com/AvengeMedia/DankMaterialShell/core/internal/utils"
"github.com/AvengeMedia/dankgo/shellapp"
"github.com/duxlabs-dev/dux-go/shellapp"
"github.com/duxlabs-dev/dux-shell/core/internal/config"
"github.com/duxlabs-dev/dux-shell/core/internal/gpu"
"github.com/duxlabs-dev/dux-shell/core/internal/log"
"github.com/duxlabs-dev/dux-shell/core/internal/server"
"github.com/duxlabs-dev/dux-shell/core/internal/shellembed"
"github.com/duxlabs-dev/dux-shell/core/internal/utils"
)
var shellApp = shellapp.New(shellapp.Config{
ID: "danklinux",
ID: "dms",
LegacyIDs: []string{"danklinux"},
EnvPrefix: "DMS",
QSAppID: "com.danklinux.dms",
QSAppID: "dev.duxlabs.shell",
Version: Version,
Embedded: embeddedShell{},
Boot: bootBackend,
+1 -1
View File
@@ -3,8 +3,8 @@ package main
import (
"fmt"
"github.com/AvengeMedia/DankMaterialShell/core/internal/tui"
"github.com/charmbracelet/lipgloss"
"github.com/duxlabs-dev/dux-shell/core/internal/tui"
)
func printASCII() {
+3 -3
View File
@@ -1,10 +1,10 @@
module github.com/AvengeMedia/DankMaterialShell/core
module github.com/duxlabs-dev/dux-shell/core
go 1.27.1
require (
github.com/AvengeMedia/dankgo v1.6.3-0.20261019192939-46e7a10c933f
github.com/AvengeMedia/dgop v1.6.3-0.20261015133851-bf93d6b75cf2
github.com/duxlabs-dev/dux-go v0.0.0-00010101000000-000000000000
github.com/duxlabs-dev/dux-gop v0.0.0-00010101000000-000000000000
github.com/Wifx/gonetworkmanager/v2 v2.2.0
github.com/alecthomas/chroma/v2 v2.27.0
github.com/charmbracelet/bubbles v1.0.0
-4
View File
@@ -1,9 +1,5 @@
filippo.io/edwards25519 v1.2.0 h1:crnVqOiS4jqYleHd9vaKZ+HKtHfllngJIiOpNpoJsjo=
filippo.io/edwards25519 v1.2.0/go.mod h1:xzAOLCNug/yB62zG1bQ8uziwrIqIuxhctzJT18Q77mc=
github.com/AvengeMedia/dankgo v1.6.3-0.20261019192939-46e7a10c933f h1:DpJ4MnFdtsa/FouZICTZeZlqXYTNQ342/7vImWXcSJM=
github.com/AvengeMedia/dankgo v1.6.3-0.20261019192939-46e7a10c933f/go.mod h1:oNWfG/2In/Znsrq03ZhNP1dCwHmHHm3nOVu6oXgkYIc=
github.com/AvengeMedia/dgop v1.6.3-0.20261015133851-bf93d6b75cf2 h1:oOkpidPu7DJENdRTseCMw6pqyo12KNoGEC+Uim9pFHo=
github.com/AvengeMedia/dgop v1.6.3-0.20261015133851-bf93d6b75cf2/go.mod h1:8TFIP72NLxCbogF2hHU6sXj3RoTbHQW8beeCrisHs/Y=
github.com/Microsoft/go-winio v0.6.4 h1:kJF2pamtYCWXf0xAT8sAkwKC0pMl2HYBrRPHAqyUc+g=
github.com/Microsoft/go-winio v0.6.4/go.mod h1:1xl5JXG4ze/m74GH6Dc4Mwxfc3VL5siRVQjIAlHH07U=
github.com/ProtonMail/go-crypto v1.5.2 h1:cucYnvqcY7UOXVD//mSyjeaPY0SSN3v5cDkYPxumINk=
+3 -3
View File
@@ -36,7 +36,7 @@ aarch64)
esac
# Get the latest release version
LATEST_VERSION=$(curl -s https://api.github.com/repos/AvengeMedia/DankMaterialShell/releases/latest | grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/')
LATEST_VERSION=$(curl -sL https://api.github.com/repos/duxlabs-dev/dux-shell/releases/latest | grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/')
if [ -z "$LATEST_VERSION" ]; then
printf "%bError: Could not fetch latest version%b\n" "$RED" "$NC"
@@ -52,8 +52,8 @@ cd "$TEMP_DIR" || exit 1
# Download the gzipped binary and its checksum
printf "%bDownloading installer...%b\n" "$GREEN" "$NC"
curl -L "https://github.com/AvengeMedia/DankMaterialShell/releases/download/$LATEST_VERSION/dankinstall-$ARCH.gz" -o "installer.gz"
curl -L "https://github.com/AvengeMedia/DankMaterialShell/releases/download/$LATEST_VERSION/dankinstall-$ARCH.gz.sha256" -o "expected.sha256"
curl -L "https://github.com/duxlabs-dev/dux-shell/releases/download/$LATEST_VERSION/dankinstall-$ARCH.gz" -o "installer.gz"
curl -L "https://github.com/duxlabs-dev/dux-shell/releases/download/$LATEST_VERSION/dankinstall-$ARCH.gz.sha256" -o "expected.sha256"
# Get the expected checksum
EXPECTED_CHECKSUM=$(awk '{print $1}' expected.sha256)
+1 -1
View File
@@ -11,7 +11,7 @@ import (
"time"
)
const dirName = "DankMaterialShell"
const dirName = "dms"
func ConfigDir() (string, error) {
configDir, err := os.UserConfigDir()
+6 -6
View File
@@ -39,11 +39,11 @@ func TestSnapshotRestoresThroughSymlinkedConfig(t *testing.T) {
if err := os.MkdirAll(filepath.Join(home, ".config"), 0o755); err != nil {
t.Fatal(err)
}
configLink := filepath.Join(home, ".config", "DankMaterialShell")
configLink := filepath.Join(home, ".config", "dms")
if err := os.Symlink(dotfiles, configLink); err != nil {
t.Fatal(err)
}
session := filepath.Join(home, ".local", "state", "DankMaterialShell", "session.json")
session := filepath.Join(home, ".local", "state", "dms", "session.json")
writeFile(t, session, `{"wallpaper":"a"}`)
path, err := Snapshot("stable")
@@ -73,7 +73,7 @@ func TestSnapshotKeepsNewestPerLabel(t *testing.T) {
t.Setenv("XDG_CONFIG_HOME", filepath.Join(home, ".config"))
t.Setenv("XDG_STATE_HOME", filepath.Join(home, ".local", "state"))
t.Setenv("XDG_CACHE_HOME", filepath.Join(home, ".cache"))
writeFile(t, filepath.Join(home, ".config", "DankMaterialShell", "settings.json"), "{}")
writeFile(t, filepath.Join(home, ".config", "dms", "settings.json"), "{}")
dir, _ := SnapshotDir()
for _, stamp := range []string{"20260101-000000", "20260102-000000", "20260103-000000"} {
@@ -98,7 +98,7 @@ func TestRestoreSnapshotRejectsForeignEntries(t *testing.T) {
t.Setenv("XDG_CONFIG_HOME", filepath.Join(home, ".config"))
t.Setenv("XDG_STATE_HOME", filepath.Join(home, ".local", "state"))
t.Setenv("XDG_CACHE_HOME", filepath.Join(home, ".cache"))
writeFile(t, filepath.Join(home, ".config", "DankMaterialShell", "settings.json"), "{}")
writeFile(t, filepath.Join(home, ".config", "dms", "settings.json"), "{}")
archive := filepath.Join(home, "backup.tar.gz")
if err := Create(archive); err != nil {
@@ -123,7 +123,7 @@ func TestRestoreSnapshotRejectsEscapingSymlink(t *testing.T) {
}
gz := gzip.NewWriter(f)
tw := tar.NewWriter(gz)
if err := tw.WriteHeader(&tar.Header{Name: "config/DankMaterialShell/plugins", Typeflag: tar.TypeSymlink, Linkname: "../../../.ssh", Mode: 0o777}); err != nil {
if err := tw.WriteHeader(&tar.Header{Name: "config/dms/plugins", Typeflag: tar.TypeSymlink, Linkname: "../../../.ssh", Mode: 0o777}); err != nil {
t.Fatal(err)
}
for _, c := range []interface{ Close() error }{tw, gz, f} {
@@ -135,7 +135,7 @@ func TestRestoreSnapshotRejectsEscapingSymlink(t *testing.T) {
if err := RestoreSnapshot(archive); err == nil {
t.Fatal("RestoreSnapshot followed a symlink that points outside the config dir")
}
if _, err := os.Lstat(filepath.Join(home, ".config", "DankMaterialShell", "plugins")); err == nil {
if _, err := os.Lstat(filepath.Join(home, ".config", "dms", "plugins")); err == nil {
t.Fatal("the escaping symlink was created")
}
}
+2 -2
View File
@@ -1,8 +1,8 @@
package blur
import (
wlhelpers "github.com/AvengeMedia/DankMaterialShell/core/internal/wayland/client"
client "github.com/AvengeMedia/dankgo/wayland/client"
client "github.com/duxlabs-dev/dux-go/wayland/client"
wlhelpers "github.com/duxlabs-dev/dux-shell/core/internal/wayland/client"
)
const extBackgroundEffectInterface = "ext_background_effect_manager_v1"
+2 -2
View File
@@ -11,8 +11,8 @@ import (
"path/filepath"
"syscall"
"github.com/AvengeMedia/dankgo/wayland/ext_data_control"
"github.com/AvengeMedia/dankgo/wlclipboard"
"github.com/duxlabs-dev/dux-go/wayland/ext_data_control"
"github.com/duxlabs-dev/dux-go/wlclipboard"
)
const envServe = "_DMS_CLIPBOARD_SERVE"
+1 -1
View File
@@ -6,7 +6,7 @@ import (
"image/png"
"testing"
"github.com/AvengeMedia/dankgo/wlclipboard"
"github.com/duxlabs-dev/dux-go/wlclipboard"
"github.com/stretchr/testify/assert"
)
+2 -2
View File
@@ -3,8 +3,8 @@ package clipboard
import (
"fmt"
"github.com/AvengeMedia/DankMaterialShell/core/internal/wayland/keymap"
wlclient "github.com/AvengeMedia/dankgo/wayland/client"
wlclient "github.com/duxlabs-dev/dux-go/wayland/client"
"github.com/duxlabs-dev/dux-shell/core/internal/wayland/keymap"
"golang.org/x/sys/unix"
)
+1 -1
View File
@@ -129,7 +129,7 @@ func GetDBPath() (string, error) {
cacheDir = filepath.Join(homeDir, ".cache")
}
newDir := filepath.Join(cacheDir, "DankMaterialShell", "clipboard")
newDir := filepath.Join(cacheDir, "dms", "clipboard")
newPath := filepath.Join(newDir, "db")
if _, err := os.Stat(newPath); err == nil {
+1 -1
View File
@@ -8,7 +8,7 @@ import (
"os"
"time"
"github.com/AvengeMedia/dankgo/wayland/ext_data_control"
"github.com/duxlabs-dev/dux-go/wayland/ext_data_control"
)
// WatchAll subscribes to clipboard selection changes like wlclipboard.Watch,
+3 -3
View File
@@ -3,9 +3,9 @@ package clipboard
import (
"fmt"
"github.com/AvengeMedia/DankMaterialShell/core/internal/proto/virtual_keyboard"
wlclient "github.com/AvengeMedia/dankgo/wayland/client"
"github.com/AvengeMedia/dankgo/wayland/ext_data_control"
wlclient "github.com/duxlabs-dev/dux-go/wayland/client"
"github.com/duxlabs-dev/dux-go/wayland/ext_data_control"
"github.com/duxlabs-dev/dux-shell/core/internal/proto/virtual_keyboard"
)
type session struct {
+10 -10
View File
@@ -4,16 +4,16 @@ import (
"fmt"
"sync"
"github.com/AvengeMedia/DankMaterialShell/core/internal/log"
"github.com/AvengeMedia/DankMaterialShell/core/internal/proto/keyboard_shortcuts_inhibit"
"github.com/AvengeMedia/DankMaterialShell/core/internal/proto/wlr_layer_shell"
"github.com/AvengeMedia/DankMaterialShell/core/internal/proto/wlr_screencopy"
"github.com/AvengeMedia/DankMaterialShell/core/internal/proto/wp_color_management"
"github.com/AvengeMedia/DankMaterialShell/core/internal/proto/wp_viewporter"
"github.com/AvengeMedia/DankMaterialShell/core/internal/utils"
wlhelpers "github.com/AvengeMedia/DankMaterialShell/core/internal/wayland/client"
"github.com/AvengeMedia/DankMaterialShell/core/internal/wayland/keymap"
"github.com/AvengeMedia/dankgo/wayland/client"
"github.com/duxlabs-dev/dux-go/wayland/client"
"github.com/duxlabs-dev/dux-shell/core/internal/log"
"github.com/duxlabs-dev/dux-shell/core/internal/proto/keyboard_shortcuts_inhibit"
"github.com/duxlabs-dev/dux-shell/core/internal/proto/wlr_layer_shell"
"github.com/duxlabs-dev/dux-shell/core/internal/proto/wlr_screencopy"
"github.com/duxlabs-dev/dux-shell/core/internal/proto/wp_color_management"
"github.com/duxlabs-dev/dux-shell/core/internal/proto/wp_viewporter"
"github.com/duxlabs-dev/dux-shell/core/internal/utils"
wlhelpers "github.com/duxlabs-dev/dux-shell/core/internal/wayland/client"
"github.com/duxlabs-dev/dux-shell/core/internal/wayland/keymap"
)
type Config struct {
+1 -1
View File
@@ -1,6 +1,6 @@
package colorpicker
import "github.com/AvengeMedia/DankMaterialShell/core/internal/wayland/shm"
import "github.com/duxlabs-dev/dux-shell/core/internal/wayland/shm"
type ShmBuffer = shm.Buffer
+1 -1
View File
@@ -6,7 +6,7 @@ import (
"strings"
"sync"
"github.com/AvengeMedia/DankMaterialShell/core/internal/wayland/shm"
"github.com/duxlabs-dev/dux-shell/core/internal/wayland/shm"
)
type PixelFormat = shm.PixelFormat
+2 -2
View File
@@ -9,8 +9,8 @@ import (
"strings"
"time"
"github.com/AvengeMedia/DankMaterialShell/core/internal/deps"
"github.com/AvengeMedia/DankMaterialShell/core/internal/version"
"github.com/duxlabs-dev/dux-shell/core/internal/deps"
"github.com/duxlabs-dev/dux-shell/core/internal/version"
)
const hyprlandBackupDirName = ".dms-backups"
+1 -1
View File
@@ -8,7 +8,7 @@ import (
"strings"
"testing"
"github.com/AvengeMedia/DankMaterialShell/core/internal/deps"
"github.com/duxlabs-dev/dux-shell/core/internal/deps"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
+1 -1
View File
@@ -1,4 +1,4 @@
# DankMaterialShell — MangoWM configuration (managed by `dms setup`)
# Dux Shell — MangoWM configuration (managed by `dms setup`)
# Keybinds, colors, layout, outputs, cursor and window rules are pulled from the
# ./dms fragments below. Add your own binds/rules here; they sit alongside DMS's.
Loaded 100 of 537 files, more files were not shown because too many files have changed in this diff. Show more