Repository navigation
Installation
curl -fsSL https://install.duxlabs.dev | shAssets
Complete Packages
dms-full-amd64.tar.gz- Complete package for x86_64 systems (CLI binaries + QML source + shell completions + installation guide)dms-full-arm64.tar.gz- Complete package for ARM64 systems (CLI binaries + QML source + shell completions + installation guide)dms-full-freebsd-amd64.tar.gz- Complete package for FreeBSD x86_64 systemsdms-full-freebsd-arm64.tar.gz- Complete package for FreeBSD ARM64 systems
Individual Components
dms-cli-amd64.gz- DMS CLI binary for x86_64 systemsdms-cli-arm64.gz- DMS CLI binary for ARM64 systemsdms-cli-freebsd-amd64.gz- DMS CLI binary for FreeBSD x86_64 systemsdms-cli-freebsd-arm64.gz- DMS CLI binary for FreeBSD ARM64 systemsdms-distropkg-amd64.gz- DMS CLI binary built with distro_package tag for AMD64 systemsdms-distropkg-arm64.gz- DMS CLI binary built with distro_package tag for ARM64 systemsdms-distropkg-freebsd-amd64.gz- DMS CLI binary built with distro_package tag for FreeBSD x86_64 systemsdms-distropkg-freebsd-arm64.gz- DMS CLI binary built with distro_package tag for FreeBSD ARM64 systemsduxinstall-amd64.gz- Installer binary for x86_64 systemsduxinstall-arm64.gz- Installer binary for ARM64 systemsdms-cli-<version>.tar.gz- Go source code with vendored modules (for distro packaging)dms-qml.tar.gz- QML source code onlydms-source.tar.gz- Full repository source with bundled DCommon (for distro packaging)
Checksums
*.sha256- SHA256 checksums for verifying download integrity
Installation: Extract the dms-full-*.tar.gz package for your architecture and follow the INSTALL.md instructions inside.
What's Changed
Features
- Add opt-in administrator lock restrictions by @alvarosth in #3869
- cc: allow sliders to shrink to 0.5 height by @bbedward (6bd0e24)
- feat(screenshot): add island snap targets by @hthienloc in #3881
- feat(duxinstall): config support for immutable image-based hosts by @purian23 (696be97)
- Add translation information and Discord to README by @apollo79 in #3944
- sysupdate: add a never option to the update check interval by @purian23 (28d5d56)
- feat(density): interface density setting for shell surfaces by @purian23 (7602503)
- feat(density): text and search fields follow interface density by @purian23 (170e8f5)
- feat(dash): adjustable clock card font weight to match desktop/lockscreen by @purian23 (59ede53)
- feat(theme): introduce dms classic interface style by @purian23 (7479d4b)
- feat(theme): add themable tooltip surface colors by @hthienloc in #3967
- feat(dash): restore optional settings shortcut in the tab bar by @purian23 (2af1c4c)
- add missing theme values, update changed ones by @apollo79 in #3978
- feat(clock): clock: per-widget click action w/overview as optional by @purian23 (d367e7e)
- feat(packaging): dual-series migration publishing & dms migrate dux by @purian23 (095d1c6)
- dash: add live property to the user info card by @purian23 (6f68c94)
- feat(widget-editor): resize square with shift by @hthienloc in #4030
- fix #3863 and allow user to disable / enable audio cards by @cmleon51 in #4019
- feat(osd): add keyboard layout OSD by @hthienloc in #4034
- feat(osd): add num lock indicator by @hthienloc in #4046
- feat(packaging): dual-series OBS publishing & dms migrate dux for debian/opensuse by @purian23 (f297cb0)
- scripts: add copyable port command to audit by @purian23 (21ad179)
- feat(sysmon): rework the system monitor window by @Conava in #3768
- Expressive media player design / Bento rework / Lyrics features by @apollo79 in #3932
- feat(niri): support upcoming niri press/release/passthrough binds & config behind a validate probe by @purian23 (417db47)
- feat(duxinstall): add dux-files support & remaining rebranded packages by @purian23 (63eeddf)
- wallpaper: play video wallpapers in the shell by @KadirJeager in #4037
- bar: let widgets set an overflow priority by @colonelpanic8 in #4060
- osd: add OSD popup for fcitx5 IME changes by @DaniCatGames in #4072
- hyprland: expose wobble damping, mass and mesh in layout settings by @alamin147 in #4033
- clock: add option to hide am/pm in 12-hour mode by @purian23 (ed2b57f)
- dock: reorder widgets from settings in the dock's real order by @KadirJeager in #4083
- weather: add MET Norway and an ordered provider fallback list by @joshii-h in #4086
- feat(media): restore card background opt w/new swaying square & spinning vinyl record art by @purian23 (c0e1813)
- dms: fill in the optional device argument for brightness ipc calls by @Mario-Mohar in #4096
- feat(dock): configure middle-click action by @hthienloc in #4101
- feat(notification center): selectable button placement & design updates by @purian23 (7595be8)
- enable changelog by @bbedward (d77bb95)
- scripts: add suite scraping all dux repos by @purian23 (694dcaa)
- feat(lock): preview the mapped lock screen layout in settings - live lock widgets scaled over the lock wallpaper, blur and fill mode Port 2.0 by @purian23 (e978bae)
Fixes
- fix(notifications): close popups when their screen stops showing them by @Conava in #3844
- displays: ceil logical output sizes on niri so neighbours never overlap fixes #3875 port 2.0 by @bbedward (acc2c94)
- fix(core): prevent clipboard & wellbeing data loss from concurrent sessions by @purian23 (c7692f8)
- fix(mango): keep layer animations off dms surfaces by @purian23 (ba7b362)
- fix(apppicker): hide NoDisplay handlers except the shell's own by @bbedward (71417b7)
- fix(clipboard): bind & release the data device when tracking is toggled by @purian23 (7e0f110)
- (deps): dux-go desktop fixes & qml-common by @purian23 (4d49e12)
- fix(ddash): preserve tab active state during exit transition by @hthienloc in #3928
- fix(settings): show bar delete button when multiple bars exist by @hthienloc in #3943
- fix(wallpaper): apply overview blur to built-in backdrops by @hthienloc in #3941
- launcher: fix grid display by @bbedward (8827aa0)
- fix(bar): use active color for workspace text in line style by @hthienloc in #3968
- cc: fix band expansion of footer items by @bbedward (2609b49)
- Fix/3958 workspace indicator icon perf by @PandorasFox in #3961
- Fix/3958 dock tooltip & app icon perf by @PandorasFox in #3962
- fix(powermenu): show inactive EFI boot entries in reboot-to-OS picker by @matthewyjiang in #3969
- Fix/3958 lock placement atlas by @PandorasFox in #3960
- fix(workspaces): resolve slot list binding regression by @purian23 (4f0e2c6)
- fix(dock): gate magnification while hidden by @hthienloc in #3983
- fix(settings-search): resolve placeholders by @hthienloc in #3985
- fix(osd): fill active keep-awake icon by @hthienloc in #3986
- fix(clock): vertically align clock content by @Curious-r in #3994
- fix(screenshot): expose surface bounds for region snap by @hthienloc in #3999
- ci: fix pr labeling by @bbedward (2a9f83c)
- doctor: match font names the way qt lists them by @cmleon51 in #3972
- control center: one surface under the edit strip & backdrops/frame sheet fixes by @purian23 (e48c122)
- media: fix rare binding loop on bento panes switch by @purian23 (26c4cd1)
- fix(widget-editor): show color picker above editor by @hthienloc in #4021
- fix: make installer not rely on github API by @bbedward (7cf13f1)
- fix(osd): handle touchpad hardware keys by @hthienloc in #4045
- fix: doctor retired package check nd flashbang by @bbedward (390de93)
- fix(gentoo): update Dux package mappings by @NLagwal in #4043
- fix(island): default reservation follows the pill below the 40px strip by @KadirJeager in #4038
- fix(island): hand keyboard focus to a hover-opened sheet on click by @purian23 (bd7dd5d)
- screenshot: bind the first wl_seat so the region selector receives input by @WyInnovate in #4049
- fix(dash): exit edit mode immediately on popout dismiss by @hthienloc in #4057
- fix(island): collapse dash activities when closing dashboard by @hthienloc in #4058
- fix(mango): native dual-series toml & conf config support by @purian23 (38e1355)
- fix(screenshot): keep last region in logical coordinates by @hthienloc in #4070
- spotlight: fix bottom radius by @cmleon51 in #4068
- fix(hyprland): categorize lua function binds by whole words by @purian23 (91dc889)
- fix(gtk): pulse gtk4 after light/dark switches by @purian23 (3c7668d)
- network: fix iwd+networkd link classification and disconnect state by @hoangm960 in #4082
- plugins: explain the restart a stale file list needs by @bernardopg in #4077
- plugins: ignore a widget surface that reuses the desktop component by @KadirJeager in #4084
- plugins: retry a failed load with a fresh component by @bernardopg in #4076
- launcher: Ctrl+N/Ctrl+P move by item in dmenu mode by @colonelpanic8 in #4088
- ghostty: set window-theme = ghostty in embedded config by @segfawlt in #4098
- island: control the brightness devices pinned to its own screen by @Mario-Mohar in #4092
- changelog: fix padding by @bbedward (6ab10dc)
Packaging
- distro/freebsd: drop elogind references by @bbedward (aeacaf7)
- distros: dux packaging rebrand sweep by @purian23 (40a129c)
Internationalization
- i18n: sync by @bbedward (1a46db0)
- i18n: sync by @bbedward (bf9a51c)
- i18n: sync by @bbedward (a330e9b)
- feat(battery): scale battery level display by @hthienloc in #4012
- i18n: sync by @bbedward (8ce3750)
- i18n: sync by @bbedward (c06ba08)
Documentation
- docs: use dux project names in README by @antonkesy in #3847
- docs: point arch and aur badges at dux-shell packages by @bbedward (2d16cc2)
Other Changes
- ci: cache go modules from core/go.sum, retry downloads by @bbedward (1fb9f52)
- matugen: neovim template reads the dms config dir" by @bbedward (3284aca)
- refactor(ui): match the dock settings page with the bar settings page by @cmleon51 in #3829
- Keep MangoWM workspace apps on their own monitor by @tomups in #3832
- Theme Antigravity IDE via the VS Code extension by @adarsh-67r in #3836
- niri: only emit displayScales when a scale changed by @bbedward (90d3c97)
- theme: skip matugen runs whose inputs match the last applied run by @bbedward (afeea48)
- workspaces: keep the pill highlight while hovering its app icons by @bbedward (112d059)
- bar: slide an auto-hidden island by its compact height by @bbedward (8e851b3)
- core: only use the simple animation driver for the scrolling wallpaper by @bbedward (27a7033)
- theme: publish typography for dux apps by @bbedward (8f2a486)
- dash: hold panel height while dragging cards unless hung from a top bar lyrics: ignore floored position samples and shell refresh emits by @bbedward (28f921f)
- battery: throttle pulse animation to 20fps by @bbedward (1b59a47)
- bar: keep far-edge island hosts at sheet size so the bar never jumps on expand by @bbedward (d8786ea)
- notifications: keep popup content while it exits after the notification closes by @purian23 (47c9d8d)
- distos: compare ubuntu published commit by prefix by @purian23 (39a58f7)
- greeter: remove the embedded legacy greeter (again) by @bbedward (c5d1d4f)
- plugins: keep manifest paths inside the plugin directory by @bbedward (6e86b53)
- plugins: label declared permissions as unenforced by @bbedward (14b3dda)
- ci: disable background tasks in review job by @bbedward (da79eca)
- battery: pulse only the icon when the bar has no background by @V8V88V8V88 in #3861
- shell: restore QT disable decoration pragma by @bbedward (5b77777)
- bar: drop pill blur region when a vertical pill collapses to zero height by @bbedward (44d498e)
- wallpaper: push the cycling config when the service is created by @Mario-Mohar in #3874
- idle: retry suspend when a logind sleep inhibitor is released by @guillemcanal in #3866
- refactor(mango): deprecate pre-mango v18.0 binds & legacy management by @purian23 (d8734bb)
- systemd: start enabled service on restart when idle by @purian23 (5a20a8f)
- refactor(dot): major performance & stability improvements by @purian23 (0cd03e0)
- sysupdate: hide flatpak updates when flatpak is excluded by @purian23 (efd9324)
- powermenu: reboot into firmware setup from the power menu by @matthewyjiang in #3877
- bump qml-common by @bbedward (b7be4a3)
- lock: advertise hidden text from the ime sink by @bbedward (6f36e49)
- battery popout: swap balanced and performance profile icons by @I-Azy-I in #3895
- refactor(default apps): rewrite w/value-keyed dropdowns & xdg data/display fixes by @purian23 (66382df)
- dep: bump qml-common by @purian23 (c5b058c)
- ci: dispatch distro builds from Release & guard shared Void index by @purian23 (3388f78)
- ci: update dux-repo references by @purian23 (20bcf85)
- rebrand(installer): convert dankinstall to duxinstall by @purian23 (6d65f30)
- installer: fall back to dankinstall assets until 2.0.1 & update arch package compat by @purian23 (e689cd2)
- displays: show why the display profile controls are disabled while Auto is on by @Conava in #3926
- tailscale: translate the peer "last seen" time by @Conava in #3922
- matugen: keep user templates when config.toml has no [config] table by @Conava in #3921
- settings: enforce administrator-managed lock settings by @alvarosth in #3897
- compositor: prefer live wlr-output scale over the startup randr snapshot by @bbedward (b0fea51)
- bump qml-common by @bbedward (6b32cbe)
- Bump Go to 1.27.3 (CVE-2026-111943) by @MishowHD in #3924
- network(networkmanager): refresh wired profiles on settings changes by @KadirJeager in #3929
- dbus: keep match rules across subscribe socket re-dials by @bbedward (3aaab84)
- bump qml-common, fixes animated image binding loop by @bbedward (d60fa2c)
- cava: stop the capture stream from dragging the pipewire quantum down by @bbedward (a3c4d0a)
- popout: commit the emptied input region when the close starts by @bbedward (4a8fc4d)
- sysupdate(flatpak): list updates when one needs an uninstalled runtime by @purian23 (a7bd6a8)
- settings: keep the file snapshot independent of live values so in-place edits persist by @bbedward (693d0c8)
- updater: confirm installs on enter & keeps the upgrade log in view when inline by @purian23 (a92e60e)
- frame: keep fused chrome blurred across the inset at low alpha by @bbedward (ca50284)
- launcher, dash, settings: density and consistency pass by @bbedward (fc7c92f)
- wallpaper: use the per-monitor fill mode to decide scrolling by @PandorasFox in #3957
- systemd: keep the notifications bus name reserved by @bbedward (826477e)
- search field: spacing adjustments by @bbedward (f56a088)
- settings: treat an unversioned settings file as the current format by @bbedward (5cd0b61)
- tray: resolve IconThemePath icons from theme subdirectories and the system theme by @bbedward (6a15b44)
- island: keep the dismiss layer down for notification popups by @bbedward (5442f39)
- matugen: don't wait on hooks by @bbedward (86dac60)
- cc: replace detail pages with bands (1.6 style) by @bbedward (2903604)
- notifications: use only SystemClock to update notification timestamps by @bbedward (5855b6f)
- notifications: refresh relative times on the lock screen, in NotificationsTab and in history by @0xdeafbeef in #3965
- lock: arm fingerprint auth after the compositor confirms the lock by @bbedward (2804183)
- Workspace switcher widget improvements by @apollo79 in #3977
- ubuntu: fall back to archive Hyprland when the PPA lacks the series by @purian23 (27a5534)
- settings: reposition appearance card in the interface tab by @purian23 (07c899d)
- Change keep awake icon to local cafe by @ronitarv in #3936
- brightness: move every device pinned on a screen together by @SpyrosPsarras in #3939
- wellbeing: open the screen time view from the overview card by @PandorasFox in #3980
- island: show synced lyrics in the media slot by @PandorasFox in #3979
- cc: stop avatar and app icon reloads from stalling the sheet, disable edit fill in edit mode by @bbedward (d2792b8)
- settings: derive button group compact mode from its natural width by @bbedward (2dd237a)
- network/networkmanager: own new wifi profiles per user when modify.system is not granted by @bbedward (2294832)
- theme: restore inverse surface tooltips and index the surface role rows by @bbedward (46373f8)
- dock: keep vector spring stable at short animation speeds by @Mario-Mohar in #3991
- settings: keep page history when opening keybinds from the launcher tab by @Mario-Mohar in #3990
- network: answer openvpn dynamic challenge prompts with the challenge-response secret by @bbedward (19f3e58)
- launcher: fit grid rows in every host and drop the island inset literal by @purian23 (ff1bccb)
- island: match control center sheet and insets to the popout by @purian23 (e97e410)
- island: size the launcher sheet to its results by @purian23 (0b174e0)
- widgets: drop tabular figures from bar and dash numerics theme: change light mode backdrop color by @bbedward (e4c4fe4)
- clipboard: bind the first wl_seat only by @sijin-xb in #3989
- displays: keep vrr on after choosing On on niri by @wongcallum in #3998
- ci: auto label issues by @bbedward (eafb118)
- tray: open overflow item menus at the icon by @pblcp in #4002
- bar: keep ripple and press morph on the pressed clock segment by @bbedward (2308934)
- cc, dash: load grid edit chrome only in edit mode by @bbedward (012237a)
- island: keep blur regions flush with the fill and goth corners by @bbedward (791537b)
- dbar: animate hiding overlay bars on fullscreen in niri by @steven12138 in #4000
- plugins: route plugin popout clicks through PopoutManager by @bbedward (8e8442f)
- screenshot: stop re-rotating frames hyprland 0.57 already delivers upright by @bbedward (a26298d)
- control center: close the band on a second tile click instead of walking history by @bbedward (ff62d76)
- ci: set AI review effort to high by @bbedward (f288dbc)
- dash: settings-style keyboard between the tab row & content by @purian23 (673ceb2)
- island: optional dash tab bar on the island faces by @purian23 (e777288)
- settings: build week day names from local dates by @Mario-Mohar in #4026
- island: show mic_off in the privacy group when the mic is muted by @Mario-Mohar in #4027
- hyprland: drop legacy conf support and close 0.57 gaps by @purian23 (4927ef5)
- core: bump qml-common by @bbedward (a0b74b2)
- plugins: work around x/crypto rejecting ssh-mldsa44-ed25519 known_hosts entries by @bbedward (7ad1b7e)
- lyrics: distrust the player position after a track change until the probe settles by @bbedward (8731207)
- plugins: multi-select type chips in browser, dash browse button by @bbedward (7060c8e)
- bump qml-common by @bbedward (d439991)
- settings: remove legacy HUP signaling by @bbedward (1398bd8)
- refactor(dash): kb nav tab switches tabs while arrows work the content & ctrl+tab steps in by @purian23 (d4cd0f0)
- hyprland: write desc: identifiers when auto-applying monitor profiles by @purian23 (d76475d)
- keybinds: notify when a hyprland action is missing its arguments by @purian23 (fe3827f)
- scripts: plain port audit output in terminals by @purian23 (cae70d9)
- scripts: port in history order and add all-candidates command by @purian23 (eec8fd2)
- key binds: drop layout switch shortcuts that break common binds by @purian23 (387750b)
- niri: also apply xray false to files/calendar by @bbedward (d70d353)
- context menu: follow m3 expressive menu spec by @Tear4Pixelation in #4053
- qs: remove my test pragma by @bbedward (c10c4ff)
- bar widgets: round natural pill width up so text is not elided by a subpixel by @bbedward (c5cb0be)
- lyrics: relayout from the item kind, not the stale isBreak binding by @bbedward (fca8c72)
- refactor(theme): live gtk4 refresh & revised gtk theming/themed sidebars by @purian23 (f744160)
- bar: reserve island space only when the island is not floating by @starlifezzz in #4065
- dock: hide for floating windows moved or resized by hyprland keybinds by @purian23 (ead09fd)
- refactor(setup): refresh hyprland binds.lua when the main config is kept by @purian23 (b74088e)
- theme: reload dms-colors.json after the matugen worker exits by @starlifezzz in #4079
- settings: move focus rings to a controls section by @bbedward (754a336)
- disable changelog, bump VERSION and CODENAME by @bbedward (cd59487)
- notifications: make popup design consistent by @bbedward (6e78bad)
- brightness: skip kernel-triggered indicator LEDs by @starlifezzz in #4064
- theme: skip reapplying an unchanged dms-colors.json by @purian23 (d475e03)
- release-notes: translation counts per language by @purian23 (c205174)
- shared: bump qml common by @purian23 (4b1d4f7)
- sounds: stop same-url source rewrites from cancelling playback by @bbedward (7f9580c)
- scripts: skip version and codename bumps in port audit by @purian23 (7643dad)
- network: list owe networks as open so they connect without a password prompt by @bbedward (0478a61)
- release: set 2.1 codename by @purian23 (64d0715)
- clock: open the overview when no dash tab is enabled by @bbedward (11b3747)
- dock: keep long window titles on one line in the apps dock widget by @bbedward (c78e469)
- sysmon: show passthrough gpus as unavailable by @bbedward (2f92d43)
- weather: move forecast parsing into a testable module by @joshii-h in #4085
- refactor(media): close the card option background gap by @purian23 (f493bd6)
- plugins: make the browser open fast on slow links by @bbedward (dabef66)
- notifications: adhere to classic mode & chevron on hover card update by @purian23 (549fd8a)
- shell: per-screen surfaces off of placeholder outputs by @bbedward (e75d787)
- lock: make ctrl+a select all text field instead of doing emacs stuff by @bbedward (b0f5671)
- tray: keep the icon on screen while a new pixmap loads by @colonelpanic8 in #4054
- weather: keep the searched location name when custom coordinates are reapplied by @bbedward (257934c)
- dsearch: re-check for installation when launcher open on files mode by @bbedward (bcfc355)
- dsearch: log not found reason by @bbedward (2ab6411)
- scripts: skip changelog toggles in port audit by @purian23 (e813c1b)
- scripts: skip root version bumps in port audit by @purian23 (be395b4)
- lyrics: more betterer smooth movements by @bbedward (68be5b0)
- ci(release): one Release workflow for X.Y.0 and point releases by @purian23 (d27fbad)
Full Changelog: v2.0.0...v2.1.0