github noctalia-dev/noctalia v5.5.0

one hour ago

Noctalia 5.5.0

Important Changes

  • Config: app icon colorization is now set per component. [shell].app_icon_colorize is replaced by colorize_icons toggles in the launcher, dock, window switcher, notifications, audio, and the workspaces, taskbar, tray, and active-window widgets, plus [shell].screen_time_colorize_icons and [shell].polkit_colorize_icons. [shell].app_icon_color remains the shared tint
  • Config: control_center.circular_avatar moved to shell.circular_avatar and now applies to the launcher avatar too; the workspaces widget's show_all_outputs = true becomes monitors = ["*"]
  • Plugins: noctalia.systemStats() no longer turns on GPU sampling, so reading CPU, RAM, or network stats no longer keeps a discrete GPU awake. GPU plugins must request sampling with noctalia.setGpuMonitoring(true), release it when hidden, and declare plugin_api = 46. CPU, RAM, and network plugins need no changes

These renames are migrated automatically, and settings changed in the Settings window are updated for you. Hand-written or declarative configs (Nix, dotfiles…) keep working but log a migration warning until you switch to the new keys

✨ New Features

Bar & Widgets

  • Peek mode for volume, brightness, keyboard layout, Bluetooth, network, weather, battery, custom button, sysmon, media, and tray widgets: show only the glyph and reveal the value on hover, with peek, glyph_position, and peek_delay_ms
  • Shared custom_label and show_glyph options on every bar widget, including plugin widgets
  • Expanding spacers with expand = true, sharing a lane's free space to center widgets between their neighbors
  • margin_ends accepts a screen percentage such as "15%", computed per monitor
  • auto_hide_reserve_space releases an auto-hidden bar's reserved space while it is hidden and restores it when the bar slides back in
  • Workspaces widget monitors list for showing workspaces from chosen monitors in order, and text separators with separator and separator_color
  • Taskbar label_source to show workspace names or numeric ids on workspace group tags
  • Tray icon_type to replace app-provided icons with desktop-entry or symbolic icons, with icon_override_blacklist for exceptions
  • Tray drawer_background_opacity for the detached drawer, and glyph_position to place the drawer button before or after the icons
  • Battery auto mode follows the lowest-charged peripheral on machines without a system battery, including the Control Center card and battery hooks
  • Custom "no active window" text with empty_label
  • Privacy widget detects applications opening cameras directly through V4L2, ignoring brief capability probes
  • Capsule-group accordions wait 100 ms of hover before expanding by default (accordion_delay_ms)

Dock

  • Optional icon shadows following each application icon's shape with icon_shadow
  • Icon desaturation with icon_saturation, including per-monitor overrides
  • Auto-hide reveal requires resting on the screen edge for 250 ms, configurable with auto_hide_reveal_delay_ms

Launcher & Window Switcher

  • Window switcher grid and icons styles, the latter showing every window as stationary icon tiles without capturing previews
  • reverse direction for the window-switcher IPC command, for Shift+Tab bindings such as window-switcher hold reverse
  • category_next and category_previous keybinds (Ctrl+Tab and Ctrl+Shift+Tab by default) cycle launcher categories and Control Center tabs
  • Emoji category filters shown as icons in the Full launcher layout; category_icons_only also covers provider category filters
  • AppImages launched through env or TryExec desktop entries are recognized and marked with a distinct glyph

Screenshots

  • Zoom and pan in the annotation editor with Ctrl+wheel, Ctrl+drag, and the toolbar zoom control
  • Capture window (Ctrl+W) and capture new region (Ctrl+R) from the annotation toolbar's Capture again popover
  • Select the whole desktop during region capture with the select_all keybind (Ctrl+A by default)
  • Space as a region_modifier for moving and resizing regions
  • append_mode_suffix to drop the -region, -annotated, -window, or -desktop filename suffix; saves never overwrite an existing file and add a numeric suffix instead

Lock Screen

  • Media playback controls in the login box with show_media_controls, and media keys that control playback while locked
  • Do Not Disturb while locked with [lockscreen].dnd, restoring the previous state on unlock
  • Custom background tint color with tint_color
  • CRT transition for the lock screen and wallpapers

Appearance & Theming

  • Synchronized wallpaper transitions across monitors with sync_transitions, enabled by default
  • Fill mode selector and live palette previews in the wallpaper panel; palette pickers stay open while browsing
  • terminal_colors = "standard" keeps recognizable red, green, and yellow ANSI hues in wallpaper-generated themes
  • Palette files use role names as keys with "version": 2; existing palette files and v4 color schemes keep working
  • Redesigned animated weather backgrounds for rain, sun, snow, clouds, fog, and stars; mostly clear skies and thunderstorms now animate too
  • Control Center sidebar border following card_borders
  • Running Helix instances reload after theme changes, the Umbriel template themes title-bar button glyphs, and the Emacs template colors message quotes

Notifications / OSD

  • Notification history grouped by application, enabled by default with group_by_app
  • newest_on_edge places new toasts against the screen edge and pushes older ones away
  • show_progress_bar to hide the toast timeout bar
  • OSD center position

Calendar & Connectivity

  • Choose which Google calendars to sync, independently of Google Calendar's sidebar
  • VPN secret prompts for NetworkManager connections, including one-time codes, with secrets saved to the keyring like nm-applet
  • NetworkManager password requests open the Control Center Network tab and stay pending while it is closed

Audio & Display

  • spectrum_frame_rate sets how often audio visualizers update instead of following the monitor refresh rate
  • Scheduled day and night brightness following the location schedule with enable_scheduled_brightness, including per-monitor targets

Plugins

  • noctalia.umbriel.action for typed Umbriel IPC actions without spawning processes
  • noctalia.nightlight API with state, enable, force, and watch functions
  • noctalia.mediaPlayer() snapshot of the active player with a smoothly projected position
  • Karaoke-style ui.fillLabel, text shadow, and desktopWidget.setVisible
  • Paint-only translateX, translateY, scale, and rotation props and container clip for animating declarative UI without relayout
  • onSuspend and onResume service callbacks
  • secret settings, left out by noctalia config export --credentials omit
  • fit modes for pixel streams and a follow default layer for floating panels
  • Entries react when shell settings read through noctalia.getSetting change, through onConfigChanged() or a script reload
  • Plugin store renders images from plugin READMEs

Other

  • Experimental Type=notify systemd user service that starts Noctalia before XDG autostart apps, so their tray icons register reliably
  • noctalia config export --credentials keep|omit|blank, also offered in the Settings export dialog
  • ~ date-format modifier to capitalize localized day and month names
  • Localized special key names in shortcut labels
  • Settings search ignores case beyond ASCII and accents; widget settings are grouped into collapsible cards, and Lock Screen and Greeter have their own section
  • Guides for Hyprland permission rules and for disabling compositor layer animations on Hyprland, Mango, and Umbriel

🐛 Notable Fixes

  • Audio: keep PipeWire's realtime module out of the shell's connections, preventing kernel kills under some realtime portal setups
  • Audio: microphone volume changes no longer play the output volume sound, volumes above 100% display correctly, additional visualizer widgets honor show_when_idle, and microphone mute follows port switches
  • Power: charger sounds no longer repeat while a full battery flips between charge states on AC
  • Session: a failing logout, reboot, or shutdown hook no longer cancels the action
  • Clipboard: pasting into Noctalia uses the live selection, so password-manager copies paste without being stored in history; plugin text copies paste into GTK and Firefox apps
  • Screenshots: region and annotation keys no longer leak into an open launcher on niri, and dimmed areas no longer show hairline seams
  • Tray: blinking items no longer trigger constant refetching, icons stay clickable while animating, the drawer refreshes immediately, Noctalia takes over when an external watcher exits, and unthemed icons resolve
  • Dock: no icon stretching on niri when windows open or close, no recreation on every config reload, stable order for focused unpinned apps, no crash after reordering icons, and fewer wrong app matches between IDs sharing a publisher namespace
  • Panels: context menus and dropdowns render on secondary monitors under Hyprland, unpinned panels open on the pointer's monitor on labwc, and panels resize when their scrolling content changes
  • labwc: workspace occupancy is tracked from focus, fixing hide_when_empty and smart auto-hide()
  • Mango: workspace widget reconnects when its watch socket drops
  • Sway and Scroll: keyboard layout widget updates on layout changes, and the window switcher no longer lists windows twice
  • Performance: Hyprland plugin bar widgets no longer query monitors every 250 ms, and Umbriel triggers fewer workspace refreshes
  • Network: keep NetworkManager when its service is enabled but starts after the shell, show Wi-Fi as off instead of "no networks", and show a running hotspot as a hotspot
  • Bluetooth: open the Bluetooth tab for pairing requests that arrive while the Control Center is closed instead of letting them time out
  • Wallpaper: seamless repeat tiling, no fill-color flash before the first image, per-connector wallpaper_changed hooks at startup, ~ and environment variables in favorite paths, and the bundled fallback is no longer saved over a declarative wallpaper
  • Theme: wallpaper-generated ANSI colors no longer duplicate between normal and bright slots, and custom wallpaper schemes order surface container tones correctly
  • Notifications: max_visible respected when queued toasts appear, toasts no longer re-animate when rebuilt, and app icons resolve from the desktop-entry hint
  • Calendar: declined Google events no longer remind, and CalDAV calendar colors from the Apple namespace are read
  • Links opened from Settings, plugin pages, and calendar events request browser focus through Wayland activation
  • Clocks follow system timezone changes without a restart
  • Bar and OSD content sits on whole pixels instead of blurring at half-pixel offsets
  • Desktop widgets: clock, weather, and label text shadows are no longer clipped, and weather content is centered
  • Control Center: media progress resets on track changes, and the niri overview backdrop stays opaque when tinted
  • Lock screen: custom sleep actions remain visible
  • Location: an explicit custom_schedule survives toggling from Settings
  • Ghostty +ssh sessions survive theme reloads
  • Multiline text inputs scroll in the right direction without snapping to the caret
  • IPC: config-set accepts quoted keys such as plugin ids
  • Plugins: noctalia.appIconPath resolves raw icon names and absolute paths before fuzzy app matching
  • Settings: Esc or clicking elsewhere cancels a pending option reset

🔧 Build

  • Experimental systemd user unit installed as <datadir>/noctalia/assets/noctalia.service; Nix, Home Manager, and Hjem services use Type=notify and start before graphical-session.target
  • Shared rendering library moved to lib/ with vendored Wuffs under lib/third_party/.

Don't miss a new noctalia release

NewReleases is sending notifications on new releases.