Модули
NixOS предоставляет возможность настраивать систему с помощью модулей, позволяя сделать систему более гибкой. Модули представляют собой отдельные файлы с расширением .nix, в которых содержится различная конфигурация. Например, стандартный файл конфигурации /etc/nixos/configuration.nix - тоже модуль.
.nix это модуль, а если быть точнее функция Nix.Структура
Модули имеют следующий синтаксис:
Если вам не нужно объявлять опции, существует запись короче:
Функция
Модуль может быть функцией, принимающей набор атрибутов:
По умолчанию доступны следующие аргументы:
config- конфигурация системыoptions- все объявления опцийlib- стандартная библиотека nixpkgs (pkgs.lib)pkgs- набор атрибутов из nixpkgs, настроенный черезnixpkgs.configmodulesPath- расположение каталога с модулями
... позволяет функции принимать неограниченное количство других аргументов. Чаще всего необходимо, иначе будет возникать ошибка из-за непредвиденных аргументов.
Пользовательские аргументы можно передавать, например, с помощью 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!"