# Configuration Documentation
## Introduction
The configuration file is stored in a file called config.json, for an example, copy example-config.json to config.json (`cp example-config.json config.json`) and modify from there.
Currently all values in example-config.json are required, however I plan to add support for default values in the case of no value being set.
All options show an example configuartion value and the variable type + an explaination below it.
## Technical configuration
* "site_url": "https://example.com"
This value defines the url of your site, this used for the RSS feed to link back to post.
* "port": 8080
Integer. This value defines the port that you run the blog on. Don't change this value if you don't know what that means.
* "allow_signup": true
Boolean. Defines weather new people should be allowed to signup.
* "timeline_length": 20
Integer. How many posts will be shown on the timeline (home page).
* "enable_hitcount": true
Boolean. Enabling the hitcount (a number that represents the amount of front page loads (stored in hitcount.txt)) can slightly slow down loading of the front page.
* "charset": "UTF-8"
String. This is the value in the tag in the html of all pages, you should not change this unless you know why.
* "root_path": "/path/to/root/of/website"
String. Anything in this directory will be in the webroot, so put favicon.ico and anything else here.
## Basic Customisation
* "seperator": "\
"
String. This is what %S represents in the formatting, this will go inbetween posts and generally to seperate out content on pages.
* "site_name": "My Blog"
String. This is what %Y represents; it's the name of your instance, a human readable string.
* "site_description": "Read my blogs!"
String. This is what %W represents; it's the description of your instance, a human readable string.
* "default_commenter_username": "Anon"
String. Default commenter username if no username is inputted in comment submission.
## Syndication
* "rss": true
Boolean. Enable or Disable RSS feeds.
* "rss_path": "/rss"
String. The path of the global rss feed file.
## Dates
Read more at [date-fns](https://date-fns.org/v4.1.0/docs/format)
* "date_format": "yyyy-MM-dd"
String. The format of date's on the website.
* "time_zone": "+0000"
String. Your offset from UTC
## Advanced Customisation
All of these customisations support format indicators
Format indicatos are a % sign followed by a character and represent a piece of information
relevant to the data at hand. Below is a list of all format indicators:
* %% - A literal %
* %A - List of tags
* %B - List of tags, each one with a hyperlink to that tag page
* %C - Post content
* %D - Published date in the format specified by date_format
* %E - Edited date in the format specified by date_format
* %F - Pretty name
* %G - Tag name (used for the tag page only)
* %H - Frontpage hit count
* %I - User description
* %L - URL Permanent link to the post
* %M - comments
* %N - the username of the user (poster)
* %O - URL to edit this post
* %P - URL to create a new post
* %Q - URL to sign up
* %R - Site wide RSS feed
* %S - post seperator as defined by post_seperator
* %T - Title
* %U - URL the the user (poster)
* %W - Site Description as defined by site_description
* %X - Comment submission box
* %Y - Site Name as defined by site_name
* %Z - Attribution (to me) and source code link and license
### Header's
* "timeline_header": "%Y
%W
Create Post\
RSS Feed\
Sign Up\
Delete Account\
Hit count: %H%S"
String. The format of the header peice of the home page/timeline page, example includes the site name, desciption and some relevant links.
* "user_page_header": "%F's posts:
%I%S"
String. The format of the header peice of the user page which contains all posts from a particular user. example includes the prettyname and their description.
* "tag_page_header": "Posts tagged: %G
%S"
String. The format of the header peice of the tag page which contains all posts with a particular tag, example includes the tag name.
### Post's
* "user_post_format": "%T
%C
%B\
Permalink<\br/\>%X%M%S"
String. The format of posts on the users page. Example includes title, content, tags, permalink and comments.
* "post_page_format": "%T
%C
%B\
By %N\
Edit Post\
Posted: %D\
Edited: %E%S%X%M%S"
String. The format of the post on the post's page. Example includes title, content, tags, user page hyperlink, edit post hyperlink, publish date, modified date and comments.
* "timeline_post_format": "%T
%C
Permalink<\br/\>By %N%X%M%S"
String. The format of the posts on the timeline, example includes title, content, permalink, user page hyperlink and comments.
* "tag_post_format": "%T
%C
%B\
Permalink\
By %N%S"
String. The format of the posts on the tag page, example includes title, content, permalink and user page hyperlink.
### Other
* "site_wide_footer": "Site is ran by DeaDvey\
%Z"
String. The format of the site wide footer, shown on every page.
* "css": "body { background: red; }"
String. Custom CSS to be applied to all pages, if you want more complex css, you can edit custom.css.
## Custom Strings
All of these values are of type String
* "signup_agreement": "I agree to not post illegal or hateful content"
The agreement people must check to signup for the server.
* "signups_unavailable": "Sorry, this server does not allow signups"
The string to be displayed if the user tries to signup when signup's are disabled.
* "user_exists": "Sorry, this user already exists, try a different username"
The string to be shown when someone is trying to signup with a name exists.
* "user_doesnt_exist": "Sorry, this user does not exist"
The string to be shown when someone tries to edit their account or make a post but the username doesn't exist.
* "delete_account_confirmation": "I agree that my account and all of my posts will be permanently deleted instantly"
The string to be shown as a confirmation when a user tries to delete their account.
* "incorrect_password": "Incorrect Password"
The string to be shown if the password is incorrect.
## Other
* "attribution" = "Powered by blogger-nodejs: Source Code, license (WTFPL)"
String. Represented by format indicator %Z. Only change this value if you modify the source code or just want to change some of the formatting.