* Add iwd standalone option to network configuration
Adds NicType.IWD as a third option alongside NM and NM_IWD: install
iwd, write /etc/iwd/main.conf with EnableNetworkConfiguration=true and
NameResolvingService=systemd, enable iwd.service + systemd-resolved.service.
iwd handles DHCP itself and resolved picks up its DNS via the symlink, so
no NetworkManager pulled in.
Also fills in parse_arg cases for NM_IWD and IWD so config files
round-trip both nic types.
Assisted-By: Flint
* wire up resolv stub and networkd service
* exclude virtual devices, dont harcode iface name instead match 'ether'
similar pattern to .network files shipped in /etc/systemd/network
* use dedent and rename menu option
I think it was a mistake to have made the previous changes to KDE Apps. In retrospect, it seemed like a good idea since the Budgie developer had done it that way in Fedora, which is the distro the developer uses as a reference for Budgie. When you start using it, you realize there's no bridge between the desktop and the KDE Apps, and things like Dolphin recognizes icons and themes, requiring some rather annoying manual configurations. Then, if you want to change them again, you have to change those configurations again. Files don't open by default with the apps either; you have to configure them for that to work.
At first, I thought the Budgie packager for Arch had forgotten some stray dependency, but with some free time, I tested it with Fedora 44, and to my surprise, it has exactly the same problems, which is completely unacceptable for a final stable release. I suppose he'll make the necessary changes in the near future, but right now, it's a disaster.
* Add --share-log flag to upload install.log to paste.rs
* Apply ruff-format to share_log.py
* Rework share-log per review: subcommand, TUI confirmation, truncate large logs
* Replace curl/SysCommand with urllib.request, remove defensive try/except
Per review: use stdlib urllib instead of shelling out to curl,
drop unnecessary try/except around TUI confirmation,
remove tempfile (content is passed directly as bytes).
* Fix TUI imports after ui module was pulled one level up (#4515)
* Decouple share_install_log from TUI module
* Add unit tests for share_install_log function
* Update docs to use share-log subcommand syntax
* Fix truncated package metadata in additional packages preview (#3580)
* Simplify package info fix: use rstrip and CSS wrap instead of env var plumbing
* Apply preview text wrap conditionally via wrap_preview parameter
* Add missing wrap-preview CSS to OptionListScreen and pass parameter through SelectMenu
* Keep standalone initramfs for grub-btrfs when UKI is enabled
Fixes#4505
* Move keep_initramfs logic into add_bootloader()
The grub-btrfs snapshot detection was in guided.py, forcing custom
script authors to replicate it. Since Installer already holds
disk_config, the check belongs inside add_bootloader().
The cutefish package was never in the official Arch repos (AUR only)
and the upstream project is abandoned. Installing this profile would
always fail with a pacman "not found" error.
* Fix sway+nvidia confirmation dialog (#4481)
Two bugs in the Sway+Nvidia driver confirmation:
1. The boolean was inverted - confirming "yes, I'm okay with issues"
reverted the driver to the previous choice instead of keeping it.
2. The warning triggered for any Nvidia driver, including the
open-source nouveau driver which is officially supported by Sway.
Add GfxDriver.is_nvidia_proprietary() and is_nvidia_nouveau() methods
so the warning fires only for nvidia-open-dkms (proprietary userspace).
* Address review feedback (#4485)
- Drop is_nvidia_nouveau() helper. It is not called anywhere yet; can
be re-added when a consumer lands.
- Collapse the Sway+Nvidia confirmation result handling into a single
expression now that allow_skip=False guarantees a boolean answer.
* Make network configuration mandatory with explicit "No network" option
* Add network configuration recommendation hint and disable sorting
* Warn when network selection was skipped instead of making it mandatory
Replace the mandatory network_config menu requirement with a yellow
warning on the final confirmation screen, shown only when the user
skipped the network menu entirely. Explicitly picking "No network
configuration" is treated as a conscious choice and does not trigger
the warning.
- Drop mandatory=True from the network_config global menu item
- Rename NicType.NONE menu label from "No network" to
"No network configuration" (an installed system still has an NIC;
only the install-time configuration is absent)
- Add ConfigurationOutput.get_install_warnings() and render them in
confirm_config when show_install_warnings=True
- guided.py and minimal.py enable the warning on the confirm screen
- Reuse the existing "No network configuration" msgid in .pot; add the
warning string; update Ukrainian translations accordingly
* Drop NicType.NONE from this PR
The NONE option introduced earlier in this branch is being removed per
review feedback (#4408). Whether to add explicit "None" options across
multiple menus (greeter, gfx driver, network, bootloader) is now being
discussed in #4464 and should land as a separate change there.
This PR keeps only the warning-on-confirm behaviour: when the user
skipped the network menu entirely (network_config is None), a yellow
warning is shown on the final confirmation screen.
First Edit :
- "effort" is singular so use has not have
Second Edit :
- we use "an" before vowel sounds (an old )
Third Edit :
- use Sometimes because sometimes means occasionally and Some times means some period or era
Fourth Edit :
- Plural of ISO is ISOs not ISO's
* Show install summary when configuration is valid
Previously the Install menu preview was empty when everything was valid,
leaving the user with no "ready" signal. Now show "Ready to install"
plus a two-column summary of the current configuration.
- New _install_summary() composes an aligned key/value table with rows
for disks+FS+LUKS, bootloader, kernel, profile, greeter, package
count, network, locale and timezone. Column width adapts to the
longest translated label so translations keep the alignment.
- Rows whose underlying config is not set are skipped rather than
rendered as empty.
- base.pot / uk base.po: add new msgids for summary labels.
* Move install summary into ConfigurationOutput
The summary helper that renders the install preview's two-column
configuration overview lived in GlobalMenu. Move it to
ConfigurationOutput.as_summary() so it sits alongside the JSON
output methods that share the same role. The preview now syncs
menu state to ArchConfig and delegates rendering.
The workflow has been fully commented out since #2119 (2023-09-28) when
translation handling was reworked. Because the file has no `on:` triggers,
GitHub Actions creates a failed workflow run for every push, polluting
the Actions tab without affecting PR check-runs.
* Add console font selection to Locales menu
Add a 4th menu item "Console font" to the Locales configuration,
allowing users to select a console font for the target system.
The selected font is written to /etc/vconsole.conf.
If a terminus font (ter-*) is selected, the terminus-font package
is automatically installed on the target system.
* Switch list_console_fonts to pathlib and add @lru_cache
Address svartkanin's review on #4469. Replace os.listdir +
chained removesuffix with Path.glob('*.gz') + split('.')[0],
and cache the result via lru_cache - the kbd consolefonts
directory is static at runtime so re-scanning on every menu
reopen was wasted I/O.
* Fix argv injection in _create_user and gpasswd loop
Use argv list with run() instead of f-string interpolation into
SysCommand, add debug logging on failure.
* Extract _chroot_argv helper and harden user/file ops
Address svartkanin's review on #4473: factor the
['arch-chroot', '-S', str(self.target), ...] boilerplate into a
private Installer._chroot_argv() helper, and migrate the seven
existing argv-form call sites to it (useradd, gpasswd, chpasswd,
chsh, chown, snapper-create-config, grub-install).
Two related hardening tweaks while in the area:
- Raise gpasswd failure log from debug() to warn(). The group-add
loop has no return-False feedback channel for the caller, so a
silent debug() means a half-configured user looks like a
successful install.
- Add `--` end-of-options separator for useradd and chown so a
username or path starting with `-` cannot smuggle flags. The TUI
validates usernames, but parse_arguments() in models/users.py
does not, so config.json is the residual hole; this closes it
for these two sites at zero cost.
* Extend validate_bootloader_layout with UEFI-dependent checks
Add is_uefi parameter and three new validations: Systemd-boot, Efistub
and rEFInd require UEFI; Efistub additionally requires a FAT boot
partition. Move the rEFInd UEFI-only check out of GlobalMenu so
guided.py and Installer silent-install paths get the same coverage.
* Encapsulate UEFI-only flag in Bootloader enum
Replace module-level _UEFI_ONLY_BOOTLOADERS tuple with an
is_uefi_only() method on the Bootloader enum, mirroring the
existing has_uki_support() / has_removable_support() pattern.
* Drop is_uefi parameter from validate_bootloader_layout
The UEFI flag is a constant system fact for the run, so the
validator retrieves it via SysInfo.has_uefi() directly instead
of having every caller pass it in. Updates all three call sites
in global_menu.py, installer.py and guided.py, and removes the
now-unused SysInfo import from guided.py.
All three qemu-system-x86_64 examples in README pointed both -drive
if=pflash entries at the same file (/usr/share/ovmf/x64/OVMF.4m.fd).
OVMF needs CODE for the first pflash and VARS for the second; as
written, EFI NVRAM is not initialized correctly.
The path /usr/share/ovmf/x64/ is also stale - the ovmf package has
been replaced by edk2-ovmf, which installs under /usr/share/edk2/x64/.
Fix both in the three examples (testimage loop section, base Boot ISO
block, espeakup variant).