8.6.4. عبارت پیشفرض Nix
عبارت Nix پیشفرض
سورسِ عبارتهای نیکس (Nix expression) که به طور پیشفرض توسط nix-env استفاده میشود:
~/.nix-defexpr$XDG_STATE_HOME/nix/defexprاگرuse-xdg-base-directoriesروی مقدارtrueتنظیم شده باشد.
بارگذاری آن به صورت زیر انجام میشود:
- اگر عبارت پیشفرض یک فایل باشد، به عنوان یک عبارت Nix بارگذاری میشود.
- اگر عبارت پیشفرض یک پوشه حاوی یک فایل
default.nixباشد، آن فایلdefault.nixبه عنوان یک عبارت Nix بارگذاری میشود. - اگر عبارت پیشفرض پوشهای بدون فایل
default.nixباشد، محتویات آن (هم فایلها و هم زیرماژولها/زیرپوشهها) به عنوان عبارتهای Nix بارگذاری میشوند. این عبارتها در یک مجموعه ویژگی واحد ترکیب میشوند که هر عبارت تحت صفتی با همان نام فایل یا زیرپوشه اصلی قرار میگیرد. زیرپوشههای بدون فایلdefault.nixبرای جستجوی عبارتهای Nix بیشتر به صورت بازگشتی پیمایش میشوند، اما نام این پوشههای میانی به مسیرهای صفت عبارت Nix پیشفرض اضافه نمیشود.
سپس، عبارت حاصل به این صورت تفسیر میشود:
- اگر عبارت یک مجموعه ویژگی باشد، به عنوان عبارت Nix پیشفرض استفاده میشود.
- اگر عبارت یک تابع باشد، یک مجموعه خالی به عنوان آرگومان به آن ارسال میشود و مقدار بازگشتی به عنوان عبارت Nix پیشفرض استفاده میشود.
مثال
اگر عبارت پیشفرض شامل دو فایل
foo.nixوbar.nixباشد، آنگاه عبارت Nix پیشفرض معادل خواهد بود با{ foo = import ~/.nix-defexpr/foo.nix; bar = import ~/.nix-defexpr/bar.nix; }
فایل manifest.nix همیشه نادیده گرفته میشود.
دستور nix-channel یک پیوند نمادین (symlink) به channels کاربر فعلی در این پوشه قرار میدهد که همان لینک کانال کاربر است.
این کار باعث میشود تمام کانالهای مشترکشده به عنوان صفت (attribute) در عبارت پیشفرض در دسترس باشند.
لینک کانال کاربر
یک پیوند نمادین (symlink) که تضمین میکند nix-env میتواند channels کاربر فعلی را پیدا کند:
~/.nix-defexpr/channels$XDG_STATE_HOME/nix/defexpr/channelsاگرuse-xdg-base-directoriesرویtrueتنظیم شده باشد.
این پیوند نمادین (symlink) به مسیرهای زیر اشاره میکند:
$XDG_STATE_HOME/nix/profiles/channelsبرای کاربران معمولی$NIX_STATE_DIR/profiles/per-user/root/channelsبرای کاربرroot
در یک نصب چندکاربره، ممکن است ~/.nix-defexpr/channels_root را نیز داشته باشید که به کانالهای کاربر root متصل میشود.
nix.dev/manual/nix/stable/command-ref/files/default-nix-expression.html