- stinkpot menyimpan riwayat perintah Bash di SQLite agar dapat dikelola terlepas dari sesi, dan memudahkan pencarian cepat lewat TUI pencarian
- Dari Atuin, fitur server sinkronisasi, AI, pengelola dotfiles dan skrip, serta penyimpanan KV disingkirkan; hanya fungsi yang dibutuhkan diimplementasikan dalam sekitar 400 baris Go
- Riwayat Bash yang sudah ada dapat diimpor dengan
stinkpot import, dan saat menekanCtrl+R, TUI pencarian mundur akan terbuka - Di NixOS, tersedia modul home-manager; di lingkungan lain, inisialisasi dilakukan dari
.bashrcdenganeval "$(stinkpot init)" - Basis data disimpan di
~/.local/share/stinkpot; jika rusak setelah upgrade, hapus lalu impor ulang riwayat
Memisahkan hanya fitur yang dibutuhkan dari Atuin
- stinkpot berawal dari pengalaman menggunakan Atuin tetapi hanya membutuhkan pengelolaan riwayat yang independen dari sesi dan TUI pencarian
- Tidak menyertakan server sinkronisasi, Atuin AI, pengelola dotfiles, pengelola skrip, maupun penyimpanan KV
- Karena konfigurasi dan perintah yang dijalankan sangat berbeda di tiap mesin, fitur sinkronisasi juga tidak digunakan
- Proyek ini ditulis dalam sekitar 400 baris Go, dengan komposisi bahasa di repositori: Go 82,5% dan Nix 17,5%
- Namanya diambil dari
stinkpot, spesies kura-kura kecil - Untuk mempercepat pencarian mundur, rencana eksekusi SQLite menggunakan covering index alih-alih B-tree sementara untuk pengurutan
Instalasi dan pencarian riwayat
- Dari kode sumber, build dengan perintah berikut
go build -o stinkpot .
- Pengguna NixOS home-manager dapat mengambil modul
homeManagerModules.defaultyang disediakan - Di lingkungan lain, tambahkan perintah inisialisasi berikut ke
.bashrc
eval "$(stinkpot init)"
- Impor riwayat Bash yang sudah ada dengan perintah berikut
stinkpot import
- Saat menekan
Ctrl+Rdi shell, TUI pencarian akan terbuka- Bergerak dengan
↑·↓dan pilih denganTabatauEnter - Setelah memilih, tekan
Entersekali lagi untuk menjalankan perintah - Batalkan dengan
Esc
- Bergerak dengan
- DB riwayat disimpan di
~/.local/share/stinkpot- Jika DB rusak setelah upgrade, hapus berkasnya dan jalankan kembali
stinkpot import
- Jika DB rusak setelah upgrade, hapus berkasnya dan jalankan kembali
1 komentar
Komentar di Lobste.rs
?di prompt, lalu melihat Atuin bertanya apakah ingin mengaktifkan mode AI, dan saat itu sadar betapa bengkaknya ia sudah menjadiSaya lewat. Berkat perkenalannya, sekarang saya sudah beralih ke stinkpot
Saya terutama suka karena ia membuat binary minimal statis yang sederhana hanya dengan 400 baris kode Go. Go secara umum adalah bahasa yang bagus, dan saya juga berencana mencoba stinkpot
Saya memakai hstr selama sekitar 15 tahun dan belakangan mulai pindah ke fzf. Saya sangat menyukai SQLite itu sendiri, tetapi belum paham mengapa diperlukan untuk penggunaan ini
File riwayat bawaan memang tidak terstruktur, tetapi SQLite bisa menyimpan data seperti kode keluar dan waktu selesai, serta dapat dengan cepat melakukan pemrosesan seperti deduplikasi saat penyisipan atau memperbarui waktu eksekusi ketika perintah yang sama dijalankan lagi
Secara teori konteks bisa direkonstruksi dengan susah payah dari riwayat perintah, tetapi jika riwayat shell bisa ditelusuri dengan cepat per direktori proyek, itu tampaknya cukup berguna
Meski begitu, kelebihannya adalah ia bekerja dengan baik, tetapi kemungkinan sudah lama tidak saya perbarui
cwd. Satu-satunya alasan saya memakai Atuin adalah karena riwayat perintah bisa didasarkan pada direktoriSetelah
cdke proyek, saya bisa langsung melanjutkan dari titik sebelumnya, dan ini terutama berguna saat menjalankan ulang perintah panjang dengan banyak parametercwd, karenabash_historybawaan tidak memiliki informasi iniKalau tidak keberatan, setelah lisensi terbuka ditambahkan, saya ingin mengintegrasikannya ke experimental oils readline. Setelah widget dinamis selesai, riwayat perintah adalah salah satu TODO prioritas utama yang ingin saya tangani
Meski jarang, ada saatnya beberapa baris perintah perlu dihapus dari riwayat shell, dan dengan cara lama saya bisa langsung membuka
bash_historylalu menghapus baris tersebut. Saya penasaran apakah stinkpot memiliki perintah untuk menghapus riwayatTerlepas dari penggunaan yang agak khusus seperti ini, proyeknya sendiri tampak cukup menarik