ensureEnabledOutput previously checked if ANY output was enabled,
including virtual fallback outputs. A profile with eDP-1 disabled and
FALLBACK enabled was treated as valid, causing the only real monitor
to be turned off during hotplug transitions.
Now ensureEnabledOutput only considers outputs with make+model (real
monitors) when checking for enabled outputs. When all real outputs are
disabled, it enables the first real one. When no real outputs exist in
the profile at all, applyConfigEntry writes an empty config and lets
the compositor handle fallback via its built-in default rules.
Fixes the case where unplugging an external monitor leaves the laptop
display disabled because a stale FALLBACK auto-profile was applied.
- settings.json/session.json now store only values that differ from
spec defaults
- Machine-specific state moves out of settings.json into session.json
- Add dms backup create/restore: tar.gz of ~/.config/DankMaterialShell
fixes#3027
* feat(power): lower refresh rate on battery (#1203)
Add a Power & Sleep setting that lowers eligible displays to 60 Hz on battery and restores their previous mode on AC power.
Skip displays without an available 60 Hz mode, displays with a single refresh-rate option, current modes at or below 60 Hz, and VRR-enabled outputs.
Apply niri changes at runtime through output commands and use wlr-output-management as fallback.
* fix(quickshell): debounce display refresh sync
* chore: regenerate settings_search_index.json for pre-commit CI fix
* fix: translator context is missing for lowerDisplayRefreshRateOnBattery
* fix: activeDisplayProfileModes is missing from SettingsSpec
* feat: added guard to syncRefreshRates function
* refactor(display): move refresh sync listeners to display service
* fix(display): publish active profile modes after config write
* feat(display): persist previous refresh modes
* fix(display): route refresh mode writes through compositor backends
* fix(display): detect preferred niri refresh modes
* some small cleanups
---------
Co-authored-by: bbedward <[email protected]>
- Note: We do not convert your existing conf configs to lua. This update only reflects DMS defaults state
- Updated README.md to reflect changes
- Updated Keyboard shortcut support
* fix(niri): properly close KDL output block when disabled
* feat(display): parse off directive and sync disabled state from compositor configs
* feat(display): visual treatment and canvas filtering for disabled outputs
* feat(display): eager auto-profile generation with debounced auto-select
* refactor(display): pass target profile ID to confirmChanges and remove dead code
* fix(display): make profile dropdown reactive by binding to property directly
* i18n(display): add Disabled translation term for output state
The display config UI only applied changes for compositors with a
config-file backend (niri, hyprland, dwl). For any other compositor
that supports wlr-output-management-unstable-v1 the "Apply Changes"
button was silently a no-op.
Add WlrOutputService.applyOutputsConfig() as a high-level apply that
mirrors the generateOutputsConfig() pattern of the existing services
but applies directly via the protocol instead of writing a config file.
Route the default case in backendWriteOutputsConfig() to it.
This enables using dms-shell as a wayland compositor for emacs wayland
manager (ewm).