Files
Frank e86e60af39 docs: close OKF conformance gaps found by night audit
- references/okf-spec.md: replace v0.2 note with the deltas verified
  against upstream SPEC.md 2026-10-19 (timestamp->generated.at and
  # Citations->sources are the two breaking changes; trust fields and
  root-index okf_version are additive; bundle stays v0.1).
- index.md: restore the agentic-web-research section lost in the
  2026-08-28 rebuild and link log.md (index-coverage doctrine).
- gen-keybinds.sh emits OKF frontmatter so its generated artifact
  (tools/niri/keybindings.md, regenerated, 120 bindings) passes kb-lint;
  test added red->green.
- fix the two broken [[niri]] wikilinks (handy, noctalia-shell).

Refs #29
2026-10-19 02:43:33 -07:00

15 KiB

type, title, description, resource, tags, timestamp, verified
type title description resource tags timestamp verified
reference Noctalia Shell Native desktop environment for Niri — launcher, control center, settings, lock screen, session menu, hotkey overlay, media controls, and system management. https://github.com/Noctalia/noctalia
noctalia
niri
wayland
desktop-environment
launcher
control-center
session-management
2026-10-09 2026-10-09

Noctalia Shell

Noctalia is a native, minimal desktop environment for the Niri compositor. It provides an application launcher, control center, settings GUI, lock screen, session menu, hotkey overlay, media controls, brightness/volume controls, wallpaper management, and system-level utilities.

Version: 5.2.1-1.1 Binary: /usr/bin/noctalia (native Qt application, no Quickshell dependency) Config: ~/.config/noctalia/


Architecture

Noctalia is a native Qt binary that communicates with Niri and system services via direct IPC (noctalia msg) and shell scripts (spawn-sh). It does not depend on Quickshell.

IPC Interface

All primary functionality is exposed via the noctalia msg command:

noctalia msg <command>

See noctalia msg --help for the complete command list.

Historical Note: v4.x used Quickshell IPC (qs -c noctalia-shell ipc call ...), but v5+ is a native binary with its own IPC interface.


Command Reference

Commands are grouped by functional area.

Shells / Surfaces

Command Description
bar-show [bar-name] Show a named bar or all bars
bar-hide [bar-name] Hide a named bar or all bars
bar-layer-set <layer> Set bar layer (e.g., top, bottom)
bar-reserve-toggle [bar-name] Temporarily toggle reserve space
bar-toggle [bar-name] Toggle visibility for a named bar or all bars
dock-hide Hide the dock (persists override)
dock-reload Reload dock configuration
dock-show Show the dock (persists override)
dock-toggle Toggle dock visibility (persists override)
panel-close [id] Close the active or named panel
panel-open <id> [context] Open a panel by id, optionally with context (e.g., launcher /emo, control-center audio)
panel-toggle <id> [context] Toggle a panel by id, optionally with context
settings-close Close the settings window
settings-open [context] Open the settings window, optionally at a specific section
settings-open-plugin <plugin-id> Open settings at a plugin's settings (e.g., noctalia/notes)
settings-open-widget [bar-name] [widget-name] Open settings at a bar widget
settings-toggle [context] Toggle the settings window, optionally at a specific section
window-switcher [action] Open or close the window switcher overlay

Lockscreen / Session

Command Description
session lock Lock the screen
session lock-and-suspend Lock and suspend the system
lockscreen-widgets-edit Open the lockscreen widgets editor
lockscreen-widgets-exit Close the lockscreen widgets editor
lockscreen-widgets-toggle-edit Toggle lockscreen widgets edit mode

Desktop Widgets

Command Description
desktop-widgets-edit Open the desktop widgets editor
desktop-widgets-exit Close the desktop widgets editor
desktop-widgets-hide Hide desktop widgets (runtime only)
desktop-widgets-show Show desktop widgets (runtime only)
desktop-widgets-toggle Toggle desktop widgets visibility (runtime only)
desktop-widgets-toggle-edit Toggle desktop widgets edit mode

Greeter

Command Description
greeter-sync Sync wallpaper, colors, and monitor layout to Noctalia Greeter

Media / UI

Command Description
notification-show <summary> <body...> Show an internal Noctalia notification
notification-clear-active Dismiss all currently active notifications
notification-clear-history Clear notification history
notification-dnd-set <state> Set notification Do Not Disturb state
notification-dnd-status Print notification DND state
notification-dnd-toggle Toggle notification DND
notification-invoke-latest Invoke the default action of the most recent active notification
clipboard-copy <text> Copy text to the clipboard
clipboard-text Print the most recent clipboard text
clipboard-clear Clear clipboard history
wallpaper-set [connector] <path> Set wallpaper for all or a specific output (persisted)
wallpaper-next [connector] Switch to the next wallpaper immediately
wallpaper-previous [connector] Switch to the previous wallpaper immediately
wallpaper-random [connector] Switch to a random wallpaper immediately
wallpaper-get [connector] Print default wallpaper path, or effective path for an output
theme-mode-set <mode> Set theme mode and persist to settings.toml
theme-mode-toggle Toggle theme mode between dark and light
theme-mode-get Print the current resolved theme mode
color-scheme-set <{builtin|wallpaper|community|custom}> ... Set palette source and selection in settings.toml
color-scheme-get Print active color scheme: <source> <name>
screenshot-region Start an interactive region screenshot
screenshot-fullscreen [mode] Capture the focused monitor by default, pick interactively, or all outputs
screenshot-annotate Freeze the screen and annotate it, then copy or save
annotate [path] Draw on the screen over running apps, or annotate an image file; press F or the Freeze button to capture the background

System Controls

Command Description
volume-up [step] Increase speaker volume
volume-down [step] Decrease speaker volume
volume-set <value> Set speaker volume
volume-mute Toggle speaker mute
volume-osd [value] Show the volume OSD without changing volume
mic-mute Toggle microphone mute
mic-volume-up [step] Increase microphone volume
mic-volume-down [step] Decrease microphone volume
mic-volume-set <value> Set microphone volume
mic-volume-osd [value] Show the microphone volume OSD
brightness-up [target] [step] Increase brightness (defaults to current monitor)
brightness-down [target] [step] Decrease brightness (defaults to current monitor)
brightness-set [target] <value> Set brightness (defaults to current monitor)
brightness-osd <value> Show brightness OSD without changing brightness
brightness-list-backlight-devices List available sysfs backlight device names
keyboard-backlight-up Increase all keyboard backlights by one level
keyboard-backlight-down Decrease all keyboard backlights by one level
keyboard-backlight-toggle Toggle all keyboard backlights on/off
keyboard-backlight-set <value> Set all keyboard backlights (0-100 percentage)
keyboard-backlight-osd <value> Show keyboard backlight OSD without changing brightness
keyboard-layout-cycle Switch to the next keyboard layout
network-toggle Disconnect the active network, or reconnect when nothing is connected
wifi-toggle Toggle Wi-Fi
wifi-enable Enable Wi-Fi
wifi-disable Disable Wi-Fi
wifi-status Print Wi-Fi state
bluetooth-toggle Toggle Bluetooth
bluetooth-enable Enable Bluetooth
bluetooth-disable Disable Bluetooth
bluetooth-status Print Bluetooth state
power-cycle [direction] Step through UPower's ordered profile list, forward by default (wraps)
power-set <profile> Set the UPower power profile (e.g., performance, balanced, power-saver)
caffeine-toggle Toggle caffeine (idle inhibitor)
caffeine-enable Enable caffeine (idle inhibitor)
caffeine-disable Disable caffeine (idle inhibitor)
dpms-on Turn monitors on
dpms-off Turn monitors off
effects-profile-set <kind> <profile> Set the EasyEffects output or input profile
log-level-set <level> Set the console log level
log-level-status Print the current console log level
session <action> Run a built-in session action (e.g., lock, lock-and-suspend)
config-reload Reload the config file
status Print current state as JSON
taskbar-cycle <direction> Step to the adjacent task or workspace group in the invoking taskbar
templates-apply Apply configured theme templates for the current palette
osd-toggle Toggle OSD popups
osd-enable Enable OSD popups
osd-disable Disable OSD popups
plugin <author/plugin:entry> <target[:bar-name]> <event> [payload] Dispatch an event to a plugin entry
plugins <{list|enable|disable|update|source}> ... Manage plugins and sources (list/enable/disable/update, source list/add/remove)

Configuration Files

~/.config/noctalia/config.toml

Main configuration file for runtime and persisted settings.

Live config (tracked in repo):

[shell]
polkit_agent = true

[wallpaper]
directory = "/home/blank/.local/share/noctalia/wallpapers"

~/.local/state/noctalia/settings.toml

Settings GUI configuration (bar widgets, theme, wallpaper automation, plugins). Note the location: ~/.local/state/, not ~/.config/.

Location: ~/.local/state/noctalia/settings.toml Status: Tracked in repo — dotfiles/noctalia/.local/state/noctalia/settings.toml; the Settings GUI rewrites the live file, so deploy adopts divergents. Bar layout lives in [bar.default]: center = [ "taskbar", "cat" ], end = [ "notifications", "clipboard", "network", "bluetooth", "tray", "battery", "session", "control-center", "clock" ]. The taskbar widget lists open windows of the focused workspace (added 2026-10-09). Apply changes with noctalia msg config-reload.

~/.config/noctalia/palettes/

Custom palette folders.

Live config (tracked in repo):

  • ~/.config/noctalia/palettes/Gruber Red.json → /home/blank/.omp/dotfiles/noctalia/.config/noctalia/palettes/Gruber Red.json

Usage:

noctalia msg color-scheme-set custom "Gruber Red"

Custom palettes are folder-based and immune to the community-palette catalog sync mechanism.

~/.config/niri/noctalia.kdl

Niri-specific integration file (generated by Noctalia, untracked in repo). Contains theme colors (live: #f43841 red theme), layer rules, and wallpaper backdrop rules.


Niri Integration

Noctalia is deeply integrated with the Niri compositor configuration.

Autostart

File: ~/.config/niri/cfg/autostart.kdl

spawn-at-startup "noctalia"

Window Rules

File: ~/.config/niri/cfg/rules.kdl

// Geometry and clipping
window-rule {
    geometry-corner-radius 20
    clip-to-geometry true
}

// Floating settings window
window-rule {
    match app-id="dev.noctalia.Noctalia"
    open-floating true
    default-column-width { fixed 1080; }
    default-window-height { fixed 920; }
}

// Wallpaper backdrop
layer-rule {
    match namespace="^noctalia-wallpaper"
    place-within-backdrop true
}

// Panels and overlays
layer-rule {
    match namespace="^noctalia-(bar-[^\"]+|notification|dock|panel|attached-panel|osd)$"
    background-effect {
        xray false
    }
}

Keybindings

File: ~/.config/niri/cfg/keybinds.kdl

Keybind Action IPC Command
Mod+Shift+Return Wallpaper panel noctalia msg panel-toggle wallpaper
Mod+S Control center noctalia msg panel-toggle control-center
Mod+Shift+S Settings noctalia msg settings-toggle
Mod+D App launcher noctalia msg panel-toggle launcher
Mod+ALT+L Lock screen noctalia msg session lock
Mod+Shift+Q Session menu noctalia msg panel-toggle session
Mod+V Clipboard history panel noctalia msg panel-toggle clipboard
Alt+Tab Window switcher (app icons + titles) noctalia msg window-switcher
XF86AudioRaiseVolume Volume up noctalia msg volume-up
XF86AudioLowerVolume Volume down noctalia msg volume-down
XF86AudioMute Mute noctalia msg volume-mute
XF86AudioMicMute Mic mute noctalia msg mic-mute
XF86AudioNext Next track noctalia msg media next
XF86AudioPrev Previous track noctalia msg media previous
XF86AudioPlay Play noctalia msg media play
XF86AudioPause Pause/stop noctalia msg media stop
XF86MonBrightnessUp Brightness up noctalia msg brightness-up
XF86MonBrightnessDown Brightness down noctalia msg brightness-down
Mod+Shift+ESCAPE Show hotkey overlay niri show-hotkey-overlay

Recommended IPC binds (from docs):

  • Mod+Space — Launcher
  • Mod+S — Control center
  • Mod+Comma — Settings
  • Alt+Tab — Window switcher (hold)

Wallpaper Backdrop

The wallpaper layer is placed in the backdrop:

File: ~/.config/niri/cfg/rules.kdl

layer-rule {
    match namespace="^noctalia-wallpaper"
    place-within-backdrop true
}

Background Color

File: ~/.config/niri/cfg/layout.kdl

layout {
    background-color "transparent" // <- needed for noctalia-shell to set wallpaper
}

Per-Widget Layer Namespaces

Widgets use namespace-based layer rules:

layer-rule {
    match namespace="^noctalia-(bar-[^\"]+|notification|dock|panel|attached-panel|osd)$"
    background-effect {
        xray false
    }
}

Laptop / Lid Policy

File: ~/.config/niri/cfg/keybinds.kdl

Mod+ALT+L hotkey-overlay-title="Lock Screen: noctalia lock" { spawn-sh "noctalia msg session lock"; }

File: ~/.config/niri/cfg/autostart.kdl

// Lid close policy (optional)
switch-events {
    lid-close {
        spawn "noctalia" "msg" "session" "lock-and-suspend";
    }
}

Also requires logind configuration: HandleLidSwitch=ignore in /etc/logind.conf.


Theme / Palette Workflow

Builtin Themes

# List available builtin themes
noctalia msg theme-mode-get

# Set a builtin theme
noctalia msg theme-mode-set dark
noctalia msg theme-mode-set light

# Toggle between dark and light
noctalia msg theme-mode-toggle

Community Palettes

# Set a community palette by ID
noctalia msg color-scheme-set community "Palette Name"

Custom Palettes

# Set a custom palette from a folder
noctalia msg color-scheme-set custom "Gruber Red"

Custom palettes live in ~/.config/noctalia/palettes/ and are immune to the community-palette catalog sync.

Apply templates:

noctalia msg templates-apply

Dependencies

Package Purpose
noctalia (Qt) Native desktop environment
qt6-base Qt6 runtime
qt6-multimedia Multimedia support
niri Wayland compositor
wlr-randr Display information
brightnessctl Brightness control
imagemagick Image processing
ffmpeg Media processing
polkit PolicyKit integration

See Also