motd-assist/README.md
Tronax d56659e21a
feat: add motd-assist TUI for managing dynamic MOTDs
Initial Go project built with Bubble Tea and Lip Gloss:
- Live preview and management of /etc/update-motd.d scripts
- Embedded presets (ubuntu-default, minimal, server-dashboard)
- Bundled POSIX sh style scripts (brand header, sysinfo panel, footer)
- Snapshot/restore safety around applying changes
- CLI subcommands preview, apply, restore, list-presets
- Unit tests for detect, sanitize, and apply logic
2026-08-24 14:19:28 +02:00

82 lines
3.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# motd-assist
TUI-Tool zur Verwaltung dynamischer MOTDs auf Ubuntu/Debian (`/etc/update-motd.d`)
— geschrieben in Go mit [Bubble Tea](https://github.com/charmbracelet/bubbletea)
und [Lip Gloss](https://github.com/charmbracelet/lipgloss).
## 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
```sh
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
```sh
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)
```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 gebündelte Vorlage (`brand-header`,
`sysinfo-panel`, `footer`).
## Entwicklung
```sh
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).