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.nixosSystem
funksiyasiningspecialArgs
parametri orqali.- Modul ichida
_module.args
opsiyasidan foydalanish.
Bu parametrlarning rasmiy hujjatlari murakkab boʻlishi mumkin. Qisqacha aytganda:
specialArgs
aniqroq va sodda boʻlib, tavsiya qilinadi._module.args
esa 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: