Luigit
repositories / dotfiles

dotfiles

bugabingas dorkfiles

owned by admin

quickshell/nuguland/.system/SYSTEM.md

Raw
Rendered preview

SYSTEM

Nuguland

Quickshell 0.3.1 desktop shell for niri, inside the dorkfiles repo. One long-lived QML process per session: ShellRoot, services, per-screen windows, feature surfaces.

QML domain truths:

  • bindings are reactive; imperative assignments destroy them;
  • implicit size flows from children to parents, actual size from parents to children;
  • one mutable state owner per concern, one geometry owner per axis;
  • services live outside per-screen Variants unless duplication is intended;
  • a Loader item does not exist before creation; state that survives reload belongs to a longer-lived owner;
  • PanelWindow cannot be resolved by static tooling; that is an upstream limitation, not breakage.

Ownership split, invariant:

  • service — native integrations, system state, subprocesses, typed properties, intent methods; never geometry or focus.
  • model — pure transformations; testable without QML or compositor.
  • panel — presentation, local cursor and focus state, intent emission, every content state.
  • host — surface creation, placement, lifecycle, focus entry and return, dismissal, animation policy, injection; never feature rendering or feature service logic.

Registration, binding target: one typed QML registry entry per feature covers service, panel, bar control, sizing data, and fixture name. IPC handlers stay explicit and typed in shell.qml. The registry is typed QML, never runtime JSON. Geometry data lives in entries; generic geometry computation stays in the host. Lock and privilege keep specialized controllers; the popup host is a default, not a universal lifecycle.

Boundaries: typed required property injection across components; JSON only at IPC and diagnostics edges; startup composition only.

Docs hierarchy

This System, RULES, and the specs under .system/specs/ are authority. READMEs are human overview and carry no binding rules.

Non-goals

No plugin marketplace, no capability facades, no new theme system, no distribution model, no weakening of isolation or proof.

# SYSTEM

## Nuguland

Quickshell 0.3.1 desktop shell for niri, inside the dorkfiles repo. One long-lived QML process per session: `ShellRoot`, services, per-screen windows, feature surfaces.

QML domain truths:

- bindings are reactive; imperative assignments destroy them;
- implicit size flows from children to parents, actual size from parents to children;
- one mutable state owner per concern, one geometry owner per axis;
- services live outside per-screen `Variants` unless duplication is intended;
- a `Loader` item does not exist before creation; state that survives reload belongs to a longer-lived owner;
- `PanelWindow` cannot be resolved by static tooling; that is an upstream limitation, not breakage.

Ownership split, invariant:

- **service** — native integrations, system state, subprocesses, typed properties, intent methods; never geometry or focus.
- **model** — pure transformations; testable without QML or compositor.
- **panel** — presentation, local cursor and focus state, intent emission, every content state.
- **host** — surface creation, placement, lifecycle, focus entry and return, dismissal, animation policy, injection; never feature rendering or feature service logic.

Registration, binding target: one typed QML registry entry per feature covers service, panel, bar control, sizing data, and fixture name. IPC handlers stay explicit and typed in `shell.qml`. The registry is typed QML, never runtime JSON. Geometry data lives in entries; generic geometry computation stays in the host. Lock and privilege keep specialized controllers; the popup host is a default, not a universal lifecycle.

Boundaries: typed `required property` injection across components; JSON only at IPC and diagnostics edges; startup composition only.

## Docs hierarchy

This System, RULES, and the specs under `.system/specs/` are authority.
READMEs are human overview and carry no binding rules.

## Non-goals

No plugin marketplace, no capability facades, no new theme system, no distribution model, no weakening of isolation or proof.