import { fileURLToPath } from 'url'; import { join, resolve, dirname } from 'path'; import Getenv from 'getenv'; const __filename = fileURLToPath(import.meta.url); const __dirname = dirname(__filename); 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 * initialize all of the sub-components. It can extend any property of * the blog object. * * @memberof Blog * @typedef {object} tConfiguration * @property {number} maxPosts=3 the max number of posts that can exist * at one time * @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. * @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. * @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 */ 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), 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')) };