Shell
Shell settings
Section titled “Shell settings”Global UI settings that apply across all shell surfaces.
[shell]ui_scale = 1.0 # content scale for panels and non-bar shell UIfont_family = "sans-serif" # Pango family string; Fontconfig handles fallbacklang = "en" # override language detectiontime_format = "{:%H:%M}" # default time format for shell UI without its own settingdate_format = "%A, %x" # default date format for shell UI without its own settingoffline_mode = false # block all outgoing HTTP requeststelemetry_enabled = false # anonymous startup pingpolkit_agent = false # register Noctalia's native polkit authentication agentpassword_style = "default" # default | randomavatar_path = "~/Pictures/avatar.png"settings_show_advanced = false # show advanced settings by default in Settingsmiddle_click_opens_widget_settings = true # middle-click bar widgets to open their Settings entryshow_location = true # show weather location text in shell UIclipboard_auto_paste = "auto" # off | auto | ctrl_v | ctrl_shift_v | shift_insertclipboard_image_action_command = "" # image clipboard action; e.g. "gimp {path}" or "satty -f -"
[shell.animation]enabled = truespeed = 1.0 # 1.0 = normal, 0.5 = 2× slower, 2.0 = 2× faster
[shell.shadow]blur = 12 # global surface shadow blur radius; 0 disables all rendered surface shadowsoffset_x = 2offset_y = 2 # positive = downalpha = 0.55 # multiplied by each component's background opacity
[shell.panel]background_blur = true # request compositor blur behind panels via ext-background-effect-v1attach_launcher = false # attach launcher to the bar when a suitable bar is availableattach_clipboard = false # attach clipboard history to the bar when a suitable bar is availableattach_control_center = true # attach Control Center to the bar when a suitable bar is availableattach_wallpaper = true # attach wallpaper picker to the bar when a suitable bar is available
[shell.screen_corners]enabled = false # overlay black rounded corners on each screensize = 32 # corner radius in logical pixels (1–100)
[shell.mpris]blacklist = [] # optional list of players to hide from media widgets/control-centerNotes:
ui_scaleis completely separate frombar.scale:bar.scaleonly affects bar widget content;ui_scalecovers the control center, launcher, clipboard, and other non-bar surfaces. Neither changes Wayland output / HiDPI buffer scale.font_familysets the primary Pango family for all shell text. Can be a concrete family likeInteror a generic likesans-serif.time_formatanddate_formatare fallbacks for shell-owned displays such as the home tab, calendar tab, and lock screen. Widget-specific clock formats still use their own widget settings. See Date format tokens.offline_modeprevents the shell from making any outgoing HTTP requests (weather, community palettes, community templates, album art, remote notification icons). Distro packagers can default totrueto comply with policies requiring explicit user consent for network access.telemetry_enabledsends a single anonymous POST toapi.noctalia.dev/pingon each startup containing: a random instance ID, shell version, compositor name, OS name, RAM, monitor resolutions, and UI scale. No personal data is collected. The instance ID is a random UUID stored in~/.local/state/noctalia/instance.id.polkit_agentcontrols registration onorg.freedesktop.PolicyKit1. Keep disabled if another desktop agent handles auth prompts.- Notification daemon ownership moved out of
[shell]: use[notification].enable_daemonin Services. password_style:defaultusescircle-filled;randomcycles through multiple filled glyph shapes on polkit and lock screen inputs.settings_show_advanced: whentrue, Settings opens with advanced entries visible.middle_click_opens_widget_settings: whentrue, middle-clicking a bar widget opens Settings directly to that widget’s configuration. Set it tofalseif a scripted widget needsonMiddleClick().show_location: whenfalse, weather location text/coordinates are hidden in shell surfaces.clipboard_auto_paste:auto= image entries useCtrl+V, text entries useCtrl+Shift+V;off= copy only, no automatic paste.clipboard_image_action_command: when non-empty, image clipboard previews show an action button. Use{path}to receive an exported image file path. Use{stdin}(expanded to-) or omit{path}to receive the image bytes on stdin, matching the v4 annotation tool behavior (satty -f -,gradia, etc.).shell.animation.enableddisables all animated transitions globally.speedscales durations globally.shell.shadowdefines the shared shadow metrics for shell surfaces. Components such as bars and the dock only opt in/out withshadow = true|false; they do not define their own blur or offset.shell.panel.background_blurtoggles compositor blur on every shell panel (control center, launcher, clipboard, attached menus, etc.). Inert on compositors that do not implementext-background-effect-v1.shell.panel.attach_launcher,attach_clipboard,attach_control_center, andattach_wallpapercontrol whether those panels attach to the bar when a suitable bar is available. Attachment still requires the host bar to haveattach_panels = true.shell.mpris.blacklistexcludes matching MPRIS players from Noctalia media UI and active-player selection. Entries are case-insensitive and match player bus name, identity, desktop entry, or a bus-name substring token (for example"spotify").
[osd]position = "top_right" # top_right | top_left | top_center | bottom_right | bottom_left | bottom_centerThe OSD powers the volume HUD and defaults to top_right.
Keybinds
Section titled “Keybinds”Centralized keyboard actions for shell panels (launcher, session, clipboard, wallpaper) and panel close/cancel.
[keybinds]validate = ["return", "kp_enter"]cancel = ["escape"]left = ["left"]right = ["right"]up = ["up"]down = ["down"]Each action accepts a single string chord or an array of chords.
Chord format: key, modifier+key, or modifier+modifier+key
Supported modifiers: ctrl, shift, alt
super bindings are rejected (super, win, windows, logo, meta, mod4) and produce a config parse error.
Supported actions: validate, cancel, left, right, up, down
Session panel
Section titled “Session panel”The session (power) menu opened from the bar Session widget or Control Center lists Lock, Log out, Reboot, and Shut down by default. You can change which buttons appear, their order, whether each is enabled, and optionally replace the implementation with a shell command (still run after logging_out / rebooting / shutting_down hooks when the action is one of those three).
Configure under [shell.session] in TOML, or use Settings → Panels → Session menu: entries, reorder, and Show are listed inline; use the settings (cog) control on a row for behavior, label, command, icon, and style. Add action appends a custom-command entry by default.
| Field | Type | Default | Description |
|---|---|---|---|
action | string | required | lock, logout, reboot, shutdown, or command (custom entry). |
enabled | bool | true | When false, the button is hidden. |
command | string | unset | Optional. If set, the string is run with /bin/sh -c instead of the built-in handler. For action = "command", this field is required. |
label | string | unset | Optional button label (otherwise translated defaults). |
glyph | string | unset | Optional bar-style icon id (otherwise defaults per action). Under Session menu in Settings → Panels, open a row’s settings (cog) editor and use the icon preview to pick a glyph. |
destructive | bool | false | Use the destructive (warning) button style. |
Omitting [[shell.session.actions]] entirely keeps the default four actions. To define your own list, declare one or more tables. An explicit empty array hides all session buttons:
[shell.session]actions = []
# Example: reorder, disable reboot, custom suspend, override lock[[shell.session.actions]]action = "lock"command = "swaylock -f"
[[shell.session.actions]]action = "logout"enabled = true
[[shell.session.actions]]action = "command"label = "Sleep"glyph = "bedtime"command = "systemctl suspend"
[[shell.session.actions]]action = "shutdown"destructive = trueOptional shell hooks run extra commands when specific events happen. Define them under [hooks] in config.toml.
Each event is a string (one command) or an array of strings (run in order). The same noctalia: prefix rules apply as
in idle behaviors.
Hooks do not replace Noctalia’s built-in behavior. For example, Wi-Fi and Bluetooth power changes made outside
Noctalia still create internal Noctalia notifications even when wifi_* / bluetooth_* hooks are not configured.
notify-send can be useful while testing that a hook fires, but it is not required for Noctalia’s own notifications.
| Key | When it fires |
|---|---|
started | Once after Noctalia finishes startup (IPC ready). |
wallpaper_changed | After a persisted wallpaper path change is applied. |
colors_changed | After the theme palette is resolved and terminal templates are updated. |
session_locked | When the compositor confirms the session lock. |
session_unlocked | When the session leaves the locked state. |
logging_out | Immediately before the session panel runs the logout sequence. |
rebooting | Immediately before the session panel runs reboot. |
shutting_down | Immediately before the session panel runs shutdown. |
wifi_enabled / wifi_disabled | When NetworkManager’s Wi-Fi radio toggles (not on first snapshot). |
bluetooth_enabled / bluetooth_disabled | When the default adapter’s powered state toggles (not on first snapshot). |
battery_state_changed | When UPower’s battery state enum changes (charging, discharging, etc.). Sets NOCTALIA_BATTERY_STATE (e.g. Charging, Discharging, Charged). |
battery_under_threshold | When charge crosses from above to at or below battery_low_percent_threshold. Sets NOCTALIA_BATTERY_PERCENT. |
| Setting | Type | Default | Description |
|---|---|---|---|
battery_low_percent_threshold | int | 0 | Percent (0–100). 0 disables battery_under_threshold. Set to e.g. 15 to activate. |
[hooks]# Start a user unit after Noctalia IPC is ready.started = "systemctl --user start noctalia-ready.target"
# Reload tools that consume generated wallpaper/theme files.wallpaper_changed = "systemctl --user restart wallpaper-sync.service"colors_changed = [ "systemctl --user reload foot-server.service", "logger -t noctalia-hooks 'palette colors changed'",]
# Combine normal shell commands with Noctalia IPC commands.session_locked = [ "playerctl pause", "noctalia:bar-hide",]session_unlocked = [ "noctalia:bar-show", "noctalia:dpms-on",]
logging_out = "logger -t noctalia-hooks 'logout requested'"rebooting = "systemctl --user stop backup-sync.service"shutting_down = "systemctl --user stop backup-sync.service"
# External Wi-Fi/Bluetooth power changes emit internal notifications without these hooks;# use hooks only for extra side effects. Changes made from Noctalia do not toast.wifi_enabled = "logger -t noctalia-hooks 'Wi-Fi radio enabled'"wifi_disabled = "logger -t noctalia-hooks 'Wi-Fi radio disabled'"
bluetooth_enabled = "logger -t noctalia-hooks 'Bluetooth powered on'"bluetooth_disabled = "logger -t noctalia-hooks 'Bluetooth powered off'"
battery_low_percent_threshold = 15battery_state_changed = "logger -t noctalia-hooks \"Battery: $NOCTALIA_BATTERY_STATE\""battery_under_threshold = "systemctl --user start battery-low.target"
# Quick test while developing a hook; not needed for Noctalia's own notifications.# started = "notify-send 'Noctalia hook' 'started fired'"