https://github.com/debug-ing/learn-nix
I learn nix and share.
https://github.com/debug-ing/learn-nix
nix nixos
Last synced: about 1 month ago
JSON representation
I learn nix and share.
- Host: GitHub
- URL: https://github.com/debug-ing/learn-nix
- Owner: debug-ing
- Created: 2024-12-24T23:24:07.000Z (over 1 year ago)
- Default Branch: master
- Last Pushed: 2024-12-26T14:01:40.000Z (over 1 year ago)
- Last Synced: 2025-09-11T00:36:45.990Z (7 months ago)
- Topics: nix, nixos
- Language: Nix
- Homepage:
- Size: 92.8 KB
- Stars: 3
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Nix and NixOS
دو مفهوم کلیدی در دنیای مدیریت بستهها و سیستم عاملها هستند که با رویکردهای منحصربهفرد خود توانستهاند توجه بسیاری از توسعهدهندگان و مدیران سیستم را جلب کنند. در این مقاله، با هر دو آشنا خواهیم شد و به ویژگیها و کاربردهای آنها میپردازیم.
## Nix
یک ابزار مدیریت بسته عملکردی است که به توسعهدهندگان این امکان را میدهد تا محیطهای نرمافزاری قابل تکرار، ایزوله و دقیقاً قابل پیشبینی ایجاد کنند.
### ویژگی ها
ایزولهسازی بستهها: هر بسته در مسیر جداگانهای نصب میشود، از بروز تضاد میان نسخهها جلوگیری میکند.
پشتیبانی از بازگشت: بهسادگی میتوانید به نسخههای قبلی بستهها بازگردید.
پیکربندی اعلامی: تمام وابستگیها و تنظیمات یک پروژه در یک فایل مشخص تعریف میشود.
### نمونه
نمونه با زبان Go version 1.23.0
```nix
{
pkgs ? import {}
}:
pkgs.mkShell {
buildInputs = [
pkgs.go_1_23
];
shellHook = ''
echo "به محیط توسعه خوش آمدید!"
'';
}
```
بریم داخل پوشه ها مثال هارو ببینیم :)
## NixOs
یک توزیع لینوکسی است که بر پایه Nix ساخته شده است. این سیستم عامل به طور کامل قابل تنظیم و ویرایش است و تمام تنظیمات آن در فایلهای پیکربندی تعریف میشود. این رویکرد، مدیریت سیستمها را ساده میکند.
### ویژگیهای کلیدی
سیستم اعلامی: تمام جنبههای سیستم، از نصب بستهها گرفته تا تنظیمات شبکه، در فایلهای پیکربندی تعریف میشود.
ایزولهسازی کامل: بستهها و تنظیمات از یکدیگر کاملاً جدا هستند.
بهروزرسانی و بازگشت ساده: میتوانید سیستم را بدون ریسک ارتقا دهید و در صورت نیاز به وضعیت قبلی بازگردید.
خوراک DevOps : ابزار مناسبی برای ایجاد و مدیریت محیطهای یکسان برای توسعه، آزمایش و تولید.
### نمونه
فایل زیر یک سیستم NixOS را با سرور SSH و یک کاربر جدید پیکربندی میکند
```nix
{
config, pkgs, ... }:
{
users.users.john = {
isNormalUser = true;
home = "/home/john";
shell = pkgs.bash;
};
services.openssh.enable = true;
system.stateVersion = "23.05"; # مطابق با نسخه NixOS
}
```
### تنظیم نوع Desktop در NixOS
در NixOS، نوع محیط دسکتاپ (مثل GNOME، KDE، XFCE و غیره) به راحتی از طریق فایل پیکربندی قابل تغییر است. مراحل زیر را میتوانید برای تنظیم محیط دسکتاپ دنبال کنید:
1. فایل پیکربندی NixOS که معمولاً در مسیر /etc/nixos/configuration.nix قرار دارد را باز کنید.
2. ویرایش تنظیمات برای مثال
GNOME
```nix
{ config, pkgs, ... }:
{
services.xserver.enable = true;
services.xserver.displayManager.gdm.enable = true;
services.xserver.desktopManager.gnome.enable = true;
}
```
KDE Plasma
```nix
{ config, pkgs, ... }:
{
services.xserver.enable = true;
services.xserver.displayManager.sddm.enable = true;
services.xserver.desktopManager.plasma5.enable = true;
}
```
3. ذخیره کنید
```
sudo nixos-rebuild switch
```
4. سیستم را ریاستارت کنید تا تغییرات اعمال شوند.
### System Profiles
System Profiles یکی از ویژگیهای مهم NixOS است که به کاربران اجازه میدهد بین نسخههای مختلف سیستم سوئیچ کنند یا به تنظیمات قبلی بازگردند.
با دستور زیر میتوانید تمام نسلهای ذخیرهشده (Generations) را ببینید
```
nix-env --list-generations
```
خروجی
```
1 2024-12-24 18:45:12 Initial system
2 2024-12-25 10:12:08 Updated Nginx configuration
3 2024-12-26 14:30:25 Installed Docker and tools
```
برگشت به نسخه ها و تغییرات
```
nix-env --rollback
```
## مزایای استفاده از Nix و NixOS
پایداری و قابلیت تکرار: اطمینان از عملکرد یکسان نرمافزارها در تمام مراحل توسعه تا تولید.
مدیریت ساده: ارتقا، حذف و بازگشت به وضعیتهای قبلی سیستم به آسانی.
صرفهجویی در زمان: خودکارسازی فرایندهای پیچیده و کاهش خطاهای انسانی.
مناسب برای تیمهای بزرگ: ایجاد محیطهای مشابه برای تمام اعضای تیم.
## منابع دیگه
- [Website](https://nixos.org/)
- [Discovering Nix: A New Era in Package Management](https://medium.com/@debug-ing/discovering-nix-a-new-era-in-package-management-5e904e5e3da8)