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 version 1, 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

  1. Edit the canonical owner under components/, keeping personal policy and independent project behavior with their current owners.
  2. Regenerate public component examples with python3 scripts/export-components.py --write, then run python3 scripts/export-components.py --check, the module tests and focused headless checks.
  3. 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.
  4. Update the exact consumer code pin and prepare verified derived files. Review the scoped status, diff and dry run before applying only selected targets.
  5. 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.

Setup overview →Read on GitHub ↗