diff --git a/archinstall.svg b/archinstall.svg new file mode 100644 index 00000000..5e2b244e --- /dev/null +++ b/archinstall.svg @@ -0,0 +1,5532 @@ + + + + + + +G + + + +archinstall + +archinstall + + + +archinstall_default_profiles + +archinstall. +default_profiles + + + +archinstall_lib_models_profile + +archinstall. +lib. +models. +profile + + + +archinstall_default_profiles->archinstall_lib_models_profile + + + + + +archinstall_lib_profile_profile_menu + +archinstall. +lib. +profile. +profile_menu + + + +archinstall_default_profiles->archinstall_lib_profile_profile_menu + + + + + +archinstall_lib_profile_profiles_handler + +archinstall. +lib. +profile. +profiles_handler + + + +archinstall_default_profiles->archinstall_lib_profile_profiles_handler + + + + + + +archinstall_scripts_minimal + +archinstall. +scripts. +minimal + + + +archinstall_default_profiles->archinstall_scripts_minimal + + + + +archinstall_default_profiles_desktop + +archinstall. +default_profiles. +desktop + + + +archinstall_default_profiles_desktops_awesome + +archinstall. +default_profiles. +desktops. +awesome + + + +archinstall_default_profiles_desktops_bspwm + +archinstall. +default_profiles. +desktops. +bspwm + + + +archinstall_default_profiles_desktops_budgie + +archinstall. +default_profiles. +desktops. +budgie + + + +archinstall_default_profiles_desktops_cinnamon + +archinstall. +default_profiles. +desktops. +cinnamon + + + +archinstall_default_profiles_desktops_cosmic + +archinstall. +default_profiles. +desktops. +cosmic + + + +archinstall_default_profiles_desktops_cutefish + +archinstall. +default_profiles. +desktops. +cutefish + + + +archinstall_default_profiles_desktops_deepin + +archinstall. +default_profiles. +desktops. +deepin + + + +archinstall_default_profiles_desktops_enlightenment + +archinstall. +default_profiles. +desktops. +enlightenment + + + +archinstall_default_profiles_desktops_gnome + +archinstall. +default_profiles. +desktops. +gnome + + + +archinstall_default_profiles_desktops_hyprland + +archinstall. +default_profiles. +desktops. +hyprland + + + +archinstall_default_profiles_desktops_i3 + +archinstall. +default_profiles. +desktops. +i3 + + + +archinstall_default_profiles_desktops_labwc + +archinstall. +default_profiles. +desktops. +labwc + + + +archinstall_default_profiles_desktops_lxqt + +archinstall. +default_profiles. +desktops. +lxqt + + + +archinstall_default_profiles_desktops_mate + +archinstall. +default_profiles. +desktops. +mate + + + +archinstall_default_profiles_desktops_niri + +archinstall. +default_profiles. +desktops. +niri + + + +archinstall_default_profiles_desktops_plasma + +archinstall. +default_profiles. +desktops. +plasma + + + +archinstall_default_profiles_desktops_qtile + +archinstall. +default_profiles. +desktops. +qtile + + + +archinstall_default_profiles_desktops_river + +archinstall. +default_profiles. +desktops. +river + + + +archinstall_default_profiles_desktops_sway + +archinstall. +default_profiles. +desktops. +sway + + + +archinstall_default_profiles_desktops_xfce4 + +archinstall. +default_profiles. +desktops. +xfce4 + + + +archinstall_default_profiles_desktops_xmonad + +archinstall. +default_profiles. +desktops. +xmonad + + + +archinstall_default_profiles_minimal + +archinstall. +default_profiles. +minimal + + + +archinstall_default_profiles_minimal->archinstall_scripts_minimal + + + + + + +archinstall_default_profiles_profile + +archinstall. +default_profiles. +profile + + + +archinstall_default_profiles_profile->archinstall_default_profiles_desktop + + + + +archinstall_default_profiles_profile->archinstall_default_profiles_desktops_awesome + + + + + +archinstall_default_profiles_profile->archinstall_default_profiles_desktops_bspwm + + + + + +archinstall_default_profiles_profile->archinstall_default_profiles_desktops_budgie + + + + + +archinstall_default_profiles_profile->archinstall_default_profiles_desktops_cinnamon + + + + + +archinstall_default_profiles_profile->archinstall_default_profiles_desktops_cosmic + + + + + +archinstall_default_profiles_profile->archinstall_default_profiles_desktops_cutefish + + + + + +archinstall_default_profiles_profile->archinstall_default_profiles_desktops_deepin + + + + + +archinstall_default_profiles_profile->archinstall_default_profiles_desktops_enlightenment + + + + + +archinstall_default_profiles_profile->archinstall_default_profiles_desktops_gnome + + + + + + +archinstall_default_profiles_profile->archinstall_default_profiles_desktops_hyprland + + + + + +archinstall_default_profiles_profile->archinstall_default_profiles_desktops_i3 + + + + + + +archinstall_default_profiles_profile->archinstall_default_profiles_desktops_labwc + + + + + + + +archinstall_default_profiles_profile->archinstall_default_profiles_desktops_lxqt + + + + + +archinstall_default_profiles_profile->archinstall_default_profiles_desktops_mate + + + + + + +archinstall_default_profiles_profile->archinstall_default_profiles_desktops_niri + + + + + + +archinstall_default_profiles_profile->archinstall_default_profiles_desktops_plasma + + + + + +archinstall_default_profiles_profile->archinstall_default_profiles_desktops_qtile + + + + + +archinstall_default_profiles_profile->archinstall_default_profiles_desktops_river + + + + + +archinstall_default_profiles_profile->archinstall_default_profiles_desktops_sway + + + + +archinstall_default_profiles_profile->archinstall_default_profiles_desktops_xfce4 + + + + + +archinstall_default_profiles_profile->archinstall_default_profiles_desktops_xmonad + + + + + +archinstall_default_profiles_profile->archinstall_default_profiles_minimal + + + + + +archinstall_default_profiles_server + +archinstall. +default_profiles. +server + + + +archinstall_default_profiles_profile->archinstall_default_profiles_server + + + + + +archinstall_default_profiles_servers_cockpit + +archinstall. +default_profiles. +servers. +cockpit + + + +archinstall_default_profiles_profile->archinstall_default_profiles_servers_cockpit + + + + + +archinstall_default_profiles_servers_docker + +archinstall. +default_profiles. +servers. +docker + + + +archinstall_default_profiles_profile->archinstall_default_profiles_servers_docker + + + + +archinstall_default_profiles_servers_httpd + +archinstall. +default_profiles. +servers. +httpd + + + +archinstall_default_profiles_profile->archinstall_default_profiles_servers_httpd + + + + + +archinstall_default_profiles_servers_lighttpd + +archinstall. +default_profiles. +servers. +lighttpd + + + +archinstall_default_profiles_profile->archinstall_default_profiles_servers_lighttpd + + + + + +archinstall_default_profiles_servers_mariadb + +archinstall. +default_profiles. +servers. +mariadb + + + +archinstall_default_profiles_profile->archinstall_default_profiles_servers_mariadb + + + + + + +archinstall_default_profiles_servers_nginx + +archinstall. +default_profiles. +servers. +nginx + + + +archinstall_default_profiles_profile->archinstall_default_profiles_servers_nginx + + + + + +archinstall_default_profiles_servers_postgresql + +archinstall. +default_profiles. +servers. +postgresql + + + +archinstall_default_profiles_profile->archinstall_default_profiles_servers_postgresql + + + + + + + + +archinstall_default_profiles_servers_sshd + +archinstall. +default_profiles. +servers. +sshd + + + +archinstall_default_profiles_profile->archinstall_default_profiles_servers_sshd + + + + + +archinstall_default_profiles_servers_tomcat + +archinstall. +default_profiles. +servers. +tomcat + + + +archinstall_default_profiles_profile->archinstall_default_profiles_servers_tomcat + + + + + +archinstall_default_profiles_xorg + +archinstall. +default_profiles. +xorg + + + +archinstall_default_profiles_profile->archinstall_default_profiles_xorg + + + + + +archinstall_default_profiles_profile->archinstall_lib_models_profile + + + + +archinstall_default_profiles_profile->archinstall_lib_profile_profile_menu + + + + +archinstall_default_profiles_profile->archinstall_lib_profile_profiles_handler + + + + + +archinstall_default_profiles_xorg->archinstall_default_profiles_desktops_awesome + + + + + + +archinstall_default_profiles_xorg->archinstall_default_profiles_desktops_bspwm + + + + + +archinstall_default_profiles_xorg->archinstall_default_profiles_desktops_budgie + + + + + + +archinstall_default_profiles_xorg->archinstall_default_profiles_desktops_cinnamon + + + + + +archinstall_default_profiles_xorg->archinstall_default_profiles_desktops_cosmic + + + + + +archinstall_default_profiles_xorg->archinstall_default_profiles_desktops_cutefish + + + + + +archinstall_default_profiles_xorg->archinstall_default_profiles_desktops_deepin + + + + + +archinstall_default_profiles_xorg->archinstall_default_profiles_desktops_enlightenment + + + + + +archinstall_default_profiles_xorg->archinstall_default_profiles_desktops_gnome + + + + + + +archinstall_default_profiles_xorg->archinstall_default_profiles_desktops_hyprland + + + + + + +archinstall_default_profiles_xorg->archinstall_default_profiles_desktops_i3 + + + + + +archinstall_default_profiles_xorg->archinstall_default_profiles_desktops_labwc + + + + + + +archinstall_default_profiles_xorg->archinstall_default_profiles_desktops_lxqt + + + + + +archinstall_default_profiles_xorg->archinstall_default_profiles_desktops_mate + + + + + + +archinstall_default_profiles_xorg->archinstall_default_profiles_desktops_niri + + + + + +archinstall_default_profiles_xorg->archinstall_default_profiles_desktops_plasma + + + + + +archinstall_default_profiles_xorg->archinstall_default_profiles_desktops_qtile + + + + + +archinstall_default_profiles_xorg->archinstall_default_profiles_desktops_river + + + + + +archinstall_default_profiles_xorg->archinstall_default_profiles_desktops_sway + + + + + +archinstall_default_profiles_xorg->archinstall_default_profiles_desktops_xfce4 + + + + + +archinstall_default_profiles_xorg->archinstall_default_profiles_desktops_xmonad + + + + + +archinstall_lib + +archinstall. +lib + + + +archinstall_lib->archinstall + + + + + +archinstall_lib->archinstall_default_profiles_desktop + + + + + + + +archinstall_lib->archinstall_default_profiles_desktops_awesome + + + + + +archinstall_lib->archinstall_default_profiles_desktops_hyprland + + + + + +archinstall_lib->archinstall_default_profiles_desktops_labwc + + + + + +archinstall_lib->archinstall_default_profiles_desktops_niri + + + + + + + +archinstall_lib->archinstall_default_profiles_desktops_sway + + + + + + + +archinstall_lib->archinstall_default_profiles_profile + + + + + +archinstall_lib->archinstall_default_profiles_server + + + + + +archinstall_lib->archinstall_default_profiles_servers_docker + + + + + + + +archinstall_lib->archinstall_default_profiles_servers_mariadb + + + + + +archinstall_lib->archinstall_default_profiles_servers_postgresql + + + + + + +archinstall_lib->archinstall_default_profiles_xorg + + + + + +archinstall_scripts_guided + +archinstall. +scripts. +guided + + + +archinstall_lib->archinstall_scripts_guided + + + + + +archinstall_lib->archinstall_scripts_minimal + + + + + + + +archinstall_scripts_only_hd + +archinstall. +scripts. +only_hd + + + +archinstall_lib->archinstall_scripts_only_hd + + + + + + + +archinstall_tui_curses_menu + +archinstall. +tui. +curses_menu + + + +archinstall_lib->archinstall_tui_curses_menu + + + + + + +archinstall_tui_help + +archinstall. +tui. +help + + + +archinstall_lib->archinstall_tui_help + + + + + + + +archinstall_tui_menu_item + +archinstall. +tui. +menu_item + + + +archinstall_lib->archinstall_tui_menu_item + + + + + + +archinstall_tui_ui_components + +archinstall. +tui. +ui. +components + + + +archinstall_lib->archinstall_tui_ui_components + + + + + +archinstall_tui_ui_menu_item + +archinstall. +tui. +ui. +menu_item + + + +archinstall_lib->archinstall_tui_ui_menu_item + + + + + +archinstall_lib_applications + +archinstall. +lib. +applications + + + +archinstall_lib_global_menu + +archinstall. +lib. +global_menu + + + +archinstall_lib_applications->archinstall_lib_global_menu + + + + + +archinstall_lib_applications->archinstall_scripts_guided + + + + +archinstall_lib_applications_application_handler + +archinstall. +lib. +applications. +application_handler + + + +archinstall_lib_applications_application_handler->archinstall_scripts_guided + + + + + +archinstall_lib_applications_application_menu + +archinstall. +lib. +applications. +application_menu + + + +archinstall_lib_applications_application_menu->archinstall_lib_global_menu + + + + + +archinstall_lib_args + +archinstall. +lib. +args + + + +archinstall_lib_args->archinstall + + + + + +archinstall_lib_args->archinstall_default_profiles_profile + + + + + +archinstall_lib_args->archinstall_default_profiles_servers_docker + + + + + + +archinstall_lib_bootloader_bootloader_menu + +archinstall. +lib. +bootloader. +bootloader_menu + + + +archinstall_lib_args->archinstall_lib_bootloader_bootloader_menu + + + + + +archinstall_lib_configuration + +archinstall. +lib. +configuration + + + +archinstall_lib_args->archinstall_lib_configuration + + + + + +archinstall_lib_args->archinstall_lib_global_menu + + + + + + +archinstall_lib_installer + +archinstall. +lib. +installer + + + +archinstall_lib_args->archinstall_lib_installer + + + + + +archinstall_lib_interactions_disk_conf + +archinstall. +lib. +interactions. +disk_conf + + + +archinstall_lib_args->archinstall_lib_interactions_disk_conf + + + + +archinstall_lib_mirrors + +archinstall. +lib. +mirrors + + + +archinstall_lib_args->archinstall_lib_mirrors + + + + + +archinstall_lib_models_bootloader + +archinstall. +lib. +models. +bootloader + + + +archinstall_lib_args->archinstall_lib_models_bootloader + + + + + + +archinstall_lib_models_mirrors + +archinstall. +lib. +models. +mirrors + + + +archinstall_lib_args->archinstall_lib_models_mirrors + + + + + + +archinstall_lib_plugins + +archinstall. +lib. +plugins + + + +archinstall_lib_args->archinstall_lib_plugins + + + + + + +archinstall_lib_args->archinstall_scripts_guided + + + + +archinstall_lib_args->archinstall_scripts_minimal + + + + +archinstall_lib_args->archinstall_scripts_only_hd + + + + + +archinstall_lib_authentication + +archinstall. +lib. +authentication + + + +archinstall_lib_authentication->archinstall_lib_global_menu + + + + + +archinstall_lib_authentication->archinstall_scripts_guided + + + + +archinstall_lib_authentication_authentication_handler + +archinstall. +lib. +authentication. +authentication_handler + + + +archinstall_lib_authentication_authentication_handler->archinstall_scripts_guided + + + + +archinstall_lib_authentication_authentication_menu + +archinstall. +lib. +authentication. +authentication_menu + + + +archinstall_lib_authentication_authentication_menu->archinstall_lib_global_menu + + + + +archinstall_lib_boot + +archinstall. +lib. +boot + + + +archinstall_lib_bootloader + +archinstall. +lib. +bootloader + + + +archinstall_lib_bootloader->archinstall_lib_global_menu + + + + + +archinstall_lib_bootloader_bootloader_menu->archinstall_lib_global_menu + + + + +archinstall_lib_command + +archinstall. +lib. +command + + + +archinstall_lib_command->archinstall_lib_authentication_authentication_handler + + + + +archinstall_lib_command->archinstall_lib_boot + + + + + + +archinstall_lib_disk_device_handler + +archinstall. +lib. +disk. +device_handler + + + +archinstall_lib_command->archinstall_lib_disk_device_handler + + + + + + +archinstall_lib_disk_fido + +archinstall. +lib. +disk. +fido + + + +archinstall_lib_command->archinstall_lib_disk_fido + + + + + + +archinstall_lib_disk_utils + +archinstall. +lib. +disk. +utils + + + +archinstall_lib_command->archinstall_lib_disk_utils + + + + + + + +archinstall_lib_hardware + +archinstall. +lib. +hardware + + + +archinstall_lib_command->archinstall_lib_hardware + + + + + + +archinstall_lib_command->archinstall_lib_installer + + + + + +archinstall_lib_locale_utils + +archinstall. +lib. +locale. +utils + + + +archinstall_lib_command->archinstall_lib_locale_utils + + + + + + +archinstall_lib_luks + +archinstall. +lib. +luks + + + +archinstall_lib_command->archinstall_lib_luks + + + + + +archinstall_lib_network_wifi_handler + +archinstall. +lib. +network. +wifi_handler + + + +archinstall_lib_command->archinstall_lib_network_wifi_handler + + + + + + +archinstall_lib_configuration->archinstall_lib_global_menu + + + + + +archinstall_lib_configuration->archinstall_scripts_guided + + + + + + +archinstall_lib_configuration->archinstall_scripts_minimal + + + + +archinstall_lib_configuration->archinstall_scripts_only_hd + + + + + +archinstall_lib_crypt + +archinstall. +lib. +crypt + + + +archinstall_lib_crypt->archinstall_lib_args + + + + + + +archinstall_lib_crypt->archinstall_lib_configuration + + + + + +archinstall_lib_models_users + +archinstall. +lib. +models. +users + + + +archinstall_lib_crypt->archinstall_lib_models_users + + + + + +archinstall_lib_disk + +archinstall. +lib. +disk + + + +archinstall_lib_disk->archinstall + + + + + + +archinstall_lib_disk->archinstall_lib_authentication_authentication_menu + + + + + +archinstall_lib_disk->archinstall_lib_global_menu + + + + + + +archinstall_lib_disk->archinstall_lib_installer + + + + + +archinstall_lib_disk->archinstall_lib_interactions_disk_conf + + + + + + + +archinstall_lib_disk->archinstall_lib_luks + + + + + +archinstall_lib_models_device + +archinstall. +lib. +models. +device + + + +archinstall_lib_disk->archinstall_lib_models_device + + + + + +archinstall_lib_disk->archinstall_scripts_guided + + + + + + +archinstall_lib_disk->archinstall_scripts_minimal + + + + + +archinstall_lib_disk->archinstall_scripts_only_hd + + + + +archinstall_lib_disk_filesystem + +archinstall. +lib. +disk. +filesystem + + + +archinstall_lib_disk_device_handler->archinstall_lib_disk_filesystem + + + + + + +archinstall_lib_disk_device_handler->archinstall_lib_installer + + + + + +archinstall_lib_disk_device_handler->archinstall_lib_interactions_disk_conf + + + + + + +archinstall_lib_disk_device_handler->archinstall_lib_models_device + + + + + + +archinstall_lib_disk_disk_menu + +archinstall. +lib. +disk. +disk_menu + + + +archinstall_lib_disk_disk_menu->archinstall_lib_global_menu + + + + +archinstall_lib_disk_disk_menu->archinstall_scripts_minimal + + + + +archinstall_lib_disk_encryption_menu + +archinstall. +lib. +disk. +encryption_menu + + + +archinstall_lib_disk_encryption_menu->archinstall_lib_disk_disk_menu + + + + + +archinstall_lib_disk_fido->archinstall_lib_authentication_authentication_menu + + + + + +archinstall_lib_disk_fido->archinstall_lib_disk_encryption_menu + + + + + +archinstall_lib_disk_fido->archinstall_lib_installer + + + + + + +archinstall_lib_disk_filesystem->archinstall_scripts_guided + + + + + + +archinstall_lib_disk_filesystem->archinstall_scripts_minimal + + + + + + + +archinstall_lib_disk_filesystem->archinstall_scripts_only_hd + + + + + +archinstall_lib_disk_partitioning_menu + +archinstall. +lib. +disk. +partitioning_menu + + + +archinstall_lib_disk_partitioning_menu->archinstall_lib_interactions_disk_conf + + + + + + +archinstall_lib_disk_subvolume_menu + +archinstall. +lib. +disk. +subvolume_menu + + + +archinstall_lib_disk_subvolume_menu->archinstall_lib_disk_partitioning_menu + + + + + +archinstall_lib_disk_utils->archinstall + + + + +archinstall_lib_disk_utils->archinstall_lib_disk_device_handler + + + + + +archinstall_lib_disk_utils->archinstall_lib_installer + + + + + + + +archinstall_lib_disk_utils->archinstall_lib_luks + + + + + + +archinstall_lib_disk_utils->archinstall_scripts_guided + + + + + + +archinstall_lib_disk_utils->archinstall_scripts_only_hd + + + + + + +archinstall_lib_exceptions + +archinstall. +lib. +exceptions + + + +archinstall_lib_exceptions->archinstall_lib_boot + + + + + + +archinstall_lib_exceptions->archinstall_lib_command + + + + + +archinstall_lib_exceptions->archinstall_lib_disk_device_handler + + + + + +archinstall_lib_exceptions->archinstall_lib_disk_fido + + + + + +archinstall_lib_exceptions->archinstall_lib_disk_utils + + + + +archinstall_lib_general + +archinstall. +lib. +general + + + +archinstall_lib_exceptions->archinstall_lib_general + + + + + +archinstall_lib_exceptions->archinstall_lib_hardware + + + + + + + +archinstall_lib_exceptions->archinstall_lib_installer + + + + + + + +archinstall_lib_exceptions->archinstall_lib_locale_utils + + + + + +archinstall_lib_exceptions->archinstall_lib_luks + + + + +archinstall_lib_exceptions->archinstall_lib_network_wifi_handler + + + + + +archinstall_lib_networking + +archinstall. +lib. +networking + + + +archinstall_lib_exceptions->archinstall_lib_networking + + + + + + +archinstall_lib_packages_packages + +archinstall. +lib. +packages. +packages + + + +archinstall_lib_exceptions->archinstall_lib_packages_packages + + + + + +archinstall_lib_pacman + +archinstall. +lib. +pacman + + + +archinstall_lib_exceptions->archinstall_lib_pacman + + + + + + +archinstall_lib_general->archinstall + + + + + +archinstall_lib_general->archinstall_lib_boot + + + + + + +archinstall_lib_general->archinstall_lib_command + + + + + +archinstall_lib_general->archinstall_lib_configuration + + + + + +archinstall_lib_general->archinstall_lib_disk_fido + + + + + + +archinstall_lib_general->archinstall_lib_locale_utils + + + + + +archinstall_lib_general->archinstall_lib_luks + + + + + +archinstall_lib_general->archinstall_lib_pacman + + + + + + +archinstall_lib_global_menu->archinstall_scripts_guided + + + + +archinstall_lib_global_menu->archinstall_scripts_only_hd + + + + + +archinstall_lib_hardware->archinstall + + + + + +archinstall_lib_hardware->archinstall_lib_applications_application_menu + + + + + +archinstall_lib_hardware->archinstall_lib_bootloader_bootloader_menu + + + + + +archinstall_lib_hardware->archinstall_lib_global_menu + + + + + +archinstall_lib_hardware->archinstall_lib_installer + + + + + + +archinstall_lib_interactions_system_conf + +archinstall. +lib. +interactions. +system_conf + + + +archinstall_lib_hardware->archinstall_lib_interactions_system_conf + + + + + +archinstall_lib_hardware->archinstall_lib_models_bootloader + + + + + + +archinstall_lib_hardware->archinstall_lib_models_device + + + + + +archinstall_lib_hardware->archinstall_lib_models_profile + + + + + +archinstall_lib_hardware->archinstall_lib_profile_profile_menu + + + + + +archinstall_lib_hardware->archinstall_lib_profile_profiles_handler + + + + + +archinstall_lib_installer->archinstall_default_profiles_desktop + + + + + +archinstall_lib_installer->archinstall_default_profiles_desktops_awesome + + + + + +archinstall_lib_installer->archinstall_default_profiles_profile + + + + + +archinstall_lib_installer->archinstall_default_profiles_server + + + + + +archinstall_lib_installer->archinstall_default_profiles_servers_docker + + + + + +archinstall_lib_installer->archinstall_default_profiles_servers_mariadb + + + + + +archinstall_lib_installer->archinstall_default_profiles_servers_postgresql + + + + + +archinstall_lib_installer->archinstall_lib_applications_application_handler + + + + + +archinstall_lib_installer->archinstall_lib_authentication_authentication_handler + + + + + + +archinstall_lib_installer->archinstall_lib_boot + + + + + + +archinstall_lib_models_network + +archinstall. +lib. +models. +network + + + +archinstall_lib_installer->archinstall_lib_models_network + + + + + + +archinstall_lib_installer->archinstall_lib_profile_profiles_handler + + + + + + +archinstall_lib_installer->archinstall_scripts_guided + + + + +archinstall_lib_installer->archinstall_scripts_minimal + + + + +archinstall_lib_installer->archinstall_scripts_only_hd + + + + + +archinstall_lib_interactions + +archinstall. +lib. +interactions + + + +archinstall_lib_interactions->archinstall_lib_authentication_authentication_menu + + + + + + +archinstall_lib_interactions->archinstall_lib_disk_disk_menu + + + + + +archinstall_lib_interactions->archinstall_lib_disk_filesystem + + + + + +archinstall_lib_interactions->archinstall_lib_disk_partitioning_menu + + + + + + +archinstall_lib_interactions->archinstall_lib_global_menu + + + + + +archinstall_lib_interactions->archinstall_lib_profile_profile_menu + + + + +archinstall_lib_interactions->archinstall_scripts_guided + + + + + +archinstall_lib_interactions_disk_conf->archinstall_lib_disk_disk_menu + + + + +archinstall_lib_interactions_disk_conf->archinstall_lib_interactions + + + + + +archinstall_lib_interactions_general_conf + +archinstall. +lib. +interactions. +general_conf + + + +archinstall_lib_interactions_general_conf->archinstall_lib_disk_filesystem + + + + + +archinstall_lib_interactions_general_conf->archinstall_lib_global_menu + + + + + + + +archinstall_lib_interactions_general_conf->archinstall_lib_interactions + + + + + +archinstall_lib_interactions_general_conf->archinstall_scripts_guided + + + + + + + +archinstall_lib_interactions_manage_users_conf + +archinstall. +lib. +interactions. +manage_users_conf + + + +archinstall_lib_interactions_manage_users_conf->archinstall_lib_authentication_authentication_menu + + + + + +archinstall_lib_interactions_manage_users_conf->archinstall_lib_interactions + + + + + +archinstall_lib_interactions_network_menu + +archinstall. +lib. +interactions. +network_menu + + + +archinstall_lib_interactions_network_menu->archinstall_lib_global_menu + + + + + +archinstall_lib_interactions_network_menu->archinstall_lib_interactions + + + + + +archinstall_lib_interactions_system_conf->archinstall_lib_global_menu + + + + +archinstall_lib_interactions_system_conf->archinstall_lib_interactions + + + + + +archinstall_lib_interactions_system_conf->archinstall_lib_profile_profile_menu + + + + + + +archinstall_lib_locale + +archinstall. +lib. +locale + + + +archinstall_lib_locale->archinstall_lib_global_menu + + + + + +archinstall_lib_locale->archinstall_lib_installer + + + + + + +archinstall_lib_locale->archinstall_lib_interactions_general_conf + + + + + +archinstall_lib_models_locale + +archinstall. +lib. +models. +locale + + + +archinstall_lib_locale->archinstall_lib_models_locale + + + + + +archinstall_lib_locale_locale_menu + +archinstall. +lib. +locale. +locale_menu + + + +archinstall_lib_locale_locale_menu->archinstall_lib_global_menu + + + + + +archinstall_lib_locale_locale_menu->archinstall_lib_interactions_general_conf + + + + + +archinstall_lib_locale_utils->archinstall_lib_installer + + + + + +archinstall_lib_locale_utils->archinstall_lib_interactions_general_conf + + + + +archinstall_lib_locale_utils->archinstall_lib_locale + + + + + +archinstall_lib_locale_utils->archinstall_lib_locale_locale_menu + + + + + +archinstall_lib_locale_utils->archinstall_lib_models_locale + + + + + +archinstall_lib_luks->archinstall_lib_disk_device_handler + + + + + +archinstall_lib_luks->archinstall_lib_disk_filesystem + + + + + +archinstall_lib_luks->archinstall_lib_installer + + + + + +archinstall_lib_menu + +archinstall. +lib. +menu + + + +archinstall_lib_menu->archinstall_default_profiles_desktop + + + + + + +archinstall_lib_menu->archinstall_default_profiles_desktops_hyprland + + + + + +archinstall_lib_menu->archinstall_default_profiles_desktops_labwc + + + + + +archinstall_lib_menu->archinstall_default_profiles_desktops_niri + + + + + +archinstall_lib_menu->archinstall_default_profiles_desktops_sway + + + + + +archinstall_lib_menu->archinstall_default_profiles_server + + + + + + +archinstall_lib_menu->archinstall_lib_applications_application_menu + + + + + +archinstall_lib_menu->archinstall_lib_authentication_authentication_menu + + + + + +archinstall_lib_menu->archinstall_lib_bootloader_bootloader_menu + + + + + +archinstall_lib_menu->archinstall_lib_configuration + + + + + +archinstall_lib_menu->archinstall_lib_disk_disk_menu + + + + +archinstall_lib_menu->archinstall_lib_disk_encryption_menu + + + + +archinstall_lib_menu->archinstall_lib_disk_partitioning_menu + + + + +archinstall_lib_menu->archinstall_lib_disk_subvolume_menu + + + + + + + +archinstall_lib_menu->archinstall_lib_global_menu + + + + + + +archinstall_lib_menu->archinstall_lib_interactions_disk_conf + + + + + +archinstall_lib_menu->archinstall_lib_interactions_general_conf + + + + + + + +archinstall_lib_menu->archinstall_lib_interactions_manage_users_conf + + + + + +archinstall_lib_menu->archinstall_lib_interactions_network_menu + + + + + + +archinstall_lib_menu->archinstall_lib_interactions_system_conf + + + + + + +archinstall_lib_menu->archinstall_lib_locale_locale_menu + + + + + +archinstall_lib_menu->archinstall_lib_mirrors + + + + + +archinstall_lib_menu->archinstall_lib_profile_profile_menu + + + + + + + + +archinstall_lib_utils_util + +archinstall. +lib. +utils. +util + + + +archinstall_lib_menu->archinstall_lib_utils_util + + + + + + +archinstall_lib_menu_abstract_menu + +archinstall. +lib. +menu. +abstract_menu + + + +archinstall_lib_menu_abstract_menu->archinstall_lib_applications_application_menu + + + + + + +archinstall_lib_menu_abstract_menu->archinstall_lib_authentication_authentication_menu + + + + + + +archinstall_lib_menu_abstract_menu->archinstall_lib_bootloader_bootloader_menu + + + + +archinstall_lib_menu_abstract_menu->archinstall_lib_disk_disk_menu + + + + +archinstall_lib_menu_abstract_menu->archinstall_lib_disk_encryption_menu + + + + +archinstall_lib_menu_abstract_menu->archinstall_lib_global_menu + + + + +archinstall_lib_menu_abstract_menu->archinstall_lib_locale_locale_menu + + + + +archinstall_lib_menu_abstract_menu->archinstall_lib_menu + + + + + +archinstall_lib_menu_abstract_menu->archinstall_lib_mirrors + + + + + +archinstall_lib_menu_abstract_menu->archinstall_lib_profile_profile_menu + + + + + +archinstall_lib_menu_helpers + +archinstall. +lib. +menu. +helpers + + + +archinstall_lib_menu_helpers->archinstall_default_profiles_desktop + + + + + + +archinstall_lib_menu_helpers->archinstall_default_profiles_desktops_hyprland + + + + + +archinstall_lib_menu_helpers->archinstall_default_profiles_desktops_labwc + + + + + +archinstall_lib_menu_helpers->archinstall_default_profiles_desktops_niri + + + + + +archinstall_lib_menu_helpers->archinstall_default_profiles_desktops_sway + + + + + +archinstall_lib_menu_helpers->archinstall_default_profiles_server + + + + + +archinstall_lib_menu_helpers->archinstall_lib_applications_application_menu + + + + +archinstall_lib_menu_helpers->archinstall_lib_authentication_authentication_menu + + + + +archinstall_lib_menu_helpers->archinstall_lib_bootloader_bootloader_menu + + + + + + + +archinstall_lib_menu_helpers->archinstall_lib_configuration + + + + +archinstall_lib_menu_helpers->archinstall_lib_disk_disk_menu + + + + +archinstall_lib_menu_helpers->archinstall_lib_disk_encryption_menu + + + + +archinstall_lib_menu_helpers->archinstall_lib_disk_partitioning_menu + + + + + +archinstall_lib_menu_helpers->archinstall_lib_disk_subvolume_menu + + + + +archinstall_lib_menu_helpers->archinstall_lib_interactions_disk_conf + + + + + + +archinstall_lib_menu_helpers->archinstall_lib_interactions_general_conf + + + + + +archinstall_lib_menu_helpers->archinstall_lib_interactions_manage_users_conf + + + + + +archinstall_lib_menu_helpers->archinstall_lib_interactions_network_menu + + + + +archinstall_lib_menu_helpers->archinstall_lib_interactions_system_conf + + + + + + + +archinstall_lib_menu_helpers->archinstall_lib_locale_locale_menu + + + + +archinstall_lib_menu_helpers->archinstall_lib_menu_abstract_menu + + + + + +archinstall_lib_menu_list_manager + +archinstall. +lib. +menu. +list_manager + + + +archinstall_lib_menu_helpers->archinstall_lib_menu_list_manager + + + + + +archinstall_lib_menu_helpers->archinstall_lib_mirrors + + + + + +archinstall_lib_menu_helpers->archinstall_lib_profile_profile_menu + + + + + + + +archinstall_lib_menu_helpers->archinstall_lib_utils_util + + + + + + + +archinstall_lib_menu_list_manager->archinstall_lib_disk_partitioning_menu + + + + + +archinstall_lib_menu_list_manager->archinstall_lib_disk_subvolume_menu + + + + + + +archinstall_lib_menu_list_manager->archinstall_lib_interactions_manage_users_conf + + + + + +archinstall_lib_menu_list_manager->archinstall_lib_interactions_network_menu + + + + + +archinstall_lib_menu_list_manager->archinstall_lib_menu + + + + + +archinstall_lib_menu_list_manager->archinstall_lib_mirrors + + + + + +archinstall_lib_menu_menu_helper + +archinstall. +lib. +menu. +menu_helper + + + +archinstall_lib_menu_menu_helper->archinstall_lib_disk_encryption_menu + + + + +archinstall_lib_menu_menu_helper->archinstall_lib_menu_list_manager + + + + + +archinstall_lib_mirrors->archinstall_lib_global_menu + + + + + +archinstall_lib_mirrors->archinstall_lib_models_mirrors + + + + + + +archinstall_lib_models + +archinstall. +lib. +models + + + +archinstall_lib_models->archinstall_lib_applications_application_handler + + + + + + +archinstall_lib_models->archinstall_lib_applications_application_menu + + + + +archinstall_lib_models->archinstall_lib_args + + + + + +archinstall_lib_models->archinstall_lib_authentication_authentication_handler + + + + + +archinstall_lib_models->archinstall_lib_authentication_authentication_menu + + + + + + +archinstall_lib_models->archinstall_lib_bootloader_bootloader_menu + + + + + +archinstall_lib_models->archinstall_lib_disk_device_handler + + + + + + +archinstall_lib_models->archinstall_lib_disk_disk_menu + + + + + +archinstall_lib_models->archinstall_lib_disk_encryption_menu + + + + + +archinstall_lib_models->archinstall_lib_disk_fido + + + + + + + +archinstall_lib_models->archinstall_lib_disk_filesystem + + + + + + +archinstall_lib_models->archinstall_lib_disk_partitioning_menu + + + + +archinstall_lib_models->archinstall_lib_disk_subvolume_menu + + + + + +archinstall_lib_models->archinstall_lib_disk_utils + + + + + +archinstall_lib_models->archinstall_lib_global_menu + + + + + + +archinstall_lib_models->archinstall_lib_installer + + + + + +archinstall_lib_models->archinstall_lib_interactions_disk_conf + + + + + +archinstall_lib_models->archinstall_lib_interactions_general_conf + + + + + + +archinstall_lib_models->archinstall_lib_interactions_manage_users_conf + + + + + + +archinstall_lib_models->archinstall_lib_interactions_network_menu + + + + +archinstall_lib_models->archinstall_lib_interactions_system_conf + + + + + +archinstall_lib_models->archinstall_lib_locale_locale_menu + + + + + +archinstall_lib_models->archinstall_lib_luks + + + + +archinstall_lib_models->archinstall_lib_mirrors + + + + + +archinstall_lib_models->archinstall_lib_network_wifi_handler + + + + + + +archinstall_lib_network_wpa_supplicant + +archinstall. +lib. +network. +wpa_supplicant + + + +archinstall_lib_models->archinstall_lib_network_wpa_supplicant + + + + + +archinstall_lib_models->archinstall_lib_packages_packages + + + + + + + +archinstall_lib_pacman_config + +archinstall. +lib. +pacman. +config + + + +archinstall_lib_models->archinstall_lib_pacman_config + + + + + +archinstall_lib_models->archinstall_lib_profile_profile_menu + + + + + +archinstall_lib_models->archinstall_lib_profile_profiles_handler + + + + + +archinstall_lib_models->archinstall_lib_utils_util + + + + + +archinstall_lib_models->archinstall_scripts_guided + + + + + + +archinstall_lib_models->archinstall_scripts_minimal + + + + + + + +archinstall_lib_models_application + +archinstall. +lib. +models. +application + + + +archinstall_lib_models_application->archinstall_lib_applications_application_handler + + + + + +archinstall_lib_models_application->archinstall_lib_applications_application_menu + + + + + +archinstall_lib_models_application->archinstall_lib_args + + + + + + +archinstall_lib_models_application->archinstall_lib_global_menu + + + + + +archinstall_lib_models_application->archinstall_lib_installer + + + + + + + +archinstall_lib_models_application->archinstall_lib_interactions_system_conf + + + + + + +archinstall_lib_models_application->archinstall_lib_models + + + + + +archinstall_lib_models_authentication + +archinstall. +lib. +models. +authentication + + + +archinstall_lib_models_authentication->archinstall_lib_args + + + + + +archinstall_lib_models_authentication->archinstall_lib_authentication_authentication_handler + + + + + + +archinstall_lib_models_authentication->archinstall_lib_authentication_authentication_menu + + + + + +archinstall_lib_models_authentication->archinstall_lib_global_menu + + + + + +archinstall_lib_models_bootloader->archinstall_lib_bootloader_bootloader_menu + + + + + +archinstall_lib_models_bootloader->archinstall_lib_global_menu + + + + +archinstall_lib_models_bootloader->archinstall_lib_installer + + + + + +archinstall_lib_models_bootloader->archinstall_lib_models + + + + + + +archinstall_lib_models_device->archinstall_lib_args + + + + + + +archinstall_lib_models_device->archinstall_lib_disk_disk_menu + + + + + + +archinstall_lib_models_device->archinstall_lib_disk_encryption_menu + + + + + +archinstall_lib_models_device->archinstall_lib_disk_fido + + + + + +archinstall_lib_models_device->archinstall_lib_disk_filesystem + + + + +archinstall_lib_models_device->archinstall_lib_disk_partitioning_menu + + + + + +archinstall_lib_models_device->archinstall_lib_disk_subvolume_menu + + + + + +archinstall_lib_models_device->archinstall_lib_disk_utils + + + + + +archinstall_lib_models_device->archinstall_lib_global_menu + + + + +archinstall_lib_models_device->archinstall_lib_installer + + + + + +archinstall_lib_models_device->archinstall_lib_interactions_disk_conf + + + + + +archinstall_lib_models_device->archinstall_lib_luks + + + + + +archinstall_lib_models_device->archinstall_lib_models + + + + +archinstall_lib_models_device->archinstall_scripts_guided + + + + + + +archinstall_lib_models_locale->archinstall_lib_args + + + + + +archinstall_lib_models_locale->archinstall_lib_global_menu + + + + + +archinstall_lib_models_locale->archinstall_lib_installer + + + + + +archinstall_lib_models_locale->archinstall_lib_locale_locale_menu + + + + + +archinstall_lib_models_locale->archinstall_lib_models + + + + + + +archinstall_lib_models_mirrors->archinstall_lib_global_menu + + + + + +archinstall_lib_models_mirrors->archinstall_lib_installer + + + + +archinstall_lib_models_mirrors->archinstall_lib_models + + + + + + +archinstall_lib_models_network->archinstall_lib_args + + + + + + +archinstall_lib_models_network->archinstall_lib_global_menu + + + + +archinstall_lib_models_network->archinstall_lib_interactions_network_menu + + + + + + +archinstall_lib_models_network->archinstall_lib_models + + + + + +archinstall_lib_models_network->archinstall_lib_network_wifi_handler + + + + + + +archinstall_lib_models_network->archinstall_lib_network_wpa_supplicant + + + + + +archinstall_lib_models_packages + +archinstall. +lib. +models. +packages + + + +archinstall_lib_models_packages->archinstall_lib_args + + + + + +archinstall_lib_models_packages->archinstall_lib_global_menu + + + + + +archinstall_lib_models_packages->archinstall_lib_installer + + + + + +archinstall_lib_models_packages->archinstall_lib_interactions_general_conf + + + + + + + +archinstall_lib_models_packages->archinstall_lib_mirrors + + + + + +archinstall_lib_models_packages->archinstall_lib_models + + + + +archinstall_lib_models_packages->archinstall_lib_models_mirrors + + + + +archinstall_lib_models_packages->archinstall_lib_packages_packages + + + + + +archinstall_lib_models_packages->archinstall_lib_pacman_config + + + + + +archinstall_lib_models_profile->archinstall_lib_args + + + + + +archinstall_lib_models_profile->archinstall_lib_global_menu + + + + +archinstall_lib_models_profile->archinstall_lib_models + + + + + +archinstall_lib_models_profile->archinstall_lib_models_network + + + + + +archinstall_lib_models_profile->archinstall_lib_profile_profile_menu + + + + +archinstall_lib_models_profile->archinstall_lib_profile_profiles_handler + + + + + + +archinstall_lib_models_profile->archinstall_scripts_minimal + + + + +archinstall_lib_models_users->archinstall_lib_applications_application_handler + + + + +archinstall_lib_models_users->archinstall_lib_args + + + + + +archinstall_lib_models_users->archinstall_lib_authentication_authentication_handler + + + + + +archinstall_lib_models_users->archinstall_lib_authentication_authentication_menu + + + + +archinstall_lib_models_users->archinstall_lib_disk_device_handler + + + + + +archinstall_lib_models_users->archinstall_lib_disk_encryption_menu + + + + + + + +archinstall_lib_models_users->archinstall_lib_disk_fido + + + + + +archinstall_lib_models_users->archinstall_lib_installer + + + + + +archinstall_lib_models_users->archinstall_lib_interactions_manage_users_conf + + + + + +archinstall_lib_models_users->archinstall_lib_luks + + + + + + +archinstall_lib_models_users->archinstall_lib_models + + + + + + + +archinstall_lib_models_users->archinstall_lib_models_authentication + + + + + +archinstall_lib_models_users->archinstall_lib_models_device + + + + + +archinstall_lib_models_users->archinstall_lib_utils_util + + + + + +archinstall_lib_models_users->archinstall_scripts_guided + + + + + + + +archinstall_lib_models_users->archinstall_scripts_minimal + + + + + + + + +archinstall_lib_network + +archinstall. +lib. +network + + + +archinstall_lib_network->archinstall + + + + +archinstall_lib_network_wifi_handler->archinstall + + + + + + +archinstall_lib_network_wpa_supplicant->archinstall_lib_network_wifi_handler + + + + + +archinstall_lib_networking->archinstall + + + + +archinstall_lib_networking->archinstall_lib_hardware + + + + + +archinstall_lib_networking->archinstall_lib_interactions_network_menu + + + + + +archinstall_lib_networking->archinstall_lib_mirrors + + + + + +archinstall_lib_networking->archinstall_lib_models_mirrors + + + + + + + +archinstall_lib_networking->archinstall_lib_profile_profiles_handler + + + + + +archinstall_lib_output + +archinstall. +lib. +output + + + +archinstall_lib_output->archinstall + + + + + + +archinstall_lib_output->archinstall_default_profiles_desktop + + + + + +archinstall_lib_output->archinstall_default_profiles_server + + + + + + + +archinstall_lib_output->archinstall_lib_args + + + + +archinstall_lib_output->archinstall_lib_authentication_authentication_handler + + + + + +archinstall_lib_output->archinstall_lib_authentication_authentication_menu + + + + + +archinstall_lib_output->archinstall_lib_boot + + + + +archinstall_lib_output->archinstall_lib_command + + + + + +archinstall_lib_output->archinstall_lib_configuration + + + + + + +archinstall_lib_output->archinstall_lib_crypt + + + + + +archinstall_lib_output->archinstall_lib_disk_device_handler + + + + + +archinstall_lib_output->archinstall_lib_disk_disk_menu + + + + + + + +archinstall_lib_output->archinstall_lib_disk_encryption_menu + + + + + +archinstall_lib_output->archinstall_lib_disk_fido + + + + + +archinstall_lib_output->archinstall_lib_disk_filesystem + + + + + +archinstall_lib_output->archinstall_lib_disk_partitioning_menu + + + + + +archinstall_lib_output->archinstall_lib_disk_utils + + + + + + +archinstall_lib_output->archinstall_lib_global_menu + + + + + +archinstall_lib_output->archinstall_lib_hardware + + + + + +archinstall_lib_output->archinstall_lib_installer + + + + +archinstall_lib_output->archinstall_lib_interactions_disk_conf + + + + + +archinstall_lib_output->archinstall_lib_interactions_general_conf + + + + + +archinstall_lib_output->archinstall_lib_locale_utils + + + + + +archinstall_lib_output->archinstall_lib_luks + + + + + +archinstall_lib_output->archinstall_lib_menu_abstract_menu + + + + + + +archinstall_lib_output->archinstall_lib_menu_menu_helper + + + + + + +archinstall_lib_output->archinstall_lib_mirrors + + + + + + +archinstall_lib_output->archinstall_lib_models_bootloader + + + + + +archinstall_lib_output->archinstall_lib_models_device + + + + + +archinstall_lib_output->archinstall_lib_models_mirrors + + + + + + + +archinstall_lib_output->archinstall_lib_models_network + + + + + + +archinstall_lib_output->archinstall_lib_network_wifi_handler + + + + + + +archinstall_lib_output->archinstall_lib_network_wpa_supplicant + + + + + +archinstall_lib_output->archinstall_lib_networking + + + + + +archinstall_lib_output->archinstall_lib_packages_packages + + + + + +archinstall_lib_output->archinstall_lib_pacman + + + + + +archinstall_lib_output->archinstall_lib_plugins + + + + + + +archinstall_lib_output->archinstall_lib_profile_profiles_handler + + + + + +archinstall_lib_output->archinstall_lib_utils_util + + + + + +archinstall_lib_output->archinstall_scripts_guided + + + + + +archinstall_lib_output->archinstall_scripts_minimal + + + + + + +archinstall_lib_output->archinstall_tui_ui_components + + + + +archinstall_lib_packages + +archinstall. +lib. +packages + + + +archinstall_lib_packages->archinstall + + + + + + +archinstall_lib_packages->archinstall_lib_global_menu + + + + + +archinstall_lib_packages->archinstall_lib_installer + + + + + + +archinstall_lib_packages->archinstall_lib_interactions_general_conf + + + + + +archinstall_lib_packages->archinstall_scripts_guided + + + + +archinstall_lib_packages_packages->archinstall + + + + + +archinstall_lib_packages_packages->archinstall_lib_interactions_general_conf + + + + + +archinstall_lib_packages_packages->archinstall_lib_packages + + + + + +archinstall_lib_packages_packages->archinstall_scripts_guided + + + + + +archinstall_lib_pacman->archinstall + + + + +archinstall_lib_pacman->archinstall_lib_global_menu + + + + + +archinstall_lib_pacman->archinstall_lib_installer + + + + + +archinstall_lib_pacman->archinstall_lib_networking + + + + + +archinstall_lib_pacman->archinstall_lib_packages_packages + + + + +archinstall_lib_pacman_config->archinstall_lib_global_menu + + + + + +archinstall_lib_pacman_config->archinstall_lib_installer + + + + + +archinstall_lib_pacman_config->archinstall_lib_pacman + + + + + +archinstall_lib_plugins->archinstall + + + + + + +archinstall_lib_plugins->archinstall_lib_installer + + + + + +archinstall_lib_plugins->archinstall_lib_pacman + + + + + + + +archinstall_lib_profile + +archinstall. +lib. +profile + + + +archinstall_lib_profile->archinstall_default_profiles_desktop + + + + + + +archinstall_lib_profile->archinstall_default_profiles_server + + + + +archinstall_lib_profile->archinstall_lib_global_menu + + + + + + + +archinstall_lib_profile->archinstall_lib_models_profile + + + + + + +archinstall_lib_profile->archinstall_scripts_guided + + + + +archinstall_lib_profile->archinstall_scripts_minimal + + + + + + +archinstall_lib_profile_profile_menu->archinstall_lib_global_menu + + + + + +archinstall_lib_profile_profiles_handler->archinstall_default_profiles_desktop + + + + + +archinstall_lib_profile_profiles_handler->archinstall_default_profiles_server + + + + + +archinstall_lib_profile_profiles_handler->archinstall_lib_profile_profile_menu + + + + + +archinstall_lib_profile_profiles_handler->archinstall_scripts_guided + + + + + + +archinstall_lib_profile_profiles_handler->archinstall_scripts_minimal + + + + +archinstall_lib_translationhandler + +archinstall. +lib. +translationhandler + + + +archinstall_lib_translationhandler->archinstall + + + + +archinstall_lib_translationhandler->archinstall_default_profiles_desktops_hyprland + + + + + +archinstall_lib_translationhandler->archinstall_default_profiles_desktops_labwc + + + + + + + +archinstall_lib_translationhandler->archinstall_default_profiles_desktops_niri + + + + + + +archinstall_lib_translationhandler->archinstall_default_profiles_desktops_sway + + + + + +archinstall_lib_translationhandler->archinstall_default_profiles_profile + + + + + +archinstall_lib_translationhandler->archinstall_default_profiles_xorg + + + + + + +archinstall_lib_translationhandler->archinstall_lib_applications_application_menu + + + + + + +archinstall_lib_translationhandler->archinstall_lib_args + + + + + +archinstall_lib_translationhandler->archinstall_lib_authentication_authentication_handler + + + + + +archinstall_lib_translationhandler->archinstall_lib_authentication_authentication_menu + + + + + + +archinstall_lib_translationhandler->archinstall_lib_bootloader_bootloader_menu + + + + + + + +archinstall_lib_translationhandler->archinstall_lib_configuration + + + + + +archinstall_lib_translationhandler->archinstall_lib_disk_disk_menu + + + + + +archinstall_lib_translationhandler->archinstall_lib_disk_encryption_menu + + + + + +archinstall_lib_translationhandler->archinstall_lib_disk_filesystem + + + + + +archinstall_lib_translationhandler->archinstall_lib_disk_partitioning_menu + + + + + +archinstall_lib_translationhandler->archinstall_lib_disk_subvolume_menu + + + + + +archinstall_lib_translationhandler->archinstall_lib_global_menu + + + + + + +archinstall_lib_translationhandler->archinstall_lib_hardware + + + + + + +archinstall_lib_translationhandler->archinstall_lib_installer + + + + +archinstall_lib_translationhandler->archinstall_lib_interactions_disk_conf + + + + + + + +archinstall_lib_translationhandler->archinstall_lib_interactions_general_conf + + + + + + +archinstall_lib_translationhandler->archinstall_lib_interactions_manage_users_conf + + + + + +archinstall_lib_translationhandler->archinstall_lib_interactions_network_menu + + + + + +archinstall_lib_translationhandler->archinstall_lib_interactions_system_conf + + + + + + +archinstall_lib_translationhandler->archinstall_lib_locale_locale_menu + + + + + + +archinstall_lib_translationhandler->archinstall_lib_menu_abstract_menu + + + + +archinstall_lib_translationhandler->archinstall_lib_menu_helpers + + + + + + +archinstall_lib_translationhandler->archinstall_lib_menu_list_manager + + + + + +archinstall_lib_translationhandler->archinstall_lib_mirrors + + + + + + +archinstall_lib_translationhandler->archinstall_lib_models_authentication + + + + + + +archinstall_lib_translationhandler->archinstall_lib_models_bootloader + + + + + +archinstall_lib_translationhandler->archinstall_lib_models_device + + + + + +archinstall_lib_translationhandler->archinstall_lib_models_locale + + + + + +archinstall_lib_translationhandler->archinstall_lib_models_network + + + + + + +archinstall_lib_translationhandler->archinstall_lib_models_packages + + + + + + +archinstall_lib_translationhandler->archinstall_lib_models_users + + + + + +archinstall_lib_translationhandler->archinstall_lib_network_wifi_handler + + + + +archinstall_lib_translationhandler->archinstall_lib_pacman + + + + +archinstall_lib_translationhandler->archinstall_lib_profile_profile_menu + + + + + +archinstall_lib_translationhandler->archinstall_lib_profile_profiles_handler + + + + + + +archinstall_lib_translationhandler->archinstall_lib_utils_util + + + + +archinstall_lib_translationhandler->archinstall_scripts_guided + + + + + + + + + +archinstall_lib_translationhandler->archinstall_tui_curses_menu + + + + + + +archinstall_lib_translationhandler->archinstall_tui_help + + + + + +archinstall_lib_translationhandler->archinstall_tui_menu_item + + + + + +archinstall_lib_translationhandler->archinstall_tui_ui_components + + + + + + + +archinstall_lib_translationhandler->archinstall_tui_ui_menu_item + + + + + + + + +archinstall_lib_utils + +archinstall. +lib. +utils + + + +archinstall_lib_utils->archinstall_lib_args + + + + + +archinstall_lib_utils->archinstall_lib_authentication_authentication_menu + + + + + +archinstall_lib_utils->archinstall_lib_configuration + + + + + +archinstall_lib_utils->archinstall_lib_disk_device_handler + + + + + +archinstall_lib_utils->archinstall_lib_disk_encryption_menu + + + + + +archinstall_lib_utils->archinstall_lib_disk_partitioning_menu + + + + + +archinstall_lib_utils->archinstall_lib_disk_subvolume_menu + + + + + + +archinstall_lib_utils->archinstall_lib_interactions_disk_conf + + + + + + + + + + +archinstall_lib_utils->archinstall_lib_interactions_manage_users_conf + + + + + +archinstall_lib_utils->archinstall_lib_output + + + + + +archinstall_lib_utils->archinstall_tui_menu_item + + + + + + +archinstall_lib_utils_unicode + +archinstall. +lib. +utils. +unicode + + + +archinstall_lib_utils_unicode->archinstall_lib_output + + + + + + +archinstall_lib_utils_unicode->archinstall_tui_menu_item + + + + +archinstall_lib_utils_util->archinstall_lib_args + + + + + +archinstall_lib_utils_util->archinstall_lib_authentication_authentication_menu + + + + + +archinstall_lib_utils_util->archinstall_lib_configuration + + + + + +archinstall_lib_utils_util->archinstall_lib_disk_device_handler + + + + + +archinstall_lib_utils_util->archinstall_lib_disk_encryption_menu + + + + +archinstall_lib_utils_util->archinstall_lib_disk_partitioning_menu + + + + + + +archinstall_lib_utils_util->archinstall_lib_disk_subvolume_menu + + + + + +archinstall_lib_utils_util->archinstall_lib_interactions_disk_conf + + + + + + +archinstall_lib_utils_util->archinstall_lib_interactions_manage_users_conf + + + + + +archinstall_tui + +archinstall. +tui + + + +archinstall_tui->archinstall_default_profiles_desktop + + + + + +archinstall_tui->archinstall_default_profiles_desktops_hyprland + + + + +archinstall_tui->archinstall_default_profiles_desktops_labwc + + + + + +archinstall_tui->archinstall_default_profiles_desktops_niri + + + + +archinstall_tui->archinstall_default_profiles_desktops_sway + + + + +archinstall_tui->archinstall_default_profiles_server + + + + + + +archinstall_tui->archinstall_lib_applications_application_menu + + + + + + +archinstall_tui->archinstall_lib_authentication_authentication_menu + + + + + +archinstall_tui->archinstall_lib_bootloader_bootloader_menu + + + + + + +archinstall_tui->archinstall_lib_configuration + + + + + + +archinstall_tui->archinstall_lib_disk_disk_menu + + + + +archinstall_tui->archinstall_lib_disk_encryption_menu + + + + + + + +archinstall_tui->archinstall_lib_disk_partitioning_menu + + + + + + + +archinstall_tui->archinstall_lib_disk_subvolume_menu + + + + + +archinstall_tui->archinstall_lib_global_menu + + + + +archinstall_tui->archinstall_lib_interactions_disk_conf + + + + +archinstall_tui->archinstall_lib_interactions_general_conf + + + + + +archinstall_tui->archinstall_lib_interactions_manage_users_conf + + + + + + +archinstall_tui->archinstall_lib_interactions_network_menu + + + + + + +archinstall_tui->archinstall_lib_interactions_system_conf + + + + + +archinstall_tui->archinstall_lib_locale_locale_menu + + + + + +archinstall_tui->archinstall_lib_menu_abstract_menu + + + + + + +archinstall_tui->archinstall_lib_menu_helpers + + + + + +archinstall_tui->archinstall_lib_menu_list_manager + + + + + +archinstall_tui->archinstall_lib_menu_menu_helper + + + + + + + +archinstall_tui->archinstall_lib_mirrors + + + + + +archinstall_tui->archinstall_lib_network_wifi_handler + + + + + +archinstall_tui->archinstall_lib_profile_profile_menu + + + + + +archinstall_tui->archinstall_lib_utils_util + + + + + + +archinstall_tui_help->archinstall_tui_curses_menu + + + + + +archinstall_tui_menu_item->archinstall_tui_curses_menu + + + + + +archinstall_tui_result + +archinstall. +tui. +result + + + +archinstall_tui_menu_item->archinstall_tui_result + + + + + +archinstall_tui_result->archinstall_tui_curses_menu + + + + + +archinstall_tui_types + +archinstall. +tui. +types + + + +archinstall_tui_types->archinstall_lib_menu_abstract_menu + + + + + + +archinstall_tui_types->archinstall_tui_curses_menu + + + + + +archinstall_tui_types->archinstall_tui_menu_item + + + + + +archinstall_tui_ui + +archinstall. +tui. +ui + + + +archinstall_tui_ui->archinstall_default_profiles_desktop + + + + + +archinstall_tui_ui->archinstall_default_profiles_desktops_hyprland + + + + + +archinstall_tui_ui->archinstall_default_profiles_desktops_labwc + + + + + +archinstall_tui_ui->archinstall_default_profiles_desktops_niri + + + + + +archinstall_tui_ui->archinstall_default_profiles_desktops_sway + + + + + +archinstall_tui_ui->archinstall_default_profiles_server + + + + + +archinstall_tui_ui->archinstall_lib_applications_application_menu + + + + + + +archinstall_tui_ui->archinstall_lib_authentication_authentication_menu + + + + + +archinstall_tui_ui->archinstall_lib_bootloader_bootloader_menu + + + + + +archinstall_tui_ui->archinstall_lib_configuration + + + + + + +archinstall_tui_ui->archinstall_lib_disk_disk_menu + + + + + +archinstall_tui_ui->archinstall_lib_disk_encryption_menu + + + + + + + +archinstall_tui_ui->archinstall_lib_disk_partitioning_menu + + + + + +archinstall_tui_ui->archinstall_lib_disk_subvolume_menu + + + + + +archinstall_tui_ui->archinstall_lib_global_menu + + + + + +archinstall_tui_ui->archinstall_lib_interactions_disk_conf + + + + + +archinstall_tui_ui->archinstall_lib_interactions_general_conf + + + + + + +archinstall_tui_ui->archinstall_lib_interactions_manage_users_conf + + + + + +archinstall_tui_ui->archinstall_lib_interactions_network_menu + + + + + + +archinstall_tui_ui->archinstall_lib_interactions_system_conf + + + + +archinstall_tui_ui->archinstall_lib_locale_locale_menu + + + + + +archinstall_tui_ui->archinstall_lib_menu_abstract_menu + + + + + + + +archinstall_tui_ui->archinstall_lib_menu_helpers + + + + + +archinstall_tui_ui->archinstall_lib_menu_list_manager + + + + + +archinstall_tui_ui->archinstall_lib_menu_menu_helper + + + + + +archinstall_tui_ui->archinstall_lib_mirrors + + + + + + +archinstall_tui_ui->archinstall_lib_network_wifi_handler + + + + + +archinstall_tui_ui->archinstall_lib_profile_profile_menu + + + + + +archinstall_tui_ui->archinstall_lib_utils_util + + + + + + +archinstall_tui_ui_components->archinstall_lib_menu_helpers + + + + + + +archinstall_tui_ui_components->archinstall_lib_network_wifi_handler + + + + +archinstall_tui_ui_menu_item->archinstall_default_profiles_desktop + + + + + + +archinstall_tui_ui_menu_item->archinstall_default_profiles_desktops_hyprland + + + + + + + +archinstall_tui_ui_menu_item->archinstall_default_profiles_desktops_labwc + + + + + + +archinstall_tui_ui_menu_item->archinstall_default_profiles_desktops_niri + + + + + + +archinstall_tui_ui_menu_item->archinstall_default_profiles_desktops_sway + + + + + + +archinstall_tui_ui_menu_item->archinstall_default_profiles_server + + + + + + + +archinstall_tui_ui_menu_item->archinstall_lib_applications_application_menu + + + + + + +archinstall_tui_ui_menu_item->archinstall_lib_authentication_authentication_menu + + + + + + + + +archinstall_tui_ui_menu_item->archinstall_lib_bootloader_bootloader_menu + + + + + + +archinstall_tui_ui_menu_item->archinstall_lib_configuration + + + + + +archinstall_tui_ui_menu_item->archinstall_lib_disk_disk_menu + + + + + + +archinstall_tui_ui_menu_item->archinstall_lib_disk_encryption_menu + + + + + + + +archinstall_tui_ui_menu_item->archinstall_lib_disk_partitioning_menu + + + + + + +archinstall_tui_ui_menu_item->archinstall_lib_global_menu + + + + + + + +archinstall_tui_ui_menu_item->archinstall_lib_interactions_disk_conf + + + + + + + +archinstall_tui_ui_menu_item->archinstall_lib_interactions_general_conf + + + + + +archinstall_tui_ui_menu_item->archinstall_lib_interactions_manage_users_conf + + + + + +archinstall_tui_ui_menu_item->archinstall_lib_interactions_network_menu + + + + + +archinstall_tui_ui_menu_item->archinstall_lib_interactions_system_conf + + + + + +archinstall_tui_ui_menu_item->archinstall_lib_locale_locale_menu + + + + +archinstall_tui_ui_menu_item->archinstall_lib_menu_abstract_menu + + + + +archinstall_tui_ui_menu_item->archinstall_lib_menu_helpers + + + + + +archinstall_tui_ui_menu_item->archinstall_lib_menu_list_manager + + + + + +archinstall_tui_ui_menu_item->archinstall_lib_menu_menu_helper + + + + + +archinstall_tui_ui_menu_item->archinstall_lib_mirrors + + + + + +archinstall_tui_ui_menu_item->archinstall_lib_network_wifi_handler + + + + + + + +archinstall_tui_ui_menu_item->archinstall_lib_profile_profile_menu + + + + + + +archinstall_tui_ui_menu_item->archinstall_tui_ui_components + + + + + +archinstall_tui_ui_result + +archinstall. +tui. +ui. +result + + + +archinstall_tui_ui_menu_item->archinstall_tui_ui_result + + + + + +archinstall_tui_ui_result->archinstall_default_profiles_desktop + + + + +archinstall_tui_ui_result->archinstall_default_profiles_desktops_hyprland + + + + + +archinstall_tui_ui_result->archinstall_default_profiles_desktops_labwc + + + + +archinstall_tui_ui_result->archinstall_default_profiles_desktops_niri + + + + + + +archinstall_tui_ui_result->archinstall_default_profiles_desktops_sway + + + + + +archinstall_tui_ui_result->archinstall_default_profiles_server + + + + + + +archinstall_tui_ui_result->archinstall_lib_applications_application_menu + + + + + + +archinstall_tui_ui_result->archinstall_lib_authentication_authentication_menu + + + + + +archinstall_tui_ui_result->archinstall_lib_bootloader_bootloader_menu + + + + + +archinstall_tui_ui_result->archinstall_lib_configuration + + + + + + +archinstall_tui_ui_result->archinstall_lib_disk_disk_menu + + + + + + + +archinstall_tui_ui_result->archinstall_lib_disk_encryption_menu + + + + + + +archinstall_tui_ui_result->archinstall_lib_disk_partitioning_menu + + + + +archinstall_tui_ui_result->archinstall_lib_disk_subvolume_menu + + + + + +archinstall_tui_ui_result->archinstall_lib_interactions_disk_conf + + + + + +archinstall_tui_ui_result->archinstall_lib_interactions_general_conf + + + + + + + +archinstall_tui_ui_result->archinstall_lib_interactions_manage_users_conf + + + + + + +archinstall_tui_ui_result->archinstall_lib_interactions_network_menu + + + + + +archinstall_tui_ui_result->archinstall_lib_interactions_system_conf + + + + + +archinstall_tui_ui_result->archinstall_lib_locale_locale_menu + + + + + + +archinstall_tui_ui_result->archinstall_lib_menu_abstract_menu + + + + + +archinstall_tui_ui_result->archinstall_lib_menu_helpers + + + + + +archinstall_tui_ui_result->archinstall_lib_menu_list_manager + + + + + + +archinstall_tui_ui_result->archinstall_lib_mirrors + + + + + + +archinstall_tui_ui_result->archinstall_lib_network_wifi_handler + + + + + +archinstall_tui_ui_result->archinstall_lib_profile_profile_menu + + + + + +archinstall_tui_ui_result->archinstall_lib_utils_util + + + + + +archinstall_tui_ui_result->archinstall_tui_ui_components + + + + + +cryptography + +cryptography + + + +cryptography->archinstall_lib_crypt + + + + + +parted + +parted + + + +parted->archinstall_lib_disk_device_handler + + + + + +parted->archinstall_lib_models_device + + + + + + +pydantic + +pydantic + + + +pydantic->archinstall_lib_args + + + + + +pydantic->archinstall_lib_disk_utils + + + + +pydantic->archinstall_lib_models_device + + + + + + +pydantic->archinstall_lib_models_mirrors + + + + + + +pydantic->archinstall_lib_models_packages + + + + + + +systemd + +systemd + + + +systemd->archinstall_lib_output + + + + +textual + +textual + + + +textual->archinstall_lib_menu_helpers + + + + +textual->archinstall_tui_ui_components + + + + + + diff --git a/archinstall/lib/authentication/authentication_handler.py b/archinstall/lib/authentication/authentication_handler.py index 14c6d147..7e5d9e38 100644 --- a/archinstall/lib/authentication/authentication_handler.py +++ b/archinstall/lib/authentication/authentication_handler.py @@ -4,7 +4,7 @@ import getpass from pathlib import Path from typing import TYPE_CHECKING -from archinstall.lib.general import SysCommandWorker +from archinstall.lib.command import SysCommandWorker from archinstall.lib.models.authentication import AuthenticationConfiguration, U2FLoginConfiguration, U2FLoginMethod from archinstall.lib.models.users import User from archinstall.lib.output import debug, info diff --git a/archinstall/lib/boot.py b/archinstall/lib/boot.py index 2729819c..4f3d1bde 100644 --- a/archinstall/lib/boot.py +++ b/archinstall/lib/boot.py @@ -5,8 +5,9 @@ from collections.abc import Iterator from types import TracebackType from typing import TYPE_CHECKING, ClassVar, Self +from .command import SysCommand, SysCommandWorker from .exceptions import SysCallError -from .general import SysCommand, SysCommandWorker, locate_binary +from .general import locate_binary from .output import error if TYPE_CHECKING: diff --git a/archinstall/lib/command.py b/archinstall/lib/command.py new file mode 100644 index 00000000..37050390 --- /dev/null +++ b/archinstall/lib/command.py @@ -0,0 +1,377 @@ +import os +import shlex +import stat +import subprocess +import sys +import time +from collections.abc import Iterator +from select import EPOLLHUP, EPOLLIN, epoll +from types import TracebackType +from typing import Any, Self, override + +from archinstall.lib.exceptions import SysCallError +from archinstall.lib.general import clear_vt100_escape_codes, locate_binary +from archinstall.lib.output import debug, error, logger + + +class SysCommandWorker: + def __init__( + self, + cmd: str | list[str], + peek_output: bool | None = False, + environment_vars: dict[str, str] | None = None, + working_directory: str = './', + remove_vt100_escape_codes_from_lines: bool = True, + ): + if isinstance(cmd, str): + cmd = shlex.split(cmd) + + if cmd and not cmd[0].startswith(('/', './')): # Path() does not work well + cmd[0] = locate_binary(cmd[0]) + + self.cmd = cmd + self.peek_output = peek_output + # define the standard locale for command outputs. For now the C ascii one. Can be overridden + self.environment_vars = {'LC_ALL': 'C'} + if environment_vars: + self.environment_vars.update(environment_vars) + + self.working_directory = working_directory + + self.exit_code: int | None = None + self._trace_log = b'' + self._trace_log_pos = 0 + self.poll_object = epoll() + self.child_fd: int | None = None + self.started: float | None = None + self.ended: float | None = None + self.remove_vt100_escape_codes_from_lines: bool = remove_vt100_escape_codes_from_lines + + def __contains__(self, key: bytes) -> bool: + """ + Contains will also move the current buffert position forward. + This is to avoid re-checking the same data when looking for output. + """ + assert isinstance(key, bytes) + + index = self._trace_log.find(key, self._trace_log_pos) + if index >= 0: + self._trace_log_pos += index + len(key) + return True + + return False + + def __iter__(self, *args: str, **kwargs: dict[str, Any]) -> Iterator[bytes]: + last_line = self._trace_log.rfind(b'\n') + lines = filter(None, self._trace_log[self._trace_log_pos : last_line].splitlines()) + for line in lines: + if self.remove_vt100_escape_codes_from_lines: + line = clear_vt100_escape_codes(line) + + yield line + b'\n' + + self._trace_log_pos = last_line + + @override + def __repr__(self) -> str: + self.make_sure_we_are_executing() + return str(self._trace_log) + + @override + def __str__(self) -> str: + try: + return self._trace_log.decode('utf-8') + except UnicodeDecodeError: + return str(self._trace_log) + + def __enter__(self) -> Self: + return self + + def __exit__(self, exc_type: type[BaseException] | None, exc_value: BaseException | None, traceback: TracebackType | None) -> None: + # b''.join(sys_command('sync')) # No need to, since the underlying fs() object will call sync. + # TODO: https://stackoverflow.com/questions/28157929/how-to-safely-handle-an-exception-inside-a-context-manager + + if self.child_fd: + try: + os.close(self.child_fd) + except Exception: + pass + + if self.peek_output: + # To make sure any peaked output didn't leave us hanging + # on the same line we were on. + sys.stdout.write('\n') + sys.stdout.flush() + + if exc_type is not None: + debug(str(exc_value)) + + if self.exit_code != 0: + raise SysCallError( + f'{self.cmd} exited with abnormal exit code [{self.exit_code}]: {str(self)[-500:]}', + self.exit_code, + worker_log=self._trace_log, + ) + + def is_alive(self) -> bool: + self.poll() + + if self.started and self.ended is None: + return True + + return False + + def write(self, data: bytes, line_ending: bool = True) -> int: + assert isinstance(data, bytes) # TODO: Maybe we can support str as well and encode it + + self.make_sure_we_are_executing() + + if self.child_fd: + return os.write(self.child_fd, data + (b'\n' if line_ending else b'')) + + return 0 + + def make_sure_we_are_executing(self) -> bool: + if not self.started: + return self.execute() + return True + + def tell(self) -> int: + self.make_sure_we_are_executing() + return self._trace_log_pos + + def seek(self, pos: int) -> None: + self.make_sure_we_are_executing() + # Safety check to ensure 0 < pos < len(tracelog) + self._trace_log_pos = min(max(0, pos), len(self._trace_log)) + + def peak(self, output: str | bytes) -> bool: + if self.peek_output: + if isinstance(output, bytes): + try: + output = output.decode('UTF-8') + except UnicodeDecodeError: + return False + + _cmd_output(output) + + sys.stdout.write(output) + sys.stdout.flush() + + return True + + def poll(self) -> None: + self.make_sure_we_are_executing() + + if self.child_fd: + got_output = False + for _fileno, _event in self.poll_object.poll(0.1): + try: + output = os.read(self.child_fd, 8192) + got_output = True + self.peak(output) + self._trace_log += output + except OSError: + self.ended = time.time() + break + + if self.ended or (not got_output and not _pid_exists(self.pid)): + self.ended = time.time() + try: + wait_status = os.waitpid(self.pid, 0)[1] + self.exit_code = os.waitstatus_to_exitcode(wait_status) + except ChildProcessError: + try: + wait_status = os.waitpid(self.child_fd, 0)[1] + self.exit_code = os.waitstatus_to_exitcode(wait_status) + except ChildProcessError: + self.exit_code = 1 + + def execute(self) -> bool: + import pty + + if (old_dir := os.getcwd()) != self.working_directory: + os.chdir(str(self.working_directory)) + + # Note: If for any reason, we get a Python exception between here + # and until os.close(), the traceback will get locked inside + # stdout of the child_fd object. `os.read(self.child_fd, 8192)` is the + # only way to get the traceback without losing it. + + self.pid, self.child_fd = pty.fork() + + # https://stackoverflow.com/questions/4022600/python-pty-fork-how-does-it-work + if not self.pid: + _cmd_history(self.cmd) + + try: + os.execve(self.cmd[0], list(self.cmd), {**os.environ, **self.environment_vars}) + except FileNotFoundError: + error(f'{self.cmd[0]} does not exist.') + self.exit_code = 1 + return False + else: + # Only parent process moves back to the original working directory + os.chdir(old_dir) + + self.started = time.time() + self.poll_object.register(self.child_fd, EPOLLIN | EPOLLHUP) + + return True + + def decode(self, encoding: str = 'UTF-8') -> str: + return self._trace_log.decode(encoding) + + +class SysCommand: + def __init__( + self, + cmd: str | list[str], + peek_output: bool | None = False, + environment_vars: dict[str, str] | None = None, + working_directory: str = './', + remove_vt100_escape_codes_from_lines: bool = True, + ): + self.cmd = cmd + self.peek_output = peek_output + self.environment_vars = environment_vars + self.working_directory = working_directory + self.remove_vt100_escape_codes_from_lines = remove_vt100_escape_codes_from_lines + + self.session: SysCommandWorker | None = None + self.create_session() + + def __enter__(self) -> SysCommandWorker | None: + return self.session + + def __exit__(self, exc_type: type[BaseException] | None, exc_value: BaseException | None, traceback: TracebackType | None) -> None: + # b''.join(sys_command('sync')) # No need to, since the underlying fs() object will call sync. + # TODO: https://stackoverflow.com/questions/28157929/how-to-safely-handle-an-exception-inside-a-context-manager + + if exc_type is not None: + error(str(exc_value)) + + def __iter__(self, *args: list[Any], **kwargs: dict[str, Any]) -> Iterator[bytes]: + if self.session: + yield from self.session + + def __getitem__(self, key: slice) -> bytes: + if not self.session: + raise KeyError('SysCommand() does not have an active session.') + elif type(key) is slice: + start = key.start or 0 + end = key.stop or len(self.session._trace_log) + + return self.session._trace_log[start:end] + else: + raise ValueError("SysCommand() doesn't have key & value pairs, only slices, SysCommand('ls')[:10] as an example.") + + @override + def __repr__(self, *args: list[Any], **kwargs: dict[str, Any]) -> str: + return self.decode('UTF-8', errors='backslashreplace') or '' + + def create_session(self) -> bool: + """ + Initiates a :ref:`SysCommandWorker` session in this class ``.session``. + It then proceeds to poll the process until it ends, after which it also + clears any printed output if ``.peek_output=True``. + """ + if self.session: + return True + + with SysCommandWorker( + self.cmd, + peek_output=self.peek_output, + environment_vars=self.environment_vars, + remove_vt100_escape_codes_from_lines=self.remove_vt100_escape_codes_from_lines, + working_directory=self.working_directory, + ) as session: + self.session = session + + while not self.session.ended: + self.session.poll() + + if self.peek_output: + sys.stdout.write('\n') + sys.stdout.flush() + + return True + + def decode(self, encoding: str = 'utf-8', errors: str = 'backslashreplace', strip: bool = True) -> str: + if not self.session: + raise ValueError('No session available to decode') + + val = self.session._trace_log.decode(encoding, errors=errors) + + if strip: + return val.strip() + return val + + def output(self, remove_cr: bool = True) -> bytes: + if not self.session: + raise ValueError('No session available') + + if remove_cr: + return self.session._trace_log.replace(b'\r\n', b'\n') + + return self.session._trace_log + + @property + def exit_code(self) -> int | None: + if self.session: + return self.session.exit_code + else: + return None + + @property + def trace_log(self) -> bytes | None: + if self.session: + return self.session._trace_log + return None + + +def run( + cmd: list[str], + input_data: bytes | None = None, +) -> subprocess.CompletedProcess[bytes]: + _cmd_history(cmd) + + return subprocess.run( + cmd, + input=input_data, + stdout=subprocess.PIPE, + stderr=subprocess.STDOUT, + check=True, + ) + + +def _pid_exists(pid: int) -> bool: + try: + return any(subprocess.check_output(['ps', '--no-headers', '-o', 'pid', '-p', str(pid)]).strip()) + except subprocess.CalledProcessError: + return False + + +def _cmd_history(cmd: list[str]) -> None: + content = f'{time.time()} {cmd}\n' + _append_log('cmd_history.txt', content) + + +def _cmd_output(output: str) -> None: + _append_log('cmd_output.txt', output) + + +def _append_log(file: str, content: str) -> None: + path = logger.directory / file + + change_perm = not path.exists() + + try: + with path.open('a') as f: + f.write(content) + + if change_perm: + path.chmod(stat.S_IRUSR | stat.S_IWUSR | stat.S_IRGRP) + except (PermissionError, FileNotFoundError): + # If the file does not exist, ignore the error + pass diff --git a/archinstall/lib/disk/device_handler.py b/archinstall/lib/disk/device_handler.py index c8a377d1..8e3a8996 100644 --- a/archinstall/lib/disk/device_handler.py +++ b/archinstall/lib/disk/device_handler.py @@ -8,8 +8,8 @@ from typing import Literal, overload from parted import Device, Disk, DiskException, FileSystem, Geometry, IOException, Partition, PartitionException, freshDisk, getAllDevices, getDevice, newDisk +from ..command import SysCommand, SysCommandWorker from ..exceptions import DiskError, SysCallError, UnknownFilesystemFormat -from ..general import SysCommand, SysCommandWorker from ..luks import Luks2 from ..models.device import ( DEFAULT_ITER_TIME, @@ -850,8 +850,8 @@ class DeviceHandler: def _wipe(self, dev_path: Path) -> None: """ Wipe a device (partition or otherwise) of meta-data, be it file system, LVM, etc. - @param dev_path: Device path of the partition to be wiped. - @type dev_path: str + @param dev_path: Device path of the partition to be wiped. + @type dev_path: str """ with open(dev_path, 'wb') as p: p.write(bytearray(1024)) diff --git a/archinstall/lib/disk/fido.py b/archinstall/lib/disk/fido.py index 03ab4c31..040fd1bb 100644 --- a/archinstall/lib/disk/fido.py +++ b/archinstall/lib/disk/fido.py @@ -4,8 +4,9 @@ from typing import ClassVar from archinstall.lib.models.device import Fido2Device +from ..command import SysCommand, SysCommandWorker from ..exceptions import SysCallError -from ..general import SysCommand, SysCommandWorker, clear_vt100_escape_codes_from_str +from ..general import clear_vt100_escape_codes_from_str from ..models.users import Password from ..output import error, info @@ -61,8 +62,8 @@ class Fido2: Output example: - PATH MANUFACTURER PRODUCT - /dev/hidraw1 Yubico YubiKey OTP+FIDO+CCID + PATH MANUFACTURER PRODUCT + /dev/hidraw1 Yubico YubiKey OTP+FIDO+CCID """ # to prevent continuous reloading which will slow diff --git a/archinstall/lib/disk/utils.py b/archinstall/lib/disk/utils.py index 95a0871f..a96e4d29 100644 --- a/archinstall/lib/disk/utils.py +++ b/archinstall/lib/disk/utils.py @@ -2,8 +2,8 @@ from pathlib import Path from pydantic import BaseModel +from archinstall.lib.command import SysCommand from archinstall.lib.exceptions import DiskError, SysCallError -from archinstall.lib.general import SysCommand from archinstall.lib.models.device import LsblkInfo from archinstall.lib.output import debug, warn diff --git a/archinstall/lib/general.py b/archinstall/lib/general.py index a77963d7..3fd60506 100644 --- a/archinstall/lib/general.py +++ b/archinstall/lib/general.py @@ -1,24 +1,14 @@ import json -import os import re import secrets -import shlex -import stat import string -import subprocess -import sys -import time -from collections.abc import Iterator from datetime import date, datetime from enum import Enum from pathlib import Path -from select import EPOLLHUP, EPOLLIN, epoll from shutil import which -from types import TracebackType -from typing import Any, Self, override +from typing import Any, override -from .exceptions import RequirementError, SysCallError -from .output import debug, error, logger +from archinstall.lib.exceptions import RequirementError # https://stackoverflow.com/a/43627833/929999 _VT100_ESCAPE_REGEX = r'\x1B\[[?0-9;]*[a-zA-Z]' @@ -105,366 +95,3 @@ class UNSAFE_JSON(json.JSONEncoder, json.JSONDecoder): @override def encode(self, o: Any) -> str: return super().encode(jsonify(o, safe=False)) - - -class SysCommandWorker: - def __init__( - self, - cmd: str | list[str], - peek_output: bool | None = False, - environment_vars: dict[str, str] | None = None, - working_directory: str = './', - remove_vt100_escape_codes_from_lines: bool = True, - ): - if isinstance(cmd, str): - cmd = shlex.split(cmd) - - if cmd and not cmd[0].startswith(('/', './')): # Path() does not work well - cmd[0] = locate_binary(cmd[0]) - - self.cmd = cmd - self.peek_output = peek_output - # define the standard locale for command outputs. For now the C ascii one. Can be overridden - self.environment_vars = {'LC_ALL': 'C'} - if environment_vars: - self.environment_vars.update(environment_vars) - - self.working_directory = working_directory - - self.exit_code: int | None = None - self._trace_log = b'' - self._trace_log_pos = 0 - self.poll_object = epoll() - self.child_fd: int | None = None - self.started: float | None = None - self.ended: float | None = None - self.remove_vt100_escape_codes_from_lines: bool = remove_vt100_escape_codes_from_lines - - def __contains__(self, key: bytes) -> bool: - """ - Contains will also move the current buffert position forward. - This is to avoid re-checking the same data when looking for output. - """ - assert isinstance(key, bytes) - - index = self._trace_log.find(key, self._trace_log_pos) - if index >= 0: - self._trace_log_pos += index + len(key) - return True - - return False - - def __iter__(self, *args: str, **kwargs: dict[str, Any]) -> Iterator[bytes]: - last_line = self._trace_log.rfind(b'\n') - lines = filter(None, self._trace_log[self._trace_log_pos : last_line].splitlines()) - for line in lines: - if self.remove_vt100_escape_codes_from_lines: - line = clear_vt100_escape_codes(line) - - yield line + b'\n' - - self._trace_log_pos = last_line - - @override - def __repr__(self) -> str: - self.make_sure_we_are_executing() - return str(self._trace_log) - - @override - def __str__(self) -> str: - try: - return self._trace_log.decode('utf-8') - except UnicodeDecodeError: - return str(self._trace_log) - - def __enter__(self) -> Self: - return self - - def __exit__(self, exc_type: type[BaseException] | None, exc_value: BaseException | None, traceback: TracebackType | None) -> None: - # b''.join(sys_command('sync')) # No need to, since the underlying fs() object will call sync. - # TODO: https://stackoverflow.com/questions/28157929/how-to-safely-handle-an-exception-inside-a-context-manager - - if self.child_fd: - try: - os.close(self.child_fd) - except Exception: - pass - - if self.peek_output: - # To make sure any peaked output didn't leave us hanging - # on the same line we were on. - sys.stdout.write('\n') - sys.stdout.flush() - - if exc_type is not None: - debug(str(exc_value)) - - if self.exit_code != 0: - raise SysCallError( - f'{self.cmd} exited with abnormal exit code [{self.exit_code}]: {str(self)[-500:]}', - self.exit_code, - worker_log=self._trace_log, - ) - - def is_alive(self) -> bool: - self.poll() - - if self.started and self.ended is None: - return True - - return False - - def write(self, data: bytes, line_ending: bool = True) -> int: - assert isinstance(data, bytes) # TODO: Maybe we can support str as well and encode it - - self.make_sure_we_are_executing() - - if self.child_fd: - return os.write(self.child_fd, data + (b'\n' if line_ending else b'')) - - return 0 - - def make_sure_we_are_executing(self) -> bool: - if not self.started: - return self.execute() - return True - - def tell(self) -> int: - self.make_sure_we_are_executing() - return self._trace_log_pos - - def seek(self, pos: int) -> None: - self.make_sure_we_are_executing() - # Safety check to ensure 0 < pos < len(tracelog) - self._trace_log_pos = min(max(0, pos), len(self._trace_log)) - - def peak(self, output: str | bytes) -> bool: - if self.peek_output: - if isinstance(output, bytes): - try: - output = output.decode('UTF-8') - except UnicodeDecodeError: - return False - - _cmd_output(output) - - sys.stdout.write(output) - sys.stdout.flush() - - return True - - def poll(self) -> None: - self.make_sure_we_are_executing() - - if self.child_fd: - got_output = False - for _fileno, _event in self.poll_object.poll(0.1): - try: - output = os.read(self.child_fd, 8192) - got_output = True - self.peak(output) - self._trace_log += output - except OSError: - self.ended = time.time() - break - - if self.ended or (not got_output and not _pid_exists(self.pid)): - self.ended = time.time() - try: - wait_status = os.waitpid(self.pid, 0)[1] - self.exit_code = os.waitstatus_to_exitcode(wait_status) - except ChildProcessError: - try: - wait_status = os.waitpid(self.child_fd, 0)[1] - self.exit_code = os.waitstatus_to_exitcode(wait_status) - except ChildProcessError: - self.exit_code = 1 - - def execute(self) -> bool: - import pty - - if (old_dir := os.getcwd()) != self.working_directory: - os.chdir(str(self.working_directory)) - - # Note: If for any reason, we get a Python exception between here - # and until os.close(), the traceback will get locked inside - # stdout of the child_fd object. `os.read(self.child_fd, 8192)` is the - # only way to get the traceback without losing it. - - self.pid, self.child_fd = pty.fork() - - # https://stackoverflow.com/questions/4022600/python-pty-fork-how-does-it-work - if not self.pid: - _cmd_history(self.cmd) - - try: - os.execve(self.cmd[0], list(self.cmd), {**os.environ, **self.environment_vars}) - except FileNotFoundError: - error(f'{self.cmd[0]} does not exist.') - self.exit_code = 1 - return False - else: - # Only parent process moves back to the original working directory - os.chdir(old_dir) - - self.started = time.time() - self.poll_object.register(self.child_fd, EPOLLIN | EPOLLHUP) - - return True - - def decode(self, encoding: str = 'UTF-8') -> str: - return self._trace_log.decode(encoding) - - -class SysCommand: - def __init__( - self, - cmd: str | list[str], - peek_output: bool | None = False, - environment_vars: dict[str, str] | None = None, - working_directory: str = './', - remove_vt100_escape_codes_from_lines: bool = True, - ): - self.cmd = cmd - self.peek_output = peek_output - self.environment_vars = environment_vars - self.working_directory = working_directory - self.remove_vt100_escape_codes_from_lines = remove_vt100_escape_codes_from_lines - - self.session: SysCommandWorker | None = None - self.create_session() - - def __enter__(self) -> SysCommandWorker | None: - return self.session - - def __exit__(self, exc_type: type[BaseException] | None, exc_value: BaseException | None, traceback: TracebackType | None) -> None: - # b''.join(sys_command('sync')) # No need to, since the underlying fs() object will call sync. - # TODO: https://stackoverflow.com/questions/28157929/how-to-safely-handle-an-exception-inside-a-context-manager - - if exc_type is not None: - error(str(exc_value)) - - def __iter__(self, *args: list[Any], **kwargs: dict[str, Any]) -> Iterator[bytes]: - if self.session: - yield from self.session - - def __getitem__(self, key: slice) -> bytes: - if not self.session: - raise KeyError('SysCommand() does not have an active session.') - elif type(key) is slice: - start = key.start or 0 - end = key.stop or len(self.session._trace_log) - - return self.session._trace_log[start:end] - else: - raise ValueError("SysCommand() doesn't have key & value pairs, only slices, SysCommand('ls')[:10] as an example.") - - @override - def __repr__(self, *args: list[Any], **kwargs: dict[str, Any]) -> str: - return self.decode('UTF-8', errors='backslashreplace') or '' - - def create_session(self) -> bool: - """ - Initiates a :ref:`SysCommandWorker` session in this class ``.session``. - It then proceeds to poll the process until it ends, after which it also - clears any printed output if ``.peek_output=True``. - """ - if self.session: - return True - - with SysCommandWorker( - self.cmd, - peek_output=self.peek_output, - environment_vars=self.environment_vars, - remove_vt100_escape_codes_from_lines=self.remove_vt100_escape_codes_from_lines, - working_directory=self.working_directory, - ) as session: - self.session = session - - while not self.session.ended: - self.session.poll() - - if self.peek_output: - sys.stdout.write('\n') - sys.stdout.flush() - - return True - - def decode(self, encoding: str = 'utf-8', errors: str = 'backslashreplace', strip: bool = True) -> str: - if not self.session: - raise ValueError('No session available to decode') - - val = self.session._trace_log.decode(encoding, errors=errors) - - if strip: - return val.strip() - return val - - def output(self, remove_cr: bool = True) -> bytes: - if not self.session: - raise ValueError('No session available') - - if remove_cr: - return self.session._trace_log.replace(b'\r\n', b'\n') - - return self.session._trace_log - - @property - def exit_code(self) -> int | None: - if self.session: - return self.session.exit_code - else: - return None - - @property - def trace_log(self) -> bytes | None: - if self.session: - return self.session._trace_log - return None - - -def _append_log(file: str, content: str) -> None: - path = logger.directory / file - - change_perm = not path.exists() - - try: - with path.open('a') as f: - f.write(content) - - if change_perm: - path.chmod(stat.S_IRUSR | stat.S_IWUSR | stat.S_IRGRP) - except (PermissionError, FileNotFoundError): - # If the file does not exist, ignore the error - pass - - -def _cmd_history(cmd: list[str]) -> None: - content = f'{time.time()} {cmd}\n' - _append_log('cmd_history.txt', content) - - -def _cmd_output(output: str) -> None: - _append_log('cmd_output.txt', output) - - -def run( - cmd: list[str], - input_data: bytes | None = None, -) -> subprocess.CompletedProcess[bytes]: - _cmd_history(cmd) - - return subprocess.run( - cmd, - input=input_data, - stdout=subprocess.PIPE, - stderr=subprocess.STDOUT, - check=True, - ) - - -def _pid_exists(pid: int) -> bool: - try: - return any(subprocess.check_output(['ps', '--no-headers', '-o', 'pid', '-p', str(pid)]).strip()) - except subprocess.CalledProcessError: - return False diff --git a/archinstall/lib/hardware.py b/archinstall/lib/hardware.py index 70a719af..dcac3c3b 100644 --- a/archinstall/lib/hardware.py +++ b/archinstall/lib/hardware.py @@ -4,8 +4,8 @@ from functools import cached_property from pathlib import Path from typing import Self +from .command import SysCommand from .exceptions import SysCallError -from .general import SysCommand from .networking import enrich_iface_types, list_interfaces from .output import debug from .translationhandler import tr diff --git a/archinstall/lib/installer.py b/archinstall/lib/installer.py index c2947261..7060acbd 100644 --- a/archinstall/lib/installer.py +++ b/archinstall/lib/installer.py @@ -37,8 +37,8 @@ from archinstall.lib.translationhandler import tr from .args import arch_config_handler from .boot import Boot +from .command import SysCommand, run from .exceptions import DiskError, HardwareIncompatibilityError, RequirementError, ServiceException, SysCallError -from .general import SysCommand, run from .hardware import SysInfo from .locale.utils import verify_keyboard_layout, verify_x11_keyboard_layout from .luks import Luks2 diff --git a/archinstall/lib/locale/utils.py b/archinstall/lib/locale/utils.py index f89b865d..2dbd158a 100644 --- a/archinstall/lib/locale/utils.py +++ b/archinstall/lib/locale/utils.py @@ -1,5 +1,6 @@ +from ..command import SysCommand from ..exceptions import ServiceException, SysCallError -from ..general import SysCommand, running_from_host +from ..general import running_from_host from ..output import error diff --git a/archinstall/lib/luks.py b/archinstall/lib/luks.py index 3b5aea5b..fc7bca90 100644 --- a/archinstall/lib/luks.py +++ b/archinstall/lib/luks.py @@ -7,8 +7,9 @@ from types import TracebackType from archinstall.lib.disk.utils import get_lsblk_info, umount from archinstall.lib.models.device import DEFAULT_ITER_TIME +from .command import SysCommand, SysCommandWorker, run from .exceptions import DiskError, SysCallError -from .general import SysCommand, SysCommandWorker, generate_password, run +from .general import generate_password from .models.users import Password from .output import debug, info diff --git a/archinstall/lib/network/wifi_handler.py b/archinstall/lib/network/wifi_handler.py index 447a0473..45e96c43 100644 --- a/archinstall/lib/network/wifi_handler.py +++ b/archinstall/lib/network/wifi_handler.py @@ -3,8 +3,8 @@ from dataclasses import dataclass from pathlib import Path from typing import assert_never +from archinstall.lib.command import SysCommand from archinstall.lib.exceptions import SysCallError -from archinstall.lib.general import SysCommand from archinstall.lib.models.network import WifiConfiguredNetwork, WifiNetwork from archinstall.lib.network.wpa_supplicant import WpaSupplicantConfig from archinstall.lib.output import debug diff --git a/archinstall/lib/pacman/pacman.py b/archinstall/lib/pacman/pacman.py index f3a22472..23ff0372 100644 --- a/archinstall/lib/pacman/pacman.py +++ b/archinstall/lib/pacman/pacman.py @@ -5,8 +5,8 @@ from pathlib import Path from archinstall.lib.translationhandler import tr +from ..command import SysCommand from ..exceptions import RequirementError -from ..general import SysCommand from ..output import error, info, warn from ..plugins import plugins