🌙 Release Notes v4.7.2
Highlights: Smoother scrolling, refined audio, launcher animations, and stability fixes.
✨ Features
- Navigation: Smooth wheel scrolling & keyboard animations for all
NViewtypes; newNSlideSwapViewfor launcher transitions. - Customization: Independent light/dark wallpapers; manual Night Light scheduling; toggle for system theme sync.
- UI Tweaks: 50% height cap for wallpaper panel; single-char workspace labels;
showTexttoggle for Active Window widget. - System & IPC: New
peekcall for Bar auto-hide; volume scroll accumulation; Airplane mode commands; toast dismiss handler. - Extras: New Scroll (WM) template; added Czech and English (GB).
⚡ Improvements
- Core: Migrated Niri to native C++ IPC; removed risky regex patterns to prevent ReDoS.
- Audio: Per-app volume now syncs with PipeWire; filtered stream nodes; stabilized
wpctlinput handling. - Theming: Bulletproof GTK color-scheme syncing; consistent dock/OSD opacity in Light Mode.
- UX: Smart
NContextMenupositioning; fixedNButtonscaling issues; refactoredNScrollTextwith fade masks. - Media: Optimized
MediaMinilayout; fixed artwork cropping.
🐛 Bug Fixes
- Wallpaper: Fixed multi-monitor folder overwrites and startup color regeneration.
- Audio: Resolved
AudioVisualizercrashes and slider state "fighting." - Security & Idle: Respects
lockOnSuspendduring idle; fixed lock screen password cursor positioning. - System: Corrected Lock Key LED syncing.
- Misc: Elided long profile names; fixed launcher
iconModedefaults; improved template symlink handling.
Changes since v4.7.1
- chore(version): release v4.7.2 (77f054cbf) by Lemmy
- feat(wallpaper-panel): adjust height for 1080p (90e07608a) by Lemmy
- feat(wallpaper-panel): 50% max height (9a900801a) by Lemmy
- fix(mediamini): guard onEntered against stale panel ref. (e13888e97) by Lemmy
- fix(bar): harden AudioVisualizer when ShellScreen is null (4f523301c) by Lysec
- chore(i18n) (90e37a1e5) by Lysec
- Merge pull request #2363 from MrDowntempo/main (da2e2dda5) by Lysec
- chore: run qmlfmt.sh again (cfad4fc77) by Corey Woodworth
- fix: Add showText to BarWidgetRegistry and settings-widgets-default (c82414047) by Corey Woodworth
- Merge pull request #2362 from breadandsoup/main (357f577c6) by Lysec
- fix(audio): stop volume sliders fighting service state (43fe1e194) by Lysec
- fix(audio): stabilize input volume % via wpctl like default sink (d4e7a8e96) by Lysec
- chore: run qmlfmt.sh (900e1f128) by Corey Woodworth
- chore: add modified files again because they were not staged (I don't get git sometimes) (0c9d3b83b) by Corey Woodworth
- chore(i18n): Add englisht strings for the text toggle (95dfb2ade) by Corey Woodworth
- feat: Add showText variable to show/hide name of Active Window (53b5dbac4) by Corey Woodworth
- Update pywalfox.json (174d8b33b) by breadandsoup
- Merge branch 'main' of https://github.com/noctalia-dev/noctalia-shell (421ccc4c8) by Lysec
- fix(ColorScheme): sync light/dark toggle to gtk (4a371422c) by Lysec
- chore(flake): update flake.lock (4d4edff06) by Ly-sec
- fix(theming): sync gtk-theme with color-scheme when system sync is on (09386b190) by Lysec
- Merge pull request #2324 from cbxcvl/fix/renderer-redos (40c8b1762) by Lysec
- Merge pull request #2327 from cbxcvl/fix/expr-re-redos (cc4cf9cc4) by Lysec
- Merge pull request #2328 from cbxcvl/fix/parse-if-redos (a4b7a693e) by Lysec
- fix(theming): keep system color-scheme in sync on every dark mode change (90a5dd1cd) by Lysec
- fix(workspaces): assign display index per output in ExtWorkspaceService (6d3ca5889) by Lysec
- style(wallpaper): dont switch favorite in split wallpaper on first click (c879d0864) by Lysec
- Merge branch 'main' of https://github.com/noctalia-dev/noctalia-shell (ea48cd0bb) by Lysec
- fix(wallpaper): cleanup misleading code (c9bda88e3) by Lysec
- chore(autofmt) (2afa833db) by Lemmy
- fix(plugin): fix loadWidget (9bc5effb3) by Lemmy
- fix(wallpaper): hide light/dark icon in split wallpaper mode (f2e5f9953) by Lysec
- Merge branch 'main' of https://github.com/noctalia-dev/noctalia-shell (386d4d313) by Lysec
- fix(wallpaper): adjust wallpaper light/dark & favorite logic (0d770725b) by Lysec
- Merge pull request #2312 from notiant/patch-2 (00392ff8d) by Lysec
- Add check for non-zero width in enhancedBand (b3a9aca83) by notiant
- chore(flake): update flake.lock (62f55f54d) by Ly-sec
- chore(flake): update flake.lock (07afddfaf) by Ly-sec
- fix(blur): force flush wayland state, to avoid stuck blur regions (dd22f7bc3) by Lemmy
- fix(ncolorchoice): added "enabled" visual feedback (664707d77) by Lemmy
- fix(plugins): fixed desktopWidget settings vs plugin settings (dfc3bd953) by Lemmy
- fix(bar): pass initial properties on creation (screen, section, etc...) to avoid potential registration issues. (73dfeb9f7) by Lemmy
- fix(desktop-widgets): pass screen as initial property to avoid wrong spectrum registration (967e9d843) by Lemmy
- Merge pull request #2347 from D3rJust1n/main (e41c78e2f) by Lysec
- chore(i18n) (83de5d047) by Lysec
- Merge branch 'main' of https://github.com/noctalia-dev/noctalia-shell (dd1ff1f0d) by Lysec
- style(WallpaperPanel): adjust layout for light/dark & monitor selector toggles (5d9f0794d) by Lysec
- fix (ci): Fix that workflow isn't triggered if it's not the main repository (1c34c4dde) by D3rJust1n
- fix(plugins): avoid potential race condition during update process (86e5112e8) by Lemmy
- fix(templating) improved handling of symlinks (f85b4a7e6) by Lemmy
- Merge branch 'main' of github.com:noctalia-dev/noctalia-shell (72df0bfe1) by Lemmy
- fix(nbutton): wrap in an Item to properly reserve border space for improved fractional scaling render (e7eeabf99) by Lemmy
- Merge branch 'main' of https://github.com/noctalia-dev/noctalia-shell (a9bc3848f) by Lysec
- chore(i18n) (e320b5370) by Lysec
- fix(widgets): improves disable states by avoiding stacking opacities (c942c10f8) by Lemmy
- fix(ncontextmenu): improved parent constraining (c2a2a4437) by Lemmy
- fix(ncontextmenu): smart positionning to avoid clipping outside of parent. (9a2f67675) by Lemmy
- style(wallpaper): hide dark/light behind toggle just like display selection (9d5bc1300) by Lysec
- feat(wallpaper): add separate selection for light & dark mode (deb79261d) by Lysec
- Merge pull request #2340 from notiant/patch-4 (3dd46fbd6) by Lysec
- fix(settings): avoid unified notification sound handler clobbering per-urgency paths (fd7a16d95) by Lysec
- chore(flake): update flake.lock (3b9e93a8b) by Ly-sec
- apply reduced light mode opacity also to dock, notifications & OSD (39a667115) by notiant
- fix(plugins): pass pluginApi as initial property to prevent binding warnings. Eliminate the need for fallback chains in plugins code. (decb65ae9) by Lemmy
- feat(settings): in windowed mode, dont stretch to full width (ba424526b) by Lemmy
- feat(settings): when switching settings panel mode, close and reopen the settings to see the actual change (1e068156a) by Lemmy
- cleanup(NScrollText): remove unused imports, gate layer on overflow (a5fc30988) by Lemmy
- Merge pull request #2334 from BUSTheid/mediamini-visual-bugfix (ffb61d8fc) by Lemmy
- remove onResumed() since networkMonitorProcess already covers it (9462caf6c) by notiant
- refactor(NScrollText.qml): MultiEffect fade mask (b18d33742) by BUSTheid
- Merge pull request #2335 from spiros132/main (f3edbe3dc) by Lysec
- chore(TemplatesSubTab): format (f15609b59) by Spyridon Siarapis
- fix(TemplatesSubTab): Fixed a bug which prevented qml format to run correctly (348ccbf0e) by Spyridon Siarapis
- Revert "Merge pull request #2203 from haikalllp/fix/update-pywalfox-colors" (ed1a2b54d) by Lemmy
- chore(flake): update flake.lock (0d088d8a3) by Ly-sec
- fix(renderer): remove ambiguous \s* from _parse_if regex to prevent ReDoS (6e7105059) by cbxcvl
- fix(renderer): remove ambiguous \s* from _EXPR_RE to prevent ReDoS (e91d20ef0) by cbxcvl
- fix(renderer): remove ambiguous \s* from _BLOCK_RE to prevent ReDoS (4ad7ffbbd) by cbxcvl
- fix(ProfileCard): add elide to GECOS name (8a3aafc69) by Lysec
- fix(media): tighten MediaMini panel layout for album art and height (4d31d0524) by Lysec
- style(mediapanel): fix artwork cropping in non compact mode (9b64e21be) by Lysec
- feat(template): added dedicated Scroll(wm) template (215750ddc) by Lemmy
- fix(audio): scope stream volume overrides per media identity (6b2c0fc9c) by Lysec
- Merge pull request #2315 from ern775/audio-stream-filter (0133da8bd) by Lysec
- Merge pull request #2318 from linusammon/main (10cd968f9) by Lysec
- fix(ci): flake updates should trigger cachix workflow (39dccc49d) by Linus Ammon
- fix(audio): filter out intermediate stream nodes (2c09e9185) by ern775
- chore(flake): update flake.lock (f19a19cfc) by Ly-sec
- change Airplane Mode visibility conditions (477810b95) by notiant
- fix(zed): typo resolved (fae79fe75) by Lysec
- improve some process handling (dffdfcffc) by notiant
- improve airplane mode handling (78c0b2fe2) by notiant
- Merge pull request #2309 from gammons/fix/idle-lock-on-suspend (396fba755) by Lysec
- fix(lock-keys): only apply sysfs LED state on successful reads (17bfd0220) by Lysec
- fix(IdleService): respect lockOnSuspend when idle triggers suspend (6d7d35d7e) by Grant Ammons
- Merge branch 'main' of https://github.com/noctalia-dev/noctalia-shell (537ec29f5) by Lysec
- fix(Lockscreen): adjust password cursor so it properly follows position (922207080) by Lysec
- Merge pull request #2298 from tmarti2/dismiss-toast-ipc-call (c608f1f70) by Lysec
- Add Toast dismiss IPC Handler (7800306b4) by Thibault Martin
- Merge pull request #2303 from tibssy/feat/smooth-scroll-nviews (70082a649) by Lysec
- fix: restore smooth scroll animation for keyboard navigation in wallpaper selector panel (ea1710c9c) by tibssy
- feat(view): add smooth scroll animation for keyboard navigation in NListView and NGridView (c524c9611) by tibssy
- feat(view): implement smooth wheel scrolling for NScrollView (01744222c) by tibssy
- feat(view): implement smooth wheel scrolling for NGridView (b612c353f) by tibssy
- feat(view): implement smooth wheel scrolling for NListView with global setting (379811846) by tibssy
- chore(flake): update flake.lock (df62bb321) by Ly-sec
- chore(sway): fix border color (8362462be) by Lemmy
- fix(bar): guard bar widget metadata lookup (021f0026d) by Lemmy
- feat(nightlight): using our own manual scheduling to allow more flexibility (6d08fd1a0) by Lemmy
- fix: only convert config symlinks when modification is needed. fix #2299 (2623f081d) by Lemmy
- fix(lockkeys): replace 'this' to a proper id to avoid warnings (e29a71e9a) by Lemmy
- feat(bar-ipc): added new "peek" call and made existing call work better with auto-hide (c640bc908) by Lemmy
- fix(launcher): fix iconMode default gui settings. fix #2296 (7b35d3724) by Lemmy
- fix(background): fix dupe transition on startup + minor safety improvement to avoid potential null texture on shaders (7966f963d) by Lemmy
- fix(nimagerounded): avoid null shader texture when image disappear (de4e08736) by Lemmy
- fix(wallpaper-settings): added missing parameter (8ecd351bf) by Lemmy
- fix(audioservice): repeater need an Item delegate. (2f456e749) by Lemmy
- Merge branch 'niri-qs' (c960e1779) by Lysec
- fix(ColorScheme): potential fix for GTK/gsettings light-dark getting out of sync (59fedcac2) by Lysec
- Move toast IPC closer to notifications (af7fd3bad) by Thibault Martin
- chore(flake): update flake.lock (e4158c7d8) by Ly-sec
- fix(nsearchcombobox): cleanup (7022fb9d2) by Lemmy
- Merge pull request #2221 from nZo-sp/feat/scroll-with-keyboard-on-dropdown (934af9b52) by Lemmy
- fix(shader): uv clamping NImageRounded. Fix #2288 (03d32b136) by Lemmy
- fix(desktop-widgets): restore mouse interaction. fix #2293 (d9d5f2063) by Lemmy
- remove airplaneModeEnabled from settings (b2c685dec) by notiant
- rework Airplane Mode handling & remove bluetoothctl fallback (dea0575ef) by notiant
- Merge pull request #2292 from maxschipper/workspace-label-character-count-vertical-bar (d1c0374f7) by Lysec
- feat(workspace): allow one character labels on vertical bar (1d0ab0153) by Max Schipper
- fix(theming): regenerate wallpaper colors after cache load on startup (b6d2599f8) by Lysec
- chore(fmt) (020dab63b) by Lemmy
- chore(i18n): fixes (2d6ef5456) by Lemmy
- chore(i18n): added en-GB (58a765ea8) by Lemmy
- chore(i18n): update (38c3e37a7) by Lemmy
- Merge pull request #2270 from amateur-hacker/feat/airplane-mode-ipc (437696011) by Lemmy
- Merge pull request #2271 from navik61/feat/add-czech-translation (129ae45f2) by Lemmy
- Merge pull request #2282 from tibssy/feat/bar-scroll-volume (68dddc741) by Lemmy
- Merge pull request #2265 from tibssy/feat/launcher-category-animations (4b5fb156c) by Lysec
- Merge pull request #2287 from tmarti2/fix-toast-selected-screen (188b4cb13) by Lysec
- Fix Toast: same model than Notifications (1099d5551) by Thibault Martin
- Revert "fix(audio): potential desync fix" (b725f32e2) by Lysec
- Merge branch 'main' of https://github.com/noctalia-dev/noctalia-shell (508f2b6ec) by Lysec
- fix(audio): potential desync fix (76ad00596) by Lysec
- chore(flake): update flake.lock (597d4e623) by Ly-sec
- feat(bar): improve volume scroll handling on bar with smooth accumulation (700d377f0) by tibssy
- feat(bar): add volume control support to bar scroll behavior (7d4ee0446) by tibssy
- fix(audio): sync per-app volume overrides with PipeWire and new streams (c9eb6e69e) by Lysec
- Revert "fix(AudioService): attempt to fix individual audio levels" (c488b0d3e) by Lysec
- feat(settings): add toggle to disable system theme sync (ac52e8e5f) by Lysec
- fix(AudioService): attempt to fix individual audio levels (0c79aedc2) by Lysec
- Revert "fix(audio): attempt to fix per-app volume desync from stale overrides" (b724fbe0f) by Lysec
- fix(audio): attempt to fix per-app volume desync from stale overrides (46a533fd7) by Lysec
- Merge pull request #2281 from ayagmar/fix/notification-window-focus (45a07579d) by Lysec
- fix(notifications): prefer default actions for window focus (ce8da4c51) by ayagmar
- fix(lock-keys): sync bar state from sysfs on first poll after startup (284a2a76b) by Lysec
- Merge pull request #2268 from neyfua/neyfua/highlight-pass-input (2ea56a6c1) by Lysec
- feat(ipc): add commands for airplane mode (4bea91a75) by amateur-hacker
- i18n: add Czech (cs) translation (abaeca856) by navik61
- fix(wallpaper): stop overwriting per-monitor folders when toggling multi-monitor dirs (b1e9efb3c) by Lysec
- fix(hostservice): use non uppercase username, respect upper/lowercase for Full Name (bd474db38) by Lysec
- feat(lockscreen): add highlight selection in the password input field (0f7ed133f) by neyfua
- Using keybind from settings (e6716a745) by nZo-sp
- chore(flake): update flake.lock (3eb0fe560) by Ly-sec
- refactor: extract launcher slide transition logic into reusable NSlideSwapView component (851bdc150) by tibssy
- refactor: move launcher category selection logic into a helper function (3356b7cb1) by tibssy
- feat(launcher): implement sliding transition animations for launcher category changes (9ba87bd7d) by tibssy
- chore(version): bump to v4.7.2 (41bfe0941) by Lemmy
- Added scroll with keyboard on dropdown (e19ed0b44) by nZo-sp
- refactor(niri): use native C++ Niri IPC module instead of QML socket (d62eb5b24) by Lysec