1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
|
from __future__ import annotations
from typing import List, Any, Dict, TYPE_CHECKING
from ..disk import all_blockdevices
from ..exceptions import RequirementError
from ..hardware import AVAILABLE_GFX_DRIVERS, has_uefi, has_amd_graphics, has_intel_graphics, has_nvidia_graphics
from ..menu import Menu
from ..storage import storage
from ..translation import DeferredTranslation
if TYPE_CHECKING:
_: Any
def select_kernel(preset: List[str] = None) -> List[str]:
"""
Asks the user to select a kernel for system.
:return: The string as a selected kernel
:rtype: string
"""
kernels = ["linux", "linux-lts", "linux-zen", "linux-hardened"]
default_kernel = "linux"
selected_kernels = Menu(_('Choose which kernels to use or leave blank for default "{}"').format(default_kernel),
kernels,
sort=True,
multi=True,
preset_values=preset,
default_option=default_kernel).run()
return selected_kernels
def select_harddrives(preset: List[str] = []) -> List[str]:
"""
Asks the user to select one or multiple hard drives
:return: List of selected hard drives
:rtype: list
"""
hard_drives = all_blockdevices(partitions=False).values()
options = {f'{option}': option for option in hard_drives}
if preset:
preset_disks = {f'{option}': option for option in preset}
else:
preset_disks = {}
selected_harddrive = Menu(_('Select one or more hard drives to use and configure'),
list(options.keys()),
preset_values=list(preset_disks.keys()),
multi=True).run()
if selected_harddrive and len(selected_harddrive) > 0:
return [options[i] for i in selected_harddrive]
return []
def select_driver(options: Dict[str, Any] = AVAILABLE_GFX_DRIVERS) -> str:
"""
Some what convoluted function, whose job is simple.
Select a graphics driver from a pre-defined set of popular options.
(The template xorg is for beginner users, not advanced, and should
there for appeal to the general public first and edge cases later)
"""
drivers = sorted(list(options))
if drivers:
arguments = storage.get('arguments', {})
title = DeferredTranslation('')
if has_amd_graphics():
title += _(
'For the best compatibility with your AMD hardware, you may want to use either the all open-source or AMD / ATI options.'
) + '\n'
if has_intel_graphics():
title += _(
'For the best compatibility with your Intel hardware, you may want to use either the all open-source or Intel options.\n'
)
if has_nvidia_graphics():
title += _(
'For the best compatibility with your Nvidia hardware, you may want to use the Nvidia proprietary driver.\n'
)
title += _('\n\nSelect a graphics driver or leave blank to install all open-source drivers')
arguments['gfx_driver'] = Menu(title, drivers).run()
if arguments.get('gfx_driver', None) is None:
arguments['gfx_driver'] = _("All open-source (default)")
return options.get(arguments.get('gfx_driver'))
raise RequirementError("Selecting drivers require a least one profile to be given as an option.")
def ask_for_bootloader(advanced_options: bool = False, preset: str = None) -> str:
if preset == 'systemd-bootctl':
preset_val = 'systemd-boot' if advanced_options else Menu.no()
elif preset == 'grub-install':
preset_val = 'grub' if advanced_options else Menu.yes()
else:
preset_val = preset
bootloader = "systemd-bootctl" if has_uefi() else "grub-install"
if has_uefi():
if not advanced_options:
bootloader_choice = Menu(_('Would you like to use GRUB as a bootloader instead of systemd-boot?'),
Menu.yes_no(),
preset_values=preset_val,
default_option=Menu.no()).run()
if bootloader_choice == Menu.yes():
bootloader = "grub-install"
else:
# We use the common names for the bootloader as the selection, and map it back to the expected values.
choices = ['systemd-boot', 'grub', 'efistub']
selection = Menu(_('Choose a bootloader'), choices, preset_values=preset_val).run()
if selection != "":
if selection == 'systemd-boot':
bootloader = 'systemd-bootctl'
elif selection == 'grub':
bootloader = 'grub-install'
else:
bootloader = selection
return bootloader
def ask_for_swap(preset: bool = True) -> bool:
if preset:
preset_val = Menu.yes()
else:
preset_val = Menu.no()
prompt = _('Would you like to use swap on zram?')
choice = Menu(prompt, Menu.yes_no(), default_option=Menu.yes(), preset_values=preset_val).run()
return False if choice == Menu.no() else True
|