Skip to content

Calendar and settings

Gaps in the Calendar Surface, the Settings window and compositor configuration.

  • kanade niri-config edits single settings in niri’s config.kdl, see CLI and ADR 0119. It does not edit a symlinked or hard-linked config (a dotfile manager’s or Nix’s; read-only for now), /etc/niri/config.kdl (copy it to ~/.config/niri/config.kdl first), a node any included file sets, wherever its include stands (appearance.sync‘s kanade.kdl colors among them: change those in appearance), a node under /-, or repeated nodes (window-rule, layer-rule, output, spawn-at-startup). It reads and writes KDL v1, which niri 26.04 reads, and refuses a config niri rejects. It has no lock against your editor: a save at the same instant as a change is detected and aborts the change, but appearance.sync writes the same file without that check. Settings’ niri page edits the options listed in Settings and no others: no key bindings, window rules, spawn-at-startup or environment yet, and for outputs only a connected monitor’s on/off, mode (from the modes niri lists), scale, transform, variable refresh rate and position; a list option like xkb layouts is one comma-separated text, and a value outside the page’s range (layout.gaps over 128, say) is clamped by the page, though kanade niri-config set takes what niri takes. The page stages its changes and writes them with Save, one change with one backup (Discard drops them); a window closed with changes staged discards them. It says in the footer whether niri reloaded the file, and its Undo takes back the last change written from the window, one change only. niri reloads the file by itself; spawn-at-startup and environment take effect only when niri restarts.
  • The Outputs section of the niri page does not cover custom modes and modelines, mirroring, max-bpc (niri 26.04 does not parse it), or the blocks of monitors that are not connected; edit those in the file. A live change lasts only until niri reloads its config and is written only by Keep; Kanade stopped by SIGTERM or SIGINT during one puts the monitor back first (3 s at most); killed by SIGKILL, or crashed, it puts it back at its next start, not before. A record older than 5 minutes restores the monitor only while it still matches the trial’s applied edits, otherwise it is cleared without changing the monitor. A monitor on a custom mode cannot have its mode tried. Putting a monitor back never turns off the last one that is on. The page does not know a change failed the monitor itself (a mode it lists that the display then shows black): Revert, Esc or the 15 seconds put it back. See ADR 0119.
  • The Settings window is a normal window, so niri tiles it. To float it, add a niri window rule: window-rule { match app-id="kanade" title="Kanade Settings"; open-floating true; }.
  • Settings’ Health page shows what the checks found when it opened or Check again was pressed; it fixes nothing, so each warning says what to run. The first-start notice counts the checks 30 s after Kanade starts, so a service that starts later may be counted missing, and it is told only once, whatever the count.
  • The Calendar Surface changes and removes only the events it added (files in $XDG_DATA_HOME/kanade/events); every other event is read-only there, and nothing is written to Google, a vdir or a subscription. A change keeps what the file holds (a place, a reminder) but there is no way to type a repeat, a place, a reminder or a time zone, and a file with a repeat, several events or a zoned time, or an event that spans several days, ends on a later day, is timed with no end, has seconds in its time or is all-day with a title that starts like a time, is refused for change rather than cut to fit (it can still be removed, unless the file holds another UID’s event too). A change or removal of an event whose file changed since it showed is refused (Changed elsewhere). A removal has no undo. See ADR 0113.