Merging in quality of life improvements from 2.2.0 into 2.1.4 (master)
Selectively bringing in quality of life improvements from v2.2.0 work into master
This commit is contained in:
commit
d988d81690
|
|
@ -52,7 +52,7 @@ class Installer():
|
|||
'user' : False # Root counts as a user, if additional users are skipped.
|
||||
}
|
||||
|
||||
self.base_packages = base_packages.split(' ')
|
||||
self.base_packages = base_packages.split(' ') if type(base_packages) is str else base_packages
|
||||
self.post_base_install = []
|
||||
storage['session'] = self
|
||||
|
||||
|
|
|
|||
|
|
@ -177,6 +177,52 @@ class Profile(Script):
|
|||
if hasattr(imported, '_prep_function'):
|
||||
return True
|
||||
return False
|
||||
"""
|
||||
def has_post_install(self):
|
||||
with open(self.path, 'r') as source:
|
||||
source_data = source.read()
|
||||
|
||||
# Some crude safety checks, make sure the imported profile has
|
||||
# a __name__ check and if so, check if it's got a _prep_function()
|
||||
# we can call to ask for more user input.
|
||||
#
|
||||
# If the requirements are met, import with .py in the namespace to not
|
||||
# trigger a traditional:
|
||||
# if __name__ == 'moduleName'
|
||||
if '__name__' in source_data and '_post_install' in source_data:
|
||||
with self.load_instructions(namespace=f"{self.namespace}.py") as imported:
|
||||
if hasattr(imported, '_post_install'):
|
||||
return True
|
||||
"""
|
||||
|
||||
def is_top_level_profile(self):
|
||||
with open(self.path, 'r') as source:
|
||||
source_data = source.read()
|
||||
|
||||
# TODO: I imagine that there is probably a better way to write this.
|
||||
return 'top_level_profile = True' in source_data
|
||||
|
||||
@property
|
||||
def packages(self) -> list:
|
||||
"""
|
||||
Returns a list of packages baked into the profile definition.
|
||||
If no package definition has been done, .packages() will return None.
|
||||
"""
|
||||
with open(self.path, 'r') as source:
|
||||
source_data = source.read()
|
||||
|
||||
# Some crude safety checks, make sure the imported profile has
|
||||
# a __name__ check before importing.
|
||||
#
|
||||
# If the requirements are met, import with .py in the namespace to not
|
||||
# trigger a traditional:
|
||||
# if __name__ == 'moduleName'
|
||||
if '__name__' in source_data and '__packages__' in source_data:
|
||||
with self.load_instructions(namespace=f"{self.namespace}.py") as imported:
|
||||
if hasattr(imported, '__packages__'):
|
||||
return imported.__packages__
|
||||
return None
|
||||
|
||||
|
||||
class Application(Profile):
|
||||
def __repr__(self, *args, **kwargs):
|
||||
|
|
|
|||
|
|
@ -24,6 +24,9 @@ Locale related
|
|||
|
||||
.. autofunction:: archinstall.set_keyboard_language
|
||||
|
||||
..
|
||||
autofunction:: archinstall.Installer.set_keyboard_layout
|
||||
|
||||
Services
|
||||
========
|
||||
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ python-archinstall Documentation
|
|||
================================
|
||||
|
||||
| **python-archinstall** *(or, archinstall for short)* is a helper library to install Arch Linux and manage services, packages and other things.
|
||||
| It comes packaged with different pre-configured installers, such as the :ref:`guided <installing.guided>` installer.
|
||||
| It comes packaged with different pre-configured installers, such as the `Guided installation`_ installer.
|
||||
|
|
||||
| A demo can be viewed here: `https://www.youtube.com/watch?v=9Xt7X_Iqg6E <https://www.youtube.com/watch?v=9Xt7X_Iqg6E>`_ which uses the default guided installer.
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,3 @@
|
|||
.. _installing.guided:
|
||||
|
||||
Guided installation
|
||||
===================
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,7 @@
|
|||
import getpass, time, json, sys, signal, os
|
||||
import archinstall
|
||||
from archinstall.lib.hardware import hasUEFI
|
||||
from archinstall.lib.profiles import Profile
|
||||
|
||||
"""
|
||||
This signal-handler chain (and global variable)
|
||||
|
|
@ -166,7 +168,7 @@ def ask_user_questions():
|
|||
|
||||
# Ask for archinstall-specific profiles (such as desktop environments etc)
|
||||
if not archinstall.arguments.get('profile', None):
|
||||
archinstall.arguments['profile'] = archinstall.select_profile(archinstall.list_profiles())
|
||||
archinstall.arguments['profile'] = archinstall.select_profile(filter(lambda profile: (Profile(None, profile).is_top_level_profile()), archinstall.list_profiles()))
|
||||
else:
|
||||
archinstall.arguments['profile'] = archinstall.list_profiles()[archinstall.arguments['profile']]
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +0,0 @@
|
|||
import archinstall
|
||||
packages = "plasma-meta kde-applications-meta plasma-wayland-session sddm"
|
||||
# if the package selection can be reduced go for it
|
||||
if "nvidia" in _gfx_driver_packages:
|
||||
packages = packages + " egl-wayland"
|
||||
installation.add_additional_packages(packages)
|
||||
# We'll support plasma-desktop-wayland (minimal) later
|
||||
|
|
@ -1,2 +1,5 @@
|
|||
import archinstall
|
||||
installation.add_additional_packages("plasma-meta kde-applications-meta sddm") # We'll support plasma-desktop (minimal) later iirc sddm should be part of plasma-meta
|
||||
packages = "plasma-meta konsole kate dolphin sddm plasma-wayland-session"
|
||||
if "nvidia" in _gfx_driver_packages:
|
||||
packages = packages + " egl-wayland"
|
||||
installation.add_additional_packages(packages)
|
||||
|
|
|
|||
|
|
@ -2,6 +2,11 @@
|
|||
|
||||
import archinstall
|
||||
|
||||
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__ = ['nano', 'nemo', 'gpicview-gtk3', 'openssh', 'sshfs', 'htop', 'scrot', 'wget']
|
||||
|
||||
def _prep_function(*args, **kwargs):
|
||||
"""
|
||||
|
|
|
|||
|
|
@ -2,6 +2,8 @@
|
|||
|
||||
import archinstall, os
|
||||
|
||||
is_top_level_profile = True
|
||||
|
||||
def _prep_function(*args, **kwargs):
|
||||
"""
|
||||
Magic function called by the importing installer
|
||||
|
|
|
|||
|
|
@ -2,6 +2,8 @@
|
|||
|
||||
import archinstall
|
||||
|
||||
is_top_level_profile = False
|
||||
|
||||
def _prep_function(*args, **kwargs):
|
||||
"""
|
||||
Magic function called by the importing installer
|
||||
|
|
|
|||
|
|
@ -1,34 +0,0 @@
|
|||
# A desktop environment using "KDE".
|
||||
import archinstall, os
|
||||
|
||||
# TODO: Remove hard dependency of bash (due to .bash_profile)
|
||||
|
||||
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.
|
||||
"""
|
||||
|
||||
# KDE 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("kde", "/somewhere/kde.py")
|
||||
# or through conventional import kde
|
||||
if __name__ == 'kde-wayland':
|
||||
# Install dependency profiles
|
||||
installation.install_profile('xorg')
|
||||
|
||||
# Install the application kde from the template under /applications/
|
||||
kde = archinstall.Application(installation, 'kde-wayland')
|
||||
kde.install()
|
||||
print("when you login, select Plasma (Wayland) for the wayland session")
|
||||
# Enable autostart of KDE for all users
|
||||
installation.enable_service('sddm')
|
||||
|
|
@ -2,6 +2,8 @@
|
|||
|
||||
import archinstall, os
|
||||
|
||||
is_top_level_profile = False
|
||||
|
||||
# TODO: Remove hard dependency of bash (due to .bash_profile)
|
||||
|
||||
def _prep_function(*args, **kwargs):
|
||||
|
|
@ -20,6 +22,14 @@ def _prep_function(*args, **kwargs):
|
|||
else:
|
||||
print('Deprecated (??): xorg profile has no _prep_function() anymore')
|
||||
|
||||
"""
|
||||
def _post_install(*args, **kwargs):
|
||||
if "nvidia" in _gfx_driver_packages:
|
||||
print("Plasma Wayland has known compatibility issues with the proprietary Nvidia driver")
|
||||
print("After booting, you can choose between Wayland and Xorg using the drop-down menu")
|
||||
return True
|
||||
"""
|
||||
|
||||
# Ensures that this code only gets executed if executed
|
||||
# through importlib.util.spec_from_file_location("kde", "/somewhere/kde.py")
|
||||
# or through conventional import kde
|
||||
|
|
|
|||
|
|
@ -0,0 +1,20 @@
|
|||
# Used to do a minimal install
|
||||
|
||||
import archinstall, os
|
||||
|
||||
is_top_level_profile = True
|
||||
|
||||
def _prep_function(*args, **kwargs):
|
||||
"""
|
||||
Magic function called by the importing installer
|
||||
before continuing any further. For minimal install,
|
||||
we don't need to do anything special here, but it
|
||||
needs to exist and return True.
|
||||
"""
|
||||
return True # Do nothing and just return True
|
||||
|
||||
if __name__ == 'minimal':
|
||||
"""
|
||||
This "profile" is a meta-profile.
|
||||
It is used for a custom minimal installation, without any desktop-specific packages.
|
||||
"""
|
||||
|
|
@ -2,6 +2,8 @@
|
|||
|
||||
import archinstall, os
|
||||
|
||||
is_top_level_profile = True
|
||||
|
||||
AVAILABLE_DRIVERS = {
|
||||
# Sub-dicts are layer-2 options to be selected
|
||||
# and lists are a list of packages to be installed
|
||||
|
|
|
|||
Loading…
Reference in New Issue