devenv - بيئات مطور Nix الإعلانية
ينشئ devenv (من قبل Cachix) بيئات تطوير سريعة وإعلانية وقابلة للتكرار وقابلة للتكوين باستخدام Nix مباشرة. على عكس الأدوات التي تخفي Nix وراء JSON، فإن devenv يعتنق لغة Nix للحصول على تكوينه مما يعطيك قوة ومرونة أكثر: اللغات والحزم والخدمات (قواعس البيانات والمخابئ) والعمليات طويلة الأجل والسيناريوهات ومتغيرات البيئة والخطافات السابقة للالتزام/git — كلها محددة في واحد devenv.nix. إنه الاختيار عندما تريد القدرة والمرونة الكاملة في Nix مع طبقة جاهزة للاستخدام وودية للمطورين.
التثبيت
| الطريقة | الأمر |
|---|
| المتطلب | Nix مع فعّل flakes |
| تثبيت | nix profile install nixpkgs#devenv (أو عبر تعليمات Cachix) |
| Cachix | موصى به للتخزين المؤقت الثنائي السريع |
| التحقق | devenv version |
الشروع في العمل
| الأمر | الوصف |
|---|
devenv init | Scaffold devenv.nix + devenv.yaml |
devenv shell | أدخل البيئة |
devenv up | بدء العمليات/الخدمات المحددة |
devenv test | تشغيل الاختبارات/الفحوصات المكونة |
devenv update | تحديث المدخلات (إصدارات أحدث دبوس) |
devenv gc | جمع القمامة البيئات القديمة |
التكوين (devenv.nix)
{ pkgs, ... }:
{
# الحزم المتاحة في الصدفة
packages = [ pkgs.git pkgs.jq ];
# اللغات (سلاسل أدوات مدارة)
languages.javascript.enable = true;
languages.python = {
enable = true;
version = "3.12";
};
# الخدمات
services.postgres.enable = true;
services.redis.enable = true;
# متغيرات Env
env.APP_ENV = "development";
# السيناريوهات
scripts.hello.exec = "echo مرحبا من devenv";
# العمليات طويلة الأجل
processes.web.exec = "npm run dev";
# خطافات Git (قبل الالتزام)
pre-commit.hooks = {
prettier.enable = true;
ruff.enable = true;
};
}
كتل البناء الرئيسية
| كتلة | الغرض |
|---|
packages | حزم Nix التعسفية في الصدفة |
languages.* | دعم لغة من الدرجة الأولى (node, python, go, rust, …) |
services.* | قواعد البيانات/المخابئ (postgres, redis, mysql, mongodb, …) |
processes.* | أوامر طويلة المدى تدار بـ devenv up |
scripts.* | أوامر مسماة قابلة للتشغيل في الصدفة |
env.* | متغيرات البيئة |
pre-commit.hooks.* | تكاملات خطافات قبل الالتزام بـ Git |
الخدمات والعمليات
| الأمر | الوصف |
|---|
devenv up | بدء جميع processes و services |
devenv up -d | ابدأ في الخلفية |
devenv processes down | عمليات التوقف |
services.postgres.enable = true; | إضافة Postgres مدارة |
services.postgres.initialDatabases | بذر قواعد البيانات عند البداية |
خطافات Git (قبل الالتزام)
يدمج devenv خطافات قبل الالتزام بشكل إعلاني — تمكين خطاف وتشغيله على الالتزام.
| مثال خطاف | التشغيل |
|---|
prettier.enable | تنسيق JS/TS/إلخ. |
ruff.enable | Lint Python |
nixpkgs-fmt.enable | تنسيق Nix |
shellcheck.enable | فحص نصوص shell |
CI والحاويات
| الاستخدام | الطريقة |
|---|
| CI | devenv test / devenv shell -- <cmd> للبيئات المطابقة |
| الحاويات | devenv container build ينتج صور OCI |
| direnv | .envrc مع use devenv دخول تلقائي على cd |
| Flakes | قابلة للتكوين مع نظام Nix flake الأوسع |
سير العمل العام
# بيئة كاملة قابلة للتكرار: لغة + قاعدة بيانات + عملية
devenv init
# edit devenv.nix: تمكين python, services.postgres, processes.web
devenv shell # الأدوات المتاحة
devenv up # postgres + عملية الويب تعمل
# بناء حاوية من نفس التعريف
devenv container build web
devenv مقابل Devbox مقابل Nix الخام
| الجانب | devenv | Devbox | Nix (خام) |
|---|
| التكوين | لغة Nix | JSON | لغة Nix |
| القوة | عالية (Nix الكاملة) | متوسط | الأعلى |
| الخدمات/العمليات | مدمج غني | خدمات أساسية | DIY |
| منحنى التعلم | معتدل (Nix) | لطيف | شديد |
| الأفضل لـ | بيئات إعلانية قوية | بيئات قابلة للتكرار سهلة | تحكم كامل |
إذا كانت بناء جملة Nix حاجزاً، فإن Devbox تقدم بديلاً قائماً على JSON على نفس الأساس؛ انظر Nix للقاعدة.
الموارد