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
---
CHANGELOG.md | 15 ++++++
META6.json | 9 ++--
README.md | 89 ++++++++++++++++++++++++++++++++++++
README.rakudoc | 23 ++++++++++
lib/IO/Path/XDG.rakumod | 119 ++++++++++++++++++++++++++++++++++++++++++++++++
5 files changed, 249 insertions(+), 6 deletions(-)
create mode 100644 README.md
create mode 100644 README.rakudoc
create mode 100644 lib/IO/Path/XDG.rakumod
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 6d74a60..15056c9 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,5 +5,20 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
and this project adheres to [Semantic
Versioning](http://semver.org/spec/v2.0.0.html).
+## [0.2.0] - 2020-04-25
+
+### Added
+
+- `xdg-config-dirs` has been added, which will return a sequence of IO::Path
+ objects to refer to all configuration dirs an application *should* check for
+ user defined configuration.
+
+- `xdg-data-dirs` has been added, which will return a sequence of IO::Path
+ objects to refer to all user specific data files.
+
+### Changed
+
+- References to Perl 6 have been updated to refer to Raku instead.
+
## [0.1.0] - 2019-09-12
- Initial release
diff --git a/META6.json b/META6.json
index ee9fd3a..8ef9e37 100644
--- a/META6.json
+++ b/META6.json
@@ -4,7 +4,6 @@
"Patrick Spek "
],
"depends": [
-
],
"description": "Convenience functions for working with the XDG Base Directory Specification",
"license": "AGPL-3.0",
@@ -12,14 +11,12 @@
"name": "IO::Path::XDG",
"perl": "6.d",
"provides": {
- "IO::Path::XDG": "lib/IO/Path/XDG.pm6"
+ "IO::Path::XDG": "lib/IO/Path/XDG.rakumod"
},
"resources": [
-
],
- "source-url": "https://gitlab.com/tyil/perl6-io-path-xdg",
+ "source-url": "https://home.tyil.nl/git/raku/IO::Path::XDG/",
"tags": [
-
],
- "version": "0.1.0"
+ "version": "0.2.0"
}
\ No newline at end of file
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..5ca1652
--- /dev/null
+++ b/README.md
@@ -0,0 +1,89 @@
+### sub xdg-config-dirs
+
+```perl6
+sub xdg-config-dirs(
+ Bool:D :$home = Bool::True
+) returns Iterable
+```
+
+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.
+
+class Bool:D :$home = Bool::True
+--------------------------------
+
+When set to true, this sequence will start with the XDG_CONFIG_HOME value (or its default).
+
+### sub xdg-config-home
+
+```perl6
+sub xdg-config-home() returns IO::Path
+```
+
+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-cache-home
+
+```perl6
+sub xdg-cache-home() returns IO::Path
+```
+
+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-data-dirs
+
+```perl6
+sub xdg-data-dirs(
+ Bool:D :$home = Bool::True
+) returns Iterable
+```
+
+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.
+
+class Bool:D :$home = Bool::True
+--------------------------------
+
+When set to true, this sequence will start with the XDG_DATA_HOME value (or its default).
+
+### sub xdg-data-home
+
+```perl6
+sub xdg-data-home() returns IO::Path
+```
+
+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-runtime-dir
+
+```perl6
+sub xdg-runtime-dir() returns IO::Path
+```
+
+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.
+
+NAME
+====
+
+IO::Path::XDG
+
+AUTHOR
+======
+
+Patrick Spek
+
+VERSION
+=======
+
+0.2.0
+
+Synopsis
+========
+
+Description
+===========
+
+Examples
+========
+
+See also
+========
+
diff --git a/README.rakudoc b/README.rakudoc
new file mode 100644
index 0000000..99f4dbe
--- /dev/null
+++ b/README.rakudoc
@@ -0,0 +1,23 @@
+=begin pod
+
+=NAME IO::Path::XDG
+=AUTHOR Patrick Spek
+=VERSION 0.0.0
+
+=head1 Description
+
+Convenience functions for working with the XDG Base Directory Specification
+
+=head1 Installation
+
+Install this module through L:
+
+=begin code :lang
+zef install IO::Path::XDG
+=end code
+
+=head1 License
+
+This module is distributed under the terms of the AGPL-3.0.
+
+=end pod
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