The directories I am describing is not new; it is only a collection of existing standard practices.
Current practice
Currently, common practice is to install rust packages into ~/.rust. This is unfriendly, since you're adding a junk dir in the middle of someone else's home, and there are better places (mostly ~/.local/lib/rust, but do keep reading).
Installation variables
These are often embedded into the application at configure-time (unlike DESTDIR, which must not be, since it is only for use of packaging tools).
| variable |
default |
purpose |
| PREFIX |
/usr/local |
architecture-independent files (/usr for distros) |
| EPREFIX |
${PREFIX} |
architecture-dependent files |
| BINDIR |
${EPREFIX}/bin |
user executables (${PREFIX}/games for games) |
| SBINDIR |
${EPREFIX}/sbin |
system admin executables |
| LIBEXECDIR |
${EPREFIX}/libexec |
program executables |
| SYSCONFDIR |
${PREFIX}/etc |
read-only single-machine data (/etc for distros) |
| LOCALSTATEDIR |
${PREFIX}/var |
modifiable single-machine data (/var for distros) |
| LIBDIR |
${EPREFIX}/lib |
object code libraries |
| DATAROOTDIR |
${PREFIX}/share |
read-only arch.-independent data root |
| DATADIR |
${DATAROOTDIR} |
read-only architecture-independent data (${PREFIX}/share/games for games) (should only use ${DATADIR}/${PACKAGE}/) |
| LOCALEDIR |
${DATAROOTDIR}/locale |
locale-dependent data |
| DOCDIR |
${DATAROOTDIR}/doc/${PACKAGE} |
documentation root |
Working in ${HOME}
(XDG; this applies even if you were installed globally)
| variable |
default |
purpose |
| XDG_DATA_HOME |
$HOME/.local/share |
dir to read/write user data |
| XDG_DATA_DIRS |
/usr/local/share/:/usr/share/ |
dirs to read data after that (should include ${DATADIR} if you change that) |
| XDG_CONFIG_HOME |
$HOME/.config |
dir to read/write user config |
| XDG_CONFIG_DIRS |
/etc/xdg |
dirs to read config after that |
| XDG_CACHE_HOME |
$HOME/.cache |
dir to read/write nonessential temporary files |
| XDG_RUNTIME_DIR |
None (supposed to be set by session manager, often unavailable) |
private (0700) dir for sockets and named pipes |
(To encourage the development of well-behaved software, some helper functions should be put in one of the standard libraries)
Practical installation into ${HOME}
| variable |
default |
| PREFIX |
${HOME}/.local |
| BINDIR |
${HOME}/bin |
| DATADIR |
${XDG_DATA_HOME} |
| SBINDIR |
hopeless |
| SYSCONFDIR |
${XDG_CONFIG_HOME} |
| LOCALSTATEDIR |
if an application needs this, it probably can't be installed as user. However, ${LOCALSTATEDIR}/cache is vaguely similar to ${XDG_CACHE_HOME} and ${LOCALSTATEDIR}/run is vaguely similar to ${XDG_RUNTIME_DIR} |
The directories I am describing is not new; it is only a collection of existing standard practices.
Current practice
Currently, common practice is to install rust packages into ~/.rust. This is unfriendly, since you're adding a junk dir in the middle of someone else's home, and there are better places (mostly ~/.local/lib/rust, but do keep reading).
Installation variables
These are often embedded into the application at configure-time (unlike DESTDIR, which must not be, since it is only for use of packaging tools).
Working in ${HOME}
(XDG; this applies even if you were installed globally)
(To encourage the development of well-behaved software, some helper functions should be put in one of the standard libraries)
Practical installation into ${HOME}