---
# yamllint для HomeLab infras.
# Цель: ловить реальные поломки YAML (табы, дубли ключей, битые отступы,
# незакрытые кавычки), а не навязывать стиль. Всё, что даёт шум на живом
# Ansible-коде, ослаблено осознанно — см. комментарии.

extends: default

# gitignore-style пути, которые линтить не нужно.
ignore: |
  /ansible/.venv/
  /ansible/collections/
  /ansible/generated/
  /archive/
  /.opencode/
  /tools/
  node_modules/
  /ansible/inventory/host_vars/*/vault.yml
  /.direnv/
  /result
  /result-*

rules:
  # Длинные строки — норма: pct/docker/curl-команды в one-line shell,
  # длинные URL, ZeroTier/OpenVPN-конфиги. Перенос сделал бы их менее читаемыми.
  line-length: disable

  # Ansible исторически допускает yes/no наравне с true/false, и часть репо
  # написана так. Не ошибка — не мешаем.
  truthy:
    allowed-values: ['true', 'false', 'yes', 'no']
    check-keys: false

  # Комментарии вида "#comment" и inline-комментарии на одном пробеле
  # встречаются часто и ни на что не влияют.
  comments:
    require-starting-space: true
    min-spaces-from-content: 1
  comments-indentation: disable

  # Ansible-стиль: списки под ключом с отступом — вопрос вкуса, обе формы валидны.
  indentation:
    spaces: 2
    indent-sequences: consistent
    check-multi-line-strings: false

  # Пустая строка в конце файла обязательна (реальные diff-артефакты),
  # но лишние пробелы в конце строк — только предупреждение.
  trailing-spaces: enable
  new-line-at-end-of-file: enable

  # Ошибки, которые ломают парсинг или молча меняют смысл — строго.
  key-duplicates: enable
  octal-values:
    forbid-implicit-octal: true
    forbid-explicit-octal: true

  # "---" в начале файла — полезная конвенция Ansible, но не критично.
  document-start:
    level: warning

  # braces/brackets: Jinja-выражения в inline-словарях часто дают ложные
  # срабатывания на пробелах внутри {{ }}.
  braces:
    min-spaces-inside: 0
    max-spaces-inside: 1
  brackets:
    min-spaces-inside: 0
    max-spaces-inside: 1
