Flakes va Nixpkgs modullar tizimining kombinatsiya imkoniyatlari
Nixpkgs modul tizimining tuzilishi haqida
Modul tizimining batafsil ishlashi keyingi NixOS konfiguratsiyasini modullashtirish boʻlimida batafsil tushuntiriladi. Bu yerda faqat baʼzi asosiy bilimlarni koʻrib chiqamiz.
/etc/nixos/configuration.nix konfiguratsiya faylining Nixpkgs moduliga mos kelishi va uni flake.nix ichida bevosita murojaat qilish mumkinligiga hayron boʻlayotgan boʻlishingiz mumkin.
Buni tushunish uchun avval Nixpkgs modul tizimining kelib chiqishi va uning maqsadini oʻrganishimiz kerak.
NixOS ning barcha amalga oshirish kodlari Nixpkgs/nixos (opens in a new tab) katalogida saqlanadi va koʻpchiligi Nix tilida yozilgan. Bunday koʻp sonli kodlarni yozish va saqlash, shuningdek foydalanuvchilar uchun tizimni moslash imkonini berish uchun Nix uchun modulli tizim zarur.
Bu modulli tizim Nixpkgs repozitoriyasida amalga oshirilgan va asosan NixOS tizim konfiguratsiyalarini modullashtirish uchun ishlatiladi. Lekin u boshqa kontekstlarda ham keng qoʻllaniladi (masalan, nix-darwin va home-manager).
Nixpkgs modulining soddalashtirilgan tuzilishi quyidagicha:
{lib, config, options, pkgs, ...}:
{
imports = [
./xxx.nix
];
foo.bar.enable = true;
}Bu taʼrif aslida Nix funksiyasi boʻlib, modul tizimi tomonidan avtomatik yaratilgan va quyidagi beshta parametrni qabul qiladi:
lib: nixpkgs ichidagi foydali funksiyalar kutubxonasi.config: Joriy muhitdagi barcha parametrlar qiymatlari.options: Joriy muhitdagi barcha modullarda aniqlangan parametrlar.pkgs: nixpkgs paketlar toʻplami va yordamchi funksiyalar.modulesPath: NixOS da mavjud boʻlgan, qoʻshimcha modullarni import qilish uchun ishlatiladigan yoʻl.
Submodullarga nostandart parametrlarni uzatish
Submodullarga nostandart parametrlarni uzatish uchun ikkita maxsus usul mavjud:
nixpkgs.lib.nixosSystemfunksiyasiningspecialArgsparametri orqali.- Modul ichida
_module.argsopsiyasidan foydalanish.
Bu parametrlarning rasmiy hujjatlari murakkab boʻlishi mumkin. Qisqacha aytganda:
specialArgsaniqroq va sodda boʻlib, tavsiya qilinadi._module.argsesa modullar oʻrtasida oʻzaro parametrlarni uzatish uchun ishlatiladi, lekin undan ehtiyot boʻlib foydalanish zarur.
specialArgs orqali bogʻliqliklarni uzatish misoli:
{
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-24.11";
another-input.url = "github:username/repo-name/branch-name";
};
outputs = inputs@{ self, nixpkgs, another-input, ... }: {
nixosConfigurations.my-nixos = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
specialArgs = { inherit inputs; };
modules = [
./configuration.nix
];
};
};
}Boshqa Flakeʼlardan tizim dasturlarini oʻrnatish
Boshqa Flake manbalaridan dasturlarni oʻrnatishning asosiy usuli inputs dan foydalanishdir. Masalan, Helix muharririning master filialini oʻrnatish uchun:
flake.nix fayliga helix ni qoʻshamiz:
{
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-24.11";
helix.url = "github:helix-editor/helix/master";
};
outputs = inputs@{ self, nixpkgs, ... }: {
nixosConfigurations.my-nixos = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
specialArgs = { inherit inputs; };
modules = [
./configuration.nix
];
};
};
}Soʻngra, configuration.nix faylida:
{ config, pkgs, inputs, ... }:
{
environment.systemPackages = with pkgs; [
git
vim
wget
inputs.helix.packages."${pkgs.system}".helix
];
}Boshqa Flake paketlarining imkoniyatlaridan foydalanish
Bu Flakesʼning asosiy vazifasi hisoblanadi — Flake boshqa Flakeʼlarga bogʻlanib, ular taqdim etgan imkoniyatlardan foydalanishi mumkin.
Masalan:
Qoʻshimcha Flakes boʻyicha qoʻllanmalar
Agar Flakes haqida qoʻshimcha savollaringiz boʻlsa, quyidagi manbalarga murojaat qiling: