Files
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

4.2 KiB

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

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 reference Curated reference of niri actions
default-bindings.md reference Default key bindings organized by category
key-bindings-syntax.md reference KDL configuration syntax for key bindings
tips.md howto Practical tips for working with niri
displays.md reference Desk-profile system: EDID-keyed outputs, hotplug auto-switch, portrait transforms, GPU notes
keybindings.md reference GENERATED keybinding cheat sheet (scripts/gen-keybinds.sh)
screenshots.md reference Screenshot bind matrix: flameshot vs niri-native, 2+ output limits, all-monitor capture

See Also