From 4f4d42bb8794e19f0c5be39ee341f919e13f59f0 Mon Sep 17 00:00:00 2001 From: Patrick Spek Date: Mon, 23 Jan 2023 11:51:16 +0100 Subject: Merge v0.2.0 sources --- lib/IO/Path/XDG.rakumod | 119 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 119 insertions(+) create mode 100644 lib/IO/Path/XDG.rakumod (limited to 'lib/IO/Path/XDG.rakumod') diff --git a/lib/IO/Path/XDG.rakumod b/lib/IO/Path/XDG.rakumod new file mode 100644 index 0000000..54c1941 --- /dev/null +++ b/lib/IO/Path/XDG.rakumod @@ -0,0 +1,119 @@ +#! /usr/bin/env false + +use v6.d; + +unit module IO::Path::XDG; + +#| Retrieve the value of XDG_CONFIG_DIRS as a sequence of IO::Path objects. If +#| this variable is not set, it will use the default value of /etc/xdg. These +#| directories should be read in order to retrieve configuration files. +sub xdg-config-dirs ( + #| When set to true, this sequence will start with the XDG_CONFIG_HOME + #| value (or its default). + Bool:D :$home = True, + + --> Iterable +) is export { + ( + (xdg-config-home if $home), + (%*ENV // '/etc/xdg') + .split(':') + .map(*.IO) + .Slip, + ) +} + +#| Returns an IO::Path for $XDG_CONFIG_HOME, if it exists as environment +#| variable. Otherwise, return the default value, $HOME/.config. This directory +#| should contain user-specific configuration files. +sub xdg-config-home ( + --> IO::Path +) is export { + return %*ENV.IO if %*ENV:exists; + + $*HOME.add(".config"); +} + +#| Returns an IO::Path for $XDG_CACHE_HOME, if it exists as environment +#| variable. Otherwise, return the default value, $HOME/.cache. This directory +#| should contain user-specific, non-essential (cached) data. +sub xdg-cache-home ( + --> IO::Path +) is export { + return %*ENV.IO if %*ENV:exists; + + $*HOME.IO.add(".cache"); +} + +#| Retrieve the value of XDG_DATA_DIRS as a sequence of IO::Path objects. If +#| this variable is not set, it will use the default values of /usr/local/share +#| and /usr/share. These directories should be read in order to retrieve user +#| specific data files. +sub xdg-data-dirs ( + #| When set to true, this sequence will start with the XDG_DATA_HOME + #| value (or its default). + Bool:D :$home = True, + + --> Iterable +) is export { + ( + (xdg-data-home if $home), + (%*ENV // '/usr/local/share:/usr/share') + .split(':') + .map(*.IO) + .Slip + ) +} + +#| Returns an IO::Path for $XDG_DATA_HOME, if it exists as environment +#| variable. Otherwise, return the default value, $HOME/.local/share. This +#| directory should contain user-specific data files. +sub xdg-data-home ( + --> IO::Path +) is export { + return %*ENV.IO if %*ENV:exists; + + $*HOME.add(".local/share"); +} + +#| Returns an IO::Path for $XDG_RUNTIME_DIR, if it exists as environment +#| variable. Otherwise, return an IO::Path to a temporary directory. This +#| directory should contain user-specific runtime files and other file objects. +sub xdg-runtime-dir ( + --> IO::Path +) is export { + return %*ENV.IO if %*ENV:exists; + + # XDG_RUNTIME_DIR is the only XDG basedir variant that does not come with + # defaults. However, there are a number of de facto standard locations to + # make use of. Try them, and return whichever hits first that also seems to + # exist on the user's system. + [ + "/var/run".IO.add(+$*USER), + "/var/run".IO.add(~$*USER), + $*HOME.add(".local/run"), + $*TMPDIR, + $*CWD, + ] + .grep(*.d) + .first + .add($*PID) +} + +=begin pod + +=NAME IO::Path::XDG +=AUTHOR Patrick Spek +=VERSION 0.2.0 + +=head1 Synopsis + +=head1 Description + +=head1 Examples + +=head1 See also + +=end pod + +# vim: ft=raku noet -- cgit v1.1