diff --git a/archinstall/__init__.py b/archinstall/__init__.py index dd2bf8d3e8..d8069d96a8 100644 --- a/archinstall/__init__.py +++ b/archinstall/__init__.py @@ -87,7 +87,7 @@ def main() -> int: if not arch_config_handler.args.skip_version_check: _check_new_version() - script = arch_config_handler.args.script + script = arch_config_handler.get_script() mod_name = f'archinstall.scripts.{script}' # by loading the module we'll automatically run the script diff --git a/archinstall/lib/args.py b/archinstall/lib/args.py index 2aed561193..5e2d9448a5 100644 --- a/archinstall/lib/args.py +++ b/archinstall/lib/args.py @@ -38,7 +38,7 @@ class Arguments: creds_decryption_key: str | None = None silent: bool = False dry_run: bool = False - script: str = 'guided' + script: str | None = None mountpoint: Path = Path('/mnt') skip_ntp: bool = False skip_wkd: bool = False @@ -54,6 +54,7 @@ class Arguments: @dataclass class ArchConfig: version: str | None = None + script: str | None = None locale_config: LocaleConfiguration | None = None archinstall_language: Language = field(default_factory=lambda: translation_handler.get_language_by_abbr('en')) disk_config: DiskLayoutConfiguration | None = None @@ -93,6 +94,7 @@ def unsafe_json(self) -> dict[str, Any]: def safe_json(self) -> dict[str, Any]: config: Any = { 'version': self.version, + 'script': self.script, 'archinstall-language': self.archinstall_language.json(), 'hostname': self.hostname, 'kernels': self.kernels, @@ -130,6 +132,9 @@ def from_config(cls, args_config: dict[str, Any]) -> 'ArchConfig': arch_config.locale_config = LocaleConfiguration.parse_arg(args_config) + if script := args_config.get('script', None): + arch_config.script = script + if archinstall_lang := args_config.get('archinstall-language', None): arch_config.archinstall_language = translation_handler.get_language_by_name(archinstall_lang) @@ -244,6 +249,15 @@ def config(self) -> ArchConfig: def args(self) -> Arguments: return self._args + def get_script(self) -> str: + if script := self.args.script: + return script + + if script := self.config.script: + return script + + return 'guided' + def print_help(self) -> None: self._parser.print_help() @@ -312,7 +326,6 @@ def _define_arguments(self) -> ArgumentParser: ) parser.add_argument( '--script', - default='guided', nargs='?', help='Script to run for installation', type=str, diff --git a/tests/data/test_config.json b/tests/data/test_config.json index b7fef9e0af..f469df954d 100644 --- a/tests/data/test_config.json +++ b/tests/data/test_config.json @@ -1,5 +1,6 @@ { "archinstall-language": "English", + "script": "test_script", "app_config": { "bluetooth_config": { "enabled": true diff --git a/tests/test_args.py b/tests/test_args.py index 329ca0c602..2df7e4ad2a 100644 --- a/tests/test_args.py +++ b/tests/test_args.py @@ -31,7 +31,7 @@ def test_default_args(monkeypatch: MonkeyPatch) -> None: creds_decryption_key=None, silent=False, dry_run=False, - script='guided', + script=None, mountpoint=Path('/mnt'), skip_ntp=False, skip_wkd=False, @@ -127,6 +127,7 @@ def test_config_file_parsing( assert arch_config == ArchConfig( version='3.0.2', + script='test_script', app_config=ApplicationConfiguration( bluetooth_config=BluetoothConfiguration(enabled=True), audio_config=AudioConfiguration(audio=Audio.PIPEWIRE),