Justification.
Currently there is a huge mess of files and folders that start with
a "." in any users home folder. There is no structure or policy on how
applications should choose file and folder names for data that needs to be
stored in users home directory. Additionally there is no established
consistency between Gnome, KDE and most other applications. Gnome
application have part of their configuration information in gconf folder
and other part in a gnome subfolder. KDE applications have a complex
structure under .kde/. And most other applications either have one file
directly in users home folder or have their own dot-folder there.
Problems.
There are two major problems with current ad-hoc approach:
-
Namespace pollution of users home space. In any desktop system "ls
-al" in the home folder would be a very lengthy affair. Moreeven this
namespace is folded - KDE and Gnome apps live in their own subfolders.
-
Lack of structure in folders makes it much harder to properly
understand their purpose. For example, if a user has misconfigured an
application and would like to reset it to default settings, it currently
could be hard to figure out how to do that. Especially without losing
his data in that application.
Proposal.
I propose to implement a policy on where an application can store
data and configuration information in users home folder. Such
specification would be proposed as an extension for FHS, first implemented
in Debian and then promoted for inclusion upstream and in other
distributions.
Structure.
I propose a following structure for a users home folder:
-
data/appname/ - each application, that stores user data in
application-specific format, will have to store this data into this
folder. Only configuration information that is essential to load this
data would be permitted into this folder (in hidden dot files). For
example, Evolution could store emails and email access information here.
-
.conf/appname/ - each application that stores any configuration
information whould have to store all of it in this folder. GConf will
have to also store applications configuration info here. If this folder
would be deleted, application must revert to default configuration, but
still be able to fully access user data in data/appname/ or other,
generic folders (below). For example, if .conf/evolution/ is erased,
then on next start-up Evoution should still be able to access all email
that is stored in data/evolution/ without any configuration wizards.
-
.tmp/appname/ - each application that would need to create
temporary files that survive reboot, would put them here. These folders
can be safely deleted at any time with no data or configuration loss.
For example, Firefox cache information and Nautilus thumbnail cache
would have to be here.
Desktop/ - the desktop folder, just like it is now
-
Media folders - (Documents/, Photos/, Videos/, Music/, ...) a
suggestion of basic document structure for user to use or ignore.
Applications dealing with particular media types would default to use
files from such folders, but should also cope with working with any
other folders on users choice. For example, a screensaver with slideshow
function would by default use photos from Photos/, but will have to have
a configuration option for user to change that setting.
-
Additionally I would propose having a .mounts/ folder where
applications could mount user specific media and other mounts, such as
FUSE. For example, FUSE could be used for automatic archive
introspection.
Benefits
The main benefit for such system for me is twofold:
-
SBackup can be configured to exclude .tmp/ and .mounts/ by default
thus saving significant space in backups.
-
A tool can be made to restore settings and/or data for specific
applications in an uniform fashion.
So, any suggestions on the idea and on where this should be best
discussed?