Introduction

"Development Release 17 of the Enlightenment window manager represents an evolution into the next generation of desktop environments: the desktop shell. DR17 will provide integration between files and your environment in a seamless manner while encompassing a graphically rich and flexible architecture. It will not compete with GNOME or KDE, but be a completely new way of visualizing your desktop, based around the EFL which was built from the ground up for this task."

Warning: Enlightenment development has moved to SVN. The CVS doesn't have newest code anymore.

Warning: You need to emerge dev-util/subversion with the "webdav-neon" or "webdav-serf" USE flags enabled.

Warning:CVS versions are bleeding-edge, and may not compile, run, or work as you expect.

Warning: When some changes are introduced in the code, changes to the configuration might also be required. These changes are not always backwards compatible which will result in a reset of your E17 settings, effectively destroying your ~/.e directory. You will be notified by E17 when this happens but not in advance. Keep backups of your favorite backgrounds!

Note: Thanks for all your kind offers for mirroring the Enlightenment sites. We currently have enough mirrors, but if you would like to help with our next round of expansion you can contact Andy.

There are two major versions of Enlightenment, Enlightenment 0.16 (x11-wm/enlightenment) and Enlightenment 0.17. The purpose of this article is to guide you through the emerge and maintenance of an Enlightenment 0.17 setup. You should note that E17, DR17(Development Release) and plain E are references to Enlightenment 0.17, these are commonly used in the Enlightenment community and throughout this article.

Installation

Warning: This article holds many scripts and command line examples; as a rule of thumb, do not copy/paste commands without fully understanding them, especially as root. Remember, with great power comes great responsibility.

Preparing

The Enlightenment ebuilds are part of Vapier's Dev Overlay so the first thing you should do is add the enlightenment overlay through layman. You will also need to install cvs in order for Vapier's Dev Overlay to show up(as enlightenment) and later to fetch the files from the CVS repository.

Warning: The default layman storage directory is /usr/portage/local/layman. You can change this setting and others in /etc/layman/layman.cfg; if you do, remember your specific paths throughout this article.

Once the overlay is added you need to use the appropriate package.keywords. There are two package.keywords supplied with the enlightenment overlay; one for "live" CVS ebuilds[1] and one for CVS snapshot ebuilds [2] .

The easiest way to use these is to have a /etc/portage/package.keywords directory instead of the one regular file. Then symlink the appropriate package.keywords to /etc/portage/package.keywords/,

but this is not recommended, since it would force you to manually maintain it when the overlay changes.

Emerging

Before you start your emerge of E17 you should check that everything is in order with the --pretend and --verbose options.

# emerge -pv e

Note: Make sure the "X" and "png" and "jpeg" USE-flag are enabled in all enlightenment ebuilds.

Check that the ebuilds have the USE-flags you prefer enabled. If you feel that they do not, refer to the USE-flags FAQ for instructions on USE-flag handling.
At this step it's also a good idea to double check that the ebuilds are ending with -9999 if you are using the LiveCVS package.keywords entries or -0.9.9.* if you are using the snapshot package.keywords entries, and said ebuilds should be emerged from overlay "/usr/portage/local/layman/enlightenment", if they are not, review the Preparing chapter again and look for typos and errors in your /etc/portage/package.keywords.

When you are satisfied with the results of emerge -pv, it's time for the actual emerge.
To be on the safe side, you should emerge with the --ask option.

# emerge -av e

If emerge didn't halt due to broken code from the CVS repository, you should have successfully emerged E17. If emerge fails, you may wait about one day for code to get fixed, and try again the same emerge command.

If any e_module emerge fails or if you are having issues while emerging in general, start by reading the Enlightenment Overlay page for possible fixes and solutions.

CVS Update

Note: Please do not update E17 every day, CVS checkouts can put a lot of strain on the CVS servers.

Note: It is strongly advised that you sync your layman overlay before you update,

$ layman --sync=enlightenment

The scripts below does this for you.

The code in CVS is in a constant state of change, and bugs that exist one day may be gone the next, or even been replaced with new ones. Because of this, you will want to occasionally update to a newer version. E17 and its dependencies that are -9999 ebuilds are not updated automatically, you need to do this yourself.

This is a simple bash script that will take care of this for you, lets call it emerge-e17.

Note: If you have enabled the dbus USE-flag on x11-wm/e you will need to add x11-libs/e_dbus to E17_EBUILDS below to include it in updates, and make sure you add it after x11-libs/ecore.

Note: For amd64 arch users the dev-libs/efreet and x11-libs/e_dbus ebuilds won't work until that keyword is added to the ebuild

The export line in this script gives you the ability to run the script with regular emerge options, for example:

$ ./emerge-e17 --pretend --verbose

You could also place it in your /usr/local/bin directory, this would make the script behave as it were any other executable.

The script below is more advanced than the previous script. It will retry failed emerges once while forcing the automake version. Save it as /usr/local/bin/e17update and make it executable. Make sure you edit _EBUILDS= to contain the ebuilds you want to emerge.

GTK+ Beautification

GTK+ applications do not use the Enlightenment Foundation Libraries, and are therefore not affected by the theme set by E17. This results in GTK+ applications being displayed with a crude default GTK+ theme, which is not designed to be aesthetically pleasing.

There are two ways to address this problem.

The gtk-chtheme Approach

This approach is the simplest and the safest one.
Simply emerge the x11-themes/gtk-chtheme ebuild

$ emerge -av x11-themes/gtk-chtheme

Then run gtk-chtheme (don't forget to commit your changes with the Apply button).

Nevertheless, you won't be able to change the icon theme, so it could be worthy to have a look to the following approaches.

The contents of the file is self explanatory. gtk-font-name="" should contain your preferd Font, ending with the font size as the template demonstrates, gtk-theme-name="" should contain the name of your preferred GTK+ theme. The last line, gtk-icon-theme-name="", specifies what icon theme GTK+ should use.

To see what GTK+ themes you have installed, a simple:

$ ls -l /usr/share/themes

will show you exactly that. There are a lot of GTK+ themes to choose from in portage, also referred to as GTK+ Engines.

Miscellaneous

Key-binding Backup

Warning: The syntax or output of enlightenment_remote may change over time so use this script with care.

Because of the upstream sent resets it's a good idea to backup you keybindings from time to time. The E17 configuration is stored in binary format so it's not as simple as copying a file from the ~/.e directory. We use the enlightenment_remote and simple scripting to do this.

Save this as e17-keybinding-helper.py and make it executable

File: e17-keybinding-helper.py

#!/usr/bin/python
from sys import argv, exit # import "argv" (which has the command line arguments) and "exit" from the "sys" module.
from os import system # import the "system" function from the "os" module. This function executes commands.
if len(argv) == 1:
exit('You must specify at least one command line argument. Try %s --help' %argv[0])
elif argv[1] == '-h' or '--help'.startswith(argv[1]):
print 'This is a helper script for managing keybindings in e17.\n'
print '%-40s delete all keybindings listed in FILE' %(argv[0] + ' del FILE')
print '%-40s add all keybindings listed in FILE' %(argv[0] + ' add FILE')
print '%-40s save the keybindings to FILE, by copying the output of the command "enlightenment_remote -binding-key-list" to FILE\n' % (argv[0] + ' save FILE')
print 'For the "del" and "add" commands, FILE should be in the same format of the file created by the "save" command; for convenience, blank lines in FILE are ignored'
elif argv[1] in ('add', 'del'):
bindingsf = file(argv[2]) # open file named argv[2] in the default mode of "read"
bindingsf.readline() # Read the first line and do nothing with it, thus discarding it
import re # import "re" module (for regular expressions)
delim = re.compile('\\s*\\w+=') #now delim is the compiled regular expression from "\\s*\\w+=". This pattern matches 0 or more whitespace characters followed by 1 or more alphanumeric characters followed by a "=". This delimits the relevant fields in the output of enlightenment_remote -binding-key-list
relevantlines = [line for line in bindingsf if line != '' and not line.isspace() and 'REPLY <- END' not in line]
for fields in [delim.split(line) for line in relevantlines]:
fields[0] = ' ' # Replace first field - which is garbage - with a space
command = 'enlightenment_remote -binding-key-' + argv[1] + ' '.join(fields).replace('|','\\|')
print command,
ret = system(command)
if ret != 0:
exit ("Error. Command returned %d. Exitting. " %ret)
print "%d keybindings processed" %len(relevantlines)
elif argv[1] == 'save':
system('[ -e "%s" ] && echo File "%s" exists. I refuse to overwrite. ||\
enlightenment_remote -binding-key-list > %s' %(argv[2], argv[2], argv[2]))
else:
exit('Unrecognized argument %s. Try %s --help' %(argv[1], argv[0]))