* feat(bar): separate workspace appearance for unfocused displays
Add a toggle in the Workspace Appearance card to style workspace
indicators independently on displays that aren't currently focused.
The card is split into Focused Display and Unfocused Display(s) tabs.
When the new master toggle is off (default), unfocused displays inherit
the focused settings, preserving existing behavior. When on, unfocused
displays use their own colors (focused/occupied/unfocused/urgent) and
focused border (enable, color, thickness).
WorkspaceSwitcher resolves the focused monitor per compositor and routes
color/border resolution through isFocusedMonitor/useUnfocusedAppearance.
* refactor(bar): address review feedback for unfocused workspace appearance
- Consolidate focused-monitor lookup into BarWidgetService.getFocusedScreenName(),
adding Mango support, and drop the duplicate compositor switches in
WorkspaceSwitcher (effectiveScreenName + isFocusedMonitor now use the helper).
- Extract the shared color and border options into reusable
WorkspaceAppearanceColorOptions and WorkspaceAppearanceBorderFields components
so the focused and unfocused tabs no longer duplicate the layout.
- Gate the unfocused-display options on BarWidgetService.focusedScreenDetectionSupported
and show an explanatory note on compositors without focus detection (e.g. labwc),
instead of silently no-opping.
* feat(wallpaper): support configurable background color
* chore(translations): update settings search index
* revert(wallpaper): keep Pad naming instead of Center
- New Spotlight toggle to show/hide chips, off by default
- Updated blur effects on all launcher inputs and footers
- Fixed previous queries resurfacing
- Upated Spotlight keyboard navigation
- Added functionality to show and shortcut to keybinds from the Launcher tab
- Replaced fullscreen hide/reveal toggles with Show Over Fullscreen layer toggles
- Added Launcher opt to Show Over Fullscreen setting
- Kept fullscreen stacking compositor-owned via top/overlay layer choices
- Fixed Hyrland Special Workspaces
- Updated DMS Advanced Configuration docs
* 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
* feat(tailscale): add Tailscale control center widget
Full-stack Tailscale integration for DMS control center:
Backend (Go):
- Event-driven manager via WatchIPNBus (no polling)
- Reconnects with exponential backoff when tailscaled unavailable
- Typed conversion from ipnstate.Status to QML-friendly IPC types
- Testable via tailscaleClient interface with mock watcher
- Manager cleanup in cleanupManagers()
- 19 unit tests
Frontend (QML):
- TailscaleService with WebSocket subscription
- TailscaleWidget with peer list, filter chips, search
- Copy-to-clipboard for IPs and DNS names
- Daemon lifecycle handling (offline/stopped states)
Dependencies:
- Add tailscale.com v1.96.1 (official local API client)
- Bump Go to 1.26.1 (required by tailscale.com)
* cleanups
---------
Co-authored-by: bbedward <bbedward@gmail.com>
- Introduces Standalone & Connected Modes
- Updated Animations & Motion effects for both modes
- Numerous QOL tweaks and updates throughout the system
- Highly inspired to the OG Caelestia Shell / @Soramanew
* added login sound functionality and settings entry
* Removed debug warning that was accidentally left in
* loginSound is off by default, and fixed toggle not working
* Prevent login sound from playing in the same session
---------
Co-authored-by: Iris <iris@raidev.eu>
* feat: add neovim-lualine template, set vim.o.background automatically based on dms light/dark mode
* feat(matugen): add option to follow dms background color or not on neovim
* chore: regenerate settings and translation index after merging master
* Add tmux
* Add mux modal
* Restore the settings config version
* Revert typo
* Use DankModal for InputModal
* Simplify terminal flags
* use showWithOptions for inputModals instead
* Fix translation
* use Quickshell.env("TERMINAL") to choose terminal
* Fix typo
* Hide muxModal after creating new session
* Add mux check, moved exclusion to service, And use ScriptModel
* Revert unrelated change
* Add blank line