TARS Config

This is the temporary home for the TARS configuration file.

Use the .config command to get a link to this page.

Please do not edit this page unless you are on Tech/IO, or without permission from Croquembouche.

This file is written in TOML. Please use two spaces for indentation.

TARS will check this page automatically on every use of .promote. If there's an error, TARS will let you know. In the meantime, it'll use a cached version.

For a great tool to assist with cron scheduling: https://crontab.guru (thanks aismallard!)

Note that TARS' timezone is UTC.

rating: 0+x

What this is

A bunch of miscellaneous CSS 'improvements' that I, CroquemboucheCroquembouche, use on a bunch of pages because I think it makes them easier to deal with.

The changes this component makes are bunch of really trivial modifications to ease the writing experience and to make documenting components/themes a bit easier (which I do a lot). It doesn't change anything about the page visually for the reader — the changes are for the writer.

I wouldn't expect translations of articles that use this component to also use this component, unless the translator likes it and would want to use it anyway.

This component probably won't conflict with other components or themes, and even if it does, it probably won't matter too much.

Usage

On any wiki:

[[include :scp-wiki:component:croqstyle]]

This component is designed to be used on other components. When using on another component, be sure to add this inside the component's [[iftags]] block, so that users of your component are not forced into also using Croqstyle.

Related components

Other personal styling components (which change just a couple things):

Personal styling themes (which are visual overhauls):

CSS changes

Reasonably-sized footnotes

Stops footnotes from being a million miles wide, so that you can actually read them.

.hovertip { max-width: 400px; }

Monospace edit/code

Makes the edit textbox monospace, and also changes all monospace text to Fira Code, the obviously superior monospace font.

@import url('https://fonts.googleapis.com/css2?family=Fira+Code:wght@400;700&display=swap');
 
:root { --mono-font: "Fira Code", Cousine, monospace; }
#edit-page-textarea, .code pre, .code p, .code, tt, .page-source { font-family: var(--mono-font); }
.code pre * { white-space: pre; }
.code *, .pre * { font-feature-settings: unset; }

Teletype backgrounds

Adds a light grey background to <tt> elements ({{text}}), so code snippets stand out more.

tt {
  background-color: var(--swatch-something-bhl-idk-will-fix-later, #f4f4f4);
  font-size: 85%;
  padding: 0.2em 0.4em;
  margin: 0;
  border-radius: 6px;
}

No more bigfaces

Stops big pictures from appearing when you hover over someone's avatar image, because they're stupid and really annoying and you can just click on them if you want to see the big version.

.avatar-hover { display: none !important; }

Breaky breaky

Any text inside a div with class nobreak has line-wrapping happen between every letter.

.nobreak { word-break: break-all; }

Code colours

Add my terminal's code colours as variables. Maybe I'll change this to a more common terminal theme like Monokai or something at some point, but for now it's just my personal theme, which is derived from Tomorrow Night Eighties.

Also, adding the .terminal class to a fake code block as [[div class="code terminal"]] gives it a sort of pseudo-terminal look with a dark background. Doesn't work with [[code]], because Wikidot inserts a bunch of syntax highlighting that you can't change yourself without a bunch of CSS. Use it for non-[[code]] code snippets only.

Quick tool to colourise a 'standard' Wikidot component usage example with the above vars: link

:root {
  --c-bg: #393939;
  --c-syntax: #e0e0e0;
  --c-comment: #999999;
  --c-error: #f2777a;
  --c-value: #f99157;
  --c-symbol: #ffcc66;
  --c-string: #99cc99;
  --c-operator: #66cccc;
  --c-builtin: #70a7df;
  --c-keyword: #cc99cc;
}
 
.terminal, .terminal > .code {
  color: var(--c-syntax);
  background: var(--c-bg);
  border: 0.4rem solid var(--c-comment);
  border-radius: 1rem;
}

Debug mode

Draw lines around anything inside .debug-mode. The colour of the lines is red but defers to CSS variable --debug-colour.

You can also add div.debug-info.over and div.debug-info.under inside an element to annotate the debug boxes — though you'll need to make sure to leave enough vertical space that the annotation doesn't overlap the thing above or below it.

…like this!

.debug-mode, .debug-mode *, .debug-mode *::before, .debug-mode *::after {
  outline: 1px solid var(--debug-colour, red);
  position: relative;
}
.debug-info {
  position: absolute;
  left: 50%;
  transform: translateX(-50%);
  font-family: 'Fira Code', monospace;
  font-size: 1rem;
  white-space: nowrap;
}
.debug-info.over { top: -2.5rem; }
.debug-info.under { bottom: -2.5rem; }
.debug-info p { margin: 0; }
# PART 0 - INTERNAL STUFF
 
[test]
message = "This is a test"
often = "0/4 * * * *"
 
[propagation]
logging.channel = "#tars-propagation"
all_articles.often = "35 0 */2 * *"
new_articles.often = "25 */4 * * *"
all_forums.often = "0 0 * * *"
new_forums.often = "* 1 * * *"
 
[cc]
subs.thread = "http://tars.wikidot.com/forum/t-13756256"
subs.rss = "http://tars.wikidot.com/feed/forum/t-13756256.xml"
 
[overrides]
rating.scp-2721 = 157
 
#    ___ ___  ___  __  __  ___ _____ ___ ___  _  _        
#   | _ \ _ \/ _ \|  \/  |/ _ \_   _|_ _/ _ \| \| |       
#   |  _/   / (_) | |\/| | (_) || |  | | (_) | .` |       
#   |_|_|_|_\\___/|_| _|_|\___/_|_| |___\___/|_|\_|  _  _ 
#     /_\| | | |_   _/ _ \|  \/  | /_\_   _|_ _/ _ \| \| |
#    / _ \ |_| | | || (_) | |\/| |/ _ \| |  | | (_) | .` |
#   /_/ \_\___/  |_| \___/|_|  |_/_/ \_\_| |___\___/|_|\_|
# PART 1 / 3
 
[logging]
# Should TARS tell you when it autopromotes something?
# If yes, set to a channel name. If no, leave the string empty.
logpromotion = "#site42"
 
[formats]
# What text should go in the social media post?
# Use curly braces to insert variables. Valid variables are:
#   {tag} - The formatted tag name (see the Tag Handling section)
#   {raw_tag} - The unformatted tag name
#   {scp_num} - The SCP number if it's an SCP, otherwise nothing
#               e.g. "SCP-4873", "SCP-003", "SCP-096-J", "SCP-2222-EX"
#   {title} - The title of the SCP or page
#   {fullname} - The "category:name" URL of the page
#   {author} - The author/s of the page. TARS will check the Attribution Metadata.
#   {message} - A custom message, specified when you use the command.
#               If you forget to specify the message, TARS will remind you.
# You can specify  multiple formats for each social media.
# The first one that matches a tag on the page will be used (or "default").
reddit.scp = "[New SCP] SCP-{num}, {title} by {author}"
instagram.scp = """{message}
SCP-{num} "{title}" - by {author} (http://www.scp-wiki.net/{fullname})"""
default.default = "[New {tag}] {title} by {author}"
 
[modes]
# Pick a promotion mode for each social media.
#   recent - Every time a new article meets the posting criteria, TARS will
#            place it into a queue. The queue will slowly be posted, one by one, 
#            at a constant and sustainable rate. TARS will learn what exactly
#            this rate is. This means that all articles get equal time under
#            the spotlight.
#   instant - Every time a new article meets the posting criteria, it will
#             be posted right away.
#   random - A truly random article. Same as .search's --random.
#   recommend - TARS will analyse wiki pages and pick the one that it thinks
#               needs promotion the most. Same as .search's --recommend.
#   manual - TARS won't automatically promote anything, and you will have to use
#            .promote in IRC.
#   none - No promotion. Not even from .promote.
# Any social media that use the same mode will have the same articles be promoted.
# If you're not using recent/instant, make sure to remove the "New" from the format!
reddit.mode = "recent"
serioustumblr.mode = "recent"
sillytumblr.mode = "recent"
twitter.mode = "recent"
facebook.mode = "recent"
deviantart.mode = "recent"
instagram.mode = "recent"
default.mode = "manual"
 
[images]
# imagesource - Pick a method to get images for social media that requires it.
#   automatic - TARS will scrape an image from the article. If there are none,
#               it will use the default image.
#   manual - TARS will ask for an image in IRC. If it doesn't get one by the
#            timeout, it will use the default image.
# defaultimage - Specify a URL to use as the default image.
imagesource = "automatic"
defaultimage = "null"
facebook.image = true
twitter.image = true
serioustumblr.image = true
sillytumblr.image = true
default.image = false
 
[frequency]
#   often - How often should TARS post? This setting is only used for the
#           "random" and "recommend" modes.
#             Please use cron syntax:
#               (https://en.wikipedia.org/wiki/cron, https://crontab.guru)
#             ┌────────── minute (0 - 59)
#             │ ┌──────── hour (0 - 23)
#             │ │ ┌────── day of the month (1 - 31)
#             │ │ │ ┌──── month (1 - 12)
#             │ │ │ │ ┌── day of the week (0 - 7) (0 and 7 are Sunday)
#             │ │ │ │ │
#             * * * * *
#           Examples:
#             00 12 * * * - 12:00 GMT every day
#             30 18 * * 2 - 18:30 GMT every Tuesday
#             00 12 01 * * - 12:00 GMT on the 1st of every month
#             * * * 1 5 - Every minute if it's January and Friday
#             00 12 * * 1,3,5 - 12:00 GMT every Mon, Wed and Fri
#             */5 * * * * - Every 5 minutes
#             00 12 * * 1#3 - 12:00 GMT every 3rd Monday of the month
reddit.often = "00 12 * * *" # one post per day at 12:00 GMT
default.often = "* * * * *" # would usually mean "every minute" but TARS interprets
                            # as "never"
 
#      _   ___ _____ ___ ___ _    ___         
#     /_\ | _ \_   _|_ _/ __| |  | __|        
#    / _ \|   / | |  | | (__| |__| _|         
#   /_/_\_\_|_\ |_| |___\___|____|___|_  _  _ 
#   / __| __| |  | __/ __|_   _|_ _/ _ \| \| |
#   \__ \ _|| |__| _| (__  | |  | | (_) | .` |
#   |___/___|____|___\___| |_| |___\___/|_|\_|
# PART 2 / 3
# Which articles should be promoted?
 
[selection]
# Place restrictions on the types of post that are promoted.
#   select - What articles should be promoted?
#            Uses the same syntax as TARS' .search (an empty string will match
#            all articles).
reddit.select = "-r 0..100 -c <365d -t +contest -scp"
default.select = ""
 
[filter-tags]
# Greylist: If the page has any of these tags, it will only be promoted if it
#   has another tag that is listed in the tag2text section
# Blacklist: If the page has any of these tags, it WILL NOT be promoted.
# You can also filter tags using the -t flag in the [selection] section.
greylist = [
  "admin",
]
blacklist = [
]
 
[filter-categories]
# Only pages from a category in the whitelist will be automatically promoted.
# If the page is from a category in the greylist, it will only be promoted if
#   it has a tag that's in the tags section.
# You can also filter categories using the -y flag in the [selection] section.
whitelist = [
  "_default",
]
greylist = [
  "component",
  "decomm",
]
 
[filter-authors]
# Put any users who've requested not to be promoted here.
# Names must exactly match Wikidot usernames.
# You can also filter authors using the -a flag in the [selection] section.
reddit = [
  "Someone",
]
twitter = [
  "SomeoneElse",
]
all = [
  "BannedUser",
]
 
[repromoting]
# If an article has already been promoted at some point, should it ever be
#   promoted again?
# TARS won't distinguish between social media - an article that has been
#   promoted on facebook won't be promoted on twitter. 
# Recommendation: set this to false if you're using the recommend mode and you
#   have only a short time between creating new promotions - unless your promotion
#   was particularly effective, you'll probably end up promoting the same article!
reddit.repromote = true
default.repromote = false
 
#    _____ _   ___                           
#   |_   _/_\ / __|                          
#     | |/ _ \ (_ |                          
#    _|_/_/ \_\___|_ ___  _    ___ _  _  ___ 
#   | || | /_\ | \| |   \| |  |_ _| \| |/ __|
#   | __ |/ _ \| .` | |) | |__ | || .` | (_ |
#   |_||_/_/ \_\_|\_|___/|____|___|_|\_|\___|
# PART 3 / 3
# Often you'll want to insert some text into the promotion based on what tags
#   are present on the article. This Part defines what text is associated with
#   which tags.
 
[regextags]
# New pages often go untagged for a while.
# Use this section to force the addition of a tag based on a page's URL.
# Each entry must be a valid regex.
# ALL matches will add a tag to the article, which will then be passed to [tags2text].
"^SCP-\d+-J$" = "joke"
"^SCP-\d+-EX$" = "explained"
"^SCP-\d+$" = "scp"
"-theme$" = "theme"
"-hub$" = "hub"
 
[tags2text]
# Converts tags to text, which will be used in the {tag} placeholder.
# There can only be 1 {tag} per promotion, which will be 1st one matched in this list.
# Therefore, these tags are in order of priority. Specific, important tags (like
#   contests) should go at the top. Non-specific, general tags (like "hub") should
#   go at the bottom.
# To match more than one tag at a time, specify multiple tags in a single "string"
#   (which is wrapped in quotes) separated by spaces.
# The parent page is included as a tag as "p_parent-page-url"
# The category is included as a tag as "c_category-name"
# All pages will have the tag "default"
# (Reminder: none of these replacements will be used with the 'instant' posting mode
#   unless the page somehow has its tags as soon as it is posted)
_tale-hub = "Canon Hub"
"joke scp" = "Joke SCP"
joke = "Joke Article"
contest = "Contest"
jam-con2019 = "Jam Contest '19 Entry"
collab-con2019 = "Collab Contest '19 Entry"
5000 = "SCP-5000 Contest Entry"
project-crossover = "Crossover Fanfic"
pattern-screamer = "Pattern Screamer Article" # really?
"end-of-death tale" = "End of Death Story"
end-of-death = "End of Death Article"
site = "Site Dossier"
"collaboration scp" = "Collaborative SCP"
"collaboration tale" = "Collaborative Tale"
collaboration = "Collaborative Article"
"international scp" = "Translated SCP"
"international tale" = "Translated Tale"
international = "Translated Article"
"interactive scp" = "Interactive SCP"
"interactive tale" = "Interactive Tale"
interactive = "Interactive Article"
p_antimemetics-division-hub = "Antimemetics Division Article"
"meta scp" = "Meta SCP"
"antimemetic scp" = "Antimemetic SCP"
creepypasta = "Creepypasta"
_alexylva = "Alexylva Format"
_anderson = "Anderson Format"
_are-we-cool-yet = "AWCY? Format"
_black-queen = "Black Queen Format"
_broken-god = "Broken God Format"
_chaos-insurgency = "CI Format"
_chicago-spirit = "Spirit Format"
_factory = "Factory Format"
_fifthist = "Fifthist Format"
_global-occult-coalition = "GOC Format"
_gru-division-p = "GRU-P Format"
_herman-fuller = "Herman Fuller Format"
_horizon-initiative = "Horizon Initiative Format"
_ijamea = "IJAMEA Format"
_manna-charitable-foundation = "Manna Format"
_marshall-carter-and-dark = "MC&D Format"
_nobody = "Nobody Format"
_oneiroi = "Oneiroi Format"
_prometheus = "Prometheus Format"
_reclamation = "ORIA Format"
_serpents-hand = "Serpent's Hand Format"
_shark-punching-center = "SPC Format"
_unusual-incidents-unit = "UIU Format"
_wilsons-wildlife = "WWS Format"
001-proposal = "SCP-001 Proposal"
explained = "Explained SCP"
decommissioned = "Decommissioned SCP"
scp = "SCP"
poetry = "Poetry"
tale = "Tale"
goi-format = "GoI Format"
theme = "CSS Theme"
artwork = "Artwork Page"
author = "Author Page"
essay = "Essay"
guide = "Guide"
news = "Monthly News"
experiment = "Experiment Log"
exploration = "Exploration Log"
incident = "Incident Report"
interview = "Interview Log"
supplement = "Supplement"
hub = "Hub"
default = "Article"
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License