Call for gnome settings tree standardisation

I’ve been trying to change some gnome settings using dconf and gsettings and I found that currently names in the tree of the settings are quite messy, illogical and using that hierarchy is really hard to find something.

Here is my current gnome settings tree:

$ gsettings list-recursively | awk ‘{print $1}’ | sort | uniq
ca.desrt.dconf-editor.Demo
ca.desrt.dconf-editor.Demo.Conflict1
ca.desrt.dconf-editor.Demo.Conflict2
ca.desrt.dconf-editor.Settings
im.telepathy.MissionControl.FromEmpathy
org.fedorahosted.background-logo-extension
org.freedesktop.ColorHelper
org.freedesktop.folks
org.freedesktop.ibus.engine.hangul
org.freedesktop.ibus.general
org.freedesktop.ibus.general.hotkey
org.freedesktop.ibus.panel
org.freedesktop.ibus.panel.emoji
org.freedesktop.Telepathy.Logger
org.freedesktop.Tracker.DB
org.freedesktop.Tracker.Extract
org.freedesktop.Tracker.FTS
org.freedesktop.Tracker.Miner.Files
org.freedesktop.Tracker.Store
org.freedesktop.Tracker.Writeback
org.gnome.baobab.preferences
org.gnome.baobab.ui
org.gnome.calculator
org.gnome.calendar
org.gnome.Cheese
org.gnome.clocks
org.gnome.clocks.state.window
org.gnome.Contacts
org.gnome.ControlCenter
org.gnome.crypto.cache
org.gnome.crypto.pgp
org.gnome.desktop.a11y
org.gnome.desktop.a11y.applications
org.gnome.desktop.a11y.keyboard
org.gnome.desktop.a11y.magnifier
org.gnome.desktop.a11y.mouse
org.gnome.desktop.app-folders
org.gnome.desktop.background
org.gnome.desktop.calendar
org.gnome.desktop.datetime
org.gnome.desktop.default-applications.office.calendar
org.gnome.desktop.default-applications.office.tasks
org.gnome.desktop.default-applications.terminal
org.gnome.desktop.input-sources
org.gnome.desktop.interface
org.gnome.desktop.lockdown
org.gnome.desktop.media-handling
org.gnome.desktop.notifications
org.gnome.desktop.peripherals.keyboard
org.gnome.desktop.peripherals.mouse
org.gnome.desktop.peripherals.tablet
org.gnome.desktop.peripherals.touchpad
org.gnome.desktop.peripherals.touchscreen
org.gnome.desktop.peripherals.trackball
org.gnome.desktop.privacy
org.gnome.desktop.screensaver
org.gnome.desktop.search-providers
org.gnome.desktop.session
org.gnome.desktop.sound
org.gnome.desktop.thumbnail-cache
org.gnome.desktop.thumbnailers
org.gnome.desktop.wm.keybindings
org.gnome.desktop.wm.preferences
org.gnome.devhelp.state.assistant.window
org.gnome.devhelp.state.main.paned
org.gnome.devhelp.state.main.window
org.gnome.dictionary
org.gnome.eog.fullscreen
org.gnome.eog.plugins
org.gnome.eog.ui
org.gnome.eog.view
org.gnome.Epiphany
org.gnome.Epiphany.lockdown
org.gnome.Epiphany.permissions
org.gnome.Epiphany.reader
org.gnome.Epiphany.state
org.gnome.Epiphany.sync
org.gnome.Epiphany.ui
org.gnome.Epiphany.web
org.gnome.Evince
org.gnome.Evince.Default
org.gnome.evolution
org.gnome.evolution.addressbook
org.gnome.evolution.bogofilter
org.gnome.evolution.calendar
org.gnome.evolution-data-server
org.gnome.evolution-data-server.addressbook
org.gnome.evolution-data-server.calendar
org.gnome.Evolution.DefaultSources
org.gnome.evolution.eds-shell
org.gnome.evolution.importer
org.gnome.evolution.mail
org.gnome.evolution.plugin.attachment-reminder
org.gnome.evolution.plugin.autocontacts
org.gnome.evolution.plugin.email-custom-header
org.gnome.evolution.plugin.external-editor
org.gnome.evolution.plugin.face-picture
org.gnome.evolution.plugin.itip
org.gnome.evolution.plugin.mail-notification
org.gnome.evolution.plugin.prefer-plain
org.gnome.evolution.plugin.publish-calendar
org.gnome.evolution.plugin.templates
org.gnome.evolution.shell
org.gnome.evolution.shell.network-config
org.gnome.evolution.spamassassin
org.gnome.evolution.text-highlight
org.gnome.evolution.window
org.gnome.FileRoller.Dialogs.Add
org.gnome.FileRoller.Dialogs.Extract
org.gnome.FileRoller.Dialogs.LastOutput
org.gnome.FileRoller.Dialogs.New
org.gnome.FileRoller.FileSelector
org.gnome.FileRoller.General
org.gnome.FileRoller.Listing
org.gnome.FileRoller.UI
org.gnome.five-or-more
org.gnome.Geary
org.gnome.gedit.plugins
org.gnome.gedit.plugins.externaltools
org.gnome.gedit.plugins.filebrowser
org.gnome.gedit.plugins.filebrowser.nautilus
org.gnome.gedit.plugins.pythonconsole
org.gnome.gedit.plugins.time
org.gnome.gedit.preferences.editor
org.gnome.gedit.preferences.encodings
org.gnome.gedit.preferences.print
org.gnome.gedit.preferences.ui
org.gnome.gedit.state.file-filter
org.gnome.gedit.state.history-entry
org.gnome.gedit.state.window
org.gnome.gnome-screenshot
org.gnome.gnome-system-log
org.gnome.gnumeric
org.gnome.gnumeric.autocorrect
org.gnome.gnumeric.autoformat
org.gnome.gnumeric.core.defaultfont
org.gnome.gnumeric.core.file.save
org.gnome.gnumeric.core.gui.cells
org.gnome.gnumeric.core.gui.editing
org.gnome.gnumeric.core.gui.screen
org.gnome.gnumeric.core.gui.toolbars
org.gnome.gnumeric.core.gui.window
org.gnome.gnumeric.core.sort.default
org.gnome.gnumeric.core.sort.dialog
org.gnome.gnumeric.core.workbook
org.gnome.gnumeric.core.xml
org.gnome.gnumeric.cut-and-paste
org.gnome.gnumeric.dialogs.rs
org.gnome.gnumeric.functionselector
org.gnome.gnumeric.plugin.glpk
org.gnome.gnumeric.plugin.latex
org.gnome.gnumeric.plugin.lpsolve
org.gnome.gnumeric.plugins
org.gnome.gnumeric.printsetup
org.gnome.gnumeric.searchreplace
org.gnome.gnumeric.stf.export
org.gnome.gnumeric.undo
org.gnome.GPaste
org.gnome.GWeather
org.gnome.Klotski
org.gnome.libgnomekbd.desktop
org.gnome.libgnomekbd.indicator
org.gnome.libgnomekbd.keyboard
org.gnome.libgnomekbd.preview
org.gnome.LightsOff
org.gnome.login-screen
org.gnome.Mahjongg
org.gnome.Maps
org.gnome.Mines
org.gnome.mousetweaks
org.gnome.Music
org.gnome.mutter
org.gnome.mutter.keybindings
org.gnome.mutter.wayland
org.gnome.mutter.wayland.keybindings
org.gnome.nautilus.compression
org.gnome.nautilus.icon-view
org.gnome.nautilus.list-view
org.gnome.nautilus.preferences
org.gnome.nautilus.window-state
org.gnome.nm-applet
org.gnome.Notes
org.gnome.online-accounts
org.gnome.photos
org.gnome.Polari
org.gnome.pomodoro.plugins.actions
org.gnome.pomodoro.plugins.gnome
org.gnome.pomodoro.plugins.sounds
org.gnome.pomodoro.preferences
org.gnome.pomodoro.state
org.gnome.power-manager
org.gnome.Reversi
org.gnome.seahorse.recipients
org.gnome.SessionManager
org.gnome.settings-daemon.peripherals.keyboard
org.gnome.settings-daemon.peripherals.mouse
org.gnome.settings-daemon.peripherals.smartcard
org.gnome.settings-daemon.peripherals.touchscreen
org.gnome.settings-daemon.plugins
org.gnome.settings-daemon.plugins.color
org.gnome.settings-daemon.plugins.housekeeping
org.gnome.settings-daemon.plugins.media-keys
org.gnome.settings-daemon.plugins.power
org.gnome.settings-daemon.plugins.xsettings
org.gnome.shell
org.gnome.shell.app-switcher
org.gnome.shell.extensions.auto-move-windows
org.gnome.shell.extensions.native-window-placement
org.gnome.shell.extensions.panel-osd
org.gnome.shell.extensions.screenshot-window-sizer
org.gnome.shell.extensions.user-theme
org.gnome.shell.extensions.window-list
org.gnome.shell.keybindings
org.gnome.shell.keyboard
org.gnome.shell.overrides
org.gnome.shell.window-switcher
org.gnome.SoundRecorder
org.gnome.Sudoku
org.gnome.swell-foop
org.gnome.system.dns_sd
org.gnome.system.locale
org.gnome.system.location
org.gnome.system.proxy
org.gnome.system.proxy.ftp
org.gnome.system.proxy.http
org.gnome.system.proxy.https
org.gnome.system.proxy.socks
org.gnome.system.smb
org.gnome.Taquin
org.gnome.Terminal.Legacy.Keybindings
org.gnome.Terminal.Legacy.Settings
org.gnome.Terminal.ProfilesList
org.gnome.Tetravex
org.gnome.totem
org.gnome.totem.plugins.opensubtitles
org.gnome.totem.plugins.pythonconsole
org.gnome.Vino
org.gnome.Weather
org.gnome.yelp
org.gtk.Demo
org.gtk.exampleapp
org.gtk.Settings.ColorChooser
org.gtk.Settings.Debug
org.gtk.Settings.EmojiChooser
org.gtk.Settings.FileChooser
org.yorba.shotwell.crop-settings
org.yorba.shotwell.dataimports
org.yorba.shotwell.plugins.enable-state
org.yorba.shotwell.preferences.editing
org.yorba.shotwell.preferences.export
org.yorba.shotwell.preferences.files
org.yorba.shotwell.preferences.slideshow
org.yorba.shotwell.preferences.ui
org.yorba.shotwell.preferences.window
org.yorba.shotwell.printing
org.yorba.shotwell.sharing
org.yorba.shotwell.sharing.facebook
org.yorba.shotwell.sharing.flickr
org.yorba.shotwell.sharing.org-gnome-shotwell-publishing-google-photos
org.yorba.shotwell.sharing.org-yorba-shotwell-publishing-piwigo
org.yorba.shotwell.sharing.org-yorba-shotwell-publishing-rajce
org.yorba.shotwell.sharing.org-yorba-shotwell-publishing-tumblr
org.yorba.shotwell.sharing.org-yorba-shotwell-publishing-yandex-fotki
org.yorba.shotwell.sharing.publishing-gallery3
org.yorba.shotwell.sharing.youtube
org.yorba.shotwell.video

What would be the purpose of “standardisation”? What kind of standardisation are we even talking about?

Just try to open dconf editor and try to find some parameter to change.
For example what is the propose of /org hierarhy? Applications or system settings?
It is /apps hierarhy is possible to finf /apps/telepathy-logger which not about this service settings but about disable/enable it.
In /desktop/ibus/general are things not related to desktop.
In /org you can find fedorahosted/ (who cares on changing app settings that something is hosted by fedora?), freedesktop/ (why applications must be grouped by fact that they are developed by freedesktop project?), /org/gtk (imo it should be /desktop) /org/virt-manager (why not in /system ?)

Just try to have look across whole dconf/gsettings hierarchy and ask each time is it right place in hierarchy or not? Is it possible to guess using current first two levels of those hierarchy to be able easy guess where should be possible to find some necessary parameter or not ?

dconf-editor is not meant to be the primary UI for changing settings.

Yes, this is the problem with using dconf-editor: you think that there’s a hierarchy in the settings because it’s presented as such.

There is no settings hierarchy.

Settings are grouped by schemas, and schemas have to be unique, which is why they use reverse DNS names—like the application ID, which is not coincidentally identical to the schema name—or it ought to be. All settings for com.example.Application belong under com.example.Application, and not as a node under /com.

The problem is that at the very beginning of dconf we kind of made a mess, and we had an implicit hierarchy—/apps, /system, and /desktop—left over from when we ported from the old GConf API (which did have kind of a hierarchy) to dconf. It was a mistake, and we changed that, to the point that glib-compile-schemas will warn if you’re using that kind of naming scheme:

  if (path && (g_str_has_prefix (path, "/apps/") ||
               g_str_has_prefix (path, "/desktop/") ||
               g_str_has_prefix (path, "/system/")))
    {
      gchar *message = NULL;
      message = g_strdup_printf (_("Warning: Schema “%s” has path “%s”.  "
                                   "Paths starting with "
                                   "“/apps/”, “/desktop/” or “/system/” are deprecated."),
                                 id, path);
      g_printerr ("%s\n", message);
      g_free (message);
    }

Some old schemas managed to sneak through before GNOME 3 got released; now we cannot compatibly change them because the path is part of the schema, which is a part of the interfaces exposed by a component using GSettings.

1 Like

Settings in GSettings system are not meant to be changed manually. It
is allowed for power users sake but doing that can break the system.

The main purpose of the settings paths is to avoid collisions between
applications. The paths use reverse domain name
notation

and apps are expected to control the associated domain registered in
DNS hierarchy. The legacy prefixes /apps/, /desktop/ or /system/
are deprecated and should not be used exactly for that reason: imagine
two apps using schemas in /apps/my-calculator, for example.

This is nothing more than only kind of excuse.
Power user or not but that hierarchy should have some logic which power user (or not) should be able to use trying to find location where something needs to be changed.

This topic was automatically closed 5 days after the last reply. New replies are no longer allowed.