repos:
  - repo: https://github.com/pre-commit/pre-commit-hooks
    rev: v4.6.0
    hooks:
      # list of supported hooks: https://pre-commit.com/hooks.html
      - id: trailing-whitespace
        exclude: .svg$
        require_serial: true
      - id: end-of-file-fixer
        require_serial: true
      - id: check-docstring-first
        require_serial: true
      - id: check-yaml
        require_serial: true
      - id: debug-statements
        require_serial: true
      - id: detect-private-key
        require_serial: true
      - id: check-executables-have-shebangs
        require_serial: true
      - id: check-toml
        require_serial: true
      - id: check-case-conflict
        require_serial: true
      - id: check-added-large-files
        require_serial: true

  # python upgrading syntax to newer version
  - repo: https://github.com/asottile/pyupgrade
    rev: v3.17.0
    hooks:
      - id: pyupgrade
        require_serial: true
        args: [--py38-plus]

  - repo: https://github.com/astral-sh/ruff-pre-commit
    rev: v0.5.5
    hooks:
      - id: ruff
        args: [--fix]
      - id: ruff-format

  # python security linter
  - repo: https://github.com/gitleaks/gitleaks
    rev: v8.18.2
    hooks:
      - id: gitleaks

  # yaml formatting
  - repo: https://github.com/pre-commit/mirrors-prettier
    rev: v3.0.0
    hooks:
      - id: prettier
        require_serial: true
        types: [yaml]

  # shell scripts linter
  - repo: https://github.com/shellcheck-py/shellcheck-py
    rev: v0.9.0.5
    hooks:
      - id: shellcheck
        require_serial: true
        args: ["-e", "SC2102"]

  - repo: https://github.com/pre-commit/mirrors-prettier
    rev: v4.0.0-alpha.8
    hooks:
      - id: prettier
        # To avoid conflicts, tell prettier to ignore file types
        # that ruff already handles.
        exclude_types: [python]

  # word spelling linter
  - repo: https://github.com/codespell-project/codespell
    rev: v2.2.5
    hooks:
      - id: codespell
        require_serial: true
        args:
          - --skip=logs/**,data/**,*.ipynb
          - --ignore-words-list=ot,hist

  # jupyter notebook linting
  - repo: https://github.com/nbQA-dev/nbQA
    rev: 1.7.0
    hooks:
      - id: nbqa-black
        args: ["--line-length=99"]
        require_serial: true
      - id: nbqa-isort
        args: ["--profile=black"]
        require_serial: true
      - id: nbqa-flake8
        args:
          [
            "--extend-ignore=E203,E402,E501,F401,F841,F821,F403,F405,F811",
            "--exclude=logs/*,data/*,notebooks/*",
          ]
        require_serial: true
