Linkdump 09/2026
Important advice: Permission to Hibernate.
You've changed. Which is the only constant in life.
Wie bereits geschrieben, bin ich nach einigem "hin und her", was die Aufgabenverwaltung angeht, wieder bei Taskwarrior gelandet. Ich bin sehr überrascht, wie vieles noch in meinem "Muskelgedächtnis" ist und von mir ohne Nachdenken getippt wird.
Trotzdem hat sich in den vergangenen sechs Jahren eine Menge getan. Mit Version 3 setzt Taskwarrior auf die taskchampion-Bibliothek auf und nutzt im Backend keine ASCII-Dateien mehr, sondern eine SQLite-Datenbank.
Was sich durch diese Entscheidung in jedem Fall deutlich erleichtert hat, ist die Synchronisation zwischen verschiedenen Taskwarrior-Instanzen.
Wenn Ihr Synchronisation einsetzten wollt, müsst Ihr auf allen Clients bis auf einen recurrence=off in Eure Konfigurationsdatei aufnehmen.
Die Synchronisation bei Taskwarrior funktioniert (immer noch) so, dass Ihr eine Aufgabenvorlage anlegt, die nach Ablauf des Wiederholungsintervalls nach einem Aufruf von task eine neue zu bearbeitende Aufgabe generiert. Das passiert nur auf der Instanz auf der recurrence=on (oder "1", das ist der Standard-Wert) gesetzt ist.
Aus diesem Grund empfehle ich einen Taskwarrior Client auf der Maschine laufen zu lassen, auf der der Taskchampion-Sync-Server läuft und nur bei diesem die wiederkehrenden Aufgaben erstellen zu lassen.
Aber jetzt zum Setup. der Sync-Server "spricht" http ohne "s", daher ist es sinnvoll einen Reverse-Proxy davor zu schalten, der die Transportverschlüsselung übernimmt, bei mir ist das Caddy, der kümmert sich auch um die Zertifikate. Die folgende kleine Konfiguration leitet Anfragen an den lokal laufenden Server auf Port 8000 weiter.
Die Installation und den Start des Caddyservers spare ich mir an dieser Stelle.
Ich spare mir bei den Skripten im folgenden auch den Anfang, der bei allen Skripten gleich ist. Ersetzt bitte User durch den Nutzer, unter dem Ihr die Dinge ausführen wollt.
Mit dem Start des newclient-Skriptes könnt Ihr einen neuen User anlegen, ich habe das ausgelagert, weil ich das im Produktivbetrieb nicht mehr möchte.
Auf dem Client müsst Ihr jetzt eine client_id und ein encryption_secret definieren. Für die Client-ID benutze ich uuidgen und für das Secret pwgen -n 32 1.
Mit diesen Informationen könnt Ihr jetzt den Client konfigurieren, dazu die folgenden Zeilen in Eure .taskrc aufnehmen.
Einer ersten Synchronisation steht jetzt nichts mehr im Weg.
Wenn alles geklappt hat, könnt Ihr das laufende Skript newclient.bash beenden.
Das nun folgende Skript startet den Syncserver im "Produktivbetrieb" (Umgebungsvariable CREATE_CLIENTS), die Daten landen in ~/.local/share/taskchampion-sync-server:
Ein Stoppskript hat es natürlich auch.
So, jetzt noch einen User-Service angelegt und später aktiviert (enabled).
So, Endspurt. Als letztes ein kleines Skript, das das task-Kommando aufruft (um wiederkehrende Aufgaben zu erstellen) und danach mit dem Syncserver synchronisiert.
Noch einmal ein Userservice:
Statt einem Cronjob lasse ich diese Aufgabe mit einem systemd-timer-Eintrag erledigen. Ja, alle fünf Minuten, aber das ganze Syncskript läuft nur eine viertel Sekunde.
Rückfragen, Kommentare und Verbesserungsvorschläge gerne in den Kommentaren.
Nach rund sechs Jahren mit verschiedenen Tools habe ich mich entschieden, wieder zurück auf Taskwarrior zu wechseln. Über Taskwarrior finden sich hier im Blog eine Menge Artikel (Tag taskwarrior) und in meinen Vorträgen und Workshops gibt es auch reichlich Informationen. Warum ich gewechselt bin, habe ich "natürlich" auch dokumentiert.
Bei Taskwarrior war ich relativ lange und als ich zu Todoist gewechselt bin, habe ich sehr viele Funktionen vermisst. Meinen Workflow habe ich auf das reduzierte Featureset von Todoist angepasst. Natürlich habe ich auch neue Funktionen bekommen: eine perfekte Synchronisation, die Verfügbarkeit überall und dergleichen mehr.
Das Killerfeature von Taskwarrior, nämlich die Berechnung der Dringlichkeit einer Aufgabe, ist seitens Todoist nie implementiert worden (die wait-Funktion allerdings schon, sie heisst "scheduled").
Die Preiserhöhung bei Todoist hat bei mir allerdings einen Denkprozess angestossen und dafür gesorgt, dass ich nach Alternativen geschaut habe.
Wenn ich darüber nachdenke, dann habe ich herausgefunden, dass ich alle Aufgaben, die ich mobil erfasst habe, einmal nachbearbeiten musste. Sei es, dass ich sie einem Projekt zugewiesen, das Fälligkeitsdatum angepasst oder einen Tag vergeben habe. Daher ist es gar nicht so wahnsinnig wichtig, einen lokalen Client zu haben. Toll wäre es, ein Webfrontend zu haben, um mobil nachschauen zu können.
Nach intensiven Tests mit Super Productivity, Vikunja und Logseq zur Aufgabenverwaltung bin ich von allen nicht zu 100% überzeugt. Alle drei haben Stärken und Schwächen. Zum Teil Stärken, die ich nicht brauche, und Schwächen, die mir wehtun. Logseq werde ich weiterhin für Notizen benutzen, aber nicht zur Aufgabenverwaltung.
Jetzt habe ich Taskwarrior auf einer VM mit Fedora installiert (ich nutze nur das paketierte Tool) und zusätzlich als Frontend Taskwarrior WebUI um auf Systemen ohne ssh-Client (insbesondere mobil) zugreifen zu können. Das WebUI muckt manchmal ein wenig und es scheint auch nicht mehr weiterentwickelt zu werden. Vermutlich steige ich auf Taskwarrior Web um, wenn mein Problem gelöst wird.
MitTaskwarrior 3 hat sich eine Menge getan, unter anderem wird im Backend jetzt SQLite als Datenbank verwendet und es gibt einen neuen Synchronisationsserver, den ich noch testen muss.
Unter den Aufgaben in Todoist war unter anderem auch die Migration aller Vortrags- und Workshop-Präsentationen von Speakerdeck in die eigene Hugo-Installation.
Ich bin ganz froh, dass ich damit zwei fremd gehostete Dienste loswerde. Über den Auszug aus Todoist habe ich ja schon geschrieben, dazu gibt es nächste Woche noch etwas Neues bzw. eine Entscheidung, die ich gerade prüfe.
Alt waren die Vorträge und Workshops unter speakerdeck.com/ddeimeke, dort habe ich nur noch einen Platzhalter übrig gelassen, neu sind sie jetzt unter ddeimeke.link/public (bzw. changelog.deimeke.ruhr/page/public-speaking/). Die Sammlung ist noch etwas rudimentär, ich werde mir noch Gedanken darüber machen, wie ich das aufhübschen kann.
In Hugo kommt das hugo-embed-pdf zum Einsatz, es ist auch auf GitHub zu finden. In diesem Zusammenhang: Es ist gar nicht so einfach, ein Plugin zu finden, mit dem man PDFs in Webseiten einbetten kann.
Auf mehrfachen Wunsch einer Person beschreibe ich hier einmal, wie ich Vaultwarden selbst hoste. Vaultwarden ist eine nicht offizielle auf Open Source basierende Serverkomponente, mit der sich jeder Bitwarden-Client verbinden lässt. Bitwarden ist der Passwort-Manager, den ich verwende, dazu vielleicht später einmal mehr. Nur so viel an dieser Stelle, der Client ist ebenfalls Open-Source-Software. Er existiert für nahezu jede Plattform und als Plugin / Extension / Addon für die gängigen Browser.
Zunächst habe ich einen User angelegt, unter dem die Serverkomponente laufen soll. Bei mir heisst der User vault.
Bei mir wird eine Fehlermeldung geworfen, weil die User-ID nicht in der vorgegebenen Range ist, ich ignoriere die. Wenn es Euch wichtig ist, nutzt eine andere ID.
Das Homeverzeichnis des Users liegt unter /srv/vault, wo später auch die Daten liegen werden.
Ich weiss, dass das alles mit Quadlets geht, mir geht aber in der Experimentierphase das ständige Daemon-Reload auf die Nerven, daher wird der Dienst bei mir mit Skripten gestartet und gestoppt und mit dem folgenden systemd-Unit-File automatisiert.
Ach ja, um über Port 443 erreichbar zu sein, benötigen wir noch einen Reverse-Proxy. Da hat sich bei mir Caddy bewährt. Der Eintrag im Caddyfile ist gerade einmal drei Zeilen lang. Caddy sorgt automatisiert für Let's Encrypt-Zertifikate.
Nach einem Wechsel auf den User vault (su - vault), erstelle ich ein Verzeichnis data und lege die Skripte start.bash und stopp.bash an und mache sie ausführbar. Die "set -o"-Einträge habe ich grundsätzlich in Skripten. Ich benutze Podman für Container und nicht Docker.
Um den Container starten zu können, braucht man noch ein paar User-IDs und die Möglichkeit, dass der Dienst auch laufen kann, wenn der User nicht angemeldet ist. Dass die Zeilen so aussehen, ist reiner Bequemlichkeiteit geschuldet. Da gibt es noch Tuning-Potenzial.
Nach systemctl restart caddy könnt Ihr testen.
Wenn alles richtig ist, sollte nach einer Ausführung von start.bash die Webseite von Vaultwarden aufrufbar sein und Ihr könnt einen Account anlegen. Falls nicht, müssen die Fehlermeldungen behoben werden. Wenn Ihr nicht weiterkommt, meldet Euch bitte.
Für die Automatisierung braucht es ein systemctl daemon-reload und ein systemctl enable --now vault.
Viel Spass!
Huch, vergessen, Ihr braucht ja auch noch die Adminseite unter /admin.
Dazu muss einmal das start.bash-Skript und die Zeile -e ADMIN_TOKEN= ergänzt, die Webseite unter vault.deine.domain/admin aufgerufen, Einstellungen gespeichert und die Zeile danach wieder gelöscht werden.
Achtung: Das beschriebene ist die einfache, unsichere Variante, wie man das Token sicher generiert, ist auf der Vaultwarden-Webseite beschrieben.
Und zum Schluss folgt der positive Jahresrückblick, siehe auch hier.
TL;DR: 2025 war ein eher positives Jahr für mich.
Anfang des Jahres bin ich in einem wunderbaren neuen Team gestartet. Menschlich läuft es echt super und das Umfeld ist toll.
Frieda, unsere Hündin, hatte ein Problem mit dem neuen Hund Halvar. Das hat sich im letzten Jahr gut entwicklet und wird immer besser.
In Bezug auf die Hunde haben wir gemerkt, dass wir stärker an uns arbeiten müssen. Zu viel Wissen blockiert an verschiedenen Stellen. Wir mussten neu lernen, auf unser Bauchgefühl zu hören und haben dazu einen Kurs über "Angepasste Verhaltensentwicklung" (AVE) belegt. Damit wird es auch von unserer Seite immer besser.
Spannend ist, dass mir die Tage im Office sehr gut tun, auch wenn ich gerne im Homeoffice arbeite. Insgesamt konnte ich arbeitsmässig viel bewegen.
Ich konnte ein Certificate of Advanced Studies in Leadership Fundamentals erfolgreich abschliessen.
Insgesamt macht mir Technik und Open-Source-Software wieder deutlich mehr Spass. Das war ein wenig abgkühlt.
Gemerkt habe ich, dass ich mich zu sehr über die Arbeit definiere, das muss sich ändern und ich arbeite daran.
Es müsste mehr Familientreffen wie die FrOSCon geben. Freue mich auch sehr darüber, dass mein Vortrag so gut angekommen ist.
Wir sind am Anfang eines neuen Jahres und ich möchte hier meinen Aufruf aus dem letzten Jahr wiederholen: Wenn Ihr es nicht schon tut, sucht Euch bitte eine Organisation oder ein Projekt, das Ihr ehrenamtlich oder finanziell unterstützt. Wir können alle zusammen die Welt besser machen. Jeder ein kleines bisschen. Schritt für Schritt.
Egal, wo Ihr seid und wer Ihr seid, ich wünsche Euch alles Gute, Glück und Gesundheit für 2026. Versucht die Momente festzuhalten, die Euch guttun und die Momente, die Euch nicht guttun, zu verarbeiten und eventuell aus ihnen zu lernen.