Skip to main content

Конфигурация и модули

Модуль – это шаблон или функция, описывающая, как настроить определенный компонент системы.

Модуль описывает, как что-то должно работать, его свойства и параметры. Например, модуль для nginx описывает, как настроить веб-сервер, но не указывает, какие сайты будут на нем размещаться.
Модули позволяют разбивать конфигурацию системы на управляемые части, делая ее более структурированной, повторно используемой и масштабируемой.

Функции модуля

  1. Абстракция. Модули скрывают детали реализации, предоставляя стандартизированный интерфейс для настройки компонентов системы. В этом смысле он больше похож на описание и функциональность класса в языке программирования.
  2. Повторное использование. Один и тот же модуль может использоваться в разных частях системы или в разных конфигурациях для однотипных настроек.

Структура модуля

    Импорт других модулей(imports). Объявление вариантов(options).  Определение вариантов(config).
    {
      imports = [
        # Пути к другим модулям.
        # Модули могут импортировать другие модули, позволяя
        # создавать иерархическую структуру конфигурации.
      ];
    
      options = {
        # Объявление вариантов.
        # Объявляет какие настройки пользователь этого модуля может устанавливать.
        # Обычно это включает общий вариант "enable" изначально установленный в ложное значение.
      };
    
      config = {
        # Определение вариантов
        # Определяет какие другие настройки, службы и ресурсы должны быть включены.
        # Обычно это зависит от того выбрал ли пользователь этого модуля 
        # вариант "enable" используя объявление выше.
        # Варианты для модулей импортированных в секции "imports" могут быть здесь установлены.
      };
    }

    Каждый модуль может объявлять новые варианты, которые являются настройками для компонентов системы. Например, модуль для настройки веб-сервера может иметь варианты порта и директории сайта.

    Все модули получают доступ к переменной config, которая содержит текущие значения вариантов из других модулей, что позволяет модулям взаимодействовать друг с другом и использовать ранее определенные настройки.

    Поскольку модули описывают желаемое состояние системы, а не шаги по его достижению, NixOS является декларативной системой, где конфигурация выражается в виде модулей.

    Примеры использования модулей

      Управление службами. Модуль может описывать настройку и запуск службы, например, веб-сервера nginx, включая его конфигурацию и зависимости. Настройки пользователя. NixOS home-manager использует модули для управления настройками пользователя и содержимым его домашнего каталога, например, настройками оболочки или приложения. Пакеты. Модули могут описывать сборку и установку пакетов, а также управлять их зависимостями.

      Преимущества модулей

        Воспроизводимость. Модули упрощают создание воспроизводимых конфигураций, которые можно легко применить на разных машинах. Управление. Разбиение конфигурации на модули делает ее более управляемой и понятной, даже для сложных систем. Повторное использование. Модули могут быть повторно использованы в разных конфигурациях, что сокращает дублирование кода.