- stinkpot Bash command history को SQLite में स्टोर करता है, उसे sessions से स्वतंत्र रूप से manage करता है, और search TUI के जरिए जल्दी खोजने देता है
- Atuin से sync server, AI, dotfiles/script manager और KV store हटाकर, सिर्फ जरूरी features को लगभग 400 लाइनों के Go में implement किया गया है
- मौजूदा Bash history को
stinkpot importसे import किया जाता है, औरCtrl+Rदबाने पर reverse search TUI खुलता है - NixOS पर यह home-manager module देता है, और अन्य environments में
.bashrcमेंeval "$(stinkpot init)"से initialize किया जाता है - database
~/.local/share/stinkpotमें store होता है; upgrade के बाद corrupt हो जाए तो उसे delete करके history फिर से import की जा सकती है
Atuin से सिर्फ जरूरी features अलग किए गए
- stinkpot की शुरुआत Atuin इस्तेमाल करते समय सिर्फ session-independent history management और search TUI की जरूरत के अनुभव से हुई
- इसमें sync server, Atuin AI, dotfiles manager, script manager और KV store शामिल नहीं हैं
- हर machine पर settings और चलाए जाने वाले commands काफी अलग थे, इसलिए sync feature भी इस्तेमाल नहीं किया गया
- project लगभग 400 लाइनों के Go में लिखा गया है, और repository में language share Go 82.5%, Nix 17.5% है
- नाम छोटी turtle species
stinkpotसे लिया गया है - reverse search speed बढ़ाने के लिए SQLite execution plan sorting के लिए temporary B-tree की बजाय covering index का इस्तेमाल करता है
Installation और history search
- source से build करने के लिए यह command चलाएं
go build -o stinkpot .
- NixOS home-manager users दिए गए
homeManagerModules.defaultmodule को import कर सकते हैं - अन्य environments में
.bashrcमें यह initialization command जोड़ें
eval "$(stinkpot init)"
- मौजूदा Bash history इस command से import करें
stinkpot import
- shell में
Ctrl+Rदबाने पर search TUI खुलता है↑·↓से move करें औरTabयाEnterसे select करें- select करने के बाद
Enterफिर दबाने पर command execute होती है Escसे cancel करें
- history DB
~/.local/share/stinkpotमें store होता है- upgrade के बाद DB खराब हो जाए तो file delete करें और
stinkpot importफिर से run करें
- upgrade के बाद DB खराब हो जाए तो file delete करें और
1 टिप्पणियां
Lobste.rs की राय
?टाइप कर दिया, तब Atuin ने पूछा कि क्या AI mode सक्रिय करना है; तभी एहसास हुआ कि यह कितना bloated हो गया हैनहीं चाहिए। परिचय कराने के लिए धन्यवाद, अब मैं stinkpot पर शिफ्ट हो गया हूँ
खासकर यह बात अच्छी लगी कि 400 lines of Go code से एक simple static minimal binary बनाई गई है। Go कुल मिलाकर एक शानदार language है, और मैं stinkpot भी आज़माने वाला हूँ
लगभग 15 साल से hstr इस्तेमाल किया है और हाल में fzf की तरफ़ जा रहा हूँ। SQLite अपने आप में बहुत बढ़िया है, लेकिन इस use case में इसकी ज़रूरत क्यों है, यह समझ नहीं आया
default history file structured नहीं होती, लेकिन SQLite में exit code और exit time जैसी data store की जा सकती है, और insert के समय deduplication या वही command दोबारा चलने पर execution time update जैसे काम भी तेज़ी से किए जा सकते हैं
सैद्धांतिक रूप से command history से context को मुश्किल से reconstruct किया जा सकता है, लेकिन अगर project directory के हिसाब से shell history को जल्दी देखा जा सके, तो वह काफ़ी उपयोगी होगा
फिर भी इसकी एक ख़ूबी है कि यह अच्छे से काम करता है, लेकिन संभव है कि मैंने इसे बहुत समय से update न किया हो
cwdसे filter किया जा सकता है। command history के लिए directory को आधार बना पाना ही Atuin इस्तेमाल करने की मेरी एकमात्र वजह हैproject में
cdकरने के बाद वहीं से तुरंत फिर शुरू किया जा सकता है जहाँ पहले रुका था, और ज़्यादा parameters वाले लंबे commands को दोबारा चलाने में यह खास तौर पर उपयोगी हैcwdरिकॉर्ड होगा, क्योंकि defaultbash_historyमें यह जानकारी नहीं होतीअगर आपको ठीक लगे, तो public license जोड़ने के बाद मैं इसे experimental oils readline में integrate करना चाहूँगा। dynamic widget पूरा करने के बाद command history मेरी highest-priority TODOs में से एक है
ऐसा कम ही होता है, लेकिन कभी-कभी shell history से कुछ lines हटानी पड़ती हैं; पुराने तरीके में
bash_historyखोलकर उन lines को सीधे मिटाया जा सकता था। सोच रहा हूँ कि stinkpot में history delete command है या नहींइस तरह के niche use case से अलग, project खुद काफ़ी दिलचस्प लग रहा है