Модули
NixOS предоставляет возможность настраивать систему с помощью модулей, позволяя сделать систему более гибкой. Модули представляют собой отдельные файлы с расширением .nix
, в которых содержится различная конфигурация. Например, стандартный файл конфигурации /etc/nixos/configuration.nix
- тоже модуль.
.nix
это модуль, а если быть точнее функция Nix.Структура
Модули имеют следующий синтаксис:
Если вам не нужно объявлять опции, существует запись короче:
Функция
Модуль может быть функцией, принимающей набор атрибутов:
По умолчанию доступны следующие аргументы:
config
- конфигурация системыoptions
- все объявления опцийlib
- стандартная библиотека nixpkgs (pkgs.lib)pkgs
- набор атрибутов из nixpkgs, настроенный черезnixpkgs.config
modulesPath
- расположение каталога с модулями
...
позволяет функции принимать неограниченное количство других аргументов. Чаще всего необходимо, иначе будет возникать ошибка из-за непредвиденных аргументов.
Пользовательские аргументы можно передавать, например, с помощью specialArgs
во флейке.
Импорты
Импорты - пути к другим модулям, которые должны быть включены в конфигурацию. Набор модулей по умолчанию можете найти здесь. Чтобы их использовать, не нужно из добавлять в список импорта. Эти модули как раз содержат все стандартные опции NixOS (например, programs.git
).
Декларации
Декларации определяют внешние параметры модуля
Они создаются через функцию mkOption
, принимающюю следующие аргументы:
type
- тип параметраdefault
- значение параметра по умолчаниюexample
- пример, который будет показан на NixOS Wikidescription
- описание, которое будет показано на NixOS Wiki
Помимо этого существуют еще две функции-обертки над mkOption
:
mkEnableOption
- создает параметр enable, принимает один аргумент - имя программы/сервисаmkPackageOption
- создает параметр package, принимает три аргумента: переменную пакетов (pkgs, как правило), имя программы/сервиса и аттерсет с пятью параметрами (nullable
,default
,example
,extraDescription
,pkgsText
)
Пример
Создайте в одной папке с вашим файлом конфигурации файл hello.nix
:
Теперь мы можем в нашем конфигурационном файле настроить сервис hello
:
Это запустит systemd службу hello, которая выводит текст "Hello, Bob!"