Flakes/ru: Difference between revisions
 Updating to match new version of source page Tags: Mobile edit Mobile web edit  | 
				 Updating to match new version of source page  | 
				||
| (One intermediate revision by the same user not shown) | |||
| Line 9: | Line 9: | ||
Флейки также поддерживают фиксацию ссылок и версий, которые затем могут быть запрошены и обновлены программно через inputs{{cite manual|nix|command-ref/new-cli/nix3-flake-lock|number=7.5.19|title=nix flake lock}}{{cite manual|nix|command-ref/new-cli/nix3-flake-info|number=7.5.17|title=nix flake info}}. Кроме того, экспериментальная утилита командной строки принимает flake-ссылки для выражений, которые собирают, выполняют и развёртывают пакеты{{Cite manual|nix|command-ref/new-cli/nix|number=8.5.1|title=nix}}.  | Флейки также поддерживают фиксацию ссылок и версий, которые затем могут быть запрошены и обновлены программно через inputs{{cite manual|nix|command-ref/new-cli/nix3-flake-lock|number=7.5.19|title=nix flake lock}}{{cite manual|nix|command-ref/new-cli/nix3-flake-info|number=7.5.17|title=nix flake info}}. Кроме того, экспериментальная утилита командной строки принимает flake-ссылки для выражений, которые собирают, выполняют и развёртывают пакеты{{Cite manual|nix|command-ref/new-cli/nix|number=8.5.1|title=nix}}.  | ||
<span id="Flake_file_structure"></span>  | |||
<div class="mw-translate-fuzzy">  | |||
== Структура flake-файла ==  | == Структура flake-файла ==  | ||
В простейшем виде flake-файл содержит описание флейка, набор входных зависимостей (inputs) и выход (output). Вы можете сгенерировать шаблонный flake-файл в любой момент с помощью <code>nix flake init</code>. Это создаст в текущей директории файл <code>flake.nix</code>, содержащий примерно следующее:  | В простейшем виде flake-файл содержит описание флейка, набор входных зависимостей (inputs) и выход (output). Вы можете сгенерировать шаблонный flake-файл в любой момент с помощью <code>nix flake init</code>. Это создаст в текущей директории файл <code>flake.nix</code>, содержащий примерно следующее:  | ||
{{File|3=<nowiki>{  | |||
  description = "A very basic flake";  | |||
</div>  | |||
<div lang="en" dir="ltr" class="mw-content-ltr">  | |||
Minimally, a flake file contains a description of the flake, a set of input dependencies and an output. You can generate a very basic flake file at any time using nix flake init. This will populate the current directory with a file called flake.nix that will contain something akin to:  | |||
</div>  | |||
{{File|3=<nowiki>{  | {{File|3=<nowiki>{  | ||
   description = "A very basic flake";  |    description = "A very basic flake";  | ||
inputs = {  | |||
     nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable";  |      nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable";  | ||
   };  |    };  | ||
outputs = { self, nixpkgs }: {  | |||
packages.x86_64-linux.hello = nixpkgs.legacyPackages.x86_64-linux.hello;  | |||
packages.x86_64-linux.default = self.packages.x86_64-linux.hello;  | |||
   };  |    };  | ||
}</nowiki>|name=flake.nix|lang=nix}}  | |||
<div class="mw-translate-fuzzy">  | |||
};  | |||
}</nowiki>|name=flake.nix|lang=nix}}  | }</nowiki>|name=flake.nix|lang=nix}}  | ||
В примере выше вы можете видеть описание, вход (input), указанный как репозиторий GitHub с конкретной веткой (здесь <code>nixos/nixpkgs</code> на ветке <code>nixos-unstable</code>), и выход (output), который использует этот input. Output в этом примере просто определяет, что в флейке есть один пакет для архитектуры x86_64 под именем <code>hello</code>. Даже если output вашего флейка не использует его inputs (что на практике маловероятно), output всё равно должен быть Nix-функцией.  | В примере выше вы можете видеть описание, вход (input), указанный как репозиторий GitHub с конкретной веткой (здесь <code>nixos/nixpkgs</code> на ветке <code>nixos-unstable</code>), и выход (output), который использует этот input. Output в этом примере просто определяет, что в флейке есть один пакет для архитектуры x86_64 под именем <code>hello</code>. Даже если output вашего флейка не использует его inputs (что на практике маловероятно), output всё равно должен быть Nix-функцией.  | ||
{{Note|Флейки требуют явного указания outputs для каждой архитектуры отдельно. Для дополнительной информации смотрите соответствующий раздел ниже.}}  | {{Note|Флейки требуют явного указания outputs для каждой архитектуры отдельно. Для дополнительной информации смотрите соответствующий раздел ниже.}}  | ||
</div>  | |||
<div lang="en" dir="ltr" class="mw-content-ltr">  | |||
{{Note|Flakes require you to specify its outputs for each architecture separately. For more information, read the related section below.}}  | |||
</div>  | |||
<span id="Nix_configuration"></span>  | |||
<div class="mw-translate-fuzzy">  | <div class="mw-translate-fuzzy">  | ||
=== Конфигурация Nix ===  | === Конфигурация Nix ===  | ||
| Line 42: | Line 62: | ||
     ];  |      ];  | ||
}</nowiki>|name=flake.nix|lang=nix}}{{Note|Если вы привыкли настраивать Nix через конфигурацию NixOS, эти опции находятся под <code>nix.settings</code>, а не под <code>nix</code>. Например, вы не сможете указать автоматическую оптимизацию хранилища через <code>nix.optimisation.enable</code>.}}  | }</nowiki>|name=flake.nix|lang=nix}}{{Note|Если вы привыкли настраивать Nix через конфигурацию NixOS, эти опции находятся под <code>nix.settings</code>, а не под <code>nix</code>. Например, вы не сможете указать автоматическую оптимизацию хранилища через <code>nix.optimisation.enable</code>.}}  | ||
</div>  | |||
<div lang="en" dir="ltr" class="mw-content-ltr">  | |||
It is possible to override the global Nix configuration set in your <code>nix.conf</code> file for the purposes of evaluating a flake. This can be useful, for example, for setting up binary caches specific to certain projects, while keeping the global configuration untouched. The flake file can contain a nixConfig attribute with any relevant configuration settings supplied. For example, enabling the nix-community binary cache would be achieved by:  | |||
</div>  | |||
{{File|3=<nowiki>{  | |||
  ...  | |||
  nixConfig = {  | |||
    extra-substituters = [  | |||
      "https://nix-community.cachix.org"  | |||
    ];  | |||
    extra-trusted-public-keys = [  | |||
      "nix-community.cachix.org-1:...="  | |||
    ];  | |||
  }  | |||
}</nowiki>|name=flake.nix|lang=nix}}  | |||
<div lang="en" dir="ltr" class="mw-content-ltr">  | |||
{{Note|If you are used to configuring your Nix settings via the NixOS configuration, these options are under <code>nix.settings</code> and not <code>nix</code>. For example, you cannot specify the automatic storage optimisation under <code>nix.optimisation.enable</code>.}}  | |||
</div>  | </div>  | ||
| Line 56: | Line 96: | ||
При использовании любой команды <code>nix</code> добавьте следующие параметры командной строки:  | При использовании любой команды <code>nix</code> добавьте следующие параметры командной строки:  | ||
</div>  | </div>  | ||
<syntaxhighlight lang="shell">  | <syntaxhighlight lang="shell">  | ||
  --experimental-features 'nix-command flakes'  |   --experimental-features 'nix-command flakes'  | ||
</syntaxhighlight>  | </syntaxhighlight>  | ||
<div lang="en" dir="ltr" class="mw-content-ltr">  | <div lang="en" dir="ltr" class="mw-content-ltr">  | ||
=== Enabling flakes permanently ===  | === Enabling flakes permanently ===  | ||
| Line 99: | Line 141: | ||
experimental-features = nix-command flakes  | experimental-features = nix-command flakes  | ||
</syntaxHighlight>  | </syntaxHighlight>  | ||
<span id="Usage"></span>  | <span id="Usage"></span>  | ||
<div class="mw-translate-fuzzy">  | <div class="mw-translate-fuzzy">  | ||
| Line 118: | Line 161: | ||
<div lang="en" dir="ltr" class="mw-content-ltr">  | <div lang="en" dir="ltr" class="mw-content-ltr">  | ||
=== The nix flakes command ===  | === The nix flakes command ===  | ||
</div>  | |||
{{Main|Nix (command)}}  | {{Main|Nix (command)}}  | ||
<div lang="en" dir="ltr" class="mw-content-ltr">  | <div lang="en" dir="ltr" class="mw-content-ltr">  | ||
| Line 129: | Line 173: | ||
</div>  | </div>  | ||
<syntaxhighlight lang="console">  | <syntaxhighlight lang="console">  | ||
$ nix flake show  | $ nix flake show  | ||
| Line 137: | Line 180: | ||
         └───hello: package 'hello-2.12.2'  |          └───hello: package 'hello-2.12.2'  | ||
</syntaxhighlight>  | </syntaxhighlight>  | ||
<div lang="en" dir="ltr" class="mw-content-ltr">  | <div lang="en" dir="ltr" class="mw-content-ltr">  | ||
| Line 147: | Line 189: | ||
</div>  | </div>  | ||
<syntaxhighlight lang="nix">  | <syntaxhighlight lang="nix">  | ||
{  | {  | ||
   description = "Example flake with a devShell";  |    description = "Example flake with a devShell";  | ||
inputs.nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable";  | inputs.nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable";  | ||
outputs = { self, nixpkgs}:  | outputs = { self, nixpkgs}:  | ||
     let  |      let  | ||
| Line 174: | Line 211: | ||
}  | }  | ||
</syntaxhighlight>  | </syntaxhighlight>  | ||
<div lang="en" dir="ltr" class="mw-content-ltr">  | <div lang="en" dir="ltr" class="mw-content-ltr">  | ||
| Line 180: | Line 216: | ||
</div>  | </div>  | ||
<syntaxhighlight lang="console">  | <syntaxhighlight lang="console">  | ||
$ nix develop  | $ nix develop  | ||
</syntaxhighlight>  | </syntaxhighlight>  | ||
<div lang="en" dir="ltr" class="mw-content-ltr">  | <div lang="en" dir="ltr" class="mw-content-ltr">  | ||
| Line 199: | Line 233: | ||
</div>  | </div>  | ||
<syntaxHighlight lang=console>  | <syntaxHighlight lang=console>  | ||
$ nix build .#hello  | $ nix build .#hello  | ||
</syntaxHighlight>  | </syntaxHighlight>  | ||
<div lang="en" dir="ltr" class="mw-content-ltr">  | <div lang="en" dir="ltr" class="mw-content-ltr">  | ||
| Line 256: | Line 288: | ||
<code>inputs.nixpkgs.url = "github:NixOS/nixpkgs/<branch name>";</code>  | <code>inputs.nixpkgs.url = "github:NixOS/nixpkgs/<branch name>";</code>  | ||
<div lang="en" dir="ltr" class="mw-content-ltr">  | |||
Nixpkgs can alternatively also point to an url cached by the NixOS organization:  | Nixpkgs can alternatively also point to an url cached by the NixOS organization:  | ||
</div>  | |||
<code>inputs.nixpkgs.url = "<nowiki>https://nixos.org/channels/nixpkgs-unstable/nixexprs.tar.xz</nowiki>";</code>  | <code>inputs.nixpkgs.url = "<nowiki>https://nixos.org/channels/nixpkgs-unstable/nixexprs.tar.xz</nowiki>";</code>  | ||
<div lang="en" dir="ltr" class="mw-content-ltr">  | |||
In this example the input would point to the `nixpkgs-unstable` channel.  | In this example the input would point to the `nixpkgs-unstable` channel.  | ||
</div>  | |||
<div lang="en" dir="ltr" class="mw-content-ltr">  | <div lang="en" dir="ltr" class="mw-content-ltr">  | ||
| Line 297: | Line 332: | ||
</div>  | </div>  | ||
<syntaxhighlight lang="nix">  | <syntaxhighlight lang="nix">  | ||
   inputs.self.submodules = true;  |    inputs.self.submodules = true;  | ||
</syntaxhighlight>  | </syntaxhighlight>  | ||
<div lang="en" dir="ltr" class="mw-content-ltr">  | <div lang="en" dir="ltr" class="mw-content-ltr">  | ||
| Line 333: | Line 366: | ||
</div>  | </div>  | ||
<  | <syntaxhighlight lang="nix">  | ||
{ self, ... }@inputs:  | { self, ... }@inputs:  | ||
{  | {  | ||
| Line 346: | Line 379: | ||
     type = "app";  |      type = "app";  | ||
     program = "<store-path>";  |      program = "<store-path>";  | ||
    meta = {description = "..."; inherit otherMetaAttrs; };  | |||
   };  |    };  | ||
   # Executed by `nix run . -- <args?>`  |    # Executed by `nix run . -- <args?>`  | ||
   apps."<system>".default = { type = "app"; program = "..."; };  |    apps."<system>".default = { type = "app"; program = "..."; meta = {description = "..."; inherit otherMetaAttrs; }; };  | ||
   # Formatter (alejandra, nixfmt or nixpkgs-fmt)  |    # Formatter (alejandra, nixfmt, treefmt-nix or nixpkgs-fmt)  | ||
   formatter."<system>" = derivation;  |    formatter."<system>" = derivation;  | ||
   # Used for nixpkgs packages, also accessible via `nix build .#<name>`  |    # Used for nixpkgs packages, also accessible via `nix build .#<name>`  | ||
| Line 379: | Line 413: | ||
   templates.default = { path = "<store-path>"; description = ""; };  |    templates.default = { path = "<store-path>"; description = ""; };  | ||
}  | }  | ||
</  | </syntaxhighlight>  | ||
<div lang="en" dir="ltr" class="mw-content-ltr">  | <div lang="en" dir="ltr" class="mw-content-ltr">  | ||
| Line 417: | Line 451: | ||
</div>  | </div>  | ||
<syntaxhighlight lang="nix">  | <syntaxhighlight lang="nix">  | ||
{  | {  | ||
   description = "A flake targeting multiple architectures";  |    description = "A flake targeting multiple architectures";  | ||
inputs = {  | inputs = {  | ||
     nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable";  |      nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable";  | ||
   };  |    };  | ||
outputs = { self, nixpkgs }: let  | outputs = { self, nixpkgs }: let  | ||
     systems = [ "x86_64-linux" "aarch64-linux" ];  |      systems = [ "x86_64-linux" "aarch64-linux" ];  | ||
| Line 446: | Line 475: | ||
}  | }  | ||
</syntaxhighlight>  | </syntaxhighlight>  | ||
<div lang="en" dir="ltr" class="mw-content-ltr">  | <div lang="en" dir="ltr" class="mw-content-ltr">  | ||
| Line 469: | Line 497: | ||
</div>  | </div>  | ||
<syntaxhighlight lang="nix">  | <syntaxhighlight lang="nix">  | ||
{  | {  | ||
| Line 481: | Line 508: | ||
     };  |      };  | ||
}  | }  | ||
</syntaxhighlight  | </syntaxhighlight>    | ||
<div lang="en" dir="ltr" class="mw-content-ltr">  | <div lang="en" dir="ltr" class="mw-content-ltr">  | ||
| Line 609: | Line 635: | ||
# Output should show ~/libdep-src-checkout/ so you know it worked  | # Output should show ~/libdep-src-checkout/ so you know it worked  | ||
</syntaxHighlight>  | </syntaxHighlight>  | ||
<div lang="en" dir="ltr" class="mw-content-ltr">  | <div lang="en" dir="ltr" class="mw-content-ltr">  | ||
| Line 692: | Line 719: | ||
* [https://github.com/nix-community/todomvc-nix building Rust and Haskell flakes]  | * [https://github.com/nix-community/todomvc-nix building Rust and Haskell flakes]  | ||
</div>  | </div>  | ||
{{references}}  | |||
<div lang="en" dir="ltr" class="mw-content-ltr">  | <div lang="en" dir="ltr" class="mw-content-ltr">  | ||
[[Category:Software|Software]]  | |||
[[Category:Nix|Nix]]  | |||
[[Category:Nix Language|Nix Language]]  | |||
[[Category:Flakes|Flakes]]  | |||
</div>  | </div>  | ||