[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"latest-posts":3,"$f5yq1cu43ehhh":12638},[4,2342,4313,5054,5755,9344],{"id":5,"title":6,"body":7,"date":2323,"description":2324,"extension":2325,"locale":2326,"meta":2327,"navigation":2335,"path":2336,"seo":2337,"stem":2340,"__hash__":2341},"blog\u002Fblog\u002Far\u002Fgetting-started-with-go.md","ابدأ تبقى Gopher",{"type":8,"value":9,"toc":2286},"minimark",[10,14,21,24,27,33,36,39,43,46,59,62,65,69,72,76,81,111,115,133,137,153,157,183,187,190,290,297,315,318,355,359,362,376,380,391,394,398,411,414,416,420,423,427,430,436,447,452,467,472,486,491,505,511,514,518,527,585,589,592,621,625,628,658,661,735,738,752,759,777,780,798,805,823,833,837,854,870,873,875,879,882,886,889,904,910,929,933,936,991,994,999,1002,1009,1012,1109,1119,1121,1126,1129,1187,1194,1196,1201,1208,1287,1297,1299,1304,1307,1390,1401,1403,1408,1411,1472,1486,1490,1493,1498,1501,1578,1585,1587,1592,1595,1641,1647,1649,1654,1658,1694,1698,1701,1734,1737,1780,1787,1790,1794,1797,1829,1832,1835,1848,1852,1855,1870,1873,1881,1883,1887,1890,1893,1907,1910,2073,2075,2087,2090,2098,2101,2103,2107,2110,2130,2135,2137,2141,2183,2185,2189,2192,2195,2198,2209,2212,2217,2219,2222,2254,2257,2268,2270,2273,2276,2279,2282],[11,12,13],"h2",{"id":13},"مقدمة",[15,16,17],"blockquote",{},[18,19,20],"p",{},"هل Go تستاهل اني اتعلمها؟",[18,22,23],{},"سؤال غلط ياصديقي",[18,25,26],{},"السؤال الصح هو:",[18,28,29],{},[30,31,32],"strong",{},"\"هل أنا محتاج Go للي بحاول أبنيه دلوقتي؟\"",[18,34,35],{},"لأن اللي بيحصل دايما حاجه بسيطه: بتتفرج على كراش كورسز، بتقارن Go مقابل Rust--- Unknown node: hardBreak ---مقابل Node، بتحوش 20 تاب… ومابتكتبش ولا اي بتنجان",[18,37,38],{},"البوست ده مش لاني اقنعك تستخدم جو انا مالي يعم😂 البوست دا لإنك تبدأ بسرعة وبشكل عملي ومن غير ما تضيع وقت وتحرق بنزين كتير عالفاضي.",[11,40,42],{"id":41},"go-كويسة-في-إيه-فعلا","Go كويسة في إيه فعلا",[18,44,45],{},"Go مبنية علشان:",[47,48,49,53,56],"ul",{},[50,51,52],"li",{},"APIs وخدمات الباك إند",[50,54,55],{},"ادوات CLI\u002FTUI (بصراحة دي من أجمل الحاجات هنا)",[50,57,58],{},"الشبكات \u002F الأنظمة الموزعة",[18,60,61],{},"لو ده اللي بتبنيه كمل قراية. لو لأ يمكن انت مش محتاج Go اصلا.",[63,64],"hr",{},[11,66,68],{"id":67},"نزل-go-دلوقتي-مش-بعدين","نزل Go (دلوقتي مش بعدين)",[18,70,71],{},"متتخطاش الجزء ده الا لو جو عندك فعلا.",[11,73,75],{"id":74},"التثبيت-لتوزيعات-لينكس-تعالى-هنا-يا-معلم-لينكس","التثبيت لتوزيعات لينكس (تعالى هنا يا معلم لينكس)",[77,78,80],"h3",{"id":79},"arch-linux-cachyos-endeavouros","Arch Linux \u002F CachyOS \u002F EndeavourOS",[82,83,88],"pre",{"className":84,"code":85,"language":86,"meta":87,"style":87},"language-bash shiki shiki-themes github-light github-dark","sudo pacman -S go\n","bash","",[89,90,91],"code",{"__ignoreMap":87},[92,93,96,100,104,108],"span",{"class":94,"line":95},"line",1,[92,97,99],{"class":98},"sScJk","sudo",[92,101,103],{"class":102},"sZZnC"," pacman",[92,105,107],{"class":106},"sj4cs"," -S",[92,109,110],{"class":102}," go\n",[77,112,114],{"id":113},"fedora","Fedora",[82,116,118],{"className":84,"code":117,"language":86,"meta":87,"style":87},"sudo dnf install golang\n",[89,119,120],{"__ignoreMap":87},[92,121,122,124,127,130],{"class":94,"line":95},[92,123,99],{"class":98},[92,125,126],{"class":102}," dnf",[92,128,129],{"class":102}," install",[92,131,132],{"class":102}," golang\n",[77,134,136],{"id":135},"opensuse-tumbleweed-leap","openSUSE (Tumbleweed \u002F Leap)",[82,138,140],{"className":84,"code":139,"language":86,"meta":87,"style":87},"sudo zypper install go\n",[89,141,142],{"__ignoreMap":87},[92,143,144,146,149,151],{"class":94,"line":95},[92,145,99],{"class":98},[92,147,148],{"class":102}," zypper",[92,150,129],{"class":102},[92,152,110],{"class":102},[77,154,156],{"id":155},"debian-ubuntu","Debian \u002F Ubuntu",[82,158,160],{"className":84,"code":159,"language":86,"meta":87,"style":87},"sudo apt update\nsudo apt install golang\n",[89,161,162,172],{"__ignoreMap":87},[92,163,164,166,169],{"class":94,"line":95},[92,165,99],{"class":98},[92,167,168],{"class":102}," apt",[92,170,171],{"class":102}," update\n",[92,173,175,177,179,181],{"class":94,"line":174},2,[92,176,99],{"class":98},[92,178,168],{"class":102},[92,180,129],{"class":102},[92,182,132],{"class":102},[77,184,186],{"id":185},"أو-تثبيت-على-اي-توزيعه","أو تثبيت على اي توزيعه",[18,188,189],{},"لو عايز أحدث نسخة دايمًا، دي كوماند هاكي عملتها كدا علشان أنزل أحدث نسخة:",[82,191,193],{"className":84,"code":192,"language":86,"meta":87,"style":87},"GO_TAR=$(curl -s https:\u002F\u002Fgo.dev\u002FVERSION?m=text | head -n 1).linux-amd64.tar.gz\nwget https:\u002F\u002Fgo.dev\u002Fdl\u002F$GO_TAR\nsudo rm -rf \u002Fusr\u002Flocal\u002Fgo\nsudo tar -C \u002Fusr\u002Flocal -xzf $GO_TAR\nrm -rf $GO_TAR\n",[89,194,195,235,246,260,280],{"__ignoreMap":87},[92,196,197,201,205,208,211,214,217,220,223,226,229,232],{"class":94,"line":95},[92,198,200],{"class":199},"sVt8B","GO_TAR",[92,202,204],{"class":203},"szBVR","=",[92,206,207],{"class":199},"$(",[92,209,210],{"class":98},"curl",[92,212,213],{"class":106}," -s",[92,215,216],{"class":102}," https:\u002F\u002Fgo.dev\u002FVERSION?m=text",[92,218,219],{"class":203}," |",[92,221,222],{"class":98}," head",[92,224,225],{"class":106}," -n",[92,227,228],{"class":106}," 1",[92,230,231],{"class":199},")",[92,233,234],{"class":102},".linux-amd64.tar.gz\n",[92,236,237,240,243],{"class":94,"line":174},[92,238,239],{"class":98},"wget",[92,241,242],{"class":102}," https:\u002F\u002Fgo.dev\u002Fdl\u002F",[92,244,245],{"class":199},"$GO_TAR\n",[92,247,249,251,254,257],{"class":94,"line":248},3,[92,250,99],{"class":98},[92,252,253],{"class":102}," rm",[92,255,256],{"class":106}," -rf",[92,258,259],{"class":102}," \u002Fusr\u002Flocal\u002Fgo\n",[92,261,263,265,268,271,274,277],{"class":94,"line":262},4,[92,264,99],{"class":98},[92,266,267],{"class":102}," tar",[92,269,270],{"class":106}," -C",[92,272,273],{"class":102}," \u002Fusr\u002Flocal",[92,275,276],{"class":106}," -xzf",[92,278,279],{"class":199}," $GO_TAR\n",[92,281,283,286,288],{"class":94,"line":282},5,[92,284,285],{"class":98},"rm",[92,287,256],{"class":106},[92,289,279],{"class":199},[18,291,292,293,296],{},"بعدين ضيف ",[89,294,295],{},"Go bin"," للـ PATH:",[82,298,300],{"className":84,"code":299,"language":86,"meta":87,"style":87},"export PATH=$PATH:\u002Fusr\u002Flocal\u002Fgo\u002Fbin\n",[89,301,302],{"__ignoreMap":87},[92,303,304,307,310,312],{"class":94,"line":95},[92,305,306],{"class":203},"export",[92,308,309],{"class":199}," PATH",[92,311,204],{"class":203},[92,313,314],{"class":199},"$PATH:\u002Fusr\u002Flocal\u002Fgo\u002Fbin\n",[18,316,317],{},"ولو عايزها موجوده دايما:",[82,319,321],{"className":84,"code":320,"language":86,"meta":87,"style":87},"# الأمر ده بيضيف Go للـ PATH (الكومبايلر + الأدوات المثبتة)\n# وبرضه لازم تستخدم bash shell، لو بتستخدم شيل تانيه اسأل ال ai يديلك الأمر XD\necho 'export PATH=$PATH:\u002Fusr\u002Flocal\u002Fgo\u002Fbin:$(go env GOPATH)\u002Fbin' >> ~\u002F.bashrc\nsource ~\u002F.bashrc\n",[89,322,323,329,334,348],{"__ignoreMap":87},[92,324,325],{"class":94,"line":95},[92,326,328],{"class":327},"sJ8bj","# الأمر ده بيضيف Go للـ PATH (الكومبايلر + الأدوات المثبتة)\n",[92,330,331],{"class":94,"line":174},[92,332,333],{"class":327},"# وبرضه لازم تستخدم bash shell، لو بتستخدم شيل تانيه اسأل ال ai يديلك الأمر XD\n",[92,335,336,339,342,345],{"class":94,"line":248},[92,337,338],{"class":106},"echo",[92,340,341],{"class":102}," 'export PATH=$PATH:\u002Fusr\u002Flocal\u002Fgo\u002Fbin:$(go env GOPATH)\u002Fbin'",[92,343,344],{"class":203}," >>",[92,346,347],{"class":102}," ~\u002F.bashrc\n",[92,349,350,353],{"class":94,"line":262},[92,351,352],{"class":106},"source",[92,354,347],{"class":102},[77,356,358],{"id":357},"macos","macOS",[18,360,361],{},"باستخدام Homebrew:",[82,363,365],{"className":84,"code":364,"language":86,"meta":87,"style":87},"brew install go\n",[89,366,367],{"__ignoreMap":87},[92,368,369,372,374],{"class":94,"line":95},[92,370,371],{"class":98},"brew",[92,373,129],{"class":102},[92,375,110],{"class":102},[77,377,379],{"id":378},"windows","Windows",[18,381,382,383],{},"نزل المثبت من: ",[30,384,385],{},[386,387,388],"a",{"href":388,"rel":389},"https:\u002F\u002Fgo.dev\u002Fdl\u002F",[390],"nofollow",[18,392,393],{},"شغله. خلاص.",[77,395,397],{"id":396},"اتأكد-من-التثبيت","اتأكد من التثبيت",[82,399,401],{"className":84,"code":400,"language":86,"meta":87,"style":87},"go version\n",[89,402,403],{"__ignoreMap":87},[92,404,405,408],{"class":94,"line":95},[92,406,407],{"class":98},"go",[92,409,410],{"class":102}," version\n",[18,412,413],{},"لو طبعلك نسخة فإنت تمام.",[63,415],{},[11,417,419],{"id":418},"شوية-مصادر-لأحبابي-القرّاء","شوية مصادر لأحبابي القرّاء",[18,421,422],{},"Go عندها مصادر كويسة وموثقة جميله جدا، بس المصادر الرسمية في بعض الأحيان بتحسس ال gophers الجداد بلغبطه وتشويش.--- Unknown node: hardBreak ---يلا يافنان هديك إزاي تتعلم من الدوكس الرسمية ومن مصادر غير رسمية بالحب عشان انت واحد عسليه عزيزي القارئ",[77,424,426],{"id":425},"the-godev","The Go.dev",[18,428,429],{},"أول حاجة، عندك 3 طرق في go.dev تتعلم بيها:",[431,432,433],"ol",{},[50,434,435],{},"A Tour Of Go",[47,437,438],{},[50,439,440,441,446],{},"Go عندها Tutorial تفاعلي جامد اسمه ",[386,442,445],{"href":443,"rel":444},"https:\u002F\u002Fgo.dev\u002Ftour\u002F",[390],"\"A Tour Of Go\""," تقدر تخلص عليه كل أساسيات ومفاهيم Go.",[15,448,449],{},[18,450,451],{},"زي ما هما بيقولو: مقدمة تفاعلية لـGo في أربع أقسام. القسم الأول بيغطي الـ syntax الأساسي وهياكل البيانات؛ التاني بيتكلم عن الـ methods والـ interfaces؛ التالت عن الـ Generics؛ والرابع بيقدّم أساسيات الـ concurrency في Go. كل قسم بيخلص بشوية تمارين علشان تتدرب على اللي اتعلمته.",[453,454,456],"callout",{"type":455},"note",[18,457,458,459,463,464],{},"تقدر تاخد ",[386,460,462],{"href":443,"rel":461},[390],"الجولة أونلاين",". أو تثبتها على جهازك ب ",[89,465,466],{},"go install golang.org\u002Fx\u002Fwebsite\u002Ftour@latest",[431,468,469],{"start":174},[50,470,471],{},"Go tutorial",[47,473,474,477],{},[50,475,476],{},"دي إرشادات خطوة بخطوة لمهام محددة، زي البدء مع الموديولز، أو إنشاء multi-module workspaces، أو الوصول لداتا بيز. بعد ما تخلص جولة Go؛ تقدر تبدأ بيها. (أنا عملت كده)",[50,478,479,480,485],{},"تقدر توصلها ",[386,481,484],{"href":482,"rel":483},"https:\u002F\u002Fgo.dev\u002Fdoc\u002Ftutorial\u002F",[390],"من هنا",".",[431,487,488],{"start":248},[50,489,490],{},"Effective Go",[47,492,493,496,502],{},[50,494,495],{},"بعد ما تستوعب أساسيات اللغة، الصفحه دي بتساعدك تفهم إزاي تكتب كود Go واضح و idiomatic (يعني \"الطريقة بتاعة Go\").",[50,497,479,498,485],{},[386,499,484],{"href":500,"rel":501},"https:\u002F\u002Fgo.dev\u002Fdoc\u002Feffective_go",[390],[50,503,504],{},"هو مجموعة أقسام متروسين في صفحة واحدة بس هتكون مرتاح معاه XD",[453,506,508],{"type":507},"tip",[18,509,510],{},"مش هتحس بالراحة مع Go ومش هتحبها لو متعلمتش إزاي تكتب كود Go واضح و idiomatic، وبرضه لو بتقاوم آراءها فأنسى انك تحبها اصلا.",[18,512,513],{},"بعد كده أظن هتغلبني في Go (بس مش هتقدر بصراحة انا العم XD)",[77,515,517],{"id":516},"the-gocommunity","The Go.community",[18,519,520,521,526],{},"كوميونتي Go كويس جدا وبيقدم المساعدة وبينشئ مشاريع OSS كتير مع الحفاظ على توثيقها كويس، زي ",[386,522,525],{"href":523,"rel":524},"https:\u002F\u002Fcharm.land",[390],"charmTM"," أنا بحب الفريق ده والكوميونتي بتاعتهم، ساعدوني كتير عن Go وحتى بطاقة إيجابية XD، وفيه ناس تانية عملوا مصادر كويسة للGo زي:",[47,528,529,537,545,553,561,569,577],{},[50,530,531,536],{},[386,532,535],{"href":533,"rel":534},"https:\u002F\u002Fgobyexample.com\u002F",[390],"Go By Example",": مقدمة عملية لـGo باستخدام برامج أمثلة مشروحة.",[50,538,539,544],{},[386,540,543],{"href":541,"rel":542},"https:\u002F\u002Fexercism.org\u002Ftracks\u002Fgo",[390],"Exercism for Gophers",": كورس كويس للناس اللي بتحب طريقة التعلم بالفيديو (أنا مش بحبها بس غيري ممكن يحبها) فيه \"164 تمرين مجمّعين في 34 مفهوم في Go، مع تحليل تلقائي لكودك ومتابعة شخصية، كل ده مجاني 100%.\" -- على حد قولهم.",[50,546,547,552],{},[386,548,551],{"href":549,"rel":550},"https:\u002F\u002Fawesome-go.com\u002F",[390],"Awesome Go",": قائمة منسّقة لأطر ومكتبات وبرامج Go المذهلة. مستوحاة من awesome-python.",[50,554,555,560],{},[386,556,559],{"href":557,"rel":558},"https:\u002F\u002Flearnxinyminutes.com\u002Fgo",[390],"Learn X in Y minutes",": واللي X فيها = Go 😂😂.",[50,562,563,568],{},[386,564,567],{"href":565,"rel":566},"https:\u002F\u002Fgo101.org\u002F",[390],"Go101",": (قاعدة معرفة حديثة للتعلم الذاتي لبرمجة Go).",[50,570,571,576],{},[386,572,575],{"href":573,"rel":574},"https:\u002F\u002Fwww.mintlify.com\u002Fmmcgrana\u002Fgobyexample",[390],"نسخة تانية من go by example",": نسخة go by example جميلة وحديثة بشكل docs وفيها ميزة Ask-ai.",[50,578,579,584],{},[386,580,583],{"href":581,"rel":582},"https:\u002F\u002Fquii.gitbook.io\u002Flearn-go-with-tests",[390],"Learn Go with tests",": مصدر كويس تتعلم منه التطوير المبنى على الاختبارات مع Go وفيه قسم أساسيات Go.",[77,586,588],{"id":587},"the-gobooks","The Go.books",[18,590,591],{},"هخخخخخ فيه كتير هنا بس هحط الكتب والمكتبات المهمه واللي جربتها:",[47,593,594,602,610],{},[50,595,596,601],{},[386,597,600],{"href":598,"rel":599},"http:\u002F\u002Fwww.cs.uniroma2.it\u002Fupload\u002F2017\u002FTSC\u002FThe%20Go%20Programming%20Language.pdf",[390],"The Go Programming Language",": ده زي الكتاب الرسمي بس مش رسمي، وكويس جدًا.",[50,603,604,609],{},[386,605,608],{"href":606,"rel":607},"https:\u002F\u002Fgithub.com\u002Fdariubs\u002FGoBooks",[390],"Awesome Go books",": كتب جو مجموعة منسقة من أفضل كتب Go للمطورين على كل المستويات -- من المبتدئين للمهندسين اللي شغالين على الـ concurrency والأداء وتصميم الأنظمة. مكان واحد تلاقي فيه مصدر التعلم الصح.",[50,611,612,617,618,485],{},[386,613,616],{"href":614,"rel":615},"https:\u002F\u002Fgo.dev\u002Fwiki\u002FBooks",[390],"Go Wiki books",": القائمة الرسمية للكتب من ",[89,619,620],{},"go.dev",[11,622,624],{"id":623},"أول-برنامج-go-ليك","أول برنامج Go ليك",[18,626,627],{},"اعمل ملف:",[82,629,631],{"className":84,"code":630,"language":86,"meta":87,"style":87},"mkdir hello-go && cd hello-go\ntouch main.go\n",[89,632,633,650],{"__ignoreMap":87},[92,634,635,638,641,644,647],{"class":94,"line":95},[92,636,637],{"class":98},"mkdir",[92,639,640],{"class":102}," hello-go",[92,642,643],{"class":199}," && ",[92,645,646],{"class":106},"cd",[92,648,649],{"class":102}," hello-go\n",[92,651,652,655],{"class":94,"line":174},[92,653,654],{"class":98},"touch",[92,656,657],{"class":102}," main.go\n",[18,659,660],{},"حط ده جواه:",[82,662,666],{"className":663,"code":664,"filename":665,"language":407,"meta":87,"style":87},"language-go shiki shiki-themes github-light github-dark","package main\n\nimport \"fmt\"\n\nfunc main() {\n    fmt.Println(\"hello from Samouly, gopher!\")\n}\n","hello.go",[89,667,668,676,682,696,700,711,729],{"__ignoreMap":87},[92,669,670,673],{"class":94,"line":95},[92,671,672],{"class":203},"package",[92,674,675],{"class":98}," main\n",[92,677,678],{"class":94,"line":174},[92,679,681],{"emptyLinePlaceholder":680},true,"\n",[92,683,684,687,690,693],{"class":94,"line":248},[92,685,686],{"class":203},"import",[92,688,689],{"class":102}," \"",[92,691,692],{"class":98},"fmt",[92,694,695],{"class":102},"\"\n",[92,697,698],{"class":94,"line":262},[92,699,681],{"emptyLinePlaceholder":680},[92,701,702,705,708],{"class":94,"line":282},[92,703,704],{"class":203},"func",[92,706,707],{"class":98}," main",[92,709,710],{"class":199},"() {\n",[92,712,714,717,720,723,726],{"class":94,"line":713},6,[92,715,716],{"class":199},"    fmt.",[92,718,719],{"class":98},"Println",[92,721,722],{"class":199},"(",[92,724,725],{"class":102},"\"hello from Samouly, gopher!\"",[92,727,728],{"class":199},")\n",[92,730,732],{"class":94,"line":731},7,[92,733,734],{"class":199},"}\n",[18,736,737],{},"شغّله:",[82,739,741],{"className":84,"code":740,"language":86,"meta":87,"style":87},"go run main.go\n",[89,742,743],{"__ignoreMap":87},[92,744,745,747,750],{"class":94,"line":95},[92,746,407],{"class":98},[92,748,749],{"class":102}," run",[92,751,657],{"class":102},[11,753,755,756,231],{"id":754},"إدارة-مشروعك-بطريقة-go-mod","إدارة مشروعك (بطريقة ",[89,757,758],{},"go mod",[18,760,761,762,765,766,768,769,772,773,776],{},"زمان كان في كابوس ",[89,763,764],{},"GOPATH"," قديما بس دلوقني ياباشا بقا فيه ",[89,767,758],{},". في Go الحديثة، كل مشروع محتاج--- Unknown node: hardBreak ---",[30,770,771],{},"Module",". زي ",[89,774,775],{},"package.json"," بالنسبة لـGo. هو بيعرّف الكومبايلر (والـ LSP\nبتاعك) فين الاعتماديات.",[18,778,779],{},"في فولدر مشروعك، نفذ:",[82,781,783],{"className":84,"code":782,"language":86,"meta":87,"style":87},"go mod init my-awesome-project\n",[89,784,785],{"__ignoreMap":87},[92,786,787,789,792,795],{"class":94,"line":95},[92,788,407],{"class":98},[92,790,791],{"class":102}," mod",[92,793,794],{"class":102}," init",[92,796,797],{"class":102}," my-awesome-project\n",[18,799,800,801,804],{},"ده بيعمل ملف ",[89,802,803],{},"go.mod",". ومن اللحظة دي:",[47,806,807,814,817],{},[50,808,809,810,813],{},"الـ ",[30,811,812],{},"LSP"," بتاعك هيشتغل فعلا.",[50,815,816],{},"تقدر تستورد الحزم المحلية.",[50,818,819,820,485],{},"تقدر تضيف مكتبات خارجية باستخدام ",[89,821,822],{},"go get",[453,824,826],{"type":825},"warning",[18,827,828,829,832],{},"لو مشغلتش ",[89,830,831],{},"go mod init",", فإنت أصلاً بتكتب كود في نوت باد من غير أي \"ذكاء\" من أدواتك. متبقاش الشخص ده.",[11,834,836],{"id":835},"ابني-binary-المكان-اللي-go-بتتألق-فيه-xd","ابني Binary (المكان اللي Go بتتألق فيه XD)",[82,838,840],{"className":84,"code":839,"language":86,"meta":87,"style":87},"go build\n.\u002Fhello-go\n",[89,841,842,849],{"__ignoreMap":87},[92,843,844,846],{"class":94,"line":95},[92,845,407],{"class":98},[92,847,848],{"class":102}," build\n",[92,850,851],{"class":94,"line":174},[92,852,853],{"class":98},".\u002Fhello-go\n",[453,855,856],{"type":507},[18,857,858,859,862,863,866,867,485],{},"تسمية الـ Binary: لو شغلت go build ",[30,860,861],{},"(من غير ما تحدد ملف)",", Go هتسمي الـ binary على اسم الديركتوري. لو بنيت ملف محدد زي ",[89,864,865],{},"go build main.go"," هيتم تسميته ",[89,868,869],{},"main",[18,871,872],{},"دلوقتي معاك binary مستقل. مفيش runtime. مفيش اعتماديات. بس شغله وهيشتغل.",[63,874],{},[11,876,878],{"id":877},"المفاهيم-الوحيدة-اللي-محتاجها-علشان-تبدأ","المفاهيم الوحيدة اللي محتاجها علشان تبدأ",[18,880,881],{},"متحاولش تتعلم كل حاجة. ركّز على دي:",[77,883,885],{"id":884},"_1-الحزم-packages","1. الحزم (Packages)",[18,887,888],{},"كل حاجة في Go حزمة (package). فكّر فيها زي الفولدرات في نظام الملفات بتاعك\nكل ملف بيعمل جزء من حزمة، وكده Go بتنظّم الكود.",[82,890,892],{"className":663,"code":891,"language":407,"meta":87,"style":87},"import \"fmt\"\n",[89,893,894],{"__ignoreMap":87},[92,895,896,898,900,902],{"class":94,"line":95},[92,897,686],{"class":203},[92,899,689],{"class":102},[92,901,692],{"class":98},[92,903,695],{"class":102},[18,905,906,907,909],{},"هنا ",[89,908,692],{}," هي حزمة التنسيق القياسية. بتستخدمها للطباعة على الكونسول،\nوتنسيق النصوص، وكل الأساسيات دي. في مئات منها في المكتبة القياسية،\nبس محتاج شوية بس علشان تبدأ.",[911,912,915],"card",{"icon":913,"title":914},"i-simple-icons-go","قاعدة الحزم",[18,916,917,918,921,922,925,926,485],{},"كل ملف Go لازم يبدأ\nبتعريف حزمة. للبرامج القابلة للتنفيذ استخدم ",[89,919,920],{},"package main",". للمكتبات،\nاستخدم أي اسم يناسب زي ",[89,923,924],{},"package utils"," أو ",[89,927,928],{},"package models",[77,930,932],{"id":931},"_2-الدوال-functions","2. الدوال (Functions)",[18,934,935],{},"الدوال في Go واضحة ومباشرة. بتحدّد إيه اللي داخل وإيه اللي طالع.",[82,937,939],{"className":663,"code":938,"language":407,"meta":87,"style":87},"func add(a int, b int) int {\n    return a + b\n}\n",[89,940,941,973,987],{"__ignoreMap":87},[92,942,943,945,948,950,953,956,959,962,964,967,970],{"class":94,"line":95},[92,944,704],{"class":203},[92,946,947],{"class":98}," add",[92,949,722],{"class":199},[92,951,386],{"class":952},"s4XuR",[92,954,955],{"class":203}," int",[92,957,958],{"class":199},", ",[92,960,961],{"class":952},"b",[92,963,955],{"class":203},[92,965,966],{"class":199},") ",[92,968,969],{"class":203},"int",[92,971,972],{"class":199}," {\n",[92,974,975,978,981,984],{"class":94,"line":174},[92,976,977],{"class":203},"    return",[92,979,980],{"class":199}," a ",[92,982,983],{"class":203},"+",[92,985,986],{"class":199}," b\n",[92,988,989],{"class":94,"line":248},[92,990,734],{"class":199},[18,992,993],{},"ده ملخصها. مفيش سحر، مفيش decorators، مفيش syntax غريبة.",[995,996,998],"h4",{"id":997},"أنواع-الدوال","أنواع الدوال",[18,1000,1001],{},"Go مش فيها overloading، بس في شوية أنماط رئيسية تستاهل تعرفها:",[1003,1004,1006],"h5",{"id":1005},"_1-قيم-رجوع-متعددة",[30,1007,1008],{},"1. قيم رجوع متعددة",[18,1010,1011],{},"دي حاجة ضخمة في Go. الدوال تقدر ترجّع قيمة AND error. كده Go\nبتتعامل مع الأخطاء وهتشوفها في كل مكان.",[82,1013,1015],{"className":663,"code":1014,"language":407,"meta":87,"style":87},"func divide(a, b float64) (float64, error) {\n    if b == 0 {\n        return 0, fmt.Errorf(\"division by zero\")\n    }\n    return a \u002F b, nil\n}\n",[89,1016,1017,1049,1065,1085,1090,1105],{"__ignoreMap":87},[92,1018,1019,1021,1024,1026,1028,1030,1032,1035,1038,1041,1043,1046],{"class":94,"line":95},[92,1020,704],{"class":203},[92,1022,1023],{"class":98}," divide",[92,1025,722],{"class":199},[92,1027,386],{"class":952},[92,1029,958],{"class":199},[92,1031,961],{"class":952},[92,1033,1034],{"class":203}," float64",[92,1036,1037],{"class":199},") (",[92,1039,1040],{"class":203},"float64",[92,1042,958],{"class":199},[92,1044,1045],{"class":203},"error",[92,1047,1048],{"class":199},") {\n",[92,1050,1051,1054,1057,1060,1063],{"class":94,"line":174},[92,1052,1053],{"class":203},"    if",[92,1055,1056],{"class":199}," b ",[92,1058,1059],{"class":203},"==",[92,1061,1062],{"class":106}," 0",[92,1064,972],{"class":199},[92,1066,1067,1070,1072,1075,1078,1080,1083],{"class":94,"line":248},[92,1068,1069],{"class":203},"        return",[92,1071,1062],{"class":106},[92,1073,1074],{"class":199},", fmt.",[92,1076,1077],{"class":98},"Errorf",[92,1079,722],{"class":199},[92,1081,1082],{"class":102},"\"division by zero\"",[92,1084,728],{"class":199},[92,1086,1087],{"class":94,"line":262},[92,1088,1089],{"class":199},"    }\n",[92,1091,1092,1094,1096,1099,1102],{"class":94,"line":282},[92,1093,977],{"class":203},[92,1095,980],{"class":199},[92,1097,1098],{"class":203},"\u002F",[92,1100,1101],{"class":199}," b, ",[92,1103,1104],{"class":106},"nil\n",[92,1106,1107],{"class":94,"line":713},[92,1108,734],{"class":199},[18,1110,1111,1112,1114,1115,1118],{},"نوع ",[89,1113,1045],{}," هو طريقة Go المدمجة للتعامل مع الفشل. لو حاجة غلطت،\nبتحصل على error object. لو اشتغلت، بتحصل على ",[89,1116,1117],{},"nil",". تعوّد على\nالنمط ده، هو في كل مكان في كود Go.",[63,1120],{},[18,1122,1123],{},[30,1124,1125],{},"2. قيم رجوع مُسمّاة",[18,1127,1128],{},"Go بتخليك تسمّي اللي بترجّعه. دي مفيدة لما تحب تحدّدها\nمن بدري وترجّعها بعدين من غير ما تكتبها صراحةً.",[82,1130,1132],{"className":663,"code":1131,"language":407,"meta":87,"style":87},"func rectangle(width, height int) (area int) {\n    area = width * height\n    return\n}\n",[89,1133,1134,1162,1178,1183],{"__ignoreMap":87},[92,1135,1136,1138,1141,1143,1146,1148,1151,1153,1155,1158,1160],{"class":94,"line":95},[92,1137,704],{"class":203},[92,1139,1140],{"class":98}," rectangle",[92,1142,722],{"class":199},[92,1144,1145],{"class":952},"width",[92,1147,958],{"class":199},[92,1149,1150],{"class":952},"height",[92,1152,955],{"class":203},[92,1154,1037],{"class":199},[92,1156,1157],{"class":952},"area",[92,1159,955],{"class":203},[92,1161,1048],{"class":199},[92,1163,1164,1167,1169,1172,1175],{"class":94,"line":174},[92,1165,1166],{"class":199},"    area ",[92,1168,204],{"class":203},[92,1170,1171],{"class":199}," width ",[92,1173,1174],{"class":203},"*",[92,1176,1177],{"class":199}," height\n",[92,1179,1180],{"class":94,"line":248},[92,1181,1182],{"class":203},"    return\n",[92,1184,1185],{"class":94,"line":262},[92,1186,734],{"class":199},[18,1188,1189,1190,1193],{},"مش محتاج تقول ",[89,1191,1192],{},"return area"," Go عارفة لأنك سمّيتها. في ناس\nبتحب دي وفي ناس بتكرهها. أنا بستخدمها لما الدالة تكون طويلة و\nوضع قيمة الرجوع من بدري بيوضّح الكود.",[63,1195],{},[18,1197,1198],{},[30,1199,1200],{},"3. الدوال المتغيرة (Variadic)",[18,1202,1203,1204,1207],{},"دي بتقبل أي عدد من الأرجيومنتات. الـ ",[89,1205,1206],{},"..."," syntax هي السحر.",[82,1209,1211],{"className":663,"code":1210,"language":407,"meta":87,"style":87},"func sum(nums ...int) int {\n    total := 0\n    for _, n := range nums {\n        total += n\n    }\n    return total\n}\n",[89,1212,1213,1234,1245,1261,1272,1276,1283],{"__ignoreMap":87},[92,1214,1215,1217,1220,1222,1225,1228,1230,1232],{"class":94,"line":95},[92,1216,704],{"class":203},[92,1218,1219],{"class":98}," sum",[92,1221,722],{"class":199},[92,1223,1224],{"class":952},"nums",[92,1226,1227],{"class":203}," ...int",[92,1229,966],{"class":199},[92,1231,969],{"class":203},[92,1233,972],{"class":199},[92,1235,1236,1239,1242],{"class":94,"line":174},[92,1237,1238],{"class":199},"    total ",[92,1240,1241],{"class":203},":=",[92,1243,1244],{"class":106}," 0\n",[92,1246,1247,1250,1253,1255,1258],{"class":94,"line":248},[92,1248,1249],{"class":203},"    for",[92,1251,1252],{"class":199}," _, n ",[92,1254,1241],{"class":203},[92,1256,1257],{"class":203}," range",[92,1259,1260],{"class":199}," nums {\n",[92,1262,1263,1266,1269],{"class":94,"line":262},[92,1264,1265],{"class":199},"        total ",[92,1267,1268],{"class":203},"+=",[92,1270,1271],{"class":199}," n\n",[92,1273,1274],{"class":94,"line":282},[92,1275,1089],{"class":199},[92,1277,1278,1280],{"class":94,"line":713},[92,1279,977],{"class":203},[92,1281,1282],{"class":199}," total\n",[92,1284,1285],{"class":94,"line":731},[92,1286,734],{"class":199},[18,1288,1289,1290,925,1293,1296],{},"تقدر تستدعيها بـ ",[89,1291,1292],{},"sum(1, 2, 3)",[89,1294,1295],{},"sum(1, 2, 3, 4, 5)"," أي عدد. مفيدة\nجدًا لحاجات زي الـ logging وبناء الاستعلامات، وأي مكان ممكن\nتحتاج فيه أرجيومنتات مرنة.",[63,1298],{},[18,1300,1301],{},[30,1302,1303],{},"4. الدوال المجهولة",[18,1305,1306],{},"الدوال مش محتاجة اسم. تقدر تعرّفها inline وحتى تستدعيها\nفورًا.",[82,1308,1310],{"className":663,"code":1309,"language":407,"meta":87,"style":87},"func main() {\n    result := func(a int, b int) int {\n        return a + b\n    }(2, 3)\n\n    fmt.Println(result)\n}\n",[89,1311,1312,1320,1348,1358,1373,1377,1386],{"__ignoreMap":87},[92,1313,1314,1316,1318],{"class":94,"line":95},[92,1315,704],{"class":203},[92,1317,707],{"class":98},[92,1319,710],{"class":199},[92,1321,1322,1325,1327,1330,1332,1334,1336,1338,1340,1342,1344,1346],{"class":94,"line":174},[92,1323,1324],{"class":199},"    result ",[92,1326,1241],{"class":203},[92,1328,1329],{"class":203}," func",[92,1331,722],{"class":199},[92,1333,386],{"class":952},[92,1335,955],{"class":203},[92,1337,958],{"class":199},[92,1339,961],{"class":952},[92,1341,955],{"class":203},[92,1343,966],{"class":199},[92,1345,969],{"class":203},[92,1347,972],{"class":199},[92,1349,1350,1352,1354,1356],{"class":94,"line":248},[92,1351,1069],{"class":203},[92,1353,980],{"class":199},[92,1355,983],{"class":203},[92,1357,986],{"class":199},[92,1359,1360,1363,1366,1368,1371],{"class":94,"line":262},[92,1361,1362],{"class":199},"    }(",[92,1364,1365],{"class":106},"2",[92,1367,958],{"class":199},[92,1369,1370],{"class":106},"3",[92,1372,728],{"class":199},[92,1374,1375],{"class":94,"line":282},[92,1376,681],{"emptyLinePlaceholder":680},[92,1378,1379,1381,1383],{"class":94,"line":713},[92,1380,716],{"class":199},[92,1382,719],{"class":98},[92,1384,1385],{"class":199},"(result)\n",[92,1387,1388],{"class":94,"line":731},[92,1389,734],{"class":199},[18,1391,1392,1393,1396,1397,1400],{},"ده بيطبع ",[89,1394,1395],{},"5",". الدالة بتتعريف وبتتستدعى على طول بـ ",[89,1398,1399],{},"2, 3",".\nمش حاجة بتعملها كل يوم، بس مفيدة للوجيك السريع أو الـ closures.",[63,1402],{},[18,1404,1405],{},[30,1406,1407],{},"5. الدوال عالية الرتبة",[18,1409,1410],{},"الدوال تقدر تاخد دوال تانية كأرجيومنتات. هنا الأمور بتبقى\nمرنة.",[82,1412,1414],{"className":663,"code":1413,"language":407,"meta":87,"style":87},"func operate(a, b int, fn func(int, int) int) int {\n    return fn(a, b)\n}\n",[89,1415,1416,1458,1468],{"__ignoreMap":87},[92,1417,1418,1420,1423,1425,1427,1429,1431,1433,1435,1438,1440,1442,1444,1446,1448,1450,1452,1454,1456],{"class":94,"line":95},[92,1419,704],{"class":203},[92,1421,1422],{"class":98}," operate",[92,1424,722],{"class":199},[92,1426,386],{"class":952},[92,1428,958],{"class":199},[92,1430,961],{"class":952},[92,1432,955],{"class":203},[92,1434,958],{"class":199},[92,1436,1437],{"class":952},"fn",[92,1439,1329],{"class":203},[92,1441,722],{"class":199},[92,1443,969],{"class":203},[92,1445,958],{"class":199},[92,1447,969],{"class":203},[92,1449,966],{"class":199},[92,1451,969],{"class":203},[92,1453,966],{"class":199},[92,1455,969],{"class":203},[92,1457,972],{"class":199},[92,1459,1460,1462,1465],{"class":94,"line":174},[92,1461,977],{"class":203},[92,1463,1464],{"class":98}," fn",[92,1466,1467],{"class":199},"(a, b)\n",[92,1469,1470],{"class":94,"line":248},[92,1471,734],{"class":199},[18,1473,1474,1475,1478,1479,1478,1482,1485],{},"إنت بتبعت الوجيك اللي عايزه. عايز تجمع؟ ابعث add. عايز تضرب؟ ابعث\nmultiply. نفس الدالة، سلوك مختلف. دي الأساس لحاجات زي\n",[89,1476,1477],{},"map"," و ",[89,1480,1481],{},"filter",[89,1483,1484],{},"reduce"," في Go.",[995,1487,1489],{"id":1488},"الـ-methods-والـ-receivers","الـ Methods والـ Receivers",[18,1491,1492],{},"Go مش فيها classes، بس عندك methods باستخدام receivers. كده بتلصق\nالدوال على الأنواع بتاعتك.",[18,1494,1495],{},[30,1496,1497],{},"قيمة المستقبِل (Value Receiver)",[18,1499,1500],{},"لما محتاجش تعدّل الأصل، استخدم value receiver.",[82,1502,1504],{"className":663,"code":1503,"language":407,"meta":87,"style":87},"type User struct {\n    Name string\n}\n\nfunc (u User) greet() string {\n    return \"Hello \" + u.Name\n}\n",[89,1505,1506,1519,1527,1531,1535,1561,1574],{"__ignoreMap":87},[92,1507,1508,1511,1514,1517],{"class":94,"line":95},[92,1509,1510],{"class":203},"type",[92,1512,1513],{"class":98}," User",[92,1515,1516],{"class":203}," struct",[92,1518,972],{"class":199},[92,1520,1521,1524],{"class":94,"line":174},[92,1522,1523],{"class":199},"    Name ",[92,1525,1526],{"class":203},"string\n",[92,1528,1529],{"class":94,"line":248},[92,1530,734],{"class":199},[92,1532,1533],{"class":94,"line":262},[92,1534,681],{"emptyLinePlaceholder":680},[92,1536,1537,1539,1542,1545,1548,1550,1553,1556,1559],{"class":94,"line":282},[92,1538,704],{"class":203},[92,1540,1541],{"class":199}," (",[92,1543,1544],{"class":952},"u ",[92,1546,1547],{"class":98},"User",[92,1549,966],{"class":199},[92,1551,1552],{"class":98},"greet",[92,1554,1555],{"class":199},"() ",[92,1557,1558],{"class":203},"string",[92,1560,972],{"class":199},[92,1562,1563,1565,1568,1571],{"class":94,"line":713},[92,1564,977],{"class":203},[92,1566,1567],{"class":102}," \"Hello \"",[92,1569,1570],{"class":203}," +",[92,1572,1573],{"class":199}," u.Name\n",[92,1575,1576],{"class":94,"line":731},[92,1577,734],{"class":199},[18,1579,1580,1581,1584],{},"استدعيها زي ",[89,1582,1583],{},"user.greet()",". الدالة بتاخد نسخة من الـ struct. كويسة\nللعمليات read-only.",[63,1586],{},[18,1588,1589],{},[30,1590,1591],{},"مؤشّر المستقبِل (Pointer Receiver)",[18,1593,1594],{},"لما محتاج تعدّل الأصل، استخدم pointer receiver.",[82,1596,1598],{"className":663,"code":1597,"language":407,"meta":87,"style":87},"func (u *User) rename(newName string) {\n    u.Name = newName\n}\n",[89,1599,1600,1627,1637],{"__ignoreMap":87},[92,1601,1602,1604,1606,1608,1610,1612,1614,1617,1619,1622,1625],{"class":94,"line":95},[92,1603,704],{"class":203},[92,1605,1541],{"class":199},[92,1607,1544],{"class":952},[92,1609,1174],{"class":203},[92,1611,1547],{"class":98},[92,1613,966],{"class":199},[92,1615,1616],{"class":98},"rename",[92,1618,722],{"class":199},[92,1620,1621],{"class":952},"newName",[92,1623,1624],{"class":203}," string",[92,1626,1048],{"class":199},[92,1628,1629,1632,1634],{"class":94,"line":174},[92,1630,1631],{"class":199},"    u.Name ",[92,1633,204],{"class":203},[92,1635,1636],{"class":199}," newName\n",[92,1638,1639],{"class":94,"line":248},[92,1640,734],{"class":199},[18,1642,809,1643,1646],{},[89,1644,1645],{},"*User"," يعني إنها بتشتغل على الـ struct الحقيقي، مش نسخة. التغييرات بتفضل محفوظة.\nوكمان ده أكتر كفاءة للستراكت الكبيرة لأنك مش بتنسخ كل حاجة.",[63,1648],{},[453,1650,1651],{"type":507},[18,1652,1653],{},"لو متردد، ابدأ بـ pointer receiver. ده الأكتر انتشارًا في كود حقيقي وبيمنع المفاجآت مع التعديلات.",[995,1655,1657],{"id":1656},"امتى-تستخدم-إيه","امتى تستخدم إيه",[47,1659,1660,1678],{},[50,1661,1662,1663,1666,1667],{},"استخدم ",[30,1664,1665],{},"value receiver","لما:\n",[47,1668,1669,1672,1675],{},[50,1670,1671],{},"متبقاش محتاج تعدّل البيانات",[50,1673,1674],{},"الـ struct يكون صغير",[50,1676,1677],{},"عايز تكون آمن من تغييرات بالغلط",[50,1679,1662,1680,1666,1683],{},[30,1681,1682],{},"pointer receiver",[47,1684,1685,1688,1691],{},[50,1686,1687],{},"محتاج تعدّل البيانات",[50,1689,1690],{},"الـ struct كبير (تجنّب نسخ الميموري)",[50,1692,1693],{},"عايز تشارك instance واحدة عبر استدعاءات متعددة",[77,1695,1697],{"id":1696},"_3-الستراكت-structs","3. الستراكت (Structs)",[18,1699,1700],{},"الستراكت هي طريقة Go لتجميع البيانات المترابطة مع بعض. فكّر فيهم زي\nobjects خفيفة — مفيش classes، مفيش وراثة، بس البيانات والدوال.",[82,1702,1704],{"className":663,"code":1703,"language":407,"meta":87,"style":87},"type User struct {\n    Name string\n    Age  int\n}\n",[89,1705,1706,1716,1722,1730],{"__ignoreMap":87},[92,1707,1708,1710,1712,1714],{"class":94,"line":95},[92,1709,1510],{"class":203},[92,1711,1513],{"class":98},[92,1713,1516],{"class":203},[92,1715,972],{"class":199},[92,1717,1718,1720],{"class":94,"line":174},[92,1719,1523],{"class":199},[92,1721,1526],{"class":203},[92,1723,1724,1727],{"class":94,"line":248},[92,1725,1726],{"class":199},"    Age  ",[92,1728,1729],{"class":203},"int\n",[92,1731,1732],{"class":94,"line":262},[92,1733,734],{"class":199},[18,1735,1736],{},"ده يوزر معاه اسم وسن. اعمل واحد:",[82,1738,1740],{"className":663,"code":1739,"language":407,"meta":87,"style":87},"var user = User{\n    Name: \"Alaa\",\n    Age: 20\n}\n",[89,1741,1742,1757,1768,1776],{"__ignoreMap":87},[92,1743,1744,1747,1750,1752,1754],{"class":94,"line":95},[92,1745,1746],{"class":203},"var",[92,1748,1749],{"class":199}," user ",[92,1751,204],{"class":203},[92,1753,1513],{"class":98},[92,1755,1756],{"class":199},"{\n",[92,1758,1759,1762,1765],{"class":94,"line":174},[92,1760,1761],{"class":199},"    Name: ",[92,1763,1764],{"class":102},"\"Alaa\"",[92,1766,1767],{"class":199},",\n",[92,1769,1770,1773],{"class":94,"line":248},[92,1771,1772],{"class":199},"    Age: ",[92,1774,1775],{"class":106},"20\n",[92,1777,1778],{"class":94,"line":262},[92,1779,734],{"class":199},[18,1781,1782,1783,1786],{},"وصل للفيلدات زي ",[89,1784,1785],{},"user.Name",". بسيط.",[18,1788,1789],{},"تقدر تضيف methods للستراكت (دي الـ receivers اللي شرحناها). وهنا بتظهر\nفلسفة Go الـ \"composition over inheritance\" — إنت مابتورّثش، إنت\nبس بتضيف methods على اللي محتاجه.",[77,1791,1793],{"id":1792},"_4-معالجة-الأخطاء","4. معالجة الأخطاء",[18,1795,1796],{},"معالجة الأخطاء في Go صريحة. مفيش exceptions، مفيش try-catch. إنت بتتعامل\nمع الأخطاء وهي بتحصل.",[82,1798,1800],{"className":663,"code":1799,"language":407,"meta":87,"style":87},"if err != nil {\n    return err\n}\n",[89,1801,1802,1818,1825],{"__ignoreMap":87},[92,1803,1804,1807,1810,1813,1816],{"class":94,"line":95},[92,1805,1806],{"class":203},"if",[92,1808,1809],{"class":199}," err ",[92,1811,1812],{"class":203},"!=",[92,1814,1815],{"class":106}," nil",[92,1817,972],{"class":199},[92,1819,1820,1822],{"class":94,"line":174},[92,1821,977],{"class":203},[92,1823,1824],{"class":199}," err\n",[92,1826,1827],{"class":94,"line":248},[92,1828,734],{"class":199},[18,1830,1831],{},"هتشوف ده في كل مكان. تعوّد عليه.",[18,1833,1834],{},"النمط هو: اعمل حاجة، فحص لو فشلت، اتعامل معاها. مفيش سحر مخفي. مفيش\ncrashes مفاجئة. أي دالة ممكن تفشل بترجّع error وإنت بتقرر تعمل بيها إيه.",[453,1836,1837],{"type":825},[18,1838,1839,1840,1843,1844,1847],{},"متتجاهلش الأخطاء أبدًا بالـ ",[89,1841,1842],{},"_",". لو عملت ",[89,1845,1846],{},"result, _ := someFunction()","، فإنت بتبلع الفشل بصمت. على الأقل اعملها log. نسختك من نفسك في المستقبل هتشكرك.",[77,1849,1851],{"id":1850},"_5-الـ-goroutines-وقنوات-go-بعدين-مش-دلوقتي","5. الـ Goroutines وقنوات Go (بعدين، مش دلوقتي)",[18,1853,1854],{},"دي خاصية الـ concurrency في Go — تشغيل الحاجات بالتوازي. بس متبدأش من هنا.",[82,1856,1858],{"className":663,"code":1857,"language":407,"meta":87,"style":87},"go someFunction()\n",[89,1859,1860],{"__ignoreMap":87},[92,1861,1862,1864,1867],{"class":94,"line":95},[92,1863,407],{"class":203},[92,1865,1866],{"class":98}," someFunction",[92,1868,1869],{"class":199},"()\n",[18,1871,1872],{},"دي بتبان بسيطة. وهي بسيطة فعلاً. بس استخدامها صح محتاج فهم\nالـ channels، والمزامنة، والـ race conditions. دي كلها حاجات تتتعلم بعد ما\nتثبّت الأساسيات.",[453,1874,1875],{"type":455},[18,1876,1877,1878,1880],{},"الـ Concurrency مش هي الـ parallelism. Go بتتعامل مع الاتنين، بس ابدأ بكتابة كود متزامن كويس الأول. ضيف ",[89,1879,407],{}," بس لما تثبت إنك محتاجها، هعمل بوست تاني عن ده.",[63,1882],{},[11,1884,1886],{"id":1885},"ابنِ-حاجة-حقيقية-فورًا","ابنِ حاجة حقيقية (فورًا)",[18,1888,1889],{},"متقعدش في \"وضع التعلم\".",[18,1891,1892],{},"اختار واحدة:",[47,1894,1895,1898,1901,1904],{},[50,1896,1897],{},"تطبيق CLI للمهام",[50,1899,1900],{},"REST API بسيطة",[50,1902,1903],{},"خادم ملفات",[50,1905,1906],{},"محلل لوجات",[18,1908,1909],{},"مثال: سيرفر HTTP بسيط",[82,1911,1913],{"className":663,"code":1912,"language":407,"meta":87,"style":87},"package main\n\nimport (\n    \"fmt\"\n    \"net\u002Fhttp\"\n)\n\nfunc handler(w http.ResponseWriter, r *http.Request) {\n    fmt.Fprintf(w, \"hello from go server\")\n}\n\nfunc main() {\n    http.HandleFunc(\"\u002F\", handler)\n    http.ListenAndServe(\":8080\", nil)\n}\n",[89,1914,1915,1921,1925,1932,1941,1950,1954,1958,1997,2013,2018,2023,2032,2049,2068],{"__ignoreMap":87},[92,1916,1917,1919],{"class":94,"line":95},[92,1918,672],{"class":203},[92,1920,675],{"class":98},[92,1922,1923],{"class":94,"line":174},[92,1924,681],{"emptyLinePlaceholder":680},[92,1926,1927,1929],{"class":94,"line":248},[92,1928,686],{"class":203},[92,1930,1931],{"class":199}," (\n",[92,1933,1934,1937,1939],{"class":94,"line":262},[92,1935,1936],{"class":102},"    \"",[92,1938,692],{"class":98},[92,1940,695],{"class":102},[92,1942,1943,1945,1948],{"class":94,"line":282},[92,1944,1936],{"class":102},[92,1946,1947],{"class":98},"net\u002Fhttp",[92,1949,695],{"class":102},[92,1951,1952],{"class":94,"line":713},[92,1953,728],{"class":199},[92,1955,1956],{"class":94,"line":731},[92,1957,681],{"emptyLinePlaceholder":680},[92,1959,1961,1963,1966,1968,1971,1974,1976,1979,1981,1984,1987,1990,1992,1995],{"class":94,"line":1960},8,[92,1962,704],{"class":203},[92,1964,1965],{"class":98}," handler",[92,1967,722],{"class":199},[92,1969,1970],{"class":952},"w",[92,1972,1973],{"class":98}," http",[92,1975,485],{"class":199},[92,1977,1978],{"class":98},"ResponseWriter",[92,1980,958],{"class":199},[92,1982,1983],{"class":952},"r",[92,1985,1986],{"class":203}," *",[92,1988,1989],{"class":98},"http",[92,1991,485],{"class":199},[92,1993,1994],{"class":98},"Request",[92,1996,1048],{"class":199},[92,1998,2000,2002,2005,2008,2011],{"class":94,"line":1999},9,[92,2001,716],{"class":199},[92,2003,2004],{"class":98},"Fprintf",[92,2006,2007],{"class":199},"(w, ",[92,2009,2010],{"class":102},"\"hello from go server\"",[92,2012,728],{"class":199},[92,2014,2016],{"class":94,"line":2015},10,[92,2017,734],{"class":199},[92,2019,2021],{"class":94,"line":2020},11,[92,2022,681],{"emptyLinePlaceholder":680},[92,2024,2026,2028,2030],{"class":94,"line":2025},12,[92,2027,704],{"class":203},[92,2029,707],{"class":98},[92,2031,710],{"class":199},[92,2033,2035,2038,2041,2043,2046],{"class":94,"line":2034},13,[92,2036,2037],{"class":199},"    http.",[92,2039,2040],{"class":98},"HandleFunc",[92,2042,722],{"class":199},[92,2044,2045],{"class":102},"\"\u002F\"",[92,2047,2048],{"class":199},", handler)\n",[92,2050,2052,2054,2057,2059,2062,2064,2066],{"class":94,"line":2051},14,[92,2053,2037],{"class":199},[92,2055,2056],{"class":98},"ListenAndServe",[92,2058,722],{"class":199},[92,2060,2061],{"class":102},"\":8080\"",[92,2063,958],{"class":199},[92,2065,1117],{"class":106},[92,2067,728],{"class":199},[92,2069,2071],{"class":94,"line":2070},15,[92,2072,734],{"class":199},[18,2074,737],{},[82,2076,2077],{"className":84,"code":740,"language":86,"meta":87,"style":87},[89,2078,2079],{"__ignoreMap":87},[92,2080,2081,2083,2085],{"class":94,"line":95},[92,2082,407],{"class":98},[92,2084,749],{"class":102},[92,2086,657],{"class":102},[18,2088,2089],{},"افتح:",[82,2091,2096],{"className":2092,"code":2094,"language":2095,"meta":87},[2093],"language-text","http:\u002F\u002Flocalhost:8080\n","text",[89,2097,2094],{"__ignoreMap":87},[18,2099,2100],{},"ده سيرفر ويب شغال في أقل من 20 سطر كود. المكتبة القياسية\nبتديك ده مجانًا.",[63,2102],{},[11,2104,2106],{"id":2105},"عقلية-go","عقلية Go",[18,2108,2109],{},"Go ليها آراء قوية عن إزاي الكود المفروض يتكتب. قاوم دي وهتتخانق مع\nاللغة. اقبلها وهتتحرك بسرعة.",[47,2111,2112,2118,2124],{},[50,2113,2114,2117],{},[30,2115,2116],{},"البساطة على الذكاء الزايد"," Go بتحب الكود الواضح على الكود \"المشطور\". لو\nلقيت نفسك بتكتب abstractions معقدة علشان توفّر شوية سطور، غالبًا إنت\nبتعملها غلط. الهدف هو سهولة القراية، مش إعجاب المطورين التانيين.",[50,2119,2120,2123],{},[30,2121,2122],{},"الصريح على السحر"," Go مبتعملش أي حاجة ضمنية. مفيش تحويلات أنواع مخفية،\nمفيش imports تلقائية، مفيش سحر. اللي بتشوفه هو اللي بتاخده.\nده بيخلّي الكود أسهل في الفهم والتصليح.",[50,2125,2126,2129],{},[30,2127,2128],{},"التركيب على الوراثة"," انسى الـ classes والتسلسلات الهرمية للوراثة.\nفي Go، بتؤلف السلوك بدمج الأنواع. ده أكتر مرونة وأقل\nهشاشة من الـ OOP التقليدية.",[453,2131,2132],{"type":825},[18,2133,2134],{},"لو قاومت آراء Go هتكره استخدامها. لو احتضنتها، هتنشر أسرع من أي لغة تانية استخدمتها.",[63,2136],{},[11,2138,2140],{"id":2139},"المميزات-والعيوب-من-غير-تجميل-xd","المميزات والعيوب (من غير تجميل XD)",[2142,2143,2144,2165],"card-group",{},[911,2145,2148],{"icon":2146,"title":2147},"i-lucide-zap","المميزات",[47,2149,2150,2153,2156,2159,2162],{},[50,2151,2152],{},"سرعة تجميع عالية",[50,2154,2155],{},"syntax بسيطة",[50,2157,2158],{},"مكتبة قياسية جامدة",[50,2160,2161],{},"نشر سهل (binary واحد)",[50,2163,2164],{},"concurrency مدمجة",[911,2166,2169],{"icon":2167,"title":2168},"i-lucide-alert-triangle","العيوب",[47,2170,2171,2174,2177,2180],{},[50,2172,2173],{},"معالجة أخطاء متكررة",[50,2175,2176],{},"abstractions محدودة",[50,2178,2179],{},"مش معبّرة أوي",[50,2181,2182],{},"ممكن تحسّها مقيّدة",[63,2184],{},[11,2186,2188],{"id":2187},"السر-في-تعلم-go-فعلاً","السر في تعلم Go فعلاً",[18,2190,2191],{},"معظم الناس بتحاول \"تخلص تعلم\" Go قبل ما تبني أي حاجة. بيتفرجوا\nعلى كل التيوتوريالات، يقرؤوا كل الدوكس، بيتفرجوا على كل الفيديوهات.",[18,2193,2194],{},"ده مش شغال.",[18,2196,2197],{},"إنت بتتعلم Go بـ:",[47,2199,2200,2203,2206],{},[50,2201,2202],{},"كتابة كود",[50,2204,2205],{},"تكسير حاجات",[50,2207,2208],{},"تصليحها",[18,2210,2211],{},"ده كل الموضوع. مفيش اختصار. كل ما تكافح أكتر، كل ما تتعلم أكتر.",[453,2213,2214],{"type":455},[18,2215,2216],{},"التيوتوريالات حلوة للسياق، بس مبتنميش مهارات. المهارات بتيجي من الممارسة، مش من المشاهدة.",[63,2218],{},[11,2220,2221],{"id":2221},"رأيي",[2142,2223,2224,2239],{},[911,2225,2228],{"icon":2226,"title":2227},"i-lucide-check-circle","جامدة جدًا في",[47,2229,2230,2233,2236],{},[50,2231,2232],{},"بناء أنظمة الباك-إند",[50,2234,2235],{},"تهتم بالأداء والبساطة",[50,2237,2238],{},"عايز تنشر بسرعة",[911,2240,2243],{"icon":2241,"title":2242},"i-lucide-x-circle","مش مناسبة لـ",[47,2244,2245,2248,2251],{},[50,2246,2247],{},"عايز مزايا لغة متقدمة",[50,2249,2250],{},"بتحب abstractions معقدة",[50,2252,2253],{},"شغال في AI أو علوم بيانات تقيلة",[18,2255,2256],{},"يعني اللي بيفرق هو:",[47,2258,2259,2262,2265],{},[50,2260,2261],{},"الاستمرارية",[50,2263,2264],{},"بناء حاجات حقيقية",[50,2266,2267],{},"حل المشاكل",[63,2269],{},[11,2271,2272],{"id":2272},"الخلاصة",[18,2274,2275],{},"بطل استهلاك المحتوى، اكتب كود؛ أول مشروع ليك هيبقى وحش بس اللي\nبعده هيبقى أحسن، دي الطريق الوحيدة.",[18,2277,2278],{},"ولو ثبت عليها وقت كفاية هتفهم ليه الناس بتحب Go.",[18,2280,2281],{},"مش عشانها مذهلة، عشانها بتشتغل، بس بالنسبالي هي مذهلة XD.",[2283,2284,2285],"style",{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":87,"searchDepth":174,"depth":174,"links":2287},[2288,2289,2290,2291,2301,2306,2307,2309,2310,2317,2318,2319,2320,2321,2322],{"id":13,"depth":174,"text":13},{"id":41,"depth":174,"text":42},{"id":67,"depth":174,"text":68},{"id":74,"depth":174,"text":75,"children":2292},[2293,2294,2295,2296,2297,2298,2299,2300],{"id":79,"depth":248,"text":80},{"id":113,"depth":248,"text":114},{"id":135,"depth":248,"text":136},{"id":155,"depth":248,"text":156},{"id":185,"depth":248,"text":186},{"id":357,"depth":248,"text":358},{"id":378,"depth":248,"text":379},{"id":396,"depth":248,"text":397},{"id":418,"depth":174,"text":419,"children":2302},[2303,2304,2305],{"id":425,"depth":248,"text":426},{"id":516,"depth":248,"text":517},{"id":587,"depth":248,"text":588},{"id":623,"depth":174,"text":624},{"id":754,"depth":174,"text":2308},"إدارة مشروعك (بطريقة go mod)",{"id":835,"depth":174,"text":836},{"id":877,"depth":174,"text":878,"children":2311},[2312,2313,2314,2315,2316],{"id":884,"depth":248,"text":885},{"id":931,"depth":248,"text":932},{"id":1696,"depth":248,"text":1697},{"id":1792,"depth":248,"text":1793},{"id":1850,"depth":248,"text":1851},{"id":1885,"depth":174,"text":1886},{"id":2105,"depth":174,"text":2106},{"id":2139,"depth":174,"text":2140},{"id":2187,"depth":174,"text":2188},{"id":2221,"depth":174,"text":2221},{"id":2272,"depth":174,"text":2272},"2026-03-24","دليل عملي ومن غير لف ودوران للبداية مع Go، بأوامر حقيقية، وكود حقيقي، منغير جحيم توتوريالز.","md","ar",{"tags":2328,"image":2334},[2329,2330,2331,2332,2333],"جولانج","برمجة","باك-إند","CLI\u002FTUI","لغات برمجة","\u002Fstart-being-a-gopher.png",{"title":87},"\u002Fblog\u002Far\u002Fgetting-started-with-go",{"title":2338,"description":2339},"طريقك لتعلم لغه جو","دليل عملي ومن غير لف ودوران للبداية مع Go، بأوامر حقيقية، وكود حقيقي، وصفر جحيم تيوتوريالات.","blog\u002Far\u002Fgetting-started-with-go","WyNhWdQcZ4SFpNxIMHgm4DsPcIAQir64GjAVlctetxk",{"id":2343,"title":2344,"body":2345,"date":2323,"description":4301,"extension":2325,"locale":4302,"meta":4303,"navigation":680,"path":4309,"seo":4310,"stem":4311,"__hash__":4312},"blog\u002Fblog\u002Fgetting-started-with-go.md","Start Being a Gopher",{"type":8,"value":2346,"toc":4264},[2347,2351,2356,2359,2362,2367,2370,2373,2377,2380,2391,2394,2396,2400,2403,2407,2409,2423,2425,2439,2441,2455,2457,2479,2483,2486,2556,2562,2576,2579,2610,2612,2615,2627,2629,2637,2640,2644,2654,2657,2659,2663,2666,2668,2671,2675,2684,2689,2701,2705,2717,2721,2734,2739,2742,2744,2751,2796,2798,2801,2823,2827,2830,2852,2855,2907,2910,2922,2929,2941,2944,2958,2964,2980,2988,2992,3006,3020,3023,3025,3029,3032,3036,3039,3053,3059,3073,3077,3080,3122,3125,3129,3132,3138,3141,3219,3228,3230,3235,3238,3286,3292,3294,3299,3305,3369,3377,3379,3384,3387,3463,3472,3474,3479,3482,3538,3549,3553,3556,3561,3564,3626,3632,3634,3639,3642,3682,3687,3689,3694,3698,3732,3736,3739,3769,3772,3806,3812,3815,3819,3822,3848,3851,3854,3865,3869,3872,3884,3887,3895,3897,3901,3904,3907,3921,3924,4058,4061,4073,4076,4081,4084,4086,4090,4093,4113,4118,4120,4124,4163,4165,4169,4172,4175,4178,4189,4192,4197,4199,4203,4233,4236,4247,4249,4253,4256,4259,4262],[11,2348,2350],{"id":2349},"introduction","Introduction",[15,2352,2353],{},[18,2354,2355],{},"Is Go worth learning?",[18,2357,2358],{},"Wrong question.",[18,2360,2361],{},"The better one is:",[18,2363,2364],{},[30,2365,2366],{},"\"Do I need Go for what I'm trying to build right now?\"",[18,2368,2369],{},"Because what usually happens is simple: you watch tutorials, compare Go vs Rust\nvs Node, save 20 tabs… and write nothing.",[18,2371,2372],{},"This post is not about convincing you. It's about getting you started fast,\npractical, and without wasting time.",[11,2374,2376],{"id":2375},"what-go-is-actually-good-at","What Go Is Actually Good At",[18,2378,2379],{},"Go is built for:",[47,2381,2382,2385,2388],{},[50,2383,2384],{},"APIs and backend services",[50,2386,2387],{},"CLI\u002FTUI tools (tbh here this is one of the most beautiful things)",[50,2389,2390],{},"networking \u002F distributed systems",[18,2392,2393],{},"If that is what you are building keep reading. If not maybe you dont need Go.",[63,2395],{},[11,2397,2399],{"id":2398},"install-go-do-this-first-not-later","Install Go (Do This First Not Later)",[18,2401,2402],{},"Don't skip this part.",[11,2404,2406],{"id":2405},"install-for-linux-distros-come-to-me-linux-mate","Install for Linux Distros. (come to me linux mate)",[77,2408,80],{"id":79},[82,2410,2411],{"className":84,"code":85,"language":86,"meta":87,"style":87},[89,2412,2413],{"__ignoreMap":87},[92,2414,2415,2417,2419,2421],{"class":94,"line":95},[92,2416,99],{"class":98},[92,2418,103],{"class":102},[92,2420,107],{"class":106},[92,2422,110],{"class":102},[77,2424,114],{"id":113},[82,2426,2427],{"className":84,"code":117,"language":86,"meta":87,"style":87},[89,2428,2429],{"__ignoreMap":87},[92,2430,2431,2433,2435,2437],{"class":94,"line":95},[92,2432,99],{"class":98},[92,2434,126],{"class":102},[92,2436,129],{"class":102},[92,2438,132],{"class":102},[77,2440,136],{"id":135},[82,2442,2443],{"className":84,"code":139,"language":86,"meta":87,"style":87},[89,2444,2445],{"__ignoreMap":87},[92,2446,2447,2449,2451,2453],{"class":94,"line":95},[92,2448,99],{"class":98},[92,2450,148],{"class":102},[92,2452,129],{"class":102},[92,2454,110],{"class":102},[77,2456,156],{"id":155},[82,2458,2459],{"className":84,"code":159,"language":86,"meta":87,"style":87},[89,2460,2461,2469],{"__ignoreMap":87},[92,2462,2463,2465,2467],{"class":94,"line":95},[92,2464,99],{"class":98},[92,2466,168],{"class":102},[92,2468,171],{"class":102},[92,2470,2471,2473,2475,2477],{"class":94,"line":174},[92,2472,99],{"class":98},[92,2474,168],{"class":102},[92,2476,129],{"class":102},[92,2478,132],{"class":102},[77,2480,2482],{"id":2481},"or-cross-distro-installation","or cross-distro installation",[18,2484,2485],{},"if you want the latest version always this is a hacky command i made to install\nthe latest version:",[82,2487,2488],{"className":84,"code":192,"language":86,"meta":87,"style":87},[89,2489,2490,2516,2524,2534,2548],{"__ignoreMap":87},[92,2491,2492,2494,2496,2498,2500,2502,2504,2506,2508,2510,2512,2514],{"class":94,"line":95},[92,2493,200],{"class":199},[92,2495,204],{"class":203},[92,2497,207],{"class":199},[92,2499,210],{"class":98},[92,2501,213],{"class":106},[92,2503,216],{"class":102},[92,2505,219],{"class":203},[92,2507,222],{"class":98},[92,2509,225],{"class":106},[92,2511,228],{"class":106},[92,2513,231],{"class":199},[92,2515,234],{"class":102},[92,2517,2518,2520,2522],{"class":94,"line":174},[92,2519,239],{"class":98},[92,2521,242],{"class":102},[92,2523,245],{"class":199},[92,2525,2526,2528,2530,2532],{"class":94,"line":248},[92,2527,99],{"class":98},[92,2529,253],{"class":102},[92,2531,256],{"class":106},[92,2533,259],{"class":102},[92,2535,2536,2538,2540,2542,2544,2546],{"class":94,"line":262},[92,2537,99],{"class":98},[92,2539,267],{"class":102},[92,2541,270],{"class":106},[92,2543,273],{"class":102},[92,2545,276],{"class":106},[92,2547,279],{"class":199},[92,2549,2550,2552,2554],{"class":94,"line":282},[92,2551,285],{"class":98},[92,2553,256],{"class":106},[92,2555,279],{"class":199},[18,2557,2558,2559,2561],{},"then Add ",[89,2560,295],{}," to the path:",[82,2563,2564],{"className":84,"code":299,"language":86,"meta":87,"style":87},[89,2565,2566],{"__ignoreMap":87},[92,2567,2568,2570,2572,2574],{"class":94,"line":95},[92,2569,306],{"class":203},[92,2571,309],{"class":199},[92,2573,204],{"class":203},[92,2575,314],{"class":199},[18,2577,2578],{},"and if you want it always available:",[82,2580,2582],{"className":84,"code":2581,"language":86,"meta":87,"style":87},"# this command adds Go to PATH (compiler + installed tools)\n# also you should use bash shell, if not just Ask ai to give you the command XD\necho 'export PATH=$PATH:\u002Fusr\u002Flocal\u002Fgo\u002Fbin:$(go env GOPATH)\u002Fbin' >> ~\u002F.bashrc\nsource ~\u002F.bashrc\n",[89,2583,2584,2589,2594,2604],{"__ignoreMap":87},[92,2585,2586],{"class":94,"line":95},[92,2587,2588],{"class":327},"# this command adds Go to PATH (compiler + installed tools)\n",[92,2590,2591],{"class":94,"line":174},[92,2592,2593],{"class":327},"# also you should use bash shell, if not just Ask ai to give you the command XD\n",[92,2595,2596,2598,2600,2602],{"class":94,"line":248},[92,2597,338],{"class":106},[92,2599,341],{"class":102},[92,2601,344],{"class":203},[92,2603,347],{"class":102},[92,2605,2606,2608],{"class":94,"line":262},[92,2607,352],{"class":106},[92,2609,347],{"class":102},[77,2611,358],{"id":357},[18,2613,2614],{},"Using Homebrew:",[82,2616,2617],{"className":84,"code":364,"language":86,"meta":87,"style":87},[89,2618,2619],{"__ignoreMap":87},[92,2620,2621,2623,2625],{"class":94,"line":95},[92,2622,371],{"class":98},[92,2624,129],{"class":102},[92,2626,110],{"class":102},[77,2628,379],{"id":378},[18,2630,2631,2632],{},"Download installer from: ",[30,2633,2634],{},[386,2635,388],{"href":388,"rel":2636},[390],[18,2638,2639],{},"Run it. Done.",[77,2641,2643],{"id":2642},"verify-installation","Verify Installation",[82,2645,2646],{"className":84,"code":400,"language":86,"meta":87,"style":87},[89,2647,2648],{"__ignoreMap":87},[92,2649,2650,2652],{"class":94,"line":95},[92,2651,407],{"class":98},[92,2653,410],{"class":102},[18,2655,2656],{},"If it prints a version, you're good.",[63,2658],{},[11,2660,2662],{"id":2661},"some-resources-for-my-beloved-reader","Some resources for my beloved reader",[18,2664,2665],{},"Go have a good and well documented resources, but the official one sometimes feels distructing for the new gophers.\nso let me give you how to learn from the official docs and unofficial resources.",[77,2667,426],{"id":425},[18,2669,2670],{},"first you have 3 ways in go.dev to learn:",[431,2672,2673],{},[50,2674,435],{},[47,2676,2677],{},[50,2678,2679,2680,2683],{},"go have great interactive tutorial named ",[386,2681,445],{"href":443,"rel":2682},[390]," you can finish all Go basics and concepts on it.",[15,2685,2686],{},[18,2687,2688],{},"like what they said: An interactive introduction to Go in four sections. The first section covers basic syntax and data structures; the second discusses methods and interfaces; the third is about Generics; and the fourth introduces Go's concurrency primitives. Each section concludes with a few exercises so you can practice what you've learned.",[453,2690,2691],{"type":455},[18,2692,2693,2694,2698,2699],{},"You can take the ",[386,2695,2697],{"href":443,"rel":2696},[390],"tour online",". or install it locally with ",[89,2700,466],{},[431,2702,2703],{"start":174},[50,2704,471],{},[47,2706,2707,2710],{},[50,2708,2709],{},"this is a Step by step guides for specific tasks, such as getting started with modules, creating multi-module workspaces, or accessing a database. after you finish the tour of go one you can start with it. (i did that)",[50,2711,2712,2713,485],{},"you can access it ",[386,2714,2716],{"href":482,"rel":2715},[390],"here",[431,2718,2719],{"start":248},[50,2720,490],{},[47,2722,2723,2726,2731],{},[50,2724,2725],{},"After grasping the language basics, this document helps you understand how to write clear and idiomatic Go code (like yeah the \"Go way\").",[50,2727,2712,2728,485],{},[386,2729,2716],{"href":500,"rel":2730},[390],[50,2732,2733],{},"Its a bunch of sections on one page but you will be satisfied with it XD",[453,2735,2736],{"type":507},[18,2737,2738],{},"you will not be comfortable with go and will not like it if you didnt learned how to write clear and idiomatic go code and same if you fight its opinions.",[18,2740,2741],{},"After that i guess you will beat me in Go (you can't though, tbh XD)",[77,2743,517],{"id":516},[18,2745,2746,2747,2750],{},"Go community is very good and helpful and creates alot of OSS projects while keeping it well documented such as ",[386,2748,525],{"href":523,"rel":2749},[390]," i love this team and their community, they helped me alot about go and even with positive energy XD, and some other made a good resources for golang such like:",[47,2752,2753,2759,2765,2771,2777,2783,2790],{},[50,2754,2755,2758],{},[386,2756,535],{"href":533,"rel":2757},[390],": is a hands-on introduction to Go using annotated example programs.",[50,2760,2761,2764],{},[386,2762,543],{"href":541,"rel":2763},[390],": its a good course for those who likes the video learning way (i dont like it but others may do) it have \"164 exercises grouped into 34 Go Concepts, with automatic analysis of your code and personal mentoring, all 100% free.\" — by them.",[50,2766,2767,2770],{},[386,2768,551],{"href":549,"rel":2769},[390],": A curated list of awesome Go frameworks, libraries, and software. Inspired by awesome-python.",[50,2772,2773,2776],{},[386,2774,559],{"href":557,"rel":2775},[390],": Where X=Go XDD.",[50,2778,2779,2782],{},[386,2780,567],{"href":565,"rel":2781},[390],": (an up-to-date knowledge base for Go programming self learning).",[50,2784,2785,2789],{},[386,2786,2788],{"href":573,"rel":2787},[390],"Another go by example",": A beautiful and modern docs-like go by example and have Ask-ai feature.",[50,2791,2792,2795],{},[386,2793,583],{"href":581,"rel":2794},[390],": a good resource to learn test-driven development with Go and it have Go fundamentals section.",[77,2797,588],{"id":587},[18,2799,2800],{},"Seeeeeigh there is alot here but i will put books libraries:",[47,2802,2803,2809,2815],{},[50,2804,2805,2808],{},[386,2806,600],{"href":598,"rel":2807},[390],": the is like official book but its not, and its very good.",[50,2810,2811,2814],{},[386,2812,608],{"href":606,"rel":2813},[390],": GoBooks is a curated collection of the best Go books for developers at every level—from beginners to engineers working on concurrency, performance, and system design. One place to find the right learning resource.",[50,2816,2817,2820,2821,485],{},[386,2818,616],{"href":614,"rel":2819},[390],": the official list of books by ",[89,2822,620],{},[11,2824,2826],{"id":2825},"your-first-go-program","Your First Go Program",[18,2828,2829],{},"Create a file:",[82,2831,2832],{"className":84,"code":630,"language":86,"meta":87,"style":87},[89,2833,2834,2846],{"__ignoreMap":87},[92,2835,2836,2838,2840,2842,2844],{"class":94,"line":95},[92,2837,637],{"class":98},[92,2839,640],{"class":102},[92,2841,643],{"class":199},[92,2843,646],{"class":106},[92,2845,649],{"class":102},[92,2847,2848,2850],{"class":94,"line":174},[92,2849,654],{"class":98},[92,2851,657],{"class":102},[18,2853,2854],{},"Put this inside:",[82,2856,2857],{"className":663,"code":664,"filename":665,"language":407,"meta":87,"style":87},[89,2858,2859,2865,2869,2879,2883,2891,2903],{"__ignoreMap":87},[92,2860,2861,2863],{"class":94,"line":95},[92,2862,672],{"class":203},[92,2864,675],{"class":98},[92,2866,2867],{"class":94,"line":174},[92,2868,681],{"emptyLinePlaceholder":680},[92,2870,2871,2873,2875,2877],{"class":94,"line":248},[92,2872,686],{"class":203},[92,2874,689],{"class":102},[92,2876,692],{"class":98},[92,2878,695],{"class":102},[92,2880,2881],{"class":94,"line":262},[92,2882,681],{"emptyLinePlaceholder":680},[92,2884,2885,2887,2889],{"class":94,"line":282},[92,2886,704],{"class":203},[92,2888,707],{"class":98},[92,2890,710],{"class":199},[92,2892,2893,2895,2897,2899,2901],{"class":94,"line":713},[92,2894,716],{"class":199},[92,2896,719],{"class":98},[92,2898,722],{"class":199},[92,2900,725],{"class":102},[92,2902,728],{"class":199},[92,2904,2905],{"class":94,"line":731},[92,2906,734],{"class":199},[18,2908,2909],{},"Run it:",[82,2911,2912],{"className":84,"code":740,"language":86,"meta":87,"style":87},[89,2913,2914],{"__ignoreMap":87},[92,2915,2916,2918,2920],{"class":94,"line":95},[92,2917,407],{"class":98},[92,2919,749],{"class":102},[92,2921,657],{"class":102},[11,2923,2925,2926,2928],{"id":2924},"manage-your-project-the-go-mod-way","Manage Your Project (The ",[89,2927,758],{}," way)",[18,2930,2931,2932,2934,2935,2937,2938,2940],{},"Forget the old ",[89,2933,764],{}," nightmare. In modern Go, every project needs a\n",[30,2936,771],{},". It’s like a ",[89,2939,775],{}," for Go. It tells the compiler (and your\nLSP) where the dependencies are.",[18,2942,2943],{},"In your project folder, run:",[82,2945,2946],{"className":84,"code":782,"language":86,"meta":87,"style":87},[89,2947,2948],{"__ignoreMap":87},[92,2949,2950,2952,2954,2956],{"class":94,"line":95},[92,2951,407],{"class":98},[92,2953,791],{"class":102},[92,2955,794],{"class":102},[92,2957,797],{"class":102},[18,2959,2960,2961,2963],{},"This creates a ",[89,2962,803],{}," file. From this moment:",[47,2965,2966,2972,2975],{},[50,2967,2968,2969,2971],{},"Your ",[30,2970,812],{}," will actually work.",[50,2973,2974],{},"You can import local packages.",[50,2976,2977,2978,485],{},"You can add external libraries using ",[89,2979,822],{},[453,2981,2982],{"type":825},[18,2983,2984,2985,2987],{},"If you don't run ",[89,2986,831],{},", you are basically coding in a notepad without any \"intelligence\" from your tools. Dont be that person.",[11,2989,2991],{"id":2990},"build-a-binary-where-go-shines-xd","Build a Binary (Where Go Shines XD)",[82,2993,2994],{"className":84,"code":839,"language":86,"meta":87,"style":87},[89,2995,2996,3002],{"__ignoreMap":87},[92,2997,2998,3000],{"class":94,"line":95},[92,2999,407],{"class":98},[92,3001,848],{"class":102},[92,3003,3004],{"class":94,"line":174},[92,3005,853],{"class":98},[453,3007,3008],{"type":507},[18,3009,3010,3011,3014,3015,3017,3018,485],{},"Binary Naming If you run go build ",[30,3012,3013],{},"(without specifying a file)",", Go will name the binary after your directory. If you build a specific file like ",[89,3016,865],{}," it will be named ",[89,3019,869],{},[18,3021,3022],{},"Now you have a standalone binary. No runtime. No dependencies. Just run it.",[63,3024],{},[11,3026,3028],{"id":3027},"the-only-concepts-you-need-to-start","The Only Concepts You Need to Start",[18,3030,3031],{},"Don't try to learn everything. Focus on these:",[77,3033,3035],{"id":3034},"_1-packages","1. Packages",[18,3037,3038],{},"Everything in Go is a package. Think of it like folders in your file system\nevery file belongs to a package, and that's how Go organizes code.",[82,3040,3041],{"className":663,"code":891,"language":407,"meta":87,"style":87},[89,3042,3043],{"__ignoreMap":87},[92,3044,3045,3047,3049,3051],{"class":94,"line":95},[92,3046,686],{"class":203},[92,3048,689],{"class":102},[92,3050,692],{"class":98},[92,3052,695],{"class":102},[18,3054,3055,3056,3058],{},"Here ",[89,3057,692],{}," is the standard formatting package. You use it for printing to\nconsole, formatting strings, all that basics. There's hundreds in the standard\nlibrary, but you only need a handful to start.",[911,3060,3062],{"icon":913,"title":3061},"The package rule",[18,3063,3064,3065,3067,3068,3070,3071,485],{},"Every Go file MUST start\nwith a package declaration. For executables, use ",[89,3066,920],{},". For libraries,\nuse whatever name fits like ",[89,3069,924],{}," or ",[89,3072,928],{},[77,3074,3076],{"id":3075},"_2-functions","2. Functions",[18,3078,3079],{},"Functions in Go are straightforward. You define what goes in, what comes out.",[82,3081,3082],{"className":663,"code":938,"language":407,"meta":87,"style":87},[89,3083,3084,3108,3118],{"__ignoreMap":87},[92,3085,3086,3088,3090,3092,3094,3096,3098,3100,3102,3104,3106],{"class":94,"line":95},[92,3087,704],{"class":203},[92,3089,947],{"class":98},[92,3091,722],{"class":199},[92,3093,386],{"class":952},[92,3095,955],{"class":203},[92,3097,958],{"class":199},[92,3099,961],{"class":952},[92,3101,955],{"class":203},[92,3103,966],{"class":199},[92,3105,969],{"class":203},[92,3107,972],{"class":199},[92,3109,3110,3112,3114,3116],{"class":94,"line":174},[92,3111,977],{"class":203},[92,3113,980],{"class":199},[92,3115,983],{"class":203},[92,3117,986],{"class":199},[92,3119,3120],{"class":94,"line":248},[92,3121,734],{"class":199},[18,3123,3124],{},"That's it. No magic, no decorators, no weird syntax.",[995,3126,3128],{"id":3127},"function-types","Function Types",[18,3130,3131],{},"Go dont have overloading, but you have some main patterns worth knowing:",[1003,3133,3135],{"id":3134},"_1-multiple-return-values",[30,3136,3137],{},"1. Multiple return values",[18,3139,3140],{},"This is huge in Go. Functions can return both a value AND an error. This is how\nGo handles errors you see it everywhere.",[82,3142,3143],{"className":663,"code":1014,"language":407,"meta":87,"style":87},[89,3144,3145,3171,3183,3199,3203,3215],{"__ignoreMap":87},[92,3146,3147,3149,3151,3153,3155,3157,3159,3161,3163,3165,3167,3169],{"class":94,"line":95},[92,3148,704],{"class":203},[92,3150,1023],{"class":98},[92,3152,722],{"class":199},[92,3154,386],{"class":952},[92,3156,958],{"class":199},[92,3158,961],{"class":952},[92,3160,1034],{"class":203},[92,3162,1037],{"class":199},[92,3164,1040],{"class":203},[92,3166,958],{"class":199},[92,3168,1045],{"class":203},[92,3170,1048],{"class":199},[92,3172,3173,3175,3177,3179,3181],{"class":94,"line":174},[92,3174,1053],{"class":203},[92,3176,1056],{"class":199},[92,3178,1059],{"class":203},[92,3180,1062],{"class":106},[92,3182,972],{"class":199},[92,3184,3185,3187,3189,3191,3193,3195,3197],{"class":94,"line":248},[92,3186,1069],{"class":203},[92,3188,1062],{"class":106},[92,3190,1074],{"class":199},[92,3192,1077],{"class":98},[92,3194,722],{"class":199},[92,3196,1082],{"class":102},[92,3198,728],{"class":199},[92,3200,3201],{"class":94,"line":262},[92,3202,1089],{"class":199},[92,3204,3205,3207,3209,3211,3213],{"class":94,"line":282},[92,3206,977],{"class":203},[92,3208,980],{"class":199},[92,3210,1098],{"class":203},[92,3212,1101],{"class":199},[92,3214,1104],{"class":106},[92,3216,3217],{"class":94,"line":713},[92,3218,734],{"class":199},[18,3220,3221,3222,3224,3225,3227],{},"The ",[89,3223,1045],{}," type is Go's built-in way to handle failures. If something goes\nwrong, you get an error object. If it worked, you get ",[89,3226,1117],{},". Get used to\nchecking this pattern it's everywhere in Go code.",[63,3229],{},[18,3231,3232],{},[30,3233,3234],{},"2. Named return values",[18,3236,3237],{},"Go lets you name what you're returning. It's useful when you want to set it\nearly and return later without specifying.",[82,3239,3240],{"className":663,"code":1131,"language":407,"meta":87,"style":87},[89,3241,3242,3266,3278,3282],{"__ignoreMap":87},[92,3243,3244,3246,3248,3250,3252,3254,3256,3258,3260,3262,3264],{"class":94,"line":95},[92,3245,704],{"class":203},[92,3247,1140],{"class":98},[92,3249,722],{"class":199},[92,3251,1145],{"class":952},[92,3253,958],{"class":199},[92,3255,1150],{"class":952},[92,3257,955],{"class":203},[92,3259,1037],{"class":199},[92,3261,1157],{"class":952},[92,3263,955],{"class":203},[92,3265,1048],{"class":199},[92,3267,3268,3270,3272,3274,3276],{"class":94,"line":174},[92,3269,1166],{"class":199},[92,3271,204],{"class":203},[92,3273,1171],{"class":199},[92,3275,1174],{"class":203},[92,3277,1177],{"class":199},[92,3279,3280],{"class":94,"line":248},[92,3281,1182],{"class":203},[92,3283,3284],{"class":94,"line":262},[92,3285,734],{"class":199},[18,3287,3288,3289,3291],{},"You don't have to say ",[89,3290,1192],{}," Go knows because you named it. Some people\nlove this, some hate it. I use it when the function is long and setting the\nreturn value early makes the code clearer.",[63,3293],{},[18,3295,3296],{},[30,3297,3298],{},"3. Variadic functions",[18,3300,3301,3302,3304],{},"These accept any number of arguments. The ",[89,3303,1206],{}," syntax is the magic.",[82,3306,3307],{"className":663,"code":1210,"language":407,"meta":87,"style":87},[89,3308,3309,3327,3335,3347,3355,3359,3365],{"__ignoreMap":87},[92,3310,3311,3313,3315,3317,3319,3321,3323,3325],{"class":94,"line":95},[92,3312,704],{"class":203},[92,3314,1219],{"class":98},[92,3316,722],{"class":199},[92,3318,1224],{"class":952},[92,3320,1227],{"class":203},[92,3322,966],{"class":199},[92,3324,969],{"class":203},[92,3326,972],{"class":199},[92,3328,3329,3331,3333],{"class":94,"line":174},[92,3330,1238],{"class":199},[92,3332,1241],{"class":203},[92,3334,1244],{"class":106},[92,3336,3337,3339,3341,3343,3345],{"class":94,"line":248},[92,3338,1249],{"class":203},[92,3340,1252],{"class":199},[92,3342,1241],{"class":203},[92,3344,1257],{"class":203},[92,3346,1260],{"class":199},[92,3348,3349,3351,3353],{"class":94,"line":262},[92,3350,1265],{"class":199},[92,3352,1268],{"class":203},[92,3354,1271],{"class":199},[92,3356,3357],{"class":94,"line":282},[92,3358,1089],{"class":199},[92,3360,3361,3363],{"class":94,"line":713},[92,3362,977],{"class":203},[92,3364,1282],{"class":199},[92,3366,3367],{"class":94,"line":731},[92,3368,734],{"class":199},[18,3370,3371,3372,3070,3374,3376],{},"You can call it with ",[89,3373,1292],{},[89,3375,1295],{}," any amount. Super\nuseful for things like logging, building queries, anywhere you might need\nflexible arguments.",[63,3378],{},[18,3380,3381],{},[30,3382,3383],{},"4. Anonymous functions",[18,3385,3386],{},"Functions don't need a name. You can define them inline and even call them\nimmediately.",[82,3388,3389],{"className":663,"code":1309,"language":407,"meta":87,"style":87},[89,3390,3391,3399,3425,3435,3447,3451,3459],{"__ignoreMap":87},[92,3392,3393,3395,3397],{"class":94,"line":95},[92,3394,704],{"class":203},[92,3396,707],{"class":98},[92,3398,710],{"class":199},[92,3400,3401,3403,3405,3407,3409,3411,3413,3415,3417,3419,3421,3423],{"class":94,"line":174},[92,3402,1324],{"class":199},[92,3404,1241],{"class":203},[92,3406,1329],{"class":203},[92,3408,722],{"class":199},[92,3410,386],{"class":952},[92,3412,955],{"class":203},[92,3414,958],{"class":199},[92,3416,961],{"class":952},[92,3418,955],{"class":203},[92,3420,966],{"class":199},[92,3422,969],{"class":203},[92,3424,972],{"class":199},[92,3426,3427,3429,3431,3433],{"class":94,"line":248},[92,3428,1069],{"class":203},[92,3430,980],{"class":199},[92,3432,983],{"class":203},[92,3434,986],{"class":199},[92,3436,3437,3439,3441,3443,3445],{"class":94,"line":262},[92,3438,1362],{"class":199},[92,3440,1365],{"class":106},[92,3442,958],{"class":199},[92,3444,1370],{"class":106},[92,3446,728],{"class":199},[92,3448,3449],{"class":94,"line":282},[92,3450,681],{"emptyLinePlaceholder":680},[92,3452,3453,3455,3457],{"class":94,"line":713},[92,3454,716],{"class":199},[92,3456,719],{"class":98},[92,3458,1385],{"class":199},[92,3460,3461],{"class":94,"line":731},[92,3462,734],{"class":199},[18,3464,3465,3466,3468,3469,3471],{},"This prints ",[89,3467,1395],{},". The function is defined and then called right away with ",[89,3470,1399],{},".\nNot something you do every day, but useful for quick logic or closures.",[63,3473],{},[18,3475,3476],{},[30,3477,3478],{},"5. Higher-order functions",[18,3480,3481],{},"Functions can take other functions as arguments. This is where things get\nflexible.",[82,3483,3484],{"className":663,"code":1413,"language":407,"meta":87,"style":87},[89,3485,3486,3526,3534],{"__ignoreMap":87},[92,3487,3488,3490,3492,3494,3496,3498,3500,3502,3504,3506,3508,3510,3512,3514,3516,3518,3520,3522,3524],{"class":94,"line":95},[92,3489,704],{"class":203},[92,3491,1422],{"class":98},[92,3493,722],{"class":199},[92,3495,386],{"class":952},[92,3497,958],{"class":199},[92,3499,961],{"class":952},[92,3501,955],{"class":203},[92,3503,958],{"class":199},[92,3505,1437],{"class":952},[92,3507,1329],{"class":203},[92,3509,722],{"class":199},[92,3511,969],{"class":203},[92,3513,958],{"class":199},[92,3515,969],{"class":203},[92,3517,966],{"class":199},[92,3519,969],{"class":203},[92,3521,966],{"class":199},[92,3523,969],{"class":203},[92,3525,972],{"class":199},[92,3527,3528,3530,3532],{"class":94,"line":174},[92,3529,977],{"class":203},[92,3531,1464],{"class":98},[92,3533,1467],{"class":199},[92,3535,3536],{"class":94,"line":248},[92,3537,734],{"class":199},[18,3539,3540,3541,958,3543,3545,3546,3548],{},"You pass in the logic you want. Want to add? Pass add. Want to multiply? Pass\nmultiply. Same function, different behavior. This is the foundation for things\nlike ",[89,3542,1477],{},[89,3544,1481],{},", and ",[89,3547,1484],{}," in Go.",[995,3550,3552],{"id":3551},"methods-receivers","Methods & Receivers",[18,3554,3555],{},"Go dont have classes, but you have methods using receivers. This is how you\nattach functions to your own types.",[18,3557,3558],{},[30,3559,3560],{},"Value Receiver",[18,3562,3563],{},"When you don't need to modify the original, use value receiver.",[82,3565,3566],{"className":663,"code":1503,"language":407,"meta":87,"style":87},[89,3567,3568,3578,3584,3588,3592,3612,3622],{"__ignoreMap":87},[92,3569,3570,3572,3574,3576],{"class":94,"line":95},[92,3571,1510],{"class":203},[92,3573,1513],{"class":98},[92,3575,1516],{"class":203},[92,3577,972],{"class":199},[92,3579,3580,3582],{"class":94,"line":174},[92,3581,1523],{"class":199},[92,3583,1526],{"class":203},[92,3585,3586],{"class":94,"line":248},[92,3587,734],{"class":199},[92,3589,3590],{"class":94,"line":262},[92,3591,681],{"emptyLinePlaceholder":680},[92,3593,3594,3596,3598,3600,3602,3604,3606,3608,3610],{"class":94,"line":282},[92,3595,704],{"class":203},[92,3597,1541],{"class":199},[92,3599,1544],{"class":952},[92,3601,1547],{"class":98},[92,3603,966],{"class":199},[92,3605,1552],{"class":98},[92,3607,1555],{"class":199},[92,3609,1558],{"class":203},[92,3611,972],{"class":199},[92,3613,3614,3616,3618,3620],{"class":94,"line":713},[92,3615,977],{"class":203},[92,3617,1567],{"class":102},[92,3619,1570],{"class":203},[92,3621,1573],{"class":199},[92,3623,3624],{"class":94,"line":731},[92,3625,734],{"class":199},[18,3627,3628,3629,3631],{},"Call it like ",[89,3630,1583],{},". The function gets a copy of the struct. Good for\nread-only operations.",[63,3633],{},[18,3635,3636],{},[30,3637,3638],{},"Pointer Receiver",[18,3640,3641],{},"When you need to modify the original, use pointer receiver.",[82,3643,3644],{"className":663,"code":1597,"language":407,"meta":87,"style":87},[89,3645,3646,3670,3678],{"__ignoreMap":87},[92,3647,3648,3650,3652,3654,3656,3658,3660,3662,3664,3666,3668],{"class":94,"line":95},[92,3649,704],{"class":203},[92,3651,1541],{"class":199},[92,3653,1544],{"class":952},[92,3655,1174],{"class":203},[92,3657,1547],{"class":98},[92,3659,966],{"class":199},[92,3661,1616],{"class":98},[92,3663,722],{"class":199},[92,3665,1621],{"class":952},[92,3667,1624],{"class":203},[92,3669,1048],{"class":199},[92,3671,3672,3674,3676],{"class":94,"line":174},[92,3673,1631],{"class":199},[92,3675,204],{"class":203},[92,3677,1636],{"class":199},[92,3679,3680],{"class":94,"line":248},[92,3681,734],{"class":199},[18,3683,3221,3684,3686],{},[89,3685,1645],{}," means it works on the actual struct, not a copy. Changes persist.\nThis is also more efficient for large structs you're not copying everything.",[63,3688],{},[453,3690,3691],{"type":507},[18,3692,3693],{},"When in doubt, start with pointer receiver. It's more common in real code and avoids surprises with mutations.",[995,3695,3697],{"id":3696},"when-to-use-what","When to Use What",[47,3699,3700,3717],{},[50,3701,3702,3703,3705,3706],{},"Use ",[30,3704,1665],{}," when:",[47,3707,3708,3711,3714],{},[50,3709,3710],{},"you don't need to modify the data",[50,3712,3713],{},"the struct is small",[50,3715,3716],{},"you want to be safe from accidental changes",[50,3718,3702,3719,3705,3721],{},[30,3720,1682],{},[47,3722,3723,3726,3729],{},[50,3724,3725],{},"you need to modify the data",[50,3727,3728],{},"the struct is large (avoid copying memory)",[50,3730,3731],{},"you want to share one instance across multiple calls",[77,3733,3735],{"id":3734},"_3-structs","3. Structs",[18,3737,3738],{},"Structs are Go's way to group related data together. Think of them like\nlightweight objects no classes, no inheritance, just data and methods.",[82,3740,3741],{"className":663,"code":1703,"language":407,"meta":87,"style":87},[89,3742,3743,3753,3759,3765],{"__ignoreMap":87},[92,3744,3745,3747,3749,3751],{"class":94,"line":95},[92,3746,1510],{"class":203},[92,3748,1513],{"class":98},[92,3750,1516],{"class":203},[92,3752,972],{"class":199},[92,3754,3755,3757],{"class":94,"line":174},[92,3756,1523],{"class":199},[92,3758,1526],{"class":203},[92,3760,3761,3763],{"class":94,"line":248},[92,3762,1726],{"class":199},[92,3764,1729],{"class":203},[92,3766,3767],{"class":94,"line":262},[92,3768,734],{"class":199},[18,3770,3771],{},"That's a user with a name and age. Create one:",[82,3773,3774],{"className":663,"code":1739,"language":407,"meta":87,"style":87},[89,3775,3776,3788,3796,3802],{"__ignoreMap":87},[92,3777,3778,3780,3782,3784,3786],{"class":94,"line":95},[92,3779,1746],{"class":203},[92,3781,1749],{"class":199},[92,3783,204],{"class":203},[92,3785,1513],{"class":98},[92,3787,1756],{"class":199},[92,3789,3790,3792,3794],{"class":94,"line":174},[92,3791,1761],{"class":199},[92,3793,1764],{"class":102},[92,3795,1767],{"class":199},[92,3797,3798,3800],{"class":94,"line":248},[92,3799,1772],{"class":199},[92,3801,1775],{"class":106},[92,3803,3804],{"class":94,"line":262},[92,3805,734],{"class":199},[18,3807,3808,3809,3811],{},"Access fields like ",[89,3810,1785],{},". Simple.",[18,3813,3814],{},"You can add methods to structs (that's the receivers we covered). That's where\nGo's \"composition over inheritance\" philosophy comes in you don't inherit, you\njust add methods to whatever you need.",[77,3816,3818],{"id":3817},"_4-error-handling","4. Error Handling",[18,3820,3821],{},"Go's error handling is explicit. No exceptions, no try-catch. You handle errors\nas they happen.",[82,3823,3824],{"className":663,"code":1799,"language":407,"meta":87,"style":87},[89,3825,3826,3838,3844],{"__ignoreMap":87},[92,3827,3828,3830,3832,3834,3836],{"class":94,"line":95},[92,3829,1806],{"class":203},[92,3831,1809],{"class":199},[92,3833,1812],{"class":203},[92,3835,1815],{"class":106},[92,3837,972],{"class":199},[92,3839,3840,3842],{"class":94,"line":174},[92,3841,977],{"class":203},[92,3843,1824],{"class":199},[92,3845,3846],{"class":94,"line":248},[92,3847,734],{"class":199},[18,3849,3850],{},"You'll see this everywhere. Get used to it.",[18,3852,3853],{},"The pattern is: do something, check if it failed, handle it. No hidden magic. No\nsurprise crashes. Every function that can fail returns an error you decide what\nto do with it.",[453,3855,3856],{"type":825},[18,3857,3858,3859,3861,3862,3864],{},"Never ignore errors with ",[89,3860,1842],{},". If you do ",[89,3863,1846],{},", you're silently swallowing failures. At minimum, log them. Your future self will thank you.",[77,3866,3868],{"id":3867},"_5-goroutines-and-go-channels-later-not-now","5. Goroutines and Go channels (Later, not now)",[18,3870,3871],{},"This is Go's concurrency running things in parallel. But don't start here.",[82,3873,3874],{"className":663,"code":1857,"language":407,"meta":87,"style":87},[89,3875,3876],{"__ignoreMap":87},[92,3877,3878,3880,3882],{"class":94,"line":95},[92,3879,407],{"class":203},[92,3881,1866],{"class":98},[92,3883,1869],{"class":199},[18,3885,3886],{},"It looks simple. Is simple. But using it correctly requires understanding\nchannels, synchronization, race conditions. All things to learn after you've got\nthe basics down.",[453,3888,3889],{"type":455},[18,3890,3891,3892,3894],{},"Concurrency is not parallelism. Go handles both, but start with writing good synchronous code first. Add ",[89,3893,407],{}," only when you've proven you need it, i will do another post about that.",[63,3896],{},[11,3898,3900],{"id":3899},"build-something-real-immediately","Build Something Real (Immediately)",[18,3902,3903],{},"Don't stay in \"learning mode\".",[18,3905,3906],{},"Pick one:",[47,3908,3909,3912,3915,3918],{},[50,3910,3911],{},"CLI todo app",[50,3913,3914],{},"simple REST API",[50,3916,3917],{},"file server",[50,3919,3920],{},"log parser",[18,3922,3923],{},"Example: minimal HTTP server",[82,3925,3926],{"className":663,"code":1912,"language":407,"meta":87,"style":87},[89,3927,3928,3934,3938,3944,3952,3960,3964,3968,3998,4010,4014,4018,4026,4038,4054],{"__ignoreMap":87},[92,3929,3930,3932],{"class":94,"line":95},[92,3931,672],{"class":203},[92,3933,675],{"class":98},[92,3935,3936],{"class":94,"line":174},[92,3937,681],{"emptyLinePlaceholder":680},[92,3939,3940,3942],{"class":94,"line":248},[92,3941,686],{"class":203},[92,3943,1931],{"class":199},[92,3945,3946,3948,3950],{"class":94,"line":262},[92,3947,1936],{"class":102},[92,3949,692],{"class":98},[92,3951,695],{"class":102},[92,3953,3954,3956,3958],{"class":94,"line":282},[92,3955,1936],{"class":102},[92,3957,1947],{"class":98},[92,3959,695],{"class":102},[92,3961,3962],{"class":94,"line":713},[92,3963,728],{"class":199},[92,3965,3966],{"class":94,"line":731},[92,3967,681],{"emptyLinePlaceholder":680},[92,3969,3970,3972,3974,3976,3978,3980,3982,3984,3986,3988,3990,3992,3994,3996],{"class":94,"line":1960},[92,3971,704],{"class":203},[92,3973,1965],{"class":98},[92,3975,722],{"class":199},[92,3977,1970],{"class":952},[92,3979,1973],{"class":98},[92,3981,485],{"class":199},[92,3983,1978],{"class":98},[92,3985,958],{"class":199},[92,3987,1983],{"class":952},[92,3989,1986],{"class":203},[92,3991,1989],{"class":98},[92,3993,485],{"class":199},[92,3995,1994],{"class":98},[92,3997,1048],{"class":199},[92,3999,4000,4002,4004,4006,4008],{"class":94,"line":1999},[92,4001,716],{"class":199},[92,4003,2004],{"class":98},[92,4005,2007],{"class":199},[92,4007,2010],{"class":102},[92,4009,728],{"class":199},[92,4011,4012],{"class":94,"line":2015},[92,4013,734],{"class":199},[92,4015,4016],{"class":94,"line":2020},[92,4017,681],{"emptyLinePlaceholder":680},[92,4019,4020,4022,4024],{"class":94,"line":2025},[92,4021,704],{"class":203},[92,4023,707],{"class":98},[92,4025,710],{"class":199},[92,4027,4028,4030,4032,4034,4036],{"class":94,"line":2034},[92,4029,2037],{"class":199},[92,4031,2040],{"class":98},[92,4033,722],{"class":199},[92,4035,2045],{"class":102},[92,4037,2048],{"class":199},[92,4039,4040,4042,4044,4046,4048,4050,4052],{"class":94,"line":2051},[92,4041,2037],{"class":199},[92,4043,2056],{"class":98},[92,4045,722],{"class":199},[92,4047,2061],{"class":102},[92,4049,958],{"class":199},[92,4051,1117],{"class":106},[92,4053,728],{"class":199},[92,4055,4056],{"class":94,"line":2070},[92,4057,734],{"class":199},[18,4059,4060],{},"Run:",[82,4062,4063],{"className":84,"code":740,"language":86,"meta":87,"style":87},[89,4064,4065],{"__ignoreMap":87},[92,4066,4067,4069,4071],{"class":94,"line":95},[92,4068,407],{"class":98},[92,4070,749],{"class":102},[92,4072,657],{"class":102},[18,4074,4075],{},"Open:",[82,4077,4079],{"className":4078,"code":2094,"language":2095},[2093],[89,4080,2094],{"__ignoreMap":87},[18,4082,4083],{},"That's a running web server in under 20 lines of code. The standard library\ngives you this for free.",[63,4085],{},[11,4087,4089],{"id":4088},"the-go-mindset","The Go Mindset",[18,4091,4092],{},"Go has strong opinions about how code should be written. Fight these and you'll\nfight the language. Accept them and you'll move fast.",[47,4094,4095,4101,4107],{},[50,4096,4097,4100],{},[30,4098,4099],{},"Simplicity over cleverness"," Go prefers clear code over clever code. If you\nfind yourself writing complex abstractions to save a few lines, you're\nprobably doing it wrong. The goal is readability, not impressing other\ndevelopers.",[50,4102,4103,4106],{},[30,4104,4105],{},"Explicit over magic"," Go doesn't do implicit anything. No hidden type\nconversions, no automatic imports, no magic. What you see is what you get.\nThis makes code easier to understand and debug.",[50,4108,4109,4112],{},[30,4110,4111],{},"Composition over inheritance"," Forget classes and inheritance hierarchies.\nIn Go, you compose behavior by embedding types. It's more flexible and less\nfragile than traditional OOP.",[453,4114,4115],{"type":825},[18,4116,4117],{},"If you fight Go's opinions you will hate using it. If you embrace them, you will ship faster than with any other language You have used.",[63,4119],{},[11,4121,4123],{"id":4122},"pros-cons-no-sugarcoat-xd","Pros & Cons (No sugarcoat XD)",[2142,4125,4126,4146],{},[911,4127,4129],{"icon":2146,"title":4128},"Pros",[47,4130,4131,4134,4137,4140,4143],{},[50,4132,4133],{},"fast compile time",[50,4135,4136],{},"simple syntax",[50,4138,4139],{},"great standard library",[50,4141,4142],{},"easy deployment (single binary)",[50,4144,4145],{},"built-in concurrency",[911,4147,4149],{"icon":2167,"title":4148},"Cons",[47,4150,4151,4154,4157,4160],{},[50,4152,4153],{},"repetitive error handling",[50,4155,4156],{},"limited abstractions",[50,4158,4159],{},"not very expressive",[50,4161,4162],{},"can feel restrictive",[63,4164],{},[11,4166,4168],{"id":4167},"the-secret-to-actually-learning-go","The Secret to Actually Learning Go",[18,4170,4171],{},"Most people try to \"finish learning\" Go before building anything. They watch all\nthe tutorials, read all the docs, watch all the videos.",[18,4173,4174],{},"That doesn't work.",[18,4176,4177],{},"You learn Go by:",[47,4179,4180,4183,4186],{},[50,4181,4182],{},"writing code",[50,4184,4185],{},"breaking things",[50,4187,4188],{},"fixing them",[18,4190,4191],{},"That's it. There's no shortcut. The more you struggle, the more you learn.",[453,4193,4194],{"type":455},[18,4195,4196],{},"Tutorials are great for context, but they don't build skills. Skills come from doing, not watching.",[63,4198],{},[11,4200,4202],{"id":4201},"my-take","My Take",[2142,4204,4205,4219],{},[911,4206,4208],{"icon":2226,"title":4207},"Great for",[47,4209,4210,4213,4216],{},[50,4211,4212],{},"build backend systems",[50,4214,4215],{},"care about performance and simplicity",[50,4217,4218],{},"want to ship fast",[911,4220,4222],{"icon":2241,"title":4221},"Not for",[47,4223,4224,4227,4230],{},[50,4225,4226],{},"want advanced language features",[50,4228,4229],{},"enjoy complex abstractions",[50,4231,4232],{},"are doing AI or heavy data science",[18,4234,4235],{},"So what matters is:",[47,4237,4238,4241,4244],{},[50,4239,4240],{},"consistency",[50,4242,4243],{},"building real things",[50,4245,4246],{},"solving problems",[63,4248],{},[11,4250,4252],{"id":4251},"conclusion","Conclusion",[18,4254,4255],{},"Stop consuming content, Write code; Your first project will be bad but The next\none will be better, That's the only path.",[18,4257,4258],{},"And if you stick with it long enough you will understand why people like Go.",[18,4260,4261],{},"Not because it's amazing Because it works, but for me its amazing XD.",[2283,4263,2285],{},{"title":87,"searchDepth":174,"depth":174,"links":4265},[4266,4267,4268,4269,4279,4284,4285,4287,4288,4295,4296,4297,4298,4299,4300],{"id":2349,"depth":174,"text":2350},{"id":2375,"depth":174,"text":2376},{"id":2398,"depth":174,"text":2399},{"id":2405,"depth":174,"text":2406,"children":4270},[4271,4272,4273,4274,4275,4276,4277,4278],{"id":79,"depth":248,"text":80},{"id":113,"depth":248,"text":114},{"id":135,"depth":248,"text":136},{"id":155,"depth":248,"text":156},{"id":2481,"depth":248,"text":2482},{"id":357,"depth":248,"text":358},{"id":378,"depth":248,"text":379},{"id":2642,"depth":248,"text":2643},{"id":2661,"depth":174,"text":2662,"children":4280},[4281,4282,4283],{"id":425,"depth":248,"text":426},{"id":516,"depth":248,"text":517},{"id":587,"depth":248,"text":588},{"id":2825,"depth":174,"text":2826},{"id":2924,"depth":174,"text":4286},"Manage Your Project (The go mod way)",{"id":2990,"depth":174,"text":2991},{"id":3027,"depth":174,"text":3028,"children":4289},[4290,4291,4292,4293,4294],{"id":3034,"depth":248,"text":3035},{"id":3075,"depth":248,"text":3076},{"id":3734,"depth":248,"text":3735},{"id":3817,"depth":248,"text":3818},{"id":3867,"depth":248,"text":3868},{"id":3899,"depth":174,"text":3900},{"id":4088,"depth":174,"text":4089},{"id":4122,"depth":174,"text":4123},{"id":4167,"depth":174,"text":4168},{"id":4201,"depth":174,"text":4202},{"id":4251,"depth":174,"text":4252},"A practical, no-BS guide to starting with Go with real commands, real code, and zero tutorial hell.","en",{"tags":4304,"image":2334},[4305,4306,4307,2332,4308],"golang","programming","backend","programming languages","\u002Fblog\u002Fgetting-started-with-go",{"title":2344,"description":4301},"blog\u002Fgetting-started-with-go","6ucJ7P_2fh706sclFpa_lrKaPN1tDHa8rFxvd4b3jxg",{"id":4314,"title":4315,"body":4316,"date":5041,"description":5042,"extension":2325,"locale":2326,"meta":5043,"navigation":680,"path":5050,"seo":5051,"stem":5052,"__hash__":5053},"blog\u002Fblog\u002Far\u002Fchoosing-linux-distro.md","إزاي تختار توزيعة لينكس بجد (من غير ما تبوظ دماغك)",{"type":8,"value":4317,"toc":5014},[4318,4320,4325,4328,4331,4337,4340,4342,4346,4352,4404,4413,4415,4419,4429,4433,4439,4442,4466,4472,4474,4483,4488,4491,4513,4518,4526,4528,4532,4537,4540,4563,4568,4570,4574,4584,4588,4603,4607,4613,4619,4623,4675,4679,4682,4710,4719,4721,4729,4732,4755,4757,4761,4764,4905,4910,4912,4916,4919,4924,4927,4944,4949,4951,4955,4958,4962,4965,4969,4972,4976,4979,4983,4986,4991,4993,4995,4998,5001,5004,5007],[11,4319,13],{"id":13},[15,4321,4322],{},[18,4323,4324],{},"إيه أحسن توزيعة لينكس؟",[18,4326,4327],{},"شوفت السؤال دا كتير جدا بين صحابي والناس عالسوشيال ميديا, ولكن بصراحه عزيزي القارئ دا سؤال فشنك, فوق دا كنت بكره اجابات الناس (منهم يوتيوبرز لينكس وبتاع ياحزني).",[18,4329,4330],{},"وده اللي بشوفه اغلب الوقت: حد يقرر يجرب لينكس أو يغير توزيعته يفتح ريديت ويدخل في لوب بحث مالوش نهاية ويقرا مليون رأي ويتفرج على 12 مليون فيديو وفي الاخر يلاقي نفسه تايه اكتر من الاول. تعرف انت الكلام دا صح؟ أنا عيشته.",[18,4332,4333,4334],{},"السؤال ده المفروض يتغير ل ",[30,4335,4336],{},"\"ايه احسن توزيعة للي انا محتاجه دلوقتي.\"",[18,4338,4339],{},"علشان كده في البوست ده مش هديك tier list ولا هحكيلك على راي حد تاني هقولك رايي بصراحة مع الـ pros\u002Fcons وهشاركك تجربتي مع لينكس وإزاي بطريقه القرارات دي. المقاله دي يعتبر ملخص طريقي في الاختيار بعد سنين ما جربت توزيعات كتير فشخت حاجات كتير واخيرا استقريت. عشان ماطولش عليكم كوباية الشاي التمام ويلا بينا نشوف الموضوع دا بيقول ايه",[63,4341],{},[11,4343,4345],{"id":4344},"اول-حاجة-انت-عايز-تعمل-ايه-بالظبط","اول حاجة: انت عايز تعمل ايه بالظبط؟",[18,4347,4348,4349],{},"قبل ما تفكر في اي توزيعة لازم ياصاحبي تسأل نفسك سؤال واحد ",[30,4350,4351],{},"الجهاز ده محتاجه إيه بالظبط؟",[2142,4353,4354,4367,4380,4392],{},[911,4355,4358,4361],{"icon":4356,"title":4357},"i-lucide-briefcase","انا عايز الشغل يخلص بس",[18,4359,4360],{},"انت واحد هربان من ويندوز وعايز حاجة تشتغل ومش مهتم ب\"تعلم لينكس\" دلوقتي.\nمهتم بس تفتح المتصفح، تكتب كود، من غير ما تخش جوله عالتيكتوك مع النظام.",[18,4362,4363,4366],{},[30,4364,4365],{},"الاهم هنا:"," استقرار، واجهة مريحة، اعدادات بسيطة.",[911,4368,4371,4374],{"icon":4369,"title":4370},"i-lucide-book-open","تتعلم لينكس صح",[18,4372,4373],{},"عايز تفهم إزاي لينكس شغال من جوه، او بتتعلم عشان الكليه. التيرمنال بالنسبة لك مش حاجة تخوف بالعكس حاجة تجنن ومستعد تقرا wikis وتفهم حاجات لوحدك.",[18,4375,4376,4379],{},[30,4377,4378],{},"الأهم هنا:"," توثيق كويس يخليك تفهم بنفسك، كوميونتي نشط يجاوب على اسالتك عالسريع المريع.",[911,4381,4384,4387],{"icon":4382,"title":4383},"i-lucide-gamepad-2","جيمنج",[18,4385,4386],{},"عايز تلعب جيمز وسمعت عن \"الأداء الأحسن\". وتوافق Proton ودعم الدرايفرات وقلة الحرق اهم عندك من الفلسفة.",[18,4388,4389,4391],{},[30,4390,4378],{}," درايفرات NVIDIA\u002FAMD، تكامل Steam، جيمنج \"بيشتغل من غير وجع قلب اصلها مش ناقصه.\"",[911,4393,4396,4399],{"icon":4394,"title":4395},"i-lucide-code","تطوير",[18,4397,4398],{},"ويب ديف، باك اند، ديف اوبس. محتاج containers وبكجات كتير متاحة وادوات تطوير ماتتخانقش معاك.",[18,4400,4401,4403],{},[30,4402,4378],{}," توفر الحزم، دعم Docker، كيرنلات حديثة الخ الخ.",[453,4405,4406],{"type":455},[18,4407,4408,4409,4412],{},"اختار على اساس اللي محتاجه انت ",[30,4410,4411],{},"دلوقتي"," مش اللي ممكن تحتاجه بعد 6 شهور دايما تقدر تغير في اي وقت لول",[63,4414],{},[11,4416,4418],{"id":4417},"تاني-حاجة-الطرق-التلاتة","تاني حاجة: الطرق التلاتة",[18,4420,4421,4422,4428],{},"بعد سنين ما لغبطت الدنيا في توزيعات كتير لقيت انهم كلهم بيتلخصو في الاخر تقريبا ل3 انواع كل نوع له مميزاته وعيوبه ومفيش نوع ",[30,4423,4424],{},[4425,4426,4427],"em",{},"أحسن"," من التاني.",[77,4430,4432],{"id":4431},"المسار-الأول-أوبونتو-ومشتقاتها-عايزها-تشتغل-بس","المسار الأول: أوبونتو ومشتقاتها (عايزها تشتغل بس)",[18,4434,4435,4438],{},[30,4436,4437],{},"التوزيعات:"," Ubuntu، Linux Mint، Pop!_OS، Zorin",[18,4440,4441],{},"ده المكان اللي المفروض معظم الناس يبدأوا منه بجد. التوزيعات دي معمولة لناس عايزة لينكس من غير وجع دماغ.",[911,4443,4446,4460],{"icon":4444,"title":4445},"i-simple-icons-ubuntu","هتاخد ايه؟",[47,4447,4448,4451,4454,4457],{},[50,4449,4450],{},"كوميونتي ضخم (اي مشكلة ليها حل على stack overflow وreddit الخ)",[50,4452,4453],{},"الهاردوير شغال اغلب الوقت",[50,4455,4456],{},"شكل مالوف (بم ان بقالك مليون سنه مع ويندوز اليع) ومريح",[50,4458,4459],{},"اصدارات LTS مش بتقع من غير سبب وتحديثاتها قليله",[18,4461,4462,4465],{},[30,4463,4464],{},"عيوبها:"," مش bleeding edge. في شوية bloat. و سناب يع يع (لو إنت على أوبونتو الأصلية). وروح اسال اي AI ايه مشاكل اوبنتو و Canoncil ليه بعض الناس بتكرههم منهم انا",[18,4467,4468,4471],{},[30,4469,4470],{},"رأيي:"," Linux Mint غالبا أحسن خطوة لو جاي من ويندوز، بس للأداء لاااا وانا بكرهها، kubuntu\u002Fxubuntu أحسن بكتير. و Pop!_OS او Zorin لو معاك كارت NVIDIA. الاتنين اختيارات ثابتة وبصراحه مملة. والممل هنا حاجة كويسة يا صديقي XD.",[63,4473],{},[77,4475,4477,4478,4482],{"id":4476},"المسار-التاني-ارش-ومشتقاته-عايز-التحكم-i-use-arch-btw","المسار التاني: ارش ومشتقاته (",[4479,4480,4481],"del",{},"عايز التحكم"," I use arch btw)",[18,4484,4485,4487],{},[30,4486,4437],{}," Arch، EndeavourOS، CachyOS، Manjaro",[18,4489,4490],{},"دي طريق الـ\"I use Arch btw\". التوزيعات دي بتديك أحدث الحزم وتحكم كامل في النظام. وفي المقابل بتقولك اقري الدوكمنتيشن وصلح حاجتك بنفسك.",[911,4492,4494,4508],{"icon":4493,"title":4445},"i-simple-icons-archlinux",[47,4495,4496,4499,4502,4505],{},[50,4497,4498],{},"توزيعات Rolling release (دايما بيتحدث من ساعة ما بتنزل)",[50,4500,4501],{},"الArch Wiki، احسن توثيق لينكس على الكوكب, نقطة.",[50,4503,4504],{},"بكج مانجر AUR فيه كل حاجة في الحياه تقريبا",[50,4506,4507],{},"انت فاهم نظامك لانك انت اللي ظبطت كل حاجه فيه",[18,4509,4510,4512],{},[30,4511,4464],{}," حاجات بتقع بين وقت والتاني. التحديثات ممكن تعمل مشاكل لازم تبقي واخد بالك. ولو انت مصري زيي فالنت بتاعك هيخلص في يومين😂",[18,4514,4515,4517],{},[30,4516,4470],{}," لو جاي جديد خالص متبداش من هنا بس لو عايز تتعلم لينكس حقيقي؟ EndeavourOS بتديك ارش و installer سهل. و CachyOS أحسن حاجة في الاستخدام والجيمنج بصراحه وبرضو installer اسهل. Manjaro أكتر حاجة \"كل حاجة جاهزة\" بس بتتاخر في التحديثات احيانا وبصراحه مبحبهاش اوي.",[453,4519,4520],{"type":825},[18,4521,4522,4525],{},[30,4523,4524],{},"خلي ده حلقه في ودنك:"," ارش مش \"اصعب\" من اوبونتو هو مختلف بس. هو مفترض انك تحب تفهم فلو شايف ده مرهق، المسار الاول موجود. لو شايفه ممتع، أهلا بيك في جروب الصلع.",[63,4527],{},[77,4529,4531],{"id":4530},"المسار-التالت-فيدورا-الوسط-الحديث","المسار التالت: فيدورا \u002F الوسط الحديث",[18,4533,4534,4536],{},[30,4535,4437],{}," Fedora Workstation، openSUSE Tumbleweed",[18,4538,4539],{},"المسار الوسط. حزم حديثة من غير الجو بتاع ارش اللي \"انت لوحدك في ليلتك\". الدعم من شركة كبيرة (زي دعم Red Hat ل Fedora) معناه ان فيه اعدادات افتراضيه كويسه واستقرار.",[911,4541,4544,4558],{"icon":4542,"title":4543},"i-simple-icons-fedora","هتاخد إيه",[47,4545,4546,4549,4552,4555],{},[50,4547,4548],{},"احدث البكجات المستقره (مش bleeding edge، بس قريبة جدا)",[50,4550,4551],{},"تجربه مطور ممتازه",[50,4553,4554],{},"تكامل كويس مع GNOME\u002FKDE",[50,4556,4557],{},"الSELinux شغال افتراضيا (أمان)",[18,4559,4560,4562],{},[30,4561,4464],{}," كوميونتي أصغر من أوبونتو. دورة إصدار 6 شهور (فيدورا). بعض البكجات محتاجة repos زيادة بتضيفها بcmd.",[18,4564,4565,4567],{},[30,4566,4470],{}," فيدورا هي اللي بنصح بيها المبرمجين والمطورين اللي مش عايزين يفكروا في نظامهم أصلا. حديثه، نضيفه، وبتبعد عن طريقك. و Tumbleweed هي \"rolling release مضمونة\" لو ده مفهوم. (على فكرة linus torvalds نفسه بيستخدم فيدورا XD)",[63,4569],{},[11,4571,4573],{"id":4572},"تالت-حاجة-اسئله-تسألها-لنفسك","تالت حاجة: اسئله تسألها لنفسك",[453,4575,4576],{"type":825},[18,4577,4578,4583],{},[30,4579,4580],{},[4425,4581,4582],{},"بالله عليك"," انسى \"ايه احسن توزيعه\" جاوب على الاسئله دي بدل دا:",[77,4585,4587],{"id":4586},"_1-عندك-وقت-قد-إيه","1. عندك وقت قد إيه؟",[2142,4589,4590,4597],{},[911,4591,4594],{"icon":4592,"title":4593},"i-lucide-clock","وقت فراغ كتير",[18,4595,4596],{},"روح استكشف. جرب Arch او Gentoo. خرب الدنيا, اتعلم من اللي خربته. دي الطريقة الوحيدة اللي هتفهم بيها لينكس فعلا، وانا اتعلمت بالطريقه دي",[911,4598,4600],{"icon":2146,"title":4599},"محتاج تشتغل دلوقتي",[18,4601,4602],{},"اوبونتو LTS، فيدورا، او زورين. نزلها ورتب دنيتك وادواتك وارجع لشغلك كمله. النظام المفروض ميكنش موجود اساسا بالنسبه لك.",[77,4604,4606],{"id":4605},"_2-مرتاح-لفكرة-انك-تكسر-حاجات","2. مرتاح لفكرة انك تكسر حاجات؟",[18,4608,4609,4612],{},[30,4610,4611],{},"\"أنا ههندلها بنفسي\""," -> Rolling releases تمام عادي بالنسبه لك عندك: Arch، Gento، Fedora Rawhide.",[18,4614,4615,4618],{},[30,4616,4617],{},"\"بالله عليك لا عندي شغل\""," -> إصدارات LTS عندك: اوبونتو LTS فيدورا وركستيشن، دبيان ستيبل. مملة وثابتة وده المقصود منها.",[77,4620,4622],{"id":4621},"_3-معاك-هاردوير-إيه","3. معاك هاردوير إيه؟",[4624,4625,4626,4639],"table",{},[4627,4628,4629],"thead",{},[4630,4631,4632,4636],"tr",{},[4633,4634,4635],"th",{},"الهاردوير",[4633,4637,4638],{},"الترشيح",[4640,4641,4642,4651,4659,4667],"tbody",{},[4630,4643,4644,4648],{},[4645,4646,4647],"td",{},"كارت NVIDIA",[4645,4649,4650],{},"عندك Pop!_OS، CachyOS أو فيدورا (أحسن تكامل درايفرات)",[4630,4652,4653,4656],{},[4645,4654,4655],{},"كارت AMD",[4645,4657,4658],{},"أي حاجة حرفيا (الدرايفرات جوه الكيرنل)",[4630,4660,4661,4664],{},[4645,4662,4663],{},"لابتوب قديم\u002Fضعيف",[4645,4665,4666],{},"عندك Xubuntu، Linux Lite، أو أي حاجة عليها XFCE\u002FLXQt",[4630,4668,4669,4672],{},[4645,4670,4671],{},"هاردوير جديد تماما",[4645,4673,4674],{},"كيرنلات احدث = CachyOS، فيدورا، ارش",[77,4676,4678],{"id":4677},"_4-عندك-برامج-لازم-تشتغل","4. عندك برامج لازم تشتغل؟",[18,4680,4681],{},"هكون صريح معاك في برامج مالهاش حل على لينكس:",[47,4683,4684,4691,4698,4704],{},[50,4685,4686,4687,4690],{},"اولهم ",[30,4688,4689],{},"Adobe Suite"," مفيش دعم رسمي. في بدائل زي GIMP و Inkscape بس هما مختلفين ولكن اقويا برضو.",[50,4692,4693,4694,4697],{},"واكيد ",[30,4695,4696],{},"Microsoft Office"," استخدم النسخة الاونلاين او البديل LibreOffice في ناس بتفرق معاها وفي ناس لا.",[50,4699,4700,4703],{},[30,4701,4702],{},"برامج ابداعيه\u002Fاحترافيه"," اتاكد من التوافق قبل ما تقرر.",[50,4705,4706,4709],{},[30,4707,4708],{},"ادوات الـ dev"," انت في السليم كل حاجة تقريبا موجوده.",[453,4711,4712],{"type":825},[18,4713,4714,4715,4718],{},"اتاكد من البرامج اللي مينفعش تستغني عنها ",[30,4716,4717],{},"قبل"," ما تلتزم. نزل التوزيعة على VM الاول. انا جربت المقلب ده بنفسي وقعدت اعيط بس عادي يعني samouly can handle it",[63,4720],{},[11,4722,4724,4725,4728],{"id":4723},"خد-هنا-الاسباب-الغلط-لاول-اختيار","خد هنا! الاسباب ",[4425,4726,4727],{},"الغلط"," لاول اختيار",[18,4730,4731],{},"خليني اوفرلك وقت. دي اسباب وحشة (زباله بامانه):",[911,4733,4735],{"icon":2241,"title":4734},"اسباب مش مهمة",[47,4736,4737,4740,4743,4746,4749,4752],{},[50,4738,4739],{},"\"ريديت قال دي الاحسن\" — ريديت بيقول كتير.",[50,4741,4742],{},"\"شكلها تحفه في الصور\" — تقدر تعمل ricing لاي توزيعة. المهم بيئة الديسكتوب نفسها مش التوزيعة.",[50,4744,4745],{},"\"لينكس الحقيقي Arch\" — حسبة في راس ناس استخدم اللي انت مرتاح معاه.",[50,4747,4748],{},"\"شفت فيديو بيقول توزيعة X احسن حاجه\" — مابنتكلمش على عربيات هنا ياصحبي كل توزيعة هي الاحسن بالنسبه لايه اللي انت محتاجه.",[50,4750,4751],{},"\"اوبونتو للمبتدئين\" — اوبونتو شغالة على نص سيرفرات العالم. زي ماقلت هي للي عايز يخلص حاله ويبدأ ويشتغل.",[50,4753,4754],{},"\"محتاج اكون مميز\" — النظام اداة مش هوية. (بس برضه I use arch btw)",[63,4756],{},[11,4758,4760],{"id":4759},"اختياري-النهائي","اختياري النهائي",[18,4762,4763],{},"عايز توصيات بقا؟ خلصانه عزيزي القارئ. ده اللي هوصي بيه نفسي لو كنت لسا بادي وصحابي:",[4624,4765,4766,4779],{},[4627,4767,4768],{},[4630,4769,4770,4773,4776],{},[4633,4771,4772],{},"حالتك",[4633,4774,4775],{},"اختياري",[4633,4777,4778],{},"ليه",[4640,4780,4781,4794,4817,4830,4843,4858,4873,4889],{},[4630,4782,4783,4786,4791],{},[4645,4784,4785],{},"اول مرة من ويندوز",[4645,4787,4788],{},[30,4789,4790],{},"ZorinOS",[4645,4792,4793],{},"شكله مألوف، ثابت وكوميونتي ضخم وسهل",[4630,4795,4796,4799,4814],{},[4645,4797,4798],{},"مركز على الجيمنج",[4645,4800,4801,4804,4805,4804,4808,4804,4811],{},[30,4802,4803],{},"CachyOS"," او ",[30,4806,4807],{},"Nobara",[30,4809,4810],{},"PikaOS",[30,4812,4813],{},"Bazzite",[4645,4815,4816],{},"أحسن دعم درايفرات و محسّنة للألعاب",[4630,4818,4819,4822,4827],{},[4645,4820,4821],{},"مبرمج (ويب\u002Fباك اند، الخ)",[4645,4823,4824],{},[30,4825,4826],{},"Fedora Workstation",[4645,4828,4829],{},"حديثة، نضيفة ومش واقفة في طريقك",[4630,4831,4832,4835,4840],{},[4645,4833,4834],{},"عايز تكرار كامل + تحكم",[4645,4836,4837],{},[30,4838,4839],{},"NixOS",[4645,4841,4842],{},"وحش مختلف، بس تستاهل لو بتقدر ال config as code",[4630,4844,4845,4848,4855],{},[4645,4846,4847],{},"عايز تتعلم لينكس",[4645,4849,4850,4804,4853],{},[30,4851,4852],{},"EndeavourOS",[30,4854,4803],{},[4645,4856,4857],{},"ارش من غير وجع دماغ، تجربة تعلم جامدة",[4630,4859,4860,4863,4870],{},[4645,4861,4862],{},"مرتاح بالفعل، عايز تحكم",[4645,4864,4865,4804,4868],{},[30,4866,4867],{},"Arch",[30,4869,4839],{},[4645,4871,4872],{},"تحكم كامل، على مزاجك انت",[4630,4874,4875,4878,4886],{},[4645,4876,4877],{},"سيرفر \u002F شغل جاد",[4645,4879,4880,4804,4883],{},[30,4881,4882],{},"Debian",[30,4884,4885],{},"Ubuntu Server",[4645,4887,4888],{},"متجربة و battle testes وثابتة",[4630,4890,4891,4894,4902],{},[4645,4892,4893],{},"هاردوير قديم",[4645,4895,4896,4804,4899],{},[30,4897,4898],{},"Xubuntu",[30,4900,4901],{},"Linux Lite",[4645,4903,4904],{},"خفيفة ولسه حية",[453,4906,4907],{"type":507},[18,4908,4909],{},"لاحظت ان مفيش \"احسن توزيعه\" واحده؟ ببساطه احتياجات مختلفة = ادوات مختلفة. وهي دي الفكره",[63,4911],{},[11,4913,4915],{"id":4914},"السر-الحقيقي","السر الحقيقي",[18,4917,4918],{},"دا اللي محدش هيقولهولك غير صامولي عزيزي القارئ:",[18,4920,4921],{},[30,4922,4923],{},"الموضوع مش مستاهل كل ده.",[18,4925,4926],{},"بجد كل التوزيعات المعروفة في 2026 حلوه. كلهم شغالين على نفس الكيرنل وعندهم تقريبا نفس الحزم الفرق كله في خمس حاجات:",[431,4928,4929,4932,4935,4938,4941],{},[50,4930,4931],{},"بكج مانجر (apt \u002F dnf \u002F pacman)",[50,4933,4934],{},"اعدادات الكيرنل وقت الكومبايل",[50,4936,4937],{},"نظام الاصدار (ثابت ولا rolling)",[50,4939,4940],{},"بيئة الديسكتوب الافتراضيه (اللي تقدر تغيرها في اي وقت لول)",[50,4942,4943],{},"حجم الكوميونتي وثقافته",[453,4945,4946],{"type":455},[18,4947,4948],{},"احسن توزيعه هي اللي تبطل تفكر فيها, اللي شغالة مع شغلك وبتسيبك في حالك",[63,4950],{},[11,4952,4954],{"id":4953},"جرب-الاول","جرب الاول",[18,4956,4957],{},"لسه مش عارف تبدا؟ خد الطريقه المظبوطه:",[77,4959,4961],{"id":4960},"_1-نزل-zorinos-او-فيدورا-على-جهاز-افتراضي-vm","1. نزل ZorinOS او فيدورا على جهاز افتراضي (VM)",[18,4963,4964],{},"نص ساعة (لو النت بتاعك بطه بلدي زيي). من غير اي التزامات كبيره حس بالاحساس بس.",[77,4966,4968],{"id":4967},"_2-استخدمها-في-شغل-حقيقي","2. استخدمها في شغل حقيقي",[18,4970,4971],{},"بعد كدا ماتقعدش بتلف حوالينها بس جرب شغلك الفعلي: ال editor بتاعك، المتصفح، ادواتك, الخ الخ.",[77,4973,4975],{"id":4974},"_3-لو-عجبتك-ثبتها-بجد","3. لو عجبتك، ثبتها بجد",[18,4977,4978],{},"لو لا؟ جرب غيرها. مفيش مانع.",[77,4980,4982],{"id":4981},"_4-راجع-نفسك-بعد-6-شهور","4. راجع نفسك بعد 6 شهور",[18,4984,4985],{},"احتياجاتك اتغيرت او يمكن عايز تحكم اكتر ولا يمكن عايز راحة اكتر. غير لو نفسك في كده.",[453,4987,4988],{"type":455},[18,4989,4990],{},"لينكس مش جوازه ياعزيزي القارئ. لينكس اداة. والاداة بتتغير لما تبطل تخدمك.",[63,4992],{},[11,4994,2272],{"id":2272},[18,4996,4997],{},"بطل بحث. ابدا استخدم وجرب.",[18,4999,5000],{},"مفيش توزيعة مثالية. في توزيعه مناسبة ليك دلوقتي بس والطريقة الوحيدة اللي تلاقي التوزيعه دي هي انك تنزل حاجة وتستخدمها فعلا (وتكسرها)",[18,5002,5003],{},"هتختار توزيعة \"غلط\"؟ يمكن. هتفرق بعد 6 شهور؟ غالبا لا. المهارات بتفضل معاك، والخبرة هي اللي بتتراكم. التوزيعة بذاتها؟ مجرد وسيلة والله.",[18,5005,5006],{},"اختار حاجة، نزلها، استخدمها شهر. لو ضايقتك، غيرها. دي روح لينكس.",[18,5008,5009,5010,485],{},"ولو في الاخر لقيت نفسك على NixOS زيي، مش هلومك صراحه بالعكس غالبا هقولك انا قلتلك عزيزي القارئ\nبس دي ",[386,5011,5013],{"href":5012},"\u002Fblog\u002Fwhy_nix","قصة تانية",{"title":87,"searchDepth":174,"depth":174,"links":5015},[5016,5017,5018,5024,5030,5032,5033,5034,5040],{"id":13,"depth":174,"text":13},{"id":4344,"depth":174,"text":4345},{"id":4417,"depth":174,"text":4418,"children":5019},[5020,5021,5023],{"id":4431,"depth":248,"text":4432},{"id":4476,"depth":248,"text":5022},"المسار التاني: ارش ومشتقاته (عايز التحكم I use arch btw)",{"id":4530,"depth":248,"text":4531},{"id":4572,"depth":174,"text":4573,"children":5025},[5026,5027,5028,5029],{"id":4586,"depth":248,"text":4587},{"id":4605,"depth":248,"text":4606},{"id":4621,"depth":248,"text":4622},{"id":4677,"depth":248,"text":4678},{"id":4723,"depth":174,"text":5031},"خد هنا! الاسباب الغلط لاول اختيار",{"id":4759,"depth":174,"text":4760},{"id":4914,"depth":174,"text":4915},{"id":4953,"depth":174,"text":4954,"children":5035},[5036,5037,5038,5039],{"id":4960,"depth":248,"text":4961},{"id":4967,"depth":248,"text":4968},{"id":4974,"depth":248,"text":4975},{"id":4981,"depth":248,"text":4982},{"id":2272,"depth":174,"text":2272},"2026-01-11","ناقل من ويندوز؟ بتغير توزيعتك للمرة الالف؟ دا دليل لاختيار توزيعة لينكس مناسبة ليك انت، مش اللي ريديت قال انها \"الاحسن\"",{"tags":5044,"image":5049},[5045,5046,5047,5048],"لينكس","توزيعات","مبتدئين","إنتاجية","\u002Fchoosing-linux-distro.png","\u002Fblog\u002Far\u002Fchoosing-linux-distro",{"title":4315,"description":5042},"blog\u002Far\u002Fchoosing-linux-distro","sUKFGaCT_IYy0G4PRVxrKQ0ZiT_eqPnJ4csUhp-77GE",{"id":5055,"title":5056,"body":5057,"date":5041,"description":5744,"extension":2325,"locale":4302,"meta":5745,"navigation":680,"path":5751,"seo":5752,"stem":5753,"__hash__":5754},"blog\u002Fblog\u002Fchoosing-linux-distro.md","How to Actually Choose a Linux Distro (Without Losing Your Mind)",{"type":8,"value":5058,"toc":5717},[5059,5061,5066,5069,5072,5078,5081,5083,5087,5093,5140,5149,5151,5155,5164,5168,5174,5177,5200,5206,5208,5216,5221,5224,5245,5254,5262,5264,5268,5273,5276,5297,5302,5304,5308,5318,5322,5336,5340,5346,5352,5356,5402,5406,5409,5433,5438,5440,5448,5451,5474,5476,5480,5483,5606,5611,5613,5617,5620,5625,5628,5645,5650,5652,5656,5659,5663,5666,5670,5673,5677,5680,5684,5687,5692,5694,5696,5699,5702,5705,5708,5711],[11,5060,2350],{"id":2349},[15,5062,5063],{},[18,5064,5065],{},"What's the best Linux distro?",[18,5067,5068],{},"I've been saw this question between my friends so many times. And honestly? It's the wrong question and i hated the answers those peoples says.",[18,5070,5071],{},"Here's what i usually see: someone decides to try Linux or switch from his distro, opens Reddit, and falls into a infinity research loop. They read 47 opinions, watch 12 YouTube videos, and end up more confused than when they started. Sound familiar? Been there.",[18,5073,5074,5075],{},"this question should be replaced with ",[30,5076,5077],{},"\"what's the best distro for what I need right now.\"",[18,5079,5080],{},"so in this blog post i will not give a tier list and only talk about my personal opinion and the pros\u002Fcons i will share my linux experience on it. This is how I actually think about choosing a distro after years of trying different linux distroc, breaking things and finally settling down. Let's figure this out together.",[63,5082],{},[11,5084,5086],{"id":5085},"first-thing-is-what-are-you-actually-trying-to-do","First thing is What Are You Actually Trying to Do?",[18,5088,5089,5090],{},"Before looking at any distro, ask yourself one question ",[30,5091,5092],{},"what do I need this machine to do?",[2142,5094,5095,5107,5118,5129],{},[911,5096,5098,5101],{"icon":4356,"title":5097},"I just want work to be done",[18,5099,5100],{},"You are escaping Windows and want something that works. You dont care about \"learning Linux\" right now. You care about opening your browser, writing code, and not fighting your OS.",[18,5102,5103,5106],{},[30,5104,5105],{},"Priority here:"," Stability, familiar UI, minimal setup.",[911,5108,5110,5113],{"icon":4369,"title":5109},"Learn Linux Properly",[18,5111,5112],{},"You want to actually understand how Linux works or for educational purpose. The terminal isnt scary, its exciting. You're okay with reading wikis and figuring things out.",[18,5114,5115,5117],{},[30,5116,5105],{}," Good docs, forces you to understand, active community.",[911,5119,5121,5124],{"icon":4382,"title":5120},"Gaming",[18,5122,5123],{},"You want to play games and heared about \"the better performance\". Proton compatibility, driver support, and low friction matter more than philosophy.",[18,5125,5126,5128],{},[30,5127,5105],{}," NVIDIA\u002FAMD drivers, Steam integration, \"just works\" gaming.",[911,5130,5132,5135],{"icon":4394,"title":5131},"Development",[18,5133,5134],{},"Web dev, backend, DevOps. You need containers, package availability, and dev tools that don't fight you.",[18,5136,5137,5139],{},[30,5138,5105],{}," Package availability, Docker support, modern kernels.",[453,5141,5142],{"type":455},[18,5143,5144,5145,5148],{},"Pick based on what you need THIS DAYS. Not what you ",[4425,5146,5147],{},"might"," need in 6 months. You can always switch later.",[63,5150],{},[11,5152,5154],{"id":5153},"second-thing-the-three-paths-of-linux","Second thing: The Three Paths of Linux",[18,5156,5157,5158,5163],{},"After years of messing with different distros, Ive noticed they all fall into roughly three categories. Each has trade-offs. None is ",[30,5159,5160],{},[4425,5161,5162],{},"better"," than the others.",[77,5165,5167],{"id":5166},"path-a-ubuntu-based-i-just-want-it-to-work","Path A: Ubuntu-Based (I Just Want It To Work)",[18,5169,5170,5173],{},[30,5171,5172],{},"Distros:"," Ubuntu, Linux Mint, Pop!_OS, Zorin",[18,5175,5176],{},"This is where most people should start. Seriously. These distros are built for people who want Linux without the pain.",[911,5178,5180,5194],{"icon":4444,"title":5179},"What You Get",[47,5181,5182,5185,5188,5191],{},[50,5183,5184],{},"Massive community (every problem has a solution on Stack Overflow)",[50,5186,5187],{},"Hardware just works most of the time",[50,5189,5190],{},"Familiar desktop experience",[50,5192,5193],{},"LTS releases that don't break randomly",[18,5195,5196,5199],{},[30,5197,5198],{},"Trade-offs:"," Not bleeding edge. Some bloat. Snap packages (if you're on Ubuntu proper).",[18,5201,5202,5205],{},[30,5203,5204],{},"My take:"," Linux Mint is probably the smoothest Windows-to-Linux transition but for performance naaaah, kubuntu\u002Fxubuntu is much better. Pop!_OS if you have an NVIDIA GPU. Both are solid, boring choices. Boring is good here XD.",[63,5207],{},[77,5209,5211,5212,5215],{"id":5210},"path-b-arch-based-i-want-control-i-use-arch-btw","Path B: Arch-Based (",[4479,5213,5214],{},"I Want Control"," I use Arch BTW)",[18,5217,5218,5220],{},[30,5219,5172],{}," Arch Linux, EndeavourOS, CachyOS, Manjaro",[18,5222,5223],{},"The \"I use Arch btw\" path. These distros give you the latest packages and complete control over your system. They also expect you to read documentation and fix things yourself.",[911,5225,5226,5240],{"icon":4493,"title":5179},[47,5227,5228,5231,5234,5237],{},[50,5229,5230],{},"Rolling release (always up-to-date)",[50,5232,5233],{},"The legendary Arch Wiki (best Linux docs, period)",[50,5235,5236],{},"AUR (user repository with basically everything)",[50,5238,5239],{},"You understand your system because you built it",[18,5241,5242,5244],{},[30,5243,5198],{}," Things break sometimes. Updates can cause issues. You need to actually pay attention.",[18,5246,5247,5249,5250,5253],{},[30,5248,5204],{}," Don't start here if you're brand new. But if you want to actually ",[4425,5251,5252],{},"learn"," Linux? EndeavourOS gives you Arch with a friendly installer. CachyOS gives same stuff i mentioned in EndeavourOS and gives you the best usage and gaming prformance. Manjaro is more \"batteries included\" but sometimes lags behind on updates.",[453,5255,5256],{"type":825},[18,5257,5258,5261],{},[30,5259,5260],{},"Please put this on mind:"," Arch isn't \"harder\" than Ubuntu. Its different. It assumes you want to understand things. If that sounds exhausting, Path A is fine. If that sounds exciting, welcome.",[63,5263],{},[77,5265,5267],{"id":5266},"path-c-fedora-modern-mainstream","Path C: Fedora \u002F Modern Mainstream",[18,5269,5270,5272],{},[30,5271,5172],{}," Fedora Workstation, openSUSE Tumbleweed",[18,5274,5275],{},"The middle path. Modern packages without the \"you're on your own\" energy of Arch. Corporate backing (Red Hat for Fedora) means good defaults and stability.",[911,5277,5278,5292],{"icon":4542,"title":5179},[47,5279,5280,5283,5286,5289],{},[50,5281,5282],{},"Latest stable packages (not bleeding edge, but close)",[50,5284,5285],{},"Excellent developer experience",[50,5287,5288],{},"Good GNOME\u002FKDE integration",[50,5290,5291],{},"SELinux by default (security-focused)",[18,5293,5294,5296],{},[30,5295,5198],{}," Smaller community than Ubuntu. 6-month release cycle (Fedora). Some packages need extra repos.",[18,5298,5299,5301],{},[30,5300,5204],{}," Fedora is what I recommend to developers who don't want to think about their OS. It's modern, it's clean, it gets out of your way. Tumbleweed is basically \"reliable rolling release\" if that makes sense. (btw linus trovalds uses Fedora XD)",[63,5303],{},[11,5305,5307],{"id":5306},"third-thing-questions-to-actually-ask-yourself","Third thing: Questions to Actually Ask Yourself",[453,5309,5310],{"type":825},[18,5311,5312,5317],{},[30,5313,5314],{},[4425,5315,5316],{},"PLEASE"," Forget \"what is the best distro.\" Answer these instead:",[77,5319,5321],{"id":5320},"_1-how-much-time-do-you-have","1. How Much Time Do You Have?",[2142,5323,5324,5330],{},[911,5325,5327],{"icon":4592,"title":5326},"Lots of Free Time",[18,5328,5329],{},"Go explore. Try Arch or Gentoo. Break things. Learn from it. This is how you actually will understand Linux and thats how i learned.",[911,5331,5333],{"icon":2146,"title":5332},"Need to Work NOW",[18,5334,5335],{},"Ubuntu LTS, Fedora, or Zorin. Install it. Configure your tools. Get back to work. The OS should be invisible.",[77,5337,5339],{"id":5338},"_2-are-you-comfortable-with-breaking-things","2. Are You Comfortable With Breaking Things?",[18,5341,5342,5345],{},[30,5343,5344],{},"\"I'll figure it out\""," → Rolling releases are fine. Arch, Gentoo, Fedora Rawhide.",[18,5347,5348,5351],{},[30,5349,5350],{},"\"Please no, I have deadlines\""," → LTS releases. Ubuntu LTS, Fedora Workstation, Debian Stable. These are boring and reliable. Thats the point.",[77,5353,5355],{"id":5354},"_3-what-hardware-do-you-have","3. What Hardware Do You Have?",[4624,5357,5358,5368],{},[4627,5359,5360],{},[4630,5361,5362,5365],{},[4633,5363,5364],{},"Hardware",[4633,5366,5367],{},"Recommendation",[4640,5369,5370,5378,5386,5394],{},[4630,5371,5372,5375],{},[4645,5373,5374],{},"NVIDIA GPU",[4645,5376,5377],{},"Pop!_OS, CachyOS or Fedora (best driver integration)",[4630,5379,5380,5383],{},[4645,5381,5382],{},"AMD GPU",[4645,5384,5385],{},"Literally anything (drivers are in-kernel)",[4630,5387,5388,5391],{},[4645,5389,5390],{},"Old\u002Fweak laptop",[4645,5392,5393],{},"Xubuntu, Linux Lite, or anything with XFCE\u002FLXQt",[4630,5395,5396,5399],{},[4645,5397,5398],{},"Brand new hardware",[4645,5400,5401],{},"Newer kernels = CachyOS, Fedora, Arch",[77,5403,5405],{"id":5404},"_4-do-you-have-software-requirements","4. Do You Have Software Requirements?",[18,5407,5408],{},"I will be honest here. Some software just doesn't work on Linux:",[47,5410,5411,5416,5421,5427],{},[50,5412,5413,5415],{},[30,5414,4689],{}," → No native support. Alternatives exist (GIMP, Inkscape) but they're different.",[50,5417,5418,5420],{},[30,5419,4696],{}," → Use the web version or LibreOffice. Some people care, some don't.",[50,5422,5423,5426],{},[30,5424,5425],{},"Professional creative software"," → Check compatibility BEFORE switching.",[50,5428,5429,5432],{},[30,5430,5431],{},"Dev tools"," → You're fine. Almost everything works.",[453,5434,5435],{"type":825},[18,5436,5437],{},"Check your must-have software BEFORE committing. Install the distro in a VM first. I learned this the hard way.",[63,5439],{},[11,5441,5443,5444,5447],{"id":5442},"watchout-the-wrong-reasons-to-pick-a-distro","WatchOut! The ",[4425,5445,5446],{},"Wrong"," Reasons to Pick a Distro",[18,5449,5450],{},"Let me save you some time. These are bad reasons:",[911,5452,5454],{"icon":2241,"title":5453},"Reasons That Don't Matter",[47,5455,5456,5459,5462,5465,5468,5471],{},[50,5457,5458],{},"\"Reddit said it's the best\" — Reddit says a lot of things.",[50,5460,5461],{},"\"It looks cool in screenshots\" — You can rice ANY distro. The desktop environment matters, not the distro.",[50,5463,5464],{},"\"Real Linux users use Arch\" — Gatekeeping nonsense. Use what works for you.",[50,5466,5467],{},"\"I saw a youtube video says X distro is the best.\" — we are not talking about Cars here dude, each distro is the best for specific usage.",[50,5469,5470],{},"\"Ubuntu is for noobs\" — Ubuntu runs half the internet's servers. Its for getting work done.",[50,5472,5473],{},"\"I need to be unique\" — Your OS is a tool, not a personality trait. (but still i use Arch btw XD)",[63,5475],{},[11,5477,5479],{"id":5478},"my-recommendations","My Recommendations",[18,5481,5482],{},"Okay you want actual recommendations? Fine. Here's what I'd tell a friend:",[4624,5484,5485,5498],{},[4627,5486,5487],{},[4630,5488,5489,5492,5495],{},[4633,5490,5491],{},"Your Situation",[4633,5493,5494],{},"My Pick",[4633,5496,5497],{},"Why",[4640,5499,5500,5512,5526,5538,5550,5564,5578,5592],{},[4630,5501,5502,5505,5509],{},[4645,5503,5504],{},"First time from Windows",[4645,5506,5507],{},[30,5508,4790],{},[4645,5510,5511],{},"Familiar, stable, huge community",[4630,5513,5514,5517,5523],{},[4645,5515,5516],{},"Gaming focused",[4645,5518,5519,3070,5521],{},[30,5520,4803],{},[30,5522,4807],{},[4645,5524,5525],{},"Best driver support, gaming-optimized",[4630,5527,5528,5531,5535],{},[4645,5529,5530],{},"Developer (web\u002Fbackend, etc.)",[4645,5532,5533],{},[30,5534,4826],{},[4645,5536,5537],{},"Modern, clean, stays out of your way",[4630,5539,5540,5543,5547],{},[4645,5541,5542],{},"Want reproducibility + full control",[4645,5544,5545],{},[30,5546,4839],{},[4645,5548,5549],{},"Different beast, but worth it if you value config-as-code",[4630,5551,5552,5555,5561],{},[4645,5553,5554],{},"Want to learn Linux",[4645,5556,5557,3070,5559],{},[30,5558,4852],{},[30,5560,4803],{},[4645,5562,5563],{},"Arch made accessible, great learning experience",[4630,5565,5566,5569,5575],{},[4645,5567,5568],{},"Already comfortable, want control",[4645,5570,5571,3070,5573],{},[30,5572,4867],{},[30,5574,4839],{},[4645,5576,5577],{},"Full control, your way",[4630,5579,5580,5583,5589],{},[4645,5581,5582],{},"Server \u002F production",[4645,5584,5585,3070,5587],{},[30,5586,4882],{},[30,5588,4885],{},[4645,5590,5591],{},"Battle-tested, boring, reliable",[4630,5593,5594,5597,5603],{},[4645,5595,5596],{},"Old hardware",[4645,5598,5599,3070,5601],{},[30,5600,4898],{},[30,5602,4901],{},[4645,5604,5605],{},"Lightweight, still functional",[453,5607,5608],{"type":507},[18,5609,5610],{},"Notice how there's no \"one best distro\"? Basically different needs, different tools. That's the point.",[63,5612],{},[11,5614,5616],{"id":5615},"the-actual-secret","The Actual Secret",[18,5618,5619],{},"Here is what nobody tells you:",[18,5621,5622],{},[30,5623,5624],{},"It doesn't matter that much.",[18,5626,5627],{},"Seriously. All mainstream distros in 2026 are good. They all run the same Linux kernel. They all have similar package sets. The differences are mostly:",[431,5629,5630,5633,5636,5639,5642],{},[50,5631,5632],{},"Package manager (apt vs dnf vs pacman)",[50,5634,5635],{},"Kernel compilation time configurations",[50,5637,5638],{},"Release model (fixed vs rolling)",[50,5640,5641],{},"Default desktop environment (which you can change anyway)",[50,5643,5644],{},"Community size and culture",[453,5646,5647],{"type":455},[18,5648,5649],{},"The best distro is the one you stop thinking about. The one that works for YOUR workflow and gets out of your way.",[63,5651],{},[11,5653,5655],{"id":5654},"the-just-try-it-approach","The \"Just Try It\" Approach",[18,5657,5658],{},"If you're still stuck, here is my actual advice:",[77,5660,5662],{"id":5661},"_1-install-zorinos-or-fedora-in-a-vm","1. Install ZorinOS or Fedora in a VM",[18,5664,5665],{},"Takes 30 minutes (if your network speed is a turtle like mine). No commitment. Get a feel for it.",[77,5667,5669],{"id":5668},"_2-use-it-for-actual-work","2. Use it for actual work",[18,5671,5672],{},"Don't just poke around. Actually try your workflow. Your editor. Your browser. Your tools.",[77,5674,5676],{"id":5675},"_3-if-it-works-install-it-for-real","3. If it works, install it for real",[18,5678,5679],{},"If it doesn't? Try another one. That's allowed.",[77,5681,5683],{"id":5682},"_4-revisit-in-6-months","4. Revisit in 6 months",[18,5685,5686],{},"Your needs changed. Maybe you want more control now. Maybe you want less hassle. Switch if you want.",[453,5688,5689],{"type":455},[18,5690,5691],{},"Linux isn't a marriage. It's a tool. Tools can be replaced when they stop serving you.",[63,5693],{},[11,5695,4252],{"id":4251},[18,5697,5698],{},"Stop researching. Start using.",[18,5700,5701],{},"The perfect distro doesn't exist. The right distro for you right now does. And the only way to find it is to actually install something and use it (and broke it).",[18,5703,5704],{},"Will you pick the \"wrong\" distro? Maybe. Will it matter in 6 months? Probably not. The skills transfer. The experience matters. The specific distro? It's just the vehicle.",[18,5706,5707],{},"Pick something. Install it. Use it for a month. If it annoys you, switch. That's the Linux way.",[18,5709,5710],{},"And hey, if you eventually end up on NixOS like me, I won't judge. Actually, I'll probably say \"I told you so.\"",[18,5712,5713,5714,485],{},"But that's ",[386,5715,5716],{"href":5012},"a different blog post",{"title":87,"searchDepth":174,"depth":174,"links":5718},[5719,5720,5721,5727,5733,5735,5736,5737,5743],{"id":2349,"depth":174,"text":2350},{"id":5085,"depth":174,"text":5086},{"id":5153,"depth":174,"text":5154,"children":5722},[5723,5724,5726],{"id":5166,"depth":248,"text":5167},{"id":5210,"depth":248,"text":5725},"Path B: Arch-Based (I Want Control I use Arch BTW)",{"id":5266,"depth":248,"text":5267},{"id":5306,"depth":174,"text":5307,"children":5728},[5729,5730,5731,5732],{"id":5320,"depth":248,"text":5321},{"id":5338,"depth":248,"text":5339},{"id":5354,"depth":248,"text":5355},{"id":5404,"depth":248,"text":5405},{"id":5442,"depth":174,"text":5734},"WatchOut! The Wrong Reasons to Pick a Distro",{"id":5478,"depth":174,"text":5479},{"id":5615,"depth":174,"text":5616},{"id":5654,"depth":174,"text":5655,"children":5738},[5739,5740,5741,5742],{"id":5661,"depth":248,"text":5662},{"id":5668,"depth":248,"text":5669},{"id":5675,"depth":248,"text":5676},{"id":5682,"depth":248,"text":5683},{"id":4251,"depth":174,"text":4252},"Switching from Windows? Distro-hopping for the 10th time? Here is a no-BS guide to picking a Linux distro that actually fits your needs, not what Reddit told you is \"the best.\"",{"tags":5746,"image":5049},[5747,5748,5749,5750],"linux","distros","beginners","productivity","\u002Fblog\u002Fchoosing-linux-distro",{"title":5056,"description":5744},"blog\u002Fchoosing-linux-distro","jDfaTGgNCKRHGvQUsPwzyv0OB-WPOUpbb-f066WQ8xk",{"id":5756,"title":5757,"body":5758,"date":9332,"description":9333,"extension":2325,"locale":2326,"meta":9334,"navigation":680,"path":9340,"seo":9341,"stem":9342,"__hash__":9343},"blog\u002Fblog\u002Far\u002Fwhy_nix.md","ليه NixOS و Nix؟ هل ده مجرد hype؟",{"type":8,"value":5759,"toc":9270},[5760,5762,5767,5774,5781,5784,5790,5793,5796,5798,5802,5812,5816,5827,5842,5857,5864,5869,5876,5882,5919,5924,5933,5937,5947,5950,5993,5996,6074,6085,6089,6097,6108,6117,6121,6124,6141,6151,6218,6221,6287,6290,6292,6296,6302,6306,6313,6318,6333,6346,6423,6429,6433,6444,6450,6463,6639,6657,6661,6668,6671,6681,6857,6863,6865,6869,6873,6888,6894,6899,6906,6915,6921,6927,6966,6973,6977,6984,7041,7048,7119,7128,7137,7141,7144,7164,7167,7173,7176,7194,7200,7202,7206,7210,7217,7222,7225,7228,7245,7250,7253,7255,7266,7274,7396,7406,7410,7491,7501,7505,7510,7521,7526,7537,7541,7552,7556,7567,7571,7585,7590,7601,7606,7762,7767,7769,7773,7777,7788,7805,7809,7812,7872,7879,7883,7889,8046,8052,8056,8068,8083,8087,8094,8099,8101,8105,8109,8115,8121,8300,8306,8310,8315,8320,8338,8345,8349,8354,8359,8545,8552,8554,8558,8562,8573,8580,8588,8674,8686,8691,8695,8702,8713,8718,8720,8724,8727,8731,8756,8760,8763,8767,8770,8773,8787,8791,8796,8822,8826,8829,8831,8835,8839,8846,8852,8892,8895,8907,8911,8960,8964,9096,9099,9127,9133,9137,9171,9175,9182,9184,9188,9193,9197,9200,9214,9231,9235,9242,9246,9253,9256,9261,9264,9267],[11,5761,13],{"id":13},[15,5763,5764],{},[18,5765,5766],{},"شغّالة على الجهاز بتاعي.",[18,5768,5769,5770,5773],{},"سمعت الجملة دي كام مرة؟ أو الأسوأ، قولتها إنت ",[30,5771,5772],{},"كام مرة","؟",[18,5775,5776,5777,5780],{},"تصوّر كده: إنت جوه مشروع من شهرين. كل حاجة شغّالة زي الفل على اللابتوب بتاعك. بتبعت للإنتاج و",[30,5778,5779],{},"الكارثة بتقع",". نسخة مكتبة غلط. متغيّر بيئة ناقص. أو زميلك نزّل الحزم بطريقة مختلفة عنك.",[18,5782,5783],{},"الحل المعتاد؟ Docker containers، وبيئات افتراضية، وتوثيق محدش بيقراه، وساعات من التصليح. مرقت بده مرات كتير أوي.",[18,5785,5786,5787,485],{},"بس في نظام بيحل ده من جذوره: ",[30,5788,5789],{},"NixOS و Nix",[18,5791,5792],{},"السؤال: هل ده ترند لينكس تاني، ولا فيه حاجة ثورية حقيقية هنا؟",[18,5794,5795],{},"يلا نعرف.",[63,5797],{},[11,5799,5801],{"id":5800},"إيه-هو-nix-و-nixos","إيه هو Nix و NixOS؟",[18,5803,5804,5805,5808,5809,5811],{},"في حاجتين هنا: ",[30,5806,5807],{},"Nix"," (الباكيدج مانيجر) و ",[30,5810,4839],{}," (نظام التشغيل). تقدر تستخدم واحدة من غير التانية.",[77,5813,5815],{"id":5814},"nix-الباكيدج-مانيجر","Nix: الباكيدج مانيجر",[18,5817,5818,5819,5822,5823,5826],{},"Nix بيبني الحزم في ",[30,5820,5821],{},"عزل تام"," عن بعضها. لو حزمة شغّالة على جهاز، ",[30,5824,5825],{},"هتشتغل"," على جهاز تاني. من غير استثناءات.",[18,5828,5829,5830,5833,5834,5837,5838,5841],{},"بدل ما يكرمش الحزم في ",[89,5831,5832],{},"\u002Fusr\u002Fbin"," زي أي باكيدج مانيجر تاني، Nix بيخزّن كل حاجة في ",[89,5835,5836],{},"\u002Fnix\u002Fstore"," مع ",[30,5839,5840],{},"hash تشفيري فريد",":",[82,5843,5845],{"className":84,"code":5844,"language":86,"meta":87,"style":87},"\u002Fnix\u002Fstore\u002Fnawl092prjblbhvv16kxxbk6j9gkgcqm-git-2.47.1\n\u002Fnix\u002Fstore\u002Fx8dhcf2kpl5h4lm9ci3k2y9vn8qlx9cd-nodejs-24.1.0\n",[89,5846,5847,5852],{"__ignoreMap":87},[92,5848,5849],{"class":94,"line":95},[92,5850,5851],{"class":98},"\u002Fnix\u002Fstore\u002Fnawl092prjblbhvv16kxxbk6j9gkgcqm-git-2.47.1\n",[92,5853,5854],{"class":94,"line":174},[92,5855,5856],{"class":98},"\u002Fnix\u002Fstore\u002Fx8dhcf2kpl5h4lm9ci3k2y9vn8qlx9cd-nodejs-24.1.0\n",[18,5858,5859,5860,5863],{},"النص العشوائي ده؟ هو ",[30,5861,5862],{},"هاش لكل حاجة"," اتعمل بيها بناء الحزمة — ملفات المصدر، الاعتماديات، أعلام الكومبايلر، كلها. غيّر أي حاجة، تاخد hash مختلف، يبقى باكيدج مختلف. عارف، دي بتحس نيردي بس صبر معايا.",[18,5865,5866],{},[30,5867,5868],{},"معادلة Nix",[18,5870,5871,5872,5875],{},"فكّر فيها كـ",[30,5873,5874],{},"عملية بناء حتمية"," إن مدخلات محددة بتولّد دايمًا نفس المخرج الثابت المنيع للتغيير:",[82,5877,5880],{"className":5878,"code":5879,"language":2095},[2093],"SOURCE CODE + DEPENDENCIES + BUILD SCRIPT\n              ↓\n        NIX HASH FUNCTION\n              ↓\nUNIQUE STORE PATH: \u002Fnix\u002Fstore\u002Fx8dhkfewprojgihtrmvcf2...-nodejs-24.1.0\n",[89,5881,5879],{"__ignoreMap":87},[47,5883,5884,5904],{},[50,5885,5886,5889,5890,5893,5894,5897,5898,5889,5901],{},[30,5887,5888],{},"Input A:"," ",[89,5891,5892],{},"git-source"," + ",[89,5895,5896],{},"openssl-3.0"," → ",[30,5899,5900],{},"Result:",[89,5902,5903],{},"..5yn92-git",[50,5905,5906,5889,5909,5893,5911,5897,5914,5889,5916],{},[30,5907,5908],{},"Input B:",[89,5910,5892],{},[89,5912,5913],{},"openssl-3.1",[30,5915,5900],{},[89,5917,5918],{},"..fx23f-git",[18,5920,5921],{},[4425,5922,5923],{},"حتى رقعة أمان صغيرة في اعتماد (زي الانتقال من OpenSSL 3.0 لـ3.1) بتعمل مسار جديد تمامًا ومعزول. نسختك القديمة بتفضل كما هي من غير لمس، والجديدة مبتعدّلش عليها.",[15,5925,5926],{},[18,5927,5928,5929,5932],{},"يعني إيه — Node 20 و Node 24 تقدر تتعايشوا. Go 1.24 و 1.25 على نفس النظام. Python 3.9 و 3.11 في نفس الوقت. ",[30,5930,5931],{},"مفيش تعارُض. أبدًا."," كل مشروع بياخد بالظبط اللي محتاجه.",[77,5934,5936],{"id":5935},"nixos-نظام-التشغيل","NixOS: نظام التشغيل",[18,5938,5939,5940,5943,5944,485],{},"NixOS بيوسّع المفهوم ده لنظامك ",[30,5941,5942],{},"كاملاً",". كل حاجة — الكيرنل، الخدمات، الحزم، الإعدادات — بتعيش في ",[30,5945,5946],{},"ملفات declarative",[18,5948,5949],{},"الطريقة التقليدية (أمرّية):",[82,5951,5953],{"className":84,"code":5952,"language":86,"meta":87,"style":87},"sudo apt install nginx\nsudo systemctl enable nginx\n# عدّل الإعدادات يدويًا\n# ادعي إنك وثّقت ده\n# صلي محدش يبوظ\n",[89,5954,5955,5966,5978,5983,5988],{"__ignoreMap":87},[92,5956,5957,5959,5961,5963],{"class":94,"line":95},[92,5958,99],{"class":98},[92,5960,168],{"class":102},[92,5962,129],{"class":102},[92,5964,5965],{"class":102}," nginx\n",[92,5967,5968,5970,5973,5976],{"class":94,"line":174},[92,5969,99],{"class":98},[92,5971,5972],{"class":102}," systemctl",[92,5974,5975],{"class":102}," enable",[92,5977,5965],{"class":102},[92,5979,5980],{"class":94,"line":248},[92,5981,5982],{"class":327},"# عدّل الإعدادات يدويًا\n",[92,5984,5985],{"class":94,"line":262},[92,5986,5987],{"class":327},"# ادعي إنك وثّقت ده\n",[92,5989,5990],{"class":94,"line":282},[92,5991,5992],{"class":327},"# صلي محدش يبوظ\n",[18,5994,5995],{},"طريقة NixOS (declarative):",[82,5997,6001],{"className":5998,"code":5999,"language":6000,"meta":87,"style":87},"language-nix shiki shiki-themes github-light github-dark","{\n  services.nginx.enable = true;\n  services.nginx.virtualHosts.\"example.com\" = {\n    root = \"\u002Fvar\u002Fwww\";\n  };\n}\n","nix",[89,6002,6003,6007,6031,6053,6065,6070],{"__ignoreMap":87},[92,6004,6005],{"class":94,"line":95},[92,6006,1756],{"class":199},[92,6008,6009,6012,6014,6017,6019,6022,6025,6028],{"class":94,"line":174},[92,6010,6011],{"class":98},"  services",[92,6013,485],{"class":199},[92,6015,6016],{"class":98},"nginx",[92,6018,485],{"class":199},[92,6020,6021],{"class":98},"enable",[92,6023,6024],{"class":203}," =",[92,6026,6027],{"class":106}," true",[92,6029,6030],{"class":199},";\n",[92,6032,6033,6035,6037,6039,6041,6044,6046,6049,6051],{"class":94,"line":248},[92,6034,6011],{"class":98},[92,6036,485],{"class":199},[92,6038,6016],{"class":98},[92,6040,485],{"class":199},[92,6042,6043],{"class":98},"virtualHosts",[92,6045,485],{"class":199},[92,6047,6048],{"class":102},"\"example.com\"",[92,6050,6024],{"class":203},[92,6052,972],{"class":199},[92,6054,6055,6058,6060,6063],{"class":94,"line":262},[92,6056,6057],{"class":98},"    root",[92,6059,6024],{"class":203},[92,6061,6062],{"class":102}," \"\u002Fvar\u002Fwww\"",[92,6064,6030],{"class":199},[92,6066,6067],{"class":94,"line":282},[92,6068,6069],{"class":199},"  };\n",[92,6071,6072],{"class":94,"line":713},[92,6073,734],{"class":199},[18,6075,6076,6077,6080,6081,6084],{},"نفّذ ",[89,6078,6079],{},"sudo nixos-rebuild switch"," ونظامك ",[30,6082,6083],{},"بيبقى"," الوصف ده. ده كل اللي فيه.",[77,6086,6088],{"id":6087},"عدم-التغيير-المبدأ-الأساسي","عدم التغيير: المبدأ الأساسي",[18,6090,809,6091,5889,6093,6096],{},[89,6092,5836],{},[30,6094,6095],{},"للقراءة فقط ومنيع للتغيير",". مفيش حاجة بتتمسح أو بتتعدّل — Nix بيصنع نسخ جديدة و symlinks ليها.",[18,6098,6099,6100,6103,6104,6107],{},"علشان كده التراجعات ",[30,6101,6102],{},"فورية",". كل حالة نظام مرقت بيها لسه موجودة. حاجة اتعطّلت؟ أعد التشغيل، اختار الجيل السابق، هترجع شغال في ",[30,6105,6106],{},"30 ثانية",". أنا نجّيت إعدادي بنفسي بكده مرات أكتر مما أحب أعترف بيها.",[15,6109,6110],{},[18,6111,6112,6113,6116],{},"ده ",[30,6114,6115],{},"Git لنظام التشغيل بتاعك كله",". كل تغيير متتعقّب. كل حالة قابلة للاسترجاع. سفر عبر الزمن لنظام التشغيل بتاعك.",[77,6118,6120],{"id":6119},"جمع-القمامة-التنظيف-الذكي","جمع القمامة: التنظيف الذكي",[18,6122,6123],{},"غالبًا بتفكر: \"مش الديسك بتاعي هيتملى؟\"",[18,6125,6126,6129,6130,6133,6134,6137,6138,485],{},[30,6127,6128],{},"التوزيعات التقليدية:"," لما تعمل ",[89,6131,6132],{},"apt remove",", الحزم ",[30,6135,6136],{},"بتختفي للأبد",". عايزها تاني؟ أعد التثبيت. غلطت؟ يلا سلام. اعتماديات يتيمة؟ اقطع وراها بنفسك بـ ",[89,6139,6140],{},"apt autoremove",[18,6142,6143,6146,6147,6150],{},[30,6144,6145],{},"ذكاء Nix:"," مفيش حاجة بتتمسح إلا لما ",[30,6148,6149],{},"تعمل garbage collection صراحةً",". وحتى وقتها، بيمسح بس اللي مش قابل للوصول فعلًا — اللي مفيش جيل أو مشروع معتمد عليه.",[82,6152,6154],{"className":84,"code":6153,"language":86,"meta":87,"style":87},"# معاينة اللي هيتتمسح\nnix-collect-garbage --dry-run\n\n# امسح الحزم غير القابلة للوصول\nnix-collect-garbage\n\n# امسح الأجيال القديمة\nnix-collect-garbage -d\n\n# امسح الأجيال الأقدم من 30 يوم\nnix-collect-garbage --delete-older-than 30d\n",[89,6155,6156,6161,6169,6173,6178,6183,6187,6192,6199,6203,6208],{"__ignoreMap":87},[92,6157,6158],{"class":94,"line":95},[92,6159,6160],{"class":327},"# معاينة اللي هيتتمسح\n",[92,6162,6163,6166],{"class":94,"line":174},[92,6164,6165],{"class":98},"nix-collect-garbage",[92,6167,6168],{"class":106}," --dry-run\n",[92,6170,6171],{"class":94,"line":248},[92,6172,681],{"emptyLinePlaceholder":680},[92,6174,6175],{"class":94,"line":262},[92,6176,6177],{"class":327},"# امسح الحزم غير القابلة للوصول\n",[92,6179,6180],{"class":94,"line":282},[92,6181,6182],{"class":98},"nix-collect-garbage\n",[92,6184,6185],{"class":94,"line":713},[92,6186,681],{"emptyLinePlaceholder":680},[92,6188,6189],{"class":94,"line":731},[92,6190,6191],{"class":327},"# امسح الأجيال القديمة\n",[92,6193,6194,6196],{"class":94,"line":1960},[92,6195,6165],{"class":98},[92,6197,6198],{"class":106}," -d\n",[92,6200,6201],{"class":94,"line":1999},[92,6202,681],{"emptyLinePlaceholder":680},[92,6204,6205],{"class":94,"line":2015},[92,6206,6207],{"class":327},"# امسح الأجيال الأقدم من 30 يوم\n",[92,6209,6210,6212,6215],{"class":94,"line":2020},[92,6211,6165],{"class":98},[92,6213,6214],{"class":106}," --delete-older-than",[92,6216,6217],{"class":102}," 30d\n",[18,6219,6220],{},"أتمتتها في NixOS:",[82,6222,6224],{"className":5998,"code":6223,"language":6000,"meta":87,"style":87},"{\n  nix.gc = {\n    automatic = true;\n    dates = \"weekly\";\n    options = \"--delete-older-than 30d\";\n  };\n}\n",[89,6225,6226,6230,6244,6255,6267,6279,6283],{"__ignoreMap":87},[92,6227,6228],{"class":94,"line":95},[92,6229,1756],{"class":199},[92,6231,6232,6235,6237,6240,6242],{"class":94,"line":174},[92,6233,6234],{"class":98},"  nix",[92,6236,485],{"class":199},[92,6238,6239],{"class":98},"gc",[92,6241,6024],{"class":203},[92,6243,972],{"class":199},[92,6245,6246,6249,6251,6253],{"class":94,"line":248},[92,6247,6248],{"class":98},"    automatic",[92,6250,6024],{"class":203},[92,6252,6027],{"class":106},[92,6254,6030],{"class":199},[92,6256,6257,6260,6262,6265],{"class":94,"line":262},[92,6258,6259],{"class":98},"    dates",[92,6261,6024],{"class":203},[92,6263,6264],{"class":102}," \"weekly\"",[92,6266,6030],{"class":199},[92,6268,6269,6272,6274,6277],{"class":94,"line":282},[92,6270,6271],{"class":98},"    options",[92,6273,6024],{"class":203},[92,6275,6276],{"class":102}," \"--delete-older-than 30d\"",[92,6278,6030],{"class":199},[92,6280,6281],{"class":94,"line":713},[92,6282,6069],{"class":199},[92,6284,6285],{"class":94,"line":731},[92,6286,734],{"class":199},[18,6288,6289],{},"آخر شهر من الأجيال بتاعتك بيضل آمن وكل حاجة أقدم بتتتنضف تلقائيًا.",[63,6291],{},[11,6293,6295],{"id":6294},"المشاكل-الحقيقية-اللي-nix-بيحلها","المشاكل الحقيقية اللي Nix بيحلها",[18,6297,6298,6299,485],{},"إدارة بيئات التطوير مؤلمة. يلا نتكلم عن المشاكل الفعلية اللي بتقابلك ",[30,6300,6301],{},"يوميًا",[77,6303,6305],{"id":6304},"كابوس-التلاعب-بالإصدارات","كابوس التلاعب بالإصدارات",[18,6307,6308,6309,6312],{},"إنت بتلعب بثلاثة مشاريع Node.js. واحد محتاج Node 20، والتاني محتاج Node 22، والمايكروسرفيس الجديد محتاج Node 24. معاك ",[89,6310,6311],{},"nvm"," بس بتفضل تنسى إنك تبادل النسخ وتضيّع وقت في التصليح. (اسألني إزاي عارف.)",[18,6314,6315],{},[30,6316,6317],{},"الفوضى المعتادة:",[47,6319,6320,6327,6330],{},[50,6321,6322,6323,6326],{},"افتح التيرمنال → تنسى ",[89,6324,6325],{},"nvm use"," → البناء يفشل",[50,6328,6329],{},"ثبت باكيدج عالمية لمشروع أ → بتكسر مشروع ب",[50,6331,6332],{},"تقضي ظهرية الجمعة بتصليح \"بس كان شغال إمبارح\"",[18,6334,6335,6338,6339,6341,6342,6345],{},[30,6336,6337],{},"مع Nix:"," بس اعمل ",[89,6340,646],{}," في ديركتوري المشروع. ",[30,6343,6344],{},"ده كل حاجة",". Nix بيشوف الإعداد ويحمّل بالظبط البيئة المطلوبة. تلقائيًا.",[82,6347,6349],{"className":5998,"code":6348,"language":6000,"meta":87,"style":87},"# مشروع أ - Node 20\n{ pkgs ? import \u003Cnixpkgs> {} }:\npkgs.mkShell {\n  buildInputs = with pkgs; [\n    nodejs_20\n    python311  # للموديولز native\n  ];\n}\n",[89,6350,6351,6356,6373,6385,6401,6406,6414,6419],{"__ignoreMap":87},[92,6352,6353],{"class":94,"line":95},[92,6354,6355],{"class":327},"# مشروع أ - Node 20\n",[92,6357,6358,6361,6364,6367,6370],{"class":94,"line":174},[92,6359,6360],{"class":199},"{ pkgs ",[92,6362,6363],{"class":203},"?",[92,6365,6366],{"class":106}," import",[92,6368,6369],{"class":102}," \u003Cnixpkgs>",[92,6371,6372],{"class":199}," {} }:\n",[92,6374,6375,6378,6380,6383],{"class":94,"line":248},[92,6376,6377],{"class":952},"pkgs",[92,6379,485],{"class":203},[92,6381,6382],{"class":952},"mkShell",[92,6384,972],{"class":199},[92,6386,6387,6390,6392,6395,6398],{"class":94,"line":262},[92,6388,6389],{"class":98},"  buildInputs",[92,6391,6024],{"class":203},[92,6393,6394],{"class":203}," with",[92,6396,6397],{"class":952}," pkgs",[92,6399,6400],{"class":199},"; [\n",[92,6402,6403],{"class":94,"line":282},[92,6404,6405],{"class":952},"    nodejs_20\n",[92,6407,6408,6411],{"class":94,"line":713},[92,6409,6410],{"class":952},"    python311",[92,6412,6413],{"class":327},"  # للموديولز native\n",[92,6415,6416],{"class":94,"line":731},[92,6417,6418],{"class":199},"  ];\n",[92,6420,6421],{"class":94,"line":1960},[92,6422,734],{"class":199},[18,6424,6425,6426,485],{},"غيّرت المشروع؟ نسخة Node مختلفة بتتحمّل تلقائيًا. ",[30,6427,6428],{},"مفيش تفكير مطلوب",[77,6430,6432],{"id":6431},"متلازمة-شغّالة-على-الجهاز-بتاعي","متلازمة \"شغّالة على الجهاز بتاعي\"",[18,6434,6435,6436,6439,6440,6443],{},"زميلك بيدفع مشروع TypeScript. بتعمله clone، بتشغّل ",[89,6437,6438],{},"npm install","، الترجمة ",[30,6441,6442],{},"بتفشل",". نسخة TypeScript مختلفة. أداة بناء ناقصة. دلوقتي إنت بتصليح الإعداد بدل ما تكوّد.",[18,6445,6446,6449],{},[30,6447,6448],{},"الطريقة القديمة:"," تكتب توثيق محدش بيقراه. وتصليح نفس المشاكل مع كل عضو جديد في الفريق.",[18,6451,6452,6455,6456,6459,6460,485],{},[30,6453,6454],{},"طريقة Nix:"," شارك ملف ",[89,6457,6458],{},"flake.nix",". نفّذ أمر واحد. تاخد ",[30,6461,6462],{},"نفس الإعداد بالظبط",[82,6464,6466],{"className":5998,"code":6465,"language":6000,"meta":87,"style":87},"{\n  description = \"TypeScript project\";\n  inputs.nixpkgs.url = \"github:NixOS\u002Fnixpkgs\u002Fnixos-24.11\";\n\n  outputs = { nixpkgs, ... }: {\n    devShells.x86_64-linux.default =\n      let pkgs = nixpkgs.legacyPackages.x86_64-linux;\n      in pkgs.mkShell {\n        buildInputs = with pkgs; [\n          nodejs_24\n          nodePackages.typescript\n          nodePackages.eslint\n        ];\n      };\n  };\n}\n",[89,6467,6468,6472,6484,6506,6510,6529,6547,6570,6583,6596,6601,6611,6620,6625,6630,6634],{"__ignoreMap":87},[92,6469,6470],{"class":94,"line":95},[92,6471,1756],{"class":199},[92,6473,6474,6477,6479,6482],{"class":94,"line":174},[92,6475,6476],{"class":98},"  description",[92,6478,6024],{"class":203},[92,6480,6481],{"class":102}," \"TypeScript project\"",[92,6483,6030],{"class":199},[92,6485,6486,6489,6491,6494,6496,6499,6501,6504],{"class":94,"line":248},[92,6487,6488],{"class":98},"  inputs",[92,6490,485],{"class":199},[92,6492,6493],{"class":98},"nixpkgs",[92,6495,485],{"class":199},[92,6497,6498],{"class":98},"url",[92,6500,6024],{"class":203},[92,6502,6503],{"class":102}," \"github:NixOS\u002Fnixpkgs\u002Fnixos-24.11\"",[92,6505,6030],{"class":199},[92,6507,6508],{"class":94,"line":262},[92,6509,681],{"emptyLinePlaceholder":680},[92,6511,6512,6515,6517,6520,6523,6526],{"class":94,"line":282},[92,6513,6514],{"class":98},"  outputs",[92,6516,6024],{"class":203},[92,6518,6519],{"class":199}," { nixpkgs",[92,6521,6522],{"class":203},",",[92,6524,6525],{"class":203}," ... ",[92,6527,6528],{"class":199},"}: {\n",[92,6530,6531,6534,6536,6539,6541,6544],{"class":94,"line":713},[92,6532,6533],{"class":98},"    devShells",[92,6535,485],{"class":199},[92,6537,6538],{"class":98},"x86_64-linux",[92,6540,485],{"class":199},[92,6542,6543],{"class":98},"default",[92,6545,6546],{"class":203}," =\n",[92,6548,6549,6552,6554,6556,6559,6561,6564,6566,6568],{"class":94,"line":731},[92,6550,6551],{"class":203},"      let",[92,6553,6397],{"class":98},[92,6555,6024],{"class":203},[92,6557,6558],{"class":952}," nixpkgs",[92,6560,485],{"class":203},[92,6562,6563],{"class":952},"legacyPackages",[92,6565,485],{"class":203},[92,6567,6538],{"class":952},[92,6569,6030],{"class":199},[92,6571,6572,6575,6577,6579,6581],{"class":94,"line":1960},[92,6573,6574],{"class":203},"      in",[92,6576,6397],{"class":952},[92,6578,485],{"class":203},[92,6580,6382],{"class":952},[92,6582,972],{"class":199},[92,6584,6585,6588,6590,6592,6594],{"class":94,"line":1999},[92,6586,6587],{"class":98},"        buildInputs",[92,6589,6024],{"class":203},[92,6591,6394],{"class":203},[92,6593,6397],{"class":952},[92,6595,6400],{"class":199},[92,6597,6598],{"class":94,"line":2015},[92,6599,6600],{"class":952},"          nodejs_24\n",[92,6602,6603,6606,6608],{"class":94,"line":2020},[92,6604,6605],{"class":952},"          nodePackages",[92,6607,485],{"class":203},[92,6609,6610],{"class":952},"typescript\n",[92,6612,6613,6615,6617],{"class":94,"line":2025},[92,6614,6605],{"class":952},[92,6616,485],{"class":203},[92,6618,6619],{"class":952},"eslint\n",[92,6621,6622],{"class":94,"line":2034},[92,6623,6624],{"class":199},"        ];\n",[92,6626,6627],{"class":94,"line":2051},[92,6628,6629],{"class":199},"      };\n",[92,6631,6632],{"class":94,"line":2070},[92,6633,6069],{"class":199},[92,6635,6637],{"class":94,"line":6636},16,[92,6638,734],{"class":199},[15,6640,6641],{},[18,6642,6643,6644,772,6647,5893,6649,6652,6653,6656],{},"بدل ما تكتب إرشادات لإزاي تبني بيئة، إنت ",[30,6645,6646],{},"بتشارك البيئة الفعلية نفسها",[89,6648,775],{},[89,6650,6651],{},"package-lock.json"," بس لـ",[30,6654,6655],{},"إعداد التطوير بتاعك كله","، مش بس حزم جافاسكريبت.",[77,6658,6660],{"id":6659},"جحيم-عدم-الاتساق-في-cicd","جحيم عدم الاتساق في CI\u002FCD",[18,6662,6663,6664,6667],{},"مشروع Go بتاعك شغال محليًا. تبعته للـ CI؟ ",[30,6665,6666],{},"بيفشل",". متغيّرات بيئة مختلفة. نسخة Go مختلفة شوية. إعداد يدوي من شهور محدش فاكراه.",[18,6669,6670],{},"إنت بتخلص بثلاثة سلوكيات مختلفة: جهازك، جهاز زميلك، والـ CI.",[18,6672,6673,6676,6677,6680],{},[30,6674,6675],{},"Nix بيحل ده:"," البيئة ",[30,6678,6679],{},"هي كود",". نفس الملف، نفس البيئة في كل مكان.",[82,6682,6684],{"className":5998,"code":6683,"language":6000,"meta":87,"style":87},"{\n  description = \"Go project\";\n  inputs.nixpkgs.url = \"github:NixOS\u002Fnixpkgs\u002Fnixos-24.11\";\n\n  outputs = { nixpkgs, ... }: {\n    devShells.x86_64-linux.default =\n      let pkgs = nixpkgs.legacyPackages.x86_64-linux;\n      in pkgs.mkShell {\n        buildInputs = with pkgs; [\n          go_1_24\n          golangci-lint\n          delve\n        ];\n        shellHook = ''\n          export GOPATH=$PWD\u002F.go\n          export PATH=$GOPATH\u002Fbin:$PATH\n        '';\n      };\n  };\n}\n",[89,6685,6686,6690,6701,6719,6723,6737,6751,6771,6783,6795,6800,6805,6810,6814,6824,6829,6834,6842,6847,6852],{"__ignoreMap":87},[92,6687,6688],{"class":94,"line":95},[92,6689,1756],{"class":199},[92,6691,6692,6694,6696,6699],{"class":94,"line":174},[92,6693,6476],{"class":98},[92,6695,6024],{"class":203},[92,6697,6698],{"class":102}," \"Go project\"",[92,6700,6030],{"class":199},[92,6702,6703,6705,6707,6709,6711,6713,6715,6717],{"class":94,"line":248},[92,6704,6488],{"class":98},[92,6706,485],{"class":199},[92,6708,6493],{"class":98},[92,6710,485],{"class":199},[92,6712,6498],{"class":98},[92,6714,6024],{"class":203},[92,6716,6503],{"class":102},[92,6718,6030],{"class":199},[92,6720,6721],{"class":94,"line":262},[92,6722,681],{"emptyLinePlaceholder":680},[92,6724,6725,6727,6729,6731,6733,6735],{"class":94,"line":282},[92,6726,6514],{"class":98},[92,6728,6024],{"class":203},[92,6730,6519],{"class":199},[92,6732,6522],{"class":203},[92,6734,6525],{"class":203},[92,6736,6528],{"class":199},[92,6738,6739,6741,6743,6745,6747,6749],{"class":94,"line":713},[92,6740,6533],{"class":98},[92,6742,485],{"class":199},[92,6744,6538],{"class":98},[92,6746,485],{"class":199},[92,6748,6543],{"class":98},[92,6750,6546],{"class":203},[92,6752,6753,6755,6757,6759,6761,6763,6765,6767,6769],{"class":94,"line":731},[92,6754,6551],{"class":203},[92,6756,6397],{"class":98},[92,6758,6024],{"class":203},[92,6760,6558],{"class":952},[92,6762,485],{"class":203},[92,6764,6563],{"class":952},[92,6766,485],{"class":203},[92,6768,6538],{"class":952},[92,6770,6030],{"class":199},[92,6772,6773,6775,6777,6779,6781],{"class":94,"line":1960},[92,6774,6574],{"class":203},[92,6776,6397],{"class":952},[92,6778,485],{"class":203},[92,6780,6382],{"class":952},[92,6782,972],{"class":199},[92,6784,6785,6787,6789,6791,6793],{"class":94,"line":1999},[92,6786,6587],{"class":98},[92,6788,6024],{"class":203},[92,6790,6394],{"class":203},[92,6792,6397],{"class":952},[92,6794,6400],{"class":199},[92,6796,6797],{"class":94,"line":2015},[92,6798,6799],{"class":952},"          go_1_24\n",[92,6801,6802],{"class":94,"line":2020},[92,6803,6804],{"class":952},"          golangci-lint\n",[92,6806,6807],{"class":94,"line":2025},[92,6808,6809],{"class":952},"          delve\n",[92,6811,6812],{"class":94,"line":2034},[92,6813,6624],{"class":199},[92,6815,6816,6819,6821],{"class":94,"line":2051},[92,6817,6818],{"class":98},"        shellHook",[92,6820,6024],{"class":203},[92,6822,6823],{"class":102}," ''\n",[92,6825,6826],{"class":94,"line":2070},[92,6827,6828],{"class":102},"          export GOPATH=$PWD\u002F.go\n",[92,6830,6831],{"class":94,"line":6636},[92,6832,6833],{"class":102},"          export PATH=$GOPATH\u002Fbin:$PATH\n",[92,6835,6837,6840],{"class":94,"line":6836},17,[92,6838,6839],{"class":102},"        ''",[92,6841,6030],{"class":199},[92,6843,6845],{"class":94,"line":6844},18,[92,6846,6629],{"class":199},[92,6848,6850],{"class":94,"line":6849},19,[92,6851,6069],{"class":199},[92,6853,6855],{"class":94,"line":6854},20,[92,6856,734],{"class":199},[18,6858,6859,6860,6862],{},"الملف ده بيدخل في الريبو بتاعك. أي حد بيستخدمه — مطورين محليين، CI، staging، إنتاج — بياخد ",[30,6861,6462],{},". عدم الاتساق ببساطة بيختفي.",[63,6864],{},[11,6866,6868],{"id":6867},"إزاي-nix-بيشتغل-السحر-اللي-جواه","إزاي Nix بيشتغل؟ السحر اللي جواه",[77,6870,6872],{"id":6871},"الدوال-النقية-إعادة-الإنتاج-الرياضية","الدوال النقية: إعادة الإنتاج الرياضية",[18,6874,6875,6876,6879,6880,6883,6884,6887],{},"Nix بيعامل كل حزمة كـ",[30,6877,6878],{},"دالة نقية"," — دالة رياضية إن نفس المدخلات ",[30,6881,6882],{},"دايمًا"," بتنتج ",[30,6885,6886],{},"نفس"," المخرج بالظبط.",[82,6889,6892],{"className":6890,"code":6891,"language":2095},[2093],"inputs (source + dependencies + tools) → cryptographic hash → output package\n",[89,6893,6891],{"__ignoreMap":87},[15,6895,6896],{},[18,6897,6898],{},"Nix متصممة حول إعادة الإنتاج. ومع إن مش كل حزمة مضمونة إنها بتتكرر bit-for-bit دلوقتي، النظام بيفرض نقاء المدخلات بصرامة — بيخلّي البناءات غير قابلة لإعادة الإنتاج هي الاستثناء، مش القاعدة.",[18,6900,6901,6902,6905],{},"غيّر ",[30,6903,6904],{},"أي حاجة"," في المدخلات، تاخد hash مختلف، تاخد حزمة مختلفة.",[15,6907,6908],{},[18,6909,6910,6911,6914],{},"إنت حرفيًا مقدرش تكسر إعادة الإنتاج بالغلط. النظام ",[30,6912,6913],{},"بيفرضها رياضياً",". دي مش اتفاقية أو best practice — دي الطريقة الوحيدة اللي النظام شغال بيها.",[77,6916,809,6918,6920],{"id":6917},"الـ-nixstore-العزل-على-نطاق-واسع",[89,6919,5836],{},": العزل على نطاق واسع",[18,6922,6923,6924,6926],{},"كل حزمة بتعيش في ",[89,6925,5836],{}," مع hash فريد:",[82,6928,6930],{"className":84,"code":6929,"language":86,"meta":87,"style":87},"$ ls \u002Fnix\u002Fstore\u002F | grep nodejs\n3j8d...-nodejs-24.1.0\n7k2m...-nodejs-22.11.0\n9xp4...-nodejs-20.18.1\n",[89,6931,6932,6951,6956,6961],{"__ignoreMap":87},[92,6933,6934,6937,6940,6943,6945,6948],{"class":94,"line":95},[92,6935,6936],{"class":98},"$",[92,6938,6939],{"class":102}," ls",[92,6941,6942],{"class":102}," \u002Fnix\u002Fstore\u002F",[92,6944,219],{"class":203},[92,6946,6947],{"class":98}," grep",[92,6949,6950],{"class":102}," nodejs\n",[92,6952,6953],{"class":94,"line":174},[92,6954,6955],{"class":98},"3j8d...-nodejs-24.1.0\n",[92,6957,6958],{"class":94,"line":248},[92,6959,6960],{"class":98},"7k2m...-nodejs-22.11.0\n",[92,6962,6963],{"class":94,"line":262},[92,6964,6965],{"class":98},"9xp4...-nodejs-20.18.1\n",[18,6967,6968,6969,6972],{},"البادئات دي ",[30,6970,6971],{},"هاشات موجهة بالمحتوى"," بتمثل كل حاجة اتعمل بيها بناء الحزمة. علشان كده النسخ المتعددة بتتعايش من غير تعارضات.",[77,6974,6976],{"id":6975},"التعريفي-مقابل-الأمرّي","التعريفي مقابل الأمرّي",[18,6978,6979,6980,6983],{},"الأنظمة التقليدية ",[30,6981,6982],{},"أمرّية"," — إنت بتقولها تعمل إيه خطوة بخطوة:",[82,6985,6987],{"className":84,"code":6986,"language":86,"meta":87,"style":87},"# خطوات بتعدّل الحالة\nsudo apt update\nsudo apt install nginx\nsudo systemctl enable nginx\nsudo vim \u002Fetc\u002Fnginx\u002Fnginx.conf\n# ادعي إنك وثّقت ده\n# صلي إنها تشتغل على جهاز تاني\n",[89,6988,6989,6994,7002,7012,7022,7032,7036],{"__ignoreMap":87},[92,6990,6991],{"class":94,"line":95},[92,6992,6993],{"class":327},"# خطوات بتعدّل الحالة\n",[92,6995,6996,6998,7000],{"class":94,"line":174},[92,6997,99],{"class":98},[92,6999,168],{"class":102},[92,7001,171],{"class":102},[92,7003,7004,7006,7008,7010],{"class":94,"line":248},[92,7005,99],{"class":98},[92,7007,168],{"class":102},[92,7009,129],{"class":102},[92,7011,5965],{"class":102},[92,7013,7014,7016,7018,7020],{"class":94,"line":262},[92,7015,99],{"class":98},[92,7017,5972],{"class":102},[92,7019,5975],{"class":102},[92,7021,5965],{"class":102},[92,7023,7024,7026,7029],{"class":94,"line":282},[92,7025,99],{"class":98},[92,7027,7028],{"class":102}," vim",[92,7030,7031],{"class":102}," \u002Fetc\u002Fnginx\u002Fnginx.conf\n",[92,7033,7034],{"class":94,"line":713},[92,7035,5987],{"class":327},[92,7037,7038],{"class":94,"line":731},[92,7039,7040],{"class":327},"# صلي إنها تشتغل على جهاز تاني\n",[18,7042,7043,7044,7047],{},"Nix ",[30,7045,7046],{},"تعريفي"," — إنت ببتوصف اللي عايزه:",[82,7049,7051],{"className":5998,"code":7050,"language":6000,"meta":87,"style":87},"{\n  services.nginx = {\n    enable = true;\n    virtualHosts.\"myapp.com\" = {\n      root = \"\u002Fvar\u002Fwww\u002Fmyapp\";\n    };\n  };\n}\n",[89,7052,7053,7057,7069,7080,7094,7106,7111,7115],{"__ignoreMap":87},[92,7054,7055],{"class":94,"line":95},[92,7056,1756],{"class":199},[92,7058,7059,7061,7063,7065,7067],{"class":94,"line":174},[92,7060,6011],{"class":98},[92,7062,485],{"class":199},[92,7064,6016],{"class":98},[92,7066,6024],{"class":203},[92,7068,972],{"class":199},[92,7070,7071,7074,7076,7078],{"class":94,"line":248},[92,7072,7073],{"class":98},"    enable",[92,7075,6024],{"class":203},[92,7077,6027],{"class":106},[92,7079,6030],{"class":199},[92,7081,7082,7085,7087,7090,7092],{"class":94,"line":262},[92,7083,7084],{"class":98},"    virtualHosts",[92,7086,485],{"class":199},[92,7088,7089],{"class":102},"\"myapp.com\"",[92,7091,6024],{"class":203},[92,7093,972],{"class":199},[92,7095,7096,7099,7101,7104],{"class":94,"line":282},[92,7097,7098],{"class":98},"      root",[92,7100,6024],{"class":203},[92,7102,7103],{"class":102}," \"\u002Fvar\u002Fwww\u002Fmyapp\"",[92,7105,6030],{"class":199},[92,7107,7108],{"class":94,"line":713},[92,7109,7110],{"class":199},"    };\n",[92,7112,7113],{"class":94,"line":731},[92,7114,6069],{"class":199},[92,7116,7117],{"class":94,"line":1960},[92,7118,734],{"class":199},[18,7120,6076,7121,6080,7124,7127],{},[89,7122,7123],{},"nixos-rebuild switch",[30,7125,7126],{},"بيتحوّل"," علشان يطابق الوصف ده.",[15,7129,7130],{},[18,7131,7132,7133,7136],{},"الأمرّي هو \"اعمل ده، بعدين اعمل ده.\" التعريفي هو \"النظام المفروض يبقى بالشكل ده.\" واحد بيعمل حالة. والتاني ",[30,7134,7135],{},"بيوصف"," حالة.",[77,7138,7140],{"id":7139},"التراجعات-الذرية","التراجعات الذرية",[18,7142,7143],{},"لما تحدّث نظامك:",[431,7145,7146,7149,7156,7159],{},[50,7147,7148],{},"Nix بيبني نسخ جديدة",[50,7150,7151,7152,7155],{},"بيعمل ",[30,7153,7154],{},"جيل"," جديد",[50,7157,7158],{},"بيعمل symlinks للجيل الجديد",[50,7160,7161],{},[30,7162,7163],{},"بيحتفظ بكل الأجيال القديمة كما هي",[18,7165,7166],{},"قائمة الإقلاع ببتعرض تاريخك:",[82,7168,7171],{"className":7169,"code":7170,"language":2095},[2093],"NixOS - Generation 47 (current)\nNixOS - Generation 46\nNixOS - Generation 45\n...\n",[89,7172,7170],{"__ignoreMap":87},[18,7174,7175],{},"حاجة اتعطّلت؟ أقلع بالجيل السابق أو نفّذ:",[82,7177,7179],{"className":84,"code":7178,"language":86,"meta":87,"style":87},"sudo nixos-rebuild switch --rollback\n",[89,7180,7181],{"__ignoreMap":87},[92,7182,7183,7185,7188,7191],{"class":94,"line":95},[92,7184,99],{"class":98},[92,7186,7187],{"class":102}," nixos-rebuild",[92,7189,7190],{"class":102}," switch",[92,7192,7193],{"class":106}," --rollback\n",[18,7195,7196,7199],{},[30,7197,7198],{},"30 ثانية. خلاص."," مفيش إعادة تثبيت حزم، مفيش استرجاع إعدادات، مفيش ترحيل داتا بيز. بس سفر فوري عبر الزمن.",[63,7201],{},[11,7203,7205],{"id":7204},"nix-مقابل-العالم-مقارنات-صريحة","Nix مقابل العالم: مقارنات صريحة",[77,7207,7209],{"id":7208},"nix-مقابل-docker-مكملين-مش-منافسين","Nix مقابل Docker: مكملين، مش منافسين",[18,7211,7212,7213,7216],{},"بتحل ",[30,7214,7215],{},"مشاكل مختلفة"," وبيشتغلوا مع بعض جامد.",[18,7218,7219],{},[30,7220,7221],{},"نقطة قوة Docker — عزل وقت التشغيل",[18,7223,7224],{},"بيعبّي تطبيقك بكل اللي محتاجه. ابعث الـ container، هيشتغل بنفس الطريقة في كل مكان. أيكوسيستم ضخم.",[18,7226,7227],{},"النواقص:",[47,7229,7230,7233,7239,7242],{},[50,7231,7232],{},"عملية البناء نفسها مش قابلة لإعادة الإنتاج",[50,7234,7235,7238],{},[89,7236,7237],{},"RUN apt-get install"," بيجيب أحدث النسخ (مش حتمية)",[50,7240,7241],{},"تقدر بس تورث من صورة قاعدة واحدة",[50,7243,7244],{},"كاش البناء بيعطّل بين الأجهزة",[18,7246,7247],{},[30,7248,7249],{},"نقطة قوة Nix — إعادة إنتاج البناء",[18,7251,7252],{},"كل حزمة مبنية من اعتماديات مثبتة بالضبط. ضمانات تشفيرية.",[18,7254,7227],{},[47,7256,7257,7260,7263],{},[50,7258,7259],{},"منحنى تعلم أعلى (مش هجمّلها)",[50,7261,7262],{},"أيكوسيستم أصغر",[50,7264,7265],{},"أقل ألفة للفرق",[15,7267,7268],{},[18,7269,7270,7271,485],{},"وهنا الجزء الجامد — تقدر تستخدم Nix تبني بيها ",[30,7272,7273],{},"صور Docker قابلة لإعادة الإنتاج",[82,7275,7277],{"className":5998,"code":7276,"language":6000,"meta":87,"style":87},"{ pkgs ? import \u003Cnixpkgs> {} }:\npkgs.dockerTools.buildLayeredImage {\n  name = \"my-app\";\n  tag = \"latest\";\n  contents = with pkgs; [ nodejs_24 bash ];\n  config.Cmd = [ \"${pkgs.nodejs_24}\u002Fbin\u002Fnode\" \"app.js\" ];\n}\n",[89,7278,7279,7291,7307,7319,7331,7354,7392],{"__ignoreMap":87},[92,7280,7281,7283,7285,7287,7289],{"class":94,"line":95},[92,7282,6360],{"class":199},[92,7284,6363],{"class":203},[92,7286,6366],{"class":106},[92,7288,6369],{"class":102},[92,7290,6372],{"class":199},[92,7292,7293,7295,7297,7300,7302,7305],{"class":94,"line":174},[92,7294,6377],{"class":952},[92,7296,485],{"class":203},[92,7298,7299],{"class":952},"dockerTools",[92,7301,485],{"class":203},[92,7303,7304],{"class":952},"buildLayeredImage",[92,7306,972],{"class":199},[92,7308,7309,7312,7314,7317],{"class":94,"line":248},[92,7310,7311],{"class":98},"  name",[92,7313,6024],{"class":203},[92,7315,7316],{"class":102}," \"my-app\"",[92,7318,6030],{"class":199},[92,7320,7321,7324,7326,7329],{"class":94,"line":262},[92,7322,7323],{"class":98},"  tag",[92,7325,6024],{"class":203},[92,7327,7328],{"class":102}," \"latest\"",[92,7330,6030],{"class":199},[92,7332,7333,7336,7338,7340,7342,7345,7348,7351],{"class":94,"line":282},[92,7334,7335],{"class":98},"  contents",[92,7337,6024],{"class":203},[92,7339,6394],{"class":203},[92,7341,6397],{"class":952},[92,7343,7344],{"class":199},"; [ ",[92,7346,7347],{"class":952},"nodejs_24",[92,7349,7350],{"class":952}," bash",[92,7352,7353],{"class":199}," ];\n",[92,7355,7356,7359,7361,7364,7366,7369,7372,7375,7377,7379,7381,7384,7387,7390],{"class":94,"line":713},[92,7357,7358],{"class":98},"  config",[92,7360,485],{"class":199},[92,7362,7363],{"class":98},"Cmd",[92,7365,6024],{"class":203},[92,7367,7368],{"class":199}," [ ",[92,7370,7371],{"class":102},"\"",[92,7373,7374],{"class":102},"${",[92,7376,6377],{"class":106},[92,7378,485],{"class":203},[92,7380,7347],{"class":106},[92,7382,7383],{"class":102},"}",[92,7385,7386],{"class":102},"\u002Fbin\u002Fnode\"",[92,7388,7389],{"class":102}," \"app.js\"",[92,7391,7353],{"class":199},[92,7393,7394],{"class":94,"line":731},[92,7395,734],{"class":199},[18,7397,7398,7399,1478,7402,7405],{},"إعادة إنتاج Nix أثناء البناء + قابلية نقل Docker للنشر. شركات زي ",[30,7400,7401],{},"Replit",[30,7403,7404],{},"Shopify"," بتعمل كده.",[77,7407,7409],{"id":7408},"nix-مقابل-aptyumbrew-التعريفي-مقابل-الأمرّي","Nix مقابل apt\u002Fyum\u002Fbrew: التعريفي مقابل الأمرّي",[4624,7411,7412,7424],{},[4627,7413,7414],{},[4630,7415,7416,7419,7422],{},[4633,7417,7418],{},"الميزة",[4633,7420,7421],{},"apt\u002Fyum\u002Fbrew",[4633,7423,5807],{},[4640,7425,7426,7439,7452,7465,7478],{},[4630,7427,7428,7433,7436],{},[4645,7429,7430],{},[30,7431,7432],{},"النهج",[4645,7434,7435],{},"أمرّي (اعمل ده، بعدين ده)",[4645,7437,7438],{},"تعريفي (النظام لازم يبقى كده)",[4630,7440,7441,7446,7449],{},[4645,7442,7443],{},[30,7444,7445],{},"إعادة الإنتاج",[4645,7447,7448],{},"مفيش — الحالة بتتغير مع الوقت",[4645,7450,7451],{},"مثالية — نفس الإعداد = نفس النظام",[4630,7453,7454,7459,7462],{},[4645,7455,7456],{},[30,7457,7458],{},"النسخ المتعددة",[4645,7460,7461],{},"تعارضات",[4645,7463,7464],{},"بتتعايش بسلام",[4630,7466,7467,7472,7475],{},[4645,7468,7469],{},[30,7470,7471],{},"التراجعات",[4645,7473,7474],{},"مفيش",[4645,7476,7477],{},"فورية (30 ثانية)",[4630,7479,7480,7485,7488],{},[4645,7481,7482],{},[30,7483,7484],{},"التحكم في الإصدارات",[4645,7486,7487],{},"توثيق يدوي",[4645,7489,7490],{},"إعدادات مبنية على Git",[18,7492,7493,7494,7497,7498,485],{},"الباكيدج مانيجرز التقليدية ",[30,7495,7496],{},"بتعدّل حالة عامة",". Nix ",[30,7499,7500],{},"بيبني حالة حتمية",[77,7502,7504],{"id":7503},"nix-مقابل-توزيعات-لينكس-التقليدية","Nix مقابل توزيعات لينكس التقليدية",[18,7506,7507],{},[30,7508,7509],{},"Ubuntu\u002FDebian",[47,7511,7512,7515,7518],{},[50,7513,7514],{},"الأنسب لـ: الاستخدام العام، تجربة \"بتشتغل بس\"",[50,7516,7517],{},"نقاط القوة: كوميونتي ضخم، كل حاجة موثقة، إصدارات LTS مستقرة",[50,7519,7520],{},"النواقص: الحالة بتتغيّر، التحديثات بتكسر حاجات، مفيش تراجعات ذرية",[18,7522,7523],{},[30,7524,7525],{},"Arch Linux",[47,7527,7528,7531,7534],{},[50,7529,7530],{},"الأنسب لـ: الحزم الأحدث، نهج اعملها بنفسك",[50,7532,7533],{},"نقاط القوة: أحدث البرامج، wiki شامل، تحكم كامل",[50,7535,7536],{},"النواقص: كل حاجة يدوية، بتتكسر في بعض الأحيان، مفيش شبكة أمان",[18,7538,7539],{},[30,7540,114],{},[47,7542,7543,7546,7549],{},[50,7544,7545],{},"الأنسب لـ: التقنية الحديثة، نهج متوازن",[50,7547,7548],{},"نقاط القوة: أحدث المميزات، دعم Red Hat، تكامل SELinux",[50,7550,7551],{},"النواقص: دورة إصدار 6 شهور، إدارة حزم تقليدية",[18,7553,7554],{},[30,7555,4839],{},[47,7557,7558,7561,7564],{},[50,7559,7560],{},"الأنسب لـ: إعادة الإنتاج، بنية تحتية declarative",[50,7562,7563],{},"نقاط القوة: تراجعات ذرية، إعادة إنتاج مثالية، تحكم في إصدارات كل حاجة",[50,7565,7566],{},"النواقص: منحنى تعلم حاد، كوميونتي أصغر، syntax غريب (بجد، برمجة وظيفية جوه ملف إعدادات؟)",[77,7568,7570],{"id":7569},"nix-مقابل-الأدوات-الخاصة-باللغات","Nix مقابل الأدوات الخاصة باللغات",[18,7572,7573,7574,958,7576,958,7579,958,7582,485],{},"كل لغة ليها مدير إصدارات: ",[89,7575,6311],{},[89,7577,7578],{},"pyenv",[89,7580,7581],{},"rbenv",[89,7583,7584],{},"gvm",[18,7586,7587],{},[30,7588,7589],{},"المشاكل:",[47,7591,7592,7595,7598],{},[50,7593,7594],{},"أداة مختلفة لكل لغة",[50,7596,7597],{},"مبتديرش اعتماديات النظام",[50,7599,7600],{},"غير متسقة عبر المشاريع",[18,7602,7603],{},[30,7604,7605],{},"Nix بيستبدلهم كلهم:",[82,7607,7609],{"className":5998,"code":7608,"language":6000,"meta":87,"style":87},"{\n  description = \"Multi-language project\";\n  outputs = { nixpkgs, ... }: {\n    devShells.x86_64-linux.default =\n      let pkgs = nixpkgs.legacyPackages.x86_64-linux;\n      in pkgs.mkShell {\n        buildInputs = with pkgs; [\n          nodejs_24    # JavaScript\n          python311    # Python\n          go_1_24      # Go\n          rustc        # Rust\n          postgresql_16  # Database\n          redis        # Cache\n        ];\n      };\n  };\n}\n",[89,7610,7611,7615,7626,7640,7654,7674,7686,7698,7706,7714,7722,7730,7738,7746,7750,7754,7758],{"__ignoreMap":87},[92,7612,7613],{"class":94,"line":95},[92,7614,1756],{"class":199},[92,7616,7617,7619,7621,7624],{"class":94,"line":174},[92,7618,6476],{"class":98},[92,7620,6024],{"class":203},[92,7622,7623],{"class":102}," \"Multi-language project\"",[92,7625,6030],{"class":199},[92,7627,7628,7630,7632,7634,7636,7638],{"class":94,"line":248},[92,7629,6514],{"class":98},[92,7631,6024],{"class":203},[92,7633,6519],{"class":199},[92,7635,6522],{"class":203},[92,7637,6525],{"class":203},[92,7639,6528],{"class":199},[92,7641,7642,7644,7646,7648,7650,7652],{"class":94,"line":262},[92,7643,6533],{"class":98},[92,7645,485],{"class":199},[92,7647,6538],{"class":98},[92,7649,485],{"class":199},[92,7651,6543],{"class":98},[92,7653,6546],{"class":203},[92,7655,7656,7658,7660,7662,7664,7666,7668,7670,7672],{"class":94,"line":282},[92,7657,6551],{"class":203},[92,7659,6397],{"class":98},[92,7661,6024],{"class":203},[92,7663,6558],{"class":952},[92,7665,485],{"class":203},[92,7667,6563],{"class":952},[92,7669,485],{"class":203},[92,7671,6538],{"class":952},[92,7673,6030],{"class":199},[92,7675,7676,7678,7680,7682,7684],{"class":94,"line":713},[92,7677,6574],{"class":203},[92,7679,6397],{"class":952},[92,7681,485],{"class":203},[92,7683,6382],{"class":952},[92,7685,972],{"class":199},[92,7687,7688,7690,7692,7694,7696],{"class":94,"line":731},[92,7689,6587],{"class":98},[92,7691,6024],{"class":203},[92,7693,6394],{"class":203},[92,7695,6397],{"class":952},[92,7697,6400],{"class":199},[92,7699,7700,7703],{"class":94,"line":1960},[92,7701,7702],{"class":952},"          nodejs_24",[92,7704,7705],{"class":327},"    # JavaScript\n",[92,7707,7708,7711],{"class":94,"line":1999},[92,7709,7710],{"class":952},"          python311",[92,7712,7713],{"class":327},"    # Python\n",[92,7715,7716,7719],{"class":94,"line":2015},[92,7717,7718],{"class":952},"          go_1_24",[92,7720,7721],{"class":327},"      # Go\n",[92,7723,7724,7727],{"class":94,"line":2020},[92,7725,7726],{"class":952},"          rustc",[92,7728,7729],{"class":327},"        # Rust\n",[92,7731,7732,7735],{"class":94,"line":2025},[92,7733,7734],{"class":952},"          postgresql_16",[92,7736,7737],{"class":327},"  # Database\n",[92,7739,7740,7743],{"class":94,"line":2034},[92,7741,7742],{"class":952},"          redis",[92,7744,7745],{"class":327},"        # Cache\n",[92,7747,7748],{"class":94,"line":2051},[92,7749,6624],{"class":199},[92,7751,7752],{"class":94,"line":2070},[92,7753,6629],{"class":199},[92,7755,7756],{"class":94,"line":6636},[92,7757,6069],{"class":199},[92,7759,7760],{"class":94,"line":6836},[92,7761,734],{"class":199},[18,7763,7764],{},[30,7765,7766],{},"أداة واحدة. كل اللغات. اعتماديات النظام متضمنة. قابلة لإعادة الإنتاج تمامًا.",[63,7768],{},[11,7770,7772],{"id":7771},"المميزات-القاتلة-الأساسية","المميزات القاتلة الأساسية",[77,7774,7776],{"id":7775},"_1-إعادة-إنتاج-حقيقية-مش-مجرد-ادعاءات","1. إعادة إنتاج حقيقية (مش مجرد ادعاءات)",[18,7778,7779,7780,7783,7784,7787],{},"أنظمة تانية ",[30,7781,7782],{},"بتدّعي"," إعادة الإنتاج. Nix ",[30,7785,7786],{},"بيفرضها"," رياضياً.",[15,7789,7790],{},[18,7791,7792,7793,7796,7797,7800,7801,7804],{},"نفس الـ ",[89,7794,7795],{},"flake.lock"," = ",[30,7798,7799],{},"بيئة متطابقة"," في كل مكان. مش \"مشابهة\". مش \"المفروض تشتغل\". ",[30,7802,7803],{},"متطابقة."," مضمونة تشفيرياً.",[77,7806,7808],{"id":7807},"_2-السفر-عبر-الزمن-لنظامك","2. السفر عبر الزمن لنظامك",[18,7810,7811],{},"كل تغيير بيعمل جيل. كل جيل قابل للاسترجاع.",[82,7813,7815],{"className":84,"code":7814,"language":86,"meta":87,"style":87},"# اعرض كل الأجيال\nnix-env --list-generations\n\n# ارجع للجيل السابق\nsudo nixos-rebuild switch --rollback\n\n# اتغير لجيل محدد\nsudo nixos-rebuild switch --rollback 42\n",[89,7816,7817,7822,7830,7834,7839,7849,7853,7858],{"__ignoreMap":87},[92,7818,7819],{"class":94,"line":95},[92,7820,7821],{"class":327},"# اعرض كل الأجيال\n",[92,7823,7824,7827],{"class":94,"line":174},[92,7825,7826],{"class":98},"nix-env",[92,7828,7829],{"class":106}," --list-generations\n",[92,7831,7832],{"class":94,"line":248},[92,7833,681],{"emptyLinePlaceholder":680},[92,7835,7836],{"class":94,"line":262},[92,7837,7838],{"class":327},"# ارجع للجيل السابق\n",[92,7840,7841,7843,7845,7847],{"class":94,"line":282},[92,7842,99],{"class":98},[92,7844,7187],{"class":102},[92,7846,7190],{"class":102},[92,7848,7193],{"class":106},[92,7850,7851],{"class":94,"line":713},[92,7852,681],{"emptyLinePlaceholder":680},[92,7854,7855],{"class":94,"line":731},[92,7856,7857],{"class":327},"# اتغير لجيل محدد\n",[92,7859,7860,7862,7864,7866,7869],{"class":94,"line":1960},[92,7861,99],{"class":98},[92,7863,7187],{"class":102},[92,7865,7190],{"class":102},[92,7867,7868],{"class":106}," --rollback",[92,7870,7871],{"class":106}," 42\n",[18,7873,7874,7875,7878],{},"كسّرت حاجة؟ إنت ",[30,7876,7877],{},"على بعد 30 ثانية"," من حالة شغّالة. دايمًا.",[77,7880,7882],{"id":7881},"_3-الإعداد-ككود-بجد","3. الإعداد ككود (بجد)",[18,7884,7885,7886],{},"مش \"بنية تحتية ككود\" على الورق. ",[30,7887,7888],{},"ككود بجد.",[82,7890,7892],{"className":5998,"code":7891,"language":6000,"meta":87,"style":87},"# ده نظامك. مش وصف. الحالة الفعلية.\n{\n  services.nginx.enable = true;\n  services.postgresql.enable = true;\n  services.redis.enable = true;\n\n  networking.firewall.allowedTCPPorts = [ 80 443 ];\n\n  users.users.deploy = {\n    isNormalUser = true;\n    extraGroups = [ \"wheel\" ];\n  };\n}\n",[89,7893,7894,7899,7903,7921,7940,7959,7963,7990,7994,8013,8024,8038,8042],{"__ignoreMap":87},[92,7895,7896],{"class":94,"line":95},[92,7897,7898],{"class":327},"# ده نظامك. مش وصف. الحالة الفعلية.\n",[92,7900,7901],{"class":94,"line":174},[92,7902,1756],{"class":199},[92,7904,7905,7907,7909,7911,7913,7915,7917,7919],{"class":94,"line":248},[92,7906,6011],{"class":98},[92,7908,485],{"class":199},[92,7910,6016],{"class":98},[92,7912,485],{"class":199},[92,7914,6021],{"class":98},[92,7916,6024],{"class":203},[92,7918,6027],{"class":106},[92,7920,6030],{"class":199},[92,7922,7923,7925,7927,7930,7932,7934,7936,7938],{"class":94,"line":262},[92,7924,6011],{"class":98},[92,7926,485],{"class":199},[92,7928,7929],{"class":98},"postgresql",[92,7931,485],{"class":199},[92,7933,6021],{"class":98},[92,7935,6024],{"class":203},[92,7937,6027],{"class":106},[92,7939,6030],{"class":199},[92,7941,7942,7944,7946,7949,7951,7953,7955,7957],{"class":94,"line":282},[92,7943,6011],{"class":98},[92,7945,485],{"class":199},[92,7947,7948],{"class":98},"redis",[92,7950,485],{"class":199},[92,7952,6021],{"class":98},[92,7954,6024],{"class":203},[92,7956,6027],{"class":106},[92,7958,6030],{"class":199},[92,7960,7961],{"class":94,"line":713},[92,7962,681],{"emptyLinePlaceholder":680},[92,7964,7965,7968,7970,7973,7975,7978,7980,7982,7985,7988],{"class":94,"line":731},[92,7966,7967],{"class":98},"  networking",[92,7969,485],{"class":199},[92,7971,7972],{"class":98},"firewall",[92,7974,485],{"class":199},[92,7976,7977],{"class":98},"allowedTCPPorts",[92,7979,6024],{"class":203},[92,7981,7368],{"class":199},[92,7983,7984],{"class":106},"80",[92,7986,7987],{"class":106}," 443",[92,7989,7353],{"class":199},[92,7991,7992],{"class":94,"line":1960},[92,7993,681],{"emptyLinePlaceholder":680},[92,7995,7996,7999,8001,8004,8006,8009,8011],{"class":94,"line":1999},[92,7997,7998],{"class":98},"  users",[92,8000,485],{"class":199},[92,8002,8003],{"class":98},"users",[92,8005,485],{"class":199},[92,8007,8008],{"class":98},"deploy",[92,8010,6024],{"class":203},[92,8012,972],{"class":199},[92,8014,8015,8018,8020,8022],{"class":94,"line":2015},[92,8016,8017],{"class":98},"    isNormalUser",[92,8019,6024],{"class":203},[92,8021,6027],{"class":106},[92,8023,6030],{"class":199},[92,8025,8026,8029,8031,8033,8036],{"class":94,"line":2020},[92,8027,8028],{"class":98},"    extraGroups",[92,8030,6024],{"class":203},[92,8032,7368],{"class":199},[92,8034,8035],{"class":102},"\"wheel\"",[92,8037,7353],{"class":199},[92,8039,8040],{"class":94,"line":2025},[92,8041,6069],{"class":199},[92,8043,8044],{"class":94,"line":2034},[92,8045,734],{"class":199},[18,8047,8048,8049,485],{},"اعمله commit في Git. أي جهاز اتبني من الملف ده ",[30,8050,8051],{},"متطابق",[77,8053,8055],{"id":8054},"_4-بيئات-تطوير-بتشتغل-فعلاً","4. بيئات تطوير بتشتغل فعلاً",[18,8057,8058,8059,8061,8062,8064,8065,485],{},"شارك ",[89,8060,6458],{},". الكل بياخد ",[30,8063,6886],{}," البيئة بالظبط. مش توثيق. مش إرشادات. ",[30,8066,8067],{},"البيئة الفعلية",[15,8069,8070],{},[18,8071,8072,8073,5897,8076,5897,8079,8082],{},"عضو فريق جديد؟ ",[89,8074,8075],{},"git clone",[89,8077,8078],{},"nix develop",[30,8080,8081],{},"بيكوّد في دقيقتين",". مفيش دوكس إعداد. مفيش \"شغّالة على الجهاز بتاعي\". بس إنتاجية فورية.",[77,8084,8086],{"id":8085},"_5-التخزين-المؤقت-للباينريز","5. التخزين المؤقت للباينريز",[18,8088,8089,8090,8093],{},"ابنِ مرة واحدة. شارك في كل مكان. فرق بتستخدم Cachix بيبنوا الحزم ",[30,8091,8092],{},"مرة واحدة"," وأي حد تاني بينزّل الباينريز الجاهزة.",[18,8095,8096,8097,485],{},"أول مطور يبني؟ 20 دقيقة. أي حد تاني؟ ",[30,8098,6106],{},[63,8100],{},[11,8102,8104],{"id":8103},"حالات-استخدام-من-العالم-الحقيقي","حالات استخدام من العالم الحقيقي",[77,8106,8108],{"id":8107},"بيئات-التطوير","بيئات التطوير",[18,8110,8111,8114],{},[30,8112,8113],{},"المشكلة:"," مطور جديد بيقضي يومين في تثبيت أدوات، تصليح إصدارات، إعداد بيئة.",[18,8116,8117,8120],{},[30,8118,8119],{},"الحل:"," ملف واحد، أمر واحد.",[82,8122,8124],{"className":5998,"code":8123,"language":6000,"meta":87,"style":87},"{\n  description = \"Backend API dev environment\";\n  inputs.nixpkgs.url = \"github:NixOS\u002Fnixpkgs\u002Fnixos-24.11\";\n\n  outputs = { nixpkgs, ... }: {\n    devShells.x86_64-linux.default =\n      let pkgs = nixpkgs.legacyPackages.x86_64-linux;\n      in pkgs.mkShell {\n        buildInputs = with pkgs; [\n          nodejs_24 python311 go_1_24\n          postgresql_16 redis\n          docker-compose kubectl\n        ];\n        shellHook = ''\n          export DATABASE_URL=\"postgresql:\u002F\u002Flocalhost\u002Fmyapp\"\n          echo \"Dev environment loaded!\"\n        '';\n      };\n  };\n}\n",[89,8125,8126,8130,8141,8159,8163,8177,8191,8211,8223,8235,8245,8252,8260,8264,8272,8277,8282,8288,8292,8296],{"__ignoreMap":87},[92,8127,8128],{"class":94,"line":95},[92,8129,1756],{"class":199},[92,8131,8132,8134,8136,8139],{"class":94,"line":174},[92,8133,6476],{"class":98},[92,8135,6024],{"class":203},[92,8137,8138],{"class":102}," \"Backend API dev environment\"",[92,8140,6030],{"class":199},[92,8142,8143,8145,8147,8149,8151,8153,8155,8157],{"class":94,"line":248},[92,8144,6488],{"class":98},[92,8146,485],{"class":199},[92,8148,6493],{"class":98},[92,8150,485],{"class":199},[92,8152,6498],{"class":98},[92,8154,6024],{"class":203},[92,8156,6503],{"class":102},[92,8158,6030],{"class":199},[92,8160,8161],{"class":94,"line":262},[92,8162,681],{"emptyLinePlaceholder":680},[92,8164,8165,8167,8169,8171,8173,8175],{"class":94,"line":282},[92,8166,6514],{"class":98},[92,8168,6024],{"class":203},[92,8170,6519],{"class":199},[92,8172,6522],{"class":203},[92,8174,6525],{"class":203},[92,8176,6528],{"class":199},[92,8178,8179,8181,8183,8185,8187,8189],{"class":94,"line":713},[92,8180,6533],{"class":98},[92,8182,485],{"class":199},[92,8184,6538],{"class":98},[92,8186,485],{"class":199},[92,8188,6543],{"class":98},[92,8190,6546],{"class":203},[92,8192,8193,8195,8197,8199,8201,8203,8205,8207,8209],{"class":94,"line":731},[92,8194,6551],{"class":203},[92,8196,6397],{"class":98},[92,8198,6024],{"class":203},[92,8200,6558],{"class":952},[92,8202,485],{"class":203},[92,8204,6563],{"class":952},[92,8206,485],{"class":203},[92,8208,6538],{"class":952},[92,8210,6030],{"class":199},[92,8212,8213,8215,8217,8219,8221],{"class":94,"line":1960},[92,8214,6574],{"class":203},[92,8216,6397],{"class":952},[92,8218,485],{"class":203},[92,8220,6382],{"class":952},[92,8222,972],{"class":199},[92,8224,8225,8227,8229,8231,8233],{"class":94,"line":1999},[92,8226,6587],{"class":98},[92,8228,6024],{"class":203},[92,8230,6394],{"class":203},[92,8232,6397],{"class":952},[92,8234,6400],{"class":199},[92,8236,8237,8239,8242],{"class":94,"line":2015},[92,8238,7702],{"class":952},[92,8240,8241],{"class":952}," python311",[92,8243,8244],{"class":952}," go_1_24\n",[92,8246,8247,8249],{"class":94,"line":2020},[92,8248,7734],{"class":952},[92,8250,8251],{"class":952}," redis\n",[92,8253,8254,8257],{"class":94,"line":2025},[92,8255,8256],{"class":952},"          docker-compose",[92,8258,8259],{"class":952}," kubectl\n",[92,8261,8262],{"class":94,"line":2034},[92,8263,6624],{"class":199},[92,8265,8266,8268,8270],{"class":94,"line":2051},[92,8267,6818],{"class":98},[92,8269,6024],{"class":203},[92,8271,6823],{"class":102},[92,8273,8274],{"class":94,"line":2070},[92,8275,8276],{"class":102},"          export DATABASE_URL=\"postgresql:\u002F\u002Flocalhost\u002Fmyapp\"\n",[92,8278,8279],{"class":94,"line":6636},[92,8280,8281],{"class":102},"          echo \"Dev environment loaded!\"\n",[92,8283,8284,8286],{"class":94,"line":6836},[92,8285,6839],{"class":102},[92,8287,6030],{"class":199},[92,8289,8290],{"class":94,"line":6844},[92,8291,6629],{"class":199},[92,8293,8294],{"class":94,"line":6849},[92,8295,6069],{"class":199},[92,8297,8298],{"class":94,"line":6854},[92,8299,734],{"class":199},[18,8301,8302,8305],{},[30,8303,8304],{},"شركات حقيقية:"," Replit, Shopify, Tweag بيستخدموا ده لبيئات تطوير فورية قابلة لإعادة الإنتاج.",[77,8307,8309],{"id":8308},"سيرفرات-الإنتاج","سيرفرات الإنتاج",[18,8311,8312,8314],{},[30,8313,8113],{}," 50 سيرفر. واحد متضبط بشكل مختلف. بيشتغل بشكل مختلف. محدش عارف ليه.",[18,8316,8317,8319],{},[30,8318,8119],{}," إعداد السيرفر كله في ملف declarative معموله commit في Git.",[82,8321,8323],{"className":84,"code":8322,"language":86,"meta":87,"style":87},"nixos-rebuild switch --target-host api-prod-01\n",[89,8324,8325],{"__ignoreMap":87},[92,8326,8327,8330,8332,8335],{"class":94,"line":95},[92,8328,8329],{"class":98},"nixos-rebuild",[92,8331,7190],{"class":102},[92,8333,8334],{"class":106}," --target-host",[92,8336,8337],{"class":102}," api-prod-01\n",[18,8339,8340,8341,8344],{},"كل الـ 50 سيرفر ",[30,8342,8343],{},"متطابقين",". التغييرات متحكم فيها بالإصدارات. ارجع عن أي تغيير فورًا.",[77,8346,8348],{"id":8347},"الدوتفايلز-الشخصية-مع-home-manager","الدوتفايلز الشخصية مع Home Manager",[18,8350,8351,8353],{},[30,8352,8113],{}," تلات أجهزة بإعدادات مختلفة. المزامنة اليدوية مملة.",[18,8355,8356,8358],{},[30,8357,8119],{}," صرّح ببيئة المستخدم بتاعتك كلها.",[82,8360,8362],{"className":5998,"code":8361,"language":6000,"meta":87,"style":87},"{ pkgs, ... }: {\n  home.packages = with pkgs; [\n    neovim tmux git ripgrep fzf bat\n  ];\n\n  programs.git = {\n    enable = true;\n    userName = \"Your Name\";\n    userEmail = \"you@example.com\";\n  };\n\n  programs.zsh = {\n    enable = true;\n    shellAliases = {\n      ll = \"ls -la\";\n      gs = \"git status\";\n    };\n  };\n}\n",[89,8363,8364,8375,8393,8413,8417,8421,8435,8445,8457,8469,8473,8477,8490,8500,8509,8521,8533,8537,8541],{"__ignoreMap":87},[92,8365,8366,8369,8371,8373],{"class":94,"line":95},[92,8367,8368],{"class":199},"{ pkgs",[92,8370,6522],{"class":203},[92,8372,6525],{"class":203},[92,8374,6528],{"class":199},[92,8376,8377,8380,8382,8385,8387,8389,8391],{"class":94,"line":174},[92,8378,8379],{"class":98},"  home",[92,8381,485],{"class":199},[92,8383,8384],{"class":98},"packages",[92,8386,6024],{"class":203},[92,8388,6394],{"class":203},[92,8390,6397],{"class":952},[92,8392,6400],{"class":199},[92,8394,8395,8398,8401,8404,8407,8410],{"class":94,"line":248},[92,8396,8397],{"class":952},"    neovim",[92,8399,8400],{"class":952}," tmux",[92,8402,8403],{"class":952}," git",[92,8405,8406],{"class":952}," ripgrep",[92,8408,8409],{"class":952}," fzf",[92,8411,8412],{"class":952}," bat\n",[92,8414,8415],{"class":94,"line":262},[92,8416,6418],{"class":199},[92,8418,8419],{"class":94,"line":282},[92,8420,681],{"emptyLinePlaceholder":680},[92,8422,8423,8426,8428,8431,8433],{"class":94,"line":713},[92,8424,8425],{"class":98},"  programs",[92,8427,485],{"class":199},[92,8429,8430],{"class":98},"git",[92,8432,6024],{"class":203},[92,8434,972],{"class":199},[92,8436,8437,8439,8441,8443],{"class":94,"line":731},[92,8438,7073],{"class":98},[92,8440,6024],{"class":203},[92,8442,6027],{"class":106},[92,8444,6030],{"class":199},[92,8446,8447,8450,8452,8455],{"class":94,"line":1960},[92,8448,8449],{"class":98},"    userName",[92,8451,6024],{"class":203},[92,8453,8454],{"class":102}," \"Your Name\"",[92,8456,6030],{"class":199},[92,8458,8459,8462,8464,8467],{"class":94,"line":1999},[92,8460,8461],{"class":98},"    userEmail",[92,8463,6024],{"class":203},[92,8465,8466],{"class":102}," \"you@example.com\"",[92,8468,6030],{"class":199},[92,8470,8471],{"class":94,"line":2015},[92,8472,6069],{"class":199},[92,8474,8475],{"class":94,"line":2020},[92,8476,681],{"emptyLinePlaceholder":680},[92,8478,8479,8481,8483,8486,8488],{"class":94,"line":2025},[92,8480,8425],{"class":98},[92,8482,485],{"class":199},[92,8484,8485],{"class":98},"zsh",[92,8487,6024],{"class":203},[92,8489,972],{"class":199},[92,8491,8492,8494,8496,8498],{"class":94,"line":2034},[92,8493,7073],{"class":98},[92,8495,6024],{"class":203},[92,8497,6027],{"class":106},[92,8499,6030],{"class":199},[92,8501,8502,8505,8507],{"class":94,"line":2051},[92,8503,8504],{"class":98},"    shellAliases",[92,8506,6024],{"class":203},[92,8508,972],{"class":199},[92,8510,8511,8514,8516,8519],{"class":94,"line":2070},[92,8512,8513],{"class":98},"      ll",[92,8515,6024],{"class":203},[92,8517,8518],{"class":102}," \"ls -la\"",[92,8520,6030],{"class":199},[92,8522,8523,8526,8528,8531],{"class":94,"line":6636},[92,8524,8525],{"class":98},"      gs",[92,8527,6024],{"class":203},[92,8529,8530],{"class":102}," \"git status\"",[92,8532,6030],{"class":199},[92,8534,8535],{"class":94,"line":6836},[92,8536,7110],{"class":199},[92,8538,8539],{"class":94,"line":6844},[92,8540,6069],{"class":199},[92,8542,8543],{"class":94,"line":6849},[92,8544,734],{"class":199},[18,8546,8547,8548,8551],{},"لابتوب جديد؟ نفّذ شوية أوامر. ",[30,8549,8550],{},"بعد خمس دقائق","، كل الإعداد بيتسترجَع زي الفل.",[63,8553],{},[11,8555,8557],{"id":8556},"أدوات-متقدمة","أدوات متقدمة",[77,8559,8561],{"id":8560},"الـ-flakes-packagejson-لنظامك","الـ Flakes: package.json لنظامك",[18,8563,8564,8565,5893,8567,8569,8570,485],{},"الـ Flakes بالظبط زي ",[89,8566,775],{},[89,8568,6651],{}," متدمجين — بس لـ",[30,8571,8572],{},"بيئة التطوير بتاعتك كلها",[18,8574,8575,8576,8579],{},"Nix التقليدي: ",[89,8577,8578],{},"import \u003Cnixpkgs>"," بيستورد أي نسخة موجودة على نظامك. زميلك ممكن يكون عنده نسخة مختلفة. الـ CI ممكن يكون عنده تالتة.",[18,8581,8582,5889,8585,8587],{},[30,8583,8584],{},"الـ Flakes بيحلوا ده:",[89,8586,7795],{}," بيثبّت النسخ بالضبط.",[82,8589,8593],{"className":8590,"code":8591,"language":8592,"meta":87,"style":87},"language-json shiki shiki-themes github-light github-dark","{\n  \"nodes\": {\n    \"nixpkgs\": {\n      \"locked\": {\n        \"lastModified\": 1704067270,\n        \"narHash\": \"sha256-...\",\n        \"rev\": \"63678e9f3d3afecfeafa0acead6239cdb54055e4\"\n      }\n    }\n  }\n}\n","json",[89,8594,8595,8599,8607,8614,8621,8634,8646,8656,8661,8665,8670],{"__ignoreMap":87},[92,8596,8597],{"class":94,"line":95},[92,8598,1756],{"class":199},[92,8600,8601,8604],{"class":94,"line":174},[92,8602,8603],{"class":106},"  \"nodes\"",[92,8605,8606],{"class":199},": {\n",[92,8608,8609,8612],{"class":94,"line":248},[92,8610,8611],{"class":106},"    \"nixpkgs\"",[92,8613,8606],{"class":199},[92,8615,8616,8619],{"class":94,"line":262},[92,8617,8618],{"class":106},"      \"locked\"",[92,8620,8606],{"class":199},[92,8622,8623,8626,8629,8632],{"class":94,"line":282},[92,8624,8625],{"class":106},"        \"lastModified\"",[92,8627,8628],{"class":199},": ",[92,8630,8631],{"class":106},"1704067270",[92,8633,1767],{"class":199},[92,8635,8636,8639,8641,8644],{"class":94,"line":713},[92,8637,8638],{"class":106},"        \"narHash\"",[92,8640,8628],{"class":199},[92,8642,8643],{"class":102},"\"sha256-...\"",[92,8645,1767],{"class":199},[92,8647,8648,8651,8653],{"class":94,"line":731},[92,8649,8650],{"class":106},"        \"rev\"",[92,8652,8628],{"class":199},[92,8654,8655],{"class":102},"\"63678e9f3d3afecfeafa0acead6239cdb54055e4\"\n",[92,8657,8658],{"class":94,"line":1960},[92,8659,8660],{"class":199},"      }\n",[92,8662,8663],{"class":94,"line":1999},[92,8664,1089],{"class":199},[92,8666,8667],{"class":94,"line":2015},[92,8668,8669],{"class":199},"  }\n",[92,8671,8672],{"class":94,"line":2020},[92,8673,734],{"class":199},[18,8675,8676,8679,8680,8682,8683],{},[30,8677,8678],{},"النتيجة:"," نفس الـ ",[89,8681,7795],{}," = بيئة متطابقة في كل مكان. ",[30,8684,8685],{},"مفيش مفاجآت. أبدًا.",[15,8687,8688],{},[18,8689,8690],{},"الـ Flakes لسه متسطّر عليها \"تجريبي\" بس مستخدمة على نطاق واسع في الإنتاج. كوميونتي Nix بيعتبروها مستقرة فعليًا بعد سنين مع تغييرات تكسيرية ضئيلة.",[77,8692,8694],{"id":8693},"home-manager-تحكم-في-إصدارات-مساحة-عملك","Home Manager: تحكم في إصدارات مساحة عملك",[18,8696,8697,8698,8701],{},"إدير بيئة المستخدم بتاعتك كلها بطريقة declarative. مش بس الحزم — ",[30,8699,8700],{},"كل حاجة",". إعدادات المحرر، الـ shell aliases، إعدادات Git، مفاتيح SSH.",[18,8703,8704,8705,8708,8709,8712],{},"غيّرت إعداداتك؟ ",[89,8706,8707],{},"home-manager switch"," بتطبقها فورًا. محبّتهاش؟ ",[89,8710,8711],{},"home-manager switch --rollback"," بترجّعها.",[18,8714,8715],{},[30,8716,8717],{},"ده حرفيًا تحكم في إصدارات مساحة عملك كلها.",[63,8719],{},[11,8721,8723],{"id":8722},"الجانب-المظلم-تحديات-صريحة","الجانب المظلم: تحديات صريحة",[18,8725,8726],{},"يلا نكون واقعيين مع المشاكل.",[77,8728,8730],{"id":8729},"منحنى-التعلم-وحش","منحنى التعلم وحش",[15,8732,8733,8739,8750],{},[18,8734,8735,8738],{},[30,8736,8737],{},"فحص الواقع:"," Nix واحد من أشد منحنيات التعلم حدة في لينكس.",[47,8740,8741,8744,8747],{},[50,8742,8743],{},"الأسبوع الأول: \"إيه الـ syntax ده؟\"",[50,8745,8746],{},"الشهر الأول: \"أظن إني بدأت أفهمها... يمكن\"",[50,8748,8749],{},"أول ست شهور: \"دلوقتي أنا فاهمها فعلاً\"",[18,8751,8752,8753],{},"هتصدم في حيطة. تحبط. تسأل نفسك لو كانت تستاهل. أنا عملت كده بجد. قضيت ويك-إند كامل بتصليح ليه الـ shell بتاعي مش بيحمّل صح. طلع إني نسيت semicolon. ",[30,8754,8755],{},"ده طبيعي.",[77,8757,8759],{"id":8758},"التوثيق-متشتت","التوثيق متشتت",[18,8761,8762],{},"مفيش مصدر حقيقة واحد. المعلومات متفرقة. الأمثلة مش دايمًا شغالة مع النسخ الحالية. هتقضي ساعات بتصليح حاجة توثيق أحسن كان ممكن يحلها في دقائق.",[77,8764,8766],{"id":8765},"الأيكوسيستم-أصغر","الأيكوسيستم أصغر",[18,8768,8769],{},"أوبونتو عندها ملايين المستخدمين. NixOS؟ كوميونتي أصغر بكتير.",[18,8771,8772],{},"عمليًا، ده بيبان كده:",[47,8774,8775,8778,8781,8784],{},[50,8776,8777],{},"إجابات أقل على Stack Overflow",[50,8779,8780],{},"دعم شركات أقل",[50,8782,8783],{},"الجيمنج أصعب (وإن كان بيتحسن)",[50,8785,8786],{},"توافق الهاردوير ممكن يكون حساس",[77,8788,8790],{"id":8789},"امتى-متستخدمش-nixos","امتى متستخدمش NixOS",[18,8792,8793],{},[30,8794,8795],{},"متستخدمش NixOS لو:",[47,8797,8798,8804,8810,8816],{},[50,8799,8800,8803],{},[30,8801,8802],{},"إنت جديد على لينكس"," — ابدأ بأوبونتو أو فيدورا. اتعلم الأساسيات الأول.",[50,8805,8806,8809],{},[30,8807,8808],{},"محتاج جيمنج \"بيشتغل بس\""," — Pop!_OS أو آرك مع Steam هيكونوا أسلس.",[50,8811,8812,8815],{},[30,8813,8814],{},"عندك deadlines ضيقة"," — متتعلمش NixOS وإنت بتبني أنظمة إنتاج.",[50,8817,8818,8821],{},[30,8819,8820],{},"فريقك مش مقتنع"," — لو إنت الوحيد اللي مستخدم Nix، إنت بتعمل جزر منعزلة.",[77,8823,8825],{"id":8824},"أوقات-البناء-ممكن-تكون-مؤلمة","أوقات البناء ممكن تكون مؤلمة",[18,8827,8828],{},"أول بناء ممكن ياخد وقت طويل أوي. تحديث نظامك ممكن ياخد 30 دقيقة لو حاجات كتير اتغيّرت. الكاش الباينري بيساعد، بس التجربة الأولى وحشة. نصيحة محترف: متبدأش إعادة بناء للنظام قدام اجتماع.",[63,8830],{},[11,8832,8834],{"id":8833},"ابدأ-بنفسك","ابدأ بنفسك",[77,8836,8838],{"id":8837},"خطوة-1-ثبّت-nix-مش-nixos","خطوة 1: ثبّت Nix (مش NixOS)",[18,8840,8841,8842,8845],{},"ابدأ بـ",[30,8843,8844],{},"باكيدج مانيجر Nix بس"," على نظامك الحالي. متجزّرش فورًا في NixOS كاملة.",[18,8847,8848,8851],{},[30,8849,8850],{},"المثبّت الموصى به"," (بيفعّل الـ Flakes افتراضيًا):",[82,8853,8855],{"className":84,"code":8854,"language":86,"meta":87,"style":87},"curl --proto '=https' --tlsv1.2 -sSf -L https:\u002F\u002Finstall.determinate.systems\u002Fnix | sh -s -- install\n",[89,8856,8857],{"__ignoreMap":87},[92,8858,8859,8861,8864,8867,8870,8873,8876,8879,8881,8884,8886,8889],{"class":94,"line":95},[92,8860,210],{"class":98},[92,8862,8863],{"class":106}," --proto",[92,8865,8866],{"class":102}," '=https'",[92,8868,8869],{"class":106}," --tlsv1.2",[92,8871,8872],{"class":106}," -sSf",[92,8874,8875],{"class":106}," -L",[92,8877,8878],{"class":102}," https:\u002F\u002Finstall.determinate.systems\u002Fnix",[92,8880,219],{"class":203},[92,8882,8883],{"class":98}," sh",[92,8885,213],{"class":106},[92,8887,8888],{"class":106}," --",[92,8890,8891],{"class":102}," install\n",[18,8893,8894],{},"اتأكد:",[82,8896,8898],{"className":84,"code":8897,"language":86,"meta":87,"style":87},"nix --version\n",[89,8899,8900],{"__ignoreMap":87},[92,8901,8902,8904],{"class":94,"line":95},[92,8903,6000],{"class":98},[92,8905,8906],{"class":106}," --version\n",[77,8908,8910],{"id":8909},"خطوة-2-جرّبها","خطوة 2: جرّبها",[82,8912,8914],{"className":84,"code":8913,"language":86,"meta":87,"style":87},"# جرّب cowsay بشكل مؤقت\nnix shell nixpkgs#cowsay\ncowsay \"Hello Nix!\"\n\n# ثبّتها بشكل دائم\nnix profile install nixpkgs#firefox\n",[89,8915,8916,8921,8931,8939,8943,8948],{"__ignoreMap":87},[92,8917,8918],{"class":94,"line":95},[92,8919,8920],{"class":327},"# جرّب cowsay بشكل مؤقت\n",[92,8922,8923,8925,8928],{"class":94,"line":174},[92,8924,6000],{"class":98},[92,8926,8927],{"class":102}," shell",[92,8929,8930],{"class":102}," nixpkgs#cowsay\n",[92,8932,8933,8936],{"class":94,"line":248},[92,8934,8935],{"class":98},"cowsay",[92,8937,8938],{"class":102}," \"Hello Nix!\"\n",[92,8940,8941],{"class":94,"line":262},[92,8942,681],{"emptyLinePlaceholder":680},[92,8944,8945],{"class":94,"line":282},[92,8946,8947],{"class":327},"# ثبّتها بشكل دائم\n",[92,8949,8950,8952,8955,8957],{"class":94,"line":713},[92,8951,6000],{"class":98},[92,8953,8954],{"class":102}," profile",[92,8956,129],{"class":102},[92,8958,8959],{"class":102}," nixpkgs#firefox\n",[77,8961,8963],{"id":8962},"خطوة-3-اعمل-أول-بيئة-تطوير-ليك","خطوة 3: اعمل أول بيئة تطوير ليك",[82,8965,8967],{"className":5998,"code":8966,"language":6000,"meta":87,"style":87},"{\n  description = \"My first Nix environment\";\n  inputs.nixpkgs.url = \"github:NixOS\u002Fnixpkgs\u002Fnixos-24.11\";\n\n  outputs = { nixpkgs, ... }: {\n    devShells.x86_64-linux.default =\n      let pkgs = nixpkgs.legacyPackages.x86_64-linux;\n      in pkgs.mkShell {\n        buildInputs = with pkgs; [ nodejs_24 python311 ];\n      };\n  };\n}\n",[89,8968,8969,8973,8984,9002,9006,9020,9034,9054,9066,9084,9088,9092],{"__ignoreMap":87},[92,8970,8971],{"class":94,"line":95},[92,8972,1756],{"class":199},[92,8974,8975,8977,8979,8982],{"class":94,"line":174},[92,8976,6476],{"class":98},[92,8978,6024],{"class":203},[92,8980,8981],{"class":102}," \"My first Nix environment\"",[92,8983,6030],{"class":199},[92,8985,8986,8988,8990,8992,8994,8996,8998,9000],{"class":94,"line":248},[92,8987,6488],{"class":98},[92,8989,485],{"class":199},[92,8991,6493],{"class":98},[92,8993,485],{"class":199},[92,8995,6498],{"class":98},[92,8997,6024],{"class":203},[92,8999,6503],{"class":102},[92,9001,6030],{"class":199},[92,9003,9004],{"class":94,"line":262},[92,9005,681],{"emptyLinePlaceholder":680},[92,9007,9008,9010,9012,9014,9016,9018],{"class":94,"line":282},[92,9009,6514],{"class":98},[92,9011,6024],{"class":203},[92,9013,6519],{"class":199},[92,9015,6522],{"class":203},[92,9017,6525],{"class":203},[92,9019,6528],{"class":199},[92,9021,9022,9024,9026,9028,9030,9032],{"class":94,"line":713},[92,9023,6533],{"class":98},[92,9025,485],{"class":199},[92,9027,6538],{"class":98},[92,9029,485],{"class":199},[92,9031,6543],{"class":98},[92,9033,6546],{"class":203},[92,9035,9036,9038,9040,9042,9044,9046,9048,9050,9052],{"class":94,"line":731},[92,9037,6551],{"class":203},[92,9039,6397],{"class":98},[92,9041,6024],{"class":203},[92,9043,6558],{"class":952},[92,9045,485],{"class":203},[92,9047,6563],{"class":952},[92,9049,485],{"class":203},[92,9051,6538],{"class":952},[92,9053,6030],{"class":199},[92,9055,9056,9058,9060,9062,9064],{"class":94,"line":1960},[92,9057,6574],{"class":203},[92,9059,6397],{"class":952},[92,9061,485],{"class":203},[92,9063,6382],{"class":952},[92,9065,972],{"class":199},[92,9067,9068,9070,9072,9074,9076,9078,9080,9082],{"class":94,"line":1999},[92,9069,6587],{"class":98},[92,9071,6024],{"class":203},[92,9073,6394],{"class":203},[92,9075,6397],{"class":952},[92,9077,7344],{"class":199},[92,9079,7347],{"class":952},[92,9081,8241],{"class":952},[92,9083,7353],{"class":199},[92,9085,9086],{"class":94,"line":2015},[92,9087,6629],{"class":199},[92,9089,9090],{"class":94,"line":2020},[92,9091,6069],{"class":199},[92,9093,9094],{"class":94,"line":2025},[92,9095,734],{"class":199},[18,9097,9098],{},"استخدمها:",[82,9100,9102],{"className":84,"code":9101,"language":86,"meta":87,"style":87},"git init\ngit add flake.nix\nnix develop\n",[89,9103,9104,9111,9120],{"__ignoreMap":87},[92,9105,9106,9108],{"class":94,"line":95},[92,9107,8430],{"class":98},[92,9109,9110],{"class":102}," init\n",[92,9112,9113,9115,9117],{"class":94,"line":174},[92,9114,8430],{"class":98},[92,9116,947],{"class":102},[92,9118,9119],{"class":102}," flake.nix\n",[92,9121,9122,9124],{"class":94,"line":248},[92,9123,6000],{"class":98},[92,9125,9126],{"class":102}," develop\n",[18,9128,9129,9130],{},"بيئة تطوير مثالية. ",[30,9131,9132],{},"ده كل اللي فيه.",[77,9134,9136],{"id":9135},"خطوة-4-اتعلم-أكتر","خطوة 4: اتعلم أكتر",[47,9138,9139,9147,9155,9163],{},[50,9140,9141,9146],{},[386,9142,9145],{"href":9143,"rel":9144},"https:\u002F\u002Fzero-to-nix.com",[390],"zero-to-nix.com"," — أحسن دليل للمبتدئين. ابدأ من هنا.",[50,9148,9149,9154],{},[386,9150,9153],{"href":9151,"rel":9152},"https:\u002F\u002Fnix.dev",[390],"nix.dev"," — التيوتوريالات والدوكس الرسمية.",[50,9156,9157,9162],{},[386,9158,9161],{"href":9159,"rel":9160},"https:\u002F\u002Fwiki.nixos.org",[390],"NixOS Wiki"," — قاعدة المعرفة بتاعة الكوميونتي.",[50,9164,9165,9170],{},[386,9166,9169],{"href":9167,"rel":9168},"https:\u002F\u002Fgithub.com\u002Fsam0uly\u002Fsamouly-flake",[390],"إعدادي الكامل لـ NixOS"," — إعداد حقيقي بالـ Flakes و Home Manager.",[77,9172,9174],{"id":9173},"خطوة-5-فكّر-في-nixos-بعدين","خطوة 5: فكّر في NixOS بعدين",[18,9176,9177,9178,9181],{},"بعد ما تبقى مرتاح مع Nix لشوية أسابيع، جرّب NixOS في VM الأول. ",[30,9179,9180],{},"متستعجلش في الخطوة دي."," NixOS التزام.",[63,9183],{},[11,9185,9187],{"id":9186},"الخلاصة-هل-تستاهل-الـ-hype","الخلاصة: هل تستاهل الـ hype؟",[18,9189,9190],{},[30,9191,9192],{},"بصراحة؟ بيعتمد.",[77,9194,9196],{"id":9195},"إمتى-الـ-hype-حقيقي","إمتى الـ hype حقيقي",[18,9198,9199],{},"لو في يوم:",[47,9201,9202,9205,9208,9211],{},[50,9203,9204],{},"مضيّت ساعات بتصليح \"شغّالة على الجهاز بتاعي\"",[50,9206,9207],{},"ضيّعت ويك-إندات بسبب تحديثات مكسورة",[50,9209,9210],{},"تمنّيت تقدر تسافر بالزمن لحالة شغّالة",[50,9212,9213],{},"تعبت في إعادة نسخ البيئات عبر الفرق",[18,9215,9216,9217,9220,9221,9224,9225,9227,9228,485],{},"يبقى إيه، ",[30,9218,9219],{},"Nix ثورية",". إعادة الإنتاج ",[30,9222,9223],{},"بتشتغل فعلاً",". التراجعات الذرية ",[30,9226,9223],{},". الإعداد declarative ",[30,9229,9230],{},"بيشتغل فعلاً",[77,9232,9234],{"id":9233},"إمتى-الـ-hype-مش-هيخصك","إمتى الـ hype مش هيخصك",[18,9236,9237,9238,9241],{},"بس لو محتاج ديسكتوب مستقر بيشتغل بس وبتصرف نظر عن إعادة الإنتاج، يبقى الـ hype مش هيخصك. ",[30,9239,9240],{},"ودي حاجة تمام."," أوبونتو وفيدورا بيخدموا معظم الناس زي الفل.",[77,9243,9245],{"id":9244},"القيمة-الحقيقية","القيمة الحقيقية",[18,9247,9248,9249,9252],{},"Nix مش عن كونها موضة. هي عن ",[30,9250,9251],{},"الموثوقية عبر الرياضيات",". نظامك بيبقى دالة نقية: نفس المدخلات → نفس المخرجات، مضمون.",[18,9254,9255],{},"للفرق اللي بتبني أنظمة إنتاج أو بتطلب إعادة إنتاج صارمة، Nix بتقدم قيمة صعب تقيسها. الاستثمار الأول بيدفع أرباح يوميًا.",[15,9257,9258],{},[18,9259,9260],{},"متتبنّاش Nix عشانها موضة. تبنّيها عشانها بتحل مشاكل إنت فعلًا عندك.",[18,9262,9263],{},"جرّبها. اكسرها. اتعلم منها. بعدين قرر بنفسك. ده اللي عملته على أي حال.",[18,9265,9266],{},"أحسن حاجة؟ مع Nix، دايمًا تقدر ترجع.",[2283,9268,9269],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":87,"searchDepth":174,"depth":174,"links":9271},[9272,9273,9279,9284,9291,9297,9304,9309,9313,9320,9327],{"id":13,"depth":174,"text":13},{"id":5800,"depth":174,"text":5801,"children":9274},[9275,9276,9277,9278],{"id":5814,"depth":248,"text":5815},{"id":5935,"depth":248,"text":5936},{"id":6087,"depth":248,"text":6088},{"id":6119,"depth":248,"text":6120},{"id":6294,"depth":174,"text":6295,"children":9280},[9281,9282,9283],{"id":6304,"depth":248,"text":6305},{"id":6431,"depth":248,"text":6432},{"id":6659,"depth":248,"text":6660},{"id":6867,"depth":174,"text":6868,"children":9285},[9286,9287,9289,9290],{"id":6871,"depth":248,"text":6872},{"id":6917,"depth":248,"text":9288},"الـ \u002Fnix\u002Fstore: العزل على نطاق واسع",{"id":6975,"depth":248,"text":6976},{"id":7139,"depth":248,"text":7140},{"id":7204,"depth":174,"text":7205,"children":9292},[9293,9294,9295,9296],{"id":7208,"depth":248,"text":7209},{"id":7408,"depth":248,"text":7409},{"id":7503,"depth":248,"text":7504},{"id":7569,"depth":248,"text":7570},{"id":7771,"depth":174,"text":7772,"children":9298},[9299,9300,9301,9302,9303],{"id":7775,"depth":248,"text":7776},{"id":7807,"depth":248,"text":7808},{"id":7881,"depth":248,"text":7882},{"id":8054,"depth":248,"text":8055},{"id":8085,"depth":248,"text":8086},{"id":8103,"depth":174,"text":8104,"children":9305},[9306,9307,9308],{"id":8107,"depth":248,"text":8108},{"id":8308,"depth":248,"text":8309},{"id":8347,"depth":248,"text":8348},{"id":8556,"depth":174,"text":8557,"children":9310},[9311,9312],{"id":8560,"depth":248,"text":8561},{"id":8693,"depth":248,"text":8694},{"id":8722,"depth":174,"text":8723,"children":9314},[9315,9316,9317,9318,9319],{"id":8729,"depth":248,"text":8730},{"id":8758,"depth":248,"text":8759},{"id":8765,"depth":248,"text":8766},{"id":8789,"depth":248,"text":8790},{"id":8824,"depth":248,"text":8825},{"id":8833,"depth":174,"text":8834,"children":9321},[9322,9323,9324,9325,9326],{"id":8837,"depth":248,"text":8838},{"id":8909,"depth":248,"text":8910},{"id":8962,"depth":248,"text":8963},{"id":9135,"depth":248,"text":9136},{"id":9173,"depth":248,"text":9174},{"id":9186,"depth":174,"text":9187,"children":9328},[9329,9330,9331],{"id":9195,"depth":248,"text":9196},{"id":9233,"depth":248,"text":9234},{"id":9244,"depth":248,"text":9245},"2026-01-09","زهقت من \"شغّالة على الجهاز بتاعي\"؟ اكتشف إزاي Nix و NixOS بيحلوا جحيم الاعتماديات بإعدادات declarative و builds قابلة لإعادة الإنتاج. Docker بيلاقي Infrastructure as Code — بس هل ده ثوري ولا مجرد hype؟",{"tags":9335,"image":9339},[9336,9337,5045,9338,5048],"نيكس أو إس","نيكس","دوتفايلز","\u002Fnixos-post.png","\u002Fblog\u002Far\u002Fwhy_nix",{"title":5757,"description":9333},"blog\u002Far\u002Fwhy_nix","0rR4vppRHXhFHild7C6GTj2OTxZU1TQjfVZv4U692r0",{"id":9345,"title":9346,"body":9347,"date":9332,"description":12630,"extension":2325,"locale":4302,"meta":12631,"navigation":680,"path":5012,"seo":12635,"stem":12636,"__hash__":12637},"blog\u002Fblog\u002Fwhy_nix.md","Why NixOS and Nix, is it just hype?",{"type":8,"value":9348,"toc":12568},[9349,9351,9356,9362,9369,9372,9378,9381,9384,9386,9390,9399,9403,9414,9426,9438,9445,9450,9457,9462,9488,9493,9502,9506,9516,9519,9559,9562,9626,9636,9640,9649,9660,9669,9673,9676,9691,9701,9762,9765,9823,9826,9828,9832,9838,9842,9848,9853,9867,9880,9943,9949,9953,9963,9969,9981,10129,10147,10151,10158,10161,10171,10333,10339,10341,10345,10349,10364,10369,10374,10381,10390,10396,10402,10432,10439,10443,10450,10506,10513,10577,10585,10594,10598,10601,10620,10623,10628,10631,10645,10651,10653,10657,10661,10668,10673,10676,10679,10695,10700,10703,10705,10716,10724,10826,10835,10839,10919,10928,10932,10936,10947,10951,10962,10966,10977,10981,10992,10996,11007,11012,11023,11028,11170,11175,11177,11181,11185,11196,11211,11215,11218,11274,11280,11284,11290,11434,11440,11444,11456,11469,11473,11480,11485,11487,11491,11495,11501,11507,11677,11683,11687,11692,11697,11711,11717,11721,11726,11731,11895,11902,11904,11908,11912,11923,11929,11937,12007,12018,12023,12027,12034,12043,12048,12050,12054,12057,12061,12086,12090,12093,12097,12100,12103,12117,12121,12126,12152,12156,12159,12161,12165,12169,12176,12182,12212,12215,12225,12229,12272,12276,12406,12409,12433,12439,12443,12470,12474,12481,12483,12487,12492,12496,12499,12513,12530,12534,12541,12545,12552,12555,12560,12563,12566],[11,9350,2350],{"id":2349},[15,9352,9353],{},[18,9354,9355],{},"It works on my machine.",[18,9357,9358,9359,6363],{},"How many times have you heard this phrase? Or worse, how many times have you ",[30,9360,9361],{},"said it",[18,9363,9364,9365,9368],{},"Picture this: You're two months into a project. Everything runs perfectly on your laptop. You push to production and ",[30,9366,9367],{},"disaster strikes",". Wrong library version. Missing environment variable. Or your colleague just installed packages differently than you did.",[18,9370,9371],{},"The usual fix? Docker containers, virtual environments, documentation nobody reads, and hours of debugging. Been there way too many times.",[18,9373,9374,9375,485],{},"But there's a system that solves this at its core: ",[30,9376,9377],{},"NixOS and Nix",[18,9379,9380],{},"The question is: Is this another Linux trend, or is there something genuinely revolutionary here?",[18,9382,9383],{},"Let's find out.",[63,9385],{},[11,9387,9389],{"id":9388},"what-is-nix-and-nixos","What is Nix and NixOS?",[18,9391,9392,9393,9395,9396,9398],{},"Two things exist here: ",[30,9394,5807],{}," (the package manager) and ",[30,9397,4839],{}," (the operating system). You can use one without the other.",[77,9400,9402],{"id":9401},"nix-the-package-manager","Nix: The Package Manager",[18,9404,9405,9406,9409,9410,9413],{},"Nix builds packages in ",[30,9407,9408],{},"complete isolation"," from each other. If a package works on one machine, it ",[30,9411,9412],{},"will"," work on another. No exceptions.",[18,9415,9416,9417,9419,9420,9422,9423,5841],{},"Instead of dumping packages into ",[89,9418,5832],{}," like every other package manager, Nix stores everything in ",[89,9421,5836],{}," with a ",[30,9424,9425],{},"unique cryptographic hash",[82,9427,9428],{"className":84,"code":5844,"language":86,"meta":87,"style":87},[89,9429,9430,9434],{"__ignoreMap":87},[92,9431,9432],{"class":94,"line":95},[92,9433,5851],{"class":98},[92,9435,9436],{"class":94,"line":174},[92,9437,5856],{"class":98},[18,9439,9440,9441,9444],{},"That random string? It's a ",[30,9442,9443],{},"hash of everything"," used to build the package — source files, dependencies, compiler flags, all of it. Change anything, get a different hash, get a different package. I know, sounds nerdy but stick with me.",[18,9446,9447],{},[30,9448,9449],{},"The Nix Formula",[18,9451,9452,9453,9456],{},"Think of it as a ",[30,9454,9455],{},"deterministic build process"," where specific inputs always generate the exact same, immutable output:",[82,9458,9460],{"className":9459,"code":5879,"language":2095},[2093],[89,9461,5879],{"__ignoreMap":87},[47,9463,9464,9476],{},[50,9465,9466,5889,9468,5893,9470,5897,9472,5889,9474],{},[30,9467,5888],{},[89,9469,5892],{},[89,9471,5896],{},[30,9473,5900],{},[89,9475,5903],{},[50,9477,9478,5889,9480,5893,9482,5897,9484,5889,9486],{},[30,9479,5908],{},[89,9481,5892],{},[89,9483,5913],{},[30,9485,5900],{},[89,9487,5918],{},[18,9489,9490],{},[4425,9491,9492],{},"Even a tiny security patch in a dependency (like moving from OpenSSL 3.0 to 3.1) creates a completely new, isolated path. Your old version stays untouched, and the new one doesn't overwrite it.",[15,9494,9495],{},[18,9496,9497,9498,9501],{},"So yeah — Node 20 and Node 24 can coexist. Go 1.24 and 1.25 on the same system. Python 3.9 and 3.11 simultaneously. ",[30,9499,9500],{},"No conflicts. Ever."," Each project gets exactly what it needs.",[77,9503,9505],{"id":9504},"nixos-the-operating-system","NixOS: The Operating System",[18,9507,9508,9509,9512,9513,485],{},"NixOS extends this concept to your ",[30,9510,9511],{},"entire system",". Everything — kernel, services, packages, configs — lives in ",[30,9514,9515],{},"declarative files",[18,9517,9518],{},"Traditional approach (imperative):",[82,9520,9522],{"className":84,"code":9521,"language":86,"meta":87,"style":87},"sudo apt install nginx\nsudo systemctl enable nginx\n# manually edit configs\n# hope you documented this\n# pray nothing breaks\n",[89,9523,9524,9534,9544,9549,9554],{"__ignoreMap":87},[92,9525,9526,9528,9530,9532],{"class":94,"line":95},[92,9527,99],{"class":98},[92,9529,168],{"class":102},[92,9531,129],{"class":102},[92,9533,5965],{"class":102},[92,9535,9536,9538,9540,9542],{"class":94,"line":174},[92,9537,99],{"class":98},[92,9539,5972],{"class":102},[92,9541,5975],{"class":102},[92,9543,5965],{"class":102},[92,9545,9546],{"class":94,"line":248},[92,9547,9548],{"class":327},"# manually edit configs\n",[92,9550,9551],{"class":94,"line":262},[92,9552,9553],{"class":327},"# hope you documented this\n",[92,9555,9556],{"class":94,"line":282},[92,9557,9558],{"class":327},"# pray nothing breaks\n",[18,9560,9561],{},"NixOS approach (declarative):",[82,9563,9564],{"className":5998,"code":5999,"language":6000,"meta":87,"style":87},[89,9565,9566,9570,9588,9608,9618,9622],{"__ignoreMap":87},[92,9567,9568],{"class":94,"line":95},[92,9569,1756],{"class":199},[92,9571,9572,9574,9576,9578,9580,9582,9584,9586],{"class":94,"line":174},[92,9573,6011],{"class":98},[92,9575,485],{"class":199},[92,9577,6016],{"class":98},[92,9579,485],{"class":199},[92,9581,6021],{"class":98},[92,9583,6024],{"class":203},[92,9585,6027],{"class":106},[92,9587,6030],{"class":199},[92,9589,9590,9592,9594,9596,9598,9600,9602,9604,9606],{"class":94,"line":248},[92,9591,6011],{"class":98},[92,9593,485],{"class":199},[92,9595,6016],{"class":98},[92,9597,485],{"class":199},[92,9599,6043],{"class":98},[92,9601,485],{"class":199},[92,9603,6048],{"class":102},[92,9605,6024],{"class":203},[92,9607,972],{"class":199},[92,9609,9610,9612,9614,9616],{"class":94,"line":262},[92,9611,6057],{"class":98},[92,9613,6024],{"class":203},[92,9615,6062],{"class":102},[92,9617,6030],{"class":199},[92,9619,9620],{"class":94,"line":282},[92,9621,6069],{"class":199},[92,9623,9624],{"class":94,"line":713},[92,9625,734],{"class":199},[18,9627,9628,9629,9631,9632,9635],{},"Run ",[89,9630,6079],{}," and your system ",[30,9633,9634],{},"becomes"," that description. That's it.",[77,9637,9639],{"id":9638},"immutability-the-core-principle","Immutability: The Core Principle",[18,9641,3221,9642,9644,9645,9648],{},[89,9643,5836],{}," is ",[30,9646,9647],{},"read-only and immutable",". Nothing gets deleted or modified — Nix creates new versions and symlinks to them.",[18,9650,9651,9652,9655,9656,9659],{},"This is why rollbacks are ",[30,9653,9654],{},"instant",". Every system state you've ever had is still there. Something breaks? Reboot, select the previous generation, back to working in ",[30,9657,9658],{},"30 seconds",". I've saved my own setup more times than I'd like to admit this way.",[15,9661,9662],{},[18,9663,9664,9665,9668],{},"It's ",[30,9666,9667],{},"Git for your entire operating system",". Every change tracked. Every state recoverable. Time travel for your OS.",[77,9670,9672],{"id":9671},"garbage-collection-the-smart-cleanup","Garbage Collection: The Smart Cleanup",[18,9674,9675],{},"You're probably thinking: \"Won't my disk fill up?\"",[18,9677,9678,9681,9682,9684,9685,9688,9689,485],{},[30,9679,9680],{},"Traditional Distros:"," When you run ",[89,9683,6132],{},", packages are ",[30,9686,9687],{},"gone forever",". Want it back? Reinstall. Made a mistake? Too bad. Orphaned dependencies? Hunt them down manually with ",[89,9690,6140],{},[18,9692,9693,9696,9697,9700],{},[30,9694,9695],{},"Nix's Intelligence:"," Nothing gets deleted until you ",[30,9698,9699],{},"explicitly run garbage collection",". And even then, it only removes what's truly unreachable — nothing any generation or project depends on.",[82,9702,9704],{"className":84,"code":9703,"language":86,"meta":87,"style":87},"# Preview what would be deleted\nnix-collect-garbage --dry-run\n\n# Delete unreachable packages\nnix-collect-garbage\n\n# Delete old generations\nnix-collect-garbage -d\n\n# Delete generations older than 30 days\nnix-collect-garbage --delete-older-than 30d\n",[89,9705,9706,9711,9717,9721,9726,9730,9734,9739,9745,9749,9754],{"__ignoreMap":87},[92,9707,9708],{"class":94,"line":95},[92,9709,9710],{"class":327},"# Preview what would be deleted\n",[92,9712,9713,9715],{"class":94,"line":174},[92,9714,6165],{"class":98},[92,9716,6168],{"class":106},[92,9718,9719],{"class":94,"line":248},[92,9720,681],{"emptyLinePlaceholder":680},[92,9722,9723],{"class":94,"line":262},[92,9724,9725],{"class":327},"# Delete unreachable packages\n",[92,9727,9728],{"class":94,"line":282},[92,9729,6182],{"class":98},[92,9731,9732],{"class":94,"line":713},[92,9733,681],{"emptyLinePlaceholder":680},[92,9735,9736],{"class":94,"line":731},[92,9737,9738],{"class":327},"# Delete old generations\n",[92,9740,9741,9743],{"class":94,"line":1960},[92,9742,6165],{"class":98},[92,9744,6198],{"class":106},[92,9746,9747],{"class":94,"line":1999},[92,9748,681],{"emptyLinePlaceholder":680},[92,9750,9751],{"class":94,"line":2015},[92,9752,9753],{"class":327},"# Delete generations older than 30 days\n",[92,9755,9756,9758,9760],{"class":94,"line":2020},[92,9757,6165],{"class":98},[92,9759,6214],{"class":106},[92,9761,6217],{"class":102},[18,9763,9764],{},"Automate it in NixOS:",[82,9766,9767],{"className":5998,"code":6223,"language":6000,"meta":87,"style":87},[89,9768,9769,9773,9785,9795,9805,9815,9819],{"__ignoreMap":87},[92,9770,9771],{"class":94,"line":95},[92,9772,1756],{"class":199},[92,9774,9775,9777,9779,9781,9783],{"class":94,"line":174},[92,9776,6234],{"class":98},[92,9778,485],{"class":199},[92,9780,6239],{"class":98},[92,9782,6024],{"class":203},[92,9784,972],{"class":199},[92,9786,9787,9789,9791,9793],{"class":94,"line":248},[92,9788,6248],{"class":98},[92,9790,6024],{"class":203},[92,9792,6027],{"class":106},[92,9794,6030],{"class":199},[92,9796,9797,9799,9801,9803],{"class":94,"line":262},[92,9798,6259],{"class":98},[92,9800,6024],{"class":203},[92,9802,6264],{"class":102},[92,9804,6030],{"class":199},[92,9806,9807,9809,9811,9813],{"class":94,"line":282},[92,9808,6271],{"class":98},[92,9810,6024],{"class":203},[92,9812,6276],{"class":102},[92,9814,6030],{"class":199},[92,9816,9817],{"class":94,"line":713},[92,9818,6069],{"class":199},[92,9820,9821],{"class":94,"line":731},[92,9822,734],{"class":199},[18,9824,9825],{},"Your last month of generations stays safe while everything older gets cleaned automatically.",[63,9827],{},[11,9829,9831],{"id":9830},"the-real-problems-nix-solves","The Real Problems Nix Solves",[18,9833,9834,9835,485],{},"Managing development environments is painful. Let's talk about the actual problems you face ",[30,9836,9837],{},"daily",[77,9839,9841],{"id":9840},"version-juggling-nightmare","Version Juggling Nightmare",[18,9843,9844,9845,9847],{},"You're juggling three Node.js projects. One needs Node 20, another needs Node 22, the new microservice needs Node 24. You've got ",[89,9846,6311],{}," but you keep forgetting to switch versions and waste time debugging. (Ask me how I know.)",[18,9849,9850],{},[30,9851,9852],{},"The usual mess:",[47,9854,9855,9861,9864],{},[50,9856,9857,9858,9860],{},"Open terminal → forget ",[89,9859,6325],{}," → build fails",[50,9862,9863],{},"Install global package for Project A → breaks Project B",[50,9865,9866],{},"Spend Friday afternoon debugging \"but it worked yesterday\"",[18,9868,9869,9872,9873,9875,9876,9879],{},[30,9870,9871],{},"With Nix:"," Just ",[89,9874,646],{}," into a project directory. ",[30,9877,9878],{},"That's it",". Nix sees the config and loads the exact environment needed. Automatically.",[82,9881,9883],{"className":5998,"code":9882,"language":6000,"meta":87,"style":87},"# Project A - Node 20\n{ pkgs ? import \u003Cnixpkgs> {} }:\npkgs.mkShell {\n  buildInputs = with pkgs; [\n    nodejs_20\n    python311  # for native modules\n  ];\n}\n",[89,9884,9885,9890,9902,9912,9924,9928,9935,9939],{"__ignoreMap":87},[92,9886,9887],{"class":94,"line":95},[92,9888,9889],{"class":327},"# Project A - Node 20\n",[92,9891,9892,9894,9896,9898,9900],{"class":94,"line":174},[92,9893,6360],{"class":199},[92,9895,6363],{"class":203},[92,9897,6366],{"class":106},[92,9899,6369],{"class":102},[92,9901,6372],{"class":199},[92,9903,9904,9906,9908,9910],{"class":94,"line":248},[92,9905,6377],{"class":952},[92,9907,485],{"class":203},[92,9909,6382],{"class":952},[92,9911,972],{"class":199},[92,9913,9914,9916,9918,9920,9922],{"class":94,"line":262},[92,9915,6389],{"class":98},[92,9917,6024],{"class":203},[92,9919,6394],{"class":203},[92,9921,6397],{"class":952},[92,9923,6400],{"class":199},[92,9925,9926],{"class":94,"line":282},[92,9927,6405],{"class":952},[92,9929,9930,9932],{"class":94,"line":713},[92,9931,6410],{"class":952},[92,9933,9934],{"class":327},"  # for native modules\n",[92,9936,9937],{"class":94,"line":731},[92,9938,6418],{"class":199},[92,9940,9941],{"class":94,"line":1960},[92,9942,734],{"class":199},[18,9944,9945,9946,485],{},"Switch projects? Different Node version loads automatically. ",[30,9947,9948],{},"No thinking required",[77,9950,9952],{"id":9951},"works-on-my-machine-syndrome","\"Works on My Machine\" Syndrome",[18,9954,9955,9956,9958,9959,9962],{},"Your colleague pushes a TypeScript project. You clone it, run ",[89,9957,6438],{},", compilation ",[30,9960,9961],{},"fails",". Different TypeScript version. Missing build tool. Now you're debugging setup instead of coding.",[18,9964,9965,9968],{},[30,9966,9967],{},"The old way:"," Write documentation nobody reads. Debug the same issues with every new team member.",[18,9970,9971,9974,9975,9977,9978,485],{},[30,9972,9973],{},"The Nix way:"," Share a ",[89,9976,6458],{}," file. Run one command. Get the ",[30,9979,9980],{},"exact same setup",[82,9982,9983],{"className":5998,"code":6465,"language":6000,"meta":87,"style":87},[89,9984,9985,9989,9999,10017,10021,10035,10049,10069,10081,10093,10097,10105,10113,10117,10121,10125],{"__ignoreMap":87},[92,9986,9987],{"class":94,"line":95},[92,9988,1756],{"class":199},[92,9990,9991,9993,9995,9997],{"class":94,"line":174},[92,9992,6476],{"class":98},[92,9994,6024],{"class":203},[92,9996,6481],{"class":102},[92,9998,6030],{"class":199},[92,10000,10001,10003,10005,10007,10009,10011,10013,10015],{"class":94,"line":248},[92,10002,6488],{"class":98},[92,10004,485],{"class":199},[92,10006,6493],{"class":98},[92,10008,485],{"class":199},[92,10010,6498],{"class":98},[92,10012,6024],{"class":203},[92,10014,6503],{"class":102},[92,10016,6030],{"class":199},[92,10018,10019],{"class":94,"line":262},[92,10020,681],{"emptyLinePlaceholder":680},[92,10022,10023,10025,10027,10029,10031,10033],{"class":94,"line":282},[92,10024,6514],{"class":98},[92,10026,6024],{"class":203},[92,10028,6519],{"class":199},[92,10030,6522],{"class":203},[92,10032,6525],{"class":203},[92,10034,6528],{"class":199},[92,10036,10037,10039,10041,10043,10045,10047],{"class":94,"line":713},[92,10038,6533],{"class":98},[92,10040,485],{"class":199},[92,10042,6538],{"class":98},[92,10044,485],{"class":199},[92,10046,6543],{"class":98},[92,10048,6546],{"class":203},[92,10050,10051,10053,10055,10057,10059,10061,10063,10065,10067],{"class":94,"line":731},[92,10052,6551],{"class":203},[92,10054,6397],{"class":98},[92,10056,6024],{"class":203},[92,10058,6558],{"class":952},[92,10060,485],{"class":203},[92,10062,6563],{"class":952},[92,10064,485],{"class":203},[92,10066,6538],{"class":952},[92,10068,6030],{"class":199},[92,10070,10071,10073,10075,10077,10079],{"class":94,"line":1960},[92,10072,6574],{"class":203},[92,10074,6397],{"class":952},[92,10076,485],{"class":203},[92,10078,6382],{"class":952},[92,10080,972],{"class":199},[92,10082,10083,10085,10087,10089,10091],{"class":94,"line":1999},[92,10084,6587],{"class":98},[92,10086,6024],{"class":203},[92,10088,6394],{"class":203},[92,10090,6397],{"class":952},[92,10092,6400],{"class":199},[92,10094,10095],{"class":94,"line":2015},[92,10096,6600],{"class":952},[92,10098,10099,10101,10103],{"class":94,"line":2020},[92,10100,6605],{"class":952},[92,10102,485],{"class":203},[92,10104,6610],{"class":952},[92,10106,10107,10109,10111],{"class":94,"line":2025},[92,10108,6605],{"class":952},[92,10110,485],{"class":203},[92,10112,6619],{"class":952},[92,10114,10115],{"class":94,"line":2034},[92,10116,6624],{"class":199},[92,10118,10119],{"class":94,"line":2051},[92,10120,6629],{"class":199},[92,10122,10123],{"class":94,"line":2070},[92,10124,6069],{"class":199},[92,10126,10127],{"class":94,"line":6636},[92,10128,734],{"class":199},[15,10130,10131],{},[18,10132,10133,10134,10137,10138,5893,10140,10142,10143,10146],{},"Instead of writing instructions for how to build an environment, you're ",[30,10135,10136],{},"sharing the actual environment itself",". Like ",[89,10139,775],{},[89,10141,6651],{}," but for your ",[30,10144,10145],{},"entire development setup",", not just JavaScript packages.",[77,10148,10150],{"id":10149},"cicd-inconsistency-hell","CI\u002FCD Inconsistency Hell",[18,10152,10153,10154,10157],{},"Your Go project works locally. Push to CI? ",[30,10155,10156],{},"Fails",". Different environment variables. Slightly different Go version. Manual configuration from months ago nobody remembers.",[18,10159,10160],{},"You end up with three different behaviors: your machine, your coworker's machine, and CI.",[18,10162,10163,10166,10167,10170],{},[30,10164,10165],{},"Nix fixes this:"," The environment ",[30,10168,10169],{},"is code",". Same file, same environment everywhere.",[82,10172,10173],{"className":5998,"code":6683,"language":6000,"meta":87,"style":87},[89,10174,10175,10179,10189,10207,10211,10225,10239,10259,10271,10283,10287,10291,10295,10299,10307,10311,10315,10321,10325,10329],{"__ignoreMap":87},[92,10176,10177],{"class":94,"line":95},[92,10178,1756],{"class":199},[92,10180,10181,10183,10185,10187],{"class":94,"line":174},[92,10182,6476],{"class":98},[92,10184,6024],{"class":203},[92,10186,6698],{"class":102},[92,10188,6030],{"class":199},[92,10190,10191,10193,10195,10197,10199,10201,10203,10205],{"class":94,"line":248},[92,10192,6488],{"class":98},[92,10194,485],{"class":199},[92,10196,6493],{"class":98},[92,10198,485],{"class":199},[92,10200,6498],{"class":98},[92,10202,6024],{"class":203},[92,10204,6503],{"class":102},[92,10206,6030],{"class":199},[92,10208,10209],{"class":94,"line":262},[92,10210,681],{"emptyLinePlaceholder":680},[92,10212,10213,10215,10217,10219,10221,10223],{"class":94,"line":282},[92,10214,6514],{"class":98},[92,10216,6024],{"class":203},[92,10218,6519],{"class":199},[92,10220,6522],{"class":203},[92,10222,6525],{"class":203},[92,10224,6528],{"class":199},[92,10226,10227,10229,10231,10233,10235,10237],{"class":94,"line":713},[92,10228,6533],{"class":98},[92,10230,485],{"class":199},[92,10232,6538],{"class":98},[92,10234,485],{"class":199},[92,10236,6543],{"class":98},[92,10238,6546],{"class":203},[92,10240,10241,10243,10245,10247,10249,10251,10253,10255,10257],{"class":94,"line":731},[92,10242,6551],{"class":203},[92,10244,6397],{"class":98},[92,10246,6024],{"class":203},[92,10248,6558],{"class":952},[92,10250,485],{"class":203},[92,10252,6563],{"class":952},[92,10254,485],{"class":203},[92,10256,6538],{"class":952},[92,10258,6030],{"class":199},[92,10260,10261,10263,10265,10267,10269],{"class":94,"line":1960},[92,10262,6574],{"class":203},[92,10264,6397],{"class":952},[92,10266,485],{"class":203},[92,10268,6382],{"class":952},[92,10270,972],{"class":199},[92,10272,10273,10275,10277,10279,10281],{"class":94,"line":1999},[92,10274,6587],{"class":98},[92,10276,6024],{"class":203},[92,10278,6394],{"class":203},[92,10280,6397],{"class":952},[92,10282,6400],{"class":199},[92,10284,10285],{"class":94,"line":2015},[92,10286,6799],{"class":952},[92,10288,10289],{"class":94,"line":2020},[92,10290,6804],{"class":952},[92,10292,10293],{"class":94,"line":2025},[92,10294,6809],{"class":952},[92,10296,10297],{"class":94,"line":2034},[92,10298,6624],{"class":199},[92,10300,10301,10303,10305],{"class":94,"line":2051},[92,10302,6818],{"class":98},[92,10304,6024],{"class":203},[92,10306,6823],{"class":102},[92,10308,10309],{"class":94,"line":2070},[92,10310,6828],{"class":102},[92,10312,10313],{"class":94,"line":6636},[92,10314,6833],{"class":102},[92,10316,10317,10319],{"class":94,"line":6836},[92,10318,6839],{"class":102},[92,10320,6030],{"class":199},[92,10322,10323],{"class":94,"line":6844},[92,10324,6629],{"class":199},[92,10326,10327],{"class":94,"line":6849},[92,10328,6069],{"class":199},[92,10330,10331],{"class":94,"line":6854},[92,10332,734],{"class":199},[18,10334,10335,10336,10338],{},"This file goes in your repo. Everyone who uses it — local devs, CI, staging, production — gets the ",[30,10337,9980],{},". The inconsistency just disappears.",[63,10340],{},[11,10342,10344],{"id":10343},"how-does-nix-work-the-magic-behind","How Does Nix Work? The Magic Behind",[77,10346,10348],{"id":10347},"pure-functions-mathematical-reproducibility","Pure Functions: Mathematical Reproducibility",[18,10350,10351,10352,10355,10356,10359,10360,10363],{},"Nix treats every package as a ",[30,10353,10354],{},"pure function"," — a mathematical function where the same inputs ",[30,10357,10358],{},"always"," produce the ",[30,10361,10362],{},"exact"," same output.",[82,10365,10367],{"className":10366,"code":6891,"language":2095},[2093],[89,10368,6891],{"__ignoreMap":87},[15,10370,10371],{},[18,10372,10373],{},"Nix is designed around reproducibility. While not every package is guaranteed to be bit-for-bit reproducible today, the system enforces strict input purity — making non-reproducible builds the exception, not the rule.",[18,10375,10376,10377,10380],{},"Change ",[30,10378,10379],{},"anything"," in the inputs, get a different hash, get a different package.",[15,10382,10383],{},[18,10384,10385,10386,10389],{},"You literally can't accidentally break reproducibility. The system ",[30,10387,10388],{},"enforces it mathematically",". It's not a convention or a best practice — it's the only way the system works.",[77,10391,3221,10393,10395],{"id":10392},"the-nixstore-isolation-at-scale",[89,10394,5836],{},": Isolation at Scale",[18,10397,10398,10399,10401],{},"Every package lives in ",[89,10400,5836],{}," with a unique hash:",[82,10403,10404],{"className":84,"code":6929,"language":86,"meta":87,"style":87},[89,10405,10406,10420,10424,10428],{"__ignoreMap":87},[92,10407,10408,10410,10412,10414,10416,10418],{"class":94,"line":95},[92,10409,6936],{"class":98},[92,10411,6939],{"class":102},[92,10413,6942],{"class":102},[92,10415,219],{"class":203},[92,10417,6947],{"class":98},[92,10419,6950],{"class":102},[92,10421,10422],{"class":94,"line":174},[92,10423,6955],{"class":98},[92,10425,10426],{"class":94,"line":248},[92,10427,6960],{"class":98},[92,10429,10430],{"class":94,"line":262},[92,10431,6965],{"class":98},[18,10433,10434,10435,10438],{},"Those prefixes are ",[30,10436,10437],{},"content-addressable hashes"," representing everything used to build that package. This is why multiple versions coexist without conflicts.",[77,10440,10442],{"id":10441},"declarative-vs-imperative","Declarative vs Imperative",[18,10444,10445,10446,10449],{},"Traditional systems are ",[30,10447,10448],{},"imperative"," — you tell them what to do step by step:",[82,10451,10453],{"className":84,"code":10452,"language":86,"meta":87,"style":87},"# Steps that modify state\nsudo apt update\nsudo apt install nginx\nsudo systemctl enable nginx\nsudo vim \u002Fetc\u002Fnginx\u002Fnginx.conf\n# Hope you documented this\n# Pray it works on another machine\n",[89,10454,10455,10460,10468,10478,10488,10496,10501],{"__ignoreMap":87},[92,10456,10457],{"class":94,"line":95},[92,10458,10459],{"class":327},"# Steps that modify state\n",[92,10461,10462,10464,10466],{"class":94,"line":174},[92,10463,99],{"class":98},[92,10465,168],{"class":102},[92,10467,171],{"class":102},[92,10469,10470,10472,10474,10476],{"class":94,"line":248},[92,10471,99],{"class":98},[92,10473,168],{"class":102},[92,10475,129],{"class":102},[92,10477,5965],{"class":102},[92,10479,10480,10482,10484,10486],{"class":94,"line":262},[92,10481,99],{"class":98},[92,10483,5972],{"class":102},[92,10485,5975],{"class":102},[92,10487,5965],{"class":102},[92,10489,10490,10492,10494],{"class":94,"line":282},[92,10491,99],{"class":98},[92,10493,7028],{"class":102},[92,10495,7031],{"class":102},[92,10497,10498],{"class":94,"line":713},[92,10499,10500],{"class":327},"# Hope you documented this\n",[92,10502,10503],{"class":94,"line":731},[92,10504,10505],{"class":327},"# Pray it works on another machine\n",[18,10507,10508,10509,10512],{},"Nix is ",[30,10510,10511],{},"declarative"," — you describe what you want:",[82,10514,10515],{"className":5998,"code":7050,"language":6000,"meta":87,"style":87},[89,10516,10517,10521,10533,10543,10555,10565,10569,10573],{"__ignoreMap":87},[92,10518,10519],{"class":94,"line":95},[92,10520,1756],{"class":199},[92,10522,10523,10525,10527,10529,10531],{"class":94,"line":174},[92,10524,6011],{"class":98},[92,10526,485],{"class":199},[92,10528,6016],{"class":98},[92,10530,6024],{"class":203},[92,10532,972],{"class":199},[92,10534,10535,10537,10539,10541],{"class":94,"line":248},[92,10536,7073],{"class":98},[92,10538,6024],{"class":203},[92,10540,6027],{"class":106},[92,10542,6030],{"class":199},[92,10544,10545,10547,10549,10551,10553],{"class":94,"line":262},[92,10546,7084],{"class":98},[92,10548,485],{"class":199},[92,10550,7089],{"class":102},[92,10552,6024],{"class":203},[92,10554,972],{"class":199},[92,10556,10557,10559,10561,10563],{"class":94,"line":282},[92,10558,7098],{"class":98},[92,10560,6024],{"class":203},[92,10562,7103],{"class":102},[92,10564,6030],{"class":199},[92,10566,10567],{"class":94,"line":713},[92,10568,7110],{"class":199},[92,10570,10571],{"class":94,"line":731},[92,10572,6069],{"class":199},[92,10574,10575],{"class":94,"line":1960},[92,10576,734],{"class":199},[18,10578,9628,10579,9631,10581,10584],{},[89,10580,7123],{},[30,10582,10583],{},"transforms"," to match that description.",[15,10586,10587],{},[18,10588,10589,10590,10593],{},"Imperative is \"do this, then do that.\" Declarative is \"the system should look like this.\" One creates state. The other ",[30,10591,10592],{},"describes"," state.",[77,10595,10597],{"id":10596},"atomic-rollbacks","Atomic Rollbacks",[18,10599,10600],{},"When you update your system:",[431,10602,10603,10606,10612,10615],{},[50,10604,10605],{},"Nix builds new versions",[50,10607,10608,10609],{},"Creates a new ",[30,10610,10611],{},"generation",[50,10613,10614],{},"Symlinks to the new generation",[50,10616,10617],{},[30,10618,10619],{},"Keeps all old generations intact",[18,10621,10622],{},"Boot menu shows your history:",[82,10624,10626],{"className":10625,"code":7170,"language":2095},[2093],[89,10627,7170],{"__ignoreMap":87},[18,10629,10630],{},"Something broke? Boot into the previous generation or run:",[82,10632,10633],{"className":84,"code":7178,"language":86,"meta":87,"style":87},[89,10634,10635],{"__ignoreMap":87},[92,10636,10637,10639,10641,10643],{"class":94,"line":95},[92,10638,99],{"class":98},[92,10640,7187],{"class":102},[92,10642,7190],{"class":102},[92,10644,7193],{"class":106},[18,10646,10647,10650],{},[30,10648,10649],{},"30 seconds. Done."," No reinstalling packages, no configuration restoration, no database migrations. Just instant time travel.",[63,10652],{},[11,10654,10656],{"id":10655},"nix-vs-the-world-honest-comparisons","Nix vs The World: Honest Comparisons",[77,10658,10660],{"id":10659},"nix-vs-docker-complementary-not-competitors","Nix vs Docker: Complementary, Not Competitors",[18,10662,10663,10664,10667],{},"They solve ",[30,10665,10666],{},"different problems"," and work great together.",[18,10669,10670],{},[30,10671,10672],{},"Docker's Strength — Runtime Isolation",[18,10674,10675],{},"Packages your app with everything it needs. Ship the container, runs identically everywhere. Massive ecosystem.",[18,10677,10678],{},"Weaknesses:",[47,10680,10681,10684,10689,10692],{},[50,10682,10683],{},"Build process itself isn't reproducible",[50,10685,10686,10688],{},[89,10687,7237],{}," fetches latest versions (not deterministic)",[50,10690,10691],{},"Can only inherit from single base image",[50,10693,10694],{},"Build cache breaks between machines",[18,10696,10697],{},[30,10698,10699],{},"Nix's Strength — Build Reproducibility",[18,10701,10702],{},"Every package built from exact pinned dependencies. Cryptographic guarantees.",[18,10704,10678],{},[47,10706,10707,10710,10713],{},[50,10708,10709],{},"Steeper learning curve (not gonna sugarcoat it)",[50,10711,10712],{},"Smaller ecosystem",[50,10714,10715],{},"Less familiar to teams",[15,10717,10718],{},[18,10719,10720,10721,485],{},"Here's the cool part — you can use Nix to build ",[30,10722,10723],{},"reproducible Docker images",[82,10725,10726],{"className":5998,"code":7276,"language":6000,"meta":87,"style":87},[89,10727,10728,10740,10754,10764,10774,10792,10822],{"__ignoreMap":87},[92,10729,10730,10732,10734,10736,10738],{"class":94,"line":95},[92,10731,6360],{"class":199},[92,10733,6363],{"class":203},[92,10735,6366],{"class":106},[92,10737,6369],{"class":102},[92,10739,6372],{"class":199},[92,10741,10742,10744,10746,10748,10750,10752],{"class":94,"line":174},[92,10743,6377],{"class":952},[92,10745,485],{"class":203},[92,10747,7299],{"class":952},[92,10749,485],{"class":203},[92,10751,7304],{"class":952},[92,10753,972],{"class":199},[92,10755,10756,10758,10760,10762],{"class":94,"line":248},[92,10757,7311],{"class":98},[92,10759,6024],{"class":203},[92,10761,7316],{"class":102},[92,10763,6030],{"class":199},[92,10765,10766,10768,10770,10772],{"class":94,"line":262},[92,10767,7323],{"class":98},[92,10769,6024],{"class":203},[92,10771,7328],{"class":102},[92,10773,6030],{"class":199},[92,10775,10776,10778,10780,10782,10784,10786,10788,10790],{"class":94,"line":282},[92,10777,7335],{"class":98},[92,10779,6024],{"class":203},[92,10781,6394],{"class":203},[92,10783,6397],{"class":952},[92,10785,7344],{"class":199},[92,10787,7347],{"class":952},[92,10789,7350],{"class":952},[92,10791,7353],{"class":199},[92,10793,10794,10796,10798,10800,10802,10804,10806,10808,10810,10812,10814,10816,10818,10820],{"class":94,"line":713},[92,10795,7358],{"class":98},[92,10797,485],{"class":199},[92,10799,7363],{"class":98},[92,10801,6024],{"class":203},[92,10803,7368],{"class":199},[92,10805,7371],{"class":102},[92,10807,7374],{"class":102},[92,10809,6377],{"class":106},[92,10811,485],{"class":203},[92,10813,7347],{"class":106},[92,10815,7383],{"class":102},[92,10817,7386],{"class":102},[92,10819,7389],{"class":102},[92,10821,7353],{"class":199},[92,10823,10824],{"class":94,"line":731},[92,10825,734],{"class":199},[18,10827,10828,10829,10831,10832,10834],{},"Nix's reproducibility during build + Docker's portability for deployment. Companies like ",[30,10830,7401],{}," and ",[30,10833,7404],{}," do this.",[77,10836,10838],{"id":10837},"nix-vs-aptyumbrew-declarative-vs-imperative","Nix vs apt\u002Fyum\u002Fbrew: Declarative vs Imperative",[4624,10840,10841,10852],{},[4627,10842,10843],{},[4630,10844,10845,10848,10850],{},[4633,10846,10847],{},"Feature",[4633,10849,7421],{},[4633,10851,5807],{},[4640,10853,10854,10867,10880,10893,10906],{},[4630,10855,10856,10861,10864],{},[4645,10857,10858],{},[30,10859,10860],{},"Approach",[4645,10862,10863],{},"Imperative (do this, then that)",[4645,10865,10866],{},"Declarative (system should be this)",[4630,10868,10869,10874,10877],{},[4645,10870,10871],{},[30,10872,10873],{},"Reproducibility",[4645,10875,10876],{},"None — state drifts over time",[4645,10878,10879],{},"Perfect — same config = same system",[4630,10881,10882,10887,10890],{},[4645,10883,10884],{},[30,10885,10886],{},"Multiple Versions",[4645,10888,10889],{},"Conflicts",[4645,10891,10892],{},"Coexist peacefully",[4630,10894,10895,10900,10903],{},[4645,10896,10897],{},[30,10898,10899],{},"Rollbacks",[4645,10901,10902],{},"None",[4645,10904,10905],{},"Instant (30 seconds)",[4630,10907,10908,10913,10916],{},[4645,10909,10910],{},[30,10911,10912],{},"Version Control",[4645,10914,10915],{},"Manual documentation",[4645,10917,10918],{},"Git-based configs",[18,10920,10921,10922,7497,10925,485],{},"Traditional package managers ",[30,10923,10924],{},"modify global state",[30,10926,10927],{},"builds deterministic state",[77,10929,10931],{"id":10930},"nix-vs-traditional-linux-distros","Nix vs Traditional Linux Distros",[18,10933,10934],{},[30,10935,7509],{},[47,10937,10938,10941,10944],{},[50,10939,10940],{},"Best for: General use, \"just works\" experience",[50,10942,10943],{},"Strengths: Massive community, everything documented, stable LTS releases",[50,10945,10946],{},"Weaknesses: State drifts, updates break things, no atomic rollbacks",[18,10948,10949],{},[30,10950,7525],{},[47,10952,10953,10956,10959],{},[50,10954,10955],{},"Best for: Cutting-edge packages, DIY approach",[50,10957,10958],{},"Strengths: Latest software, extensive wiki, complete control",[50,10960,10961],{},"Weaknesses: Manual everything, breaks occasionally, no safety net",[18,10963,10964],{},[30,10965,114],{},[47,10967,10968,10971,10974],{},[50,10969,10970],{},"Best for: Modern tech, balanced approach",[50,10972,10973],{},"Strengths: Latest features, Red Hat backing, SELinux integration",[50,10975,10976],{},"Weaknesses: 6-month release cycle, traditional package management",[18,10978,10979],{},[30,10980,4839],{},[47,10982,10983,10986,10989],{},[50,10984,10985],{},"Best for: Reproducibility, declarative infrastructure",[50,10987,10988],{},"Strengths: Atomic rollbacks, perfect reproducibility, version control everything",[50,10990,10991],{},"Weaknesses: Steep learning curve, smaller community, weird syntax (seriously, functional programming in a config file?)",[77,10993,10995],{"id":10994},"nix-vs-language-specific-tools","Nix vs Language-Specific Tools",[18,10997,10998,10999,958,11001,958,11003,958,11005,485],{},"Every language has version managers: ",[89,11000,6311],{},[89,11002,7578],{},[89,11004,7581],{},[89,11006,7584],{},[18,11008,11009],{},[30,11010,11011],{},"Problems:",[47,11013,11014,11017,11020],{},[50,11015,11016],{},"Different tool for each language",[50,11018,11019],{},"Don't manage system dependencies",[50,11021,11022],{},"Inconsistent across projects",[18,11024,11025],{},[30,11026,11027],{},"Nix replaces all of them:",[82,11029,11030],{"className":5998,"code":7608,"language":6000,"meta":87,"style":87},[89,11031,11032,11036,11046,11060,11074,11094,11106,11118,11124,11130,11136,11142,11148,11154,11158,11162,11166],{"__ignoreMap":87},[92,11033,11034],{"class":94,"line":95},[92,11035,1756],{"class":199},[92,11037,11038,11040,11042,11044],{"class":94,"line":174},[92,11039,6476],{"class":98},[92,11041,6024],{"class":203},[92,11043,7623],{"class":102},[92,11045,6030],{"class":199},[92,11047,11048,11050,11052,11054,11056,11058],{"class":94,"line":248},[92,11049,6514],{"class":98},[92,11051,6024],{"class":203},[92,11053,6519],{"class":199},[92,11055,6522],{"class":203},[92,11057,6525],{"class":203},[92,11059,6528],{"class":199},[92,11061,11062,11064,11066,11068,11070,11072],{"class":94,"line":262},[92,11063,6533],{"class":98},[92,11065,485],{"class":199},[92,11067,6538],{"class":98},[92,11069,485],{"class":199},[92,11071,6543],{"class":98},[92,11073,6546],{"class":203},[92,11075,11076,11078,11080,11082,11084,11086,11088,11090,11092],{"class":94,"line":282},[92,11077,6551],{"class":203},[92,11079,6397],{"class":98},[92,11081,6024],{"class":203},[92,11083,6558],{"class":952},[92,11085,485],{"class":203},[92,11087,6563],{"class":952},[92,11089,485],{"class":203},[92,11091,6538],{"class":952},[92,11093,6030],{"class":199},[92,11095,11096,11098,11100,11102,11104],{"class":94,"line":713},[92,11097,6574],{"class":203},[92,11099,6397],{"class":952},[92,11101,485],{"class":203},[92,11103,6382],{"class":952},[92,11105,972],{"class":199},[92,11107,11108,11110,11112,11114,11116],{"class":94,"line":731},[92,11109,6587],{"class":98},[92,11111,6024],{"class":203},[92,11113,6394],{"class":203},[92,11115,6397],{"class":952},[92,11117,6400],{"class":199},[92,11119,11120,11122],{"class":94,"line":1960},[92,11121,7702],{"class":952},[92,11123,7705],{"class":327},[92,11125,11126,11128],{"class":94,"line":1999},[92,11127,7710],{"class":952},[92,11129,7713],{"class":327},[92,11131,11132,11134],{"class":94,"line":2015},[92,11133,7718],{"class":952},[92,11135,7721],{"class":327},[92,11137,11138,11140],{"class":94,"line":2020},[92,11139,7726],{"class":952},[92,11141,7729],{"class":327},[92,11143,11144,11146],{"class":94,"line":2025},[92,11145,7734],{"class":952},[92,11147,7737],{"class":327},[92,11149,11150,11152],{"class":94,"line":2034},[92,11151,7742],{"class":952},[92,11153,7745],{"class":327},[92,11155,11156],{"class":94,"line":2051},[92,11157,6624],{"class":199},[92,11159,11160],{"class":94,"line":2070},[92,11161,6629],{"class":199},[92,11163,11164],{"class":94,"line":6636},[92,11165,6069],{"class":199},[92,11167,11168],{"class":94,"line":6836},[92,11169,734],{"class":199},[18,11171,11172],{},[30,11173,11174],{},"One tool. All languages. System dependencies included. Completely reproducible.",[63,11176],{},[11,11178,11180],{"id":11179},"key-killer-features","Key Killer Features",[77,11182,11184],{"id":11183},"_1-true-reproducibility-not-just-claims","1. True Reproducibility (Not Just Claims)",[18,11186,11187,11188,11191,11192,11195],{},"Other systems ",[30,11189,11190],{},"claim"," reproducibility. Nix ",[30,11193,11194],{},"enforces"," it mathematically.",[15,11197,11198],{},[18,11199,11200,11201,7796,11203,11206,11207,11210],{},"Same ",[89,11202,7795],{},[30,11204,11205],{},"identical environment"," everywhere. Not \"similar.\" Not \"should work.\" ",[30,11208,11209],{},"Identical."," Cryptographically guaranteed.",[77,11212,11214],{"id":11213},"_2-time-travel-for-your-system","2. Time Travel for Your System",[18,11216,11217],{},"Every change creates a generation. Every generation is recoverable.",[82,11219,11221],{"className":84,"code":11220,"language":86,"meta":87,"style":87},"# List all generations\nnix-env --list-generations\n\n# Rollback to previous\nsudo nixos-rebuild switch --rollback\n\n# Switch to specific generation\nsudo nixos-rebuild switch --rollback 42\n",[89,11222,11223,11228,11234,11238,11243,11253,11257,11262],{"__ignoreMap":87},[92,11224,11225],{"class":94,"line":95},[92,11226,11227],{"class":327},"# List all generations\n",[92,11229,11230,11232],{"class":94,"line":174},[92,11231,7826],{"class":98},[92,11233,7829],{"class":106},[92,11235,11236],{"class":94,"line":248},[92,11237,681],{"emptyLinePlaceholder":680},[92,11239,11240],{"class":94,"line":262},[92,11241,11242],{"class":327},"# Rollback to previous\n",[92,11244,11245,11247,11249,11251],{"class":94,"line":282},[92,11246,99],{"class":98},[92,11248,7187],{"class":102},[92,11250,7190],{"class":102},[92,11252,7193],{"class":106},[92,11254,11255],{"class":94,"line":713},[92,11256,681],{"emptyLinePlaceholder":680},[92,11258,11259],{"class":94,"line":731},[92,11260,11261],{"class":327},"# Switch to specific generation\n",[92,11263,11264,11266,11268,11270,11272],{"class":94,"line":1960},[92,11265,99],{"class":98},[92,11267,7187],{"class":102},[92,11269,7190],{"class":102},[92,11271,7868],{"class":106},[92,11273,7871],{"class":106},[18,11275,11276,11277,11279],{},"Broke something? You're ",[30,11278,9658],{}," away from a working state. Always.",[77,11281,11283],{"id":11282},"_3-configuration-as-code-for-real","3. Configuration as Code (For Real)",[18,11285,11286,11287],{},"Not \"infrastructure as code\" aspirationally. ",[30,11288,11289],{},"Actually as code.",[82,11291,11293],{"className":5998,"code":11292,"language":6000,"meta":87,"style":87},"# This IS your system. Not a description. The actual state.\n{\n  services.nginx.enable = true;\n  services.postgresql.enable = true;\n  services.redis.enable = true;\n\n  networking.firewall.allowedTCPPorts = [ 80 443 ];\n\n  users.users.deploy = {\n    isNormalUser = true;\n    extraGroups = [ \"wheel\" ];\n  };\n}\n",[89,11294,11295,11300,11304,11322,11340,11358,11362,11384,11388,11404,11414,11426,11430],{"__ignoreMap":87},[92,11296,11297],{"class":94,"line":95},[92,11298,11299],{"class":327},"# This IS your system. Not a description. The actual state.\n",[92,11301,11302],{"class":94,"line":174},[92,11303,1756],{"class":199},[92,11305,11306,11308,11310,11312,11314,11316,11318,11320],{"class":94,"line":248},[92,11307,6011],{"class":98},[92,11309,485],{"class":199},[92,11311,6016],{"class":98},[92,11313,485],{"class":199},[92,11315,6021],{"class":98},[92,11317,6024],{"class":203},[92,11319,6027],{"class":106},[92,11321,6030],{"class":199},[92,11323,11324,11326,11328,11330,11332,11334,11336,11338],{"class":94,"line":262},[92,11325,6011],{"class":98},[92,11327,485],{"class":199},[92,11329,7929],{"class":98},[92,11331,485],{"class":199},[92,11333,6021],{"class":98},[92,11335,6024],{"class":203},[92,11337,6027],{"class":106},[92,11339,6030],{"class":199},[92,11341,11342,11344,11346,11348,11350,11352,11354,11356],{"class":94,"line":282},[92,11343,6011],{"class":98},[92,11345,485],{"class":199},[92,11347,7948],{"class":98},[92,11349,485],{"class":199},[92,11351,6021],{"class":98},[92,11353,6024],{"class":203},[92,11355,6027],{"class":106},[92,11357,6030],{"class":199},[92,11359,11360],{"class":94,"line":713},[92,11361,681],{"emptyLinePlaceholder":680},[92,11363,11364,11366,11368,11370,11372,11374,11376,11378,11380,11382],{"class":94,"line":731},[92,11365,7967],{"class":98},[92,11367,485],{"class":199},[92,11369,7972],{"class":98},[92,11371,485],{"class":199},[92,11373,7977],{"class":98},[92,11375,6024],{"class":203},[92,11377,7368],{"class":199},[92,11379,7984],{"class":106},[92,11381,7987],{"class":106},[92,11383,7353],{"class":199},[92,11385,11386],{"class":94,"line":1960},[92,11387,681],{"emptyLinePlaceholder":680},[92,11389,11390,11392,11394,11396,11398,11400,11402],{"class":94,"line":1999},[92,11391,7998],{"class":98},[92,11393,485],{"class":199},[92,11395,8003],{"class":98},[92,11397,485],{"class":199},[92,11399,8008],{"class":98},[92,11401,6024],{"class":203},[92,11403,972],{"class":199},[92,11405,11406,11408,11410,11412],{"class":94,"line":2015},[92,11407,8017],{"class":98},[92,11409,6024],{"class":203},[92,11411,6027],{"class":106},[92,11413,6030],{"class":199},[92,11415,11416,11418,11420,11422,11424],{"class":94,"line":2020},[92,11417,8028],{"class":98},[92,11419,6024],{"class":203},[92,11421,7368],{"class":199},[92,11423,8035],{"class":102},[92,11425,7353],{"class":199},[92,11427,11428],{"class":94,"line":2025},[92,11429,6069],{"class":199},[92,11431,11432],{"class":94,"line":2034},[92,11433,734],{"class":199},[18,11435,11436,11437,485],{},"Check this into Git. Every machine built from this file is ",[30,11438,11439],{},"identical",[77,11441,11443],{"id":11442},"_4-development-environments-that-actually-work","4. Development Environments That Actually Work",[18,11445,11446,11447,11449,11450,11452,11453,485],{},"Share a ",[89,11448,6458],{},". Everyone gets the ",[30,11451,10362],{}," environment. Not documentation. Not instructions. The ",[30,11454,11455],{},"actual environment",[15,11457,11458],{},[18,11459,11460,11461,5897,11463,5897,11465,11468],{},"New teammate? ",[89,11462,8075],{},[89,11464,8078],{},[30,11466,11467],{},"coding in 2 minutes",". No setup docs. No \"it works on my machine.\" Just instant productivity.",[77,11470,11472],{"id":11471},"_5-binary-caching","5. Binary Caching",[18,11474,11475,11476,11479],{},"Build once. Share everywhere. Teams using Cachix build packages ",[30,11477,11478],{},"once"," and everyone else downloads pre-built binaries.",[18,11481,11482,11483,485],{},"First developer builds? 20 minutes. Everyone else? ",[30,11484,9658],{},[63,11486],{},[11,11488,11490],{"id":11489},"real-world-use-cases","Real-World Use Cases",[77,11492,11494],{"id":11493},"development-environments","Development Environments",[18,11496,11497,11500],{},[30,11498,11499],{},"Problem:"," New developer spends two days installing tools, debugging versions, configuring environment.",[18,11502,11503,11506],{},[30,11504,11505],{},"Solution:"," One file, one command.",[82,11508,11509],{"className":5998,"code":8123,"language":6000,"meta":87,"style":87},[89,11510,11511,11515,11525,11543,11547,11561,11575,11595,11607,11619,11627,11633,11639,11643,11651,11655,11659,11665,11669,11673],{"__ignoreMap":87},[92,11512,11513],{"class":94,"line":95},[92,11514,1756],{"class":199},[92,11516,11517,11519,11521,11523],{"class":94,"line":174},[92,11518,6476],{"class":98},[92,11520,6024],{"class":203},[92,11522,8138],{"class":102},[92,11524,6030],{"class":199},[92,11526,11527,11529,11531,11533,11535,11537,11539,11541],{"class":94,"line":248},[92,11528,6488],{"class":98},[92,11530,485],{"class":199},[92,11532,6493],{"class":98},[92,11534,485],{"class":199},[92,11536,6498],{"class":98},[92,11538,6024],{"class":203},[92,11540,6503],{"class":102},[92,11542,6030],{"class":199},[92,11544,11545],{"class":94,"line":262},[92,11546,681],{"emptyLinePlaceholder":680},[92,11548,11549,11551,11553,11555,11557,11559],{"class":94,"line":282},[92,11550,6514],{"class":98},[92,11552,6024],{"class":203},[92,11554,6519],{"class":199},[92,11556,6522],{"class":203},[92,11558,6525],{"class":203},[92,11560,6528],{"class":199},[92,11562,11563,11565,11567,11569,11571,11573],{"class":94,"line":713},[92,11564,6533],{"class":98},[92,11566,485],{"class":199},[92,11568,6538],{"class":98},[92,11570,485],{"class":199},[92,11572,6543],{"class":98},[92,11574,6546],{"class":203},[92,11576,11577,11579,11581,11583,11585,11587,11589,11591,11593],{"class":94,"line":731},[92,11578,6551],{"class":203},[92,11580,6397],{"class":98},[92,11582,6024],{"class":203},[92,11584,6558],{"class":952},[92,11586,485],{"class":203},[92,11588,6563],{"class":952},[92,11590,485],{"class":203},[92,11592,6538],{"class":952},[92,11594,6030],{"class":199},[92,11596,11597,11599,11601,11603,11605],{"class":94,"line":1960},[92,11598,6574],{"class":203},[92,11600,6397],{"class":952},[92,11602,485],{"class":203},[92,11604,6382],{"class":952},[92,11606,972],{"class":199},[92,11608,11609,11611,11613,11615,11617],{"class":94,"line":1999},[92,11610,6587],{"class":98},[92,11612,6024],{"class":203},[92,11614,6394],{"class":203},[92,11616,6397],{"class":952},[92,11618,6400],{"class":199},[92,11620,11621,11623,11625],{"class":94,"line":2015},[92,11622,7702],{"class":952},[92,11624,8241],{"class":952},[92,11626,8244],{"class":952},[92,11628,11629,11631],{"class":94,"line":2020},[92,11630,7734],{"class":952},[92,11632,8251],{"class":952},[92,11634,11635,11637],{"class":94,"line":2025},[92,11636,8256],{"class":952},[92,11638,8259],{"class":952},[92,11640,11641],{"class":94,"line":2034},[92,11642,6624],{"class":199},[92,11644,11645,11647,11649],{"class":94,"line":2051},[92,11646,6818],{"class":98},[92,11648,6024],{"class":203},[92,11650,6823],{"class":102},[92,11652,11653],{"class":94,"line":2070},[92,11654,8276],{"class":102},[92,11656,11657],{"class":94,"line":6636},[92,11658,8281],{"class":102},[92,11660,11661,11663],{"class":94,"line":6836},[92,11662,6839],{"class":102},[92,11664,6030],{"class":199},[92,11666,11667],{"class":94,"line":6844},[92,11668,6629],{"class":199},[92,11670,11671],{"class":94,"line":6849},[92,11672,6069],{"class":199},[92,11674,11675],{"class":94,"line":6854},[92,11676,734],{"class":199},[18,11678,11679,11682],{},[30,11680,11681],{},"Real companies:"," Replit, Shopify, Tweag use this for instant reproducible dev environments.",[77,11684,11686],{"id":11685},"production-servers","Production Servers",[18,11688,11689,11691],{},[30,11690,11499],{}," 50 servers. One configured differently. Behaves differently. Nobody knows why.",[18,11693,11694,11696],{},[30,11695,11505],{}," Entire server config in declarative file checked into Git.",[82,11698,11699],{"className":84,"code":8322,"language":86,"meta":87,"style":87},[89,11700,11701],{"__ignoreMap":87},[92,11702,11703,11705,11707,11709],{"class":94,"line":95},[92,11704,8329],{"class":98},[92,11706,7190],{"class":102},[92,11708,8334],{"class":106},[92,11710,8337],{"class":102},[18,11712,11713,11714,11716],{},"All 50 servers ",[30,11715,11439],{},". Changes version-controlled. Rollback any change instantly.",[77,11718,11720],{"id":11719},"personal-dotfiles-with-home-manager","Personal Dotfiles with Home Manager",[18,11722,11723,11725],{},[30,11724,11499],{}," Three machines with different configs. Syncing manually is tedious.",[18,11727,11728,11730],{},[30,11729,11505],{}," Declare your entire user environment.",[82,11732,11733],{"className":5998,"code":8361,"language":6000,"meta":87,"style":87},[89,11734,11735,11745,11761,11775,11779,11783,11795,11805,11815,11825,11829,11833,11845,11855,11863,11873,11883,11887,11891],{"__ignoreMap":87},[92,11736,11737,11739,11741,11743],{"class":94,"line":95},[92,11738,8368],{"class":199},[92,11740,6522],{"class":203},[92,11742,6525],{"class":203},[92,11744,6528],{"class":199},[92,11746,11747,11749,11751,11753,11755,11757,11759],{"class":94,"line":174},[92,11748,8379],{"class":98},[92,11750,485],{"class":199},[92,11752,8384],{"class":98},[92,11754,6024],{"class":203},[92,11756,6394],{"class":203},[92,11758,6397],{"class":952},[92,11760,6400],{"class":199},[92,11762,11763,11765,11767,11769,11771,11773],{"class":94,"line":248},[92,11764,8397],{"class":952},[92,11766,8400],{"class":952},[92,11768,8403],{"class":952},[92,11770,8406],{"class":952},[92,11772,8409],{"class":952},[92,11774,8412],{"class":952},[92,11776,11777],{"class":94,"line":262},[92,11778,6418],{"class":199},[92,11780,11781],{"class":94,"line":282},[92,11782,681],{"emptyLinePlaceholder":680},[92,11784,11785,11787,11789,11791,11793],{"class":94,"line":713},[92,11786,8425],{"class":98},[92,11788,485],{"class":199},[92,11790,8430],{"class":98},[92,11792,6024],{"class":203},[92,11794,972],{"class":199},[92,11796,11797,11799,11801,11803],{"class":94,"line":731},[92,11798,7073],{"class":98},[92,11800,6024],{"class":203},[92,11802,6027],{"class":106},[92,11804,6030],{"class":199},[92,11806,11807,11809,11811,11813],{"class":94,"line":1960},[92,11808,8449],{"class":98},[92,11810,6024],{"class":203},[92,11812,8454],{"class":102},[92,11814,6030],{"class":199},[92,11816,11817,11819,11821,11823],{"class":94,"line":1999},[92,11818,8461],{"class":98},[92,11820,6024],{"class":203},[92,11822,8466],{"class":102},[92,11824,6030],{"class":199},[92,11826,11827],{"class":94,"line":2015},[92,11828,6069],{"class":199},[92,11830,11831],{"class":94,"line":2020},[92,11832,681],{"emptyLinePlaceholder":680},[92,11834,11835,11837,11839,11841,11843],{"class":94,"line":2025},[92,11836,8425],{"class":98},[92,11838,485],{"class":199},[92,11840,8485],{"class":98},[92,11842,6024],{"class":203},[92,11844,972],{"class":199},[92,11846,11847,11849,11851,11853],{"class":94,"line":2034},[92,11848,7073],{"class":98},[92,11850,6024],{"class":203},[92,11852,6027],{"class":106},[92,11854,6030],{"class":199},[92,11856,11857,11859,11861],{"class":94,"line":2051},[92,11858,8504],{"class":98},[92,11860,6024],{"class":203},[92,11862,972],{"class":199},[92,11864,11865,11867,11869,11871],{"class":94,"line":2070},[92,11866,8513],{"class":98},[92,11868,6024],{"class":203},[92,11870,8518],{"class":102},[92,11872,6030],{"class":199},[92,11874,11875,11877,11879,11881],{"class":94,"line":6636},[92,11876,8525],{"class":98},[92,11878,6024],{"class":203},[92,11880,8530],{"class":102},[92,11882,6030],{"class":199},[92,11884,11885],{"class":94,"line":6836},[92,11886,7110],{"class":199},[92,11888,11889],{"class":94,"line":6844},[92,11890,6069],{"class":199},[92,11892,11893],{"class":94,"line":6849},[92,11894,734],{"class":199},[18,11896,11897,11898,11901],{},"New laptop? Run a few commands. ",[30,11899,11900],{},"Five minutes later",", entire setup restored perfectly.",[63,11903],{},[11,11905,11907],{"id":11906},"advanced-tools","Advanced Tools",[77,11909,11911],{"id":11910},"flakes-packagejson-for-your-system","Flakes: package.json for Your System",[18,11913,11914,11915,5893,11917,11919,11920,485],{},"Flakes are exactly like ",[89,11916,775],{},[89,11918,6651],{}," combined — but for your ",[30,11921,11922],{},"entire development environment",[18,11924,11925,11926,11928],{},"Traditional Nix: ",[89,11927,8578],{}," imports whatever version is on your system. Your coworker might have different version. CI might have yet another.",[18,11930,11931,5889,11934,11936],{},[30,11932,11933],{},"Flakes fix this:",[89,11935,7795],{}," pins exact versions.",[82,11938,11939],{"className":8590,"code":8591,"language":8592,"meta":87,"style":87},[89,11940,11941,11945,11951,11957,11963,11973,11983,11991,11995,11999,12003],{"__ignoreMap":87},[92,11942,11943],{"class":94,"line":95},[92,11944,1756],{"class":199},[92,11946,11947,11949],{"class":94,"line":174},[92,11948,8603],{"class":106},[92,11950,8606],{"class":199},[92,11952,11953,11955],{"class":94,"line":248},[92,11954,8611],{"class":106},[92,11956,8606],{"class":199},[92,11958,11959,11961],{"class":94,"line":262},[92,11960,8618],{"class":106},[92,11962,8606],{"class":199},[92,11964,11965,11967,11969,11971],{"class":94,"line":282},[92,11966,8625],{"class":106},[92,11968,8628],{"class":199},[92,11970,8631],{"class":106},[92,11972,1767],{"class":199},[92,11974,11975,11977,11979,11981],{"class":94,"line":713},[92,11976,8638],{"class":106},[92,11978,8628],{"class":199},[92,11980,8643],{"class":102},[92,11982,1767],{"class":199},[92,11984,11985,11987,11989],{"class":94,"line":731},[92,11986,8650],{"class":106},[92,11988,8628],{"class":199},[92,11990,8655],{"class":102},[92,11992,11993],{"class":94,"line":1960},[92,11994,8660],{"class":199},[92,11996,11997],{"class":94,"line":1999},[92,11998,1089],{"class":199},[92,12000,12001],{"class":94,"line":2015},[92,12002,8669],{"class":199},[92,12004,12005],{"class":94,"line":2020},[92,12006,734],{"class":199},[18,12008,12009,12011,12012,12014,12015],{},[30,12010,5900],{}," Same ",[89,12013,7795],{}," = identical environment everywhere. ",[30,12016,12017],{},"No surprises. Ever.",[15,12019,12020],{},[18,12021,12022],{},"Flakes are still marked \"experimental\" but widely used in production. The Nix community considers them de facto stable after years with minimal breaking changes.",[77,12024,12026],{"id":12025},"home-manager-version-control-your-workspace","Home Manager: Version Control Your Workspace",[18,12028,12029,12030,12033],{},"Manage your entire user environment declaratively. Not just packages — ",[30,12031,12032],{},"everything",". Editor configs, shell aliases, Git settings, SSH keys.",[18,12035,12036,12037,12039,12040,12042],{},"Changed your config? ",[89,12038,8707],{}," applies it instantly. Don't like it? ",[89,12041,8711],{}," reverts it.",[18,12044,12045],{},[30,12046,12047],{},"It's literally version control for your entire workspace.",[63,12049],{},[11,12051,12053],{"id":12052},"the-dark-side-honest-challenges","The Dark Side: Honest Challenges",[18,12055,12056],{},"Let's be real about the problems.",[77,12058,12060],{"id":12059},"the-learning-curve-is-brutal","The Learning Curve is Brutal",[15,12062,12063,12069,12080],{},[18,12064,12065,12068],{},[30,12066,12067],{},"Reality check:"," Nix has one of the steepest learning curves in Linux.",[47,12070,12071,12074,12077],{},[50,12072,12073],{},"First week: \"What is this syntax?\"",[50,12075,12076],{},"First month: \"I think I'm getting it... maybe\"",[50,12078,12079],{},"First six months: \"Now I actually understand\"",[18,12081,12082,12083],{},"You'll hit walls. Get frustrated. Question if it's worth it. I definitely did. Spent an entire weekend debugging why my shell wouldn't source properly. Turned out I forgot a semicolon. ",[30,12084,12085],{},"This is normal.",[77,12087,12089],{"id":12088},"documentation-is-fragmented","Documentation is Fragmented",[18,12091,12092],{},"No single source of truth. Information scattered. Examples don't always work with current versions. You'll spend hours debugging something better docs could've solved in minutes.",[77,12094,12096],{"id":12095},"the-ecosystem-is-smaller","The Ecosystem is Smaller",[18,12098,12099],{},"Ubuntu has millions of users. NixOS? Significantly smaller community.",[18,12101,12102],{},"In practice, that looks like:",[47,12104,12105,12108,12111,12114],{},[50,12106,12107],{},"Fewer Stack Overflow answers",[50,12109,12110],{},"Less corporate support",[50,12112,12113],{},"Gaming is harder (though improving)",[50,12115,12116],{},"Hardware compatibility can be tricky",[77,12118,12120],{"id":12119},"when-you-shouldnt-use-nixos","When You Shouldn't Use NixOS",[18,12122,12123],{},[30,12124,12125],{},"Don't use NixOS if:",[47,12127,12128,12134,12140,12146],{},[50,12129,12130,12133],{},[30,12131,12132],{},"You're new to Linux"," — Start with Ubuntu or Fedora. Learn basics first.",[50,12135,12136,12139],{},[30,12137,12138],{},"You need \"just works\" gaming"," — Pop!_OS or Arch with Steam will be smoother.",[50,12141,12142,12145],{},[30,12143,12144],{},"You're on tight deadlines"," — Don't learn NixOS while building production systems.",[50,12147,12148,12151],{},[30,12149,12150],{},"Your team doesn't buy in"," — If you're the only one using Nix, you're creating silos.",[77,12153,12155],{"id":12154},"build-times-can-be-painful","Build Times Can Be Painful",[18,12157,12158],{},"First build might take forever. Updating your system could take 30 minutes if lots changed. Binary caches help, but that first experience is brutal. Pro tip: don't start a system rebuild right before a meeting.",[63,12160],{},[11,12162,12164],{"id":12163},"getting-started","Getting Started",[77,12166,12168],{"id":12167},"step-1-install-nix-not-nixos","Step 1: Install Nix (Not NixOS)",[18,12170,12171,12172,12175],{},"Start with ",[30,12173,12174],{},"just the Nix package manager"," on your existing system. Don't jump into full NixOS immediately.",[18,12177,12178,12181],{},[30,12179,12180],{},"Recommended installer"," (enables Flakes by default):",[82,12183,12184],{"className":84,"code":8854,"language":86,"meta":87,"style":87},[89,12185,12186],{"__ignoreMap":87},[92,12187,12188,12190,12192,12194,12196,12198,12200,12202,12204,12206,12208,12210],{"class":94,"line":95},[92,12189,210],{"class":98},[92,12191,8863],{"class":106},[92,12193,8866],{"class":102},[92,12195,8869],{"class":106},[92,12197,8872],{"class":106},[92,12199,8875],{"class":106},[92,12201,8878],{"class":102},[92,12203,219],{"class":203},[92,12205,8883],{"class":98},[92,12207,213],{"class":106},[92,12209,8888],{"class":106},[92,12211,8891],{"class":102},[18,12213,12214],{},"Verify:",[82,12216,12217],{"className":84,"code":8897,"language":86,"meta":87,"style":87},[89,12218,12219],{"__ignoreMap":87},[92,12220,12221,12223],{"class":94,"line":95},[92,12222,6000],{"class":98},[92,12224,8906],{"class":106},[77,12226,12228],{"id":12227},"step-2-try-it-out","Step 2: Try It Out",[82,12230,12232],{"className":84,"code":12231,"language":86,"meta":87,"style":87},"# Try cowsay temporarily\nnix shell nixpkgs#cowsay\ncowsay \"Hello Nix!\"\n\n# Install permanently\nnix profile install nixpkgs#firefox\n",[89,12233,12234,12239,12247,12253,12257,12262],{"__ignoreMap":87},[92,12235,12236],{"class":94,"line":95},[92,12237,12238],{"class":327},"# Try cowsay temporarily\n",[92,12240,12241,12243,12245],{"class":94,"line":174},[92,12242,6000],{"class":98},[92,12244,8927],{"class":102},[92,12246,8930],{"class":102},[92,12248,12249,12251],{"class":94,"line":248},[92,12250,8935],{"class":98},[92,12252,8938],{"class":102},[92,12254,12255],{"class":94,"line":262},[92,12256,681],{"emptyLinePlaceholder":680},[92,12258,12259],{"class":94,"line":282},[92,12260,12261],{"class":327},"# Install permanently\n",[92,12263,12264,12266,12268,12270],{"class":94,"line":713},[92,12265,6000],{"class":98},[92,12267,8954],{"class":102},[92,12269,129],{"class":102},[92,12271,8959],{"class":102},[77,12273,12275],{"id":12274},"step-3-create-your-first-dev-environment","Step 3: Create Your First Dev Environment",[82,12277,12278],{"className":5998,"code":8966,"language":6000,"meta":87,"style":87},[89,12279,12280,12284,12294,12312,12316,12330,12344,12364,12376,12394,12398,12402],{"__ignoreMap":87},[92,12281,12282],{"class":94,"line":95},[92,12283,1756],{"class":199},[92,12285,12286,12288,12290,12292],{"class":94,"line":174},[92,12287,6476],{"class":98},[92,12289,6024],{"class":203},[92,12291,8981],{"class":102},[92,12293,6030],{"class":199},[92,12295,12296,12298,12300,12302,12304,12306,12308,12310],{"class":94,"line":248},[92,12297,6488],{"class":98},[92,12299,485],{"class":199},[92,12301,6493],{"class":98},[92,12303,485],{"class":199},[92,12305,6498],{"class":98},[92,12307,6024],{"class":203},[92,12309,6503],{"class":102},[92,12311,6030],{"class":199},[92,12313,12314],{"class":94,"line":262},[92,12315,681],{"emptyLinePlaceholder":680},[92,12317,12318,12320,12322,12324,12326,12328],{"class":94,"line":282},[92,12319,6514],{"class":98},[92,12321,6024],{"class":203},[92,12323,6519],{"class":199},[92,12325,6522],{"class":203},[92,12327,6525],{"class":203},[92,12329,6528],{"class":199},[92,12331,12332,12334,12336,12338,12340,12342],{"class":94,"line":713},[92,12333,6533],{"class":98},[92,12335,485],{"class":199},[92,12337,6538],{"class":98},[92,12339,485],{"class":199},[92,12341,6543],{"class":98},[92,12343,6546],{"class":203},[92,12345,12346,12348,12350,12352,12354,12356,12358,12360,12362],{"class":94,"line":731},[92,12347,6551],{"class":203},[92,12349,6397],{"class":98},[92,12351,6024],{"class":203},[92,12353,6558],{"class":952},[92,12355,485],{"class":203},[92,12357,6563],{"class":952},[92,12359,485],{"class":203},[92,12361,6538],{"class":952},[92,12363,6030],{"class":199},[92,12365,12366,12368,12370,12372,12374],{"class":94,"line":1960},[92,12367,6574],{"class":203},[92,12369,6397],{"class":952},[92,12371,485],{"class":203},[92,12373,6382],{"class":952},[92,12375,972],{"class":199},[92,12377,12378,12380,12382,12384,12386,12388,12390,12392],{"class":94,"line":1999},[92,12379,6587],{"class":98},[92,12381,6024],{"class":203},[92,12383,6394],{"class":203},[92,12385,6397],{"class":952},[92,12387,7344],{"class":199},[92,12389,7347],{"class":952},[92,12391,8241],{"class":952},[92,12393,7353],{"class":199},[92,12395,12396],{"class":94,"line":2015},[92,12397,6629],{"class":199},[92,12399,12400],{"class":94,"line":2020},[92,12401,6069],{"class":199},[92,12403,12404],{"class":94,"line":2025},[92,12405,734],{"class":199},[18,12407,12408],{},"Use it:",[82,12410,12411],{"className":84,"code":9101,"language":86,"meta":87,"style":87},[89,12412,12413,12419,12427],{"__ignoreMap":87},[92,12414,12415,12417],{"class":94,"line":95},[92,12416,8430],{"class":98},[92,12418,9110],{"class":102},[92,12420,12421,12423,12425],{"class":94,"line":174},[92,12422,8430],{"class":98},[92,12424,947],{"class":102},[92,12426,9119],{"class":102},[92,12428,12429,12431],{"class":94,"line":248},[92,12430,6000],{"class":98},[92,12432,9126],{"class":102},[18,12434,12435,12436],{},"Perfect development environment. ",[30,12437,12438],{},"That's it.",[77,12440,12442],{"id":12441},"step-4-learn-more","Step 4: Learn More",[47,12444,12445,12451,12457,12463],{},[50,12446,12447,12450],{},[386,12448,9145],{"href":9143,"rel":12449},[390]," — Best beginner guide. Start here.",[50,12452,12453,12456],{},[386,12454,9153],{"href":9151,"rel":12455},[390]," — Official tutorials and docs.",[50,12458,12459,12462],{},[386,12460,9161],{"href":9159,"rel":12461},[390]," — Community knowledge base.",[50,12464,12465,12469],{},[386,12466,12468],{"href":9167,"rel":12467},[390],"My complete NixOS setup"," — Real config with Flakes and Home Manager.",[77,12471,12473],{"id":12472},"step-5-consider-nixos-later","Step 5: Consider NixOS Later",[18,12475,12476,12477,12480],{},"After you're comfortable with Nix for a few weeks, try NixOS in a VM first. ",[30,12478,12479],{},"Don't rush this step."," NixOS is a commitment.",[63,12482],{},[11,12484,12486],{"id":12485},"conclusion-is-it-worth-the-hype","Conclusion: Is It Worth The Hype?",[18,12488,12489],{},[30,12490,12491],{},"Honestly? It depends.",[77,12493,12495],{"id":12494},"when-the-hype-is-real","When The Hype is Real",[18,12497,12498],{},"If you've ever:",[47,12500,12501,12504,12507,12510],{},[50,12502,12503],{},"Spent hours debugging \"it works on my machine\"",[50,12505,12506],{},"Lost weekends to broken updates",[50,12508,12509],{},"Wished you could time travel to a working state",[50,12511,12512],{},"Struggled to replicate environments across teams",[18,12514,12515,12516,12519,12520,12523,12524,12527,12528,485],{},"Then yes, ",[30,12517,12518],{},"Nix is revolutionary",". The reproducibility ",[30,12521,12522],{},"actually works",". The atomic rollbacks ",[30,12525,12526],{},"actually work",". The declarative configuration ",[30,12529,12522],{},[77,12531,12533],{"id":12532},"when-the-hype-doesnt-matter","When The Hype Doesn't Matter",[18,12535,12536,12537,12540],{},"But if you just need a stable desktop that works and don't care about reproducibility, then the hype doesn't apply to you. ",[30,12538,12539],{},"And that's okay."," Ubuntu and Fedora serve most people perfectly.",[77,12542,12544],{"id":12543},"the-real-value","The Real Value",[18,12546,12547,12548,12551],{},"Nix isn't about being trendy. It's about ",[30,12549,12550],{},"reliability through mathematics",". Your system becomes a pure function: same inputs → same outputs, guaranteed.",[18,12553,12554],{},"For teams building production systems or requiring strict reproducibility, Nix provides value that's hard to quantify. The initial investment pays dividends daily.",[15,12556,12557],{},[18,12558,12559],{},"Don't adopt Nix because it's trendy. Adopt it because it solves problems you actually have.",[18,12561,12562],{},"Try it. Break it. Learn from it. Then decide for yourself. That's what I did anyway.",[18,12564,12565],{},"The best part? With Nix, you can always roll back.",[2283,12567,9269],{},{"title":87,"searchDepth":174,"depth":174,"links":12569},[12570,12571,12577,12582,12589,12595,12602,12607,12611,12618,12625],{"id":2349,"depth":174,"text":2350},{"id":9388,"depth":174,"text":9389,"children":12572},[12573,12574,12575,12576],{"id":9401,"depth":248,"text":9402},{"id":9504,"depth":248,"text":9505},{"id":9638,"depth":248,"text":9639},{"id":9671,"depth":248,"text":9672},{"id":9830,"depth":174,"text":9831,"children":12578},[12579,12580,12581],{"id":9840,"depth":248,"text":9841},{"id":9951,"depth":248,"text":9952},{"id":10149,"depth":248,"text":10150},{"id":10343,"depth":174,"text":10344,"children":12583},[12584,12585,12587,12588],{"id":10347,"depth":248,"text":10348},{"id":10392,"depth":248,"text":12586},"The \u002Fnix\u002Fstore: Isolation at Scale",{"id":10441,"depth":248,"text":10442},{"id":10596,"depth":248,"text":10597},{"id":10655,"depth":174,"text":10656,"children":12590},[12591,12592,12593,12594],{"id":10659,"depth":248,"text":10660},{"id":10837,"depth":248,"text":10838},{"id":10930,"depth":248,"text":10931},{"id":10994,"depth":248,"text":10995},{"id":11179,"depth":174,"text":11180,"children":12596},[12597,12598,12599,12600,12601],{"id":11183,"depth":248,"text":11184},{"id":11213,"depth":248,"text":11214},{"id":11282,"depth":248,"text":11283},{"id":11442,"depth":248,"text":11443},{"id":11471,"depth":248,"text":11472},{"id":11489,"depth":174,"text":11490,"children":12603},[12604,12605,12606],{"id":11493,"depth":248,"text":11494},{"id":11685,"depth":248,"text":11686},{"id":11719,"depth":248,"text":11720},{"id":11906,"depth":174,"text":11907,"children":12608},[12609,12610],{"id":11910,"depth":248,"text":11911},{"id":12025,"depth":248,"text":12026},{"id":12052,"depth":174,"text":12053,"children":12612},[12613,12614,12615,12616,12617],{"id":12059,"depth":248,"text":12060},{"id":12088,"depth":248,"text":12089},{"id":12095,"depth":248,"text":12096},{"id":12119,"depth":248,"text":12120},{"id":12154,"depth":248,"text":12155},{"id":12163,"depth":174,"text":12164,"children":12619},[12620,12621,12622,12623,12624],{"id":12167,"depth":248,"text":12168},{"id":12227,"depth":248,"text":12228},{"id":12274,"depth":248,"text":12275},{"id":12441,"depth":248,"text":12442},{"id":12472,"depth":248,"text":12473},{"id":12485,"depth":174,"text":12486,"children":12626},[12627,12628,12629],{"id":12494,"depth":248,"text":12495},{"id":12532,"depth":248,"text":12533},{"id":12543,"depth":248,"text":12544},"Tired of 'it works on my machine'? Discover how Nix and NixOS solve dependency hell with declarative configuration and reproducible builds. Docker meets Infrastructure as Code - but is it revolutionary or just hype?",{"tags":12632,"image":9339},[12633,6000,5747,12634,5750],"nixos","dotfiles",{"title":9346,"description":12630},"blog\u002Fwhy_nix","evvn-bPO3BLAh6WGSScBbgwg41rpsbK-OLcL4zKKoiM",{"stars":12639,"prs":12640,"commits":12641,"days":12642,"prList":13387},223462,29,2627,[12643,12646,12648,12650,12652,12654,12656,12658,12660,12662,12664,12666,12668,12670,12672,12674,12676,12678,12680,12682,12684,12686,12688,12690,12693,12695,12697,12699,12701,12703,12705,12707,12709,12711,12713,12715,12717,12719,12721,12723,12725,12727,12729,12731,12733,12736,12738,12740,12742,12744,12746,12748,12750,12752,12754,12756,12758,12760,12762,12764,12766,12768,12770,12772,12774,12776,12778,12780,12782,12784,12786,12788,12790,12792,12794,12796,12798,12800,12802,12804,12806,12808,12810,12812,12814,12816,12818,12820,12822,12824,12826,12828,12830,12832,12834,12836,12837,12839,12840,12842,12844,12846,12848,12850,12852,12854,12856,12858,12860,12862,12864,12866,12868,12870,12872,12874,12876,12878,12880,12882,12885,12887,12889,12891,12893,12895,12897,12899,12901,12903,12905,12907,12909,12911,12913,12915,12917,12919,12921,12923,12925,12927,12929,12931,12933,12935,12937,12939,12941,12943,12945,12947,12949,12951,12953,12955,12957,12959,12961,12963,12965,12967,12969,12971,12973,12975,12977,12979,12981,12983,12984,12987,12989,12991,12993,12995,12997,12999,13001,13003,13005,13007,13009,13012,13014,13016,13018,13020,13022,13024,13026,13028,13030,13032,13034,13036,13038,13040,13042,13044,13046,13048,13050,13052,13054,13056,13058,13060,13062,13064,13066,13068,13070,13072,13074,13076,13078,13080,13082,13084,13086,13088,13090,13092,13094,13096,13098,13100,13102,13104,13106,13108,13110,13112,13114,13116,13118,13121,13124,13126,13129,13132,13135,13137,13139,13141,13143,13146,13148,13150,13152,13154,13156,13158,13160,13162,13164,13166,13168,13170,13172,13174,13176,13178,13180,13182,13184,13186,13188,13190,13192,13194,13196,13198,13200,13202,13204,13206,13208,13210,13212,13214,13216,13218,13220,13222,13224,13226,13228,13230,13232,13235,13237,13239,13241,13243,13245,13247,13249,13251,13253,13255,13257,13259,13261,13263,13265,13267,13269,13272,13274,13276,13278,13280,13282,13284,13286,13288,13290,13292,13295,13297,13299,13301,13304,13306,13308,13310,13312,13314,13316,13318,13320,13322,13324,13326,13328,13330,13332,13335,13337,13339,13341,13343,13345,13347,13349,13351,13353,13355,13357,13359,13361,13363,13365,13367,13369,13371,13373,13375,13377,13379,13381,13383,13385],{"date":12644,"count":12645,"level":12645},"2025-10-06",0,{"date":12647,"count":95,"level":95},"2025-10-07",{"date":12649,"count":12645,"level":12645},"2025-10-08",{"date":12651,"count":12645,"level":12645},"2025-10-09",{"date":12653,"count":248,"level":95},"2025-10-10",{"date":12655,"count":95,"level":95},"2025-10-11",{"date":12657,"count":12645,"level":12645},"2025-10-12",{"date":12659,"count":174,"level":95},"2025-10-13",{"date":12661,"count":12645,"level":12645},"2025-10-14",{"date":12663,"count":12645,"level":12645},"2025-10-15",{"date":12665,"count":174,"level":95},"2025-10-16",{"date":12667,"count":12645,"level":12645},"2025-10-17",{"date":12669,"count":12645,"level":12645},"2025-10-18",{"date":12671,"count":12645,"level":12645},"2025-10-19",{"date":12673,"count":12645,"level":12645},"2025-10-20",{"date":12675,"count":12645,"level":12645},"2025-10-21",{"date":12677,"count":12645,"level":12645},"2025-10-22",{"date":12679,"count":12645,"level":12645},"2025-10-23",{"date":12681,"count":12645,"level":12645},"2025-10-24",{"date":12683,"count":12645,"level":12645},"2025-10-25",{"date":12685,"count":12645,"level":12645},"2025-10-26",{"date":12687,"count":12645,"level":12645},"2025-10-27",{"date":12689,"count":12645,"level":12645},"2025-10-28",{"date":12691,"count":12692,"level":262},"2025-10-29",22,{"date":12694,"count":731,"level":248},"2025-10-30",{"date":12696,"count":12645,"level":12645},"2025-10-31",{"date":12698,"count":12645,"level":12645},"2025-11-01",{"date":12700,"count":12645,"level":12645},"2025-11-02",{"date":12702,"count":12645,"level":12645},"2025-11-03",{"date":12704,"count":12645,"level":12645},"2025-11-04",{"date":12706,"count":12645,"level":12645},"2025-11-05",{"date":12708,"count":12645,"level":12645},"2025-11-06",{"date":12710,"count":12645,"level":12645},"2025-11-07",{"date":12712,"count":2015,"level":262},"2025-11-08",{"date":12714,"count":713,"level":174},"2025-11-09",{"date":12716,"count":12645,"level":12645},"2025-11-10",{"date":12718,"count":12645,"level":12645},"2025-11-11",{"date":12720,"count":95,"level":95},"2025-11-12",{"date":12722,"count":12645,"level":12645},"2025-11-13",{"date":12724,"count":95,"level":95},"2025-11-14",{"date":12726,"count":2025,"level":262},"2025-11-15",{"date":12728,"count":282,"level":174},"2025-11-16",{"date":12730,"count":95,"level":95},"2025-11-17",{"date":12732,"count":2015,"level":262},"2025-11-18",{"date":12734,"count":12735,"level":262},"2025-11-19",25,{"date":12737,"count":95,"level":95},"2025-11-20",{"date":12739,"count":12645,"level":12645},"2025-11-21",{"date":12741,"count":282,"level":174},"2025-11-22",{"date":12743,"count":713,"level":174},"2025-11-23",{"date":12745,"count":95,"level":95},"2025-11-24",{"date":12747,"count":12645,"level":12645},"2025-11-25",{"date":12749,"count":12645,"level":12645},"2025-11-26",{"date":12751,"count":248,"level":95},"2025-11-27",{"date":12753,"count":12645,"level":12645},"2025-11-28",{"date":12755,"count":12645,"level":12645},"2025-11-29",{"date":12757,"count":12645,"level":12645},"2025-11-30",{"date":12759,"count":12645,"level":12645},"2025-12-01",{"date":12761,"count":12645,"level":12645},"2025-12-02",{"date":12763,"count":12645,"level":12645},"2025-12-03",{"date":12765,"count":12645,"level":12645},"2025-12-04",{"date":12767,"count":12645,"level":12645},"2025-12-05",{"date":12769,"count":12645,"level":12645},"2025-12-06",{"date":12771,"count":12645,"level":12645},"2025-12-07",{"date":12773,"count":12645,"level":12645},"2025-12-08",{"date":12775,"count":12645,"level":12645},"2025-12-09",{"date":12777,"count":174,"level":95},"2025-12-10",{"date":12779,"count":12645,"level":12645},"2025-12-11",{"date":12781,"count":12645,"level":12645},"2025-12-12",{"date":12783,"count":12645,"level":12645},"2025-12-13",{"date":12785,"count":12645,"level":12645},"2025-12-14",{"date":12787,"count":174,"level":95},"2025-12-15",{"date":12789,"count":282,"level":174},"2025-12-16",{"date":12791,"count":12645,"level":12645},"2025-12-17",{"date":12793,"count":12645,"level":12645},"2025-12-18",{"date":12795,"count":12645,"level":12645},"2025-12-19",{"date":12797,"count":12645,"level":12645},"2025-12-20",{"date":12799,"count":12645,"level":12645},"2025-12-21",{"date":12801,"count":12645,"level":12645},"2025-12-22",{"date":12803,"count":12645,"level":12645},"2025-12-23",{"date":12805,"count":95,"level":95},"2025-12-24",{"date":12807,"count":12645,"level":12645},"2025-12-25",{"date":12809,"count":12645,"level":12645},"2025-12-26",{"date":12811,"count":12645,"level":12645},"2025-12-27",{"date":12813,"count":12645,"level":12645},"2025-12-28",{"date":12815,"count":12645,"level":12645},"2025-12-29",{"date":12817,"count":12645,"level":12645},"2025-12-30",{"date":12819,"count":12645,"level":12645},"2025-12-31",{"date":12821,"count":12645,"level":12645},"2026-01-01",{"date":12823,"count":12645,"level":12645},"2026-01-02",{"date":12825,"count":12645,"level":12645},"2026-01-03",{"date":12827,"count":248,"level":95},"2026-01-04",{"date":12829,"count":12645,"level":12645},"2026-01-05",{"date":12831,"count":95,"level":95},"2026-01-06",{"date":12833,"count":12645,"level":12645},"2026-01-07",{"date":12835,"count":12645,"level":12645},"2026-01-08",{"date":9332,"count":282,"level":174},{"date":12838,"count":248,"level":95},"2026-01-10",{"date":5041,"count":12645,"level":12645},{"date":12841,"count":12645,"level":12645},"2026-01-12",{"date":12843,"count":12645,"level":12645},"2026-01-13",{"date":12845,"count":12645,"level":12645},"2026-01-14",{"date":12847,"count":12645,"level":12645},"2026-01-15",{"date":12849,"count":12645,"level":12645},"2026-01-16",{"date":12851,"count":12645,"level":12645},"2026-01-17",{"date":12853,"count":713,"level":174},"2026-01-18",{"date":12855,"count":731,"level":248},"2026-01-19",{"date":12857,"count":95,"level":95},"2026-01-20",{"date":12859,"count":2070,"level":262},"2026-01-21",{"date":12861,"count":95,"level":95},"2026-01-22",{"date":12863,"count":12645,"level":12645},"2026-01-23",{"date":12865,"count":12645,"level":12645},"2026-01-24",{"date":12867,"count":262,"level":174},"2026-01-25",{"date":12869,"count":2025,"level":262},"2026-01-26",{"date":12871,"count":12645,"level":12645},"2026-01-27",{"date":12873,"count":262,"level":174},"2026-01-28",{"date":12875,"count":95,"level":95},"2026-01-29",{"date":12877,"count":12645,"level":12645},"2026-01-30",{"date":12879,"count":12645,"level":12645},"2026-01-31",{"date":12881,"count":1999,"level":248},"2026-02-01",{"date":12883,"count":12884,"level":262},"2026-02-02",23,{"date":12886,"count":731,"level":248},"2026-02-03",{"date":12888,"count":95,"level":95},"2026-02-04",{"date":12890,"count":12645,"level":12645},"2026-02-05",{"date":12892,"count":12645,"level":12645},"2026-02-06",{"date":12894,"count":12645,"level":12645},"2026-02-07",{"date":12896,"count":12645,"level":12645},"2026-02-08",{"date":12898,"count":12645,"level":12645},"2026-02-09",{"date":12900,"count":12645,"level":12645},"2026-02-10",{"date":12902,"count":12645,"level":12645},"2026-02-11",{"date":12904,"count":12645,"level":12645},"2026-02-12",{"date":12906,"count":12645,"level":12645},"2026-02-13",{"date":12908,"count":12645,"level":12645},"2026-02-14",{"date":12910,"count":95,"level":95},"2026-02-15",{"date":12912,"count":95,"level":95},"2026-02-16",{"date":12914,"count":174,"level":95},"2026-02-17",{"date":12916,"count":12645,"level":12645},"2026-02-18",{"date":12918,"count":95,"level":95},"2026-02-19",{"date":12920,"count":12645,"level":12645},"2026-02-20",{"date":12922,"count":12645,"level":12645},"2026-02-21",{"date":12924,"count":12645,"level":12645},"2026-02-22",{"date":12926,"count":95,"level":95},"2026-02-23",{"date":12928,"count":248,"level":95},"2026-02-24",{"date":12930,"count":248,"level":95},"2026-02-25",{"date":12932,"count":12645,"level":12645},"2026-02-26",{"date":12934,"count":12645,"level":12645},"2026-02-27",{"date":12936,"count":12645,"level":12645},"2026-02-28",{"date":12938,"count":1999,"level":248},"2026-03-01",{"date":12940,"count":174,"level":95},"2026-03-02",{"date":12942,"count":174,"level":95},"2026-03-03",{"date":12944,"count":95,"level":95},"2026-03-04",{"date":12946,"count":12645,"level":12645},"2026-03-05",{"date":12948,"count":95,"level":95},"2026-03-06",{"date":12950,"count":12645,"level":12645},"2026-03-07",{"date":12952,"count":12645,"level":12645},"2026-03-08",{"date":12954,"count":95,"level":95},"2026-03-09",{"date":12956,"count":12645,"level":12645},"2026-03-10",{"date":12958,"count":95,"level":95},"2026-03-11",{"date":12960,"count":12645,"level":12645},"2026-03-12",{"date":12962,"count":95,"level":95},"2026-03-13",{"date":12964,"count":95,"level":95},"2026-03-14",{"date":12966,"count":12645,"level":12645},"2026-03-15",{"date":12968,"count":713,"level":174},"2026-03-16",{"date":12970,"count":12645,"level":12645},"2026-03-17",{"date":12972,"count":248,"level":95},"2026-03-18",{"date":12974,"count":713,"level":174},"2026-03-19",{"date":12976,"count":95,"level":95},"2026-03-20",{"date":12978,"count":12645,"level":12645},"2026-03-21",{"date":12980,"count":2034,"level":262},"2026-03-22",{"date":12982,"count":174,"level":95},"2026-03-23",{"date":2323,"count":731,"level":248},{"date":12985,"count":12986,"level":262},"2026-03-25",38,{"date":12988,"count":248,"level":95},"2026-03-26",{"date":12990,"count":95,"level":95},"2026-03-27",{"date":12992,"count":12645,"level":12645},"2026-03-28",{"date":12994,"count":95,"level":95},"2026-03-29",{"date":12996,"count":262,"level":174},"2026-03-30",{"date":12998,"count":174,"level":95},"2026-03-31",{"date":13000,"count":12645,"level":12645},"2026-04-01",{"date":13002,"count":95,"level":95},"2026-04-02",{"date":13004,"count":95,"level":95},"2026-04-03",{"date":13006,"count":12692,"level":262},"2026-04-04",{"date":13008,"count":12735,"level":262},"2026-04-05",{"date":13010,"count":13011,"level":262},"2026-04-06",26,{"date":13013,"count":12645,"level":12645},"2026-04-07",{"date":13015,"count":2020,"level":262},"2026-04-08",{"date":13017,"count":95,"level":95},"2026-04-09",{"date":13019,"count":174,"level":95},"2026-04-10",{"date":13021,"count":6836,"level":262},"2026-04-11",{"date":13023,"count":6849,"level":262},"2026-04-12",{"date":13025,"count":1999,"level":248},"2026-04-13",{"date":13027,"count":174,"level":95},"2026-04-14",{"date":13029,"count":95,"level":95},"2026-04-15",{"date":13031,"count":12645,"level":12645},"2026-04-16",{"date":13033,"count":12645,"level":12645},"2026-04-17",{"date":13035,"count":12645,"level":12645},"2026-04-18",{"date":13037,"count":12645,"level":12645},"2026-04-19",{"date":13039,"count":12645,"level":12645},"2026-04-20",{"date":13041,"count":12645,"level":12645},"2026-04-21",{"date":13043,"count":12645,"level":12645},"2026-04-22",{"date":13045,"count":12645,"level":12645},"2026-04-23",{"date":13047,"count":12645,"level":12645},"2026-04-24",{"date":13049,"count":12645,"level":12645},"2026-04-25",{"date":13051,"count":2020,"level":262},"2026-04-26",{"date":13053,"count":2020,"level":262},"2026-04-27",{"date":13055,"count":12645,"level":12645},"2026-04-28",{"date":13057,"count":12645,"level":12645},"2026-04-29",{"date":13059,"count":12645,"level":12645},"2026-04-30",{"date":13061,"count":12645,"level":12645},"2026-05-01",{"date":13063,"count":12645,"level":12645},"2026-05-02",{"date":13065,"count":12645,"level":12645},"2026-05-03",{"date":13067,"count":12645,"level":12645},"2026-05-04",{"date":13069,"count":2015,"level":262},"2026-05-05",{"date":13071,"count":12645,"level":12645},"2026-05-06",{"date":13073,"count":12645,"level":12645},"2026-05-07",{"date":13075,"count":12645,"level":12645},"2026-05-08",{"date":13077,"count":12645,"level":12645},"2026-05-09",{"date":13079,"count":174,"level":95},"2026-05-10",{"date":13081,"count":2020,"level":262},"2026-05-11",{"date":13083,"count":12645,"level":12645},"2026-05-12",{"date":13085,"count":12645,"level":12645},"2026-05-13",{"date":13087,"count":12645,"level":12645},"2026-05-14",{"date":13089,"count":2025,"level":262},"2026-05-15",{"date":13091,"count":2015,"level":262},"2026-05-16",{"date":13093,"count":713,"level":174},"2026-05-17",{"date":13095,"count":6854,"level":262},"2026-05-18",{"date":13097,"count":174,"level":95},"2026-05-19",{"date":13099,"count":12645,"level":12645},"2026-05-20",{"date":13101,"count":12645,"level":12645},"2026-05-21",{"date":13103,"count":12645,"level":12645},"2026-05-22",{"date":13105,"count":12645,"level":12645},"2026-05-23",{"date":13107,"count":731,"level":248},"2026-05-24",{"date":13109,"count":12645,"level":12645},"2026-05-25",{"date":13111,"count":12645,"level":12645},"2026-05-26",{"date":13113,"count":12645,"level":12645},"2026-05-27",{"date":13115,"count":12645,"level":12645},"2026-05-28",{"date":13117,"count":12645,"level":12645},"2026-05-29",{"date":13119,"count":13120,"level":262},"2026-05-30",118,{"date":13122,"count":13123,"level":262},"2026-05-31",123,{"date":13125,"count":95,"level":95},"2026-06-01",{"date":13127,"count":13128,"level":262},"2026-06-02",86,{"date":13130,"count":13131,"level":262},"2026-06-03",110,{"date":13133,"count":13134,"level":262},"2026-06-04",60,{"date":13136,"count":2070,"level":262},"2026-06-05",{"date":13138,"count":12645,"level":12645},"2026-06-06",{"date":13140,"count":12645,"level":12645},"2026-06-07",{"date":13142,"count":6854,"level":262},"2026-06-08",{"date":13144,"count":13145,"level":262},"2026-06-09",43,{"date":13147,"count":13134,"level":262},"2026-06-10",{"date":13149,"count":6844,"level":262},"2026-06-11",{"date":13151,"count":12645,"level":12645},"2026-06-12",{"date":13153,"count":713,"level":174},"2026-06-13",{"date":13155,"count":12645,"level":12645},"2026-06-14",{"date":13157,"count":12884,"level":262},"2026-06-15",{"date":13159,"count":12645,"level":12645},"2026-06-16",{"date":13161,"count":2025,"level":262},"2026-06-17",{"date":13163,"count":248,"level":95},"2026-06-18",{"date":13165,"count":2015,"level":262},"2026-06-19",{"date":13167,"count":1960,"level":248},"2026-06-20",{"date":13169,"count":262,"level":174},"2026-06-21",{"date":13171,"count":12645,"level":12645},"2026-06-22",{"date":13173,"count":12645,"level":12645},"2026-06-23",{"date":13175,"count":12645,"level":12645},"2026-06-24",{"date":13177,"count":12645,"level":12645},"2026-06-25",{"date":13179,"count":12645,"level":12645},"2026-06-26",{"date":13181,"count":1960,"level":248},"2026-06-27",{"date":13183,"count":12645,"level":12645},"2026-06-28",{"date":13185,"count":12645,"level":12645},"2026-06-29",{"date":13187,"count":12645,"level":12645},"2026-06-30",{"date":13189,"count":6854,"level":262},"2026-07-01",{"date":13191,"count":12645,"level":12645},"2026-07-02",{"date":13193,"count":6844,"level":262},"2026-07-03",{"date":13195,"count":731,"level":248},"2026-07-04",{"date":13197,"count":1999,"level":248},"2026-07-05",{"date":13199,"count":262,"level":174},"2026-07-06",{"date":13201,"count":12645,"level":12645},"2026-07-07",{"date":13203,"count":12645,"level":12645},"2026-07-08",{"date":13205,"count":713,"level":174},"2026-07-09",{"date":13207,"count":2020,"level":262},"2026-07-10",{"date":13209,"count":12645,"level":12645},"2026-07-11",{"date":13211,"count":12645,"level":12645},"2026-07-12",{"date":13213,"count":12645,"level":12645},"2026-07-13",{"date":13215,"count":13011,"level":262},"2026-07-14",{"date":13217,"count":2070,"level":262},"2026-07-15",{"date":13219,"count":2020,"level":262},"2026-07-16",{"date":13221,"count":2025,"level":262},"2026-07-17",{"date":13223,"count":2025,"level":262},"2026-07-18",{"date":13225,"count":12645,"level":12645},"2026-07-19",{"date":13227,"count":6636,"level":262},"2026-07-20",{"date":13229,"count":282,"level":174},"2026-07-21",{"date":13231,"count":6849,"level":262},"2026-07-22",{"date":13233,"count":13234,"level":262},"2026-07-23",32,{"date":13236,"count":12645,"level":12645},"2026-07-24",{"date":13238,"count":12645,"level":12645},"2026-07-25",{"date":13240,"count":6636,"level":262},"2026-07-26",{"date":13242,"count":12884,"level":262},"2026-07-27",{"date":13244,"count":174,"level":95},"2026-07-28",{"date":13246,"count":12645,"level":12645},"2026-07-29",{"date":13248,"count":12645,"level":12645},"2026-07-30",{"date":13250,"count":12645,"level":12645},"2026-07-31",{"date":13252,"count":1960,"level":248},"2026-08-01",{"date":13254,"count":12645,"level":12645},"2026-08-02",{"date":13256,"count":95,"level":95},"2026-08-03",{"date":13258,"count":12645,"level":12645},"2026-08-04",{"date":13260,"count":12645,"level":12645},"2026-08-05",{"date":13262,"count":2051,"level":262},"2026-08-06",{"date":13264,"count":248,"level":95},"2026-08-07",{"date":13266,"count":12645,"level":12645},"2026-08-08",{"date":13268,"count":95,"level":95},"2026-08-09",{"date":13270,"count":13271,"level":262},"2026-08-10",34,{"date":13273,"count":6636,"level":262},"2026-08-11",{"date":13275,"count":2025,"level":262},"2026-08-12",{"date":13277,"count":2020,"level":262},"2026-08-13",{"date":13279,"count":262,"level":174},"2026-08-14",{"date":13281,"count":2034,"level":262},"2026-08-15",{"date":13283,"count":713,"level":174},"2026-08-16",{"date":13285,"count":6849,"level":262},"2026-08-17",{"date":13287,"count":248,"level":95},"2026-08-18",{"date":13289,"count":6844,"level":262},"2026-08-19",{"date":13291,"count":2025,"level":262},"2026-08-20",{"date":13293,"count":13294,"level":262},"2026-08-21",30,{"date":13296,"count":95,"level":95},"2026-08-22",{"date":13298,"count":713,"level":174},"2026-08-23",{"date":13300,"count":12645,"level":12645},"2026-08-24",{"date":13302,"count":13303,"level":262},"2026-08-25",41,{"date":13305,"count":713,"level":174},"2026-08-26",{"date":13307,"count":282,"level":174},"2026-08-27",{"date":13309,"count":12645,"level":12645},"2026-08-28",{"date":13311,"count":12645,"level":12645},"2026-08-29",{"date":13313,"count":1960,"level":248},"2026-08-30",{"date":13315,"count":731,"level":248},"2026-08-31",{"date":13317,"count":248,"level":95},"2026-09-01",{"date":13319,"count":1999,"level":248},"2026-09-02",{"date":13321,"count":12645,"level":12645},"2026-09-03",{"date":13323,"count":95,"level":95},"2026-09-04",{"date":13325,"count":12645,"level":12645},"2026-09-05",{"date":13327,"count":95,"level":95},"2026-09-06",{"date":13329,"count":262,"level":174},"2026-09-07",{"date":13331,"count":2025,"level":262},"2026-09-08",{"date":13333,"count":13334,"level":262},"2026-09-09",24,{"date":13336,"count":12645,"level":12645},"2026-09-10",{"date":13338,"count":174,"level":95},"2026-09-11",{"date":13340,"count":95,"level":95},"2026-09-12",{"date":13342,"count":95,"level":95},"2026-09-13",{"date":13344,"count":12645,"level":12645},"2026-09-14",{"date":13346,"count":248,"level":95},"2026-09-15",{"date":13348,"count":12645,"level":12645},"2026-09-16",{"date":13350,"count":731,"level":248},"2026-09-17",{"date":13352,"count":12735,"level":262},"2026-09-18",{"date":13354,"count":174,"level":95},"2026-09-19",{"date":13356,"count":2070,"level":262},"2026-09-20",{"date":13358,"count":6844,"level":262},"2026-09-21",{"date":13360,"count":713,"level":174},"2026-09-22",{"date":13362,"count":282,"level":174},"2026-09-23",{"date":13364,"count":6636,"level":262},"2026-09-24",{"date":13366,"count":1999,"level":248},"2026-09-25",{"date":13368,"count":13011,"level":262},"2026-09-26",{"date":13370,"count":12645,"level":12645},"2026-09-27",{"date":13372,"count":12645,"level":12645},"2026-09-28",{"date":13374,"count":1960,"level":248},"2026-09-29",{"date":13376,"count":2015,"level":262},"2026-09-30",{"date":13378,"count":12645,"level":12645},"2026-10-01",{"date":13380,"count":6636,"level":262},"2026-10-02",{"date":13382,"count":12645,"level":12645},"2026-10-03",{"date":13384,"count":6844,"level":262},"2026-10-04",{"date":13386,"count":262,"level":174},"2026-10-05",[13388,13394,13399,13405,13410,13415,13420,13425,13430,13435,13440,13445,13449,13455,13460,13465,13470,13475,13480,13485,13490,13494,13498,13502,13506,13509],{"title":13389,"url":13390,"state":13391,"updatedAt":13392,"body":13393},"feat: Make TUI keyboard shortcuts configurable from config files","https:\u002F\u002Fgithub.com\u002Fcharmbracelet\u002Fcrush\u002Fpull\u002F3784","open","2026-10-01T10:21:10Z","- [x] I have read [`CONTRIBUTING.md`](https:\u002F\u002Fgithub.com\u002Fcharmbracelet\u002F.github\u002Fblob\u002Fmain\u002FCONTRIBUTING.md).\n- [x] I have created a discussion that was approved by a maintainer (for new features).\n# Why?\n\nPreviously every keyboard shortcut was hardcoded, so users with different layouts or preferences could not change keys that conflicted with their terminal or workflow.\n\nThis adds full shortcut remapping from user config with zero behavior change when unconfigured:\n\n```bash\nkeybind set global.quit ctrl+q\nkeybind set editor.send_message ctrl+enter\nkeybind set chat.down down j\nkeybind disable chat.expand\n```\n\nActions are grouped by ownership scope (`global`, `editor`, `chat`, `completions`, `dialog`), and dialogs use shared select\u002Fprev\u002Fnext verbs so one override covers every modal at once. Prev\u002Fnext help stays the compact `↑\u002F↓ choose` while the keys are still the arrows, and expands to labeled `next item` \u002F `previous item` rows once remapped so the order is never a guess.\n\n## some other details:\ndocs and the `crush-config` skill are updated with the full action table, overlapping scopes warn in the status bar at startup without changing dispatch order and first action wins, project con",{"title":13395,"url":13396,"state":13391,"updatedAt":13397,"body":13398},"feat: add Rose Pine built-in themes (pine, moon, dawn)","https:\u002F\u002Fgithub.com\u002Fcharmbracelet\u002Fcrush\u002Fpull\u002F3959","2026-10-01T10:21:09Z","- [x] I have read [`CONTRIBUTING.md`](https:\u002F\u002Fgithub.com\u002Fcharmbracelet\u002F.github\u002Fblob\u002Fmain\u002FCONTRIBUTING.md).\n- [ ] I have created a discussion that was approved by a maintainer (for new features).\n\n## Adds three Rosé Pine variants as built-in themes using the canonical\nfrom the official rose-pine\u002Frose-pine-theme palette:\n\n- `rose-pine` (base `#191724`)\n- `rose-pine-moon` (base `#232136`)\n- `rose-pine-dawn` (light, base `#faf4ed`)\n\nChanges:\n- `internal\u002Fui\u002Fstyles\u002Fthemes.go`: `rosePineOpts`, `rosePineMoonOpts`,\n  `rosePineDawnOpts` + registration in `builtinThemes`\n- `internal\u002Fconfig\u002Fconfig.go` + `schema.json`: added `rose-pine` example\n  (schema regenerated via `go run . schema`)\n- `README.md`: documented the 3 new themes in the built-in table\n\nTests:\n- `TestPaletteFromOpts_RosePineVariants`: pins primary\u002Fbg\u002Ffg per variant\n- `TestThemePalette_RosePineVariants`: pins resolved palette via `ThemePalette`\n- Extended `TestIsBuiltinTheme` with the 3 variants + case-insensitive check",{"title":13400,"url":13401,"state":13402,"updatedAt":13403,"body":13404},"add claude sonnet 5.5 for anthropic provider.","https:\u002F\u002Fgithub.com\u002Fcharmbracelet\u002Fcatwalk\u002Fpull\u002F635","merged","2026-09-29T20:39:59Z","- [x] I have read [`CONTRIBUTING.md`](https:\u002F\u002Fgithub.com\u002Fcharmbracelet\u002F.github\u002Fblob\u002Fmain\u002FCONTRIBUTING.md).\n- [ ] I have created a discussion that was approved by a maintainer (for new features).\n\njust add claude sonnet 5.5.",{"title":13406,"url":13407,"state":13402,"updatedAt":13408,"body":13409},"fix(pioneer): migrate generator to fastino base-models catalog","https:\u002F\u002Fgithub.com\u002Fcharmbracelet\u002Fcatwalk\u002Fpull\u002F634","2026-09-29T20:39:35Z","- [x] I have read [`CONTRIBUTING.md`](https:\u002F\u002Fgithub.com\u002Fcharmbracelet\u002F.github\u002Fblob\u002Fmain\u002FCONTRIBUTING.md).\n- [ ] I have created a discussion that was approved by a maintainer (for new features).\n\npioneer host got retired and moved to api.fastino.ai. switched the\ngenerator to \u002Fv1\u002Fbase-models which is the documented catalog route (same one\nthe 410 moved_to points to in the error).\n\nnow picks up the new fields from the catalog too:\n- cache read\u002Fwrite pricing (was all zeros)\n- real max_output_tokens instead of contextWindow\u002F4 guess (old values were\n  wrong, haiku 50000 vs actual 64000)\n- supports_image_input\n- drops deprecated\u002Funservable models (smolm2-360m is is_chat_model=true but supports_inference=false so it was sitting in the catalog unusable)\n\nalsoo the defaults changed cause the old ones are gone from the catalog:\nclaude-opus-5 and deepseek-v4-flash (cheapest chat model).\n\nnotes:\n- \u002Fv1\u002Fmodels says 1m context for deepseek v4 flash and glm 5.2 but the\n  catalog says 131072, i went with the catalog\n- docs renamed the env var to FASTINO_API_KEY, we still use $PIONEER_API_KEY.\n  user facing so leaving it as a follow-up \u003C:",{"title":13411,"url":13412,"state":13391,"updatedAt":13413,"body":13414},"feat: more tests options","https:\u002F\u002Fgithub.com\u002FDaltonSW\u002Fprism\u002Fpull\u002F9","2026-09-10T22:03:02Z","## Add coverage reporting and new CLI flags\n- Add `--summary-only`\u002F`-s`, `--filter`\u002F`-F`, `--count`\u002F`-c`, `--cover`\u002F`-C` CLI flags\n- Per-package coverage % appended to package totals line\n- Per-function coverage breakdown, wrapped to terminal width, sorted worst-first, color-coded\n- Overall coverage % appended to summary\n\n## The count flag is for `go test -count=1` that disables cache for re-run the tests freshly \u003C:\n\n## The cover flag runs statments coverage only if the tests is with the .go file that holds the statments of these test cases.\nand also it uses `go test -coverprofile` to make temp out file and then appends the function names with percentage of its statments covered (and its colored too per much percent).\n### Example cover and count:\n\u003Cimg width=\"903\" height=\"751\" alt=\"image\" src=\"https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002Fe730706e-4354-446a-bf85-1ba2c814bcc0\" \u002F>\n\n## The summary only flag prints only the overall tests results.\n### Example:\n\u003Cimg width=\"571\" height=\"147\" alt=\"image\" src=\"https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002Fee83bbd3-9399-403a-86eb-e95bce319015\" \u002F>\n\n\n## The filter flag filters the test names and show it normally under its package.\n### Example:\n\u003Cimg w",{"title":13416,"url":13417,"state":13402,"updatedAt":13418,"body":13419},"feat(licenses): built-in SPDX licensing for the license param type","https:\u002F\u002Fgithub.com\u002Fsam0uly\u002Fspin\u002Fpull\u002F11","2026-08-14T12:42:49Z","Add an internal\u002Flicenses package embedding the canonical SPDX texts (MIT, Apache-2.0, BSD, MPL, GPL, LGPL, ISC, Unlicense, CC0) and wire a new TypeLicense param: templates declare\n[params.license] with type = \"license\" and spin resolves the user's choice (interactive select or --param) into a generated LICENSE file at render time, with copyright holder + current year substituted.\n\n- internal\u002Flicenses: Known\u002FIsKnown\u002FRender with SPDX token substitution\n- params: LicenseParam (thin select wrapper) + parse\u002Fvalidate wiring\n- template: option auto-fill in specFromMap, UnwrapValue case, appendLicense at the end of Render (never overwrites an existing LICENSE\u002FCOPYING in _base; None\u002Fempty\u002Funknown produce no file)\n- cmd: coerceParamValue + paramDisplay cases; spin init now emits license + copyright_holder params and documents the behavior\n- tests: licenses render\u002Fsubstitution, params parse, template generation + template-file-wins, cmd coercion, init e2e fixture\n\n\u003C!-- This is an auto-generated comment: release notes by coderabbit.ai -->\n## Summary by CodeRabbit\n\n- **New Features**\n  - Added built-in SPDX license selection for generated projects.\n  - Supports common licenses, including MIT, A",{"title":13421,"url":13422,"state":13402,"updatedAt":13423,"body":13424},"Feat\u002Fbootstrap official registry","https:\u002F\u002Fgithub.com\u002Fsam0uly\u002Fspin\u002Fpull\u002F10","2026-08-01T04:29:11Z","Auto-bootstrap the official registry on first use when no registry configuration exists. Respect explicit user removal by never recreating official once registries.json has been created. Keep registry resolution transport-agnostic by returning typed errors and enrich CLI messages only in the command layer.\n\n\u003C!-- This is an auto-generated comment: release notes by coderabbit.ai -->\n## Summary by CodeRabbit\n\n* **New Features**\n  * Automatically registers the built-in official template registry on first use of search, scaffold, or add commands.\n  * Searches can use the local registry cache directly.\n  * Added clearer guidance when a requested registry alias is unavailable.\n* **Bug Fixes**\n  * Preserves existing, corrupted, or explicitly removed registry configurations.\n  * Safely handles concurrent first-run setup, cancellation, and registration failures.\n* **Documentation**\n  * Documented automatic official-registry setup and how to register additional registries.\n\u003C!-- end of auto-generated comment: release notes by coderabbit.ai -->",{"title":13426,"url":13427,"state":13402,"updatedAt":13428,"body":13429},"Feat\u002Fhooks tui","https:\u002F\u002Fgithub.com\u002Fsam0uly\u002Fspin\u002Fpull\u002F6","2026-07-27T02:08:34Z","## What this does\n\nAdds an interactive hook review screen to `spin new`. Before any shell\ncommands run, the user sees every `[[pre]]` and `[[post]]` hook the\ntemplate will execute and chooses Run \u002F Skip \u002F Cancel.\n\n## Why\n\n`spin new --yes` skipped the trust prompt entirely. `spin new` without\n`--yes` printed a console prompt but showed zero detail about what hooks\nwould run. Neither path let users inspect the commands before execution.\nThis is important for a scaffolder that shells out to arbitrary templates.\n\n## How it works\n\n`spin new` now has two TUI steps instead of one:\n\n1. **Params form** — existing Huh form (unchanged)\n2. **Hooks review** — new Bubble Tea TUI\n\nThe hooks TUI shows a list of hooks on the left (inline commands and\nscript files) with a detail pane on the right. Pressing `R` opens a\nRun \u002F Skip \u002F Cancel modal centered over the view. The user reviews\nevery command before anything executes.\n\n## Key changes\n\n- `cmd\u002Fhook_output.go` -- shared `hookTreeWriter` that emits tree-styled\n  hook output for both the CLI (`os.Stdout`) and the TUI (channel).\n  Replaces the old `hookOutput`\u002F`tuiHookOutput`\u002F`chanWriter` duplication.\n- `cmd\u002Fhooks_tui.go` -- the Bubble Tea model with",{"title":13431,"url":13432,"state":13402,"updatedAt":13433,"body":13434},"Fix params form TUI -- preview pane, quit behavior, frozen hooks","https:\u002F\u002Fgithub.com\u002Fsam0uly\u002Fspin\u002Fpull\u002F7","2026-07-27T02:08:33Z","## What in this pr\n\nThree fixes for the spin new interactive TUI:\n\n**1. Scrollable preview pane** -- The right-side info panel in the params\nform now uses a viewport with keyboard scrolling (ctrl+↑\u002F↓\u002Fj\u002Fk). Hook\ncommands are styled with colored labels and dim italic text. `_pre\u002F` and\n`_post\u002F` script files are listed under their own headers. The pane fills\navailable space and wraps long lines instead of truncating.\n\n**2. Quit behavior** -- q\u002Fesc\u002Fctrl+c now properly kill the program\ninstead of falling through to the CLI hook path. After hooks have run,\nq\u002Fesc exits cleanly without the \"program was interrupted\" error.\n\n**3. Frozen hooks TUI** -- The hooks review screen was discarding the\ncmd returned by hooks.update, preventing q\u002Fesc\u002Fctrl+c from working\nand causing the TUI to freeze after running\u002Fskipping hooks.\n\n## Why\n\n- Long hook commands in the params preview overflowed the fixed-size\n  pane with no way to scroll.\n- Pressing q\u002Fesc in the params form silently ran hooks via the CLI\n  path without the user's knowledge.\n- The hooks TUI couldn't be dismissed after hook execution completed.\n\n## Testing\n\nAll existing tests pass. Scroll behavior tested with templates\ncontaining 10+ inline h",{"title":13436,"url":13437,"state":13402,"updatedAt":13438,"body":13439},"Feat\u002Fbrand theme","https:\u002F\u002Fgithub.com\u002Fsam0uly\u002Fspin\u002Fpull\u002F8","2026-07-27T02:08:18Z","This PR replaces the default terminal colors throughout spin with a consistent orange and warm-gray brand palette that adapts to the user's terminal background at startup.\n\nThe colors are pre-resolved once at startup using lipgloss.LightDark plus lipgloss.HasDarkBackground instead of tracking BackgroundColorMsg at runtime. This eliminates hasDarkBg fields, style regeneration, and message handling that was previously spread across models.\n\nWhat changed:\n\n- New internal\u002Ftheme\u002F package (160 lines) containing the full brand palette, pre-resolved semantic tokens, Huh theme, fang color scheme, list styles, and convenience helpers\n\n- All huh.NewForm calls replaced with theme.NewForm() so prompt forms inherit the brand palette automatically\n\n- main.go uses theme.FangColorScheme for branded --help output\n\n- cmd\u002Fnew_tui.go and cmd\u002Fhooks_tui.go use pre-resolved colors for all custom styles and view backgrounds instead of tracking isDark per model or using the compat package\n\n- cmd\u002Fprint.go and cmd\u002Fhook_output.go use theme.Accent and theme.TextDimmed for headers and body text\n\n- Footer keybinding hints now match the same accent\u002Fmuted color scheme as Huh help text\n\nThe semantic tokens (Accent, ",{"title":13441,"url":13442,"state":13402,"updatedAt":13443,"body":13444},"Feat\u002Ftemplated params defaults","https:\u002F\u002Fgithub.com\u002Fsam0uly\u002Fspin\u002Fpull\u002F3","2026-07-20T02:56:56Z","## Summary of this PR \u003C:\n\n  This PR extends `spin.toml` params so `prompt` and `default` can use the same Go-template helpers already available in `_base\u002F` files and hooks, and cleans up the shared template-helper plumbing so it lives in one place.\n\n## What's changed\n\n- **Template helpers are now shared.** `upper`, `snake_case`, `quote`, `kebab`, `has`, etc. are exported from `internal\u002Fparams` and consumed by both the file renderer and the param system.\n- **Params support templated prompts and defaults.** A\nparam can now write:\n```toml\n[params]\nproject_name = { type = \"text\", prompt = \"Project name\" }\nmodule       = { type = \"text\", default = \"github.com\u002Fme\u002F{{ .project_name }}\" }\ndb_name      = { type = \"text\", default = \"{{ snake_case .project_name }}\" }\n```\n- TUI parity fix. The interactive form now receives built-in values ( name ,  project_name ) and any  --param  overrides before it opens, so the TTY and non-TTY paths produce the same resolved map.\n- Select validation in non-interactive mode. A  select  default or  --param  value that resolves outside the declared options  now errors instead of producing a project with an invalid value.\n- Safe fallback. Malformed or undefined ",{"title":13446,"url":13447,"state":13402,"updatedAt":13448,"body":87},"Fix\u002Fupdate no op detection","https:\u002F\u002Fgithub.com\u002Fsam0uly\u002Fspin\u002Fpull\u002F4","2026-07-20T02:56:54Z",{"title":13450,"url":13451,"state":13452,"updatedAt":13453,"body":13454},"Fix\u002Fmodernize codebase","https:\u002F\u002Fgithub.com\u002FTwigpine\u002Fzero\u002Fpull\u002F524","closed","2026-07-05T15:25:39Z","## Summary\n\n\u003C!-- What does this change do, and why? -->\nthis is just modernizing the codebase like the std lib upgrades and stuff.\n## Linked issue\n\n\u003C!-- Per CONTRIBUTING.md, PRs need an approved parent issue with the `issue-approved` label. -->\nFixes #523\n\n## Checklist\n\n- [ ] The linked issue already has the `issue-approved` label.\n- [ ] `go build .\u002F...`, `go vet .\u002F...`, and `go test .\u002F...` pass locally.\n- [ ] `gofmt` clean.\n- [ ] Tests added\u002Fupdated for the change (and run under `-race` where relevant).\n- [ ] UI changes include screenshots or a short recording where possible.",{"title":13456,"url":13457,"state":13402,"updatedAt":13458,"body":13459},"Fix\u002Fdetailed view scroll select","https:\u002F\u002Fgithub.com\u002FTwigpine\u002Fzero\u002Fpull\u002F498","2026-07-05T11:36:08Z","## Summary\n\n\u003C!-- What does this change do, and why? -->\n\n\n\n## Linked issue\n\n\u003C!-- Per CONTRIBUTING.md, PRs need an approved parent issue with the `issue-approved` label. -->\nFixes #495\n\nhttps:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F43d16dcb-524a-4f8d-a966-ef1099d59fe3\n\n## Checklist\n\n- [x] The linked issue already has the `issue-approved` label.\n- [x] `go build .\u002F...`, `go vet .\u002F...`, and `go test .\u002F...` pass locally.\n- [x] `gofmt` clean.\n- [x] Tests added\u002Fupdated for the change (and run under `-race` where relevant).\n- [x] UI changes include screenshots or a short recording where possible.\n\n\n\u003C!-- This is an auto-generated comment: release notes by coderabbit.ai -->\n## Summary by CodeRabbit\n\n* **New Features**\n  * Detailed transcript mode now supports PgUp\u002FPgDown and Up\u002FDown scrolling within the view, including consistent small-step behavior.\n  * Toggling detailed transcript now exits an active file view.\n* **Bug Fixes**\n  * Clipboard\u002Fplain-text exports now fully strip ANSI\u002Fcontrol sequences, including highlighted code blocks.\n  * Improved detailed transcript layout and scrolling visibility.\n* **UI Changes**\n  * Context sidebar is hidden during detailed transcript mode.\n  * Ctrl+B sideb",{"title":13461,"url":13462,"state":13452,"updatedAt":13463,"body":13464},"Fix\u002Fmodernize zero codebase","https:\u002F\u002Fgithub.com\u002FTwigpine\u002Fzero\u002Fpull\u002F500","2026-07-04T16:48:59Z","## Summary\n\n\u003C!-- What does this change do, and why? -->\nthis is just a QoC commit its just around minmax and forver and omitzero\n## Linked issue\n\n\u003C!-- Per CONTRIBUTING.md, PRs need an approved parent issue with the `issue-approved` label. -->\nFixes #\n\n## Checklist\n\n- [ ] The linked issue already has the `issue-approved` label.\n- [ ] `go build .\u002F...`, `go vet .\u002F...`, and `go test .\u002F...` pass locally.\n- [ ] `gofmt` clean.\n- [ ] Tests added\u002Fupdated for the change (and run under `-race` where relevant).\n- [ ] UI changes include screenshots or a short recording where possible.",{"title":13466,"url":13467,"state":13402,"updatedAt":13468,"body":13469},"fix(tui): compose help overlay through the viewport overlay pipeline","https:\u002F\u002Fgithub.com\u002FTwigpine\u002Fzero\u002Fpull\u002F421","2026-07-03T03:45:55Z","exactly like how other popups works.\n\n# before:\n\u003Cimg width=\"1890\" height=\"1001\" alt=\"image\" src=\"https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F28544b76-3ee5-49c2-aaa0-ce934d8b084f\" \u002F>\n\n# after:\n\u003Cimg width=\"1890\" height=\"1001\" alt=\"image\" src=\"https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F263879ed-1d6c-48ed-8295-3af79e46f28c\" \u002F>\n\n## Summary\n\n\u003C!-- What does this change do, and why? -->\n\n## Linked issue\n\n\u003C!-- Per CONTRIBUTING.md, PRs need an approved parent issue with the `issue-approved` label. -->\nFixes #419 \n\n## Checklist\n\n- [ ] The linked issue already has the `issue-approved` label.\n- [ ] `go build .\u002F...`, `go vet .\u002F...`, and `go test .\u002F...` pass locally.\n- [ ] `gofmt` clean.\n- [ ] Tests added\u002Fupdated for the change (and run under `-race` where relevant).\n- [ ] UI changes include screenshots or a short recording where possible.\n\n\n\u003C!-- This is an auto-generated comment: release notes by coderabbit.ai -->\n## Summary by CodeRabbit\n\n* **Bug Fixes**\n  * Integrated the keyboard shortcuts help overlay into the main transcript overlay flow so it layers over the chat UI instead of replacing it.\n  * Improved overlay layout: the right-side context sidebar is hidden while the help overlay is activ",{"title":13471,"url":13472,"state":13391,"updatedAt":13473,"body":13474},"feat: prism tests watcher","https:\u002F\u002Fgithub.com\u002FDaltonSW\u002Fprism\u002Fpull\u002F10","2026-06-23T16:24:51Z","## Add tests watcher mode\n\n- Add new flag for running the watcher mode\n- watcher mode watches any .go file changed\n- 3 new packages `charm\u002Fx\u002Fansi`, `charm\u002Fx\u002Fterm`, `sabhiram\u002Fgo-gitignore`.\n- the watcher works greatly with `.gitignore`.\n- it have `r` for force rerun and `q` for quit.\n- idk what to write more XD",{"title":13476,"url":13477,"state":13402,"updatedAt":13478,"body":13479},"fix: improve prism tests UX","https:\u002F\u002Fgithub.com\u002FDaltonSW\u002Fprism\u002Fpull\u002F8","2026-06-22T15:12:12Z","Added \"Running tests... \" like `prism bench` improving the ux of running tests.",{"title":13481,"url":13482,"state":13402,"updatedAt":13483,"body":13484},"Add samouly is a dev \u003C: thanks","https:\u002F\u002Fgithub.com\u002Fis-a-dev\u002Fregister\u002Fpull\u002F29529","2025-11-19T18:38:21Z","\u003C!--\nYOU MUST FILL OUT THIS TEMPLATE FOR YOUR PR TO BE ACCEPTED!\n-->\n\n# Requirements\n\u003C!-- Your domain MUST pass ALL the requirements below, otherwise it WILL BE DENIED. -->\n\u003C!-- Change each checkbox to [x] (all lowercase, with no spaces between the brackets) to mark it as completed. -->\n\n- [x] I **agree** to the [Terms of Service](https:\u002F\u002Fis-a.dev\u002Fterms). \u003C!-- Your request MUST follow the TOS to be approved. -->\n- [x] My file is following the [domain structure](https:\u002F\u002Fdocs.is-a.dev\u002Fdomain-structure\u002F). \u003C!-- Your JSON file is in the domains directory, the name is valid, etc. -->\n- [x] My website is **reachable** and **completed**. \u003C!-- We do not permit simple \"Hello, world!\" or simply copied template websites with minimal changes. -->\n- [x] My website is **software development** related. \u003C!-- Only your root subdomain needs to meet this requirement. -->\n- [x] My website is **not for commercial use**. \u003C!-- Your website's purpose should not be to generate any form of revenue or profit. -->\n- [x] I have provided contact information in the `owner` key. \u003C!-- Provide your email in the `email` field or another platform (e.g. X\u002FTwitter or Discord) for contact. -->\n- [x] I have provided a pre",{"title":13486,"url":13487,"state":13402,"updatedAt":13488,"body":13489},"doc: Update README.md","https:\u002F\u002Fgithub.com\u002Frubiin\u002Ftsumiki\u002Fpull\u002F191","2025-08-27T13:59:45Z","**README Update**: updatw  in the init.sh script's command-line argument, specifically changing -install to -setup.",{"title":13491,"url":13492,"state":13402,"updatedAt":13493,"body":87},"Clean start for migarating ags v2","https:\u002F\u002Fgithub.com\u002FLunaris-Project\u002FHyprLuna\u002Fpull\u002F1","2025-07-08T16:02:48Z",{"title":13495,"url":13496,"state":13402,"updatedAt":13497,"body":87},"\tmodified:   .gitignore","https:\u002F\u002Fgithub.com\u002FLunaris-Project\u002Flunaris-installer\u002Fpull\u002F1","2025-03-16T20:34:59Z",{"title":13499,"url":13500,"state":13402,"updatedAt":13501,"body":87},"Master","https:\u002F\u002Fgithub.com\u002FLunaris-Project\u002FProject-Mapping\u002Fpull\u002F1","2025-02-14T22:53:42Z",{"title":13503,"url":13504,"state":13402,"updatedAt":13505,"body":87},"Fixing BMI conditions","https:\u002F\u002Fgithub.com\u002Fsam0uly\u002FBMI-Calculator\u002Fpull\u002F2","2025-02-04T11:53:33Z",{"title":13499,"url":13507,"state":13402,"updatedAt":13508,"body":87},"https:\u002F\u002Fgithub.com\u002Fsam0uly\u002FBMI-Calculator\u002Fpull\u002F1","2025-02-04T02:14:55Z",{"title":13510,"url":13511,"state":13452,"updatedAt":13512,"body":87},"Alaa2472 patch 1","https:\u002F\u002Fgithub.com\u002Fmohitmimani\u002FDiscord-Bot-Website\u002Fpull\u002F2","2023-02-14T13:59:15Z"]