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.