-
-
Notifications
You must be signed in to change notification settings - Fork 0
Configuration
~/.config/synui/synuirc is the compositor's config file. One key = value per
line, # for a comment. It is read at startup and on Super+Shift+R.
Most of these have a panel, and the panel is usually the better door —
Control panel (Super+C) writes settings.state, which is read after
synuirc and therefore wins. This page is the complete list of what the parser
accepts, for the things no panel reaches and for anyone configuring a machine
from a file.
The authoritative copy is the header comment at the top of
synui/src/config.c. If this page and that file disagree, the file is right.
Later sources win:
| compiled defaults | config_set_defaults() |
/etc/synui/synuirc |
system-wide — what the live ISO ships |
~/.config/synui/synuirc |
yours |
the .state files |
written by the panels — settings.state, dock.state, binds.state, power.state, … |
That ordering is why a panel beats a config line: a .state file is a thing you
did, and a synuirc line is a thing you set up.
| Key | Values | |
|---|---|---|
xkb_layout |
us |
The layout synui uses. A comma-separated list (us,no) is a keyboard with more than one: the lock and login screens grow a chip saying which is typing (Super+Space, or click it), and on the desktop it is synctl layout next or a kbd_layout bind. See The Desktop
|
xkb_variant |
colemak |
|
xkb_model |
pc105 |
|
xkb_options |
ctrl:nocaps |
Comma-separated |
xkb_rules |
evdev |
|
repeat_delay |
600 |
ms held before a key repeats |
repeat_rate |
25 |
repeats per second once it does |
numlock |
on off
|
at login |
⚠ The console keymap does not reach Wayland.
vconsole.confis a separate answer — which is why the installer asks once and writes both.
| Key | Values | |
|---|---|---|
accel_speed |
-1.0–1.0
|
0 is the driver's own |
accel_profile |
default flat adaptive
|
the acceleration curve — not the same question as the speed above |
pointer_smoothing |
0–10
|
steadies a shaky or noisy pointer; 0 is off |
natural_scroll |
on off
|
unset follows the device default |
left_handed |
on off
|
swaps the buttons |
tap |
on off
|
tap-to-click |
focus_mode |
click sloppy strict
|
|
focus_delay_ms |
0–3000
|
how long the pointer rests before focus follows |
cursor_theme |
Adwaita |
|
cursor_size |
8–256
|
|
snap_zone |
2–200 px |
how close to an edge a drag arms the snap |
panel_follow_pointer |
on off
|
does a panel open on the pointer's monitor |
focus_mode: Click — only a click focuses. Sloppy and Strict both follow the pointer; over the desktop, Strict drops focus and Sloppy keeps the last window.
accel_profilevsaccel_speed: adaptive moves the cursor further the faster your hand goes, so one movement can be precise and the next can cross the screen; flat is a constant 1:1, which is what a game wants; default leaves whatever libinput picked for the device (for an ordinary mouse, already adaptive).accel_speedonly scales whichever curve is in use — turning the speed up never turns acceleration on, and turning it down never turns it off. A device that supports only one curve ignores the request rather than half-applying it.
pointer_smoothingis synui's own; libinput has no smoothing to ask for. It averages the cursor's path over the last few reports, for a pointer that will not hold still — a low-DPI or worn sensor whose counts rattle, a cheap wireless mouse, an unsteady hand. A smoothed movement arrives late, never short: every delta is paid out eventually and a settle timer applies the remainder one frame after the reports stop, so the pointer still lands exactly where you put it. The cost is latency in proportion — 2–4 takes the wobble out without the cursor feeling detached. The number is a time constant, not a per-report fraction, so it means the same thing on a 125 Hz office mouse and a 1000 Hz gaming one. It reaches the cursor only: a game holding a locked pointer still reads raw motion, and a tablet stays under its stylus.
| Key | Values | |
|---|---|---|
border_width |
0–32
|
|
border_color_norm |
#RRGGBB |
unfocused frame |
border_color_focus |
#RRGGBB |
focused |
border_color_ai |
#RRGGBB |
a window the AI is holding context for |
border_color_warn |
#RRGGBB |
one synguard has flagged |
titlebar_height |
0, or 14–64
|
0 removes it; below 14 there is no room for a button |
titlebar_color / titlebar_color_focus
|
#RRGGBB |
caption, unfocused / focused |
titlebar_text / titlebar_text_focus
|
#RRGGBB |
caption text |
corner_radius |
0–48
|
forced square while maximized |
shadow |
on off
|
|
shadow_color _opacity _blur_sigma _spread _offset_x _offset_y
|
spread is solid shadow before the falloff — what gives it weight |
|
remember_geometry |
on off
|
reopen each app where and how big it was |
⚠ The four border colours are overridden by the theme. Every preset carries its own, so a line here only shows on a desktop whose theme has not spoken — which is none of the fifteen. They are the pre-theme mechanism, kept because a pushed custom palette still uses them.
blur = on|off, then blur_radius (1–20), blur_passes (1–5), blur_noise,
blur_brightness, blur_contrast, blur_saturation, and glass_halo (0–64 —
how far the blur reaches past the window).
Blur frosts what is behind a translucent window. An opaque one costs nothing: there is nothing to see through.
| Key | Values |
|---|---|
anim_window |
fade rise scale none
|
anim_window_ms |
0 jumps straight to the end state |
anim_rise_px |
0–200 — Rise only |
anim_workspace |
fade slide cube none
|
anim_workspace_ms |
a slide wants longer than a fade, a cube longer again |
anim_curve |
linear ease-in ease-out ease-in-out
|
Closing is not animated, and cannot be: the client's buffer is gone the moment it unmaps, so there is nothing left to animate.
workspace_mode — shared (one desktop across every monitor; the default) or
per-monitor (each screen remembers its own, and a switch moves only the
monitor the focus is on). See The Desktop.
gap (0–128), master_factor (share the master window takes), float_inset
(0–40 % kept clear at each edge by the floating grid), float_gap (0–256 px
between those tiles), cascade_stack_max (windows per pile).
transparency = on|off is the master switch for see-through windows — off,
the rest do nothing. Then active_opacity, inactive_opacity, and foot_alpha
for the terminal, which needs its own number because foot and syntty draw their
own background with the glyphs left opaque.
The desktop-wide glass slider and its switches are on The Desktop → Glass.
lock_background (wallpaper colour blur), lock_blur (0–64), lock_dim
(0–100 %), lock_accent.
lock_media (on off — now playing, with ⏮ ⏯ ⏭), lock_weather
(off by default: the only part of that screen that uses the network; the
place is omarchy-weather-location, not a key here), lock_weather_unit
(auto c f), lock_layout (auto on off — the keyboard-layout chip;
auto shows it only when xkb_layout names more than one).
screensaver (on off), screensaver_timeout (idle seconds),
screensaver_interval (5–600 s per slide), screensaver_dir,
screensaver_lock (does dismissing it need the password).
ctlpanel_close, taskmgr_close and calc_close each take window,
clickoff or button.
Window: drag it by the header, click elsewhere freely. Clickoff: it closes the moment you click away.
Escalways closes.
desktop_icons, desktop_icon_arrange (name type date size),
welcome_at_startup, start_overlay, cat + cat_breed,
widget_clock_face (minimal classic roman neon monster), notif_dnd
and theme (one of the fifteen).
The font is one setting, and it is not in this file. Family, point size and text scale live in
~/.config/synui/font.state, which the compositor, the bar, synfiles, syn-settings, syn-disks, syn-update, syn-arsenal and synpkg all read. Set it from the font picker, from Control panel ▸ Appearance, or withsynui-apply-font; whichever you use, the whole desktop moves together.⛔
ui_font =was synui's own copy of the family and is obsolete and ignored as of 0.1.0-472 — it logs a line saying so. It was a second place the font was declared, and it won at the next config load, so a font changed from any other window in the suite moved every application and left the compositor's own dock, panels and window titles on the old face.
effects = on|off is the master switch. Then effect_scanline,
effect_curvature, effect_aberration, effect_bloom, effect_glitch,
effect_phosphor (off amber green white), effect_mono (blend toward
that tint — bloom only bites once this is up), effect_hue and
effect_lift.
Full write-up: Window Effects.
ai_layout — let the AI decide where a new window goes.
ai_ctx_decor — tint a window's border while the AI holds context for it.
| Key | |
|---|---|
power_enabled |
the master switch |
power_dim_timeout |
idle seconds before the screen dims |
power_blank_timeout |
…before it blanks |
power_lock_timeout |
…before it locks. 0 is never, which is what the live ISO sets |
power_suspend_timeout |
…before it suspends |
power_lock_cmd power_suspend_cmd
|
what those two run |
lid_close_action |
on battery |
lid_close_ac_action |
on mains |
lid_close_docked_action |
with an external monitor attached |
Each timeout is measured from the last input event, so they are independent rather than cumulative.
Super+Pedits them live and writespower.state, which then overrides these lines — delete that file to hand control back tosynuirc.
alt_tab_style, alt_tab_preview, alt_tab_minimized (does the switcher
include minimized windows) and alt_tab_all_desktops (does it reach past this
workspace).
Detection, and what gets stood down while a game is running.
| Key | |
|---|---|
game_mode |
the master switch |
game_exclude |
space-separated app_ids that are not games — replaces the built-in list. This is what stops a fullscreen Firefox video suspending the AI |
game_include |
Wayland-native app_ids that are games; also replaces. An allow-list, because "any fullscreen Wayland client" would make every fullscreen video a game |
game_output |
primary focused ask — which monitor a detected game is put on |
game_suspend_ai game_stop_bar game_pause_wallpaper game_quiet_kmod game_drop_effects game_inhibit_idle
|
what to stand down |
game_ai_stop_cmd / game_ai_start_cmd
|
and the command pairs that do it |
game_bar_stop_cmd / game_bar_start_cmd
|
|
game_wp_stop_cmd / game_wp_start_cmd
|
|
game_kmod_quiet_cmd / game_kmod_restore_cmd
|
⚠ Change one of a pair and you must change the other. These are fire-and-forget: a stop that works paired with a start that does not leaves the desktop in the half-state and says nothing.
game_ai_*also needs its/etc/sudoers.dgrant to match the whole command line — synapd is a system unit, so a plainsystemctl stopfrom the session user is bounced by polkit, invisibly.
More on all of it: Gaming.
launcher_style (text logo — the start button), start_menu_style
(menu app-overlay rofi), lock_fingerprint, bar_icon_theme,
record_audio, record_edit, news_source and news_refresh.
wallpaper_output = DP-1 matrix
wallpaper_output_mode = DP-1 fitSame token vocabulary as the global wallpaper / wallpaper_mode, so there is
one thing to learn. Lines are read in order, and an override inherits
whatever the global keys hold when it is first named.
terminal, about_cmd, network_cmd, bar_start_cmd / bar_stop_cmd, and
game mode's game_bar_*, game_wp_*, game_kmod_*, game_ai_* pairs.
⚠ Each pair must match. These are fire-and-forget, so a stop that works paired with a start that does not leaves the desktop in the half-state and says nothing.
bind = super+Return term and unbind = super+Return. tap_key is which
modifier opens the start menu when tapped alone (super ctrl alt shift
none) and tap_action is what it opens. autostart = synui-bar, repeated for
more than one.
⛔
super_spaceis obsolete and ignored, with a line in the journal saying so. Rebind it in the palette (Super+/, thenF2).
Every shipped shortcut: Keybindings.
A few keys are parsed by the compositor and consumed by quickshell, so that each
has one spelling and one clamp: bar_enabled, bar_shell, bar_edge,
bar_opacity, bar_shape, dock_opacity, widget_glass, widget_clock_face.
- The Desktop · The Dock · Keybindings
- Settings — the control panel, which writes most of this for you
Using it
- Installation
- Welcome Guide
- Updating
- Software
- Files
- Settings
- Calendar
- Editor
- Studio
- Terminal
- Keybindings
- Speech and dictation
- Remote Desktop
- Commands
- Configuration
- Nix
- Gaming
- Big Screen
- DaVinci Resolve
- Secure Boot
- Troubleshooting
Customising it
Components
Apps
Hacking on it