Entwicklungslog

FF00 VWM alpha.1: Vom X11-Workaround zur paketierten Anwendung

Die erste öffentliche FF00-VWM-Version überführt einen manuellen Video-Wallpaper-Ablauf in eine klar begrenzte Rust-Anwendung, veröffentlicht reproduzierbare Nix-Paketierung und beginnt die Registrierung bei NUR.

FF00 VWM begann mit einem eng umrissenen Ärgernis: Ein Video abzuspielen ist einfach, doch dasselbe Video auf einem X11-Desktop als Wallpaper zu betreiben, besteht aus vielen kleinen, fehleranfälligen Entscheidungen. Ein Befehl muss die richtige Bildschirmgeometrie kennen, ein Fenster auf der Desktop-Ebene erzeugen, mpv anbinden, einen Skalierungsmodus wählen, das Schliessen des Konfigurationsfensters überleben und später ausschliesslich die eigenen Prozesse beenden. Einmal im Terminal ist das machbar. Nach jeder Anmeldung und für mehrere Bildschirme ist es kein sinnvoller Arbeitsablauf mehr.

Die erste öffentliche Vorschau, 0.1.0-alpha.1, paketiert diesen Ablauf als GTK4- und Rust-Anwendung. Sie behauptet nicht, X11-Wallpaper-Verwaltung sei damit abschliessend gelöst. Sie ist ein dokumentiertes Fundament mit bewusst kleinem Unterstützungsrahmen: Linux x86_64, eine X11-Sitzung, lokale Videodateien, XRandR-Ausgangsnamen und mpv als Medien-Engine.

Inhalt von alpha.1

Die Oberfläche erkennt verbundene XRandR-Ausgänge und zeigt für jeden Bildschirm eine Zuweisungskarte. Über den nativen Dateidialog kann ein lokales Video ausgewählt und mit Fit, Fill, Stretch oder Center dargestellt werden. Jeder Ausgang kann eine eigene Quelle und einen eigenen Darstellungsmodus erhalten.

Das Konfigurationsfenster besitzt das Wallpaper nicht. Es startet einen eigenständigen Renderer-Prozess, wartet auf dessen Bereitschaftsmeldung und kann danach geschlossen werden. Diese Trennung ist wichtig: Das Schliessen eines Einstellungsfensters darf nicht überraschend das von ihm konfigurierte Wallpaper entfernen.

Der Renderer erzeugt das X11-Wallpaper-Fenster direkt und übergibt dessen numerische Fenster-ID an mpv. Er benötigt kein xwinwrap und bittet i3 nicht, ein gewöhnliches Anwendungsfenster nachträglich als Desktop-Objekt zu behandeln. Die Prozessbeziehung bleibt ausdrücklich sichtbar:

GTK-Konfigurationsoberfläche

        ├── startet einen FF00-VWM-Renderer pro zugewiesenem Ausgang
        │       │
        │       ├── erzeugt das X11-Wallpaper-Fenster
        │       └── startet mpv an genau dieser Fenster-ID

        └── darf nach bestätigter Bereitschaft geschlossen werden

Gespeicherte Zuweisungen können bei der X11-Anmeldung wiederhergestellt werden; Autostart bleibt jedoch freiwillig. Die Anwendung speichert genügend Prozessidentität, um die selbst erzeugten Renderer-Gruppen zu beenden und fremde mpv-Sitzungen unangetastet zu lassen. Pfade werden als Argumente und nicht als zusammengesetzte Shell-Befehle übergeben. Dateinamen mit Leerzeichen werden dadurch nicht zu Quote-Problemen, und Mediennamen werden nicht als Shell-Syntax interpretiert.

Die Version enthält siebzehn automatisierte Tests für Konfiguration, Abhängigkeitserkennung, Bildschirmgeometrie, Renderer-Argumente, Prozessidentität, Laufzeitstatus und Autostart-Quoting. Manuelle Veröffentlichungstests ergänzen das reale X11-Verhalten, das ein Unit-Test allein nicht beweisen kann.

Warum die erste Version eine Alpha bleibt

Der Unterstützungsrahmen ist ehrlich, weil die rauen Kanten real sind. XRandR-Ausgangsnamen können sich mit Hardware oder Docks ändern. Hot-Plugging ist noch kein laufend abgleichendes System. Die aktuelle Apply-Schaltfläche einer einzelnen Bildschirmkarte führt durch denselben gespeicherten Konfigurationspfad wie die Gesamtanwendung. Dadurch kann das Anwenden einer Karte alle konfigurierten verbundenen Ausgänge neu starten, obwohl die Statusmeldung die auslösende Karte nennt. Dieses Verhalten ist dokumentiert und soll in einem späteren Oberflächen-Durchgang präzisiert werden.

Ein Bild-Renderer fehlt ebenfalls noch. Die aktuelle Anwendung ist ein Video-Wallpaper-Manager und kein allgemeines Versprechen für jede Quelle oder jede Desktop-Umgebung. Wayland, Netzwerkstreams, Wiedergabelisten, Audio und animierte Bildformate liegen ausserhalb dieser Version.

Reproduzierbare Paketierung vor Bequemlichkeitsversprechen

Das Upstream-Repository enthält einen Nix-Flake mit gesperrtem Abhängigkeitsgraphen. Das Paket baut den Rust-Quellcode, installiert Desktop-Datei und Anwendungssymbol, umschliesst die GTK-Umgebung und stellt mpv im Laufzeitpfad bereit. Auf einem Flake-fähigen Nix-System lautet der direkte Projektweg:

nix profile install 'github:crimsonvariable/ff00-vwm?ref=v0.1.0-alpha.1'

Dieser Installationsweg ist bereits unabhängig von NUR. Er folgt direkt dem Projekt-Repository und bleibt der schnellste Weg zu einer neu markierten Version.

Für bessere Auffindbarkeit stellt nun das getrennte Repository crimsonvariable/nur-packages die Version als konventionelles NUR-Paketset bereit. Der NUR-Ausdruck paketiert keinen veränderlichen lokalen Checkout. Er lädt den unveränderlichen Git-Tag v0.1.0-alpha.1, prüft den Quell-Hash, vendort den exakten Cargo-Graphen, führt alle siebzehn Tests aus und umschliesst das Ergebnis mit seiner Laufzeitabhängigkeit.

Dieses Paket-Repository ist schon vor der Aufnahme in die Registry direkt nutzbar:

nix profile install github:crimsonvariable/nur-packages#ff00-vwm

Am 3. August 2026 wurde das crimsonvariable-Repository mit nix-community/NUR#1190 zur NUR-Registrierung eingereicht. Die Formulierung ist wichtig: Die Einreichung ist offen und wird von NUR geprüft. FF00 VWM darf erst dann als über NUR verfügbar bezeichnet werden, wenn der Pull Request zusammengeführt und das Repository indexiert wurde.

Nach abgeschlossener Registrierung lautet das Paketattribut:

environment.systemPackages = [
  pkgs.nur.repos.crimsonvariable.ff00-vwm
];

NUR passt zu dieser Phase, weil Vorabversionen und Pakete für ein kleineres Publikum indexiert werden können, ohne sie als geprüfte nixpkgs-Pakete darzustellen. Ein späterer Beitrag zu nixpkgs bleibt ein eigener Meilenstein mit einem eigenen Prüfstandard.

Die öffentliche Veröffentlichungsgrenze

Forgejo bleibt die kanonische Quelle. GitHub ist öffentlicher Spiegel und Veröffentlichungsoberfläche. Die markierte Version enthält Quellhistorie, Versionshinweise, ein x86_64-Archiv und Prüfsummen. Die Anwendung ist unter AGPL-3.0-or-later öffentlich; Beitrags- und Urheberrechtsbedingungen sind im Repository und über crimsonvariable.com dokumentiert.

Private Medienpfade, persönliche Konfiguration, erkannter Bildschirmstatus und VPS-Betrieb gehören nicht zum öffentlichen Projekt. Das Repository erklärt die Funktionsweise, ohne den Laufzeitstatus einer einzelnen Maschine zu Beispieldaten zu machen.

Dieser Entwicklungslog ist der erste Eintrag der Feldnotizen dieser Website. Der Text existiert einmal in chronologischer Ordnung und ist über Metadaten mit FF00 VWM, der Nix-Konfiguration und der Portfolio-Website verbunden. Diese Projektseiten können den Eintrag anzeigen, ohne drei getrennte Blogs zu pflegen oder den Text zu duplizieren.

Als Nächstes: Bilder als Darstellungsquellen

Als Nächstes: Eigentumsprüfung härten, danach Bilder

Bevor der Renderer einen weiteren Quellentyp erhält, härtet das erste Update den bestehenden Lebenszyklus. Unabhängige GUI-, Kommandozeilen- und Anmeldewiederherstellungsprozesse müssen Änderungen durch eine eigene Laufzeitsperre serialisieren. Die Abstimmung beim Start muss veraltete Einträge sicher entfernen und einen verwaisten FF00-VWM-Renderer nur dann wiederfinden, wenn anwendungsspezifische Belege das Eigentum nachweisen. Der mpv-Kindprozess wird ausserdem mit --no-config gestartet, damit fremde Benutzer- oder Systemkonfiguration ausserhalb des Wallpaper-Renderer-Vertrags bleibt.

Diese Arbeit steht vor der Bildunterstützung, weil ein weiterer Rendering-Pfad kein bekanntes Lebenszyklus-Rennen vervielfachen soll. Die bestehende Regel bleibt erhalten: FF00 VWM leitet Eigentum nie aus einer breiten Suche nach Prozessnamen ab und signalisiert keine fremde mpv-Sitzung.

Die anschliessende Entwicklungsphase ist die Unterstützung statischer Bilder. Das Ziel ist weder ein Bildeditor noch die Veränderung eines heruntergeladenen Wallpapers auf dem Datenträger. Rotation und Spiegelung sollen reine Darstellungsanweisungen sein:

Quelle dekodieren
    → eingebettete Ausrichtung berücksichtigen
    → gewählte Rotation anwenden
    → horizontal oder vertikal spiegeln
    → Fit, Fill, Stretch, Center oder Tile berechnen
    → in den zugewiesenen X11-Hintergrundbereich rendern

Die ersten garantierten Bildformate sollen PNG, JPEG, WebP und SVG umfassen. Weitere moderne Formate kommen dort hinzu, wo der gesperrte Nix-Decoder-Abschluss sie konsistent bereitstellen und testen kann. Eine heruntergeladene WebP-Datei soll direkt auswählbar sein. Eine Rotation um 90 Grad verändert nur ihre Darstellung auf dem gewählten Bildschirm. Die Originaldatei bleibt Byte für Byte unverändert.

Damit erweitert sich die Produktbeschreibung sinnvoll und kontrolliert: FF00 VWM wird zu einem Bild- und Video-Wallpaper-Manager pro Bildschirm für X11. Video bleibt durch mpv getragen; Bilder erhalten einen eigenen Rendering-Pfad. Dasselbe Zuweisungsmodell, dieselbe Konfigurationsgrenze und dieselben Darstellungsregler pro Ausgang können beide Quellen bedienen.

Die Alpha endet daher mit einer funktionierenden Veröffentlichung und nicht mit einer Behauptung der Fertigstellung. Aus dem manuellen Workaround ist eine paketierte und testbare Anwendung geworden. Die NUR-Registrierung wird geprüft. Die Härtung des Lebenszyklus ist das erste Update; danach werden gewöhnliche und moderne Bilddateien zu Quellen erster Klasse, ohne vorherige Konvertierung oder destruktive Bearbeitung.