]> git.r.bdr.sh - rbdr/blog/blobdiff - config/config.js
Update README.md
[rbdr/blog] / config / config.js
index 476bcfa312d800462b7b94e8cd1ed02cbebd90bf..cf2a386e2e38292ba2bb76f3c4c984a44ab1e930 100644 (file)
@@ -1,9 +1,49 @@
-'use strict';
+import { fileURLToPath } from 'url';
+import { join, resolve, dirname }  from 'path';
+import Getenv from 'getenv';
 
 
-const Path = require('path');
-const Getenv = require('getenv');
+const __filename = fileURLToPath(import.meta.url);
+const __dirname = dirname(__filename);
 
 
-const internals = {};
+const internals = {
+  // We'll use this to store configuration, such as the remote config,
+  // templates, and the static directory.
+  configDirectory: Getenv('BLOG_CONFIG_DIRECTORY',
+    resolve(
+      join(
+        Getenv(
+          'XDG_CONFIG_HOME',
+          join(Getenv('HOME'), '.config')
+        ),
+        'blog'
+      )
+    )
+  ),
+  // We'll use this to store the actual blog contents.
+  dataDirectory: Getenv('BLOG_DATA_DIRECTORY',
+    resolve(
+      join(
+        Getenv(
+          'XDG_DATA_HOME',
+          join(Getenv('HOME'), '.local/share')
+        ),
+        'blog'
+      )
+    )
+  ),
+  // We'll use this to store the actual blog contents.
+  outputDirectory: Getenv('BLOG_OUTPUT_DIRECTORY',
+    resolve(
+      join(
+        Getenv(
+          'XDG_CACHE_HOME',
+          join(Getenv('HOME'), '.cache')
+        ),
+        'blog'
+      )
+    )
+  )
+};
 
 /**
  * The main configuration object for Blog. It will be used to
 
 /**
  * The main configuration object for Blog. It will be used to
@@ -14,19 +54,44 @@ const internals = {};
  * @typedef {object} tConfiguration
  * @property {number} maxPosts=3 the max number of posts that can exist
  * at one time
  * @typedef {object} tConfiguration
  * @property {number} maxPosts=3 the max number of posts that can exist
  * at one time
- * @property {string} postsDirectory=<project_root>/.posts the location of
+ * @property {string} configDirectory=$XDG_CONFIG_HOME/blog the location of
+ * the configuration files.
+ * @property {string} dataDirectory=$XDG_DATA_HOME/blog the location of
+ * the blog data.
+ * @property {string} outputDirectory=$XDG_CACHE_HOME/blog the location of
+ * the generated blog files.
+ * @property {string} postsDirectory=$XDG_DATA_HOME/blog/posts the location of
  * the directory where the posts will be stored.
  * the directory where the posts will be stored.
- * @property {string} staticDirectory=<project_root>/static the location of
+ * @property {string} archiveDirectory=$XDG_DATA_HOME/blog/archive the location of
+ * the directory where the archive will be stored.
+ * @property {string} staticDirectory=$XDG_DATA_HOME/blog/static the location of
  * the directory where the generated files will be placed. NOTE: There
  * are some pre-built style files in the default directory, if you
  * select another one, make sure you include them manually.
  * the directory where the generated files will be placed. NOTE: There
  * are some pre-built style files in the default directory, if you
  * select another one, make sure you include them manually.
- * @property {string} templatesDirectory=<project_root>/templates the
+ * @property {string} templatesDirectory=$XDG_CONFIG_HOME/blog/templates the
+ * location of the templates we'll use to generate the index.html, feed.xml,
+ * and index.txt.
+ * @property {string} remoteConfig=$XDG_CONFIG_HOME/blog/blogremotee the
  * location of the templates we'll use to generate the index.html
  */
  * location of the templates we'll use to generate the index.html
  */
-module.exports = internals.Config = {
+export default {
+  // XDG_CONFIG_HOME and XDG_DATA_HOME defaults.
+  configDirectory: internals.configDirectory,
+  dataDirectory: internals.dataDirectory,
+  outputDirectory: internals.outputDirectory,
+
+  // User configuration, changeable with BLOG_ env variables.
   maxPosts: Getenv.int('BLOG_MAX_POSTS', 3),
   maxPosts: Getenv.int('BLOG_MAX_POSTS', 3),
-  postsDirectory: Getenv('BLOG_POSTS_DIRECTORY', Path.resolve(Path.join(__dirname, '../.posts'))),
-  archiveDirectory: Getenv('BLOG_ARCHIVE_DIRECTORY', Path.resolve(Path.join(__dirname, '../.archive'))),
-  staticDirectory: Getenv('BLOG_STATIC_DIRECTORY', Path.resolve(Path.join(__dirname, '../static'))),
-  templatesDirectory: Getenv('BLOG_TEMPLATES_DIRECTORY', Path.resolve(Path.join(__dirname, '../templates')))
+  postsDirectory: resolve(join(internals.dataDirectory, 'posts')),
+  archiveDirectory: resolve(join(internals.dataDirectory, 'archive')),
+  staticDirectory: resolve(join(internals.dataDirectory, 'static')),
+  templatesDirectory: resolve(join(internals.dataDirectory, 'templates')),
+
+  remoteConfig: resolve(join(internals.configDirectory, 'blogremote')),
+
+  blogOutputDirectory: resolve(join(internals.outputDirectory, 'blog')),
+  archiveOutputDirectory: resolve(join(internals.outputDirectory, 'archive')),
+
+  // Internal config: This can't be modified.
+  defaultTemplatesDirectory: resolve(join(__dirname, '../templates'))
 };
 };