content: [project]
      authors = [{ name = "Nate Landau", email = "github@natenate.org" }]
      dependencies = [
          "commitizen>=4.8.3",
          "duty>=1.6.2",
          "poethepoet>=0.36.0",
          "pre-commit>=4.2.0",
          "typos>=1.34.0",
      ]
      description = "Home for my bootstrap script, dotfiles, and configuration files"
      license = "MIT"
      name = "dotfiles"
      readme = "README.md"
      requires-python = ">=3.13"
      version = "0.1.0"
      [project.urls]
          homepage   = "https://github.com/natelandau/dotfiles"
          repository = "https://github.com/natelandau/dotfiles"
  
  [tool.commitizen]
      bump_message             = "bump(release): v$current_version → v$new_version"
      tag_format               = "v$version"
      update_changelog_on_bump = true
      version                  = "0.1.0"
      version_provider         = "uv"
  
  [dependency-groups]
      dev = ["mypy>=1.17.0", "ruff>=0.12.5"]
  
  [tool.mypy] # https://mypy.readthedocs.io/en/latest/config_file.html
      cache_dir                   = ".cache/mypy"
      disallow_any_unimported     = false
      disallow_subclassing_any    = false
      disallow_untyped_decorators = false
      disallow_untyped_defs       = true
      exclude                     = ['tests/']
      follow_imports              = "normal"
      ignore_missing_imports      = true
      junit_xml                   = ".cache/mypy.xml"
      no_implicit_optional        = true
      pretty                      = false
      show_column_numbers         = true
      show_error_codes            = true
      show_error_context          = true
      strict_optional             = true
      warn_redundant_casts        = true
      warn_unreachable            = true
      warn_unused_ignores         = false
  
  [tool.ruff] # https://github.com/charliermarsh/ruff
      fix            = true
      line-length    = 100
      output-format  = "grouped"
      src            = ["src", "tests"]
      target-version = "py311"
  
      [tool.ruff.lint]
          ignore = [
              "ANN204", # missing return type annotation for special method `__init__`
              "B006",   # mutable-argument-default
              "COM812", # Trailing comma missing
              "CPY001", # Missing copyright notice at top of file
              "D213",   # multi-line-summary-second-line
              "E501",   # line-too-long
              "FIX002", # Line contains TODO, consider resolving the issue
              "S311",   # suspicious-non-cryptographic-random-usage
              "TD002",  # Missing author in TODO
              "TD003",  # Missing issue link on the line following this TODO
          ]
          per-file-ignores = { "tests/*.py" = [
              "A002",
              "A003",
              "ANN001",
              "ANN201",
              "ARG002",
              "ARG005",
              "D102",
              "ERA001",
              "F403",
              "PGH003",
              "PLR0913",
              "PLR0917",
              "PLR2004",
              "PLR6301",
              "S101",
          ] }
          select = ["ALL"]
          unfixable = [
              "ERA001", # Commented out code
              "F401",   # unused-import
              "F841",   # unused-variable
          ]
          [tool.ruff.lint.mccabe]
              # Unlike Flake8, default to a complexity level of 10.
              max-complexity = 10
  
          [tool.ruff.lint.pydocstyle]
              convention = "google"
  
          [tool.ruff.lint.pylint]
              max-args = 6
  
      [tool.ruff.format]
          indent-style              = "space"
          line-ending               = "auto"
          quote-style               = "double"
          skip-magic-trailing-comma = false
  
  [tool.poe.tasks]
      [tool.poe.tasks.upgrade]
          shell = """
          echo "-- Upgrading packages --" &&
          uv lock --upgrade &&
          echo "-- Autoupdating pre-commit --" &&
          pre-commit autoupdate
          """
  
      [[tool.poe.tasks.lint.sequence]]
          # shell = "typos"
          shell = "typos --config .typos.toml --diff"
  
          # [[tool.poe.tasks.lint.sequence]]
          # shell = "pre-commit run --all-files"
  