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.
|
'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 = []
|
self.post_base_install = []
|
||||||
storage['session'] = self
|
storage['session'] = self
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -177,6 +177,52 @@ class Profile(Script):
|
||||||
if hasattr(imported, '_prep_function'):
|
if hasattr(imported, '_prep_function'):
|
||||||
return True
|
return True
|
||||||
return False
|
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):
|
class Application(Profile):
|
||||||
def __repr__(self, *args, **kwargs):
|
def __repr__(self, *args, **kwargs):
|
||||||
|
|
|
||||||
|
|
@ -24,6 +24,9 @@ Locale related
|
||||||
|
|
||||||
.. autofunction:: archinstall.set_keyboard_language
|
.. autofunction:: archinstall.set_keyboard_language
|
||||||
|
|
||||||
|
..
|
||||||
|
autofunction:: archinstall.Installer.set_keyboard_layout
|
||||||
|
|
||||||
Services
|
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.
|
| **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.
|
| 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
|
Guided installation
|
||||||
===================
|
===================
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,7 @@
|
||||||
import getpass, time, json, sys, signal, os
|
import getpass, time, json, sys, signal, os
|
||||||
import archinstall
|
import archinstall
|
||||||
|
from archinstall.lib.hardware import hasUEFI
|
||||||
|
from archinstall.lib.profiles import Profile
|
||||||
|
|
||||||
"""
|
"""
|
||||||
This signal-handler chain (and global variable)
|
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)
|
# Ask for archinstall-specific profiles (such as desktop environments etc)
|
||||||
if not archinstall.arguments.get('profile', None):
|
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:
|
else:
|
||||||
archinstall.arguments['profile'] = archinstall.list_profiles()[archinstall.arguments['profile']]
|
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
|
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
|
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):
|
def _prep_function(*args, **kwargs):
|
||||||
"""
|
"""
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,8 @@
|
||||||
|
|
||||||
import archinstall, os
|
import archinstall, os
|
||||||
|
|
||||||
|
is_top_level_profile = True
|
||||||
|
|
||||||
def _prep_function(*args, **kwargs):
|
def _prep_function(*args, **kwargs):
|
||||||
"""
|
"""
|
||||||
Magic function called by the importing installer
|
Magic function called by the importing installer
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,8 @@
|
||||||
|
|
||||||
import archinstall
|
import archinstall
|
||||||
|
|
||||||
|
is_top_level_profile = False
|
||||||
|
|
||||||
def _prep_function(*args, **kwargs):
|
def _prep_function(*args, **kwargs):
|
||||||
"""
|
"""
|
||||||
Magic function called by the importing installer
|
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
|
import archinstall, os
|
||||||
|
|
||||||
|
is_top_level_profile = False
|
||||||
|
|
||||||
# TODO: Remove hard dependency of bash (due to .bash_profile)
|
# TODO: Remove hard dependency of bash (due to .bash_profile)
|
||||||
|
|
||||||
def _prep_function(*args, **kwargs):
|
def _prep_function(*args, **kwargs):
|
||||||
|
|
@ -20,6 +22,14 @@ def _prep_function(*args, **kwargs):
|
||||||
else:
|
else:
|
||||||
print('Deprecated (??): xorg profile has no _prep_function() anymore')
|
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
|
# Ensures that this code only gets executed if executed
|
||||||
# through importlib.util.spec_from_file_location("kde", "/somewhere/kde.py")
|
# through importlib.util.spec_from_file_location("kde", "/somewhere/kde.py")
|
||||||
# or through conventional import kde
|
# 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
|
import archinstall, os
|
||||||
|
|
||||||
|
is_top_level_profile = True
|
||||||
|
|
||||||
AVAILABLE_DRIVERS = {
|
AVAILABLE_DRIVERS = {
|
||||||
# Sub-dicts are layer-2 options to be selected
|
# Sub-dicts are layer-2 options to be selected
|
||||||
# and lists are a list of packages to be installed
|
# and lists are a list of packages to be installed
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue