1 poin oleh GN⁺ 1 hari lalu | 1 komentar | Bagikan ke WhatsApp
  • 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 menekan Ctrl+R, TUI pencarian mundur akan terbuka
  • Di NixOS, tersedia modul home-manager; di lingkungan lain, inisialisasi dilakukan dari .bashrc dengan eval "$(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.default yang 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+R di shell, TUI pencarian akan terbuka
    • Bergerak dengan · dan pilih dengan Tab atau Enter
    • Setelah memilih, tekan Enter sekali lagi untuk menjalankan perintah
    • Batalkan dengan Esc
  • DB riwayat disimpan di ~/.local/share/stinkpot
    • Jika DB rusak setelah upgrade, hapus berkasnya dan jalankan kembali stinkpot import

1 komentar

 
GN⁺ 1 hari lalu
Komentar di Lobste.rs
  • Minggu ini saya tidak sengaja mengetik ? di prompt, lalu melihat Atuin bertanya apakah ingin mengaktifkan mode AI, dan saat itu sadar betapa bengkaknya ia sudah menjadi
    Saya lewat. Berkat perkenalannya, sekarang saya sudah beralih ke stinkpot
  • Saya pernah kesulitan karena kehilangan riwayat perintah shell, jadi saya sangat menyukai proyek ini. Saya juga pernah mencoba atuin.sh, tetapi tidak terlalu puas
    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 penasaran apa kelebihan penggunaan SQLite di sini dibanding alat yang membaca file riwayat secara langsung seperti hstr atau fzf
    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
    • Jika Bash dibuat menulis riwayat ke file setiap kali setelah menjalankan perintah, hal serupa bisa diimplementasikan hanya dengan fzf
      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
    • Saya membayangkan penggunaannya untuk menyimpan dan mengindeks direktori kerja saat ini dari setiap entri riwayat
      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
  • Jelas layak dicoba. Atuin sudah menjadi kebun binatang fitur yang penuh dengan fitur yang nyaris tidak saya pedulikan
    Meski begitu, kelebihannya adalah ia bekerja dengan baik, tetapi kemungkinan sudah lama tidak saya perbarui
    • Saya sudah tahu Atuin sejak dulu, tetapi baru mencobanya minggu ini. Kalau trennya seperti sekarang, sepertinya sebentar lagi ia akan mulai membaca email juga
  • Kelihatannya bagus, tetapi saya penasaran apakah riwayat bisa difilter berdasarkan cwd. Satu-satunya alasan saya memakai Atuin adalah karena riwayat perintah bisa didasarkan pada direktori
    Setelah cd ke proyek, saya bisa langsung melanjutkan dari titik sebelumnya, dan ini terutama berguna saat menjalankan ulang perintah panjang dengan banyak parameter
    • fish menyediakan fitur ini secara bawaan dan sangat berguna
    • Secara pribadi ini bukan perilaku yang saya sukai, tetapi bisa diimplementasikan dengan satu batasan: hanya perintah yang dijalankan setelah stinkpot dipasang yang akan mencatat cwd, karena bash_history bawaan tidak memiliki informasi ini
  • Agar orang lain merasa aman menggunakan kodenya, sebaiknya tambahkan lisensi ke proyek
    Kalau 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
  • Saya penasaran seberapa mudah menghapus perintah dari riwayat. Ingin tahu apakah harus menghapus baris secara langsung dengan SQL dari database SQLite
    Meski jarang, ada saatnya beberapa baris perintah perlu dihapus dari riwayat shell, dan dengan cara lama saya bisa langsung membuka bash_history lalu menghapus baris tersebut. Saya penasaran apakah stinkpot memiliki perintah untuk menghapus riwayat
    Terlepas dari penggunaan yang agak khusus seperti ini, proyeknya sendiri tampak cukup menarik