[build-system] requires = ["setuptools>=67.5"] build-backend = "setuptools.build_meta" [project] name = "archinstall" dynamic = ["version"] description = "Arch Linux installer - guided, templates etc." authors = [ {name = "Anton Hvornum", email = "anton@hvornum.se"}, ] license = {text = "GPL-3.0-only"} readme = "README.md" requires-python = ">=3.12" keywords = ["linux", "arch", "archinstall", "installer"] classifiers = [ "Programming Language :: Python :: 3.12", "Operating System :: POSIX :: Linux", ] dependencies = [ "pyparted @ https://github.com//dcantrell/pyparted/archive/v3.13.0.tar.gz#sha512=26819e28d73420937874f52fda03eb50ab1b136574ea9867a69d46ae4976d38c4f26a2697fa70597eed90dd78a5ea209bafcc3227a17a7a5d63cff6d107c2b11", "pydantic==2.10.2" ] [project.urls] Home = "https://archlinux.org" Documentation = "https://archinstall.readthedocs.io/" Source = "https://github.com/archlinux/archinstall" [project.optional-dependencies] log = ["systemd_python==235"] dev = [ "mypy==1.13.0", "flake8==7.1.1", "pre-commit==4.0.1", "ruff==0.8.1", "pylint==3.3.1", "pylint-pydantic==0.3.2", "pytest==8.3.3", ] doc = ["sphinx"] [project.scripts] archinstall = "archinstall:run_as_a_module" [tool.setuptools.dynamic] version = {attr = "archinstall.__version__"} readme = {file = ["README.rst", "USAGE.rst"]} [tool.setuptools] include-package-data = true [tool.setuptools.package-data] # We could specify locales/languages.json etc instead, but catchall works too. "archinstall" = [ "**/*.py", "**/*.mo", "**/*.po", "**/*.pot", "**/*.json", ] [tool.setuptools.package-dir] archinstall = "archinstall" [tool.mypy] python_version = "3.12" files = "." exclude = "^build/" check_untyped_defs = true disallow_any_explicit = false disallow_any_expr = false disallow_any_generics = true disallow_any_unimported = true disallow_incomplete_defs = true disallow_subclassing_any = true disallow_untyped_calls = true disallow_untyped_decorators = true disallow_untyped_defs = true extra_checks = true strict = false strict_equality = true warn_redundant_casts = true warn_return_any = true warn_unreachable = true warn_unused_configs = true warn_unused_ignores = true [[tool.mypy.overrides]] module = "archinstall.default_profiles.*" disallow_any_explicit = true [[tool.mypy.overrides]] module = "archinstall.default_profiles.profile" disallow_any_explicit = false [[tool.mypy.overrides]] module = "archinstall.examples.*" disallow_any_explicit = true [[tool.mypy.overrides]] module = "archinstall.lib.*" disallow_any_generics = false disallow_any_unimported = false disallow_incomplete_defs = false disallow_untyped_defs = false warn_return_any = false warn_unreachable = false [[tool.mypy.overrides]] module = "archinstall.lib.packages" disallow_any_explicit = true [[tool.mypy.overrides]] module = "archinstall.lib.utils" disallow_any_explicit = true [[tool.mypy.overrides]] module = "archinstall.scripts.*" warn_unreachable = false [[tool.mypy.overrides]] module = "archinstall.tui.*" warn_unreachable = false [[tool.mypy.overrides]] module = [ "parted", ] ignore_missing_imports = true [tool.bandit] targets = ["archinstall"] exclude = ["/tests"] [tool.pytest.ini_options] pythonpath = ["."] addopts = "-s" testpaths = ["tests"] [tool.pylint.main] ignore-paths = [ "^build/", "^docs/", ] load-plugins = ["pylint_pydantic"] persistent = false py-version = "3.12" recursive = true [tool.pylint.format] indent-string = '\t' max-line-length = 160 [tool.pylint."messages control"] disable = [ "C", "R", "attribute-defined-outside-init", "bare-except", "broad-exception-caught", "cell-var-from-loop", "comparison-with-callable", "dangerous-default-value", "fixme", "protected-access", "raise-missing-from", "unnecessary-lambda", "unreachable", "unspecified-encoding", "unused-argument", "unused-variable", ] [tool.pylint.refactoring] score = false [tool.pylint.variables] additional-builtins = ["_"] [tool.ruff] target-version = "py312" builtins = ["_"] line-length = 160 [tool.ruff.lint] select = [ "ASYNC", # flake8-async "C90", # mccabe "DTZ", # flake8-datetimez "E", # pycodestyle errors "EXE", # flake8-executable "F", # Pyflakes "FA", # flake8-future-annotations "FLY", # flynt "G", # flake8-logging-format "I", # isort "ICN", # flake8-import-conventions "ISC", # flake8-implicit-str-concat "LOG", # flake8-logging "PIE", # flake8-pie "PLC", # Pylint conventions "PLE", # Pylint errors "PLW", # Pylint warnings "RSE", # flake8-raise "RUF", # Ruff-specific rules "SLOT", # flake8-slot "T10", # flake8-debugger "UP", # pyupgrade "W", # pycodestyle warnings "YTT", # flake8-2020 ] ignore = [ "E722", # bare-except "PLW2901", # redefined-loop-name "RUF005", # collection-literal-concatenation "RUF012", # mutable-class-default "RUF015", # unnecessary-iterable-allocation-for-first-element "RUF039", # unraw-re-pattern "UP028", # yield-in-for-loop "UP037", # quoted-annotation "W191", # tab-indentation ] [tool.ruff.lint.mccabe] max-complexity = 40 [tool.ruff.lint.per-file-ignores] "__init__.py" = ["F401"] # unused-import