* feat: parallax-scroll wallpaper
Add a `Scrolling` wallpaper fill mode that translates the wallpaper crop
with the active workspace — like Android home-screen parallax, but along
niri's vertical workspace axis.
The image is scaled to cover the screen on its non-scroll axis, and the
active workspace index drives a fractional offset into the cropped
overflow along the scroll axis. Scroll position is spring-animated
CPU-side and handed to a minimal single-texture shader as a UV offset.
Per-monitor scroll position is published into SessionData so the lock
screen renders the same crop as the active workspace, keeping visual
continuity across lock/unlock.
Two implementation details worth calling out for review:
- QSG_USE_SIMPLE_ANIMATION_DRIVER=1 is exported to the spawned quickshell
process. The default animation driver advances in fixed ~16ms steps,
capping the scroll at 60Hz and desyncing it from compositor motion on
high-refresh displays; the simple driver advances by real elapsed time,
restoring native-refresh pacing. Removing it visibly regresses to 60Hz.
- The wallpaper survives wl_output rebind cycles (e.g. OLED image-cleaning
on DPMS soft-off), which otherwise leave a stuck or void background.
Recovery re-anchors the scroll target on output-lifecycle signals,
rebuilds the ShaderEffect against the current render context, and
re-attaches the wallpaper-layer surface on unlock for parallax-active
monitors — guarded against lock state so the shader gets reliable frame
hints.
* simplify bindings and gate lock screen shader in a loader
---------
Co-authored-by: bbedward <bbedward@gmail.com>
* feat(battery): add options to toggle percentage and remaining time
* fix(battery): add SettingsSpec entries and combine verticalDisplayText
* fix(battery): format vertical battery remaining time as HH\nMM and center alignment
* fix(battery): remove percent sign from vertical layout when time is enabled
* feat(wallpaper): support configurable background color
* chore(translations): update settings search index
* revert(wallpaper): keep Pad naming instead of Center
* feat: add battery settings tab and update battery widget interactions
* fix: import Quickshell.Io in BatteryTab.qml to fix Process type compilation error
* feat: move battery tab under media player and add notify when charge limit reached option
* chore: change default notification settings to false
* feat: move battery tab under Power & Security section in settings
* feat: add notification type button selection for battery alerts
Commit e3dbaed started skipping all system sounds (notifications, volume,
power, login) whenever an MPRIS player is playing, with no way to opt out.
Users who rely on notification sounds while listening to music lost them
entirely.
Add a 'Mute During Playback' toggle (SettingsData.muteSoundsWhenMediaPlaying,
default true) so the current behaviour is preserved, but users can disable
it to restore audible sounds while media is playing. The media check is
wrapped in shouldMuteForMedia(), which gates on the new setting before
querying the active player.
Closes#2616
* feat(media-control): support scroll and right-click on audio output devices in media popout
* feat(media-control): make device list volume scrolling optional
* feat(notifications): add user-configurable font size for summary and body in notification popups
* feat: add Unset for falling back to previous default values
* fix: prek hook errors
---------
Co-authored-by: Klesh Wong <kleshwong@gmail.com>
Adds a thin bar pinned to the bottom of the notification card that drains
full->empty over the auto-dismiss timer, as a visual countdown to
dismissal. Opt-in via notificationShowTimeoutBar (default off), with a
toggle in Settings > Notifications. Shown for any timed notification
(timer.interval > 0, including timed criticals); inset by the corner
radius, and frozen while hovered or during the exit animation. Plain
Rectangle - no offscreen textures or shader passes. A Connections on the
timer resets the bar on every (re)start, including the in-place restart
on a deduped notification.
Co-authored-by: bogdan-velicu <hydrotech074@gmail.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Read and convert external compositor rules into editable DMS rules
- Preserve niri multi-match rules and add match editor
- niri background-effect (blur/xray/noise/saturation) support
* feat(control-center): add widget config overlay with showMountPath toggle for DiskUsage
Introduces WidgetConfigOverlay and DiskUsageWidgetConfigMenu components, allowing
users to toggle mount path visibility per DiskUsage widget in edit mode
* refactor(control-center): use Theme.iconSizeLarge and Theme.fontSizeLarge for small tiles
Standardize SmallDiskUsageButton and SmallBatteryButton sizing with Theme.iconSizeLarge
and Theme.fontSizeLarge, and unify font weight to Font.Bold on both tile widgets.
* fix(control-center): adjust SmallDiskUsageButton font size based on showMountPath
* refactor(control-center): simplify DiskUsage config menu i18n strings
Remove the redundant "Disk Usage Widget" title and the toggle description
to reduce translatable strings