blog · git · desktop · images · contact
2021-09-19
Vorheriger Blogpost zu diesem Thema.
twtxt ist ein einfaches Format für einen „Microblog“. So ein bisschen wie Twitter oder RSS/Atom-Feeds, aber auf das absolute Minimum reduziert. Seit es in 2016 das Licht der Welt erblickte, hat es sich ein bisschen verändert – hauptsächlich durch Threading, das 2020 von Yarn.social (früher twtxt.net) eingeführt wurde. Es gab in 2016 und den Folgejahren schon so einige twtxt-Clients, aber nach meinem Kenntnisstand wurde keiner von denen dann angepasst, um diese Erweiterung zu unterstützen. Was macht man heutzutage also, wenn man eine hübsche Konsolenexperience mit twtxt haben will?
Eine Möglichkeit ist jenny, was ich selbst auch benutze.
In jennys README sind Einrichtungsanweisungen enthalten, aber ich mache jetzt trotzdem mal ein Walkthrough mit Screenshots dafür.
jenny soll eigentlich auf dem lokalen Rechner laufen und nicht auf deinem Server im Internet, also machst du lokal das hier:
$ git clone https://uninformativ.de/git/jenny.git
$ cd jenny
$ git checkout v22.01
Damit bist du auf der Version, die zum Zeitpunkt des Schreibens dieses
Blogposts aktuell war. In der Zwischenzeit kann es natürlich Änderungen
gegeben haben. Wenn du möchtest, kannst du selbstverständlich auch
neuere Releases oder den aktuellen main
-Stand benutzen, aber dann lies
bitte in CHANGES
nach, was sich seitdem getan hat. Dieser Blogpost
wird nicht an neuere Releases angepasst werden.
Dann die Abhängigkeiten über die Distribution installieren:
# pacman -Syu python-dateutil python-requests
Das sollte jetzt funktionieren:
$ ./jenny --help
Oder man macht irgendwas Verschnörkeltes mit virtualenv oder so.
Man fange mit einer leeren Textdatei auf dem lokalen Rechner an. Nagut, ganz leer ist sie nicht, sondern sie muss mindestens zwei Zeilen an Metadaten enthalten:
# nick = cathy
# url = https://my.server.com/twtxt.txt
Unter der Annahme, dass lokal auf dem Rechner in ~/web/my.server.com
die gesamte eigene Webseite liegt, speichere man den Feed also unter
~/web/my.server.com/twtxt.txt
ab.
jenny wird neue twts dort anhängen. Danach führt es einen Befehl aus, um
die Datei tatsächlich im Internet zu veröffentlichen. Beides muss in der
obligatorischen Config-Datei ~/.config/jenny/conf.json
eingestellt
werden:
{
"maildir_target": "~/Mail/twt",
"local_twtxt_dir": "~/web/my.server.com",
"publish_command": "some-rsync-script"
}
publish_command
ist ein Skript, das du notwendigerweise selbst
schreiben musst, weil es ganz und gar von deinem Setup abhängt. Du
kannst hier einfach scp
benutzen, um die Datei auf deinen Server zu
kopieren, und fertig. Oder du machst git commit
und git push
irgendwo hin. Oder du setzt es eben doch auf /bin/true
, weil du dich
entschieden hast, das hier eben doch alles auf deinem öffentlichen
Server auszuführen. Hängt alles von dir ab.
Sobald das alles erledigt ist, führe man testweise jenny
aus: Es
sollte dich in deinen $VISUAL
-Editor werfen, in dem du einen neuen twt
verfassen kannst. Für den Moment schreibst du einfach hello world
rein
und beendest den Editor. Danach prüfst du in
~/web/my.server.com/twtxt.txt
, ob der neue Eintrag angekommen ist.
Ebenso in https://my.server.com/twtxt.txt
nachschauen, ob er
erfolgreich im Internet gelandet ist.
An diesem Punkt angekommen, kann man nun twts schreiben und veröffentlichen. Aber wahrscheinlich will man auch die Posts anderer Leute lesen. Hier kommt dann mutt ins Spiel.
mutt ist eigentlich ein Mail-Client und hat gar nichts mit twtxt zu tun. Das Ding ist aber, dass mutt sehr gut darin ist, Gesprächsverläufe in Threads anzuzeigen und handzuhaben. Außerdem ist es wunderbar anpassbar. Daher schreibt jenny die daten in ein maildir und mutt arbeitet dann darauf. Normalerweise startet man daher nicht jenny direkt sondern mutt – und das ruft dann jenny auf.
Hier ist eine komplette Konfiguration für mutt mit integrierter jenny
(welches nun im $PATH
enthalten sein muss):
# Strictly necessary or highly recommended.
set mbox_type = Maildir
set sort = threads
set sort_aux = date-sent
set strict_threads = yes
# Optional styling.
color index yellow default ~P
set index_format = "%Z│%-15.15F│%3M│%s %* │%[%Y-%m-%d %H:%M]"
# To highlight messages sent by you.
alternates cathy
# Key binds for jenny: Alt+T to write a new twt, Alt+R to reply to
# thread, Alt+F to reply in a forked thread.
macro index,pager <esc>T "<shell-escape> jenny<Enter>" "Write new twt"
macro index,pager <esc>R "\
<enter-command> set my_pipe_decode=\$pipe_decode nopipe_decode<Enter>\
<pipe-message> jenny<Enter>\
<enter-command> set pipe_decode=\$my_pipe_decode; unset my_pipe_decode<Enter>" \
"Reply to current twt"
macro index,pager <esc>F "\
<enter-command> set my_pipe_decode=\$pipe_decode nopipe_decode<Enter>\
<pipe-message> jenny -t<Enter>\
<enter-command> set pipe_decode=\$my_pipe_decode; unset my_pipe_decode<Enter>" \
"Reply to current twt (fork conversation)"
Und dann kann man mutt aufrufen (hierfür wird man natürlich irgendeinen Shortcut einrichten wollen):
$ mutt -F ~/.muttrc-jenny -f ~/Mail/twt
An Leute, die schon mutt benutzen: Dieses ganze Setup kann unabhängig und parallel zum existierenden mutt-Setup benutzt werden.
Das gibt es seit einiger Zeit auch. Ist aber nicht zwingend nötig für
diese kurze Einleitung, daher sei auf das vim/
-Verzeichnis im Repo
verwiesen, dort gibt es eine README
dazu.
Nach dem Start von mutt sieht man irgendwie sowas:
Diese twts hat jenny erstellt, während ich während der Setup-Schritte herumgespielt habe.
Wählen wir mal den letzten Eintrag aus und drücken Alt+Shift+R
, um zu
antworten. mutt startet jetzt jenny, was einen wiederum in den Editor
wirft:
Man sieht hier unter anderem eine „Snip“-Zeile. Alles darüber wird
dein neuer twt werden. Der Bereich über der Snip-Zeile wird manchmal von
jenny vorausgefüllt. Es ist üblich, in Antworten eine @-Mention des
ursprünglichen Autors zu setzen, was jenny dann automatisch tut. Einen
Subject-Hash wie (#mh4qzda)
, den jenny berechnet, muss man zwingend
benutzen, damit es ein Thread wird. Speichern, beenden, dann sieht man
soetwas:
Man beachte, wie mutt hier auch hübsch einen Thread darstellt.
Neue twts zu schreiben, geht dann ganz ähnlich. Man muss nur den anderen Hotkey in mutt drücken.
Um jemand anderem zu folgen, erstelle man die Datei
~/.config/jenny/follow
. Das Format ist:
$name $url $optionale_flags
Beispielsweise:
sandra https://www.uninformativ.de/twtxt-blog-example.txt
Ja, leider muss der Name des anderen Users in der eigenen Config
auftauchen. Das twtxt-Protokoll sieht nicht zwingend vor, dass alle
Leute eine nick
-Zeile in ihrem Feed haben (aber wenn sie existiert,
wertet jenny sie auch aus).
Die optionalen Flags ignorieren wir jetzt einmal, mehr dazu in der README.
Damit diese Feeds auch tatsächlich abgerufen werden, braucht es noch einen Cronjob, einen systemd-Timer oder irgendetwas anderes, das regelmäßig das hier ausführt:
$ jenny -f
Für dieses Beispiel führen wir jetzt mal jenny -f
manuell aus. Dann
wieder mutt starten und es sollte so aussehen:
Jetzt ergeben auch die Farben Sinn. Gelb sind die eigenen twts. Das „📣“ ist ein Zeichen dafür, dass man selbst hier erwähnt wurde.
Und das war’s dann auch schon. Glückwunsch und Willkommen im Twtiverse!
Wenn du bei twtxt mitmachen willst, ohne selbst großartig etwas zu tun (kein Self-Hosting, keine hübschen nerdigen Terminal-Spielzeuge), dann kannst du einfach einem der existierenden Yarn.social-Pods beitreten, zum Beispiel https://twtxt.net/. Account erstellen, fertig. Dafür gibt es dann sogar eine App für Android oder iOS, nennt sich Goryon.
Aber der Punkt von twtxt ist eigentlich, dass man es selbst hosten kann. Deswegen ist das aus technischer Sicht so einfach. Wenn du also technisch dazu in der Lage bist, solltest du Self-Hosting wählen.
Und wenn du trotzdem keine Lust auf so ein „uraltes“ Konsolenprogramm hast, dann kannst du auch deinen eigenen Yarn.social-Pod für eine Rundumsorgloswebanwendung aufsetzen.