Niri Plus / Desktop guide
Components and source ownership
Niri Plus keeps the small shared implementations used by this desktop in a versioned public bundle. This page maps those sources to their downloadable examples, identifies what remains personal configuration, and records the current qualification state. It is a maintenance reference, not a workstation installer.
The selected published 0.4.3 core bundle retains the Network/Audio/Bluetooth
controls, shell and workspace/overview roles from 0.4.1. It adds the matching
SwayNC information/sidebar appearance. Its exact input inventory is frozen in
components/metadata.json at the producer revision linked below. Current
checkout exports can belong to later optional releases; they do not change the
numbered reference selection.
See the release and installation recipe and
implementation receipt.
Components 0.4.3 and SwayNC 0.12.6-18 are delivered through chezmoi on Carbon,
Starship and Snap, as recorded in the separate
managed-host delivery record. The numbered Arch install
target now uses package 0.12.6-18 from fork release 1. The scoped fresh-Arch
checks and native captures remain package 17 evidence. Package 18 retains
package 17's byte-identical runtime paths (src/, data/, meson.build,
unchanged meson_options.txt, man/); the pin reset is not a new full
fresh-Arch or physical replay. See the dated sync receipt.
The completed
0.4.1 replay receipt
and historical 0.4.1 setup guide
remain tied to their original selection. Other dated adoption records retain
the release they qualified.
Direct-control desktop-entry downloads live under
examples/desktop/direct-controls/; the existing entries are frozen 0.3.1
baseline/recovery examples. Downloadable wrappers require the complete sibling
lib/niri_plus_controls package.
Public source and example map
| Module | Canonical source in the 0.4.3 reference bundle | Public examples and downloads | Consumer boundary |
|---|---|---|---|
| Desktop | components/desktop/ |
desktop-session-ready, notify-volume, and desktop-power |
Chezmoi supplies host admission, power policy, package choices and existing service wiring. The two session-readiness downloads come from one source. |
| Shell | components/shell/ |
The Zsh starter, init module, and opt-in fetcher | Chezmoi keeps the personal startup shim, SDK and tool setup, local defaults and history/cache paths. The shared shell also works headlessly without Niri or Wayland. |
| Appearance | components/appearance/ |
The Rofi theme, SwayNC stylesheet, Kitty fragment, and standalone SDDM preview helper | Chezmoi selects the identity and native keys, merges owned preferences, selects machines and owns root installation. |
components/metadata.json at the 0.4.3 producer revision
declares the bundle inputs, public exports and module prerequisites. The
generated files keep their existing public paths. Their source and hashes are
recorded in the example manifest. Portable profiles
remain authored for their intended audience; historical specimens remain
identified as history. Neither is silently regenerated from a selected native
profile.
The appearance module returns desktop, terminal, font and role outputs from the schema-2 identity. Its color code and the identity pin are separate inputs. The SDDM preview helper is a standalone generated file: it can be downloaded and run with an unpacked pinned theme and identity without the Niri Plus checkout. The root installer and activation stay with the private consumer.
Personal and independent owners
Private chezmoi owns Bryan's .zshrc integration, personal environment and
policy, host and utility admission, selected native preferences, monitor
matches, device routes, and privileged greeter installation. Shared code is
staged as ordinary files at their existing targets. Shell startup never
downloads or installs the component bundle. The pinned shell dependency fetcher
is an explicit separate operation.
Shell dependency staging pins upstream text separately from the first-party
release. Powerlevel10k can create nine known .zwc runtime caches. The private
verifier checks each cache's single-file header and layout, then compares every
loaded byte and mode with a fresh native Zsh compilation. It normalizes only
the validated 0–3 unused alignment bytes at the end of each endian half, and
rejects extra caches or changes to loaded code, metadata or mode. This preserves
upstream cache behavior without embedding third-party files in the component
release.
Established projects keep their implementation and release authority:
| Project | Owns |
|---|---|
| SwayNC fork | Notification behavior, dashboard widgets, activation and packaging. Niri Plus provides an appearance stylesheet and assembly guidance. |
| Rofi Plus pickers: SSH, Tmux, Agent | Each picker owns its action protocol, launcher arguments and implementation. Niri Plus documents how to connect them to the desktop. |
| Agent Observer and Mesh Plus | Runtime observation, peer and transport contracts. Desktop admission does not grant routes or move their state into this bundle. |
| Niri, Kanshi, ESP32-RLCD, and 349d | Compositor and output-profile behavior, or independent display and notification-mirror firmware. This repo does not select a machine's monitor matches or hardware routes. |
Immutable bundle and independent selections
The 0.4.3 SwayNC maintenance backport adds an opt-in translucent sidebar with matching information and notification cards. Only the appearance renderer and identity validator change among its 44 runtime payloads; all other 42 match 0.4.2. Its independently pinned identity and host layout select the new appearance. The numbered Arch install now selects this tuple with the authored 0.12.6-18 SwayNC profile. Host delivery and fresh-Arch acceptance remain separate evidence.
The release catalog records immutable published tuples independently of the installation reference and recordings. The published optional session screen includes the 0.9.2 visible-countdown fix in the unified session screen. All six actions execute after their cancellable countdown; Cancel or Escape returns directly to the desktop. The retained manual suspend countdown remains available. The last completed full Arch replay remains the 0.4.1 run. The 0.4.3 reference uses the same pure-black workspace and charcoal overview surround; its changed installation/login/sidebar path and new captures passed scoped qualification. Historical recordings keep their original component tuple and retained identity source in media provenance, with their capture date and component version beside the player.
Published components 0.10.0 add the opt-in Close All utility: one desktop-wide window snapshot followed by ordinary close requests across all workspaces and outputs. Its new helper and Mod+Shift+Q profile are independent selections; Mod+Q and the reference starter stay unchanged. The bundle has 50 payloads, retaining the existing 48 from 0.9.3 unchanged. The release catalog records its immutable adoption tuple; the whole-reference qualification remains independent.
The 0.9.2 update fixes the rendered countdown without changing its timing.
It changes only desktop-suspend among the 48 payloads from 0.9.1; the other
47 payload bytes and modes remain unchanged.
The 0.9.1 update changes only desktop-suspend among the 48 payloads from
0.9.0. Reopening restores the chosen action's focus without starting its timer;
no pending request is persisted. The other 47 payload bytes and modes remain
unchanged.
The optional 0.5.0 manual display-away companion adds a display-off latch for unattended agent work. It can observe input through Niri's input-only Wayland notifications without broader device permissions. The standalone stager verifies the complete 0.5.0 archive but selects only the helper and service, using its separate input pin and the shared archive verifier. Keep the established 0.4.3 core selection for this reference and existing managed consumers; do not replace it with the full 0.5.0 bundle. Consumer admission is independent of the current 0.4.3 Arch reference and its scoped qualification.
The optional 0.8.1 confirmation is selected independently in the same way. It
changes only desktop-suspend and desktop-session-menu among the 47 payload
files from 0.7.0. Its temporary GTK 3/GtkLayerShell overlay guards explicitly
adopted manual shortcuts and Session menu actions; idle, physical power-button, and lid policies retain their native
owners. Keep core and optional Away selections independent when adopting only
this helper. Publication does not establish a machine's physical sleep acceptance.
Published 0.9.0 adds the opt-in unified session screen and a generated portable Niri binding. It reuses the shared guarded action path, adds Logout to that screen, separates Display off from Lock, and keeps legacy invocation available. Its immutable release is recorded in the catalog. It does not establish qualification of the current 0.4.3 Arch reference; the last completed full replay remains 0.4.1, and the selected 0.5.0 Away companion remains independent.
Release 0.8.1 preserves every 0.8.0 payload byte and mode while binding its
manifest to the corrected Git author/committer history. The 0.6.0–0.8.0 tags
also point to identity-corrected commits. Their existing archives and digests
remain unchanged; historical source_commit fields record the original archive
manifests, while identity_corrected_source_commit identifies the corrected
tag commit. Use 0.8.1 for a current deployment bound to the corrected history.
The managed-host producer and consumer record keeps the deployed bundle and independently selected identity distinct from the current Arch reference:
- Version:
0.4.3, API version1, 44 payload files. - Release archive
- Source:
07cf4a393314c195ace7e66d162f21d3a2f73136 - Archive SHA-256:
146b4d4b81dac3804b5836348045b5b89a8fa3c62719b643a90302da8346d87a - Manifest SHA-256:
31a30ac9f11dcb4182e9b0c26e5c33ca741bdb28a2c1a195f298db8ea79dd79b - Identity SHA-256:
c4d61361a61dcd900e23c07d01f02ebe6b326529ccd144e86c7460d672ea1e5e
Adoption can start from a repository clone or from the reviewed release URL and digests above. A consumer verifies the archive, manifest and every listed file before staging it. It then selects modules explicitly and reviews their normal managed targets. The bundle does not contain machine policy, native credentials, third-party source trees or personal host state.
The release pin is separate from other inputs and choices:
- The appearance identity is pinned by its own SHA-256 in
design/identity.json. - Utility entries and the machines allowed to receive them are selected by private chezmoi independently from bundle publication.
- Shell plugin revisions live in
components/shell/pins.json; explicit dependency staging is separate from sourcing Zsh. - Host profiles and native settings remain consumer decisions. Publishing a module does not select it on a machine.
- The 0.5.0 Away companion remains a separate opt-in helper/unit selection; it is not included by selecting the 0.4.3 core. A future single-bundle selection requires a separately qualified next whole bundle and consumer review.
Earlier qualification
The 0.3.1 shell and appearance receipt retains the quiet-read correction, installed prompt and cache checks, and earlier appearance qualification. Its machine-readable record is frozen. Those dated results do not establish current physical-device or human visual acceptance.
Maintenance path
- Edit the canonical owner under
components/, keeping personal policy and independent project behavior with their current owners. - Regenerate public component examples with
python3 scripts/export-components.py --write, then runpython3 scripts/export-components.py --check, the module tests and focused headless checks. - Build the explicitly listed inputs with
python3 scripts/build-components.py --output NEW_DIR --source-commit FULL_COMMIT. Review the deterministic archive and root manifest before publishing a new immutable version. - Update the exact consumer code pin and prepare verified derived files. Review the scoped status, diff and dry run before applying only selected targets.
- Record per-host convergence, repeat behavior and preserved native state separately from isolated rendering or physical acceptance.
Public builds and checks use repository source and declared inputs. They do not need the private chezmoi checkout. There is no broad distribution installer; portable guides and explicit, reviewable consumer steps remain the adoption path.