IPC Reference
iNiR exposes IPC targets you can call from Niri keybinds, scripts, or your terminal.
Quick discovery:
inir helplists all targets,inir <target> --helpshows available functions. Tab completion knows every target, function and the values each one takes:inir completions install.
From terminal (for testing, or showing off):
inir <target> <function> [values…]As a Niri keybind, let inir bind write it for you. It checks the call, tells you if the keys already do something, and saves the bind to your own block in ~/.config/niri/config.d/90-user-extra.kdl:
inir bind Mod+O orbit toggle # shows the line and what those keys do nowinir bind --add Mod+O orbit toggle # saves it; Niri picks it up right awayinir bind --examples # ready binds for your panel familyinir bind --list # the binds you addedinir bind --remove Mod+OOr by hand, as a line inside the binds { } block of your Niri config:
binds { Mod+O repeat=false { spawn "inir" "orbit" "toggle"; }}The examples further down are lines for that block.
For low-level debugging, inir ipc <target> <function> still works.
Every target
Section titled “Every target”Every target and function the shell answers, and what each one does. The list is built from the shell’s code, so it never falls behind; inir help and tab completion read the same list.
Every family
Section titled “Every family”Shared multi-provider AI service. It supports Gemini, OpenAI-compatible chat and Responses APIs, Mistral and Anthropic; live provider catalogs are normalized into capability-aware model records. Catalog visibility is separate from execution readiness, so public model lists remain browseable without pretending an API key exists. OpenCode Zen and Go resolve their current model lists and per-model API routes dynamically. Normal shell tools use typed actions and approval cards, while arbitrary commands are isolated in Advanced mode.
inir ai |
What it does |
|---|---|
ensureInitialized |
Force-load models, provider catalogs and API keys |
diagnose |
Dump current AI, catalog and tool state as JSON |
refreshCatalog |
Refresh every live provider model catalog |
catalog <query> |
Search up to 100 normalized live model records |
providers |
Return provider health, key state and live model counts |
run <inputText> |
Send a message or compatibility /command to AI chat |
runGet <inputText> |
Run an AI command and return the last response |
altSwitcher
Section titled “altSwitcher”Alt+Tab window switcher. Works across workspaces, unlike some other implementations we won’t name.
inir altSwitcher |
What it does |
|---|---|
opens <which> |
Which switcher Alt+Tab opens: inir, niri (Niri’s own Recent Windows) or status. Always inir on Umbriel, which has none of its own. |
open |
Open switcher |
close |
Close switcher |
toggle |
Toggle switcher |
next |
Focus next window |
previous |
Focus previous window |
Fresh installs give Alt+Tab to Niri’s Recent Windows. inir altSwitcher opens inir hands it to iNiR’s
switcher with a marked block at the end of ~/.config/niri/config.d/90-user-extra.kdl; opens niri removes
that block. Your own binds are left as they are. The same choice is in Settings, next to the switcher’s
options.
Alt+Tab { spawn "inir" "altSwitcher" "next"; }Alt+Shift+Tab { spawn "inir" "altSwitcher" "previous"; }appCatalog
Section titled “appCatalog”App catalog service. Browse, search, and install curated applications.
inir appCatalog |
What it does |
|---|---|
refresh |
Refresh the installed-state cache |
search <query> |
Filter catalog entries by query |
install <id> |
Install app by catalog ID |
list |
List catalog apps with install status and descriptions |
Volume and mute control.
inir audio |
What it does |
|---|---|
volumeUp |
Increase volume |
volumeDown |
Decrease volume |
mute |
Toggle speaker mute |
playEvent <event> |
Play a shell event sound (e.g. notification, batteryLow, timerDone), honoring the user’s per-event override |
micMute |
Toggle microphone mute |
autostart
Section titled “autostart”Niri login autostart manager. Reads and writes the managed section of ~/.config/niri/config.d/50-startup.kdl (delimited by // >>> inir-managed-autostart >>> / // <<< inir-managed-autostart <<<). Base iNiR lines and any hand-written spawn-at-startup lines outside the markers are preserved verbatim; toggling an entry comments the line out instead of deleting it. Safe no-op on non-Niri compositors (the page shows a guard instead).
inir autostart |
What it does |
|---|---|
status |
Return <compositor>|<path>|<managedCount>|<externalCount>|<state> (compositor: niri, umbriel or other) |
addCommand <cmd> |
Append a managed spawn-sh-at-startup shell line |
addApp <desktopId> |
Append a managed gtk-launch <desktopId> entry |
removeLast |
Remove the last managed entry |
reload |
Force re-read the startup file |
The Settings UI (ii: AutostartConfig, waffle: WAutostartPage) is the primary interface; these IPC calls exist for scripts/keybinds. Apps the user already launches via hand-written lines outside the markers are detected and shown as “External” (read-only) in the list.
background
Section titled “background”Desktop background and widget controls.
inir background |
What it does |
|---|---|
widgetDesign <name> |
Put every desktop widget on iris, material, individual, instrument or readout; undo brings back the design and each widget’s own look from before; status reports the design, how many widgets keep their own look and whether an undo is available. |
widgetMaterial <action> |
status reports the shared widget material and how many widgets chose their own material or surface opacity in Look; match puts them back on the shared ones; toggle, clear and glass take every widget’s plate away or bring it back (returns the material now). |
everyWidget <part> <value> |
Every Material, iNstrument and Readout widget at once: plate on|off (the background), outline on|off, strength 0-100 (the background’s strength), ink auto|light|dark, lock on|off. |
everyWidgetStatus |
Each of those as the value every widget on the desktop shares, or mixed. |
widgetSearch <query> |
While arranging (iRiS), find a widget from the bar: the words to look for, open for an empty field, next/previous to move the selection, take to add or show the selected widget, close. Ctrl+F opens it |
toggleEditMode |
Toggle widget edit mode (drag, resize, configure desktop widgets) |
toggleWidgetManager |
Enter edit mode if needed and toggle the widget manager on the focused output |
setEditMode <enabled> |
Set widget edit mode explicitly |
presets |
The desktops you can wear (factory first, then saved) as JSON, and which one is worn |
wearPreset <id> |
Wear a desktop by id (factory:glance, factory:dashboard, factory:focus, factory:listening, factory:bare, or a saved one) |
savePreset <name> |
Save this desktop under a name (empty = “Desktop N”) and print its id |
sizeWidget <widgetName> <size> |
Set a widget’s size class (small, medium, large) in the family drawing it; every family keeps that size, and neighbours it now covers move aside while arranging |
widgetRects |
Where every desktop widget sits on each screen, as JSON |
widgetOptions <widgetName> |
The options a widget’s Options page shows now, with their values, as JSON |
widgetOptionSet <widgetName> <key> <value> |
Write one of a widget’s options the way its row does (value as JSON: true, 12, "pill") and print what it reads back |
widgetFit |
How each desktop widget’s text fits its size, as JSON: text over other text, past the plate, hugging its edge or cut short. Only widgets with something wrong: [{ output, widget, size, issues }] |
editState |
Report the active selection, physical panel insets, full desktop work area and panel-aware zone work area for each output |
applyOrganicEdgePreset <name> |
Apply an Organic Edge scene by name without changing enabled displays |
applyOrganicEdgeComposition <name> |
Apply only an Organic Edge topology/geometry preset |
applyOrganicEdgeMaterial <name> |
Apply only an Organic Edge material/light preset |
applyOrganicEdgeResponse <name> |
Apply only an Organic Edge music-response preset |
organicEdgeState |
Report each Organic Edge output, selected edges, frame, audio subscription and shader status |
setOrganicEdgeEnabled <enabled> |
Enable or disable the independent Organic Edge screen field |
quickControlsPage <page> |
Show a page of the selected widget’s quick controls: widget, look or arrange (and stack, for a widget in a stack) |
widgetSnapshot <widgetName> <path> |
Save one desktop widget, as it renders now, to a PNG (offscreen: works while windows cover the desktop). |
legibilityState |
Report what each desktop widget reads under itself (brightness, spread, light or dark backdrop) and the ink and accent it chose |
desktopItemsState |
Report desktop-item persistence, availability, item count, validation errors and undo state |
focusWidget <widgetName> <openControls> |
Select a desktop widget and optionally open its quick controls |
arrangeWidget <widgetName> <x> <y> <probe> |
Move a widget on the focused screen to x, y as a drop would place it: lined up with the widgets around and off any it would cover. With probe true it only reports where it would land, as JSON |
promoteWidget <widgetName> |
Move a desktop widget to the top of the persistent layer order |
resetLayerOrder |
Reset desktop widgets to their built-in stacking order |
setWidgetEnabled <widgetName> <enabled> |
Enable or disable a built-in desktop widget |
Super+W { spawn "inir" "background" "toggleEditMode"; }Top bar visibility.
inir bar |
What it does |
|---|---|
mediaWidth <px> |
How wide the song title gets in the active family’s bar, 120 to 640 px (the window title gives way); empty to read it |
toggle |
Show/hide bar |
close |
Hide bar |
open |
Show bar |
battery
Section titled “battery”The laptop battery as every family shows it. simulate lets you see the battery surfaces on a machine without one.
inir battery |
What it does |
|---|---|
status |
Print the level and whether it is charging, discharging or plugged in, marked (simulated) while simulating |
simulate <spec> |
Pretend the battery is at a level and state until the shell restarts: 14, "14 charging", full or off. Never suspends the machine. For testing |
bluetooth
Section titled “bluetooth”The Bluetooth adapter as every family shows it. simulate lets you see the Bluetooth surfaces without the hardware.
inir bluetooth |
What it does |
|---|---|
status |
Print on, off, no adapter or how many devices are connected, marked (simulated) while simulating |
simulate <state> |
Pretend the adapter is off, on, has a number of connected devices (2) or is missing (none) until clear or a restart. For testing |
brightness
Section titled “brightness”Display brightness control.
inir brightness |
What it does |
|---|---|
increment |
Increase brightness |
decrement |
Decrease brightness |
refresh |
Re-read every output’s level from the hardware (after the monitor’s own buttons moved it) |
set <percent> |
Set the focused output’s brightness, the same path as the sliders; prints the result |
status |
Each output: how it is driven (DDC bus or backlight), the shell’s level and the last hardware level written (-1 until the first write) |
sleepBegin |
Turn every output off for sleep, keeping the level each one had |
restoreAfterWake |
Turn the outputs back on after sleep, each at its last level |
cheatsheet
Section titled “cheatsheet”Keyboard shortcuts reference. For when you forget what you just configured five minutes ago.
inir cheatsheet |
What it does |
|---|---|
toggle |
Open/close cheatsheet |
close |
Hide cheatsheet overlay |
open |
Show cheatsheet overlay |
Super+Slash { spawn "inir" "cheatsheet" "toggle"; }clipboard
Section titled “clipboard”Clipboard history panel. Because Ctrl+V only remembers one thing, and that’s not enough for power users.
inir clipboard |
What it does |
|---|---|
open |
Open panel |
close |
Close panel |
toggle |
Open/close panel |
Super+V repeat=false { spawn "inir" "clipboard" "toggle"; }cliphistService
Section titled “cliphistService”Clipboard history service. The backend that makes clipboard panel work. You probably don’t need to call this directly.
inir cliphistService |
What it does |
|---|---|
update |
Refresh clipboard history |
closeConfirm
Section titled “closeConfirm”Close window confirmation dialog. Shows a prompt before closing the focused window. Useful if you’re the type who accidentally closes things and then regrets it.
inir closeConfirm |
What it does |
|---|---|
trigger |
Show close confirmation for focused window |
triggerWindow <windowId> <appId> |
Close or confirm the exact window captured by inir close-window |
close |
Dismiss the dialog without closing |
Mod+Q repeat=false allow-inhibiting=false { spawn "inir" "close-window"; }By default, confirmation is disabled (closes immediately). Enable it in settings or config:
"closeConfirm": { "enabled": true}colorMode
Section titled “colorMode”The system’s light or dark mode, the one the shell and your apps share. With iRiS keeping a scheme (Dark, Ink or Light), set moves that scheme too.
inir colorMode |
What it does |
|---|---|
set <mode> |
dark, light or toggle |
get |
JSON: the mode in use, the colour theme, the saved choice, whether the wallpaper decides and iRiS’s scheme |
Mod+Alt+L { spawn "inir" "colorMode" "set" "toggle"; }connections
Section titled “connections”Short notices when something is plugged in, connected, unplugged or lost: networks, the internet, Bluetooth devices, USB devices by name (mice, keyboards, controllers, cameras, phones), the charger, the sound output, displays, and drives and memory cards with their name and size. Each family shows them its own way: a pill under the bar in Material, a panel in Waffle, the Island in iRiS. Settings has a switch for each kind.
inir connections |
What it does |
|---|---|
sample <kind> |
Show how a notice looks without plugging anything: network, internet, bluetooth, usb, power, audio, displays or drives |
status |
Print which kinds are on as JSON, and whether udev is there to watch USB devices and drives |
enable |
Turn connection notices on |
disable |
Turn connection notices off |
toggle |
Turn connection notices on or off |
controlPanel
Section titled “controlPanel”Quick settings panel. Toggles, sliders, and system controls without opening full settings.
inir controlPanel |
What it does |
|---|---|
toggle |
Open/close control panel |
close |
Close control panel |
open |
Open control panel |
coverflowSelector
Section titled “coverflowSelector”Wallpaper coverflow (3D card) picker.
inir coverflowSelector |
What it does |
|---|---|
toggle |
Open/close coverflow selector |
open |
Open coverflow selector |
close |
Close coverflow selector |
customWidgets
Section titled “customWidgets”Custom widget management. Create, list, reload, and remove user-installed widgets from ~/.config/inir/widgets/.
inir customWidgets |
What it does |
|---|---|
reload |
Re-scan widgets directory and reload all custom widgets |
list |
List all discovered custom widgets (JSON output) |
create <name> |
Create a new widget scaffold in the widgets directory |
remove <widgetId> |
Remove a custom widget by ID |
dashboard
Section titled “dashboard”Centered welcome hub panel (ii family): greeting, clock, notifications, media, weather, calendar, todo, system usage and GitHub activity.
inir dashboard |
What it does |
|---|---|
toggle |
Open/close dashboard |
close |
Close dashboard |
open |
Open dashboard |
Development navigation for loading lazy surfaces and internal views without automating pointer or keyboard input. Destination identifiers are stable and returned as JSON by list.
inir dev |
What it does |
|---|---|
list |
Return the destination inventory as JSON |
open <destination> |
Open a destination by semantic identifier |
close |
Close development-opened surfaces and clear the request |
reload |
Reload the shell’s QML the way an edit does (soft: windows are kept). In a git checkout inir-accel dev-hot-reload calls it for the files Quickshell does not watch itself |
current |
Return the current destination or closed |
meter <ms> |
Measure frame gaps for the given milliseconds (250–20000, default 2500) |
metered |
Return the last measurement as JSON: frames, mean, p95, worst, frames over 20 and 50 ms |
inir dev list | jq -r '.[].id'inir dev open sidebar-left/anime-scheduleinir dev closeinir dev auditinir dev audit sidebar-left/ai settings/aiinir dev audit --all --all-familiesinir dev meter 2500; sleep 3; inir dev meteredinir dev audit selects destinations related to changed area-specific files in the current worktree.
Destination arguments select an exact scope, while --all requests every safe destination and
--all-families includes both ii and waffle. Each visited destination is closed again and new QML warnings or
errors are attributed to the destination that triggered them. Destructive actions such as locking, recording,
power commands, and wallpaper mutation are excluded.
gamemode
Section titled “gamemode”Performance mode for gaming. Auto-detects fullscreen apps and disables animations/effects. Can also be toggled manually for those stubborn games that don’t go fullscreen properly.
inir gamemode |
What it does |
|---|---|
toggle |
Toggle gamemode on/off |
activate |
Force enable gamemode |
deactivate |
Force disable gamemode |
status |
Print current gamemode state (e.g. active (manual), inactive (off)) |
Super+F12 { spawn "inir" "gamemode" "toggle"; }globalActions
Section titled “globalActions”Command palette / action registry. Search and execute shell actions from scripts or keybinds.
inir globalActions |
What it does |
|---|---|
run <actionId> |
Execute action by ID (e.g. toggle-mute, install-package vim) |
runWithArgs <actionId> <args> |
Execute an action by ID with its arguments as one string (e.g. install-package with vim) |
list <category> |
List all actions, optionally filtered by category |
search <query> |
Fuzzy search actions by name/description/keywords |
open |
Open the overview in action mode |
Categories: system, appearance, tools, media, settings, custom.
Super+Slash { spawn "inir" "globalActions" "open"; }Super+M { spawn "inir" "globalActions" "run" "toggle-mute"; }globalStyle
Section titled “globalStyle”The Global Style every Material surface and desktop widget follows: material, cards, aurora, inir, angel, regalia, zzz, cookie or editorial.
inir globalStyle |
What it does |
|---|---|
set <style> |
Switch to a style by name, with its bar corner and card defaults |
get |
Return the active style |
list |
List the styles |
Mod+Alt+S { spawn "inir" "globalStyle" "set" "aurora"; }The community hub (widgets, colour themes, iRiS themes, web apps from inir-hub) as the running shell sees it. inir hub list|search|info|install|update|remove|sync works with or without the shell running and tells it afterwards; these functions queue the same actions inside the shell, so its Hub page shows them happening. All families.
inir hub |
What it does |
|---|---|
refresh |
Read every source again now |
install <id> |
Queue an install |
remove <id> |
Queue a removal (only things the hub installed) |
update <id> |
Queue an update; all (or nothing) updates everything that has one |
use <id> |
Put an installed item to use here: a widget on the Island (iRiS) or the desktop, a colour theme applied |
openItem <id> |
Open that item’s page in the Hub page (inir hub open <id> also opens Settings there) |
status |
JSON: loaded, item count, installed ids, updates, what is running, failures, last error |
changed <kind> |
Something was installed outside the shell: reload widget, theme, iris-theme, webapp or all |
inir hub install countdowninir hub openkeyboard
Section titled “keyboard”Keyboard layout switching (Niri only). Cycles through configured keyboard layouts and queries layout info.
inir keyboard |
What it does |
|---|---|
switchLayout |
Switch to next keyboard layout |
switchLayoutPrevious |
Switch to previous keyboard layout |
getCurrentLayout |
Get the current layout name |
getLayouts |
Get all configured layout names (JSON array) |
Mod+Alt+K { spawn "inir" "keyboard" "switchLayout"; }livePins
Section titled “livePins”Live snips: a part of a window kept on screen, streamed, even when the window is on another workspace (qs-rs on niri).
inir livePins |
What it does |
|---|---|
list |
Every pin as JSON, with live when its window is open |
supported |
Whether this shell can stream windows |
frame |
Pick a window and drag over the part to keep |
pin <windowId> <x> <y> <w> <h> |
Pin that rectangle of the window (its logical pixels); prints the pin’s id |
remove <id> |
Remove a pin |
clear |
Remove every pin |
place <id> <place> |
Where the pin lives |
onTop <id> <on> |
Above the windows, or on the desktop |
move <id> <x> <y> |
Move a pin |
resize <id> <width> |
Resize a pin; its height follows the crop |
activate <id> |
Go to its window, or open the app again |
Lock screen. For when you need to pretend you’re working.
inir lock |
What it does |
|---|---|
activate |
Lock the screen |
prepareSleep |
Suspend handshake: activate immediately and wait until the compositor confirms the session lock is secure |
deactivate |
Cancel lock and mark screen unlocked |
status |
Return lock state (secure, locked, activating, or unlocked) |
focus |
Refocus the lock screen input |
Super+Alt+L allow-when-locked=true { spawn "inir" "lock" "activate"; }loginScreen
Section titled “loginScreen”The login screen you see after starting the computer. It wears your wallpaper and colours.
inir loginScreen |
What it does |
|---|---|
set <look> |
auto (iRiS while you use iRiS, Classic otherwise), classic or iris |
style <name> |
How the iRiS login is composed: cover (your picture sharp, the clock in a corner), frame (the picture hung in a mat) or lens (the time cut out of the picture) |
status |
Print the choice and the look it gives (e.g. auto (iris, lens)), or not installed |
sync |
Copy the current colours, wallpaper and style to the login screen now |
mascot
Section titled “mascot”Playful mascot companion (needs mascot.enable and the companion switch in Settings›Mascot). She peeks from screen edges and reacts to events; every reaction and its pose is configurable in the dedicated Mascot settings page. Never appears over fullscreen apps, game mode, the lock screen or the session screen.
inir mascot |
What it does |
|---|---|
poke |
Ask her to peek from a random edge with a random pose |
status |
Return JSON diagnostics for mood, configured/effective voice, companion state and non-sensitive Screen Time counters |
setVoice <mode> |
Set the idle voice register to adaptive, casual, dry, composed or chaotic |
romp |
Chaos mode: she runs across the desktop and bonks a widget, wrecks one onto the floor, hurls one to a new spot, rampages through several, kicks the bar/dock, or ground-slams so everything rattles. Needs mascot.chaos.enable; widgets only keep new positions with mascot.chaos.allowRearrange |
chase |
Chase game: she hunts your mouse, every click is a spot she pounces on; click her to catch her and win |
hideSeek |
Hide-and-seek: she tucks into a spot on the desktop. Click her before the 20s timeout to find her, otherwise she wins by default |
tidy |
Undo the chaos: every displaced widget returns to its pre-chaos position |
appear <pose> <edge> |
Show a specific catalog pose from left, right, top or bottom |
appearContextual <pose> <sourceWidget> |
Show near the triggering widget (battery, media, update, network, dnd). Requires mascot.companion.contextualPlacement to be enabled for event reactions; this IPC call bypasses that check for testing. |
appearWithLine <pose> <edge> <line> |
Show a specific pose saying an exact line (used by the bar widget easter eggs) |
hide |
Dismiss the peek or active chaos, cancel follow-ups, tidy widgets and pause automatic visits for 30 minutes |
snooze <minutes> |
Dismiss Kira and pause automatic visits for 1–480 minutes |
mascotMood
Section titled “mascotMood”Session-long mood state that flavors the mascot’s idle lines (needs mascot.personality.enabled). The mood re-rolls on a jittered interval and starts from the time of day.
inir mascotMood |
What it does |
|---|---|
set <mood> |
Force a mood: neutral, sleepy, hyper, snarky or contemplative |
current |
Print the current mood |
mediaControls
Section titled “mediaControls”Floating media controls panel.
inir mediaControls |
What it does |
|---|---|
toggle |
Open/close media controls |
close |
Hide media controls |
open |
Show media controls |
memory
Section titled “memory”Memory pressure monitoring for JSGCHeap accumulation (Qt V4 memfd leak). Notifies user when memory is high, lets them decide when to restart.
inir memory |
What it does |
|---|---|
collect |
Force JavaScript garbage collection |
stats |
Return JSON with deleted mappings count, threshold, and state |
restart |
Restart the shell to free accumulated memory |
dismiss |
Dismiss the memory warning notification |
reset |
Reset notification state (re-enables warnings) |
minimize
Section titled “minimize”Window minimization (Niri workaround - moves windows to hidden workspace).
inir minimize |
What it does |
|---|---|
minimize |
Minimize focused window |
minimizeId <windowId> |
Minimize a window by Niri window ID |
restore <windowId> |
Restore a minimized window by ID |
restoreOriginal <windowId> |
Restore a minimized window to the workspace it came from |
Media player control. Automatically detects and uses YtMusic controls when active, otherwise uses the active MPRIS player.
inir mpris |
What it does |
|---|---|
pauseAll |
Pause all players |
playPause |
Toggle play/pause (uses YtMusic if active) |
previous |
Previous track (uses YtMusic if active) |
next |
Next track (uses YtMusic if active) |
select <which> |
Hand the controls to another player: next, prev, or part of its name (spotify, firefox) |
Ctrl+Mod+Space { spawn "inir" "mpris" "playPause"; }Mod+Alt+N { spawn "inir" "mpris" "next"; }Mod+Alt+P { spawn "inir" "mpris" "previous"; }network
Section titled “network”Whether the shell can reach the internet, as NetworkManager sees it. Surfaces that show online content (wallpaper sources, news, anime, weather, calendars, lyrics) read this to say why they are empty instead of failing quietly.
inir network |
What it does |
|---|---|
status |
Print the state as JSON: online, connectivity (full, limited, portal, none, unknown), connection name |
check |
Ask NetworkManager to check connectivity again, for example after signing in to a captive portal |
simulate <state> |
Pretend the connectivity is none, limited, portal or full until the shell restarts; any other value clears it. For testing |
simulateLink <spec> |
Pretend the link is "wifi 40" (a signal strength), searching, connecting, "radio off", ethernet or none (no adapter) until off or a restart. For testing |
niriAnimations
Section titled “niriAnimations”Presets for Niri’s own window, workspace and overview animations. Applying one rewrites the animations in config.d/60-animations.kdl and keeps off and slowdown as they were. The same picker lives in Settings in every family. Your own presets go in ~/.config/inir/niri-animation-presets.json as {"presets": [...]}, in the same shape as defaults/niri-animation-presets.json; one with a shipped id replaces it.
inir niriAnimations |
What it does |
|---|---|
list |
List the presets; * marks the one your config matches |
active |
Print the preset your config matches, or custom after hand edits |
apply <id> |
Apply a preset: snappy, niri, material, bouncy, gentle, instant or one of yours |
Super+Alt+A { spawn "inir" "niriAnimations" "apply" "snappy"; }notifications
Section titled “notifications”Notification management.
inir notifications |
What it does |
|---|---|
test |
Send test notifications |
clearAll |
Dismiss all notifications |
toggleSilent |
Toggle Do Not Disturb mode |
invokeAction <identifier> |
Press a button on the newest notification that has it, as a click would (e.g. open on a new iNiR notice) |
Niri-only session navigator. On ii it presents nearby workspaces and readable window previews, with MRU Trail navigation and temporary Stash parking. On iRiS it is the Island growing into one strip per workspace, with a search that lights up the windows that match; stage, orbital, studio and toggleView are ii’s and do nothing there, pocket and find open Orbit, and next and previous move Niri to the workspace below or above.
inir orbit |
What it does |
|---|---|
toggle |
Open/close Orbit |
close |
Close Orbit if it is active |
open |
Open Orbit on the focused output |
pocket |
Open Orbit directly into Pocket |
studio |
Open Orbit directly into the live Studio editor |
find <query> |
Open Orbit Focus Lens and filter session windows by app or title |
stage |
Open Orbit in the classic Stage view for this session |
orbital |
Open Orbit in the Orbital workspace view for this session |
next |
Switch Niri to the next workspace while Orbit stays open |
previous |
Switch Niri to the previous workspace while Orbit stays open |
status |
Print the effective Orbit runtime state used by diagnostics and visual audits |
toggleView |
Switch the open Orbit session between Stage and Orbital |
On-screen feedback for any family. The active family’s OSD or Island decides where it is drawn.
inir osd |
What it does |
|---|---|
volume |
Show the volume level |
brightness |
Show the brightness level |
mic |
Show the microphone level |
keyboard |
Show the keyboard layout |
media <action> |
Show now playing with a transport action: play, pause, next or previous |
hide |
Hide whatever is showing |
Mod+Shift+K { spawn "inir" "osd" "keyboard"; }osdVolume
Section titled “osdVolume”On-screen volume indicator.
inir osdVolume |
What it does |
|---|---|
trigger |
Show volume OSD |
hide |
Hide volume OSD |
toggle |
Toggle volume OSD |
On-screen keyboard.
inir osk |
What it does |
|---|---|
toggle |
Show/hide on-screen keyboard |
close |
Hide on-screen keyboard |
open |
Show on-screen keyboard |
overlay
Section titled “overlay”Floating tools (Super+G): notes, images, crosshair, recorder, resources and other pinnable desktop tools.
inir overlay |
What it does |
|---|---|
toggle |
Open/close Floating tools |
tool <identifier> <action> |
Show or hide one floating tool by id (crosshair, fpsLimiter, floatingImage, recorder, resources, notes, discord, volumeMixer, notifications, gamePerformance): on, off or toggle |
Super+G { spawn "inir" "overlay" "toggle"; }overview
Section titled “overview”Toggle the workspace overview panel. The one with all your windows looking tiny and organized.
inir overview |
What it does |
|---|---|
toggle |
Open/close overview |
close |
Close overview |
open |
Open overview |
toggleReleaseInterrupt |
Clear the super-key release interrupt flag |
clipboardToggle |
Open clipboard search, or close if already open |
actionOpen |
Open overview in action search mode |
Mod+Space { spawn "inir" "overview" "toggle"; }packageSearch
Section titled “packageSearch”Package search service. Searches pacman/AUR or XBPS repositories and installed packages.
inir packageSearch |
What it does |
|---|---|
search <query> |
Start a package search |
results |
Print current search results |
panelFamily
Section titled “panelFamily”Switch between the three shell families: Material ii (default), Waffle (Windows 11-like), and iRiS (the Island family).
inir panelFamily |
What it does |
|---|---|
cycle |
Switch to the next family in the switch list (familyCycle, in its order; all three by default, set in any family’s Settings) |
set <family> |
Set specific family (“ii”, “waffle”, or “iris”) |
Mod+Shift+W { spawn "inir" "panelFamily" "cycle"; }privacy
Section titled “privacy”Who is using the microphone, the camera or the screen (PipeWire links, V4L2, niri screencasts). simulate lets you see the marks without one.
inir privacy |
What it does |
|---|---|
status |
Print the apps using the mic and camera and every screencast with who watches it, as JSON |
simulate <spec> |
Pretend an app uses something until the shell restarts: "mic Discord", "camera Zoom", "cast OBS", or off. For testing |
recordingOsd
Section titled “recordingOsd”Screen recording floating pill OSD. Shows elapsed time and stop button during active recording.
inir recordingOsd |
What it does |
|---|---|
toggle |
Stop the current recording (if active) |
show |
Reveal the recording OSD pill |
hide |
Collapse/hide the recording OSD pill |
region
Section titled “region”Region selection tools. Screenshots, OCR, recording. Draw a box, get stuff done.
inir region |
What it does |
|---|---|
screenshot |
Take a rectangular region screenshot |
search |
Image search (Google Lens) |
googleLens |
Start a region capture for Google Lens |
ocr |
OCR text recognition |
record |
Record region (no audio) |
recordWithSound |
Record region with audio |
menu |
Open the unified snip menu, optionally restoring its last toolbar choice |
pin |
Pin part of a window live: pick the window, drag over the part to keep (qs-rs on niri) |
dismiss |
Close the selector overlay |
current |
Return the selector state (open/action/mode) as JSON |
Super+Shift+S { spawn "inir" "region" "screenshot"; }Super+Shift+X { spawn "inir" "region" "ocr"; }Super+Shift+A { spawn "inir" "region" "search"; }Ctrl+Shift+S { spawn "inir" "region" "menu"; }search
Section titled “search”Waffle start menu / search.
inir search |
What it does |
|---|---|
toggle |
Open/close start menu |
close |
Close start menu |
open |
Open start menu |
session
Section titled “session”Power menu. Logout, suspend, reboot, shutdown. The “I’m done for today” buttons.
inir session |
What it does |
|---|---|
toggle |
Open/close session menu |
close |
Hide session screen |
open |
Show session screen |
Super+Shift+E { spawn "inir" "session" "toggle"; }settings
Section titled “settings”Open or toggle the settings window. GUI config so you don’t have to edit JSON by hand.
inir settings |
What it does |
|---|---|
open |
Open the settings window |
toggle |
Toggle settings in the active host (overlay or window) |
openOverlay |
Switch to overlay mode and open Settings |
openOverlayAt <index> |
Switch to overlay mode, open Settings and keep the page, or jump to a page by its number |
openWindowAt <index> |
Switch to standalone Window mode and open page index |
setOverlayStyle <style> <index> |
Kept for scripts from before Settings had one layout: opens the overlay at page index |
Super+Comma { spawn "inir" "settings"; }settingsNav
Section titled “settingsNav”Navigate the settings overlay to a specific page (same as clicking the nav rail). inir settings toggles the current Settings host; use the settings IPC target above when you need explicit open/toggle semantics.
inir settingsNav |
What it does |
|---|---|
page <index> |
Open the overlay and jump to a page by its number |
section <index> <name> |
Open a page at its named section; for example inir settingsNav section 28 sidebars |
open <key> |
Open a page by its name in the family’s own Settings, for example inir settingsNav open hub |
count |
Number of settings pages |
current |
Current page index, or -1 when no page is open |
inir ipc settingsNav page 5shellLayout
Section titled “shellLayout”Dedicated persistent-shell layout editing and diagnostics. It is independent from desktop widget edit mode. It moves the ii bar and dock, swaps semantic ii sidebars between physical edges, resizes sidebar roles, and moves the Waffle taskbar through validated operations over canonical Config keys.
inir shellLayout |
What it does |
|---|---|
toggle |
Enter or leave shell edit mode |
open |
Enter shell edit mode on the focused output |
openOn <outputName> |
Enter shell edit mode on a named output |
close |
Leave shell edit mode and clear transient selection |
select <surfaceId> |
Select a surface for deterministic editing or diagnostics |
lift <surfaceId> |
Select and lift a surface for placement |
preview <slot> |
Preview a legal slot without writing Config |
place <slot> |
Commit the lifted surface to a validated slot; occupied sidebar edges require the same call twice |
cancel |
Cancel the current lift, preview, confirmation or gesture |
dragStart <surfaceId> |
Lift a surface and start a pointer-style drag |
dragUpdate <x> <y> |
Feed screen coordinates to the active drag; previews the nearest legal edge |
dragEnd |
Drop the dragged surface: commits the previewed edge (occupied sidebar edges swap directly) or cancels in the center |
reset <surfaceId> |
Restore one surface to its default placement and supported dimensions |
setProperty <surfaceId> <key> <value> |
Set a supported surface property (sizeMode, sidebar height, sidebar thickness, or dock thickness) |
handleEscape |
Apply editor Escape priority: cancel pending work, then leave edit mode |
status |
Return edit-session, host diagnostics and active-family surface descriptors as JSON |
validate <surfaceId> <slot> |
Validate a surface and slot combination without changing Config |
inir shellLayout openinir shellLayout lift featureSidebarinir shellLayout preview rightinir shellLayout place right # prepares the occupied-edge swapinir shellLayout place right # confirms and commits itinir shellLayout setProperty featureSidebar sizeMode fitinir shellLayout reset featureSidebarinir shellLayout closeSuper+W { spawn "inir" "shellLayout" "toggle"; }shellUpdate
Section titled “shellUpdate”Shell update checker. Monitors the git repo for new commits and shows an update overlay.
inir shellUpdate |
What it does |
|---|---|
toggle |
Open/close update overlay |
open |
Open update overlay |
close |
Close update overlay |
check |
Check for updates now |
performUpdate |
Run the update |
dismiss |
Dismiss update notification |
undismiss |
Un-dismiss update notification |
diagnose |
Dump update state as JSON |
simulate <state> |
on fakes a pending update to see the bubble, card and notification, off clears it; git and config are untouched and Update only plays a pretend run in the terminal. For testing |
sidebarLeft
Section titled “sidebarLeft”Left sidebar: AI chat and apps in Material; the customizable Focus panel in iRiS. In iRiS, open, close and toggle use the family-owned panel; AI detach and expanded-layout actions apply to Material.
inir sidebarLeft |
What it does |
|---|---|
toggle |
Open/close left sidebar |
close |
Hide left sidebar |
open |
Show left sidebar |
expand |
Open the sidebar in its wide Ctrl+O layout |
compact |
Return the sidebar to its normal width |
status |
Return open, expanded and detached state as JSON |
detach |
Move AI chat into its Ctrl+P standalone window |
attach |
Return AI chat from the standalone window to the sidebar |
sidebarRight
Section titled “sidebarRight”Right sidebar: quick toggles, notepad and settings in Material; the customizable Today panel in iRiS.
inir sidebarRight |
What it does |
|---|---|
toggle |
Open/close right sidebar |
close |
Hide right sidebar |
open |
Show right sidebar |
taskview
Section titled “taskview”Compatibility entry point for task navigation. On Waffle it opens the Waffle Task View; on ii/Niri it routes to Orbit.
inir taskview |
What it does |
|---|---|
toggle |
Open/close the active family’s task navigator |
close |
Close the active family’s task navigator |
open |
Open the active family’s task navigator |
tiling
Section titled “tiling”Tiling layout overlay. Pick or cycle through tiling presets for the current workspace.
inir tiling |
What it does |
|---|---|
toggle |
Open/close tiling picker |
open |
Open tiling picker |
hide |
Close picker and OSD |
cycle |
Cycle to next tiling preset (shows OSD) |
showOsd |
Flash the current tiling preset OSD |
promote |
Promote focused window to master position |
The pomodoro, countdown and stopwatch every family shows (iRiS draws them as Live Activities in the Island).
inir timer |
What it does |
|---|---|
status |
Print each timer’s state and what is left, as JSON |
countdown <seconds> |
Set the countdown to that many seconds and start it; on a running one, pause or resume |
pomodoro |
Start the pomodoro, or pause/resume it |
stopwatch |
Start the stopwatch, or pause/resume it |
stop |
Stop every running timer |
Takes back the last removal (a clock, a preset, a clipboard entry, an autostart entry…) while its notice is up.
inir undo |
What it does |
|---|---|
undo |
Undo the last removal; returns what came back, or “nothing to undo”. |
status |
What undo would take back right now, or “” when nothing. |
voiceSearch
Section titled “voiceSearch”Provider-neutral voice input for web search and AI dictation. Auto prefers local whisper.cpp, then connected Groq, Gemini and OpenAI speech backends. Keys stay in the system keyring and are passed to adapters through the process environment.
inir voiceSearch |
What it does |
|---|---|
start |
Start recording for voice web search |
stop |
Stop the active recording or transcription |
toggle |
Toggle recording |
refresh |
Re-detect local and connected speech backends |
status |
Return backend, local detection, recording and error state as JSON |
Super+Shift+V { spawn "inir" "voiceSearch" "toggle"; }NetworkManager VPN profiles (OpenVPN, WireGuard, anything with an NM plugin) and Tailscale, as the VPN piece and its card show them.
inir vpn |
What it does |
|---|---|
status |
Print the state as JSON: connected, through what, Tailscale’s state, its devices and how many are online, your profiles |
toggle |
Turn every active VPN off, or connect Tailscale (else your first profile) when none is on |
details <state> |
on, off or toggle the card’s details: addresses, name, account, exit node, devices and live traffic |
refresh |
Read profiles and Tailscale again |
importFile <path> |
Add a WireGuard .conf or OpenVPN .ovpn file as a NetworkManager profile; with no path, open the file chooser (Import a file… in the card) |
add <kind> |
Create a VPN in NetworkManager’s connection editor: wireguard, or vpn for the installed plugins (OpenVPN, L2TP…); nmtui in your terminal when the editor is not installed |
Super+Alt+V { spawn "inir" "vpn" "toggle"; }wallpaperLauncher
Section titled “wallpaperLauncher”Navigation and apply controls for the compact wallpaper launcher.
inir wallpaperLauncher |
What it does |
|---|---|
next |
Select the next wallpaper |
previous |
Select the previous wallpaper |
applyCurrent |
Apply the selected wallpaper and keep the launcher open |
status |
Return launcher mode, index, count, path, target and monitor as JSON |
Open the launcher before calling its controls:
inir wallpaperSelector openLauncher staticinir wallpaperLauncher nextinir wallpaperLauncher applyCurrentwallpaperSelector
Section titled “wallpaperSelector”Wallpaper picker with grid, coverflow and compact launcher styles.
inir wallpaperSelector |
What it does |
|---|---|
toggle |
Open/close wallpaper selector |
open |
Open wallpaper selector |
close |
Close wallpaper selector |
openLauncher <mode> |
Open the compact launcher in static or animated mode |
toggleOnMonitor <monitorName> |
Open wallpaper selector on a specific monitor |
random |
Pick a random wallpaper from the current folder |
next |
Next wallpaper as the desktop menu does it: from the current wallpaper’s folder, or the shuffle’s own folder; prints the file |
shuffle <value> |
A new wallpaper from the folder every few minutes: on, off, a number of minutes (turns it on) or status |
set <path> |
Apply a wallpaper (picture, GIF or video) by path, the same way the picker does |
preview <path> |
Show a wallpaper on the desktop without applying it: no config write, no recoloring |
cancelPreview |
Drop the preview and go back to the applied wallpaper |
browse <source> <query> |
Open the picker on a source — library, favorites, wallhaven, konachan, yandere or live (anime live wallpapers) — with a search, a folder to open (~/Videos), or - for none. Sources are an iRiS feature; other families just open the picker |
favorite <path> |
Heart a wallpaper or take the heart back: a file, or - for the one on the focused screen. Prints added or removed and the path; favourites are a source of the iRiS picker |
favorites |
JSON list of the hearted wallpapers: files, or the page of a web one not downloaded yet |
kind <name> |
Show only one kind of wallpaper in the library: all, still, live (videos) or gif. iRiS only; the filter also sits beside the search field whenever the folder holds more than one kind |
move <step> |
Move the picker’s selection by that many wallpapers, as the arrow keys do (negative goes back); the desktop preview follows. iRiS only, while the picker is open |
status |
Return picker style, open surface, target monitor and selection target as JSON |
Ctrl+Alt+T { spawn "inir" "wallpaperSelector" "toggle"; }Ctrl+Alt+L { spawn "inir" "wallpaperSelector" "browse" "live" "-"; }Ctrl+Alt+A { spawn "inir" "wallpaperSelector" "openLauncher" "animated"; }widgetStacks
Section titled “widgetStacks”iRiS widget stacks: several desktop widgets sharing one place, one page shown at a time. Service: services/DesktopWidgetStacks.qml. Applies while the widgets wear the iRiS design.
inir widgetStacks |
What it does |
|---|---|
status |
Returns JSON: whether stacks are live, each stack’s id, pages in order, rotation, interval, the size classes all its pages share and the page shown on each output |
create <widgets> |
Stack two or more iRiS widgets joined with + (weather+monthCalendar); the first one’s place and size become the stack’s |
add <stack> <widget> |
Add a widget as the last page |
remove <widget> |
Take a widget out; it stays where the stack is and the layout moves it beside. A stack left with one page dissolves |
dissolve <stack> |
Split the stack back into single widgets |
page <stack> <to> |
Show a page: a widget name, next or previous |
move <stack> <widget> <delta> |
Move a page earlier (-1) or later (1) in the order |
rotate <stack> <mode> |
on or off: the stack turns its own pages |
interval <stack> <seconds> |
Seconds between turns (5 to 3600) |
widgetpower
Section titled “widgetpower”Desktop-widget power management (pauses widget rendering on game mode, fullscreen, present windows, or edit mode). Service: services/WidgetPowerManager.qml.
inir widgetpower |
What it does |
|---|---|
status |
Returns JSON: enabled, widgetsActive, pauseReason, and the active triggers (gameMode, fullscreen, windowsPresent, editMode) |
workspaceStrip
Section titled “workspaceStrip”Workspace edge strip. Shows a compact per-workspace rail and expands it for switching without opening the full overview.
inir workspaceStrip |
What it does |
|---|---|
open |
Keep the strip expanded |
close |
Return the strip to hover/peek mode |
toggle |
Toggle forced expansion |
status |
Return strip state (open or auto) |
Super+Tab { spawn "inir" "workspaceStrip" "toggle"; }ytmusic
Section titled “ytmusic”Direct YtMusic player control. Use these if you want to control YtMusic specifically, regardless of what other players are active.
inir ytmusic |
What it does |
|---|---|
playPause |
Toggle YtMusic play/pause |
next |
Play next track in YtMusic |
previous |
Play previous track in YtMusic |
stop |
Stop YtMusic playback |
Mod+M+Space { spawn "inir" "ytmusic" "playPause"; }Screen zoom. Accessibility feature, or for reading tiny UI without pretending your monitor is the problem.
inir zoom |
What it does |
|---|---|
zoomIn |
Increase compositor zoom |
zoomOut |
Decrease compositor zoom |
Material only
Section titled “Material only”equalizer
Section titled “equalizer”Open the ii-family EasyEffects output equalizer. The integration is optional and disabled until you enable it. Run inir settings, then go to Modules → Optional → EasyEffects Equalizer and enable the switch. While it is disabled the IPC target is intentionally not constructed. On a fresh empty EasyEffects output pipeline, iNiR bootstraps a neutral 10-band iNiR Equalizer preset. Existing non-empty effect chains are never replaced automatically.
inir equalizer |
What it does |
|---|---|
toggle |
Open/close equalizer |
close |
Hide equalizer |
open |
Show equalizer |
refresh |
Refresh EasyEffects equalizer state |
ensure |
Ensure Equalizer control is available; bootstraps a neutral Equalizer only when the output pipeline is empty |
status |
Return current equalizer state as JSON |
setBand <index> <gain> |
Set one 0-based band gain in dB |
preset <name> |
Apply one built-in EQ preset |
configure |
Convert the active Equalizer to the iNiR 10-band layout |
Ctrl+Alt+F { spawn "inir" "equalizer" "toggle"; }The pill bar’s morphing surfaces (only registered while Bar appearance is set to Pill). Valid surface names: power, media, battery, calendar, link, mixer, sysmon, clipboard, glance, launcher, recorder.
inir pill |
What it does |
|---|---|
open <surface> |
Open a surface by name on the focused monitor |
close |
Close the open surface |
toggle <surface> |
Open a surface, or close it if already open |
state |
Print the open surface name, or closed |
Super+V repeat=false { spawn "inir" "pill" "toggle" "clipboard"; }Waffle only
Section titled “Waffle only”wactionCenter
Section titled “wactionCenter”Waffle action center (quick settings).
inir wactionCenter |
What it does |
|---|---|
toggle |
Open/close action center |
close |
Close action center |
open |
Open action center |
waffleAltSwitcher
Section titled “waffleAltSwitcher”Waffle Alt+Tab window switcher. Separate from the ii altSwitcher, supports quick-switch (first tab switches instantly, second opens UI) and no-visual-UI mode.
inir waffleAltSwitcher |
What it does |
|---|---|
open |
Open switcher |
close |
Close switcher |
toggle |
Toggle switcher |
next |
Focus next window |
previous |
Focus previous window |
Waffle taskbar visibility.
inir wbar |
What it does |
|---|---|
toggle |
Show/hide taskbar |
close |
Hide taskbar |
open |
Show taskbar |
wnotificationCenter
Section titled “wnotificationCenter”Waffle notification center.
inir wnotificationCenter |
What it does |
|---|---|
toggle |
Open/close notification center |
close |
Close notification center |
open |
Open notification center |
wwidgets
Section titled “wwidgets”Waffle widgets panel.
inir wwidgets |
What it does |
|---|---|
toggle |
Open/close widgets |
close |
Close widgets |
open |
Open widgets |
iRiS only
Section titled “iRiS only”iRiS bar and Island design. Available while the iRiS bar is enabled.
inir iris |
What it does |
|---|---|
open |
Expand the island on the focused output |
page <name> |
Expand the island on a page: media, activity, desktop, tray or tools, or step through its navigation with next / prev (the same path as scrolling over the navigation row) |
close |
Collapse the island |
shelf <action> |
open, close or toggle the Island’s Shelf page (open on another page counts as closed) |
toggle |
Expand or collapse the island on the focused output |
card <action> |
open, close or toggle the media bubble’s floating card, or pin to keep it open |
theme <action> |
iRiS themes, each a whole redesign of the family: list, apply:<id>, save:<name> (what you see now becomes a theme file), import:<path> (a shared .json), export or export:<id> (prints the theme as JSON to share) and folder (where theme files live, ~/.config/inir/iris/themes) |
settings <section> |
Open iRiS Settings on a section: general, appearance, motion, bar, bubbles, dock, desktop, windows, sidebars, controlCenter, spotlight, orbit, notifications, sound, capture, display, keyboard, battery, gaming, lock, player, anime, sources or system; add /<group> to open that group, e.g. bubbles/behaviour or lock/security. It also takes next, prev, back, forward (the history), search:<words> and open (the first result), and tune:open / tune:close (every Fine-tune fold on the page) |
settingsClose |
Close iRiS Settings in either host, over the desktop or as a window; a bare inir settings is a toggle |
bubble <slot> <place> |
Place an Island bubble (left, right, utility) or an extra bubble (weather, notifications, controls, sound, mic, tools, media, visualizer, tray): a zone (top-left, top-right, left, right, bottom-left, bottom-right, or down and up a side from its corner: left-top, left-bottom, right-top, right-bottom), edge:<top|bottom|left|right> with an optional :<fraction> along that edge (e.g. edge:top:0.3), x,y fractions of the output, island (slots) or off (extras) |
dock <action> |
reveal, hide or toggle the iRiS Dock (revealed stays until hidden or an app is chosen) |
dockApp <appId> <mode> |
Open a Dock app’s windows or menu by app id (e.g. kitty windows), pin to keep it in the Dock or unpin it (prints which), or <any> close |
dockMove <appId> <position> |
Move a Dock app to a position, counting icons from 1 with the separator between pinned and open apps (e.g. firefox 2): before the separator pins it, after it lines it up among the open apps |
appBubble <appId> <place> |
Carry a Dock app out as a bubble of its own (e.g. kitty right): a zone, x,y fractions of the output, or dock to send it back |
focus <action> |
open, close or toggle the Focus panel (the left one), and say whether it is open |
today <action> |
open, close or toggle the Today panel (the right one), and say whether it is open |
controlCenter <action> |
open, close or toggle the Control Center, and say whether it is open |
pin <side> |
Keep the left (Focus) or right (Today) panel open beside windows, or stop |
layout <name> |
How the Island sits on its edge: island, left, right, full or menubar (top or bottom) |
strip <name> |
What the menu bar lays under its items: transparent (on the wallpaper) or band |
edge <name> |
Move the Island to a screen edge: top, bottom, left or right (on a side edge it rests as an upright capsule and its pages grow inward) |
dockEdge <name> |
Move the Dock: auto (opposite the Island), top, bottom, left or right |
zone <name> <kinds> |
What a full-width Island carries in a zone: start, center or end, then kinds joined by + (island, workspaces, window, time or a piece kind), or none |
barPiece <kind> <action> |
Turn one of the Island’s own pieces on or off: weather, notifications, controls, sound, mic, tools, media, visualizer or tray, plus on, off or toggle |
arrange <action> |
Arrange the Island’s desktop page in place — move, remove and add its blocks: on, off or toggle |
edit <action> |
Customize iRiS on the shell itself: the Island grows a capsule (Themes, Look, Pieces, undo, Done) and whatever you click (a piece, the Island, the Dock) grows its own options: on, off, toggle, a sheet (themes, pieces, or a Look tab: material, colour, type, motion, bodies, places, transients, desktop), island, dock or a piece to inspect (vitals, left, app:kitty) |
studio <action> |
Customize as a panel beside the screen (Studio): on, off, toggle, an area to open it on (material, colour, type, motion, island, pieces, bodies, places, transients, dock, desktop, themes) or search:<words> to open it with a search typed |
notch <action> |
Melt the Island into its edge (or into the Surround band): on, off or toggle |
surround <action> |
Close the shell around the screen with a band on every edge: on, off or toggle |
accent <name> |
Set iRiS accent: blue, mint, rose, lilac or wallpaper |
spotlight <query> |
Open Spotlight with a query already typed, e.g. firefox or 12*7 (empty for suggestions); while it is open, replaces the query |
gallerySource <source> <state> |
Show or hide an online source in the wallpaper gallery: wallhaven, live, konachan or yandere, then on, off or toggle; returns the sources shown, in order |
orbit <query> |
Open Orbit with a search already typed, e.g. firefox (empty for all the workspaces) |
orbitCorner |
The corner each output’s Orbit hot corner is on right now, as JSON (empty where Niri’s own corner or the setting leaves none) |
orbitClose |
Close Orbit |
spotlightClose |
Close Spotlight |
bubbleCard <kind> |
Grow a bubble’s own card: weather, notifications, sound, mic, tools or tray (from the bubble showing it, else the Island), or close |
tap <kind> |
Tap a piece the Island carries (controls, sound, tray, notifications, weather…) as a click would: its card or page grows from it, or says the focused screen’s bar has no such piece |
bubbleMenu <kind> |
Open a floating bubble’s own menu — what it opens, where it rests and how to put it away — by kind (weather, sound, …) or piece id (app:kitty) |
morph <name> |
Set how iRiS morphs: direct, liquid, glide, snap, elastic or instant |
activity <action> <id> <value> |
Publish a live activity into the Island from any script: <action> <id> <value> — start <id> <title>, title, progress (0.4, 40, 40% or -1 for indeterminate), detail, glyph (a Material Symbol), tint (blue, sky, teal, green, yellow, orange, red, pink, indigo, purple, lavender, gray), end <id> <detail> (shows a done event and retires), dismiss <id> -, clear all -. Values cannot contain commas |
activities |
Return the live activities scripts have published, as JSON |
set <path> <value> |
Set any iRiS option by path, e.g. iris.appearance.theme.pieceShape squircle or iris.bubbles.scale 120 (values are JSON when they parse) |
adaptive <amount> |
How much the wallpaper shapes iRiS, 0-100; any other word prints what was read from the wallpaper |
tokens |
JSON with the colours iRiS resolved for the current look and the contrast of each text, accent and fill on the surface it sits on (worst case over glass), plus the ones below their target |
options <section> |
JSON with every row iRiS Settings declares in a section (appearance, dock…; empty for all): the paths it writes, whether it is shown now, whether the Design owns it, its value and choices. <section>@<page> lists 40 rows at a time, for sections too long for one reply |
preview <path> <value> |
Apply a value in memory only, the way a Settings slider does while it is dragged; nothing is saved. Returns the value it replaced, as JSON, to put it back |
proof <path> |
Draw every control the active Design skins, in each state a person reaches (rest, pointer, press, keyboard, inactive), and save it as one image at an absolute .png path |
palette <id> |
The colour theme the shell and your apps wear: an id such as catppuccin-mocha or iris-ink, auto to follow the wallpaper, list for the ones iRiS shows, or current for the one in use |
preset <name> |
Set the iRiS appearance preset: iris, soft, round, crisp, angular or contrast |
icon <piece> <glyph> |
Choose the glyph a piece wears: controls, tools, focus, notifications, bluetooth, updates, anime or watching, then a Material Symbol name (e.g. inir iris icon controls settings) or reset to go back to its own face |
control <action> |
Arrange the Control Center in place (drag controls, resize them from a corner, add or take them out): edit, done, toggle, undo, tab:<controls|layouts|panel> to open the side library on that page, expand:<display|system|devices|network|bluetooth|none> to open the Control Center with that expansion unfolded, or a layout (iris, discs, compact, glance, studio, everything) |
lock <action> |
Rehearse the lock screen (the real surface, editable, with nothing to unlock): edit, done, toggle, page:<name> to open the inspector on a page (layouts, scene, type, clock, widgets…), widget:<key> to put a desktop widget on the lock or take it off (clock, weather, monthCalendar…), select:<key> to select one on the lock and open its controls in the inspector (select:<key>/look for shape, material and opacity; /arrange, /widget), select:<block> to take a block (clock, glance, media, activity, session, status), peek and unpeek to see the lock without the handles, or a layout (iris, centered, corner, minimal) |
utility <name> |
Set the utility satellite: tray, tools, sound, mic or none |
watch <which> |
What the Continue bubble has in progress, or resume one of them: no argument lists them numbered with the episode and saved position, a number or part of a title resumes that show. Anything that matches nothing in progress starts a search instead. Only ani-cli can be pointed at one show; jerry and curd run their own picker |
watchPick <value> |
Answer whatever the Continue bubble is asking (which show, which episode, what next once one ends, which quality): no argument lists the options, a number or part of a label chooses one, cancel stops the run |
desktopAction <id> |
Run a desktop menu entry on the focused output as a click would: wallpaper, wallpaperNext (the round button on the wallpaper) or an action id such as nextWallpaper, terminal, screenshot |
desktopMenu <x> <y> |
Open the desktop menu on the focused output at that point, in pixels; no point opens it in the middle |
menuClose |
Close whichever iRiS or shell context menu is open |
watchSubs <command> |
Subtitles of the episode that is playing: size+, size- (kept for every episode), delay+, delay-, delay0 (this episode), off, track:<id>, file:<path> to load one. No argument lists the tracks |
watchSeek <seconds> |
Jump inside the episode that is playing by seconds: 85 skips an opening, -10 goes back |
watchSkip <direction> |
Close the episode that is playing and start the next (default) or previous one without searching again. Its place is saved first |
motion <target> |
Measure how a Place opens, closes and reverses halfway, from the expanded Island: spotlight, orbit, gallery, settings, focus, today or card (the music card). Read the result with motioned |
motioned |
The last motion measurement as JSON: frame pace, continuity, material, one surface, origin and a clean end, each passed or not, with the numbers behind them |
status |
JSON with the Island, Dock, Control Center, Spotlight and side panel state, which edit modes, Settings or the wallpaper gallery hold the screen (editing, settings, gallery), plus the player the Island follows (title, position, length) |
inir iris openinir iris page desktopinir iris toggleinir iris dock toggleinir iris card toggleinir iris bubble right top-rightinir iris appBubble kitty top-rightinir iris pin rightinir iris statusinir iris closeirisDev
Section titled “irisDev”Simulated hands for measuring iRiS (present while iRiS is the family).
inir irisDev |
What it does |
|---|---|
dragSim <slot> <perFrame> |
Simulate carrying an iRiS bubble (slot id, default extra-clock) around the focused output for 2.5 s, publishing the given number of moves per frame (1–16); never writes the config |
dropBubble <slot> <x> <y> |
Drop an iRiS bubble (slot id, or app:<id>) at a point of the focused output, released after 200 ms |
dropSim <count> <keep> |
Hold files over the focused output’s Island for 1.6 s (how many, default 3), then let go so the Shelf keeps nothing: keep shows the notice a real drop gives |
notice <kind> |
Show a sample Island notice of a kind (accessory, battery, charge, focus, silent, unlock, upcoming, rain, timers, recording, shelf, jobs), in the size and for the time Settings chose |
dockSlide <appId> <pixels> |
Slide a Dock icon (app id) along the Dock by the given pixels over 1 s |
inir irisDev dragSim extra-clock 8; inir dev meter 2400; sleep 3; inir dev meteredStandalone Commands
Section titled “Standalone Commands”These are top-level inir commands that work directly, without going through IPC.
colorpicker
Section titled “colorpicker”Launch hyprpicker to pick a color from anywhere on the screen. The hex value is copied to the clipboard (-a flag).
Super+Shift+C { spawn "inir" "colorpicker"; }Requires hyprpicker installed.