- stinkpot speichert die Bash-Befehlshistorie in SQLite, verwaltet sie unabhängig von Sessions und macht sie über eine Such-TUI schnell auffindbar
- Entfernt aus Atuin den Sync-Server, AI, dotfiles-/Skript-Manager und KV-Store und implementiert nur die benötigten Funktionen in rund 400 Zeilen Go
- Eine bestehende Bash-History wird mit
stinkpot importimportiert; beiCtrl+Röffnet sich eine TUI für Rückwärtssuche - Unter NixOS wird ein home-manager-Modul bereitgestellt; in anderen Umgebungen erfolgt die Initialisierung in
.bashrcmiteval "$(stinkpot init)" - Die Datenbank wird unter
~/.local/share/stinkpotgespeichert; falls sie nach einem Upgrade beschädigt ist, kann man sie löschen und die History erneut importieren
Nur die benötigten Funktionen aus Atuin herausgelöst
- stinkpot entstand aus der Erfahrung mit Atuin, bei der nur sessionsunabhängige History-Verwaltung und eine Such-TUI benötigt wurden
- Sync-Server, Atuin AI, dotfiles-Manager, Skript-Manager und KV-Store sind nicht enthalten
- Da Konfigurationen und ausgeführte Befehle je nach Maschine stark unterschiedlich waren, wurde auch die Sync-Funktion nicht genutzt
- Das Projekt ist in etwa 400 Zeilen Go geschrieben; die Sprachanteile im Repository betragen Go 82,5 % und Nix 17,5 %
- Der Name stammt von
stinkpot, einer kleinen Schildkrötenart - Um die Rückwärtssuche zu beschleunigen, nutzt der SQLite-Ausführungsplan statt eines temporären B-Baums zum Sortieren einen Covering Index
Installation und History-Suche
- Aus dem Quellcode wird mit folgendem Befehl gebaut
go build -o stinkpot .
- Nutzer von NixOS home-manager können das bereitgestellte Modul
homeManagerModules.defaulteinbinden - In anderen Umgebungen fügt man der
.bashrcden folgenden Initialisierungsbefehl hinzu
eval "$(stinkpot init)"
- Eine bestehende Bash-History wird mit folgendem Befehl importiert
stinkpot import
- Drückt man in der Shell
Ctrl+R, öffnet sich die Such-TUI- Mit
↑·↓navigieren, mitTaboderEnterauswählen - Nach der Auswahl wird der Befehl durch erneutes Drücken von
Enterausgeführt - Mit
Escabbrechen
- Mit
- Die History-DB wird unter
~/.local/share/stinkpotgespeichert- Falls die DB nach einem Upgrade beschädigt ist, die Datei löschen und
stinkpot importerneut ausführen
- Falls die DB nach einem Upgrade beschädigt ist, die Datei löschen und
1 Kommentare
Lobste.rs-Kommentare
?eingegeben und dann gesehen, wie Atuin fragte, ob es den AI-Modus aktivieren soll – da wurde mir klar, wie aufgebläht es geworden istNein danke. Dank dieses Hinweises bin ich jetzt auf stinkpot umgestiegen
Besonders gut finde ich, dass damit ein einfaches statisches Minimal-Binary in nur 400 Zeilen Go-Code gebaut wurde. Go ist insgesamt eine großartige Sprache, und ich werde stinkpot wohl auch ausprobieren
Ich benutze hstr seit etwa 15 Jahren und wechsle in letzter Zeit eher zu fzf. SQLite selbst finde ich großartig, aber ich habe nicht verstanden, warum es für diesen Zweck nötig ist
Die Standard-History-Datei ist nicht strukturiert, aber in SQLite kann man Daten wie Exit-Code und Endzeit speichern, und Dinge wie Deduplizierung beim Einfügen oder das Aktualisieren der Ausführungszeit beim erneuten Ausführen desselben Befehls lassen sich schnell erledigen
Theoretisch kann man den Kontext mühsam aus der Befehlschronik rekonstruieren, aber wenn man die Shell-History schnell nach Projektverzeichnissen durchsuchen könnte, wäre das ziemlich nützlich
Der Vorteil ist zwar, dass es gut funktioniert, aber wahrscheinlich habe ich es schon lange nicht mehr aktualisiert
cwdfiltern kann. Dass der Verlauf verzeichnisbasiert sein kann, ist der einzige Grund, warum ich Atuin benutzeMan kann in ein Projekt
cdwechseln und direkt dort weitermachen, wo man vorher aufgehört hat; besonders nützlich ist das, wenn man lange Befehle mit vielen Parametern erneut ausführen willcwd, denn im normalenbash_historygibt es diese Information nichtWenn das für dich in Ordnung ist, würde ich nach dem Hinzufügen einer Open-Source-Lizenz gern eine Integration in experimental oils readline versuchen. Einer der wichtigsten TODO-Punkte nach Fertigstellung des dynamischen Widgets ist die Befehlschronik
Es kommt selten vor, aber manchmal muss ich ein paar Zeilen aus der Shell-History löschen, und bisher konnte ich dafür einfach
bash_historydirekt öffnen und die betreffenden Zeilen entfernen. Ich frage mich, ob stinkpot einen Befehl zum Löschen von History-Einträgen hatAbgesehen von diesem speziellen Anwendungsfall wirkt das Projekt selbst ziemlich interessant