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.

This commit is contained in:
Anton Hvornum 2020-09-30 12:31:47 +00:00
parent 7f7cb6b89b
commit 534679e88f
5 changed files with 80 additions and 13 deletions

View File

@ -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')
awesome_rc_lua.write(awesome)

View File

@ -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

View File

@ -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()
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')

35
profiles/gnome.py Normal file
View File

@ -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.

View File

@ -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')