MIRU-DAEMON(1)
β¨ MIRU-DAEMON(1) β¨
okay so this is the manual for miru-daemon β the Wayland-native screen magnifier and cursor spotlight daemon, and honestly it's giving main character energy π
πΈ NAME πΈ
miru-daemon β the Wayland-native screen magnifier and cursor spotlight daemon π¦
π SYNOPSIS π
miru-daemon [options]
π DESCRIPTION π
miru-daemon is a long-running Wayland client. Like, it just sits there. It connects to the compositor, listens on a Unix socket, and stays completely idle until miructl(1) sends it a command. lowkey the chillest process on your whole system π
On toggle, it captures one frame via wlr-screencopy, shows it in a fullscreen wlr-layer-shell overlay, and lets you zoom, pan, highlight the cursor, draw simple annotations, and open an on-screen help panel. A second toggle (or Esc when help is closed) tears the overlay down. The underlying desktop is not continuously re-captured while the overlay is visible β it's a snapshot, bestie, not a livestream π
Control is only through miructl(1) (toggle / quit). Global hotkeys must be bound in the compositor to run miructl toggle.
β¨ OPTIONS β¨
-h,--helpβ prints usage and dips. βοΈ-v,--versionβ prints the version, then exits.--gen-config,--interactiveβ walk through options and write$XDG_CONFIG_HOME/miru/config.toml. guided tour vibes π§
π COMMANDS (via miructl) π
See miructl(1). Typical usage:
miructl toggle
miructl quit
that's it. that's the whole command set. iconic, honestly π
π ENVIRONMENT π
MIRU_DEBUGβ if set to a non-zero value (e.g.1), print verbose diagnostics (input, zoom, texture upload, annotate/help toggles, and similar). Unset or0for normal logging. it's the "tell me everything" switch πWAYLAND_DISPLAY,XDG_RUNTIME_DIRβ standard Wayland / runtime directory variables. The control socket is$XDG_RUNTIME_DIR/miru.sock.XDG_CONFIG_HOMEβ if set, config is read from$XDG_CONFIG_HOME/miru/config.toml; otherwise$HOME/.config/miru/config.toml.
π¦ CONFIGURATION π¦
Config path, fr fr:
$XDG_CONFIG_HOME/miru/config.toml # or
$HOME/.config/miru/config.toml
The directory and a default file are created on first launch. The file is watched; most options hot-reload without restarting the daemon. no restart required, we love a glow-up in real time β¨
Default:
[zoom]
factor = 2.0
increment = 0.25
max_factor = 10.0
smooth = false
upscale = "bicubic"
[spotlight]
radius = 250
dim = 0.65
softness = 20
animation_speed = 14.0
radius_step = 20.0
[general]
show_cursor = true
status_badge = true
[annotate]
default = "rect"
thickness = 4.0
color = "ff3333"
text_color = "ffd933"
text_size = 1.0
[loupe]
shape = "rect"
[export]
format = "png"
[filter]
default = "none"
[zoom]
factorβ initial zoom on each toggle-on (min1.0).incrementβ zoom step for keys/scroll.max_factorβ maximum zoom.smoothβ interpolate zoom/pan whentrue.upscaleβ Choose betweenlinear/normal/bicubicfor upscaling.
[spotlight]
Cursor Highlight while magnifier is active, toggled with Tab π¦
radius,dim,softnessβ circle size, outside darkness, edge feather.animation_speedβ ease in/out speed for Tab.radius_stepβ step for Shift+Plus/Minus and Ctrl+scroll.
[general]
show_cursorβ hide the hardware cursor while the overlay is active whenfalse(compositor-dependent).status_badgeβ Choose to display the status badge (true/false).
[annotate]
defaultβ Default shape when entering annotation mode.thicknessβ Thickness of the stroke (1-8).colorβ Hex RGB for annotation.text_sizeβ Size of annotation text (0.25-8.0).text_colorβ Hex RGB for annotation text.
[loupe]
shapeβ Default shape when entering loupe mode.
[export]
formatβ File format of exported image.
[filter]
defaultβ The default image filter to apply when the overlay is active.
Full detail (the reading material, iykyk): https://codeberg.org/Vaishnav-Sabari-Girish/miru#configuration
π CONTROLS (while overlay is active) π
- Mouse move β Pan.
- Scroll or
+/-β Zoom. WASD/ arrow keys β Pan (key repeat supported).- Tab β Toggle Cursor Highlight.
- Shift+Plus / Shift+Minus or Ctrl+scroll β Adjust highlight radius.
- Shift+A β Toggle annotate mode (pan frozen; orange frame).
Wβ arrow tool;Rβ rectangle; drag LMB β place;CTRL+Z/Y- Undo/Redo;P- freehand;Cβ clear. Bβ Toggle Status Badge (Displays the zoom factor and the annotation tool chosen).Fβ Shift between different image filters (Normal, Grayscale, Inverted/Negative, High Contrast).- Shift+H or
?β Toggle help panel. Esc closes help first if open. - Shift+E β Export current view to a
.bmpfile. The file is stored at$HOME/Pictures/miru/πΈ - Esc or compositor toggle keybind (
miructl toggle) β Exit magnifier (after closing help if needed).
β SYSTEMD β
Example user unit at ~/.config/systemd/user/miru.service:
[Unit]
Description=Miru Zooming Daemon
PartOf=graphical-session.target
After=graphical-session.target
ConditionEnvironment=WAYLAND_DISPLAY
ConditionPathExists=%h/.local/bin/miru-daemon
[Service]
ExecStart=%h/.local/bin/miru-daemon
Restart=on-failure
RestartSec=1
[Install]
WantedBy=graphical-session.target
then:
systemctl --user enable --now miru.service
Adjust paths if binaries are installed elsewhere. π«Ά
π₯ KEYBINDS (compositor) π₯
Bind a key to miructl toggle in your compositor (Niri, Hyprland, Sway, Mango, etc.). The daemon must already be running β obviously, bestie, you can't poke something that isn't there π
See: https://codeberg.org/Vaishnav-Sabari-Girish/miru#setting-up-a-keybind
πΈ NOTES πΈ
Wayland does not expose a global pointer position while the overlay is inactive. The zoom view prefers the last pointer position from a previous session in the same daemon process when available. so it's a memory thing, not a stalker thing π
Requires wlr-layer-shell-unstable-v1 and wlr-screencopy-unstable-v1.
GNOME (Mutter) and KDE Plasma (KWin) are not supported. π not us being exclusive, it's literally a protocol thing.
π SEE ALSO π
π AUTHORS π
Maintained by Vaishnav Sabari Girish <vaishnav.sabari.girish@gmail.com>.
Sources:
Issues and pull requests: https://codeberg.org/Vaishnav-Sabari-Girish/miru and https://github.com/Vaishnav-Sabari-Girish/miru (The issues are synced)
and that's the whole page, bestie π«Ά this was Miru, dated 2026-10-28, manual MIRU-DAEMON(1) β go forth and magnify, you absolute icon πβ¨
π¦ where this page comes from
- nixpkgs unstable: miru 0.14.0
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms