Release 3.2.0 This release or newer is required for postmarketOS + systemd, now that it has been merged into master: https://postmarketos.org/edge/2025/01/09/systemd-soon/ Besides systemd related changes, notably "pmbootstrap flasher boot" now works for fastboot-bootpart. Also the android recovery zip and aportgen features have been fixed, along with some smaller fixes and a LOT of code quality improvements that will make future maintenance easier. Huge thanks to everybody who has contributed to this release! <3 Features: * install: support systemd for disabling services (MR 2529) * pmb.config.pmaports: Make pmbootstrap automatically switch away from master_staging_systemd (MR 2528) * Rewrite repo_missing for bpo + systemd split repo (MR 2410) * pmb/config: enable "flasher boot" for fastboot-bootpart (MR 2508) Fixes: * pmb.chroot.binfmt: Initialise chroot before installing packages in register() (MR 2526) * pmb.parse.bootimg: Initialise chroot before installing packages in bootimg() (MR 2526) * pmb.config.other: Don't require selected UI package to exist (MR 2530) * Fix pmbootstrap install --android-recovery-zip (MR 2527) * helpers.run.core.add_proxy_env_vars: fix variables (MR 2525) * pmb.build.other: Fix broken f-string (MR 2525) * repo_missing: if abuild is forked, add it as dep (MR 2410) * pmb.aportgen: Update APKINDEX for relevant arch before parsing it (MR 2509) * pmb.flasher.frontend: detect lk2nd as subpackage dependency (MR 2511) Other: * pmb.helpers.ui: Add must_exist argument to check_option() (MR 2530) * pmb.qemu.run: Remove FIXME and type ignore stuff from command_qemu() (MR 2522) * pmb.types: Fix type for PmbArgs.output (MR 2522) * pmb.build.autodetect: Remove FIXME about type hinting arch (MR 2522) * CI: Install Ruff from PyPi instead of Alpine (MR 2525) * pmb: Reformat with Ruff 0.9 (MR 2525) * pmb.install: Remove unnecessary calls to round() (MR 2525) * pmb.config.init: Simplify removal of select from providers_cfg (MR 2525) * pmb.helpers.aportupgrade: Remove unnecessary regex (MR 2525) * pmb: Use raw strings for regexes (MR 2525) * pmb.chroot.apk: Use unpacking operator to create command in install_run_apk() (MR 2525) * pyproject.toml: Enable most RUF checks (MR 2525) * pmb: Use unpacking operator to concatenate collections (MR 2525) * pmb.core.config: Add note about aports variable being class variable (MR 2525) * pmb.core.config: Mark mirrors and providers as class variables (MR 2525) * pmb.helpers.locale: Use frozenset for primary_layouts (MR 2525) * pmb.build._package: Replace sum() with functools.reduce() (MR 2525) * pmb.commands.repo_bootstrap: Remove unnecessary noqa comment (MR 2525) * pmb.helpers.run_core: Remove unnecessary str(...) (MR 2525) * pmb: Replace list(...)[0] with next(iter(...)) (MR 2525) * install: merge disable_sshd(), disable_firewall() (MR 2529) * Cosmetic: pmb/install/_install.py: tweak strings (MR 2529) * Update systemd repo URL * pmb.core.test_pkgrepo: Remove reference to master_staging_systemd (MR 2528) * docs: use pmOS green color in html output (MR 2520) * editorconfig: new file (MR 2520) * pyproject.toml: Enable Ruff preview (MR 2516) * pyproject.toml: Add CPY001 to Ruff linting (MR 2516) * docs, pmb: Add missing copyright headers (MR 2516) * pmb.parse.version: Use _ for "value" variable in validate() (MR 2516) * CI: Simplify Ruff check (MR 2517) * pmb.parse.version: Replace token_value() with Token enum (MR 2518) * pmb.config.pmaports: Get rid of cast hack for SectionProxy (MR 2519) * pyproject.toml: Set disallow_untyped_calls = true (MR 2514) * pyproject.toml: Set disallow_untyped_defs = true (MR 2514) * pmb: Add more types and fix type errors (MR 2514) * pmb.parse.arguments: Type hint and remove unused arguments from add_kernel_arg() (MR 2514) * pmb.parse.arguments: Ignore attr-defined on arg.completer (MR 2514) * pmb.parse.test_version: Add unit tests for version.py (MR 2514) * pmb.parse.version: Convert rest[0] to integer before storing it in value (MR 2514) * pmb.parse.version: Link to older apk-tools (MR 2514) * pmb: Add more type hints (MR 2513) * pmb.qemu.run: Fix odd strings (MR 2513) * docs: fix typos (MR 2510) * pmb.aportgen: Unify tempdir preparation and checksum generation (MR 2509) * pmb: Add more type hints (MR 2490) * pmb.aportgen: Annotate <options> as AportGenEntry in generate() (MR 2490) * pmb.helpers.repo_missing: Use f-string in get_relevant_packages() (MR 2490) * pmb/helpers/repo_missing: Remove <arch> from filter_aport_packages() docstring (MR 2490) * pmb.commands.pull: Remove bool return type from run() (MR 2490) * pmb.config.init: Use separate answer variable for sudo timer (MR 2490) * pmb.config.init: Explicitly convert string to int for config.extra_space (MR 2490) * pmb.config.init: Fix types in ask_for_systemd() (MR 2490) * pmb.config.init: Fix types in ask_for_work_path() (MR 2490) * pmb.parse.kconfig: Rename options to arch_options in check_config_options_set (MR 2490) * pmb.parse.kconfig.check_config_options_set: Update docstring (MR 2490) * pmb.helpers.http: Simplify retrieve_json() (MR 2490) * Fix spelling "infront" -> "in front"