{"id":24485799,"url":"https://github.com/debug-ing/learn-nix","last_synced_at":"2026-02-12T23:32:54.524Z","repository":{"id":269626866,"uuid":"908030128","full_name":"debug-ing/learn-nix","owner":"debug-ing","description":"I learn nix and share.","archived":false,"fork":false,"pushed_at":"2024-12-26T14:01:40.000Z","size":95,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-09-11T00:36:45.990Z","etag":null,"topics":["nix","nixos"],"latest_commit_sha":null,"homepage":"","language":"Nix","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/debug-ing.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-12-24T23:24:07.000Z","updated_at":"2024-12-26T15:00:28.000Z","dependencies_parsed_at":"2025-05-07T19:39:02.137Z","dependency_job_id":"a82f7500-08cf-4d0c-81f4-07182374e0b1","html_url":"https://github.com/debug-ing/learn-nix","commit_stats":null,"previous_names":["debug-ing/learn-nix"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/debug-ing/learn-nix","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/debug-ing%2Flearn-nix","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/debug-ing%2Flearn-nix/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/debug-ing%2Flearn-nix/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/debug-ing%2Flearn-nix/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/debug-ing","download_url":"https://codeload.github.com/debug-ing/learn-nix/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/debug-ing%2Flearn-nix/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29386219,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-12T22:07:52.078Z","status":"ssl_error","status_checked_at":"2026-02-12T22:07:49.026Z","response_time":55,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["nix","nixos"],"created_at":"2025-01-21T14:20:00.925Z","updated_at":"2026-02-12T23:32:54.519Z","avatar_url":"https://github.com/debug-ing.png","language":"Nix","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Nix and NixOS \nدو مفهوم کلیدی در دنیای مدیریت بسته‌ها و سیستم عامل‌ها هستند که با رویکردهای منحصربه‌فرد خود توانسته‌اند توجه بسیاری از توسعه‌دهندگان و مدیران سیستم را جلب کنند. در این مقاله، با هر دو آشنا خواهیم شد و به ویژگی‌ها و کاربردهای آنها می‌پردازیم.\n\n## Nix\n\nیک ابزار مدیریت بسته عملکردی است که به توسعه‌دهندگان این امکان را می‌دهد تا محیط‌های نرم‌افزاری قابل تکرار، ایزوله و دقیقاً قابل پیش‌بینی ایجاد کنند.\n\n### ویژگی ها \n\nایزوله‌سازی بسته‌ها: هر بسته در مسیر جداگانه‌ای نصب می‌شود، از بروز تضاد میان نسخه‌ها جلوگیری می‌کند.\n\nپشتیبانی از بازگشت: به‌سادگی می‌توانید به نسخه‌های قبلی بسته‌ها بازگردید.\n\nپیکربندی اعلامی: تمام وابستگی‌ها و تنظیمات یک پروژه در یک فایل مشخص تعریف می‌شود.\n\n### نمونه\nنمونه با زبان Go version 1.23.0\n\n```nix\n{\n  pkgs ? import \u003cnixpkgs\u003e {}\n}:\n\npkgs.mkShell {\n  buildInputs = [\n    pkgs.go_1_23\n  ];\n\n  shellHook = ''\n     echo \"به محیط توسعه خوش آمدید!\"\n  '';\n}\n```\nبریم داخل پوشه ها مثال هارو ببینیم :)\n\n\n## NixOs \n\nیک توزیع لینوکسی است که بر پایه Nix ساخته شده است. این سیستم عامل به طور کامل قابل تنظیم و ویرایش است و تمام تنظیمات آن در فایل‌های پیکربندی تعریف می‌شود. این رویکرد، مدیریت سیستم‌ها را ساده می‌کند.\n\n### ویژگی‌های کلیدی\nسیستم اعلامی: تمام جنبه‌های سیستم، از نصب بسته‌ها گرفته تا تنظیمات شبکه، در فایل‌های پیکربندی تعریف می‌شود.\n\nایزوله‌سازی کامل: بسته‌ها و تنظیمات از یکدیگر کاملاً جدا هستند.\n\nبه‌روزرسانی و بازگشت ساده: می‌توانید سیستم را بدون ریسک ارتقا دهید و در صورت نیاز به وضعیت قبلی بازگردید.\n\nخوراک DevOps : ابزار مناسبی برای ایجاد و مدیریت محیط‌های یکسان برای توسعه، آزمایش و تولید.\n\n\n### نمونه\n\nفایل زیر یک سیستم NixOS را با سرور SSH و یک کاربر جدید پیکربندی می‌کند\n\n```nix\n{\n  config, pkgs, ... }:\n{\n  users.users.john = {\n    isNormalUser = true;\n    home = \"/home/john\";\n    shell = pkgs.bash;\n  };\n\n  services.openssh.enable = true;\n\n  system.stateVersion = \"23.05\"; # مطابق با نسخه NixOS\n}\n```\n\n### تنظیم نوع Desktop در NixOS\n\nدر NixOS، نوع محیط دسکتاپ (مثل GNOME، KDE، XFCE و غیره) به راحتی از طریق فایل پیکربندی قابل تغییر است. مراحل زیر را می‌توانید برای تنظیم محیط دسکتاپ دنبال کنید:\n\n\n1. فایل پیکربندی NixOS که معمولاً در مسیر /etc/nixos/configuration.nix قرار دارد را باز کنید.\n\n2. ویرایش تنظیمات برای مثال\n\nGNOME\n\n```nix\n{ config, pkgs, ... }:\n\n{\n  services.xserver.enable = true;\n  services.xserver.displayManager.gdm.enable = true;\n  services.xserver.desktopManager.gnome.enable = true;\n}\n```\n\nKDE Plasma\n\n```nix\n{ config, pkgs, ... }:\n\n{\n  services.xserver.enable = true;\n  services.xserver.displayManager.sddm.enable = true;\n  services.xserver.desktopManager.plasma5.enable = true;\n}\n```\n3. ذخیره کنید\n```\nsudo nixos-rebuild switch\n```\n4. سیستم را ری‌استارت کنید تا تغییرات اعمال شوند.\n\n\n###  System Profiles\nSystem Profiles یکی از ویژگی‌های مهم NixOS است که به کاربران اجازه می‌دهد بین نسخه‌های مختلف سیستم سوئیچ کنند یا به تنظیمات قبلی بازگردند.\n\nبا دستور زیر می‌توانید تمام نسل‌های ذخیره‌شده (Generations) را ببینید\n\n```\nnix-env --list-generations\n```\nخروجی\n```\n1   2024-12-24 18:45:12   Initial system\n2   2024-12-25 10:12:08   Updated Nginx configuration\n3   2024-12-26 14:30:25   Installed Docker and tools\n```\nبرگشت به نسخه ها و تغییرات\n```\nnix-env --rollback\n```\n\n\n## مزایای استفاده از Nix و NixOS\nپایداری و قابلیت تکرار: اطمینان از عملکرد یکسان نرم‌افزارها در تمام مراحل توسعه تا تولید.\n\nمدیریت ساده: ارتقا، حذف و بازگشت به وضعیت‌های قبلی سیستم به آسانی.\n\nصرفه‌جویی در زمان: خودکارسازی فرایندهای پیچیده و کاهش خطاهای انسانی.\n\nمناسب برای تیم‌های بزرگ: ایجاد محیط‌های مشابه برای تمام اعضای تیم.\n\n## منابع دیگه\n- [Website](https://nixos.org/)\n- [Discovering Nix: A New Era in Package Management](https://medium.com/@debug-ing/discovering-nix-a-new-era-in-package-management-5e904e5e3da8)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdebug-ing%2Flearn-nix","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdebug-ing%2Flearn-nix","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdebug-ing%2Flearn-nix/lists"}