मुझे NixOS क्यों पसंद है
(birkey.co)- Nix package manager पर आधारित NixOS पूरे सिस्टम को code के रूप में परिभाषित करता है, और किसी भी समय उसे deterministic और reproducible state में restore किया जा सकता है
- सभी settings और packages को एक declarative configuration file में manage किया जाता है, जिससे नए device पर भी वही environment single source से rebuild किया जा सकता है
- 6 महीने के चक्र वाली स्थिर release और automatic updates के साथ, ज़रूरत पड़ने पर unstable channel के जरिए नए software के प्रयोग का समर्थन करता है
- यह isolated development environment देता है, जिससे सिस्टम को दूषित किए बिना अलग-अलग भाषाओं और tools के साथ प्रयोग किया जा सकता है, और macOS व Linux के बीच consistent development experience बना रहता है
- LLM coding युग में tools के तेज़ी से बदलने पर भी यह अनुकूल रहता है, और Docker की तुलना में अधिक deterministic तथा layered build model के साथ deployment तक consistency सुनिश्चित करता है
NixOS का दर्शन और आकर्षण
- NixOS का मूल Linux distribution नहीं, बल्कि Nix package manager है
- NixOS एक deterministic और reproducible functional package manager का परिणाम है, जो दिए गए Nix DSL के अनुसार पूरे operating system को configure कर सकता है
- यह सिस्टम को दोबारा build करने, केवल कुछ हिस्से बदलने, और पसंद न आने पर rollback करने की संरचना देता है
- जहाँ अधिकांश operating systems समय के साथ अस्थिर हो जाते हैं, वहीं NixOS में state को define और build किया जा सकता है
- package install, settings change, और tools जोड़ने-हटाने से बनने वाली अस्पष्ट state के संचय को रोका जा सकता है
- सिस्टम को code के रूप में define करके किसी भी समय वही परिणाम दोबारा प्राप्त किए जा सकते हैं
Declarative configuration और single source management
- NixOS में packages, settings, keyboard mapping सहित पूरे सिस्टम को एक declarative configuration के रूप में define किया जा सकता है
- GNOME extension settings और keyboard mapping जैसे उदाहरणों की तरह, बारीक व्यवहार भी Nix DSL में लिखा जा सकता है
- नए computer पर भी single source से पूरा सिस्टम rebuild किया जा सकता है
- manual settings या बिखरे हुए scripts के बिना consistent system state बनाए रखना संभव है
स्थिरता और update management
- NixOS 6 महीने के चक्र वाली अनुमानित release बनाए रखता है और automatic updates को support करता है
- सामान्य OS upgrade के दौरान होने वाली instability, notifications, और system drift जैसी समस्याओं को कम करता है
- आवश्यकता होने पर unstable channel सक्रिय करके नया software प्रयोगात्मक रूप से इस्तेमाल किया जा सकता है
- HP laptop पर भी hardware compatibility और stability उच्च है, और बिना अलग setup के तुरंत इस्तेमाल किया जा सकता है
प्रयोग और development environment का isolation
- NixOS सुरक्षित और कम-लागत वाला प्रयोग environment प्रदान करता है
- packages को सीधे सिस्टम में install करने के बजाय उन्हें isolated shell environment में चलाया जा सकता है
- Nix DSL के जरिए dependencies, build steps, और outputs को declarative रूप से define कर बिना प्रदूषण वाला development environment बनाए रखा जा सकता है
- macOS और Linux दोनों पर एक ही Nix package manager इस्तेमाल किया जा सकता है, जिससे development tools और dependency management में consistency मिलती है
- FreeBSD के लिए community support भी मौजूद है
LLM coding युग के साथ तालमेल
- LLM-आधारित coding tools में utility, compiler, runtime के specific versions को अक्सर बदलना पड़ता है
- Nix इस आवश्यकता के अनुसार tools को declarative inputs की तरह मानता है और उन्हें isolated environment में चलाता है
- उदाहरण के लिए, Rust speech-to-text agent build करते समय Nix Rust toolchain को अपने आप लाकर isolated build environment तैयार करता है
- यह सिस्टम environment (
~/.cargo,~/.rustup, PATH आदि) को नहीं बदलता
flake.nixऔरnix flake checkके जरिए agent के experimental environment को reproducible artifact के रूप में fix किया जा सकता है- temporary sessions को verifiable build unit में बदला जा सकता है
Deployment और consistent development model
- Nix Docker से अधिक deterministic और layered image build method देता है
dockerTools.buildLayeredImageका उपयोग करके छोटे और reproducible Docker images बनाए जा सकते हैं- एक ही configuration के साथ दूसरी architectures पर भी वही परिणाम build किए जा सकते हैं
- यही मॉडल laptop, shell, project dependencies, CI pipeline, और deployment artifacts तक लगातार लागू होता है
- कई tools को जोड़ने के बजाय एक ही सोच के साथ पूरे software system को manage किया जा सकता है
निष्कर्ष
- NixOS declarative, reproducible, rollback योग्य और स्थिर system का एक वास्तविक implementation है
- इसके साथ प्रयोग और upgrade बिना डर के किए जा सकते हैं, और तेज़ी से बदलते tool environment में भी सिस्टम दूषित नहीं होता
- LLM coding agents जैसे आधुनिक development workflows में भी यह stability और flexibility दोनों प्रदान करता है
- NixOS इस दर्शन को दैनिक उपयोग में सबसे पूर्ण रूप से लागू करने वाला रूप है
8 टिप्पणियां
मैंने भी पहले करीब आधा साल NixOS इस्तेमाल किया था, लेकिन एक बहुत ही साधारण काम, जिसे दूसरे OS में अलग से ढूँढ़ने की भी ज़रूरत नहीं पड़ती, उसे मैं कितनी भी Google करके हल नहीं कर पाया। फिर NixOS फ़ोरम जैसी किसी जगह पर किसी NixOS विशेषज्ञ? ने दर्ज किया हुआ समाधान देखा, और जब देखा कि वही कई दर्जन लाइनों वाला hacky समाधान सबसे ज़्यादा likes पाया हुआ था, तो मुझे लगा कि आगे का NixOS जीवन काफ़ी अंधकारमय होगा, इसलिए मैं Arch पर वापस चला गया था...
और ठीक से याद नहीं, शायद
flakeथा या कोई और फीचर, कहीं उसे best practice कहा जाता है, कहीं experimental, और कहीं दोनों, और यह स्थिति कई सालों से चलती आ रही है—यह देखकर लगा कि आगे काफ़ी मुश्किलें होने वाली हैं..बेशक, पूरे desktop environment को आसानी से code के रूप में ढाल पाने का अनुभव आनंददायक था
Firebase Studio भी Nix का उपयोग करता है
ओ...अच्छा, ऐसा है!
वैसे, R.I.P. Firebase Studio :(
बहुत मुश्किल है, थोड़ा कोशिश करके फिर छोड़ दिया T_T
(I use Arch btw)
जो लोग जानते हैं, वे इसे चुपचाप इस्तेमाल कर रहे हैं lol
डिक्लेरेटिव functional language से लागू किया गया reproducible setup
इसकी learning curve वाकई हद से ज़्यादा है। जितनी reproducibility यह सुनिश्चित करता है, उतने ही ऊँचे स्तर की समझ भी माँगता है।
flakeइस्तेमाल करें तब भी यह काफ़ी पेचीदा रहता है।और लगता है कि अंदरूनी तौर पर यह sqlite का इस्तेमाल करता है, लेकिन इसकी performance भी काफ़ी उतार-चढ़ाव वाली है, इसलिए एक बार environment को फिर से reproduce करने में लगने वाले समय में भी थोड़ा fluctuation रहता है.
Hacker News की राय
मेरा मानना है कि AI tools के साथ तालमेल के मामले में NixOS बेजोड़ है
दूसरे OS में सिस्टम configuration AI को सौंपना मुश्किल होता है, लेकिन NixOS अपनी declarative और rollback-योग्य संरचना की वजह से भरोसेमंद है
Pulseaudio से Pipewire में migration या Hyprland install करने का काम मैं Claude या Codex को नहीं दूँगा, लेकिन NixOS हो तो इतना भरोसा है कि Grok को भी दे सकता हूँ
बदलावों को पहले से review कर सकना और कभी भी वापस लौटा सकने की स्थिरता ही इसकी कुंजी है
अगर आप developer हैं, तो “AI द्वारा managed Linux desktop” का सपना देखते हुए NixOS आज़माने की सलाह दूँगा। शुरुआत Claude से यह कहकर की जा सकती है: “Flake-आधारित Gnome configuration बनाओ जिसे VM में demo किया जा सके”
Claude को GNOME की dconf settings declarative तरीके से adjust करते देखना हैरान करता है
लेकिन AI अक्सर Nix ecosystem के जटिल context को समझ नहीं पाता और अजीब नतीजे दे देता है
Nix की अनियमित lambda संरचना और modules के बीच implicit scope की वजह से यह सिर्फ इंसानों के लिए नहीं, AI के लिए भी कठिन है
इसलिए project की structure और patterns को साफ़-साफ़ define करना महत्वपूर्ण है। फिर भी Nix-आधारित templates बनाना मज़ेदार और productive है
Hyprland install करने के लिए भला LLM की क्या ज़रूरत है? सिर्फ
sudo dnf install hyprlandकाफ़ी हैNix ‘AI-friendly’ कम और इंसानों के लिए खुद संभालना झंझट वाला ज़्यादा लगता है, इसलिए लोग LLM का सहारा लेते हैं
मैं कई machines की settings को ‘business profiles’ की तरह manage करता हूँ और हर machine पर ज़रूरी repo और configuration अपने-आप deploy कर देता हूँ
कंपनी में एक सहकर्मी पहले Windows user था, लेकिन अब रोज़मर्रा में NixOS इस्तेमाल करता है
सारी hardware settings भी declarative तरीके से manage हो रही हैं, और मेरी settings GitHub public repository में हैं। feedback स्वागतयोग्य है
settings को नई structure में migrate करना हो या कई WM/DE test environments बनानी हों, Claude ज़्यादातर दोहराए जाने वाले काम संभाल लेता है
अब system पूरी तरह stable है, इसलिए हाथ से करने के लिए बहुत कम काम बचता है
दूसरे OS में इतना भरोसा करना मुश्किल है
उसकी जगह मैं Docker scripts से development environment manage करता था, लेकिन अब लगता है कि Nix और AI की जोड़ी एकदम परफेक्ट है
आगे चलकर शायद बहुत सा software आएगा जिसे AI और आसानी से संभाल सकेगा
30 साल Windows इस्तेमाल करने के बाद मैंने 1 साल पहले पूरी तरह Nix पर switch किया
अब Windows पर वापस जाने का बिल्कुल मन नहीं है
पूरा OS configuration एक Git repository में होना मुझे बहुत पसंद है
Nix के बिना development करना, Git के बिना coding करने जितना ही inefficent लगता है
एक बार setup कर देने के बाद नया system तैयार करना बहुत आसान हो जाता है
मैं चाहता हूँ कि हर app अपने अलग environment में चले, लेकिन पूरे system पर उसका असर न पड़े
मुझे लगता है कि NixOS ऐसे भविष्य की तरफ़ जाने वाले रास्तों में से एक है
Nvidia GPU भी अच्छी तरह काम करता है, और यह Gamescope से काफ़ी ज़्यादा stable है
मैं NixOS को और ज़्यादा पसंद करना चाहता हूँ, लेकिन documentation की कमी सबसे बड़ी समस्या है
जानकारी अलग-अलग forums, पुराने blogs और issues में बिखरी हुई है
दोनों update होती रहती हैं, लेकिन search करते समय हर बार यह तय करना मुश्किल होता है कि कौन-सी ज़्यादा current है
nixpkgs को clone करके सीधे पढ़ना सबसे तेज़ तरीका है
मैंने NixOS को laptop OS के रूप में इस्तेमाल किया था, और इसके फायदे-नुकसान दोनों बहुत साफ़ थे
declarative configuration और snapshot features क्रांतिकारी हैं, लेकिन package/service का भेद और Flake की अवधारणा उलझाऊ लगी
KDE install करने पर सिर्फ minimal setup मिलता था, इसलिए अतिरिक्त configuration की ज़रूरत पड़ी, और documentation भी version के हिसाब से बदलती रही, जिससे उसे follow करना कठिन था
आखिरकार मुझे एक stable machine चाहिए थी, इसलिए छोड़ना पड़ा, लेकिन system administrators के लिए यह शानदार विकल्प लगता है
Determinate Systems installer default रूप से Flake enable करता है
/etc/nixosconfiguration को Git repository में ले जाया जा सकता है, औरnixos-install --flake <repo>command से पूरा configuration deploy किया जा सकता हैअगर home-manager साथ में इस्तेमाल करें, तो user directories तक declarative तरीके से manage की जा सकती हैं
/etcfiles कोenvironment.etcसे, और.configfiles को home-manager options से manage किया जा सकता हैसंबंधित links: environment.etc option, home-manager options
mkOutOfStoreSymlinkसे जुड़ा documentation खोजते समय “यह इतना आसान है कि documentation की ज़रूरत नहीं” वाला जवाब देखकर हँसी आ गईइसके बावजूद NixOS के फायदे इतने बड़े हैं कि मैं homelab → laptop → desktop क्रम में पूरी तरह migrate कर रहा हूँ
लेकिन documentation की स्थिति अब भी निराशाजनक है
यानी यह Nix स्तर पर package.json और lock file दोनों की भूमिका निभाता है
मुझे NixOS पहले से पसंद था, लेकिन LLM युग के बाद यह और भी ज़्यादा पसंद आने लगा
Codex से अगर कहो, “इस server configuration को बदल दो ताकि wildcard certificate काम करे,” तो वह 5 मिनट में हल कर देता है
reproducible server management इतना आसान पहले कभी नहीं लगा
NixOS पर switch करने के बाद, apt या brew से management वाले दिन पाषाण युग की तकनीक जैसे लगते हैं
Copilot जैसे AI tools के साथ इसकी compatibility भी शानदार है
समस्या हल करने के लिए सामान्य Linux से भी गहरी समझ चाहिए
बदले में इसकी जटिलता शुरुआत में एक बार में चुकानी पड़ती है
nix-shell से temporary installs करना, या एक configuration file में installed सारे packages देख पाना सबसे बढ़िया है
automatic snapshots की वजह से प्रयोग करने में डर नहीं लगता। कुछ गलत हो जाए तो बस पिछली generation में boot कर लो
पहले kernel parameters बदलने में डर लगता था, लेकिन अब खुलकर कोशिश कर सकता हूँ
मुझे Lisp पसंद है इसलिए Guix System पर भी विचार किया था, लेकिन practical usability में NixOS बेहतर लगा
काश NixOS की असामान्य filesystem संरचना न होती
यह कई versions के Python को एक साथ इस्तेमाल करने की समस्या हल करने का तरीका है, लेकिन मेरे लिए यह ज़रूरी नहीं है
मैं तो बस हर machine पर एक जैसी settings बनाए रखना चाहता हूँ
अभी मैं Fedora bootc images और Podman के साथ प्रयोग कर रहा हूँ, लेकिन
nixos-rebuild switchजैसी तुरंत असर दिखाने वाली सुविधा न होने से असुविधा होती हैआखिरकार यह आसानी से प्रयोग किए जा सकने वाले Nix और standard filesystem वाले Fedora के बीच का trade-off है
NixOS का सबसे बड़ा फायदा CI cache की deterministic reproducibility है
packages को हर बार फिर से build करने की ज़रूरत नहीं पड़ती, और development environment setup करना भी आसान हो जाता है
उदाहरण के लिए Tangled ने अपना पूरा CI system Nix पर बनाया, और GitHub Actions की caching समस्याएँ पूरी तरह हल कर लीं
मैं पूरे system के लिए नहीं, लेकिन devenv.sh का शौक़ से इस्तेमाल करता हूँ
local containers की तुलना में development environment बनाना इससे कहीं आसान है
asdf की
.tool-versionsजैसा कोई आसान तरीका नहीं है जिससे versions को सीधा match किया जा सकेNix समुदाय में लोग कहते हैं “यह गलत approach है,” लेकिन मैं फिर भी individual versions pin करना चाहता हूँ
pkgs.mkShellसे भी वैसा environment बनाया जा सकता है, तो फिर devenv इस्तेमाल करने की ज़रूरत क्यों है?मुझे NixOS भी पसंद है, लेकिन Guix ज़्यादा पसंद है
Guile language मुझे ज़्यादा स्वाभाविक लगती है, और documentation भी बेहतर है। मेरे हिसाब से दोनों systems बहन-जैसे हैं
वास्तविक programming language (Scheme) का उपयोग इसका बड़ा फायदा है
यह किसी साधारण configuration language की तुलना में कहीं ज़्यादा शक्तिशाली आधार देता है