Commit Graph

4836 Commits

Author SHA1 Message Date
Cooper a576076eec
Merge 4edbd78e47 into e24af61e22 2026-08-13 11:30:58 +00:00
Victor Zacarias e24af61e22
Fix examples/config-sample.json and cover the example configs with a test (#4709)
* Fix examples/config-sample.json to match the current config format

The sample config has not been valid since the 2023 disk layout rework
and currently fails to parse, so the file the README points users at
cannot be used:

- sector_size was null, but SectorSize became a required object
- partitions were missing the dev_path key, which the parser reads
- the /home size used the Percent unit, which no longer exists
- /home started at 20 GiB while / ended at 20993 MiB, overlapping it
- gfx_driver kept the old "All open-source (default)" value

Sizes and keys now mirror what the installer itself writes when saving
a configuration.

* Cover the example configs with a parsing test

Nothing in the test suite or CI reads examples/, which is how the sample
config could stay broken for years while every other config surface kept
working. Parse both example files through ArchConfigHandler, and check
the partition entries directly since the parser only reaches them when
the configured device exists on the machine, which is never true in CI.

* Fail the partition test when the example config has none

The loops in test_example_config_partitions would not execute if
device_modifications or a device's partitions were empty, so the test
could pass while checking nothing.
2026-08-13 10:25:05 +10:00
h8d13 8157685d04
feat(kernels): add RT variants from upstream (#4711)
* feat(kernels): add `RT` variants from upstream

* https://archlinux.org/packages/?sort=&q=linux-rt

Signed-off-by: h8d13 <hadean-eon-dev@proton.me>

* chore(fmt): use tab

Signed-off-by: h8d13 <hadean-eon-dev@proton.me>

* fixup! feat(kernels): add `RT` variants from upstream

---------

Signed-off-by: h8d13 <hadean-eon-dev@proton.me>
2026-08-13 10:24:39 +10:00
h8d13 3ffa1a98a0
chore(#4705): continue parent (#4713)
as per: https://wiki.archlinux.org/title/Hardware_video_acceleration#Intel_Video_Processing_Library_(Intel_VPL)

Signed-off-by: h8d13 <hadean-eon-dev@proton.me>
2026-08-13 09:50:27 +10:00
h8d13 5ebdd27ceb
chore(desktops): remove print/power #4618 follow-up #4554 (#4707)
Signed-off-by: h8d13 <hadean-eon-dev@proton.me>
2026-08-12 09:55:49 +10:00
h8d13 f0268ec8ff
chore(servers): update `cockpit` #4688 (#4706)
Signed-off-by: h8d13 <hadean-eon-dev@proton.me>
2026-08-12 09:55:22 +10:00
codefiles 2a83b502da
Revert "feat(disk): add custom cipher selection for LUKS2 encryption (#4581)" (#4708)
This reverts commit 7b7fd6573e.
2026-08-11 22:03:19 +10:00
h8d13 426e273265
fix(hw): intel open-source post Gen12 needs this for ffpmeg, OBS, etc (#4705)
* fix(hw): intel open-source post Gen12 needs this for ffpmeg, OBS, etc

Signed-off-by: h8d13 <hadean-eon-dev@proton.me>

* chore(docs): stray whitespaces and missing `

Signed-off-by: h8d13 <hadean-eon-dev@proton.me>

---------

Signed-off-by: h8d13 <hadean-eon-dev@proton.me>
2026-08-11 20:56:42 +10:00
Alperen42v 7b7fd6573e
feat(disk): add custom cipher selection for LUKS2 encryption (#4581)
* feat(disk): fix menu rendering and complete backend data pipeline for custom LUKS2 cipher

* fix : removed chacha20

* fix the problems for filesystems

* ruff test fix

* luksfix xfs file system fix cipher

* ruff fix

* new ciphers

* yes yes ruff fix

* Device.py : removed bloat commets

* refactor(disk): address review feedback on cipher selection

- always serialize iter_time and cipher in DiskEncryption.json
- simplify select_encryption_cipher using MenuItemGroup.from_enum
- add cipher to _prev_disk_encryption preview in disk_menu.py
- drop unnecessary inline comments from EncryptionCipher enum
2026-08-11 20:18:42 +10:00
codefiles f4e0d4cf66
Refactor meminfo (#4698) 2026-08-11 13:23:29 +10:00
Martin d571283d69
fix: Stop hardcoding dependency versions (#4695)
Fixes #4694
2026-08-11 11:56:47 +10:00
dependabot[bot] dd6ea5f47b
Bump cryptography from 49.0.0 to 50.0.0 (#4703)
Bumps [cryptography](https://github.com/pyca/cryptography) from 49.0.0 to 50.0.0.
- [Changelog](https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pyca/cryptography/compare/49.0.0...50.0.0)

---
updated-dependencies:
- dependency-name: cryptography
  dependency-version: 50.0.0
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-10 20:57:36 +10:00
renovate[bot] 578934e4ef
Update dependency ruff to v0.16.2 (#4699)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-08-10 09:21:31 +00:00
renovate[bot] 233e411c14
Update pre-commit hook astral-sh/ruff-pre-commit to v0.16.2 (#4700)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-08-10 19:21:02 +10:00
renovate[bot] 121c07fe41
Update dependency pylint to v4.0.7 (#4702)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-08-10 19:20:20 +10:00
Nathan Marley caf9cc8289
Fix WiFi SSIDs with spaces missing from scan list (#4634)
* Add tests for SSIDs with space

* Fix WiFi scan drop for spaced SSIDs

The wpa_cli scan_results puts the SSID last, splitting on all whitespace dropped
any network whose name contained spaces.
2026-08-10 19:01:45 +10:00
codefiles 9a19e39a25
Use staticmethod for get_type_from_code (#4693)
Addresses the following:

pyright

```
  archinstall/lib/models/device.py:759:11 - error: Type "Literal[PartitionType.PRIMARY]" is not assignable to return type "Self@PartitionType"
    Type "Literal[PartitionType.PRIMARY]" is not assignable to type "Self@PartitionType" (reportReturnType)
  archinstall/lib/models/device.py:762:11 - error: Type "Literal[PartitionType._UNKNOWN]" is not assignable to return type "Self@PartitionType"
    Type "Literal[PartitionType._UNKNOWN]" is not assignable to type "Self@PartitionType" (reportReturnType)
```

pyrefly

```
ERROR Returned type `Literal[PartitionType.PRIMARY]` is not assignable to declared return type `Self@PartitionType` [bad-return]
   --> archinstall/lib/models/device.py:759:11
    |
757 |     def get_type_from_code(cls, code: int) -> Self:
    |                                               ---- declared return type
758 |         if code == parted.PARTITION_NORMAL:
759 |             return cls.PRIMARY
    |                    ^^^^^^^^^^^
    |
ERROR Returned type `Literal[PartitionType._UNKNOWN]` is not assignable to declared return type `Self@PartitionType` [bad-return]
   --> archinstall/lib/models/device.py:762:11
    |
757 |     def get_type_from_code(cls, code: int) -> Self:
    |                                               ---- declared return type
758 |         if code == parted.PARTITION_NORMAL:
759 |             return cls.PRIMARY
760 |         else:
761 |             debug(f'Partition code not supported: {code}')
762 |             return cls._UNKNOWN
    |                    ^^^^^^^^^^^^
    |
```

ty

```
error[invalid-return-type]: Return type does not match returned value
   --> archinstall/lib/models/device.py:757:44
    |
757 |     def get_type_from_code(cls, code: int) -> Self:
    |                                               ---- Expected `Self@get_type_from_code` because of return type
758 |         if code == parted.PARTITION_NORMAL:
759 |             return cls.PRIMARY
    |                    ^^^^^^^^^^^ expected `Self@get_type_from_code`, found `Literal[PartitionType.PRIMARY]`
    |

error[invalid-return-type]: Return type does not match returned value
   --> archinstall/lib/models/device.py:757:44
    |
757 |     def get_type_from_code(cls, code: int) -> Self:
    |                                               ---- Expected `Self@get_type_from_code` because of return type
758 |         if code == parted.PARTITION_NORMAL:
759 |             return cls.PRIMARY
760 |         else:
761 |             debug(f'Partition code not supported: {code}')
762 |             return cls._UNKNOWN
    |                    ^^^^^^^^^^^^ expected `Self@get_type_from_code`, found `Literal[PartitionType._UNKNOWN]`
    |
```
2026-08-04 06:31:06 +10:00
codefiles 34b3cecced
Refactor TranslationHandler locales directory (#4692) 2026-08-03 21:39:22 +10:00
codefiles 0d6ffc3795
Refactor default PartitionTable (#4689)
Addresses the following:

pyright

```
  archinstall/lib/models/device.py:262:10 - error: Type "Literal[PartitionTable.GPT, PartitionTable.MBR]" is not assignable to return type "Self@PartitionTable"
    Type "Literal[PartitionTable.GPT, PartitionTable.MBR]" is not assignable to type "Self@PartitionTable" (reportReturnType)
```

ty

```
error[invalid-return-type]: Return type does not match returned value
   --> archinstall/lib/models/device.py:261:22
    |
261 |     def default(cls) -> Self:
    |                         ---- Expected `Self@default` because of return type
262 |         return cls.GPT if SysInfo.has_uefi() else cls.MBR
    |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `Self@default`, found `PartitionTable`
    |
```
2026-08-03 21:38:20 +10:00
codefiles c7e512a294
Refactor CPUVendor (#4691)
Addresses the following:

pyright

```
  archinstall/lib/hardware.py:25:11 - error: Type "Literal[CpuVendor._Unknown]" is not assignable to return type "Self@CpuVendor"
    Type "Literal[CpuVendor._Unknown]" is not assignable to type "Self@CpuVendor" (reportReturnType)
```

pyrefly

```
ERROR Returned type `Literal[CpuVendor._Unknown]` is not assignable to declared return type `Self@CpuVendor` [bad-return]
  --> archinstall/lib/hardware.py:25:11
   |
20 |     def get_vendor(cls, name: str) -> Self:
   |                                       ---- declared return type
21 |         if vendor := getattr(cls, name, None):
22 |             return vendor
23 |         else:
24 |             debug(f"Unknown CPU vendor '{name}' detected.")
25 |             return cls._Unknown
   |                    ^^^^^^^^^^^^
   |
```

ty

```
error[invalid-return-type]: Return type does not match returned value
  --> archinstall/lib/hardware.py:20:36
   |
20 |     def get_vendor(cls, name: str) -> Self:
   |                                       ---- Expected `Self@get_vendor` because of return type
21 |         if vendor := getattr(cls, name, None):
22 |             return vendor
23 |         else:
24 |             debug(f"Unknown CPU vendor '{name}' detected.")
25 |             return cls._Unknown
   |                    ^^^^^^^^^^^^ expected `Self@get_vendor`, found `Literal[CpuVendor._Unknown]`
   |
```
2026-08-03 21:37:09 +10:00
codefiles c7da3cd8b9
Use staticmethod for Bootloader.get_default (#4690)
Addresses the following:

pyright

```
  archinstall/lib/models/bootloader.py:42:11 - error: Type "Literal[Bootloader.NO_BOOTLOADER]" is not assignable to return type "Self@Bootloader"
    Type "Literal[Bootloader.NO_BOOTLOADER]" is not assignable to type "Self@Bootloader" (reportReturnType)
  archinstall/lib/models/bootloader.py:44:11 - error: Type "Literal[Bootloader.Systemd]" is not assignable to return type "Self@Bootloader"
    Type "Literal[Bootloader.Systemd]" is not assignable to type "Self@Bootloader" (reportReturnType)
  archinstall/lib/models/bootloader.py:46:11 - error: Type "Literal[Bootloader.Grub]" is not assignable to return type "Self@Bootloader"
    Type "Literal[Bootloader.Grub]" is not assignable to type "Self@Bootloader" (reportReturnType)
```

pyrefly

```
ERROR Returned type `Literal[Bootloader.NO_BOOTLOADER]` is not assignable to declared return type `Self@Bootloader` [bad-return]
  --> archinstall/lib/models/bootloader.py:42:11
   |
40 |     def get_default(cls, uefi: bool, skip_boot: bool = False) -> Self:
   |                                                                  ---- declared return type
41 |         if skip_boot:
42 |             return cls.NO_BOOTLOADER
   |                    ^^^^^^^^^^^^^^^^^
   |
ERROR Returned type `Literal[Bootloader.Systemd]` is not assignable to declared return type `Self@Bootloader` [bad-return]
  --> archinstall/lib/models/bootloader.py:44:11
   |
40 |     def get_default(cls, uefi: bool, skip_boot: bool = False) -> Self:
   |                                                                  ---- declared return type
41 |         if skip_boot:
42 |             return cls.NO_BOOTLOADER
43 |         elif uefi:
44 |             return cls.Systemd
   |                    ^^^^^^^^^^^
   |
ERROR Returned type `Literal[Bootloader.Grub]` is not assignable to declared return type `Self@Bootloader`
[bad-return]
  --> archinstall/lib/models/bootloader.py:46:11
   |
40 |     def get_default(cls, uefi: bool, skip_boot: bool = False) -> Self:
   |                                                                  ---- declared return type
41 |         if skip_boot:
42 |             return cls.NO_BOOTLOADER
43 |         elif uefi:
44 |             return cls.Systemd
45 |         else:
46 |             return cls.Grub
   |                    ^^^^^^^^
   |
```

ty

```
error[invalid-return-type]: Return type does not match returned value
  --> archinstall/lib/models/bootloader.py:40:63
   |
40 |     def get_default(cls, uefi: bool, skip_boot: bool = False) -> Self:
   |                                                                  ---- Expected `Self@get_default` because of return type
41 |         if skip_boot:
42 |             return cls.NO_BOOTLOADER
   |                    ^^^^^^^^^^^^^^^^^ expected `Self@get_default`, found `Literal[Bootloader.NO_BOOTLOADER]`
   |

error[invalid-return-type]: Return type does not match returned value
  --> archinstall/lib/models/bootloader.py:40:63
   |
40 |     def get_default(cls, uefi: bool, skip_boot: bool = False) -> Self:
   |                                                                  ---- Expected `Self@get_default` because of return type
41 |         if skip_boot:
42 |             return cls.NO_BOOTLOADER
43 |         elif uefi:
44 |             return cls.Systemd
   |                    ^^^^^^^^^^^ expected `Self@get_default`, found `Literal[Bootloader.Systemd]`
   |

error[invalid-return-type]: Return type does not match returned value
  --> archinstall/lib/models/bootloader.py:46:11
   |
46 |             return cls.Grub
   |                    ^^^^^^^^ expected `Self@get_default`, found `Literal[Bootloader.Grub]`
   |
  ::: archinstall/lib/models/bootloader.py:40:63
   |
40 |     def get_default(cls, uefi: bool, skip_boot: bool = False) -> Self:
   |                                                                  ---- Expected `Self@get_default` because of return type
   |
```
2026-08-03 21:35:39 +10:00
renovate[bot] d43da6a1c2
Update pre-commit hook astral-sh/ruff-pre-commit to v0.16.1 (#4684)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-07-31 22:15:46 +10:00
renovate[bot] 3c56d9735e
Update dependency ruff to v0.16.1 (#4683)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-07-31 22:15:25 +10:00
Sanjay Santhanam 0f7c5c58fb
fix(applications): add ghostscript to print service packages (#4670)
* fix(applications): add ghostscript to print service packages

Selecting the print service installs cups, system-config-printer and
cups-pk-helper, but not ghostscript. cups relies on ghostscript for the
PDF/PostScript rendering filter, so driverless (IPP Everywhere) print
jobs fail out of the box with:

  cfFilterGhostscript: Unable to launch Ghostscript: gs: No such file or directory

Add ghostscript to the package list and cover it with a regression test.

Closes #4595

* test: drop low-value print service package assertion
2026-07-31 22:15:00 +10:00
codefiles 3576eec234
Remove unused parameter from _prepare_fs_type (#4685) 2026-07-31 14:46:45 +10:00
codefiles 274f6c2190
Remove superfluous PacmanConfiguration.default (#4682) 2026-07-31 14:44:05 +10:00
codefiles c0affc895c
Remove superfluous underscore variable assignment (#4679) 2026-07-31 14:43:37 +10:00
codefiles 1d66204940
Remove reintroduced __future__ import (#4678) 2026-07-31 14:43:03 +10:00
CooperWang0912 4edbd78e47 Update application.py 2026-07-29 18:47:22 +08:00
CooperWang0912 4e8bc43414 Fix Missing Return 2026-07-29 17:24:17 +08:00
CooperWang0912 fd50d54a70 Refactored to Selection Menu and Warning 2026-07-29 17:20:24 +08:00
Matteo a327efcd6d
Update Italian translation (#4675)
* Added new strings
* Updated strings
* Deleted some redundant unused strings
2026-07-28 19:15:01 +10:00
CooperWang0912 ff321b63d1 Refactored Command Execution 2026-07-28 14:41:48 +08:00
CooperWang0912 ebdc3f1a7a Debug and Formatting 2026-07-28 14:00:02 +08:00
CooperWang0912 5178fa54c1 Avoid None Return 2026-07-28 13:53:23 +08:00
CooperWang0912 969663b8bf Fixed Value Access 2026-07-28 13:08:43 +08:00
CooperWang0912 113988a6aa Initial Testing 2026-07-28 13:04:13 +08:00
utuhiro78 88e524231b
Update Japanese translation (#4672)
* Update Japanese translation

* Update Japanese translation
2026-07-27 22:10:00 +10:00
codefiles c25589e772
Support AArch64 root partition type GUID (#4671) 2026-07-27 22:07:28 +10:00
codefiles bb0df33556
Deduplicate enabling systemd-resolved stub mode (#4669) 2026-07-27 22:05:20 +10:00
codefiles fe16238983
Refactor run_custom_user_commands (#4668) 2026-07-25 15:33:22 +10:00
codefiles c1dcce8c2c
Add constant for path /sys/class/net (#4667) 2026-07-25 15:32:22 +10:00
correctmost 615c3341dc
Enable flake8-gettext checks in ruff (#4664)
This will help catch incorrect translation placeholders, like those
fixed in commit dccd0c8cc.

This commit also removes custom checking code from the
locales_generator.sh script.
2026-07-25 08:01:39 +10:00
Steev Klimaszewski 3653fbd695
Support aarch64 for GRUB and Limine EFI installation (#4641)
On aarch64 both the GRUB and Limine installers assume x86 and fail.

GRUB names its EFI target 'arm64', but platform.machine() returns
'aarch64', so passing --target=aarch64-efi is rejected. Map aarch64
to the arm64 target name expected by grub-install.

Limine ships architecture-specific default EFI binaries: BOOTAA64.EFI
on aarch64 versus BOOTIA32.EFI and BOOTX64.EFI on x86. Select the
correct binaries in the three places that reference them: when copying
them into the ESP, when building the pacman hook that refreshes them on
update, and when choosing the 64-bit EFI boot menu loader path.

Co-authored-by: Steev Klimaszewski <steev@parrotsec.org>
2026-07-24 21:30:54 +10:00
renovate[bot] 11e45aebeb
Update pre-commit hook astral-sh/ruff-pre-commit to v0.16.0 (#4660)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-07-24 12:31:30 +10:00
codefiles 4004593852
Refactor MirrorStatusEntryV3 field validator (#4661) 2026-07-24 10:01:03 +10:00
codefiles a68dcd6a28
Return bytes from fetch_data_from_url() (#4653) 2026-07-24 09:59:55 +10:00
renovate[bot] 639de7e953
Update dependency ruff to v0.16.0 (#4659)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-07-24 09:58:32 +10:00
codefiles 39e0fb39d2
Refactor MirrorStatusListV3 model validator (#4657) 2026-07-23 22:08:31 +10:00
codefiles ed388cab3f
Enable non-empty-init-module ruff rule (#4656) 2026-07-23 22:07:38 +10:00