1 पॉइंट द्वारा GN⁺ 2 시간 전 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • 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.default module को 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 करें

1 टिप्पणियां

 
GN⁺ 2 시간 전
Lobste.rs की राय
  • इस हफ़्ते प्रॉम्प्ट में गलती से ? टाइप कर दिया, तब Atuin ने पूछा कि क्या AI mode सक्रिय करना है; तभी एहसास हुआ कि यह कितना bloated हो गया है
    नहीं चाहिए। परिचय कराने के लिए धन्यवाद, अब मैं stinkpot पर शिफ्ट हो गया हूँ
  • shell command history खो जाने से पहले काफ़ी परेशानी झेल चुका हूँ, इसलिए यह project मुझे सच में बहुत पसंद आया। atuin.sh भी इस्तेमाल किया था, लेकिन उससे ज़्यादा संतुष्ट नहीं था
    खासकर यह बात अच्छी लगी कि 400 lines of Go code से एक simple static minimal binary बनाई गई है। Go कुल मिलाकर एक शानदार language है, और मैं stinkpot भी आज़माने वाला हूँ
  • सोच रहा हूँ कि hstr या fzf जैसे history file को सीधे पढ़ने वाले tools की तुलना में यहाँ SQLite इस्तेमाल करने से क्या फ़ायदा मिलता है
    लगभग 15 साल से hstr इस्तेमाल किया है और हाल में fzf की तरफ़ जा रहा हूँ। SQLite अपने आप में बहुत बढ़िया है, लेकिन इस use case में इसकी ज़रूरत क्यों है, यह समझ नहीं आया
    • अगर Bash को हर command execution के बाद history को file में लिखने के लिए सेट कर दिया जाए, तो सिर्फ fzf से भी कुछ ऐसा ही बनाया जा सकता है
      default history file structured नहीं होती, लेकिन SQLite में exit code और exit time जैसी data store की जा सकती है, और insert के समय deduplication या वही command दोबारा चलने पर execution time update जैसे काम भी तेज़ी से किए जा सकते हैं
    • मैंने हर history entry की current working directory को store और index करने के use case के बारे में सोचा
      सैद्धांतिक रूप से command history से context को मुश्किल से reconstruct किया जा सकता है, लेकिन अगर project directory के हिसाब से shell history को जल्दी देखा जा सके, तो वह काफ़ी उपयोगी होगा
  • यह वाकई आज़माने लायक है। Atuin लगभग बेकार की सुविधाओं से भरा feature zoo बन गया है
    फिर भी इसकी एक ख़ूबी है कि यह अच्छे से काम करता है, लेकिन संभव है कि मैंने इसे बहुत समय से update न किया हो
    • Atuin के बारे में पहले से जानता था, लेकिन इस हफ़्ते ही पहली बार इस्तेमाल किया। मौजूदा रुझान देखकर लगता है कि जल्द ही यह ईमेल भी पढ़ना शुरू कर देगा
  • काफ़ी बढ़िया लग रहा है, लेकिन सोच रहा हूँ कि क्या history को cwd से filter किया जा सकता है। command history के लिए directory को आधार बना पाना ही Atuin इस्तेमाल करने की मेरी एकमात्र वजह है
    project में cd करने के बाद वहीं से तुरंत फिर शुरू किया जा सकता है जहाँ पहले रुका था, और ज़्यादा parameters वाले लंबे commands को दोबारा चलाने में यह खास तौर पर उपयोगी है
    • fish यह feature by default देता है और यह बहुत उपयोगी है
    • व्यक्तिगत रूप से यह मेरा पसंदीदा behavior नहीं है, लेकिन एक सीमा के साथ इसे implement किया जा सकता है। stinkpot install करने के बाद चलाए गए commands के लिए ही cwd रिकॉर्ड होगा, क्योंकि default bash_history में यह जानकारी नहीं होती
  • अगर आप चाहते हैं कि दूसरे लोग निश्चिंत होकर code इस्तेमाल करें, तो project में license जोड़ना बेहतर होगा
    अगर आपको ठीक लगे, तो public license जोड़ने के बाद मैं इसे experimental oils readline में integrate करना चाहूँगा। dynamic widget पूरा करने के बाद command history मेरी highest-priority TODOs में से एक है
  • सोच रहा हूँ कि history से commands हटाना कितना आसान है। क्या SQLite database से सीधे SQL के ज़रिए rows delete करनी पड़ेंगी?
    ऐसा कम ही होता है, लेकिन कभी-कभी shell history से कुछ lines हटानी पड़ती हैं; पुराने तरीके में bash_history खोलकर उन lines को सीधे मिटाया जा सकता था। सोच रहा हूँ कि stinkpot में history delete command है या नहीं
    इस तरह के niche use case से अलग, project खुद काफ़ी दिलचस्प लग रहा है