Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Parse ~/.config/user-dirs.dirs file #29

Open
mateusz834 opened this issue Feb 4, 2022 · 6 comments
Open

Parse ~/.config/user-dirs.dirs file #29

mateusz834 opened this issue Feb 4, 2022 · 6 comments

Comments

@mateusz834
Copy link

mateusz834 commented Feb 4, 2022

I am testing this library using fedora and arch Linux and it seems like none of the distributions are setting the env vars for XDG User Directories.

[a@localhost-live test]$ cat /home/a/.config/user-dirs.dirs
# This file is written by xdg-user-dirs-update
# If you want to change or add directories, just edit the line you're
# interested in. All local changes will be retained on the next run.
# Format is XDG_xxx_DIR="$HOME/yyy", where yyy is a shell-escaped
# homedir-relative path, or XDG_xxx_DIR="/yyy", where /yyy is an
# absolute path. No other format is supported.
# 
XDG_DESKTOP_DIR="$HOME/Pulpit"
XDG_DOWNLOAD_DIR="$HOME/Pobrane"
XDG_TEMPLATES_DIR="$HOME/Szablony"
XDG_PUBLICSHARE_DIR="$HOME/Publiczny"
XDG_DOCUMENTS_DIR="$HOME/Dokumenty"
XDG_MUSIC_DIR="$HOME/Muzyka"
XDG_PICTURES_DIR="$HOME/Obrazy"
XDG_VIDEOS_DIR="$HOME/Wideo"
[a@localhost-live test]$ ./main 
2022/02/04 18:14:32 Desktop directory: /home/a/Desktop
2022/02/04 18:14:32 Download directory: /home/a/Downloads
2022/02/04 18:14:32 Documents directory: /home/a/Documents
2022/02/04 18:14:32 Music directory: /home/a/Music
2022/02/04 18:14:32 Pictures directory: /home/a/Pictures
2022/02/04 18:14:32 Videos directory: /home/a/Videos
2022/02/04 18:14:32 Templates directory: /home/a/Templates
2022/02/04 18:14:32 Public directory: /home/a/Public

Firefox for example reads the ~/.config/user-dirs.dirs directly.

[a@localhost-live test]$ cat firefox-strace | grep .config/user-dirs
openat(AT_FDCWD, "/home/a/.config/user-dirs.dirs", O_RDONLY) = 53
@mateusz834
Copy link
Author

mateusz834 commented Feb 4, 2022

Also it looks like XDG_*_DIR env vars do not override the user-dirs.dirs file, checked in firefox/chromium

const (
	envDesktopDir     = "XDG_DESKTOP_DIR"
	envDownloadDir    = "XDG_DOWNLOAD_DIR"
	envDocumentsDir   = "XDG_DOCUMENTS_DIR"
	envMusicDir       = "XDG_MUSIC_DIR"
	envPicturesDir    = "XDG_PICTURES_DIR"
	envVideosDir      = "XDG_VIDEOS_DIR"
	envTemplatesDir   = "XDG_TEMPLATES_DIR"
	envPublicShareDir = "XDG_PUBLICSHARE_DIR"
)

@adrg
Copy link
Owner

adrg commented Feb 6, 2022

Hi @mateusz834. Thank you for your interest in the library. Reading user-dirs.dirs is already a task in my to-do list.
I'll start working on this. Hopefully, I can release a new version sometime next week (depending on my free time).

Also it looks like XDG_*_DIR env vars do not override the user-dirs.dirs file, checked in firefox/chromium

Yeah, that seems to be the case. I think the priority to should be:
user-dirs.dirs values > environment variables > defaults

@mateusz834
Copy link
Author

mateusz834 commented Feb 6, 2022

It even look like that env vars are completely ignored by firefox/chromium.
I removed the user-dirs.dirs file and set the XDG_DOWNLOAD_DIR env var to a different directory and the downloaded file was saved in the default directory.

But for backwards compatibility I think that the order should be:
environment variables > user-dirs.dirs values > defaults

Maybe someone is relying on the env vars now and after the change it will suddenly use values from user-dirs.dirs??

@adrg
Copy link
Owner

adrg commented Feb 6, 2022

Ideally, there would be no breaking changes. I try to steer clear of them as much as possible. However, in this case, I think the default behavior going forward should be to rely on the values provided by user-dirs.dirs, then fall back to other sources.

I made a quick search through GitHub and it seems most people are using this package for base directories rather than user directories. I think very few people customize user directory environment variables anyway, especially if they're ignored by other applications. In any case, the change will be documented in the release notes.

Alternatively, I could introduce an option to control whether user-dirs.dirs has priority. However, I think it clutters the package interface unnecessarily.

@kajes
Copy link

kajes commented May 9, 2022

Any updates on this? I recently found this library and I guess I'm one of the edge cases that need the parsing of user-dirs.dirs.

ax1036 added a commit to ax1036/xdg that referenced this issue Oct 19, 2022
@Omnikron13
Copy link

You may be looking for this?

USER-DIRS.CONF(5)                          File Formats                          USER-DIRS.CONF(5)

NAME
       user-dirs.conf - configuration for xdg-user-dirs-update

DESCRIPTION
       The /etc/xdg/user-dirs.conf file is a text file that controls the behavior of the xdg-user-dirs-update
       command. Users can have their own ~/.config/user-dirs.conf file, which overrides the system-wide
       configuration.

       The following keys are recognised:

       enabled=boolean
           When set to False, xdg-user-dirs-update will not change the XDG user dirs configuration.

       filename_encoding=encoding
           This sets the filename encoding to use.  encoding can be an explicit encoding name, such as UTF-8,
           or "locale", which means the encoding of the users locale will be used.

       Lines beginning with a # character are ignored.

ENVIRONMENT
       XDG_CONFIG_DIRS
           The system-wide user-dirs.conf file is located in this directory. The default is /etc/xdg.

       XDG_CONFIG_HOME
           The per-user user-dirs.conf file is located in this directory. The default is $HOME/.config.

SEE ALSO
       xdg-user-dirs-update(1)

XDG

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants