From 7448881582c69e4251cc60bade83a8ea853a4e21 Mon Sep 17 00:00:00 2001 From: Anton Hvornum Date: Wed, 30 Sep 2020 18:23:27 +0200 Subject: Added KDE profile (untested) --- profiles/applications/kde.py | 21 +++++++++++++++++++ profiles/kde.py | 49 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 70 insertions(+) create mode 100644 profiles/applications/kde.py create mode 100644 profiles/kde.py diff --git a/profiles/applications/kde.py b/profiles/applications/kde.py new file mode 100644 index 00000000..8193a7ae --- /dev/null +++ b/profiles/applications/kde.py @@ -0,0 +1,21 @@ +import archinstall + +installation.add_additional_packages("plasma-meta kde-applications-meta") # We'll support plasma-desktop (minimal) later + +with open(f'{installation.mountpoint}/etc/X11/xinit/xinitrc', 'r') as xinitrc: + xinitrc_data = xinitrc.read() + +# Remove Xorg defaults +for line in xinitrc_data.split('\n'): + if 'twm &' in line: xinitrc_data = xinitrc_data.replace(line, f"# {line}") + if 'xclock' in line: xinitrc_data = xinitrc_data.replace(line, f"# {line}") + if 'xterm' in line: xinitrc_data = xinitrc_data.replace(line, f"# {line}") + +# Add the KDE specifics +xinitrc_data += '\n' +xinitrc_data += 'export DESKTOP_SESSION=plasma\n' +xinitrc_data += 'exec startplasma-x11\n' + +# And save it +with open(f'{installation.mountpoint}/etc/X11/xinit/xinitrc', 'w') as xinitrc: + xinitrc.write(xinitrc_data) \ No newline at end of file diff --git a/profiles/kde.py b/profiles/kde.py new file mode 100644 index 00000000..53ab52d6 --- /dev/null +++ b/profiles/kde.py @@ -0,0 +1,49 @@ +# A desktop environemtn using "Awesome" window manager. + +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': + # Install dependency profiles + installation.install_profile('xorg') + + # Install the application kde from the template under /applications/ + kde = archinstall.Application(installation, 'kde') + kde.install() + + # Enable autostart of KDE for all users + # (there's no handy service like Gnome, so we'll hack it) + for root, folders, files in os.walk(f'{installation.mountpoint}/home'): + for home in folders: + with open(os.path.join(root, f"{home}/.bash_profile"), 'a') as bash_profile: + bash_profile.write('\n') + bash_profile.write('if [[ ! $DISPLAY && $XDG_VTNR -eq 1 ]]; then\n') + bash_profile.write(' exec startx\n') # Possibly do 'startx' only to remain logged in if KDE crashes. + bash_profile.write('fi\n') + break + + with open(f'{mountpoint}/etc/skel/.bash_profile', 'a') as bash_profile: + bash_profile.write('\n') + bash_profile.write('if [[ ! $DISPLAY && $XDG_VTNR -eq 1 ]]; then\n') + bash_profile.write(' exec startx\n') # Possibly do 'startx' only to remain logged in if KDE crashes. + bash_profile.write('fi\n') \ No newline at end of file -- cgit v1.2.3-70-g09d2