Skip to content

Desktop widgets

Desktop widgets are enabled from config.toml. Widget instances and edit-mode grid settings are stored in a separate state file.

  • Config toggle: [desktop_widgets] in ~/.config/noctalia/config.toml
  • State file: $XDG_STATE_HOME/noctalia/desktop_widgets.toml (falls back to ~/.local/state/noctalia/desktop_widgets.toml)
[desktop_widgets]
enabled = true

When enabled, Noctalia renders each desktop widget as its own tightly-sized layer-shell surface on the Bottom layer. The current implementation ships clock, audio_visualizer, sticker, weather, media_player, and sysmon widget types plus an interactive edit mode.


Terminal window
noctalia msg desktop-widgets-edit
noctalia msg desktop-widgets-exit
noctalia msg desktop-widgets-toggle-edit
ActionEffect
Drag widget bodyMove
Drag outer selection ringRotate
Drag bottom-right handleScale uniformly
Drag toolbar handleReposition the editor toolbar on that output
GToggle snap grid
Shift + dragTemporarily disable snapping
Delete / BackspaceRemove selected widget
Escape / click DoneExit edit mode

Widget definitions are not read from config.toml — edit mode writes them to the state file so positions and transforms can be changed interactively.

schema_version = 1
[grid]
visible = true
cell_size = 16
major_interval = 4
[[widget]]
id = "desktop-widget-0000000000000001"
type = "clock"
output = "DP-1"
cx = 960.0
cy = 540.0
scale = 1.5
rotation = 0.0
[widget.settings]
format = "{:%H:%M}"
FieldTypeDefaultDescription
idstring(required)Unique widget identifier
typestring(required)Widget type (clock, weather, media_player, etc.)
outputstringMonitor name (e.g. "DP-1")
cx, cyfloatCenter position in logical pixels
scalefloat1.0Widget scale factor
rotationfloat0.0Rotation in radians
enabledbooltrueSet to false to temporarily hide a widget without removing it
[[widget]]
id = "desktop-widget-0000000000000001"
type = "clock"
enabled = false # hidden, but preserved in the file

All desktop widget types support an optional rounded background rectangle:

SettingTypeDefaultDescription
backgroundboolfalseShow a filled rounded rectangle behind the widget
background_colorstring"surface" (80% opacity)Background fill color role or hex color
background_radiusfloat12.0Corner radius in logical pixels
background_paddingfloat10.0Padding between content and background edge
[widget.settings]
background = true
background_color = "surface"

The clock, weather, media_player, and sysmon widget types additionally support text styling:

SettingTypeDefaultDescription
colorstring"on_surface"Text/glyph color role or hex color (e.g. "primary", "tertiary")
shadowbooltrueDraw a drop shadow behind text and glyphs for readability on wallpapers
[widget.settings]
color = "primary"
shadow = true

[[widget]]
id = "desktop-widget-0000000000000001"
type = "clock"
output = "DP-1"
cx = 960.0
cy = 540.0
scale = 1.5
rotation = 0.0
[widget.settings]
format = "{:%H:%M}"
color = "on_surface"
shadow = true
SettingTypeDefaultDescription
formatstring"{:%H:%M}"Clock format string. Supports the same syntax and tokens as the bar clock format; see Date format tokens.

Desktop audio visualizers store an aspect_ratio setting for shape while scale controls overall size. They also accept optional mirrored, low_color, and high_color settings; both colors default to primary.

[[widget]]
id = "desktop-widget-0000000000000002"
type = "audio_visualizer"
output = "DP-1"
cx = 1040.0
cy = 620.0
scale = 1.25
rotation = 0.0
[widget.settings]
bands = 32
aspect_ratio = 2.5
mirrored = true
low_color = "primary"
high_color = "secondary"
SettingTypeDefaultDescription
bandsint32Number of frequency bands
aspect_ratiofloat2.5Width-to-height ratio
mirroredbooltrueMirror the spectrum horizontally
low_colorstring"primary"Gradient low-end color role or hex color
high_colorstring"primary"Gradient high-end color role or hex color

Draws the current weather glyph alongside the temperature and short condition, driven by the shared WeatherService. Requires [weather] enabled = true in config.toml (see Services — Weather) — the widget will render a placeholder otherwise.

[[widget]]
id = "desktop-widget-0000000000000003"
type = "weather"
output = "DP-1"
cx = 320.0
cy = 200.0
scale = 1.0
rotation = 0.0
[widget.settings]
color = "on_surface"
shadow = true

MPRIS media player showing album art, track title, artist, and playback controls (prev, play/pause, next). Requires an active MPRIS player.

[[widget]]
id = "desktop-widget-0000000000000004"
type = "media_player"
output = "DP-1"
cx = 500.0
cy = 700.0
scale = 1.5
rotation = 0.0
[widget.settings]
layout = "horizontal"
color = "on_surface"
shadow = true
SettingTypeDefaultDescription
layoutstring"horizontal""horizontal" (cover on left) or "vertical" (cover on top)

Displays an image file on the desktop. PNG, JPEG, WebP, SVG, and GIF are supported; animated GIFs play at their encoded per-frame durations and loop forever.

[[widget]]
id = "desktop-widget-0000000000000005"
type = "sticker"
output = "DP-1"
cx = 800.0
cy = 400.0
scale = 1.0
rotation = 0.0
[widget.settings]
image_path = "/path/to/image.png"
opacity = 1.0
SettingTypeDefaultDescription
image_pathstringAbsolute path to the image file (PNG, JPEG, WebP, SVG, or GIF)
opacityfloat1.0Sticker image opacity from 0.0 to 1.0

GPU-accelerated system monitor graph with smooth cubic curves and optional text label. Uses the shared SystemMonitorService.

[[widget]]
id = "desktop-widget-0000000000000006"
type = "sysmon"
output = "DP-1"
cx = 200.0
cy = 800.0
scale = 1.0
rotation = 0.0
[widget.settings]
stat = "cpu_usage"
stat2 = "cpu_temp"
color = "primary"
color2 = "secondary"
show_label = true
shadow = true
background = true
SettingTypeDefaultDescription
statstring"cpu_usage"Primary stat: "cpu_usage", "cpu_temp", "gpu_temp", "ram_pct", "swap_pct", "net_rx", "net_tx"
stat2stringOptional secondary stat (same values as stat). Omit for single curve.
colorstring"primary"Primary line color role or hex color
color2string"secondary"Secondary line color role or hex color (used when stat2 is set)
show_labelbooltrueShow the current value as text next to the icon