Simple Settings

Hi,

so I'd like to do some idle talk about simplifying the configuration system of Xfce4.5.

All the possibilities I heard so far do not go far enough.

What I'd like to see is it to be simplified to the max by:

using one (real) file per setting (yes _setting_) in ".config/xfce4/"

If the setting points to a file (for example background image), it should be a symlink to the file. Otherwise it should be a regular file containing the value as readable string.

So for our (more or less) current settings,

.config/xfce4/settings/pyramid.ath.cx/desktop/:0.0/brightness .config/xfce4/settings/pyramid.ath.cx/desktop/:0.0/color_1 .config/xfce4/settings/pyramid.ath.cx/desktop/:0.0/color_2 .config/xfce4/settings/pyramid.ath.cx/desktop/:0.0/color_style .config/xfce4/settings/pyramid.ath.cx/desktop/:0.0/image -> /home/dannym/pic/backgrounds/image_1 .config/xfce4/settings/pyramid.ath.cx/desktop/:0.0/image_style [...] .config/xfce4/settings/pyramid.ath.cx/desktop/:0.1/image_style .config/xfce4/settings/pyramid.ath.cx/display/:0/blue_gamma .config/xfce4/settings/pyramid.ath.cx/display/:0/green_gamma .config/xfce4/settings/pyramid.ath.cx/display/:0/red_gamma .config/xfce4/settings/pyramid.ath.cx/display/:0/size .config/xfce4/settings/pyramid.ath.cx/display/:0/rate

.config/xfce4/settings/pyramid.ath.cx/gtk/:0/can_change_accelerators .config/xfce4/settings/pyramid.ath.cx/gtk/:0/cursor_theme_name .config/xfce4/settings/pyramid.ath.cx/gtk/:0/cursor_theme_size .config/xfce4/settings/pyramid.ath.cx/gtk/:0/font_name .config/xfce4/settings/pyramid.ath.cx/gtk/:0/key_theme_name .config/xfce4/settings/pyramid.ath.cx/gtk/:0/toolbar_style <-- this is stupid, should be a per-app setting. [...] .config/xfce4/settings/pyramid.ath.cx/keyboard/:0/repeat_delay .config/xfce4/settings/pyramid.ath.cx/keyboard/:0/repeat_key .config/xfce4/settings/pyramid.ath.cx/keyboard/:0/repeat_rate .config/xfce4/settings/pyramid.ath.cx/margins/:0/bottom_margin .config/xfce4/settings/pyramid.ath.cx/margins/:0/top_margin .config/xfce4/settings/pyramid.ath.cx/margins/:0/left_margin .config/xfce4/settings/pyramid.ath.cx/margins/:0/right_margin .config/xfce4/settings/pyramid.ath.cx/mouse/:0/right_handed .config/xfce4/settings/pyramid.ath.cx/mouse/:0/right_handed .config/xfce4/settings/pyramid.ath.cx/panel/:0/autohide .config/xfce4/settings/pyramid.ath.cx/panel/:0/fullwidth .config/xfce4/settings/pyramid.ath.cx/panel/:0/layer .config/xfce4/settings/pyramid.ath.cx/panel/:0/orientation .config/xfce4/settings/pyramid.ath.cx/panel/:0/popup_position .config/xfce4/settings/pyramid.ath.cx/panel/:0/size .config/xfce4/settings/pyramid.ath.cx/panel/:0/theme -> /home/dannym/.themes/foo .config/xfce4/settings/pyramid.ath.cx/shortcuts/:0/XF86_VolumeUp/command .config/xfce4/settings/pyramid.ath.cx/sound/:0/mixer/default_device .config/xfce4/settings/pyramid.ath.cx/sound/:0/mixer/device_0/useful_controls .config/xfce4/settings/pyramid.ath.cx/taskbar/:0/auto_hide .config/xfce4/settings/pyramid.ath.cx/taskbar/:0/group_tasks .config/xfce4/settings/pyramid.ath.cx/taskbar/:0/height .config/xfce4/settings/pyramid.ath.cx/taskbar/:0/horizontal_alignment .config/xfce4/settings/pyramid.ath.cx/taskbar/:0/position .config/xfce4/settings/pyramid.ath.cx/taskbar/:0/show_all_tasks .config/xfce4/settings/pyramid.ath.cx/taskbar/:0/show_pager .config/xfce4/settings/pyramid.ath.cx/taskbar/:0/show_tasklist .config/xfce4/settings/pyramid.ath.cx/taskbar/:0/show_text .config/xfce4/settings/pyramid.ath.cx/taskbar/:0/show_time .config/xfce4/settings/pyramid.ath.cx/taskbar/:0/show_tray .config/xfce4/settings/pyramid.ath.cx/taskbar/:0/shrink .config/xfce4/settings/pyramid.ath.cx/taskbar/:0/width_percent .config/xfce4/settings/pyramid.ath.cx/terminal/:0/accelerators .config/xfce4/settings/pyramid.ath.cx/terminal/:0/font_name .config/xfce4/settings/pyramid.ath.cx/terminal/:0/scrollback .config/xfce4/settings/pyramid.ath.cx/terminal/:0/scrollbar .config/xfce4/settings/pyramid.ath.cx/terminal/:0/show_menu .config/xfce4/settings/pyramid.ath.cx/window_manager/:0/cycle_hidden .config/xfce4/settings/pyramid.ath.cx/window_manager/:0/cycle_minimum .config/xfce4/settings/pyramid.ath.cx/window_manager/:0/cycle_workspaces .config/xfce4/settings/pyramid.ath.cx/window_manager/:0/easy_click .config/xfce4/settings/pyramid.ath.cx/window_manager/:0/focus_hint .config/xfce4/settings/pyramid.ath.cx/window_manager/:0/frame_opacity .config/xfce4/settings/pyramid.ath.cx/window_manager/:0/move_opacity .config/xfce4/settings/pyramid.ath.cx/window_manager/:0/placement_ratio .config/xfce4/settings/pyramid.ath.cx/window_manager/:0/popup_opacity .config/xfce4/settings/pyramid.ath.cx/window_manager/:0/prevent_focus_stealing .config/xfce4/settings/pyramid.ath.cx/window_manager/:0/raise_with_any_button .config/xfce4/settings/pyramid.ath.cx/window_manager/:0/resize_opacity .config/xfce4/settings/pyramid.ath.cx/window_manager/:0/restore_on_move .config/xfce4/settings/pyramid.ath.cx/window_manager/:0/scroll_workspaces .config/xfce4/settings/pyramid.ath.cx/window_manager/:0/show_frame_shadow .config/xfce4/settings/pyramid.ath.cx/window_manager/:0/show_popup_shadow .config/xfce4/settings/pyramid.ath.cx/window_manager/:0/snap_resistance .config/xfce4/settings/pyramid.ath.cx/window_manager/:0/toggle_workspaces .config/xfce4/settings/pyramid.ath.cx/window_manager/:0/wrap_cycle .config/xfce4/settings/pyramid.ath.cx/window_manager/:0/wrap_layout .config/xfce4/settings/pyramid.ath.cx/window_manager/:0/box_move .config/xfce4/settings/pyramid.ath.cx/window_manager/:0/box_resize .config/xfce4/settings/pyramid.ath.cx/window_manager/:0/button_layout .config/xfce4/settings/pyramid.ath.cx/window_manager/:0/click_to_focus .config/xfce4/settings/pyramid.ath.cx/window_manager/:0/double_click_action .config/xfce4/settings/pyramid.ath.cx/window_manager/:0/focus_new_window .config/xfce4/settings/pyramid.ath.cx/window_manager/:0/focus_raise .config/xfce4/settings/pyramid.ath.cx/window_manager/:0/raise_delay .config/xfce4/settings/pyramid.ath.cx/window_manager/:0/raise_on_click .config/xfce4/settings/pyramid.ath.cx/window_manager/:0/snap_to_border .config/xfce4/settings/pyramid.ath.cx/window_manager/:0/snap_to_windows .config/xfce4/settings/pyramid.ath.cx/window_manager/:0/snap_width .config/xfce4/settings/pyramid.ath.cx/window_manager/:0/theme .config/xfce4/settings/pyramid.ath.cx/window_manager/:0/title_alignment .config/xfce4/settings/pyramid.ath.cx/window_manager/:0/title_font .config/xfce4/settings/pyramid.ath.cx/window_manager/:0/wrap_resistance .config/xfce4/settings/pyramid.ath.cx/window_manager/:0/wrap_windows .config/xfce4/settings/pyramid.ath.cx/window_manager/:0/wrap_workspaces .config/xfce4/settings/pyramid.ath.cx/workspaces/:0/workspace_count .config/xfce4/settings/pyramid.ath.cx/workspaces/:0/workspace_names .config/xfce4/settings/pyramid.ath.cx/printing/:0/system -> /usr/lib/xfce4/xfprint-plugins/cups_plugin.so

That isn't all that much, is it?

Advantages are: (symlink the important ones to another directory etc)
 * simple to copy/merge
 * simple to understand
 * can use all the normal unix tools
 * simple to change by script
 * uses normal unix tree api and doesn't introduce another version of it (xml, ini file, whatever)
 * uses file change notification to be notified of changes (not xsettings)

Disadvantage:
 * wastes space on old filesystems - aren't that many files though!

As a means to fix the only remaining disadvantage, I'd suggest writing/mounting a FUSE module that stores the settings in a bdb or something.