[Pidgin] #10029: Support XDG dir structure
trac at pidgin.im
Mon Mar 5 23:31:20 EST 2018
#10029: Support XDG dir structure
Reporter: salinasv | Owner: EionRobb
Type: task | Status: closed
Milestone: 3.0.0 | Component: libpurple
Version: | Resolution: fixed
Keywords: XDG 3.0.0 |
Comment (by sergem):
Replying to [comment:27 qarkai]:
> Any comments on previous reply? Proper reading of XDG and FHS specs?
Ah, sure, but the comments would be rather long...
Replying to [comment:21 qarkai]:
> It looks like GNOME patched a lot of their apps:
~~(Many people believe that
[https://en.wikipedia.org/wiki/Modern_flat_Earth_societies Earth is flat],
but that doesn't really change Earth's shape.)~~ Yes, I know that the idea
to scatter files to 3 directories instead of 1 is somewhat popular, but
that doesn't make it any better. It still makes backup/restore and
regression testing harder, and still provides no benefits. Even the
article you linked lists no benefits, just the guidelines how to do it.
> "$XDG_CONFIG_HOME defines the base directory relative to which user
specific configuration files should be stored. If $XDG_CONFIG_HOME is
either not set or empty, a default equal to $HOME/.config should be used."
$XDG_CONFIG_DIRS according to basedir-spec is an addition to the
Yes, that's exactly what I'm talking about! XDG_CONFIG_DIRS is used
together with XDG_CONFIG_HOME. Basically, if you're reading applications
menu, you must read it from XDG_CONFIG_HOME, and if it's not there, you
must read if from XDG_CONFIG_DIRS, i.e. /etc/xdg/, and if it's not there
either, you must assume some sane default. So if you use _HOME, you must
use _DIRS too.
> There is another opinion:
Heh. It was supposed to provide some separation between "config" and
"data". But it did not. "If you can reconfigure it - it's a config" is not
enough. Imagine that you've lost your contact list. If it was a jabber
contact list, it can be downloaded again from the server, which makes it a
"cache". If it was an IRC contact list with just 2 contacts in it, you can
add both contacts manually, which makes it a "config". But if you had 150
IRC contacts in there and you've lost your entire contact list, you "would
cry, running frenetically to your backup" which makes it "data". Same
applies to other settings, if I lost just one or two, and I remember what
they were, I can reconfigure them easily, but if I lost my 436 settings
that I configured during last 10 years — I'd better restore a backup
instead of trying to figure out each of them again.
Also that "another opinion" is just another way to abuse XDG standard
dirs, nothing in the standard itself support it. And it's not why XDG
defined two dirs. XDG standard created two separate directories .config
and .local because... there were two directories to mirror: /etc and /usr.
XDG defines .local/share/ as a writeable copy of /usr/share/. E.g.
latest.html icon-theme-spec] and [https://standards.freedesktop.org
/desktop-entry-spec/desktop-entry-spec-latest.html desktop-entry-spec] say
that icons should be in /usr/share/icons/ and app shortcuts should be in
/usr/share/applications/. But user can't write there if he wants to add
menu entry or change icon. So standard invented a local writeable copy,
called it ".local" and defined mapping: /usr/share/icons ->
.local/share/icons, /usr/share/applications -> .local/share/applications,
etc. It defines no other directories in .local, because ... it needed no
So if you really follow XDG with that, i.e. ~/.config/ == /etc/xdg/ and
~/.local/ == /usr/ then pidgin should put nothing into .config, as it puts
nothing into /etc/xdg. But it should read its plugins from
.local/lib/pidgin (notice .local/lib, not .local/share) (or
.local/lib/i386-linux-gnu/pidgin depending on OS/distro). And all other
files should be kept in .purple. :)
When you read wikipedia, you may have seen a "References" section at the
end of each page, explaining or linking details to individual words in the
page. That's what XDG's basedir-spec is. XDG's people just turned it into
a separate document, so that they don't have to copy-paste same
XDG_CONFIG_DIRS and XDG_DATA_DIRS definition into every other standard.
And that's why it only defines .local/share and no other dirs — XDG
standards needed nothing but /usr/share.
TL;DR: XDG basedir-spec is just a references list for icons, file
shortcuts and associations, defined in other XDG standards. It won't help
you to solve your problems. What was the problem by the way?
Ticket URL: <https://developer.pidgin.im/ticket/10029#comment:28>
More information about the Tracker