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. |
||
|---|---|---|
| internal | ||
| scripts | ||
| .gitignore | ||
| go.mod | ||
| go.sum | ||
| main.go | ||
| README.md | ||
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_motdkonfiguriert 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 restoremacht 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,
restorekennt 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).