Files
command-center/omp-docs/tools/niri/index.md
T
Frank 62a70caebb docs(okf): 53 Obsidian wikilinks become OKF links
`[[page|Label]]` is Obsidian syntax, not OKF. `kb-lint` resolves it Obsidian-style — by
filename, anywhere in the bundle — so it has never tripped the link gate, while every other
consumer of the bundle (an OKF renderer, a Gitea wiki export, `grep` for reachability) sees
bracketed text where a link should be. That is how two generated pages ended up with no
inbound link at all and nobody noticed: the my-first link census of the bundle reported them
as orphans because their only inbound edges were wikilinks.

Mechanical conversion, 52 links across 17 pages, each resolved against the same page set
`kb-lint` uses: an explicit `|Label` is kept verbatim, an unlabelled link takes the target's
frontmatter `title`. Targets are emitted bundle-absolute (`/tools/niri/tips.md`), the form
the spec recommends and the form 99 existing links in this bundle already use.

Two links were `[[index]]`, which resolves by filename to 21 pages — the ambiguity that
filename-resolution invites. Both meant their own directory's index, so both are now written
out in full: `/tools/gitea/index.md`, `/tools/niri/index.md`.

The linter still tolerates wikilinks; whether it should reject them outright is an open
question on #64, because that would replace the two tests pinning today's tolerance.

Refs #64
2026-10-21 02:11:56 -07:00

103 lines
4.2 KiB
Markdown

# Niri Wayland Compositor
Niri is a scrollable-tiling Wayland compositor. Windows are arranged in columns that scroll horizontally. It uses KDL-format configuration with an include-based modular structure.
**Version:** 26.04 (8ed0da4)
**Config:** `~/.config/niri/config.kdl`
---
## Configuration Structure
```
~/.config/niri/
├── config.kdl # Main entry, includes all modules
├── noctalia.kdl # Generated by noctalia (theme colors)
└── cfg/
├── animation.kdl # Spring and curve animations
├── autostart.kdl # Startup applications (noctalia, handy --start-hidden)
├── display.kdl # SYMLINK to the active desk-*.kdl profile (see displays)
├── desk-1-home.kdl # Desk profile: home rig (EDID-keyed)
├── desk-2-portable.kdl # Desk profile: portable monitor (skeleton)
├── input.kdl # Keyboard, touchpad, mouse
├── keybinds.kdl # All key bindings
├── layout.kdl # Gaps, column widths, struts
├── rules.kdl # Window and layer rules
├── switch-events.kdl # Lid-close -> noctalia lock-and-suspend (blankpad)
└── misc.kdl # Environment, cursor, blur
```
## Layout
Column-based scrollable tiling. Columns are cycled with Mod+Left/Right (or Mod+H/L). Windows within columns stack vertically.
| Setting | Value |
|---------|-------|
| **Gaps** | 16px |
| **Center focused column** | Never |
| **Background** | Transparent (for Noctalia wallpaper) |
| **Column presets** | 12.5%, 25%, 33%, 50%, 67%, 75%, 87.5% (Mod+R / Mod+Shift+R) |
## Input
| Setting | Value |
|---------|-------|
| **Focus follows mouse** | Enabled |
| **Workspace back-and-forth** | Enabled |
| **Numlock** | Enabled on startup |
| **Touchpad tap** | Enabled |
## Window Rules
| Rule | Match | Effect |
|------|-------|--------|
| All windows | — | 20px corner radius, clipped |
| Steam (non-window) | `app-id="steam"`, exclude title `Steam` | Open floating |
| Steam notifications | `app-id="steam"`, title `notificationtoasts_*` | Floating, bottom-right |
| Noctalia wallpaper | namespace `noctalia-wallpaper*` | Place in backdrop |
| Noctalia settings | `app-id="dev.noctalia.Noctalia"` | Floating 1080x920 |
| Noctalia layers | namespace `^noctalia-(bar|notification|dock|panel|attached-panel|osd)` | blur xray=false |
## Environment Variables
| Variable | Value | Purpose |
|----------|-------|---------|
| `ELECTRON_OZONE_PLATFORM_HINT` | `auto` | Electron Wayland support |
| `QT_QPA_PLATFORM` | `wayland` | Qt Wayland |
| `QT_QPA_PLATFORMTHEME` | `gtk3` | Qt GTK theme |
| `QT_WAYLAND_DISABLE_WINDOWDECORATION` | `1` | Remove Qt CSD |
| `XDG_CURRENT_DESKTOP` | `niri` | Desktop identification |
| `XDG_SESSION_TYPE` | `wayland` | Session type |
## Animations
| Animation | Type | Parameters |
|-----------|------|------------|
| Workspace switch | Spring | damping-ratio=1.0 stiffness=1000 |
| Window open | Duration | 200ms, ease-out-quad |
| Window close | Duration | 200ms, ease-out-cubic |
| Window movement | Spring | damping-ratio=1.0 stiffness=800 |
| Window resize | Spring | damping-ratio=1.0 stiffness=1000 |
---
## Concept Files
| File | Type | Description |
|------|------|-------------|
| [action-reference.md](/tools/niri/action-reference.md) | reference | Curated reference of niri actions |
| [default-bindings.md](/tools/niri/default-bindings.md) | reference | Default key bindings organized by category |
| [key-bindings-syntax.md](/tools/niri/key-bindings-syntax.md) | reference | KDL configuration syntax for key bindings |
| [tips.md](/tools/niri/tips.md) | howto | Practical tips for working with niri |
| [displays.md](/tools/niri/displays.md) | reference | Desk-profile system: EDID-keyed outputs, hotplug auto-switch, portrait transforms, GPU notes |
| [keybindings.md](/tools/niri/keybindings.md) | reference | GENERATED keybinding cheat sheet (scripts/gen-keybinds.sh) |
| [screenshots.md](/tools/niri/screenshots.md) | reference | Screenshot bind matrix: flameshot vs niri-native, 2+ output limits, all-monitor capture |
---
## See Also
- [noctalia-shell](/tools/noctalia-shell.md) — Desktop shell integration
- [displays](/tools/niri/displays.md) — Multi-monitor desk rig configuration
- [cachyos](/tools/cachyos.md) — Operating system