motd-assist/README.md
Tronax 303c49b484
feat: drop-in support for custom templates
User templates can now be added without rebuilding: drop a script into
~/.config/motd-assist/templates/ and reference it from a preset via
"install": "<filename>". Same-name files override built-ins; new files
are picked up by the running TUI via 'r'. `motd-assist templates` lists
known templates and creates the drop-in directory.

Apply plans now embed the resolved template content (Plan.ResolveContents)
so the sudo/root process never needs to read user config; snapshots store
installed script content so restore works under sudo as well. Validation
rejects plans with unresolved content.
2026-08-31 10:31:58 +02:00

4 KiB
Raw Blame History

motd-assist

TUI-Tool zur Verwaltung dynamischer MOTDs auf Ubuntu/Debian (/etc/update-motd.d) — geschrieben in Go mit Bubble Tea und Lip Gloss.

Features

  • Presets: schnell zwischen MOTD-Stilen wechseln (mitgeliefert: ubuntu-default, minimal, server-dashboard); eigene Presets landen in ~/.config/motd-assist/presets/
  • Live-Vorschau: die aktivierten Scripte werden ausgeführt und farbig in der TUI angezeigt inklusive noch nicht installierter Preset-Scripte und Breitenanpassung
  • Dynamische Erkennung: welche Scripte existieren, welche aktiv sind (Executable-Bit), ob pam_motd konfiguriert ist, Distro/Hostname
  • Gebündelte Style-Scripte: Branding-Header, Sysinfo-Panel (MEM/DISK/LOAD-Balken), dezenter Footer reines POSIX sh, keine Abhängigkeiten
  • Sicherheiten: Script-Inhalte werden nie verändert (nur chmod/rename/install), vor jedem Apply wird ein Snapshot geschrieben, motd-assist restore macht ihn rückgängig

Installation

go build -o motd-assist .        # oder: go install motd-assist@latest
sudo cp motd-assist /usr/local/bin/

Bedienung (TUI)

motd-assist startet die TUI. Lesen und Vorschauen geht ohne Root; erst beim Anwenden (a) erscheint die sudo-Passwortabfrage.

Taste Funktion
tab / shift+tab zwischen Presets · Scripten · Vorschau wechseln
j/k, / auswählen
enter / space Preset laden · Script an/aus
u / d Script in der MOTD-Reihenfolge nach oben/unten
a Änderungen anwenden (sudo)
esc ausstehende Änderungen verwerfen
s aktuellen Zustand als Preset speichern
D ausgewähltes Preset löschen (nur eigene)
r Systemzustand neu einlesen
? Hilfe · q beenden

CLI

motd-assist preview [-w 72]   # aktuellen MOTD rendern und ausgeben
motd-assist list              # Scripte + Zustand anzeigen
motd-assist presets           # verfügbare Presets auflisten
motd-assist apply <preset>    # Preset anwenden (fragt ggf. sudo-Passwort)
motd-assist restore           # letzten Apply zurücksetzen

Preset-Format (JSON)

{
  "name": "mein-preset",
  "description": "Kurze Beschreibung",
  "scripts": [
    { "name": "00-header", "enabled": false },
    { "name": "10-brand-header", "enabled": true, "install": "brand-header" },
    { "name": "95-footer", "enabled": true, "install": "footer" }
  ]
}

Die Array-Reihenfolge bestimmt die MOTD-Reihenfolge. Nicht gelistete System-Scripte bleiben unverändert; nicht mehr benötigte gebündelte Scripte werden beim Preset-Wechsel entfernt. install referenziert eine Vorlage siehe nächster Abschnitt.

Eigene Vorlagen (Drop-in)

Vorlagen, die Presets über "install" referenzieren, können ohne Rebuild ergänzt werden: Datei in den Drop-in-Ordner legen, fertig.

motd-assist templates          # zeigt Ordner (legt ihn an) + bekannte Vorlagen
~/.config/motd-assist/templates/mein-header      # eigene Vorlage (POSIX sh)

Anschließend im Preset referenzieren:

{ "name": "10-mein-header", "enabled": true, "install": "mein-header" }
  • Der Dateiname im Drop-in-Ordner ist der Vorlagenname; gleichnamige Dateien überdecken die Built-ins (brand-header, sysinfo-panel, footer).
  • Neue/geänderte Vorlagen übernimmt die laufende TUI mit r.
  • Installierte Scripte aus Vorlagen gelten als von motd-assist verwaltet (Preset-Wechsel räumt sie wieder ab, restore kennt ihren Inhalt).
  • Technisch: Der Apply-Plan bettet den Vorlageninhalt ein. Das Auflösen passiert im unprivilegierten Kontext; der sudo-Prozess muss die User-Konfiguration nicht lesen können.

Entwicklung

go test ./...                 # Unit-Tests (Logik plattformneutral)
MOTD_ASSIST_ROOT=<dir> go run .   # gegen ein Test-Root laufen lassen

Das Tool zielt auf Linux; Windows-Builds kompilieren, haben aber kein Executable-Bit-Konzept (alles Lesen/Planen funktioniert, Ausführen der Scripte nicht).