
नोट्स, कॉन्फ़िगरेशन, कुंजियाँ और फ़ाइलों के लिए एन्क्रिप्टेड CLI वॉल्ट। खोजें, व्यवस्थित न करें।
यह कोई पासवर्ड मैनेजर नहीं है। कोई नोट्स ऐप नहीं है। और निश्चित रूप से कोई गहरे समुद्र का बेन्थिक असामान्य नमूना वर्गीकरण मूल रजिस्ट्री नहीं है। लेकिन यह पहले दो काम किसी भी अन्य से बेहतर करता है। बस मज़ाक कर रहा हूँ (सच में नहीं)।
स्थापित करें • त्वरित प्रारंभ • विशेषताएँ • लिंक कमांड • कमांड्स • यह कैसे काम करता है • सुरक्षा • क्यों
खोजें, व्यवस्थित न करें। नोट्स, कॉन्फ़िग, कुंजियाँ, रहस्य — पाँच सेकंड आपके टर्मिनल से।
"मुझे सामान्य अव्यवस्था से परेशान मत करो।" — द फिशमॉन्गर
go install github.com/DeprecatedLuar/dredge-cargo/cmd/dredge@latest
git clone करें और आपके पास आपका डेटा है।dredge undo का उपयोग करें।मैं आपको जज नहीं करूँगा। कष्टप्रद API कुंजियाँ जो केवल एक बार दिखती हैं, SSH कॉन्फ़िग, AI प्रॉम्प्ट, पासवर्ड, शाब्दिक शेल स्क्रिप्ट जिन्हें आप निष्पादित कर सकते हैं, ईमेल टेम्पलेट?, डॉटफ़ाइल्स (अजीब लेकिन ठीक काम करेंगे), ज़िप आर्काइव, मूवी लिस्ट, त्वरित पहुँच के लिए URL की सूचियाँ...
यहाँ तक कि जापानी में Chainsaw Man अध्याय 2 की एक कानूनी प्रतिलिपि भी। (मेरे पास वह विशेष रूप से हो सकती है या नहीं भी)
go install github.com/DeprecatedLuar/dredge-cargo/cmd/dredge@latest
सुनिश्चित करें कि $GOPATH/bin (सामान्यतः ~/go/bin) आपके PATH में है।
curl -sSL https://raw.githubusercontent.com/DeprecatedLuar/the-satellite/main/satellite.sh | bash -s -- install DeprecatedLuar/dredge-cargo:dredge
मैनुअल स्थापना
chmod +x dredge-*mv dredge-* ~/.local/bin/dredgeस्रोत से
git clone https://github.com/DeprecatedLuar/dredge-cargo
cd dredge-cargo
go build -o dredge ./cmd/dredge
mv dredge ~/.local/bin/
# मौजूदा git रिमोट के साथ आरंभ करें
dredge init yourusername/vault # GitHub शॉर्टहैंड
# या: dredge init [email protected]:you/vault.git
# अपनी पहली वस्तु जोड़ें
dredge add "OpenAI Key" -c "sk-..." -t keys api # -c फ्लैग के बिना एडिटर खोलता है
# इसे खोजें
dredge search openai
# git पर पुश करें
dredge push
# कुछ भी जोड़ें
dredge add My SSH Config -t ssh dotfiles --import ~/.ssh/config
dredge add "Master Architect Prompt" --import prompt.md -t ai prompts
dredge add "Watchlist" -c "Dune 2, Oppenheimer..." -t lists
dredge add "project-backup" --import project.tar.gz # बाइनरी फ़ाइलें भी :D
# खोजें — बस जो कुछ भी याद है टाइप करें
dredge search prompt
dredge search aws key
dredge search ssh
# देखें, संपादित करें, हटाएँ
dredge view <id>
dredge edit <id>
dredge rm <id>
dredge undo # वापस लाया
# खोज परिणाम क्रमांकित होते हैं — देखने के लिए बस नंबर टाइप करें
dredge search ssh # दिखाएगा: 1. [xKP] SSH Config 2. [mNq] SSH Key
dredge 1 # सीधे देखता है
# Git सिंक
dredge push
dredge pull
dredge sync # pull + push
"मैं कल्पना नहीं कर सकता कि गहराई में नीचे क्या है।" — द लाइटहाउस कीपर
ठीक है, तो संक्षेप में:
मैंने दो मुख्य क्रिप्टो तकनीकों Argon2id और निश्चित रूप से AES-256, विशेष रूप से GCM वेरिएंट का उपयोग करने का निर्णय लिया।
Argon2id क्योंकि यह RFC 9106 और 2015 PHC विजेता की अनुशंसा है। बस इतना ही AES का GCM वेरिएंट क्योंकि यह फ़िंगरप्रिंटिंग के कारण सभी एन्क्रिप्टेड डेटा को छेड़छाड़ से असंभव बनाता है। बस इतना ही
अब के लिए मैं सब कुछ ~/.local/share/dredge/ में एन्क्रिप्टेड फ़ाइलों के रूप में संग्रहीत कर रहा हूँ। वह निर्देशिका एक git रिपॉजिटरी भी है (कम से कम अभी के लिए)। इसलिए dredge push बैकअप के लिए सब कुछ कमिट और पुश करता है। प्रत्येक आइटम एक स्वतंत्र एन्क्रिप्टेड ब्लॉब है जिसमें तीन वर्णों का यादृच्छिक ID है। मैंने तय किया कि कोई भी फ़ाइल नाम उजागर नहीं होना चाहिए, इसलिए भले ही कोई आपकी चीज़ें देख सके, उन्हें पता नहीं चलेगा कि वे क्या देख रहे हैं।
Your password
+ 16-byte random salt ← salt .dredge-key में संग्रहीत है
→ Argon2id (64 MB memory · 4 threads · 1 iteration)
→ 32-byte master key (salt + password = real key)
Master key + item content (TOML: title, tags, content)
→ AES-256-GCM with a fresh random 12-byte nonce per operation
→ [12B nonce][ciphertext + 16B auth tag]
→ डिस्क पर items/xKP के रूप में लिखा जाता है (यादृच्छिक ID, कोई एक्सटेंशन नहीं)
तो आपका पूरा वॉल्ट एक ही व्युत्पन्न कुंजी साझा करता है (इसका मतलब है कि यदि आप अपनी कुंजी खो देते हैं तो आप अपना डेटा खो देंगे, कृपया अपनी कुंजी न खोएं)। प्रत्येक आइटम एक ही कुंजी का उपयोग करता है, प्रत्येक का अपना यादृच्छिक nonce होता है। यदि आप एक ही सामग्री को दो बार एन्क्रिप्ट करते हैं तो पूरी तरह से अलग सिफरटेक्स्ट उत्पन्न होता है।
~/.local/share/dredge/ ← वॉल्ट (git repo)
├── .git/
├── .gitignore ← .spawned/ और links.json को बाहर करता है
├── .dredge-key ← salt + एन्क्रिप्टेड सत्यापन स्ट्रिंग
├── items/
│ ├── xKP ← एन्क्रिप्टेड आइटम
│ ├── mNq ← एन्क्रिप्टेड आइटम
│ └── ...
├── .spawned/ ← लिंक किए गए आइटमों की प्लेनटेक्स्ट प्रतियाँ
└── links.json ← सिमलिंक मेनिफ़ेस्ट
तो आपकी सभी एन्क्रिप्टेड फ़ाइलें और .dredge-key git रिपॉजिटरी में संग्रहीत हैं, सभी प्लेनटेक्स्ट फ़ाइलें (जिन्हें आपने सिस्टम के लिए पढ़ने योग्य बनाने का निर्णय लिया) कभी ट्रैक नहीं की जाएंगी। तो आप जो चाहें कर सकते हैं।
टर्मिनल में आपके पहले कमांड के बाद, व्युत्पन्न 32-बाइट कुंजी $XDG_RUNTIME_DIR/dredge/$PPID/.key (केवल रूट एक्सेस) पर कैश की जाती है
एक ही टर्मिनल में सभी बाद के dredge कमांड कैश की गई कुंजी का उपयोग करते हैं। जिसका मतलब है कि आपको पासवर्ड के लिए फिर से प्रॉम्प्ट नहीं किया जाएगा। प्रत्येक टर्मिनल को पैरेंट PID के आधार पर अपनी पृथक निर्देशिका मिलती है। इसलिए टर्मिनल मरने पर कुंजी डिस्क से वाष्पित हो जाती है।
कुंजी व्युत्पत्ति — Argon2id: RFC 9106 अनुशंसित पैरामीटर (64 MB मेमोरी, 4 थ्रेड, 1 पुनरावृत्ति)। .dredge-key में नमक गुप्त होना आवश्यक नहीं है, यह सुनिश्चित करता है कि आपके पासवर्ड को ब्रूट-फोर्स करना फ़ाइल के साथ भी बहुत महँगा है। आपका पासवर्ड ही आपको सुरक्षित रखता है, तो आप जानते हैं कि क्या करना है।
सिफर — AES-256-GCM: मूल रूप से प्रत्येक एन्क्रिप्शन को फ़िंगरप्रिंट करता है। आपको गोपनीयता और अखंडता दोनों मिलती है। सिफरटेक्स्ट के साथ छेड़छाड़ करने पर डिक्रिप्ट होने पर बकवास नहीं मिलेगा, डिक्रिप्शन विफल हो जाएगा और मदद के लिए चिल्लाएगा।
पासवर्ड सत्यापन: .dredge-key में आपकी मास्टर कुंजी से एन्क्रिप्टेड स्ट्रिंग dredge-vault-v1 है। प्रत्येक नए सत्र पर, dredge यह सत्यापित करने के लिए इसे डिक्रिप्ट करता है कि पासवर्ड सही है या नहीं। इसलिए यदि आपको इससे dredge-vault-v1 नहीं मिलता है तो पासवर्ड गलत है, इसलिए यह ~100ms में विफल हो जाता है, बजाय इसके कि ऑपरेशन के बीच में गलत पासवर्ड का पता चले।
क्या कैश किया जाता है: सत्र फ़ाइल व्युत्पन्न 32-बाइट कुंजी (पासवर्ड + नमक) संग्रहीत करती है, पासवर्ड स्वयं नहीं (मैं इतना मूर्ख नहीं हूँ)। इसलिए भले ही कोई सक्रिय सत्र के दौरान .key पढ़ ले, वे इससे आपका पासवर्ड पुनर्प्राप्त नहीं कर सकते।
सुरक्षा"एक छोटी पकड़ के साथ लौटना बिल्कुल न लौटने से बेहतर है।" — द फिशमॉन्गर
कोई आपकी निजी git रिपॉजिटरी क्लोन करता है:
उन्हें एन्क्रिप्टेड ब्लॉब और .dredge-key मिलते हैं। नमक गुप्त नहीं है — इसका उद्देश्य पूर्व-गणना हमलों को अव्यावहारिक बनाना है। आपके पासवर्ड के बिना, आइटम अपारदर्शी बाइनरी डेटा हैं। Argonid ऑफ़लाइन ब्रूट-फोर्स को महँगा बनाता है। एक मजबूत पासवर्ड का उपयोग करें।
किसी के पास आपके चल रहे सत्र तक पहुँच है:
व्युत्पन्न कुंजी उस टर्मिनल सत्र की अवधि के लिए $XDG_RUNTIME_DIR/dredge/$PPID/.key में रहती है। प्रत्येक टर्मिनल को अपनी पृथक निर्देशिका मिलती है — टर्मिनल बंद करें, कुंजी चली जाती है। वह पथ उपयोगकर्ता-स्कोप (मोड 700) और RAM-समर्थित है। आपकी सत्र निर्देशिका तक पढ़ने की पहुँच रखने वाला हमलावर आपका वॉल्ट डिक्रिप्ट कर सकता है। इसे अपनी होम निर्देशिका में किसी भी संवेदनशील क्रेडेंशियल की तरह मानें। यदि किसी के पास आपकी मशीन पर रूट है, तो आपकी dredge कुंजी आपकी चिंताओं में सबसे कम है।
किसी के पास आपके ऑफ़लाइन मशीन तक भौतिक पहुँच है:
डिस्क पर आइटम एन्क्रिप्टेड हैं। सत्र कुंजी RAM-समर्थित भंडारण में है और रीबूट के बाद नहीं रहती। लिंक किए गए आइटम (.spawned/) डिस्क पर प्लेनटेक्स्ट में हैं — नीचे देखें।
स्पॉन की गई फ़ाइल डिस्क पर एकमात्र स्थायी प्लेनटेक्स्ट है, और यह केवल इसलिए मौजूद है क्योंकि आपने किसी आइटम को सिस्टम पथ से स्पष्ट रूप से लिंक किया है। बाकी सब कुछ केवल मेमोरी में है।
--password / DREDGE_PASSWORD: अपना पासवर्ड इनलाइन पास करने से यह शेल हिस्ट्री और ps आउटपुट में उजागर होता है। Env vars चाइल्ड प्रोसेस में लीक हो सकते हैं। साझा वातावरण में दोनों से बचें।--vault / DREDGE_VAULT: परिवर्तन को स्थायी किए बिना एकल कमांड के लिए सक्रिय वॉल्ट को ओवरराइड करें। कई वॉल्ट्स में स्क्रिप्टिंग के लिए उपयोगी।~/.ssh/config) पर रहता है। यह git-ट्रैक नहीं किया जाता है, लेकिन यह डिस्क पर प्लेनटेक्स्ट में है।
किसी भी संग्रहीत आइटम को आपके फ़ाइल सिस्टम पर एक पथ से लिंक करें:
dredge link <id> ~/.ssh/config
यह कमांड ~/.ssh/config पर एक सिमलिंक बनाएगा जो dredge द्वारा प्रबंधित एक प्लेनटेक्स्ट प्रतिलिपि (फ़ाइल डिस्क पर उजागर होती है ताकि आप इसका उपयोग कर सकें) की ओर इशारा करता है। आप फ़ाइल को सीधे या dredge edit के माध्यम से संपादित कर सकते हैं, सभी परिवर्तन स्वचालित रूप से एन्क्रिप्टेड स्टोर पर वापस सिंक हो जाते हैं।
ऑटो-मरम्मत: यदि आप सिमलिंक का नाम बदलते हैं (जैसे, mv ~/.ssh/config ~/.ssh/config-backup), तो dredge नए पथ का पता लगाता है और स्वचालित रूप से ट्रैक करता है। हटाए गए सिमलिंक सत्र प्रारंभ पर साफ किए जाते हैं।
नई मशीन पर:
git clone [email protected]:you/vault.git ~/.local/share/dredge
dredge link <id> ~/.ssh/config
# वही SSH कॉन्फ़िग, वही कुंजियाँ, हर मशीन किसी भी अपडेट के लिए git-ट्रैक की गई
यह वास्तव में वह कारण है जिसके लिए मैंने dredge बनाया। मेरा SSH कॉन्फ़िग हर मशीन पर समान है, लेकिन मैं इसे अपनी डॉटफ़ाइल्स के अंदर नहीं रख सकता था।
Git सिंक सादे git का उपयोग करता है और किसी भी रिमोट (GitHub/GitLab/Gitea/etc) के साथ काम करता है।
dredge init एक वैकल्पिक git रिमोट स्वीकार करता है। यदि आप इसे छोड़ देते हैं, तो dredge एक स्थानीय-केवल git रिपॉजिटरी (कोई रिमोट नहीं) आरंभ करता है।
ऑटो-कमिट व्यवहार: push, pull, और sync रिमोट के साथ मेल करने से पहले सिंक न किए गए परिवर्तनों को एक कमिट में सहेजते हैं। यदि आपको रिमोट संस्करण को प्राथमिकता देने के लिए स्थानीय परिवर्तनों को छोड़ने की आवश्यकता है, तो dredge drop का उपयोग करें।
स्वचालित इतिहास प्रतिधारण: push और sync dredge.toml में नीति लागू करते हैं। आइटम मेटाडेटा और बाइनरी स्टोरेज में स्वतंत्र प्रति-आइटम संस्करण और एन्क्रिप्टेड-बाइट सीमाएँ होती हैं, जबकि history.deleted.retain_for नियंत्रित करता है कि हटाए गए ID कितने समय तक पुनर्प्राप्त करने योग्य रहते हैं। यदि नीति कुछ भी नहीं हटाती है, तो Dredge सामान्य रूप से पुश करता है। यदि संकुचन आवश्यक है, तो Dredge प्रतिस्थापन इतिहास को सत्यापित करता है और सटीक force-with-lease का उपयोग करता है; एक समवर्ती रिमोट अपडेट ओवरराइट होने के बजाय सुरक्षित रूप से रुक जाता है। pull कभी संकुचन या force-push नहीं करता है।
बनाए गए इतिहास का निरीक्षण dredge history, dredge history deleted, या dredge history <id> से करें। हटाए गए एन्क्रिप्टेड आइटम को dredge history restore <id> से पुनर्स्थापित करें। पासवर्ड परिवर्तन पुराने ब्लॉब को पुनः एन्क्रिप्ट नहीं करते हैं, इसलिए पुराने पासवर्ड के तहत बनाए गए पुनर्स्थापित संस्करण वर्तमान पासवर्ड से डिक्रिप्ट नहीं हो सकते हैं।
स्वीकृत रिमोट प्रारूप:
# GitHub शॉर्टहैंड (https://github.com/<owner>/<repo>.git में विस्तारित)
dredge init owner/repo
# HTTPS
dredge init https://github.com/owner/repo.git
dredge init https://gitlab.com/group/repo.git
# SSH (scp-like)
dredge init [email protected]:owner/repo.git
dredge init [email protected]:group/repo.git
# SSH URL
dredge init ssh://[email protected]/owner/repo.git
# स्थानीय पथ रिमोट (उन्नत)
dredge init /srv/git/dredge-vault.git
origin कॉन्फ़िगर नहीं है, तो dredge push/pull/sync मार्गदर्शन के साथ त्रुटि देगा।dredge init इसे ओवरराइट नहीं करेगा।
"मैं एक संग्रहकर्ता हूँ — कई चीज़ों का; कला और कलाकृतियाँ, खज़ाने और सत्य... और वे जिज्ञासाएँ जो इच्छा की परिधि में रहती हैं।" — द कलेक्टर
कुछ सहेजने और ज़रूरत पड़ने पर यह न जानना कि इसे कहाँ खोजें, का मानसिक बोझ।
मुझे गुस्सा आया कि महत्वपूर्ण चीज़ें (और गैर-महत्वपूर्ण भी, बस सामान्य चीज़ें) हर जगह बिखरी हुई थीं, मुझे 6 साल पहले बनाए गए एक ईमेल खाते तक पहुँचना पड़ता था क्योंकि वह एक यादृच्छिक सेवा से जुड़ा था जिसे मुझे बिना किसी कारण के तुरंत एक्सेस करना था... खैर, मुझे एहसास हुआ कि बहुत सारे उपकरणों में, उनकी तरकीबों के बावजूद, एक बहुत ही महत्वपूर्ण पहलू पर ओवरलैप होता है जो जानकारी संग्रहीत करना है, इसलिए मैंने एक उपकरण बनाया जो उस विशिष्ट ओवरलैप में विशेषज्ञता रखता है और उपकरणों को वह करने देता है जो वे सबसे अच्छा करते हैं।
मैं आलसी हूँ इसलिए मुझे कुछ ऐसा चाहिए था जो बस काम करे और मेरा मन पढ़े, एक प्रविष्टि जोड़ने या ज्ञानकोष से पुनर्प्राप्त करने में कोई प्रयास न लगे।
मैंने एक बार jrnl डाउनलोड किया था और मुझे वास्तव में विचार पसंद आया लेकिन कुछ अजीब मापदंडों के कारण निष्पादन से नफरत हुई, इसमें शाब्दिक रूप से कोई आइटम पृथक्करण नहीं था और एक खोज जो सब कुछ से मेल खाती थी। Dredge वही है जो मैं वास्तव में चाहता था। (तो हाँ, काफी हद तक एक व्यक्तिगत उपकरण)
आप लोगों का बहुत-बहुत धन्यवाद जिन्होंने dredge में योगदान दिया:
के साथ बनाया गया है Luar द्वारा
| स्थान | कब | जीवनकाल |
|---|
| केवल RAM | हर बार देखना, खोजना या संपादित करना | कमांड समाप्त होने पर मुक्त |
$XDG_RUNTIME_DIR/dredge/$PPID/edit-*.txt | केवल dredge edit के दौरान | एडिटर बंद होने के बाद हटा दिया जाता है |
~/.local/share/dredge/.spawned/<id> | dredge link के बाद | जब तक आप dredge unlink नहीं चलाते |
| कमांड | विवरण | उदाहरण |
|---|
add / a / new / + | एक आइटम जोड़ें (यदि -c फ्लैग नहीं है तो एडिटर खोलता है) | dredge add "OpenAI Key" -c "sk-..." -t keys |
search / s | आइटम खोजें | dredge search aws key |
list / ls | सभी आइटम सूचीबद्ध करें | dredge ls |
view / v | एक आइटम देखें | dredge view xKP या dredge 1 |
cat / c | कच्ची सामग्री आउटपुट करें (पाइपिंग के लिए) | dredge cat xKP | bash |
edit / e | एक आइटम संपादित करें | dredge edit xKP |
rm | हटाएँ (ट्रैश में जाता है) | dredge rm 1 2 3 |
undo | अंतिम हटाए गए आइटम को पुनर्स्थापित करें | dredge undo |
link / ln | आइटम को सिस्टम पथ से लिंक करें | dredge link xKP ~/.ssh/config |
unlink | एक लिंक हटाएँ | dredge unlink xKP |
mv / rename | आइटम ID का नाम बदलें | dredge mv xKP abc |
export | फ़ाइल आइटम को डिस्क पर निर्यात करें | dredge export xKP ./output/ |
copy / cp | आइटम सामग्री को क्लिपबोर्ड पर कॉपी करें | dredge copy xKP |
lock | वॉल्ट को लॉक करें (सत्र कुंजी साफ़ करता है) | dredge lock |
init / use | एक वॉल्ट आरंभ या सक्रिय करें | dredge init ~/vaults/work |
push / pull / sync | Git सिंक (परिवर्तनों को ऑटो-कमिट करता है) | dredge sync |
drop | अप्रतिबद्ध परिवर्तनों को छोड़ें | dredge drop xKP या dredge drop --all |
status | लंबित परिवर्तन दिखाएँ | dredge status |
passwd | वॉल्ट पासवर्ड बदलें | dredge passwd |
update | नवीनतम संस्करण में अपडेट करें | dredge update |