From 534679e88f0b9db9d2550de73197f521494a3274 Mon Sep 17 00:00:00 2001 From: Anton Hvornum Date: Wed, 30 Sep 2020 12:31:47 +0000 Subject: Added gnome as a profile (and application for application specific steps). Also tweaked xorg to not be so intrusive when used for anything other than awesome WM. Tweaked awesome WM to accomodate this change. --- profiles/applications/awesome.py | 12 ++---------- profiles/applications/gnome.py | 4 ++++ profiles/awesome.py | 34 ++++++++++++++++++++++++++++++++-- profiles/gnome.py | 35 +++++++++++++++++++++++++++++++++++ profiles/xorg.py | 8 +++++++- 5 files changed, 80 insertions(+), 13 deletions(-) create mode 100644 profiles/applications/gnome.py create mode 100644 profiles/gnome.py diff --git a/profiles/applications/awesome.py b/profiles/applications/awesome.py index d81f6283..72945275 100644 --- a/profiles/applications/awesome.py +++ b/profiles/applications/awesome.py @@ -1,6 +1,6 @@ import archinstall -installation.add_additional_packages("awesome xorg-server xorg-xrandr xorg-xinit xterm feh slock xscreensaver terminus-font-otb gnu-free-fonts ttf-liberation xsel") +installation.add_additional_packages("awesome xorg-xrandr xterm feh slock terminus-font-otb gnu-free-fonts ttf-liberation xsel") with open(f'{installation.mountpoint}/etc/X11/xinit/xinitrc', 'r') as xinitrc: xinitrc_data = xinitrc.read() @@ -11,7 +11,6 @@ for line in xinitrc_data.split('\n'): if 'xterm' in line: xinitrc_data = xinitrc_data.replace(line, f"# {line}") xinitrc_data += '\n' -xinitrc_data += 'xscreensaver -no-splash &\n' xinitrc_data += 'exec awesome\n' with open(f'{installation.mountpoint}/etc/X11/xinit/xinitrc', 'w') as xinitrc: @@ -21,13 +20,6 @@ with open(f'{installation.mountpoint}/etc/xdg/awesome/rc.lua', 'r') as awesome_r awesome = awesome_rc_lua.read() awesome = awesome.replace('xterm', 'xterm -ls -xrm \\"XTerm*selectToClipboard: true\\"') -#awesome = awesome.replace('{ "open terminal", terminal, ','{ "Chromium", "chromium" },\n "open terminal", terminal, ') -#awesome = awesome.replace('{ "open terminal", terminal, ', '{ "File handler", "nemo" },\n "open terminal", terminal, ') -awesome = awesome.replace('\nglobalkeys = gears.table.join(', 'globalkeys = gears.table.join(\n awful.key({ modkey, }, \"l\", function() awful.spawn(\"xscreensaver-command -lock &\") end,\n') -# "awk -i inplace -v RS='' '{gsub(/awful.key\\({ modkey,.*?}, \"Tab\",.*?\"client\"}\\),/, \"awful.key({ modkey, }, \"Tab\",\n function ()\n awful.client.focus.byidx(-1)\n if client.focus then\n client.focus:raise()\n end\n end),\n awful.key({ modkey, \"Shift\" }, \"Tab\",\n function ()\n awful.client.focus.byidx(1)\n if client.focus then\n client.focus.raise()\n end\n end),\"); print}' {installation.mountpoint}/etc/xdg/awesome/rc.lua" : {"no-chroot" : true}, with open(f'{installation.mountpoint}/etc/xdg/awesome/rc.lua', 'w') as awesome_rc_lua: - awesome_rc_lua.write(awesome) - -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') \ No newline at end of file + awesome_rc_lua.write(awesome) \ No newline at end of file diff --git a/profiles/applications/gnome.py b/profiles/applications/gnome.py new file mode 100644 index 00000000..1f2a20a1 --- /dev/null +++ b/profiles/applications/gnome.py @@ -0,0 +1,4 @@ +import archinstall + +installation.add_additional_packages("gnome gnome-extra gdm") # We'll create a gnome-minimal later, but for now, we'll avoid issues by giving more than we need. +# Note: gdm should be part of the gnome group, but adding it here for clarity \ No newline at end of file diff --git a/profiles/awesome.py b/profiles/awesome.py index 9b831394..7e8c759d 100644 --- a/profiles/awesome.py +++ b/profiles/awesome.py @@ -10,6 +10,7 @@ def _prep_function(*args, **kwargs): for more input before any other installer steps start. """ + # Awesome WM requires that xorg is installed profile = archinstall.Profile(None, 'xorg') with profile.load_instructions(namespace='xorg.py') as imported: if hasattr(imported, '_prep_function'): @@ -24,6 +25,11 @@ if __name__ == 'awesome': # Install dependency profiles installation.install_profile('xorg') + # Install the application awesome from the template under /applications/ + awesome = archinstall.Application(installation, 'awesome') + awesome.install() + + # Then setup and configure the desktop environment: awesome arguments = { 'keyboard_layout' : 'sv-latin1', "editor" : "nano", @@ -45,5 +51,29 @@ if __name__ == 'awesome': vconsole.write('KEYMAP={keyboard_layout}\n'.format(**arguments)) vconsole.write('FONT=lat9w-16\n') - awesome = archinstall.Application(installation, 'awesome') - awesome.install() \ No newline at end of file + + with open(f'{installation.mountpoint}/etc/xdg/awesome/rc.lua', 'r') as awesome_rc_lua: + awesome_lua = awesome_rc_lua.read() + + # Insert slock as a shortcut on Modkey+l (window+l) + awesome_lua = awesome_lua.replace('\nglobalkeys = gears.table.join(', 'globalkeys = gears.table.join(\n awful.key({ modkey, }, \"l\", function() awful.spawn(\"slock &\") end,\n') + + # Insert some useful applications: + #awesome = awesome.replace('{ "open terminal", terminal, ','{ "Chromium", "chromium" },\n "open terminal", terminal, ') + #awesome = awesome.replace('{ "open terminal", terminal, ', '{ "File handler", "nemo" },\n "open terminal", terminal, ') + + # Insert "normal" alt-tab via Modkey+Tab that most new users are used to + # "awk -i inplace -v RS='' '{gsub(/awful.key\\({ modkey,.*?}, \"Tab\",.*?\"client\"}\\),/, \"awful.key({ modkey, }, \"Tab\",\n function ()\n awful.client.focus.byidx(-1)\n if client.focus then\n client.focus:raise()\n end\n end),\n awful.key({ modkey, \"Shift\" }, \"Tab\",\n function ()\n awful.client.focus.byidx(1)\n if client.focus then\n client.focus.raise()\n end\n end),\"); print}' {installation.mountpoint}/etc/xdg/awesome/rc.lua" : {"no-chroot" : true}, + + +# Add changes here to the awesome's rc.lua +# Alternatively, create a custom config under installation.mountpoint/usr/share/awesome/themes + + + + with open(f'{installation.mountpoint}/etc/xdg/awesome/rc.lua', 'w') as awesome_rc_lua: + awesome_rc_lua.write(awesome_lua) + + # 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') \ No newline at end of file diff --git a/profiles/gnome.py b/profiles/gnome.py new file mode 100644 index 00000000..0481eded --- /dev/null +++ b/profiles/gnome.py @@ -0,0 +1,35 @@ +# A desktop environemtn using "Awesome" window manager. + +import archinstall + +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. + """ + + # Gnome optionally supports xorg, we'll install it since it also + # includes graphic driver setups (this might change in the future) + 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("awesome", "/somewhere/awesome.py") +# or through conventional import awesome +if __name__ == 'awesome': + # Install dependency profiles + installation.install_profile('xorg') + + # Install the application gnome from the template under /applications/ + gnome = archinstall.Application(installation, 'gnome') + gnome.install() + + installation.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. \ No newline at end of file diff --git a/profiles/xorg.py b/profiles/xorg.py index 38492c5c..1cba7a81 100644 --- a/profiles/xorg.py +++ b/profiles/xorg.py @@ -93,13 +93,19 @@ def _prep_function(*args, **kwargs): __builtins__['_gfx_driver_packages'] = select_driver(AVAILABLE_DRIVERS) + # TODO: Add language section and/or merge it with the locale selected + # earlier in for instance guided.py installer. + return True # Ensures that this code only gets executed if executed # through importlib.util.spec_from_file_location("xorg", "/somewhere/xorg.py") # or through conventional import xorg if __name__ == 'xorg': - installation.add_additional_packages("xorg-server xorg-xinit") + try: + installation.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') -- cgit v1.2.3-54-g00ecf