Merge branch 'master' of github.com:archlinux/archinstall into mypy-workflow

This commit is contained in:
Anton Hvornum 2021-05-15 14:23:59 +02:00
commit e8d241ec96
29 changed files with 154 additions and 123 deletions

View File

@ -57,6 +57,12 @@ class Installer():
storage['session'] = self
self.partitions = get_partitions_in_use(self.target)
self.MODULES = []
self.BINARIES = []
self.FILES = []
self.HOOKS = ["base", "udev", "autodetect", "keyboard", "keymap", "modconf", "block", "filesystems", "fsck"]
self.KERNEL_PARAMS = []
def log(self, *args, level=logging.DEBUG, **kwargs):
"""
installer.log() wraps output.log() mainly to set a default log-level for this install session.
@ -278,16 +284,21 @@ class Installer():
return False
def mkinitcpio(self, *flags):
with open(f'{self.target}/etc/mkinitcpio.conf', 'w') as mkinit:
mkinit.write(f"MODULES=({' '.join(self.MODULES)})\n")
mkinit.write(f"BINARIES=({' '.join(self.BINARIES)})\n")
mkinit.write(f"FILES=({' '.join(self.FILES)})\n")
mkinit.write(f"HOOKS=({' '.join(self.HOOKS)})\n")
sys_command(f'/usr/bin/arch-chroot {self.target} mkinitcpio {" ".join(flags)}')
def minimal_installation(self):
## Add necessary packages if encrypting the drive
## (encrypted partitions default to btrfs for now, so we need btrfs-progs)
## TODO: Perhaps this should be living in the function which dictates
## the partitioning. Leaving here for now.
MODULES = []
BINARIES = []
FILES = []
HOOKS = ["base", "udev", "autodetect", "keyboard", "keymap", "modconf", "block", "filesystems", "fsck"]
for partition in self.partitions:
if partition.filesystem == 'btrfs':
@ -300,21 +311,18 @@ class Installer():
# Configure mkinitcpio to handle some specific use cases.
if partition.filesystem == 'btrfs':
if 'btrfs' not in MODULES:
MODULES.append('btrfs')
if '/usr/bin/btrfs-progs' not in BINARIES:
BINARIES.append('/usr/bin/btrfs')
if 'btrfs' not in self.MODULES:
self.MODULES.append('btrfs')
if '/usr/bin/btrfs-progs' not in self.BINARIES:
self.BINARIES.append('/usr/bin/btrfs')
if self.detect_encryption(partition):
if 'encrypt' not in HOOKS:
HOOKS.insert(HOOKS.index('filesystems'), 'encrypt')
if 'encrypt' not in self.HOOKS:
self.HOOKS.insert(self.HOOKS.index('filesystems'), 'encrypt')
if not(hasUEFI()): # TODO: Allow for grub even on EFI
if not(hasUEFI()):
self.base_packages.append('grub')
self.pacstrap(self.base_packages)
self.helper_flags['base-strapped'] = True
#self.genfstab()
if not isVM():
vendor = cpuVendor()
if vendor == "AuthenticAMD":
@ -323,6 +331,10 @@ class Installer():
self.base_packages.append("intel-ucode")
else:
self.log("Unknown cpu vendor not installing ucode")
self.pacstrap(self.base_packages)
self.helper_flags['base-strapped'] = True
with open(f"{self.target}/etc/fstab", "a") as fstab:
fstab.write(
"\ntmpfs /tmp tmpfs defaults,noatime,mode=1777 0 0\n"
@ -338,12 +350,7 @@ class Installer():
# TODO: Use python functions for this
sys_command(f'/usr/bin/arch-chroot {self.target} chmod 700 /root')
with open(f'{self.target}/etc/mkinitcpio.conf', 'w') as mkinit:
mkinit.write(f"MODULES=({' '.join(MODULES)})\n")
mkinit.write(f"BINARIES=({' '.join(BINARIES)})\n")
mkinit.write(f"FILES=({' '.join(FILES)})\n")
mkinit.write(f"HOOKS=({' '.join(HOOKS)})\n")
sys_command(f'/usr/bin/arch-chroot {self.target} mkinitcpio -P')
self.mkinitcpio('-P')
self.helper_flags['base'] = True
@ -375,7 +382,9 @@ class Installer():
# And in which case we should do some clean up.
# Install the boot loader
sys_command(f'/usr/bin/arch-chroot {self.target} bootctl --no-variables --path=/boot install')
if sys_command(f'/usr/bin/arch-chroot {self.target} bootctl --path=/boot install').exit_code != 0:
# Fallback, try creating the boot loader without touching the EFI variables
sys_command(f'/usr/bin/arch-chroot {self.target} bootctl --no-variables --path=/boot install')
# Modify or create a loader.conf
if os.path.isfile(f'{self.target}/boot/loader/loader.conf'):
@ -391,8 +400,11 @@ class Installer():
for line in loader_data:
if line[:8] == 'default ':
loader.write(f'default {self.init_time}\n')
elif line[:8] == '#timeout' and 'timeout 5' not in loader_data:
# We add in the default timeout to support dual-boot
loader.write(f"{line[1:]}\n")
else:
loader.write(f"{line}")
loader.write(f"{line}\n")
## For some reason, blkid and /dev/disk/by-uuid are not getting along well.
## And blkid is wrong in terms of LUKS.
@ -420,10 +432,10 @@ class Installer():
# TODO: We need to detect if the encrypted device is a whole disk encryption,
# or simply a partition encryption. Right now we assume it's a partition (and we always have)
log(f"Identifying root partition by PART-UUID on {real_device}: '{real_device.uuid}'.", level=logging.DEBUG)
entry.write(f'options cryptdevice=PARTUUID={real_device.uuid}:luksdev root=/dev/mapper/luksdev rw intel_pstate=no_hwp\n')
entry.write(f'options cryptdevice=PARTUUID={real_device.uuid}:luksdev root=/dev/mapper/luksdev rw intel_pstate=no_hwp {" ".join(self.KERNEL_PARAMS)}\n')
else:
log(f"Identifying root partition by PART-UUID on {root_partition}, looking for '{root_partition.uuid}'.", level=logging.DEBUG)
entry.write(f'options root=PARTUUID={root_partition.uuid} rw intel_pstate=no_hwp\n')
entry.write(f'options root=PARTUUID={root_partition.uuid} rw intel_pstate=no_hwp {" ".join(self.KERNEL_PARAMS)}\n')
self.helper_flags['bootloader'] = bootloader
return True
@ -452,14 +464,7 @@ class Installer():
return self.pacstrap(*packages)
def install_profile(self, profile):
# TODO: Replace this with a import archinstall.session instead in the profiles.
# The tricky thing with doing the import archinstall.session instead is that
# profiles might be run from a different chroot, and there's no way we can
# guarantee file-path safety when accessing the installer object that way.
# Doing the __builtins__ replacement, ensures that the global variable "installation"
# is always kept up to date. It's considered a nasty hack - but it's a safe way
# of ensuring 100% accuracy of archinstall session variables.
__builtins__['installation'] = self
storage['installation_session'] = self
if type(profile) == str:
profile = Profile(self, profile)

View File

@ -26,6 +26,8 @@ def list_profiles(filter_irrelevant_macs=True, subpath='', filter_top_level_prof
for PATH_ITEM in storage['PROFILE_PATH']:
for root, folders, files in os.walk(os.path.abspath(os.path.expanduser(PATH_ITEM+subpath))):
for file in files:
if file == '__init__.py':
continue
if os.path.splitext(file)[1] == '.py':
tailored = False
if len(mac := re.findall('(([a-zA-z0-9]{2}[-:]){5}([a-zA-z0-9]{2}))', file)):
@ -36,7 +38,7 @@ def list_profiles(filter_irrelevant_macs=True, subpath='', filter_top_level_prof
description = ''
with open(os.path.join(root, file), 'r') as fh:
first_line = fh.readline()
if first_line[0] == '#':
if len(first_line) and first_line[0] == '#':
description = first_line[1:].strip()
cache[file[:-3]] = {'path' : os.path.join(root, file), 'description' : description, 'tailored' : tailored}

View File

@ -283,8 +283,6 @@ def perform_installation_steps():
partition.format()
else:
archinstall.log(f"Did not format {partition} because .safe_to_format() returned False or .allow_formatting was False.", level=logging.DEBUG)
if hasUEFI():
fs.find_partition('/boot').format('vfat')# we don't have a boot partition in bios mode
if archinstall.arguments.get('!encryption-password', None):
# First encrypt and unlock, then format the desired partition inside the encrypted part.
@ -294,8 +292,8 @@ def perform_installation_steps():
unlocked_device.format(fs.find_partition('/').filesystem)
unlocked_device.mount('/mnt')
else:
fs.find_partition('/').format(fs.find_partition('/').filesystem)
fs.find_partition('/').mount('/mnt')
if hasUEFI():
fs.find_partition('/boot').mount('/mnt/boot')

View File

@ -5,7 +5,7 @@ import urllib.request
__packages__ = ['nano', 'wget', 'git']
if __name__ == '52-54-00-12-34-56':
awesome = archinstall.Application(installation, 'postgresql')
awesome = archinstall.Application(archinstall.storage['installation_session'], 'postgresql')
awesome.install()
"""

View File

@ -2,11 +2,11 @@ import archinstall
__packages__ = ["awesome", "xorg-xrandr", "xterm", "feh", "slock", "terminus-font", "gnu-free-fonts", "ttf-liberation", "xsel"]
installation.install_profile('xorg')
archinstall.storage['installation_session'].install_profile('xorg')
installation.add_additional_packages(__packages__)
archinstall.storage['installation_session'].add_additional_packages(__packages__)
with open(f'{installation.target}/etc/X11/xinit/xinitrc', 'r') as xinitrc:
with open(f"{archinstall.storage['installation_session'].target}/etc/X11/xinit/xinitrc", 'r') as xinitrc:
xinitrc_data = xinitrc.read()
for line in xinitrc_data.split('\n'):
@ -20,5 +20,5 @@ for line in xinitrc_data.split('\n'):
xinitrc_data += '\n'
xinitrc_data += 'exec awesome\n'
with open(f'{installation.target}/etc/X11/xinit/xinitrc', 'w') as xinitrc:
with open(f"{archinstall.storage['installation_session'].target}/etc/X11/xinit/xinitrc", 'w') as xinitrc:
xinitrc.write(xinitrc_data)

View File

@ -4,6 +4,6 @@ import archinstall
# which packages will be installed by this profile
__packages__ = ["cockpit", "udisks2", "packagekit"]
installation.add_additional_packages(__packages__)
archinstall.storage['installation_session'].add_additional_packages(__packages__)
installation.enable_service('cockpit.socket')
archinstall.storage['installation_session'].enable_service('cockpit.socket')

View File

@ -4,6 +4,6 @@ import archinstall
# which packages will be installed by this profile
__packages__ = ["docker"]
installation.add_additional_packages(__packages__)
archinstall.storage['installation_session'].add_additional_packages(__packages__)
installation.enable_service('docker')
archinstall.storage['installation_session'].enable_service('docker')

View File

@ -4,6 +4,6 @@ import archinstall
# which packages will be installed by this profile
__packages__ = ["apache"]
installation.add_additional_packages(__packages__)
archinstall.storage['installation_session'].add_additional_packages(__packages__)
installation.enable_service('httpd')
archinstall.storage['installation_session'].enable_service('httpd')

View File

@ -4,6 +4,6 @@ import archinstall
# which packages will be installed by this profile
__packages__ = ["lighttpd"]
installation.add_additional_packages(__packages__)
archinstall.storage['installation_session'].add_additional_packages(__packages__)
installation.enable_service('lighttpd')
archinstall.storage['installation_session'].enable_service('lighttpd')

View File

@ -4,8 +4,8 @@ import archinstall
# which packages will be installed by this profile
__packages__ = ["mariadb"]
installation.add_additional_packages(__packages__)
archinstall.storage['installation_session'].add_additional_packages(__packages__)
installation.arch_chroot("mariadb-install-db --user=mysql --basedir=/usr --datadir=/var/lib/mysql")
archinstall.storage['installation_session'].arch_chroot("mariadb-install-db --user=mysql --basedir=/usr --datadir=/var/lib/mysql")
installation.enable_service('mariadb')
archinstall.storage['installation_session'].enable_service('mariadb')

View File

@ -4,6 +4,6 @@ import archinstall
# which packages will be installed by this profile
__packages__ = ["nginx"]
installation.add_additional_packages(__packages__)
archinstall.storage['installation_session'].add_additional_packages(__packages__)
installation.enable_service('nginx')
archinstall.storage['installation_session'].enable_service('nginx')

View File

@ -4,8 +4,8 @@ import archinstall
# which packages will be installed by this profile
__packages__ = ["postgresql"]
installation.add_additional_packages(__packages__)
archinstall.storage['installation_session'].add_additional_packages(__packages__)
installation.arch_chroot("initdb -D /var/lib/postgres/data", runas='postgres')
archinstall.storage['installation_session'].arch_chroot("initdb -D /var/lib/postgres/data", runas='postgres')
installation.enable_service('postgresql')
archinstall.storage['installation_session'].enable_service('postgresql')

View File

@ -4,6 +4,6 @@ import archinstall
# which packages will be installed by this profile
__packages__ = ["openssh"]
installation.add_additional_packages(__packages__)
archinstall.storage['installation_session'].add_additional_packages(__packages__)
installation.enable_service('sshd')
archinstall.storage['installation_session'].enable_service('sshd')

View File

@ -7,6 +7,6 @@ import archinstall
# which packages will be installed by this profile
__packages__ = ["tomcat10"]
installation.add_additional_packages(__packages__)
archinstall.storage['installation_session'].add_additional_packages(__packages__)
installation.enable_service('tomcat10')
archinstall.storage['installation_session'].enable_service('tomcat10')

View File

@ -6,7 +6,7 @@ is_top_level_profile = False
# New way of defining packages for a profile, which is iterable and can be used out side
# of the profile to get a list of "what packages will be installed".
__packages__ = ['nemo', 'gpicview-gtk3', 'main', 'alacritty']
__packages__ = ['nemo', 'gpicview', 'main', 'alacritty']
def _prep_function(*args, **kwargs):
"""
@ -30,23 +30,23 @@ def _prep_function(*args, **kwargs):
# or through conventional import awesome
if __name__ == 'awesome':
# Install the application awesome from the template under /applications/
awesome = archinstall.Application(installation, 'awesome')
awesome = archinstall.Application(archinstall.storage['installation_session'], 'awesome')
awesome.install()
installation.add_additional_packages(__packages__)
archinstall.storage['installation_session'].add_additional_packages(__packages__)
# TODO: Copy a full configuration to ~/.config/awesome/rc.lua instead.
with open(f'{installation.target}/etc/xdg/awesome/rc.lua', 'r') as fh:
with open(f"{archinstall.storage['installation_session'].target}/etc/xdg/awesome/rc.lua", 'r') as fh:
awesome_lua = fh.read()
## Replace xterm with alacritty for a smoother experience.
awesome_lua = awesome_lua.replace('"xterm"', '"alacritty"')
with open(f'{installation.target}/etc/xdg/awesome/rc.lua', 'w') as fh:
with open(f"{archinstall.storage['installation_session'].target}/etc/xdg/awesome/rc.lua", 'w') as fh:
fh.write(awesome_lua)
## TODO: Configure the right-click-menu to contain the above packages that were installed. (as a user config)
## Remove some interfering nemo settings
installation.arch_chroot("gsettings set org.nemo.desktop show-desktop-icons false")
installation.arch_chroot("xdg-mime default nemo.desktop inode/directory application/x-gnome-saved-search")
archinstall.storage['installation_session'].arch_chroot("gsettings set org.nemo.desktop show-desktop-icons false")
archinstall.storage['installation_session'].arch_chroot("xdg-mime default nemo.desktop inode/directory application/x-gnome-saved-search")

View File

@ -28,9 +28,9 @@ def _prep_function(*args, **kwargs):
# or through conventional import budgie
if __name__ == 'budgie':
# Install dependency profiles
installation.install_profile('xorg')
archinstall.storage['installation_session'].install_profile('xorg')
# Install the Budgie packages
installation.add_additional_packages(__packages__)
archinstall.storage['installation_session'].add_additional_packages(__packages__)
installation.enable_service('lightdm') # Light Display Manager
archinstall.storage['installation_session'].enable_service('lightdm') # Light Display Manager

View File

@ -27,9 +27,9 @@ def _prep_function(*args, **kwargs):
# or through conventional import cinnamon
if __name__ == 'cinnamon':
# Install dependency profiles
installation.install_profile('xorg')
archinstall.storage['installation_session'].install_profile('xorg')
# Install the Cinnamon packages
installation.add_additional_packages(__packages__)
archinstall.storage['installation_session'].add_additional_packages(__packages__)
installation.enable_service('lightdm') # Light Display Manager
archinstall.storage['installation_session'].enable_service('lightdm') # Light Display Manager

View File

@ -4,7 +4,7 @@ import archinstall, os
is_top_level_profile = False
__packages__ = ["deepin", "deepin-terminal", "deepin-editor"]
__packages__ = ["deepin", "deepin-terminal", "deepin-editor", "lightdm", "lightdm-gtk-greeter"]
def _prep_function(*args, **kwargs):
"""
@ -28,10 +28,10 @@ def _prep_function(*args, **kwargs):
# or through conventional import deepin
if __name__ == 'deepin':
# Install dependency profiles
installation.install_profile('xorg')
archinstall.storage['installation_session'].install_profile('xorg')
# Install the Deepin packages
installation.add_additional_packages(__packages__)
archinstall.storage['installation_session'].add_additional_packages(__packages__)
# Enable autostart of Deepin for all users
installation.enable_service('lightdm')
archinstall.storage['installation_session'].enable_service('lightdm')

View File

@ -16,7 +16,8 @@ def _prep_function(*args, **kwargs):
for more input before any other installer steps start.
"""
supported_desktops = ['gnome', 'kde', 'awesome', 'sway', 'cinnamon', 'xfce4', 'lxqt', 'i3', 'budgie', 'mate']
supported_desktops = ['gnome', 'kde', 'awesome', 'sway', 'cinnamon', 'xfce4', 'lxqt', 'i3', 'budgie', 'mate', 'deepin', 'enlightenment']
desktop = archinstall.generic_select(supported_desktops, 'Select your desired desktop environment: ',
allow_empty_input=False, sort=True)
@ -48,9 +49,7 @@ if __name__ == 'desktop':
"""
# Install common packages for all desktop environments
installation.add_additional_packages(__packages__)
# TODO: Remove magic variable 'installation' and place it
# in archinstall.storage or archinstall.session/archinstall.installation
installation.install_profile(archinstall.storage['_desktop_profile'])
archinstall.storage['installation_session'].add_additional_packages(__packages__)
archinstall.storage['installation_session'].install_profile(archinstall.storage['_desktop_profile'])

37
profiles/enlightenment.py Normal file
View File

@ -0,0 +1,37 @@
# A desktop environment using "Enlightenment".
import archinstall, os
is_top_level_profile = False
__packages__ = ["enlightenment", "terminology", "lightdm", "lightdm-gtk-greeter"]
def _prep_function(*args, **kwargs):
"""
Magic function called by the importing installer
before continuing any further. It also avoids executing any
other code in this stage. So it's a safe way to ask the user
for more input before any other installer steps start.
"""
# Enlightenment requires a functioning Xorg installation.
profile = archinstall.Profile(None, 'xorg')
with profile.load_instructions(namespace='xorg.py') as imported:
if hasattr(imported, '_prep_function'):
return imported._prep_function()
else:
print('Deprecated (??): xorg profile has no _prep_function() anymore')
# Ensures that this code only gets executed if executed
# through importlib.util.spec_from_file_location("enlightenment", "/somewhere/enlightenment.py")
# or through conventional import enlightenment
if __name__ == 'enlightenment':
# Install dependency profiles
archinstall.storage['installation_session'].install_profile('xorg')
# Install the enlightenment packages
archinstall.storage['installation_session'].add_additional_packages(__packages__)
# Enable autostart of enlightenment for all users
archinstall.storage['installation_session'].enable_service('lightdm')

View File

@ -29,11 +29,11 @@ def _prep_function(*args, **kwargs):
# or through conventional import gnome
if __name__ == 'gnome':
# Install dependency profiles
installation.install_profile('xorg')
archinstall.storage['installation_session'].install_profile('xorg')
# Install the GNOME packages
installation.add_additional_packages(__packages__)
archinstall.storage['installation_session'].add_additional_packages(__packages__)
installation.enable_service('gdm') # Gnome Display Manager
archinstall.storage['installation_session'].enable_service('gdm') # Gnome Display Manager
# We could also start it via xinitrc since we do have Xorg,
# but for gnome that's deprecated and wayland is preferred.

View File

@ -48,16 +48,16 @@ if __name__ == 'i3':
"""
# Install common packages for all i3 configurations
installation.add_additional_packages(__packages__[:4])
archinstall.storage['installation_session'].add_additional_packages(__packages__[:4])
# Install dependency profiles
installation.install_profile('xorg')
archinstall.storage['installation_session'].install_profile('xorg')
# gaps is installed by deafult so we are overriding it here with lightdm
installation.add_additional_packages(__packages__[4:])
archinstall.storage['installation_session'].add_additional_packages(__packages__[4:])
# Auto start lightdm for all users
installation.enable_service('lightdm')
archinstall.storage['installation_session'].enable_service('lightdm')
# install the i3 group now
installation.add_additional_packages(archinstall.storage['_i3_configuration'])
archinstall.storage['installation_session'].add_additional_packages(archinstall.storage['_i3_configuration'])

View File

@ -37,10 +37,10 @@ def _post_install(*args, **kwargs):
# or through conventional import kde
if __name__ == 'kde':
# Install dependency profiles
installation.install_profile('xorg')
archinstall.storage['installation_session'].install_profile('xorg')
# Install the KDE packages
installation.add_additional_packages(__packages__)
archinstall.storage['installation_session'].add_additional_packages(__packages__)
# Enable autostart of KDE for all users
installation.enable_service('sddm')
archinstall.storage['installation_session'].enable_service('sddm')

View File

@ -28,9 +28,9 @@ def _prep_function(*args, **kwargs):
# or through conventional import lxqt
if __name__ == 'lxqt':
# Install dependency profiles
installation.install_profile('xorg')
archinstall.storage['installation_session'].install_profile('xorg')
# Install the LXQt packages
installation.add_additional_packages(__packages__)
archinstall.storage['installation_session'].add_additional_packages(__packages__)
installation.enable_service('sddm') # SDDM Display Manager
archinstall.storage['installation_session'].enable_service('sddm') # SDDM Display Manager

View File

@ -27,9 +27,9 @@ def _prep_function(*args, **kwargs):
# or through conventional import mate
if __name__ == 'mate':
# Install dependency profiles
installation.install_profile('xorg')
archinstall.storage['installation_session'].install_profile('xorg')
# Install the MATE packages
installation.add_additional_packages(__packages__)
archinstall.storage['installation_session'].add_additional_packages(__packages__)
installation.enable_service('lightdm') # Light Display Manager
archinstall.storage['installation_session'].enable_service('lightdm') # Light Display Manager

View File

@ -24,7 +24,7 @@ if __name__ == 'server':
archinstall.log(archinstall.storage['_selected_servers'], level=logging.DEBUG)
for server in archinstall.storage['_selected_servers']:
archinstall.log(f'Installing {server} ...', level=logging.INFO)
app = archinstall.Application(installation, server)
app = archinstall.Application(archinstall.storage['installation_session'], server)
app.install()
archinstall.log('If your selections included multiple servers with the same port, you may have to reconfigure them.', fg="yellow", level=logging.INFO)

View File

@ -44,7 +44,7 @@ if __name__ == "sway":
)
# Install the Sway packages
installation.add_additional_packages(__packages__)
archinstall.storage['installation_session'].add_additional_packages(__packages__)
# Install the graphics driver packages
installation.add_additional_packages(_gfx_driver_packages)
archinstall.storage['installation_session'].add_additional_packages(_gfx_driver_packages)

View File

@ -28,9 +28,9 @@ def _prep_function(*args, **kwargs):
# or through conventional import xfce4
if __name__ == 'xfce4':
# Install dependency profiles
installation.install_profile('xorg')
archinstall.storage['installation_session'].install_profile('xorg')
# Install the XFCE4 packages
installation.add_additional_packages(__packages__)
archinstall.storage['installation_session'].add_additional_packages(__packages__)
installation.enable_service('lightdm') # Light Display Manager
archinstall.storage['installation_session'].enable_service('lightdm') # Light Display Manager

View File

@ -28,22 +28,12 @@ def _prep_function(*args, **kwargs):
if __name__ == 'xorg':
try:
if "nvidia" in _gfx_driver_packages:
if "linux-zen" in installation.base_packages or "linux-lts" in installation.base_packages:
installation.add_additional_packages("dkms")#I've had kernel regen fail if it wasn't installed before nvidia-dkms
installation.add_additional_packages("xorg-server xorg-xinit nvidia-dkms")
if "linux-zen" in archinstall.storage['installation_session'].base_packages or "linux-lts" in archinstall.storage['installation_session'].base_packages:
archinstall.storage['installation_session'].add_additional_packages("dkms")#I've had kernel regen fail if it wasn't installed before nvidia-dkms
archinstall.storage['installation_session'].add_additional_packages("xorg-server xorg-xinit nvidia-dkms")
else:
installation.add_additional_packages(f"xorg-server xorg-xinit {' '.join(_gfx_driver_packages)}")
archinstall.storage['installation_session'].add_additional_packages(f"xorg-server xorg-xinit {' '.join(_gfx_driver_packages)}")
else:
installation.add_additional_packages(f"xorg-server xorg-xinit {' '.join(_gfx_driver_packages)}")
archinstall.storage['installation_session'].add_additional_packages(f"xorg-server xorg-xinit {' '.join(_gfx_driver_packages)}")
except:
installation.add_additional_packages(f"xorg-server xorg-xinit") # Prep didn't run, so there's no driver to install
# with open(f'{installation.mountpoint}/etc/X11/xinit/xinitrc', 'a') as X11:
# X11.write('setxkbmap se\n')
# with open(f'{installation.mountpoint}/etc/vconsole.conf', 'a') as vconsole:
# vconsole.write('KEYMAP={keyboard_layout}\n'.format(**arguments))
# vconsole.write('FONT=lat9w-16\n')
# awesome = archinstall.Application(installation, 'awesome')
# awesome.install()
archinstall.storage['installation_session'].add_additional_packages(f"xorg-server xorg-xinit") # Prep didn't run, so there's no driver to install