Skip to content

IPC Reference

Your family

iNiR exposes IPC targets you can call from Niri keybinds, scripts, or your terminal.

Quick discovery: inir help lists all targets, inir <target> --help shows 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 now
inir bind --add Mod+O orbit toggle # saves it; Niri picks it up right away
inir bind --examples # ready binds for your panel family
inir bind --list # the binds you added
inir bind --remove Mod+O

Or 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 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.

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

AltTab window switcher. Works across workspaces, unlike some other implementations we won’t name.

inir altSwitcher What it does
opens <which> Which switcher AltTab 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 AltTab 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"; }

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

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.

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. CtrlF 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

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

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

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

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 history panel. Because CtrlV 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"; }

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

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
}

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"; }

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

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

Wallpaper coverflow (3D card) picker.

inir coverflowSelector What it does
toggle Open/close coverflow selector
open Open coverflow selector
close Close coverflow selector

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

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-schedule
inir dev close
inir dev audit
inir dev audit sidebar-left/ai settings/ai
inir dev audit --all --all-families
inir dev meter 2500; sleep 3; inir dev metered

inir 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.

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"; }

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"; }

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 countdown
inir hub open

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"; }

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"; }

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

Playful mascot companion (needs mascot.enable and the companion switch in SettingsMascot). 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

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

Floating media controls panel.

inir mediaControls What it does
toggle Open/close media controls
close Hide media controls
open Show media controls

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)

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"; }

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

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"; }

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"; }

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

Floating tools (SuperG): 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"; }

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"; }

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

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"; }

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

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 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"; }

Waffle start menu / search.

inir search What it does
toggle Open/close start menu
close Close start menu
open Open start menu

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"; }

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"; }

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 5

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 open
inir shellLayout lift featureSidebar
inir shellLayout preview right
inir shellLayout place right # prepares the occupied-edge swap
inir shellLayout place right # confirms and commits it
inir shellLayout setProperty featureSidebar sizeMode fit
inir shellLayout reset featureSidebar
inir shellLayout close
Super+W { spawn "inir" "shellLayout" "toggle"; }

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

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 CtrlO layout
compact Return the sidebar to its normal width
status Return open, expanded and detached state as JSON
detach Move AI chat into its CtrlP standalone window
attach Return AI chat from the standalone window to the sidebar

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

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 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.

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"; }

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 static
inir wallpaperLauncher next
inir wallpaperLauncher applyCurrent

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"; }

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)

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)

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"; }

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

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 action center (quick settings).

inir wactionCenter What it does
toggle Open/close action center
close Close action center
open Open action center

Waffle AltTab 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

Waffle notification center.

inir wnotificationCenter What it does
toggle Open/close notification center
close Close notification center
open Open notification center

Waffle widgets panel.

inir wwidgets What it does
toggle Open/close widgets
close Close widgets
open Open widgets

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 open
inir iris page desktop
inir iris toggle
inir iris dock toggle
inir iris card toggle
inir iris bubble right top-right
inir iris appBubble kitty top-right
inir iris pin right
inir iris status
inir iris close

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 metered

These are top-level inir commands that work directly, without going through IPC.

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.