str.title() title-cased every label word, which is wrong outside
English: it turned the Ukrainian "Ім'я хоста" into "Ім'Я Хоста" and
broke acronyms ("NTP" -> "Ntp"). The source strings and their
translations are already written with the correct casing.
Capitalize only the first letter of each label instead.
* add vn lang, trans lang, translating ~28%
* done 80/735 (10% not ~28% sorry) and 735/735 done (counted fuzzy or google translate helper). See https://gist.github.com/BlackCatOfficialytb/e85bad1758d9e29c349f2d75b91363f1 for program to help me translate
* doing plenty of things
* up to 40% by removing fuzzy tag in correct translate words/paragraph
* fix the extension
* more words/paragraphs are unfuzzied
* trans up to 57%
* translate up to 61%
* Fix ValueError exception when no disks are detected in the disk menu
in lib/disk/disk_menu.py, the menu items are created using info from a list called "devices" (device_handler.devices). when no block devices are detected, the list is empty, creating zero MenuItems, and causing the following ValueError:
ValueError: Menu must have at least one item
this change checks if the length of the list is shorter than 1 (empty list) before constructing the menu. if the list is empty, the user will be notified that no disks were detected. otherwise, the menu is created and behaves as normal
* Fixed ruff formatting issue
* Fixed ruff formatting issue
---------
Co-authored-by: Anton Hvornum <torxed@archlinux.org>
Plymouth is purely cosmetic and a frequent source of boot breakage,
most notably a black screen with the NVIDIA driver and a hidden LUKS
password prompt. Show a yellow confirmation warning listing these risks
when enabling it; when Plymouth is already enabled the user is only
changing the theme, so the warning is skipped. Regenerate base.pot for
the new strings.
select_plymouth_theme() compared enum item values against a raw string,
so the previously selected theme was never highlighted when reopening
the menu. Use set_focus_by_value() like other single-select menus.
Regenerate base.pot to pick up the three Plymouth strings introduced
in #4555.
* Skip custom mirror config when keyring sync fails
Check the exit state of archlinux-keyring-wkd-sync.service after
waiting for it to finish. If it failed, skip set_mirrors() and
continue installation with default mirrors instead of crashing
with "GPGME error: No data" during pacman -Syy.
* Reinit keyring automatically when pacman sync fails with GPGME error
Instead of skipping mirror configuration when wkd-sync fails, catch
the GPGME error at the point where it actually occurs - during
pacman -Syy. If the sync fails with a keyring-related error, reinit
the keyring with pacman-key --init/--populate and retry the sync.
* Simplify pacman sync() and guard gpg-agent kill on running state
Collapse the duplicated self.ask() blocks in sync() into a single call
via a msg variable, and drop the redundant default_cmd='pacman' (it is
already the default). In _reinit_keyring(), check that gpg-agent is
actually running (pgrep -x) before killing it, instead of catching the
killall error and assuming it was not running.
* Add users to seat group when seatd is selected
When a desktop profile uses seatd for seat access, the user must be
in the seat group for the compositor to access input devices. Without
this, sway/hyprland/niri/labwc fail to start after installation.
* Move seat access provisioning into DesktopProfile.provision()
The four Wayland profiles (Hyprland, Sway, niri, labwc) each duplicated a
provision() override calling provision_seat_access(). Move that into the
base DesktopProfile.provision() loop, which already iterates the selected
profiles, and read CustomSetting.SeatAccess from each. The None check now
lives at the call site (walrus), so provision_seat_access() takes a plain
str. This removes the per-profile overrides and their TYPE_CHECKING imports.
* Use top-level imports in seat access utils
The Installer and User imports were under a TYPE_CHECKING guard, but
they cause no circular import (bspwm.py already imports both at top
level). Move them to module scope per review feedback.
* Color-code install preview: red for errors, yellow for warnings, green for ready
Add preview_markup opt-in field to MenuItem with automatic Rich markup
escaping for all existing previews. Show missing configs and bootloader
errors in red, network warning in yellow, "Ready to install" in green.
Move network warning from confirmation dialog to install preview so it
is visible earlier.
* Fix Rich markup parsing error on JSON preview strings
Text.from_markup() replaces Label(markup=True) to avoid MarkupError
on strings containing ["
* Replace raw Rich markup with PreviewResult dataclass for typed preview levels
* Add missing translatable strings to base.pot
* Move get_install_warnings() from ConfigurationOutput to GlobalMenu
The method is only used by GlobalMenu._prev_install_invalid_config(),
so it belongs there rather than on the serialization class.
* Move level-to-style mapping into MsgLevelType.style() method
Replace the module-level _LEVEL_STYLE dict in components.py with a
style() method on the MsgLevelType enum, following the project
convention of encapsulating type-bound logic on the type itself.
* Change PreviewResult to hold a list of message-level pairs
PreviewResult.messages is now list[tuple[str, MsgLevelType]], allowing
a single result to carry multiple sections with different levels.
The preview_action signature drops list[PreviewResult] since the
dataclass itself handles multiple sections. Existing str-returning
previews still work and will be converted in follow-up PRs.
* Make MsgLevelType.style() return a typed MsgLevelStyle enum
Replace the bare style strings returned by style() with a MsgLevelStyle
StrEnum so the values are type-checked. Being a StrEnum, the members stay
plain strings and pass straight into Text.append(style=...), so no call
sites change.
* Fix WiFi network selection in TUI prompt
TableSelectionScreen returns the selected network in Result._item,
but the check on line 136 only tested Result._data (always None
for single-select). This caused every selection to fall through
to the "No wifi networks found" error path.
Fixes#4564
* Fix empty wifi scan crash and simplify network selection
Move wifi scanning out of the TableSelectionScreen callback to avoid
MenuItemGroup([]) ValueError when no networks are found. The empty
result is now handled before the selection screen, and the Selection
branch is simplified to a direct get_value() call.
Luks2.unlock() ran 'cryptsetup open' with no error handling, so a failure raised a bare CalledProcessError. Python renders that exception with only the exit status and discards the captured output, so cryptsetup's stderr (merged into stdout by run()) never reached the install log.
encrypt() already wraps its cryptsetup call and raises a DiskError that includes the captured output. Mirror that for unlock() so a failure reports the actual cryptsetup message instead of an opaque traceback.
Reported in #4327, where the underlying 'device-mapper: crypt: unknown table type' error was hidden from the log for this reason.
* fix: restrict EFI partition permissions with fmask/dmask=0077
Mount the ESP with fmask=0077 and dmask=0077 to prevent world-readable
files like /efi/loader/random-seed.
Closes#4241
* fix(efi): collapse fmask/dmask dedup to dict.fromkeys one-liner
Per @Torxed's review feedback. Same semantics as the previous loop
(dedupe by exact-string match) but shorter. dict.fromkeys preserves
insertion order, where set() would not.
* fix(efi): drop defensive list wrap per review
The list() copy on line 378 was load-bearing only if options were
mutated downstream, but the EFI branch reassigns options via
dict.fromkeys() (line 381) and the non-EFI branch passes through
to mount() without mutating. Drop the copy.
* Fix broken localization: tr(f-string) never matches translation catalog
tr(f'Invalid configuration: {error}') evaluates the f-string before
tr() runs, so xgettext extracts the literal placeholder as the msgid
while runtime passes the formatted string - the two never match.
Switch to tr('...{}').format(...) and update msgid in base.pot.
* Add CI validation for translations and pot_tools dev utility
Add translation-check workflow with two jobs:
- validate-po: msgfmt --check on changed .po files, .mo sync warning,
tr(f-string) anti-pattern grep on changed .py files
- validate-pot: verify all tr() strings exist in base.pot when .py
files change
Workflow only triggers on .py/.po/.pot file changes.
Add scripts/pot_tools.py developer utility (stats, list, add_missing)
for managing base.pot.
* Fix code style: use tabs and reformat xgettext arguments
Align check_pot_freshness.py and pot_tools.py with project
indentation (tabs) and ruff format requirements.
Sorry :-)
* Replace custom PO parser with msgcmp, drop pot_tools.py
Address review feedback: use standard gettext msgcmp instead of
hand-rolled parser for base.pot freshness check. Remove pot_tools.py
that duplicated locales_generator.sh functionality.
* Move translation checks into locales_generator.sh, simplify CI workflow
Use msgcmp instead of diff for base.pot validation to avoid failing on
legacy stale entries - the same cascading breakage that killed the
original workflow (disabled 2023, removed in #4483).
* Fix broken .po files: duplicate msgid in Hindi, missing format args in Finnish
* 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).
Only the truthiness of the time values was being evaluated. This
also reduces the usage of time.time(), which makes the codebase
more resilient against clock drift issues.
* Fix Limine install with ESP mounted outside /boot
Place limine.conf next to the EFI binary on the ESP so it is found
regardless of ESP mountpoint, and block unbootable layouts (non-UKI
Limine with ESP not at /boot and no separate /boot partition) in
GlobalMenu validation, guided.main() and _add_limine_bootloader().
Fixes#4333
* Extract bootloader layout validation into lib/bootloader/utils
* Consolidate Limine layout validation in bootloader utils
Move the boot-partition FAT check from GlobalMenu into
validate_bootloader_layout so all three call sites (GlobalMenu,
guided.py, Installer._add_limine_bootloader) share one function.
Return a BootloaderValidationFailure dataclass (kind + description)
instead of str | None, so callers can match on the failure kind and
the description is built where partition context is in scope.
* Encapsulate FAT filesystem detection in FilesystemType.is_fat()
The methods don't need access to the class, so they don't need to
be classmethods. This change reduces the number of 'bad return'
warnings seen when running Pyright, Pyrefly, and ty.
* Set console font automatically when selecting language
Add console_font field to languages.json and Language dataclass.
When a language is activated, setfont is called automatically,
falling back to default8x16 on error or for languages without
a custom font. Also activate translation when loading language
from config file.
* Support FONT environment variable for console font override
When FONT env var is set, use it as the console font instead of the language-specific font mapping from languages.json. The font is applied at startup and preserved across language switches.
On exit (success or failure), restore the console font to default8x16.
* CI checks fix
* Try to restore original console font with setfont -O
* Fix for pylint
* Restore console font before Textual exits application mode
Move font set/restore into Textual lifecycle to prevent color
artifacts from 256/512 glyph transitions. Apply FONT env var
and language font in on_mount, restore in _on_exit_app.
Skip font change when loading language from config (set_font=False)
to defer it until TUI starts.
* Fall back to language font mapping when FONT env var is invalid
Add _using_env_font flag to skip mapping only when FONT was
successfully applied. Show info message after TUI exits if FONT
could not be set.
* Use tempfile for console font backup files
* Fix linter errors: use mkstemp, close fds, add @override
* Fix ruff formatting
* Move font state from module singleton into TranslationHandler
* Refactor font handling per review feedback
* Make font methods members of TranslationHandler, skip on non-ISO
* ci: trigger tests
* Move running_from_iso import to module level
No circular dep, simpler than per-method local imports.
* Add explicit ISO guard to restore_console_font
Matches the existing guards in _set_font and save_console_font.
Behaviour was already safe implicitly via _font_backup=None, but
the explicit check makes intent obvious at the call site.
* Skip apply_console_font off-ISO
* Use list form for setfont SysCommand calls
* locale: ran generate_locale before making change
* locale: first 1000 confirmed everything is fine
* locale(hi): fixed rest of the fuzzy and empty strings
* locale(hi): ran locale generator
* Add Fonts application with multi-select for emoji and CJK packages
* Rename to Additional fonts and add package descriptions
* Add noto-fonts to font package selection
* Move font descriptions into FontPackage enum method
* ci: trigger tests
* Add ttf-liberation and ttf-dejavu to font selection
* Add Pacman settings submenu with Color and ParallelDownloads
Replace the standalone Parallel Downloads menu item with a Pacman
submenu containing ParallelDownloads (default 5) and Color (default on).
Settings are applied to both live and target system pacman.conf.
Hidden behind --advanced flag.
Backward compatible with old configs using "parallel_downloads" key.
* Skip _apply_to_live when user exits Pacman menu without changes
* Use TypedDict for PacmanConfiguration serialization
* Show Pacman menu by default, keep ParallelDownloads behind --advanced
* Add translation support for TUI help groups and binding descriptions
Help group names shown via F1 (General, Navigation, Selection, Search) and key binding descriptions in the Textual footer (Down, Up, Cancel, Confirm, etc.) were hardcoded in English and never went through the translation system.
* ruff_format_check and mypy fixes
* Refactor _translate_bindings to accept BindingsMap instead of Any
Add TApp.translate_bindings() to avoid exporting private functions
across modules.
* Revert deprecated curses help.py change
* Move TApp import to module level in global_menu
* Change translate_bindings from staticmethod to member method
The directives were added because a PR branch accidentally lagged
behind master and did not contain the mypy python_version bump from
commit 0175949ca.
This fixes commit d70e03fa3.
* Update German translations in base.po
Updated German translations for various prompts and messages in the base.po file.
* Apply suggestions from code review
Co-authored-by: Luca Zeuch <l-zeuch@email.de>
* Removed the # fuzzy´s from the already translated sentences.
---------
Co-authored-by: Luca Zeuch <l-zeuch@email.de>
* Add WaylandProfile to avoid installing xorg packages for Wayland compositors
* Refactor: use composition (is_wayland) instead of WaylandProfile inheritance
* Fix X11 profiles to inherit xorg packages from XorgProfile
* Style: use consistent multi-line super().__init__ for Wayland profiles
* Refactor: replace is_wayland with DisplayServerType enum
Add DisplayServerType enum (Xorg/Wayland) to Profile. All profiles
now inherit Profile directly with an explicit display_server param.
desktop.py installs xorg-server and xorg-xinit for Xorg profiles.
XorgProfile remains for standalone Xorg selection.
* Remove unnecessary super().packages from desktop profiles
* Update mypy to 1.20.0
This commit also removes a cast that is no longer needed after
https://github.com/python/mypy/pull/20602
* Ignore os.system deprecation warnings from mypy to fix CI
* Improve Hindi translations (base.po)
* Improve all Fuzzy and more hindi translations
* Update base.po
* Update base.po
* Update Hindi translations in base.po
* Update translation for Network Manager iwd backend
* Create base.po
* Update base.po
* Update base.po
* Update languages.json
* Update base.po
* Complete Nepali translation and generated .mo file
* Update languages.json
* Update languages.json
* Update Nepali translations with system and user strings
* Add translations for Partitioning, Bootloader, and Network
* Add disk and configuration translations
* Reach 500+ lines: User management, NTP, and BTRFS subvolumes
* Reached 700+ strings: Desktop profiles, BTRFS setup, and final installation prompts
* Fix syntax error in base.po and update translations
* Improve Hindi translations (base.po)
* Improve all Fuzzy and more hindi translations
* Update base.po
* Update base.po
* Update Hindi translations in base.po
* Update translation for Network Manager iwd backend
* Create base.po
* Update base.po
* Update base.po
* Update languages.json
* Update base.po
* Complete Nepali translation and generated .mo file
* Update languages.json
* Update languages.json
* Update Nepali translations with system and user strings
* Add translations for Partitioning, Bootloader, and Network
* Add disk and configuration translations
* Reach 500+ lines: User management, NTP, and BTRFS subvolumes
* Reached 700+ strings: Desktop profiles, BTRFS setup, and final installation prompts
* Improve Hindi translations (base.po)
* Improve all Fuzzy and more hindi translations
* Update base.po
* Update base.po
* Update Hindi translations in base.po
* Update translation for Network Manager iwd backend
* Create base.po
* Update base.po
* Update base.po
* Update languages.json
* Update base.po
* Complete Nepali translation and generated .mo file
* Update languages.json
* Update languages.json
* Update Nepali translations with system and user strings
* Add translations for Partitioning, Bootloader, and Network
* Add disk and configuration translations
* Reach 500+ lines: User management, NTP, and BTRFS subvolumes
* Improve Hindi translations (base.po)
* Improve all Fuzzy and more hindi translations
* Update base.po
* Update base.po
* Update Hindi translations in base.po
* Update translation for Network Manager iwd backend
* Create base.po
* Update base.po
* Update base.po
* Update languages.json
* Update base.po
* Complete Nepali translation and generated .mo file
* Update languages.json
* Update languages.json
* Update Nepali translations with system and user strings
* Add translations for Partitioning, Bootloader, and Network
* Improve Hindi translations (base.po)
* Improve all Fuzzy and more hindi translations
* Update base.po
* Update base.po
* Update Hindi translations in base.po
* Update translation for Network Manager iwd backend
* Create base.po
* Update base.po
* Update base.po
* Update languages.json
* Update base.po
* Complete Nepali translation and generated .mo file
* Update languages.json
* Update languages.json
* Update Nepali translations with system and user strings
* Improve Hindi translations (base.po)
* Improve all Fuzzy and more hindi translations
* Update base.po
* Update base.po
* Update Hindi translations in base.po
* Update translation for Network Manager iwd backend
* Improve Hindi translations in base.po
This PR improves and fixes Hindi translations in base.po.
It also corrects previously incorrect fuzzy translations.
No functional code changes.
* Update base.po
* removed fuzzy from the things i fixed in translation
* Bootloader changes:
-> GRUB: Support for UKI
- Disable 10_linux or breaks at kernel updates
- Create 09_custom entry
-> rEFInd:
- Remove fallback entry similar to other bootloaders
- With UKI still one dead entry can be hidden with DEL key
-> All bootloaders:
- Default to UKI on if supported, if using no UKI and /efi
Causes systemd boot to not load, because it needs a XTLDRBOOT part
Safer default for modern setups and simpler sec boot compat
* Add new models
* Modify based on grub-2.14-rc1 -> No need to use chainload
Thanks to codefiles for the heads-up
* Simplify has_uki_support
* Tab
* checks
This avoids to pull in sddm-kcm (to respect user's choice of login manager)
And to not pull in discover and related tools that should also be up to the user.
* Update base.po
Update Swedish for January 2026 iso
* Update Swedish translations before release today
Updated Swedish translations for various messages in base.po.
* Add support for rEFInd boot manager
* Fix ruff formatting complaints
* Added support for different mountpoints for /efi and /boot
Also fixed issue where if /boot is located in a BTRFS root partition, the initrd path wasn't including the subvol name.
* Fix ruff formatting complaints
* Replace SysCommand with self.arch_chroot call
* Fix ruff formatting complaints
---------
Co-authored-by: Diogo Bispo <gpg.jta36@slmail.me>
* fix(profiles): install power-profiles-daemon by default in the desktop
profile
* fix: only install power-profiles-daemon if a battery is detected
* chore: clean up has_battery method
* fix: make power management daemon a configurable application
* fix: make linter happy after merge
* fix: fix merge issues
* fix: give has_battery a return type to make linter happy
* chore: add locale msgids for power management related strings
* fix: changes requested in review
* fix: cache has_battery result
* fix: changes requested in review
* fix: just return none directly
* fix: add selected power management daemon to applications menu preview
* Modify archinstall language display to be handled like other sections.
This fixes a bug where language names that were too long would break curses menu.
* Revert types change
* Add configuration for swap algorithm. Backward compatible implementation
* Fix interaction to default to Yes and show (default)
* Fix mypy error
* Any -> str, str
* feedback Enums
* test file
* line length warning
* Renames
* Fix default values in TUI menu for display
* Address feedback
* More feedback, really appreciate it.
* Adapt to use same | None = None pattern
* Pytests
* Add missing import for Zram
* Lvm hotfix attempt
* Use --force and --yes flags
* Changed mirror behavior and more lvm testing
* Handle properly LvmOnLuks to only export in one fo the scenarios
* Idek
* Remove dead block
* Use -f flag and wipefs to remove any existing headers avoid "has signatures"
* oops
* Revert mirror change
Since in the next NVIDIA update, the kernel choice will have an impact on profiles.
The order this way makes it more logical: Bootloader => Kernel => Hw drivers
* add explicit _fetched_remote bool
* Attempt 2
* Adds about 15 seconds time-out to fetch_data_from_url with 3 retries (4, 5, 6)
Then fallsback to fully local list
* Feedbacks: 20 -> 30
Do not return early
Add debug
Remove new flag
60 second timeout for reflector
* Clean up install logs by hiding mirror scores behind --verbose
* feedback
* feedback2
* Refactor for less duplicate code and more conscise logic
Group NM types and handle configurations appropriatly
- For IWD -> Copy from ISO + Disable standalone and configure back-end
- For standard -> Install wpa_supplicant
- For both install applet only when Desktop profile
Added comments for clearer logic
* Rem comments
* Rem copy to ISO
* the one commit to rule them all
* Use the total available RAM / 2 for swap size dynamically.
* ws
* - Systems with 8 GB RAM or less will get 4096 MB zram
- Systems with more than 8 GB RAM will get half their RAM as zram
* Add debug print
* Revise Portuguese translations in base.po
Updated translations for various messages in Portuguese.
* Update Brazilian Portuguese translations in base.po
Updated translations and metadata in the Brazilian Portuguese locale file.
* Update Last-Translator in Brazilian Portuguese locale
* Change def size from 20 -> 32
Rest is still calculated from available - root.
* Use the existing process_root_partition_size():
For LVM just like regular disk best-effort.
This is only for single disk layouts.
* chore: cosmic is stable now, don't hide it behind --advanced flag
* fix: remove --advanced check in GreeterType
* chore: remove unused import to make linter happy
* feat(applications): add CUPS installation support
* fix: use translation for print service preview_action
* fix: incorrect action for print service menu item
* chore: refactor naming, printer -> print service
* fix: commit untracked file
* chore: fix formatting to make linter happy
* On horrible hardware this makes it so that the "Graphics drivers" section loads directly.
By initializing it with launch instead of on the fly.
* Init after logs
* This cache the property of graphics drivers properly.
Instead of trying to hack early init.
* Add host-to-target (H2T) installation mode detection
- Add running_from_host() function to detect if running from installed system vs ISO
- Function checks for /run/archiso existence (ISO mode) vs host mode
- Add clear logging of installation mode on startup
- Skip keyboard layout changes when running from host system
- Fix Pyright type error in jsonify() by using Any instead of object
- Update README to mention installation from existing system
This enables archinstall to be run from an existing Arch installation
to perform host-to-target installs on other disks/partitions.
* match existing style
* rem debug
* info -> debug
* Add Kurdish language
This pull request introduces full Kurdish language integration into archinstall, allowing Kurdish speaking users to navigate and use the installer entirely in their native language.
* Fix translation for timezone selection prompt
* Menu now filters and sorts using priority, improving UX.
* Refactor: improve logic, removed redundancy
* Refactor: improve logic, removed redundancy
* Improved logic when getting view items in menuItems
* Improved logic when getting view items in menuItems
As mentioned by @svartkanin on #3950, given we now have a way for the user to
explicitly specify if they want to install to the removable location, having a
fallback like this seems undesirable.
On top of that, as mentioned by @correctmost on the same PR, the code that said
PR introduced was bugged and would always raise an exception anyways.
Commit c095eb56d8 was supposed to introduce logic
such that if the `grub-install` command failed with a `--removable` flag, then
another attempt would be made with such flag removed.
This was broken because the `--removable` flag was kept in both cases (likely a
copy-paste mistake). This has been an issue since, in all future iterations of
the code.
What this commit does is fix this logic, but also invert the cases tested:
first test without `--removable`, then add it should that case fail, as this is
the most sensible thing to do.
- Allows for white space in between groups, aligning better with displayed example.
- Removed unneeded | symbol, which was checking as literal rather than working as "or %"
* Do not create BLS and Limine entries for fallback initramfs
Fallback initramfs seem to no longer be built by default.
* Remove initramfs variant logic altogether
* Add dialog to install EFI bootloader to removable location
This is just for GRUB and Limine for now.
* Move bootloader removable and UKI selections to bootloader submenu
* Update ask_for_bootloader_removable() prompt for ease of translation
* Fix issue where removable and UKI options were always enabled at first
* Minor cosmetic fixes to bootloader removable code
* Add has_removable_support to Bootloader
* Validate UKI and removable options in installer
* Use has_removable_support() where appropriate
* Fix potential AttributeError when bootloader_config is None
* Set default value for bootloader configuration menu item
* Update documentation after EFI removable/Limine changes
* Update limine.conf and non-removable location paths (as per Wiki)
* Do not create fallback boot menu entries when using UKIs on Limine
* Remove useless ask_* wrappers in bootloader_menu
* Improve bootloader menu previews
* Make bootloader menu __init__.py empty
* pr1
* pr2
* pr3
* pr3-2
* pr3-3
* pr3-4
* pr4
* Revert hardware.py to original state on snapshots branch
* readme
* Revert installer.py to original state on readme branch
* match base branch
* Revert genfstab and pacstrap command changes
* readme tweaks2
* Added the new -S flag for arch-chroot which does: Run in systemd mode.
* Fixed some formatting issues, and removed unused *args and **kwargs for run_command()
* Formatting issue
* Formatting issue
* Allow installation via TUI when 'No Bootloader' is selected as bootloader (--skip-boot)
* Update global_menu.py
Fixed ruff formatting issue
---------
Co-authored-by: Anton Hvornum <anton.feeds+github@gmail.com>
* Do not install Btrfs module and binary in mkinitcpio
This is what btrfs hook already does.
Signed-off-by: Vasiliy Stelmachenok <ventureo@cachyos.org>
* Remove unused properties from FilesystemType
They were only needed for Btrfs
Signed-off-by: Vasiliy Stelmachenok <ventureo@cachyos.org>
---------
Signed-off-by: Vasiliy Stelmachenok <ventureo@cachyos.org>
This is not necessary as kms hook for mkinitcpio already takes care
of adding amdgpu and radeon modules.
Signed-off-by: Vasiliy Stelmachenok <ventureo@cachyos.org>
* Fix German translations for consistency and clarity
Corrected capitalization and punctuation in German translations.
* Update German translations for disk configuration messages
sounds better
* Update German translations for clarity and consistency
* Update German translations in base.po
* Update German translation for object selection message
much more understandable
* Update German translations in base.po
friendlier
* Refine German translations in base.po
SORRY for the many changes. I only want the best.
* Update German translation for Btrfs subvolumes
* Update German translation for btrfs subvolume message
correct translation o)
* Update base.po (Swedish)
Update Swedish Translation
* Update base.po (Swedish)
Updated Swedish translation
Uppdaterad svensk översättning
* Bumping version to: 3.0.11 (archlinux#3835)
Bumping version to: 3.0.11 (archlinux#3835)
* Get rid of all warnings that poedit displayed
Bring translations closer to the English original, also removing some extraneous information. Get rid of all warnings poedit displayed. Correct translation that didn't match at all.
* Fix locales_generator.sh detection
xgettext was not recognizing tr() invocations. Following https://stackoverflow.com/a/11901925 fixed the issue
* Add more German translations
Improve consistency with some translations. Add translations for messages that were just detected in the previous commit. Add translations for Graphics Drivers
* Add more translations
Look for untranslated strings in the source files and add make them recognized by gettext
* Improve conistency of German translations and correct typos
* formatting
* Remove translations from enum members
* More translation tweaks
* gracefully return "undefined" if DMI is not in sysfs
fixes#3770, in theory
* None works too and is consistent with other behaviour
* None doesn't *just* work
* Adding the option to skip boot loader
* Fixed a variable complaint
* Fixed ruff and mypy
* Fixed mypy
* Fixed mypy
* Fixed import recursion
* Fixed ruff
* Fixed circular imports
* Fixed ruff
* Hiding the menu option for bootloader when --skip-boot is given. Still setting it default to None to avoid it sneaking into the config file or being set behind the scenes causing if statements to trigger.
* Created an Enum None type for Bootloader called NO_BOOTLOADER
* Fixed ruff
* Spelling error
* Hiding NO_BOOTLOADER if --skip-boot is omitted
* Fixed TUI error when bootloader was missing
* Fixed mypy complaints
* Fixed ruff complaint
* Made the Bootloader option visible during --skip-boot and set the default value to NO_BOOTLOADER when --skip-boot is present
* Added User Interface to change iteration time for LUKS encryption
* removing unneessary try catch and imports
* used the same constant in luks.py file
* fixed issue with error firing in default value
* fixed ruf preview warnings
* preview even if its default value. (iter_time)
* check encryption type is not non before showing iter_time
* using _real_input with input_vp instead of _current_text
* proper check for enc_type
* added Interation time to outer menu preview
* removed (ms) from title. so that we don't need to translate "Iteration time" and "iteration time (ms)".
* a comment slipped in. this was not supposed to be in this pull
* fixed comparison str with EncryptionType
* Added temporary hold on bootctl's --variables=BOOL usage, as it's not in systemd main yet
* Fixed ruff format check
* Fixed mypy type check issue
* Spelling error
* Fixed flake8 complaint
* still updating
* Updated urdu translation
Because it is very hard to display urdu fonts in consol. I changed urdu
writing to latin script which is also known as "Roman Urdu". For more
information check out https://en.wikipedia.org/wiki/Roman_Urdu.
* Updated errors and translation
As it is mentioned in #3463 the errors has been rectified and more
translation is added.
* Added --skip-wkd to skip waiting for the arch linux keyring wkd sync
* Package spelling error
* Forgot to add argument to Arguments()
* Added missing --skip-wkd arg to arg tester
* Corrected help text for --skip-wkd
* Updated urdu translation
Because it is very hard to display urdu fonts in consol. I changed urdu
writing to latin script which is also known as "Roman Urdu". For more
information check out https://en.wikipedia.org/wiki/Roman_Urdu.
* More translation
Some messages were not translated.
I couldn't start the application launcher with mod+d after a fresh installation using archinstall, where I selected sway as a desktop.
The reason is that the default application launcher for sway changed (see ab9b164e52 and b44015578a).
The fix is simply to install this new application launcher wmenu instead of dmenu.
The annotation prevents intermittent crashes when running mypy
with a clean cache:
./archinstall/tui/curses_menu.py:723: error: INTERNAL ERROR
RuntimeError: Partial type "<partial list[?]>" cannot be checked with "issubtype()"
* Swapping to python-uv for building archinstall
* Tweaked UV parameters to not use a venv
* Tweaking uv to not resolve/install any dependencies during installation.
* Added remaining dependencies to the build runner
* Swapped to uv for publishing, using pypi 'trusted publisher' instead of token access
* Installing uv and dependencies for publishing
* Swapped to uv in the building of the test ISO
* Split out unicode_ljust and unicode_rjust to break import cycle
Previously, there was an import cycle between tui.menu_item and
lib.output.
* Move unicode.py from lib/ to lib/utils/
* gave descriptions to profiles
* added some more profiles
* removed the descriptions for all of them and fixed the class name
* made some fixes
* removed the reference to seat
* forgot a comma
* forgot this seat reference
* rewrote river.py
* forgot to include river
* removed lightdm and added upercase X
* added some more fixes
* forgot to add labwc as a dep
Fixes a few issues related to the installation of Nvidia drivers.
1. No longer install the redudant nvidia-open package as it's provided
by the nvidia-open-dkms package.
2. Install vulkan-nouveau when selecting the open-source nouveau driver.
3. Install the libva-nvidia-driver package for hardware accelerated
video decoding.
* Edit text menu
* Fix alignment
* Scroll functionality
* Fix flake8
* Migrate locales menu
* Fix language translation
* Fix interrupt
* Fix flake8
* Edit mode preset
* Convert print to tui prints
* Fix mypy
* Fix cycling through long menu
* Fix profile view
* Fix scrolling
* Fix scrolling
* Fix mypy
* Fix swiss script
* Display asterisk for passwords
* Corrected a variable usage in the local mirror parsing
* Made sure that curses menu selection on mirrors use url object from mirror.url instead of the class instance
* Fixed mypy type on mirror list
---------
Co-authored-by: Torxed <torxed@archlinux.org>
I did not add the 'dev_path' key to each one of the partitions, as this may not be required in the 'default_layout' section, but it was required in my configuration when I chose 'manual_partitioning'.
* Update base.po
Found a typo when installing Arch Linux to a couple of new NVMEs from Seagate/WD from Inet/Webhallen yesterday and today, found a typo fixed a typo, added some more Swedish while i was at it
* Update base.po
Update and complete Swedish Translation
Found a typo when installing Arch Linux to a couple of new NVMEs from Seagate/WD from Inet/Webhallen yesterday and today, found a typo fixed a typo, added some more Swedish while i was at it
* Added a advanced=True flag to Profile() class, to be able to hide certain profiles behind --advanced
* Removed debugging sleep
* Made sure cosmic-greeter was hidden behind --advanced, and cleaned up --advanced checks on Profile()
* storage['arguments'] is not defined during code-init, falling back to sys.argv for cosmic-greeter check
* Update Spanish translation for 'greeter'
* Moved the os.execve call below the debug logging statement in SysCommandWorker
* Fix call to removed function in DesktopProfile class
* Refactor: Move precondition check for '=' to the beginning of the loop
This commit moves the check for the '=' element to the start of the while loop in the `parse_unspecified_argument_list` function. This change improves code readability and ensures that the precondition is evaluated before processing other elements, enhancing the overall flow of the argument parsing logic.
* Refactor: Remove redundant 'else' statement in argument parsing logic
This commit simplifies the control flow in the `parse_unspecified_argument_list` function by removing a redundant 'else' block. The logic is streamlined to improve readability and maintainability while preserving the original functionality. The removal of unnecessary nesting helps clarify the conditions under which elements are processed.
* Refactor: Remove redundant 'else' statement in argument parsing logic
This commit simplifies the control flow in the `parse_unspecified_argument_list` function by removing a redundant 'else' block. The logic is streamlined to improve readability and maintainability while preserving the original functionality. The removal of unnecessary nesting helps clarify the conditions under which elements are processed.
* Replace conditional validation with filtering
This commit modifies the `parse_unspecified_argument_list` function to filter out unwanted elements from the `unknowns` list instead of using a conditional check with an `if` statement. This change improves code readability and efficiency by utilizing list comprehension to create a new list that excludes elements equal to "=".
* Using JSON endpoint instead of ASCII endpoint for mirror listing, as the JSON endpoint is cached and easier to parse
* Added a TODO to handle unknown regional mirrors (which lacks info in the backend)
* Filtered out 'bad' mirrors. Also added a sorting mechanism that uses the mirrors 'score' rather than just the URL name. This will emulate the reflector.service/rankmirrors behavior and thus reducing the need to re-rank the mirrors.
* Added the ability to sort mirrors via latency or download speed using sorted(mirror_list, key=lambda mirror: (mirror.score, mirror.speed)) - but I have not implemented the sorting via the menu yet, and I have not integrated the new MirrorStatus model into the handling of URL's. I still need to figure out where the {region: [url, url]} is being used, so that i can convert to {region: [mirror.url, mirror.url]} logic.
* Converting MirrorStatus model to {mirror: [url, url]}
* Added debug information for /var/log/archinstall/install.log
* Fixing flake8
* Fixed issue where 'dead' mirrors have no score, and thus can't be round():ed
* Forgot to return model validation data after validation
* Improving debug/info output
* Reverting change in #2350 - Writing over instead of appending to mirrorlist
* Mirror URL's reported by the JSON endpoint does not contain the repo format, only the base location for the mirror. So we have to adjust for this.
* pydantic did not honor 'private' variables in 'before' model validator, had to change to 'after' instead.
* Sorted out mypy typing matching the new MirrorStatus model
* Added pydantic as a dependency, it's time!
* Updated workflow to include pydantic
* Added return values from model @property decorators.
* Update Spanish translation for 'greeter'
* Moved the os.execve call below the debug logging statement in SysCommandWorker
* Fix call to removed function in DesktopProfile class
I fixing misspells, typos, and make the text more readable.
I have reworded it in several places to make it easier to understand, and to make it more similar to the Hungarian text of other more common Linux installers.
Ready to use.
This commit adjusts the hooks in mkinitcpio.conf to follow the changes
in the upstream mkinitcpio repository.
It also add the consolefont hook if udev is used instead of systemd.
Addresses upstream commits:
[mkinitcpio.conf: add kms to the default HOOKS array](b99eb1c0d5)
[mkinitcpio.conf: adjust the placement of the modconf hook for consistency](0b052b1461)
Additionally, it replaces the missing `consolefont` hook if the
`keyboard` hook is used instead of the `sd-vconsole` hook.
For more details, see the Arch Wiki:
[dm-crypt/System configuration - 1.1 mkinitcpio](https://wiki.archlinux.org/title/Dm-crypt/System_configuration#mkinitcpio)
One of the tools needed by archinstall is mkfs.fatXX and this wasn't automatically installed.
Co-authored-by: Raven <github.onereddime@rubicon.aleeas.com>
* Fixing issue of: _Warning: Package 'archinstall.default_profiles' is absent from the 'packages' configuration. x50+
* Corrected the package name from 'where' to 'archinstall'
* Undoing change to 'package-data'
* schema.json: Remove dead misspelled i3-gasp profile
* schema.json: Rename KDE Plasma profile to the correct "Plasma" shorthand
* Rename to KDE Plasma in user facing parts and keep the old "Kde" profile for now
* Add back an accidental deleted character
* Backwards compat v2
After testing the text in the new version of Archinstaller.
I fixing misspells, typos, and make the text more readable.
I have reworded it in several places to make it easier to understand, and to make it more similar to the English text of other more common Linux installers.
Ready to use.
As of mkinitcpio v38, microcode is handled by a hook
and inserted into the initrd. Therefore, we don't have to
add microcode entries to bootloaders anymore.
* Add Japanese translation
* Update Japanese translation
* Update Japanese translation
* Update Japanese translation
* Update Japanese translation
* Update Japanese translation
* Update Japanese translation
* Update Japanese translation
we were missing 2 dependencies, pyparted and systemd-python(optional), that would lead pip installations to fail sometimes.
I added them and attributed systemd_python to a new optional dependency group called log since it only seems to be used for system logging:
64c91cdbcb/archinstall/lib/output.py (L133)
* Adding permanent redirect for readthedocs
* Have to remove pyparted because readthedocs can't build it
* Removed pyparted from pyproject.toml as readthedocs read that one too afterall.
* Moved to arch container
* Swapped branch for testing
* Removed publish if condition for now
* I think I got it this time, publish_branch has to be separate in order for the runner to create it and have access to pushing things?
* Missing 'git' depndency, to work with git heh
* Testing github pages
* Adding libparted-dev to the ubuntu machine (I'd like to move away from ubuntu, but the runner recommended it)
* Debugging
* changed to master branch
* The new build system requires a requirements.txt
* .txt is in .gitignore, had to force it in
* Missing requirements. I don't like this odd side loading of requirements.. but need to get docs built quickly.
* Started a re-write of the docs, using CSV for tables and re-organizing parameter definitions
* Added final config options in --config, some have external references which needs to be populated
* Forgot to escape a comma
* Clarified a note
* Added disk configuration and disk encryption docs
* Changed way of installing using source and python
* Added a 'list script' that lists available scripts. This could be converted to a argparse later. But this does the trick for now. And it's added to ease documentation and listing of available options.
* Added a 'Known issues' section, as well as renamed the issues tab
* Finished up the known issues section
* Added a section regarding --plugin
* Added plugin description, tweaked disk_config to the latest changes from #2221
* Added custom-commands docs, and improved some creds and known issue links
* Add `get_unique_path_for_device` to `DeviceHandler`
* Fix Limine bootloader deployment
* Fail if UKI is enabled with Limine
* Support more configuration options with Limine
* Fix linter errors
* Fix boot partition fs_type check for Limine
* Remove `select_language()` duplicate of `select_kb_layout()`
* Added a deprecation warning on select_language()
* Moved select_language() back into it's original location, just to keep the PR diff minimal
* Removed import for now, to please flake8
---------
Co-authored-by: Anton Hvornum <anton@hvornum.se>
* Add user information for error
* Show output if newer version available
* Update
* Update
* flake8
---------
Co-authored-by: Daniel Girtler <girtler.daniel@gmail.com>
* Renamed hyperland to hyprland, fixed seatd via post_installation and installed waybar
* Removed the launching of seatd on the installation process
* Starting to add nvidia support, and automatic configuring of hyprland
* Starting to add auto configuration of hyprland... But this will need maintenance
* Added hyprpaper auto config
Gonna make waybar auto config next
* Waybar auto config is starting...
I can't test rn I'm on vacation and my connection is quite bad (68 days for arch iso)
* Added wlogout support (and swaylock)
* Fixed file managers printing
* Starting to add a shell config... Definitely don't push this
* Reverted custom-shell config (create a separate PR)
* Removed systemd-logind, as that was just for testing the selector
* Added polkit as an option for the seat. As it's a dependency of the hyprland package
* Flake8 fix
* The name change wasn't propegated to the menu
* Added newline at the end of general_conf.py to not alter it
* Removed newline at the end of general_conf.py to not alter it
* Renamed the Hyprland class
---------
Co-authored-by: Anton Hvornum <anton@hvornum.se>
Co-authored-by: Anton Hvornum <anton.feeds+github@gmail.com>
replaced `--break-operating-system` with the correct flag
`--break-system-packages` and also added the flag as required for
`pip uninstall --break-system-packages`
* French language translation update
Hello,
Here is the update of the translation for the French language.
Regards,
Roxfr
* Add files via upload
Hello,
Here is the new translation for the French language:
- Update of the translation via the latest .pot file,
- Improved translation.
Regards,
Roxfr
* feat(locales/es): Add some missing spanish translations
* feat(locales/es): Run `locales_generator.sh` script to update the `base.mo` file
Follow the `archinstall/locales/README.md` instructions to add / update languages.
* feat(locales/es): Add some new missing translations
* feat(locales/es): Run `locales_generator.sh` script to update the `base.mo` file
Before this patch, menus in Korean language would not be aligned:
```
Archinstall 언어 Korean (71%)
> Mirrors
Locales Defined
Disk configuration
부트로더 Systemd-boot
스왑 True
```
After apply this patch, menus in Korean language are aligned:
```
Archinstall 언어 Korean (71%)
> Mirrors
Locales Defined
Disk configuration
부트로더 Systemd-boot
스왑 True
```
* Turning on output for mkinitcpio, otherwise the prompt stand still for a while after enabling fstrim.
* Added error message for when mkinitcpio errors out (but also say we're continuing)
* Pleasing mypy
* Added back xinit for awesome, since it can be used without a greeter, as well as other useful tools we've had in previous releases
* Fixing xinitrc for awesome profile
* Attempting to grab xorg packages when installing the desktop profile
* Spelling error on xorg-server
* Fixed sway value error on seat selection
Even though the translation files exist, we still can't find Simplified or
Traditional Chinese translations from the language menu, this patch fixes that.
# This workflow will upload a Python Package using Twine when a release is created
# This workflow will upload a Python Package when a release is created
# For more information see: https://help.github.com/en/actions/language-and-framework-guides/using-python-with-github-actions#publishing-to-package-registries
name:Upload archinstall to PyPi
@ -11,23 +11,23 @@ jobs:
deploy:
runs-on:ubuntu-latest
permissions:
# IMPORTANT: this permission is mandatory for Trusted Publishing
[](https://github.com/archlinux/archinstall/actions/workflows/flake8.yaml)
Just another guided/automated [Arch Linux](https://wiki.archlinux.org/index.php/Arch_Linux) installer with a twist.
The installer also doubles as a python library to install Arch Linux and manage services, packages and other things inside the installed system *(Usually from a live medium)*.
The installer also doubles as a python library to install Arch Linux and manage services, packages, and other things inside the installed system *(Usually from a live medium or from an existing installation)*.
* archinstall [discord](https://discord.gg/cqXU88y) server
> In the ISO you are root by default. Use sudo if running from an existing system.
$ sudo pacman -S archinstall
```shell
pacman-key --init
pacman -Sy archinstall
archinstall
```
Alternative ways to install are `git clone` the repository or `pip install --upgrade archinstall`.
Alternative ways to install are `git clone` the repository (and is better since you get the latest code regardless of [build date](https://archlinux.org/packages/?sort=&q=archinstall)) or `pip install --upgrade archinstall`.
## Upgrade `archinstall` on live Arch ISO image
Upgrading archinstall on the ISO needs to be done via a full system upgrade using
```shell
pacman -Syu
```
When booting from a live USB, the space on the ramdisk is limited and may not be sufficient to allow running a re-installation or upgrade of the installer.
In case one runs into this issue, any of the following can be used
* Resize the root partition https://wiki.archlinux.org/title/Archiso#Adjusting_the_size_of_the_root_file_system
* Specify the boot parameter copytoram=y (https://gitlab.archlinux.org/archlinux/mkinitcpio/mkinitcpio-archiso/-/blob/master/docs/README.bootparams#L26) which will copy the root filesystem to tmpfs
## Running the [guided](https://github.com/archlinux/archinstall/blob/master/archinstall/scripts/guided.py) installer
Assuming you are on an Arch Linux live-ISO or installed via `pip`:
Assuming you are on an Arch Linux live-ISO or installed via `pip`, `archinstall` will use the `guided` script by default
```shell
archinstall
```
similar goes for running the [guided](https://github.com/archlinux/archinstall/blob/master/archinstall/scripts/guided.py) installer using `git
## Running the [guided](https://github.com/archlinux/archinstall/blob/master/archinstall/scripts/guided.py) installer using `git`
To run alternative scripts using the `--script` parameter
# cd archinstall-git
# cp archinstall/scripts/guided.py
# python guided.py
```
archinstall --script <name>
```
#### Advanced
Some additional options that are not needed by most users are hidden behind the `--advanced` flag.
Some additional options that most users do not need are hidden behind the `--advanced` flag and all options/args can be consulted through `-h` or `--help`.
## Running from a declarative configuration file or URL
`archinstall` can be run with a JSON configuration file. There are 2 different configuration files to consider,
the `user_configuration.json` contains all general installation configuration, whereas the `user_credentials.json`
contains the sensitive user configuration such as user password, root password and encryption password.
contains the sensitive user configuration such as user password, root password, and encryption password.
An example of the user configuration file can be found here
By default, all user account credentials are hashed with `yescrypt` and only the hash is stored in the saved `user_credentials.json` file.
This is not possible for disk encryption password which needs to be stored in plaintext to be able to apply it.
However, when selecting to save configuration files, `archinstall` will prompt for the option to encrypt the `user_credentials.json` file content.
A prompt will require to enter a encryption password to encrypt the file. When providing an encrypted `user_configuration.json` as a argument with `--creds <user_credentials.json>`
there are multiple ways to provide the decryption key:
* Provide the decryption key via the command line argument `--creds-decryption-key <password>`
* Store the encryption key in the environment variable `ARCHINSTALL_CREDS_DECRYPTION_KEY` which will be read automatically
* If none of the above is provided a prompt will be shown to enter the decryption key manually
# Help or Issues
If you come across any issues, kindly submit your issue here on GitHub or post your query in the
[discord](https://discord.gg/aDeMffrxNg) help channel.
When submitting an issue, please:
* Provide the stacktrace of the output if applicable
* Attach the `/var/log/archinstall/install.log` to the issue ticket. This helps us help you!
* To upload the log from the ISO image and get a shareable URL, run<br>
```shell
archinstall share-log
```
# Available Languages
Archinstall is available in different languages which have been contributed and are maintained by the community.
Current translations are listed below and vary in the amount of translations per language
```
English
Arabic
Brazilian Portuguese
Czech
Dutch
Estonian
French
Georgian
German
Indonesian
Italian
Korean
Modern Greek
Polish
Portuguese
Russian
Spanish
Swedish
Tamil
Turkish
Ukrainian
Urdu
```
The language can be switched inside the installer (first menu entry). Bear in mind that not all languages provide
full translations as we rely on contributors to do the translations. Each language has an indicator that shows
how much has been translated.
Any contributions to the translations are more than welcome,
to get started please follow [the guide](https://github.com/archlinux/archinstall/blob/master/archinstall/locales/README.md)
# Help or Issues
## Fonts
The ISO does not ship with all fonts needed for different languages.
Fonts that use a different character set than Latin will not be displayed correctly. If those languages
want to be selected then a proper font has to be set manually in the console.
Submit an issue here on GitHub, or submit a post in the discord help channel.<br>
When doing so, attach the `/var/log/archinstall/install.log` to the issue ticket. This helps us help you!
# Mission Statement
Archinstall promises to ship a [guided installer](https://github.com/archlinux/archinstall/blob/master/archinstall/scripts/guided.py) that follows
the [Arch Principles](https://wiki.archlinux.org/index.php/Arch_Linux#Principles) as well as a library to manage services, packages and other Arch Linux aspects.
The guided installer will provide user-friendly options along the way, but the keyword here is options, they are optional and will never be forced upon anyone.
The guided installer itself is also optional to use if so desired and not forced upon anyone.
---
Archinstall has one fundamental function which is to be a flexible library to manage services, packages and other aspects inside the installed system.
This library is in turn used by the provided guided installer but is also for anyone who wants to script their own installations.
Therefore, Archinstall will try its best to not introduce any breaking changes except for major releases which may break backwards compatibility after notifying about such changes.
All available console fonts can be found in `/usr/share/kbd/consolefonts` and set with `setfont LatGrkCyr-8x16`.
# Scripting your own installation
## Scripting interactive installation
There are some examples in the `examples/` directory that should serve as a starting point.
For an example of a fully scripted, interactive installation please refer to the example
* Prompt the user to configurate the disk partitioning
* Prompt the user to setup disk encryption
* Create a file handler instance for the configured disk and the optional disk encryption
* Perform the disk operations (WARNING: this will potentially format the disks and erase all data)
* Installs a basic instance of Arch Linux *(base base-devel linux linux-firmware btrfs-progs efibootmgr)*
* Installs and configures a bootloader to partition 0 on uefi. On BIOS, it sets the root to partition 0.
* Install additional packages *(nano, wget, git)*
* Create a new user
> **Creating your own ISO with this script on it:** Follow [ArchISO](https://wiki.archlinux.org/index.php/archiso)'s guide on how to create your own ISO.
> **To create your own ISO with this script in it:** Follow [ArchISO](https://wiki.archlinux.org/index.php/archiso)'s guide on creating your own ISO.
## Script non-interactive automated installation
For an example of a fully scripted, automated installation please see the example
For an example of a fully scripted, automated installation please refer to the example
This will create a *20 GB*`testimage.img` and create a loop device which we can use to format and install to.<br>
`archinstall` is installed and executed in [guided mode](#docs-todo). Once the installation is complete, ~~you can use qemu/kvm to boot the test media.~~<br>
@ -235,6 +188,81 @@ This will create a *20 GB* `testimage.img` and create a loop device which we can
There's also a [Building and Testing](https://github.com/archlinux/archinstall/wiki/Building-and-Testing) guide.<br>
It will go through everything from packaging, building and running *(with qemu)* the installer against a dev branch.
## Boot an Arch ISO image in a VM
You may want to boot an ISO image in a VM to test `archinstall` in there.
* Download the latest [Arch ISO](https://archlinux.org/download/)
* Use the the below command to boot the ISO in a VM
`archinstall` will not offer or bundle AUR helpers or AUR packages due to a current consensus. This is not any individual developers decision. The reasons and discussions for this stance on the topic can be found on our mailing list thread: [(optional) AUR helper in archinstall](https://lists.archlinux.org/archives/list/arch-dev-public@lists.archlinux.org/thread/VYOULH2GOJLFM2BXOFLWH3D754YXFPSL/).
## Keyring out-of-date
For a description of the problem see https://archinstall.archlinux.page/help/known_issues.html#keyring-is-out-of-date-2213 and discussion in issue https://github.com/archlinux/archinstall/issues/2213.
For a quick fix the below command will install the latest keyrings
```pacman -Sy archlinux-keyring```
## How to dual boot with Windows
To install Arch Linux alongside an existing Windows installation using `archinstall`, follow these steps:
1. Ensure some unallocated space is available for the Linux installation after the Windows installation.
7. Determine the start and end sectors for the new partition location (values can be suffixed with various units).
8. Assign the mountpoint `/` to the new partition.
9. Assign the `Boot/ESP` partition the mountpoint `/boot` from the partitioning menu.
10. Confirm your settings and exit to the main menu by choosing `Confirm and exit`.
11. Modify any additional settings for your installation as necessary.
12. Start the installation upon completion of setup.
# Mission Statement
Archinstall promises to ship a [guided installer](https://github.com/archlinux/archinstall/blob/master/archinstall/scripts/guided.py) that follows
the [Arch Linux Principles](https://wiki.archlinux.org/index.php/Arch_Linux#Principles) as well as a library to manage services, packages, and other Arch Linux aspects.
The guided installer ensures a user-friendly experience, offering optional selections throughout the process. Emphasizing its flexible nature, these options are never obligatory.
In addition, the decision to use the guided installer remains entirely with the user, reflecting the Linux philosophy of providing full freedom and flexibility.
---
Archinstall primarily functions as a flexible library for managing services, packages, and other elements within an Arch Linux system.
This core library is the backbone for the guided installer that Archinstall provides. It is also designed to be used by those who wish to script their own custom installations.
Therefore, Archinstall will try its best to not introduce any breaking changes except for major releases which may break backward compatibility after notifying about such changes.
help="Generates a configuration file and then exits instead of performing an installation")
parser.add_argument("--script",default="guided",nargs="?",help="Script to run for installation",type=str)
parser.add_argument("--mount-point","--mount_point",nargs="?",type=str,help="Define an alternate mount point for installation")
parser.add_argument("--debug",action="store_true",default=False,help="Adds debug info into the log")
parser.add_argument("--offline",action="store_true",default=False,help="Disabled online upstream services such as package search and key-ring auto update.")
parser.add_argument("--no-pkg-lookups",action="store_true",default=False,help="Disabled package validation specifically prior to starting installation.")