RtW

3 March 2026


Стандарты форматирования языка Nix

В сообществе Nix приняты следующие конвенции, которые делают код читаемым и поддерживаемым:

Пробелы внутри фигурных скобок { ... } в языке Nix являются сугубо вопросом оформления и не влияют на работоспособность кода. Интерпретатор Nix игнорирует лишние пробелы, поэтому записи {config,pkgs,...} и { config, pkgs, ... } для системы идентичны.

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

Технически это вопрос личной эстетики, так как интерпретатор Nix абсолютно равнодушен к пробелам внутри фигурных скобок. Однако в сообществе NixOS сложились свои стандарты, которые помогают поддерживать код в чистоте.

Почему стоит придерживаться конвенций

Читаемость
Стандартный стиль помогает вам быстрее ориентироваться в собственных файлах спустя несколько месяцев.
Работа с Git
Если вы когда-нибудь выложите свои конфигурации в репозиторий, единообразный стиль позволит другим пользователям легче понимать ваш код, а вам — избегать лишних правок при просмотре истории изменений.

Автоматизация или ручное оформление стиля

Инструменты оформления
Существуют утилиты вроде nixfmt или alejandra. Они автоматически расставляют пробелы, переносы строк и отступы согласно общепринятым правилам.
Отсутствие споров
Использование таких инструментов избавляет от необходимости вручную выравнивать код и делает его одинаковым во всех проектах.

Хотя автоматические инструменты удобны, понимание синтаксиса на фундаментальном уровне всегда дает больше контроля. Держать код в порядке вручную — это отличный способ глубоко прочувствовать структуру языка. Следуйте этим простым правилам:

  • Иерархия: Каждое открытие фигурной скобки { означает, что содержимое внутри должно иметь отступ на 2 пробела больше, чем предыдущий уровень.
  • Закрытие блоков: Закрывающая скобка } всегда должна находиться строго на том же уровне отступа, с которого начинался соответствующий ей открывающий блок.
  • Пробелы: Всегда ставьте по одному пробелу до и после оператора присваивания = и вокруг двоеточия :, если оно используется для разделения ключей.
  • Завершение: Любая настройка, заканчивающаяся значением — будь то true, путь или строка — должна завершаться точкой с запятой ;.
  • Визуальное разделение: Если у вас есть длинный список или вложенная структура, не бойтесь переносить каждое поле на новую строку — это не влияет на работу кода, но критически важно для глаз.

Если вы забудете точку с запятой или допустите дисбаланс скобок, при попытке собрать систему Nix сразу укажет на ошибку с номером строки, поэтому вы быстро научитесь видеть опечатки.

Если же вы используете nixfmt или alejandra, то они будут автоматически выставлять именно такую структуру, поэтому вам не нужно считать пробелы вручную. Достаточно просто настроить запуск форматтера перед сохранением файла. Это позволяет забыть о том, где ставить пробелы, и сфокусироваться на логике системы.

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

{ config, pkgs, ... }:

{
  # Содержимое модуля
}

Почему именно так:

  • Читаемость: Пробелы после { и перед } создают «воздух» вокруг переменных, что позволяет глазу быстрее считывать список аргументов.
  • Группировка: config обычно идет первым, так как он предоставляет доступ к состоянию системы. pkgs следует за ним как основной ресурс для доступа к пакетам.
  • Стандарт: Если вы откроете исходный код любого пакета в nixpkgs, вы увидите эту структуру в 90% случаев. Придерживаясь этого стиля, ваш код выглядит «родным» для экосистемы NixOS.

Если у вас в будущем появится необходимость добавить другие аргументы, например lib, это будет выглядеть аккуратно:

{ config, pkgs, lib, ... }:

Это гораздо легче читать, чем плотную конструкцию {config,pkgs,lib,...}. Разделительные запятые всегда стоят сразу после слова, а пробел ставится только после запятой — это стандартная практика во многих C-подобных языках, которую Nix успешно перенял. Так что, придерживаясь стиля с пробелами внутри скобок, вы пишете в полном соответствии с профессиональными конвенциями сообщества.

Creative Commons License This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.

Created by Y.E.T.If you see an error, please report it.