Equivalents of XDG_CONFIG_HOME and XDG_DATA_HOME on Mac OS X?
I would use ~/Library/Application Support/script_name/
. The subdirectories inside Application Support
are used conventionally by various apps, including Apple's own softwares. But it's not enforced by the OS and not tied to apps inside /Applications
. So you're perfectly free to create your own directory in it.
For the directory structure of OS X in general, see this Apple document.
I agree with OJFord's comment: if you are writing a script (I think this applies to all CLI-only application), simply follow the XDG Base Directory would be better.
Rationales:
- Names in
XDG_CONFIG_HOME
are typically small-case bare-names likegit
; the ones in~/Library/Preferences/
are typically files named with reverse domain name notation likecom.apple.AppStore.plist
, or directories named in title case likeBlackmagic Design
. - GUI applications have been following macOS conventions when they are placed in
/Applications
. You don't place your script in/Applications
; you place them in UNIX-specific directorys. Better to be consistent. ~/Library/Preferences/
is full of.plist
s. No cross-platform script that I know is using property lists.- Users may want to sync cross-platform configuration and macOS-only one separately.
For example, Git places their config file in XDG_CONFIG_HOME/git/config
, not in ~/Library/Preferences/Git/config
. Makes sense to me.
note
I made the point only for configuration files ($XDG_CONFIG_HOME
) and data files ($XDG_DATA_HOME
); for cache files it gets subtle. According to How-To Geek, ~/Library/Caches
directory is excluded from Time Machine by default. I don’t care about cache folder since I back up neither directories anyway; but for ones who care, I recommend them to link ~/.cache
to somewhere in the default cache folder, such as:
cd ~; mv .cache ~/Library/Caches/XDG-cache; ln -s ~/Library/Caches/XDG-cache .cache
Comparing Apple's documentation for the various paths to the XDG Base Directory specifications approximates to the following locations:
XDG_CONFIG_HOME
▶︎~/Library/Preferences/
XDG_DATA_HOME
▶︎~/Library/
XDG_CACHE_HOME
▶︎~/Library/Caches/
Mapping XDG Base Directory Specification locations for "My App" on Mac OS X could look like this:
XDG_CONFIG_HOME
▶︎~/Library/Preferences/name.often.with.domain.myapp.plist
XDG_DATA_HOME
▶︎~/Library/My App/
XDG_CACHE_HOME
▶︎~/Library/Caches/My App/
These mappings seem pretty reasonable but they aren't exact. Some kinds of cache or data may be appropriate for ~/Library/Application Support/My App
, and other may be best in the temp locations or the App bundle. All of it is by convention and the same reasons for using the best XDG_
locations apply to using the best locations on the Mac OS X system.
Your annoyance at ~/.myscript
is in line with Apple's guidelines: "Don't pollute user space".
References:
- Mac OS X Reference Library: Where to Put Application Files
- Mac OS X Reference Library: Important Java Directories on Mac OS X