АБ
Size: a a a
АБ
VL
VL
E
АБ
lib.nixosSystem
, который из модулей собирает готовую систему (как обычную деривацию)nixosModules
и nixosConfigurations
. nixosModules
-- это аттрсет модулей (как например твой configuration.nix
). nixosConfigurations
-- это аттрсет готовых конфигураций (результптов работы nixosSystem
, ключи -- хостнеймы.nixos-rebuild --flake /path/to/flake#myHostname switch
свичнет на outputs.nixosConfigurations.myHostname
из /path/to/flake
; nixos-rebuild --flake /path/to/flake switch
свичнет на outputs.nixosConfigurations.$(hostname)
из /path/to/flake
; ну и наконец nixos-rebuild switch
свичнет на outputs.nixosConfigurations.$(hostname)
из /etc/nixos/flake.nix
1
АБ
outputs
-- это функция от inputs
, которая возращает (почти) произвольный аттрсет. Внутрь разных команд никса зашиты разные стандартные ключи этого аттрсета с форматами (типами) значений, которые ожидаются по этим ключам. К примеру, от defaultPackage
ожидается аттрсет, где ключи -- имена платформ, вроде x86_64-linux
или powerpc-darwin
, а значения -- деривации. В общем пример outputs
:АБ
{ self, nixpkgs }: {
defaultPackage.x86_64-linux = nixpkgs.legacyPackages.x86_64-linux.hello;
}
АБ
АБ
АБ
{
inputs.nixpkgs.url = "github:nixos/nixpkgs";
outputs = { self, nixpkgs }: { /* something */ };
}
АБ
nix eval .
(т.е. попросишь nix вычислить все outputs и показать их), то nix должен откуда-то взять nixpkgs
, чтобы подставить его как аргумент в outputs. В inputs
мы говорим nix, что nixpkgs следует брать из github.com/nixos/nixpkgs/master
, и поэтому он скачивает самый свежий коммит оттуда. Но если он будет скачивать самый свежий коммит каждый раз, то герметичности не будет (в зависимости от времени меняется выход), поэтому он в flake.lock
записывает revision и sha256 того, что он сейчас скачал.юАБ
flake.nix
.E
АБ
inputs
, которые nix скачивает и пинит во flake.lock
, и outputs
, которые принимают все inputs
и выдают аттрсет <чего-угодно> (но чаще всего пакетов)АБ
VL