aboutsummaryrefslogtreecommitdiffstats
path: root/terminaldweller.com
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--terminaldweller.com/cgit/docker-compose.yaml4
-rw-r--r--terminaldweller.com/eggdrop/docker-compose.yaml30
-rw-r--r--terminaldweller.com/eggdrop/eggdrop.conf1724
-rwxr-xr-xterminaldweller.com/ejabberd/add_users.sh6
-rw-r--r--terminaldweller.com/ejabberd/docker-compose.yaml3
-rw-r--r--terminaldweller.com/ejabberd/ejabberd.yml37
-rw-r--r--terminaldweller.com/limnoria/limnoriabot.conf5361
-rw-r--r--terminaldweller.com/lounge/docker-compose.yml36
-rw-r--r--terminaldweller.com/mail/mailcow.conf248
-rw-r--r--terminaldweller.com/main/nginx.conf6
-rw-r--r--terminaldweller.com/main/srv/ergo.pngbin0 -> 4697 bytes
-rw-r--r--terminaldweller.com/main/srv/index.html122
-rw-r--r--terminaldweller.com/main/srv/nostr.pngbin0 -> 4658 bytes
-rw-r--r--terminaldweller.com/main/srv/otr_bonobonet.pngbin0 -> 4618 bytes
-rw-r--r--terminaldweller.com/main/srv/otr_libera.pngbin0 -> 4625 bytes
-rw-r--r--terminaldweller.com/main/srv/otr_oftc.pngbin0 -> 4575 bytes
-rw-r--r--terminaldweller.com/main/srv/otr_rizon.pngbin0 -> 4661 bytes
-rw-r--r--terminaldweller.com/main/srv/otr_tilde.pngbin0 -> 4699 bytes
-rw-r--r--terminaldweller.com/matterbridge/matterbridge.toml94
-rw-r--r--terminaldweller.com/pleroma/config.exs2
-rw-r--r--terminaldweller.com/sopel/default.cfg41
-rw-r--r--terminaldweller.com/soulhack/run.sh18
-rw-r--r--terminaldweller.com/tor_bnc/Dockerfile12
-rw-r--r--terminaldweller.com/tor_bnc/config3
-rw-r--r--terminaldweller.com/tor_bnc/docker-compose.yml16
-rw-r--r--terminaldweller.com/tor_bnc/proxychains.conf68
-rwxr-xr-xterminaldweller.com/update_main.sh41
-rw-r--r--terminaldweller.com/znc/docker-compose.yaml17
28 files changed, 7810 insertions, 79 deletions
diff --git a/terminaldweller.com/cgit/docker-compose.yaml b/terminaldweller.com/cgit/docker-compose.yaml
index 59ec298..c63c0e3 100644
--- a/terminaldweller.com/cgit/docker-compose.yaml
+++ b/terminaldweller.com/cgit/docker-compose.yaml
@@ -23,8 +23,8 @@ services:
# - /etc/hosts:/etc/hosts:ro
# - /etc/localtime:/etc/localtime:ro
- ./cgit.conf:/etc/lighttpd/cgit.conf:ro
- - /etc/letsencrypt/archive/git.terminaldweller.com/fullchain.pem:/etc/letsencrypt/archive/git.terminaldweller.com/fullchain.pem:ro
- - /etc/letsencrypt/archive/git.terminaldweller.com/privkey.pem:/etc/letsencrypt/archive/git.terminaldweller.com/privkey.pem:ro
+ - /etc/letsencrypt/live/git.terminaldweller.com/fullchain.pem:/etc/letsencrypt/live/git.terminaldweller.com/fullchain.pem:ro
+ - /etc/letsencrypt/live/git.terminaldweller.com/privkey.pem:/etc/letsencrypt/live/git.terminaldweller.com/privkey.pem:ro
- cache:/cgit_cache
- ./authorized_keys:/home/git/.ssh/authorized_keys
bootstrap:
diff --git a/terminaldweller.com/eggdrop/docker-compose.yaml b/terminaldweller.com/eggdrop/docker-compose.yaml
new file mode 100644
index 0000000..8b00574
--- /dev/null
+++ b/terminaldweller.com/eggdrop/docker-compose.yaml
@@ -0,0 +1,30 @@
+version: '3.1'
+
+services:
+ eggdrop:
+ image: eggdrop:1.9
+### If running for the first time without providing your own config, you
+### probably want to set these variables
+ # environment:
+ # - SERVER="irc.terminaldweller.com +6697"
+ # - NICK=eggdrop
+### Make this match your listen setting in the config
+ ports:
+ - "127.0.0.1:3335:3333"
+### Change this to the path with your config and user/channel files
+ networks:
+ - eggnet
+ volumes:
+ - ./data/:/home/eggdrop/eggdrop/data/
+ #command: ["-c", "/home/eggdrop/eggdrop/data/eggdrop.conf"]
+### If you want to add scripts, put them here. Don't mount to /scripts because
+### it will overwrite the ones that are already used. Make sure you use
+### 'source scripts2/foo.tcl' as the path in the config.
+# -/changethispart/scripts:/home/eggdrop/eggdrop/scripts2
+### Enter config name, if not eggdrop.conf
+# command: LeafBlower.conf
+ stdin_open: true
+ tty: true
+ restart: unless-stopped
+networks:
+ eggnet:
diff --git a/terminaldweller.com/eggdrop/eggdrop.conf b/terminaldweller.com/eggdrop/eggdrop.conf
new file mode 100644
index 0000000..1afe4f7
--- /dev/null
+++ b/terminaldweller.com/eggdrop/eggdrop.conf
@@ -0,0 +1,1724 @@
+#! /path/to/executable/eggdrop
+# ^- This should contain a fully qualified path to your Eggdrop executable.
+#
+# This is a sample Eggdrop configuration file which includes all possible
+# settings that can be used to configure your bot.
+#
+# The pound signs (#) that you see at the beginning of some lines mean that
+# the remainder of that line is a comment, or just for your information. By
+# adding or deleting pound signs, you can comment or uncomment a setting,
+# respectively.
+#
+# Arguments for a command or setting may be inclosed in <>'s or []'s in the
+# example/description. Arguments in <>'s are required, while [] means optional.
+#
+# More detailed descriptions of all these settings can be found in
+# doc/settings/.
+
+
+
+##### BASIC SETTINGS #####
+
+# This setting defines the username the bot uses on IRC. This setting has no
+# effect if an ident daemon is running on your bot's machine. See also ident
+# module.
+set username "eggdrop"
+
+# This setting defines which contact person should be shown in .status,
+# /msg help, and other places. You really should include this information.
+set admin "devi <email: devi@terminaldweller.com>"
+
+# This setting is used only for info to share with others on your botnet.
+# Set this to the IRC network your bot is connected to.
+set network "irc.terminaldweller.com"
+
+# This setting defines which timezone is your bot in. It's used for internal
+# routines as well as for logfile timestamping and scripting purposes.
+# The timezone string specifies the name of the timezone and must be three
+# or more alphabetic characters. For example, Central European Time(UTC+1)
+# should be "CET".
+set timezone "EST"
+
+# The offset setting specifies the time value to be added to the local
+# time to get Coordinated Universal Time (UTC aka GMT). The offset is
+# positive if the local timezone is west of the Prime Meridian and
+# negative if it is east. The value (in hours) must be between -23 and
+# 23. For example, if the timezone is UTC+1, the offset is -1.
+set offset "3:30"
+
+# If you don't want to use the timezone setting for scripting purposes only,
+# but instead everywhere possible, un-comment the following line.
+#set env(TZ) "$timezone$offset"
+
+############################################################################
+## Network settings overview
+## With the addition of IPv6 and the associated config changes, here are some
+## BASIC common networking scenarios, along with the appropriate settings
+## needed:
+##
+## SHELL PROVIDER (MULTIPLE IPs/VHOSTS)
+## * set vhost4 or vhost6 to the IP/vhost you want to use
+## * do not set nat-ip
+##
+## HOME COMPUTER/VPS, DIRECT INTERNET CONNECTION (SINGLE IP, NO NAT)
+## * do not set vhost4/vhost6
+## * do not set nat-ip
+##
+## HOME COMPUTER, BEHIND A NAT
+## * do not set vhost4/vhost6
+## * set nat-ip to your external IP
+##
+## And as a general rule, if you're having issues with Eggdrop responding to
+## a CTCP chat request, try setting vhost4/6 to your external IP.
+##
+## Below is a detailed description of each setting, please read them to
+## learn more about their function.
+############################################################################
+
+# If you're using virtual hosting (your machine has more than 1 IP), you
+# may want to specify the particular IP to bind to. You can specify either
+# by hostname or by IP. Note that this is not used for listening. Use the
+# 'listen' command to specify the listening address. If you are behind a
+# NAT, you will likely want to leave this commented out as Eggdrop should
+# determine the correct IP on its own.
+#set vhost4 "virtual.host.com"
+#set vhost4 "99.99.0.0"
+
+# IPv6 vhost to bind to for outgoing IPv6 connections. You can set it
+# to any valid IPv6 address or hostname, resolving to an IPv6 address.
+# Note that this is not used for listening. Use the 'listen' command
+# to specify the listening address.
+#set vhost6 "my.ipv6.host.com"
+#set vhost6 "2001:db8::c001:b07"
+
+# Prefer IPv6 over IPv4 for connections and dns resolution? Set to 1 to try
+# IPv6 first, otherwise set to 0 for IPv4. If the preferred protocol family
+# is not supported, the other one will be tried.
+set prefer-ipv6 0
+
+# If you want to have your Eggdrop messages displayed in a language other
+# than English, change this setting to match your preference. An alternative
+# would be to set the environment variable EGG_LANG to that value.
+#
+# Languages included with Eggdrop: Danish, English, French, Finnish, German,
+# Italian, Portuguese.
+#addlang "english"
+
+
+##### LOG FILES #####
+
+# Eggdrop is capable of logging various things, from channel chatter to
+# commands people use on the bot and file transfers. Logfiles are normally
+# kept for 24 hours. Afterwards, they will be renamed to "(logfile).yesterday".
+# After 48 hours, they will be overwritten by the logfile of the next day.
+#
+# Events are logged by certain categories. This way, you can specify
+# exactly what kind of events you want sent to various logfiles.
+#
+# Logfile flags:
+# b - information about bot linking and userfile sharing
+# c - commands
+# d - misc debug information
+# g - raw outgoing share traffic
+# h - raw incoming share traffic
+# j - joins, parts, quits, topic changes, and netsplits on the channel
+# k - kicks, bans, and mode changes on the channel
+# l - linked bot messages
+# m - private msgs, notices and ctcps to the bot
+# o - misc info, errors, etc (IMPORTANT STUFF)
+# p - public text on the channel
+# r - raw incoming server traffic
+# s - server connects, disconnects, and notices
+# t - raw incoming botnet traffic
+# u - raw outgoing botnet traffic
+# v - raw outgoing server traffic
+# w - wallops (make sure the bot sets +w in init-server)
+# x - file transfers and file-area commands
+#
+# Note that modes d, h, r, t, and v can fill disk quotas quickly. There are
+# also eight user-defined levels (1-8) which can be used by Tcl scripts.
+#
+# Each logfile belongs to a certain channel. Events of type 'k', 'j', and 'p'
+# are logged to whatever channel they happened on. Most other events are
+# currently logged to every channel. You can make a logfile belong to all
+# channels by assigning it to channel "*".
+
+# This is the maximum number of concurrent logfiles that can be opened
+# for writing at one time. At most, this value should be the maximum
+# number of channels you expect to create log files for. There is no
+# value for 'infinity'; very few cases should ever require more than 20.
+# A decrease to this value while running will require a restart (not rehash)
+# of the bot. However, don't decrease it below 5.
+set max-logs 20
+
+# This is the maximum size of your logfiles. Set it to 0 to disable.
+# This value is in kilobytes, so '550' would mean cycle logs when it
+# reaches the size of 550 kilobytes. Note that this only works if you
+# have keep-all-logs 0 (OFF).
+set max-logsize 0
+
+# This could be good if you have had problem with the logfile filling
+# your quota/hard disk or if you log +p and publish it to the web and
+# need more up-to-date info. Note that this setting might increase the
+# CPU usage of your bot (on the other hand it will decrease your mem usage).
+set quick-logs 0
+
+# This setting allows you the logging of raw incoming server traffic via
+# console/log flag 'r', raw outgoing server traffic via console/log mode 'v',
+# raw incoming botnet traffic via console/log mode 't', raw outgoing botnet
+# traffic via console/log mode 'u', raw outgoing share traffic via
+# console/log mode 'g', and raw incoming share traffic via console/log
+# mode 'h'. These flags can create a large security hole, allowing people to
+# see user passwords. This is now restricted to +n users only. Please choose
+# your owners with care.
+set raw-log 0
+
+# This creates a logfile named eggdrop.log that captures items logged at the
+# m, c, and o log levels (private msgs/ctcps, commands/errors, and misc
+# info) from any channel.
+logfile mco * "logs/eggdrop.log"
+
+# This creates a logfile named lamest.log that captures items logged at the
+# j, p, and k log levels (joins/parts/quits/netsplits, public chat,
+# kicks/bans/mode changes) on the channel #lamest.
+#logfile jpk #lamest "logs/lamest.log"
+
+# Use this feature to timestamp entries in the log file.
+set log-time 1
+
+# Set the following to the timestamp for the logfile entries. Popular times
+# might be "[%H:%M]" (hour, min), or "[%H:%M:%S]" (hour, min, sec).
+# Read `man strftime' for more formatting options. Keep it below 32 chars.
+set timestamp-format {[%H:%M:%S]}
+
+# If you want to keep your logfiles forever, turn this setting on. All
+# logfiles will get suffix ".[day, 2 digits][month, 3 letters][year, 4 digits]".
+# Note that your quota/hard-disk might be filled by this, so check your
+# logfiles often and download them.
+set keep-all-logs 0
+
+# If keep-all-logs is 1, this setting will define the suffix of the logfiles.
+# The default will result in a suffix like "04May2000". "%Y%m%d" will produce
+# the often used yyyymmdd format. Read the strftime manpages for more options.
+set logfile-suffix ".%d%b%Y"
+
+# You can specify when Eggdrop should switch logfiles and start fresh. You
+# must use military time for this setting. 300 is the default, and describes
+# 03:00 (AM).
+set switch-logfiles-at 300
+
+# "Writing user file..." and "Writing channel file..." messages won't be logged
+# anymore if this option is enabled. If you set it to 2, the "Backing up user
+# file..." and "Backing up channel file..." messages will also not be logged.
+# In addition to this, you can disable the "Switching logfiles..." and the new
+# date message at midnight, by setting this to 3.
+set quiet-save 0
+
+
+##### CONSOLE #####
+
+# This is the default console mode. It uses the same event flags as the log
+# files do. The console channel is automatically set to your "primary" channel,
+# which is set in the modules section of the config file. Masters can change
+# their console channel and modes with the '.console' command.
+
+set console "mkcoblxs"
+
+
+##### FILES AND DIRECTORIES #####
+
+# Specify here the filename your userfile should be saved as.
+set userfile "eggdrop.user"
+
+# Specify here the filename Eggdrop will save its pid to. If no pidfile is
+# specified, pid.(botnet-nick) will be used.
+#set pidfile "pid.LamestBot"
+
+# Specify here where Eggdrop should look for help files. Don't modify this
+# setting unless you know what you're doing!
+set help-path "help/"
+
+# Specify here where Eggdrop should look for text files. This is used for
+# certain Tcl and DCC commands.
+set text-path "text/"
+
+# The MOTD (Message Of The day) is displayed when people dcc chat or telnet
+# to the bot. Look at doc/TEXT-SUBSTITUTIONS for options.
+set motd "text/motd"
+
+# This banner will be displayed on telnet connections. Look at
+# doc/TEXT-SUBSTITUTIONS for options.
+set telnet-banner "text/banner"
+
+# This specifies what permissions the user, channel, and notes files should
+# be set to. The octal values are the same as for the chmod system command.
+#
+# To remind you:
+#
+# u g o u g o u g o
+# 0600 rw------- 0400 r-------- 0200 -w------- u - user
+# 0660 rw-rw---- 0440 r--r----- 0220 -w--w---- g - group
+# 0666 rw-rw-rw- 0444 r--r--r-- 0222 -w--w--w- o - others
+#
+# Note that the default 0600 is the most secure one and should only be changed
+# if you need your files for shell scripting or other external applications.
+set userfile-perm 0600
+
+
+##### BOTNET/DCC/TELNET #####
+
+# Settings in this section should be unimportant for you until you deal
+# with botnets (multiple Eggdrops connected together to maximize efficiency).
+# You should read doc/BOTNET before modifying these settings.
+
+# If you want to use a different nickname on the botnet than you use on
+# IRC (i.e. if you're on an un-trusted botnet), un-comment the next line
+# and set it to the nick you would like to use.
+#set botnet-nick "LlamaBot"
+
+# This opens a telnet port by which you and other bots can interact with the
+# Eggdrop by telneting in. There are more options for the listen command in
+# doc/tcl-commands.doc. Note that if you are running more than one bot on the
+# same machine, you will want to space the telnet ports at LEAST 5 apart,
+# although 10 is even better.
+#
+# Valid ports are typically anything between 1025 and 65535 assuming the
+# port is not already in use. If you would like the bot to listen for users
+# and bots in separate ports, use the following format:
+#
+# listen 3333 bots
+# listen 4444 users
+#
+# If you wish to use only one port, use this format:
+#
+# listen 3333 all
+#
+# You can setup a SSL port by prepending a plus sign to it:
+#
+# listen +5555 all
+#
+# To bind the listening port to a specific IP instead of all available, insert
+# a valid IP assigned to the host Eggdrop is running on infront of the port
+# (this replaces the listen-addr setting used prior to Eggdrop v1.9)
+#
+# listen 1.2.3.4 3333 all
+#
+# You need to un-comment this line and change the port number in order to open
+# the listen port. You should not keep this set to 3333.
+#listen 3333 all
+
+# This setting defines whether or not people can boot users on the Eggdrop
+# from other bots in your botnet.
+# Options are:
+# 0 = allow *no* outside boots
+# 1 = allow boots from sharebots
+# 2 = allow any boots
+set remote-boots 2
+
+# This setting allows remote bots to tell your Eggdrop to unlink from
+# share bots.
+set share-unlinks 1
+
+# This setting will drop telnet connections not matching a known host.
+set protect-telnet 0
+
+# This setting will make the bot ignore DCC chat requests which appear to
+# have bogus information on the grounds that the user may have been trying
+# to make the bot connect to somewhere that will get it into trouble, or
+# that the user has a broken client, in which case the connect wouldn't work
+# anyway.
+set dcc-sanitycheck 0
+
+# This setting defines the time in seconds the bot should wait for ident reply
+# before the lookup fails. The default ident on timeout is 'telnet'. A value of
+# 0 disables the ident lookup entirely.
+set ident-timeout 5
+
+# Define here whether or not a +o user still needs the +p flag to dcc the bot.
+set require-p 1
+
+# If you want people allow to telnet in and type 'NEW' to become a new user,
+# set this to 1. This is similar to the 'hello' msg command. The protect-telnet
+# setting must be set to 0 to use this.
+set open-telnets 0
+
+# If you don't want Eggdrop to identify itself as an eggdrop on a telnet
+# connection, set this setting to 1. Eggdrop will display a logon prompt with
+# only the contents of the stealth-prompt setting.
+set stealth-telnets 0
+
+# If stealth-telnets is 1, the string in this setting will replace the
+# traditional Eggdrop banner. Two common choices are listed. (The \n's are
+# present to maintain backwards compatibility and will be removed in a
+# future release)
+#set stealth-prompt "login: "
+set stealth-prompt "\n\nNickname.\n"
+
+# If you want Eggdrop to display a banner when telneting in, set this setting
+# to 1. The telnet banner is set by 'set telnet-banner'.
+set use-telnet-banner 0
+
+# This setting defines a time in seconds that the bot should wait before
+# a dcc chat, telnet, or relay connection times out.
+set connect-timeout 15
+
+# Specify here the number of lines to accept from a user on the partyline
+# within 1 second before they are considered to be flooding and therefore
+# get booted.
+set dcc-flood-thr 3
+
+# Define here how many telnet connection attempts in how many seconds from
+# the same host constitute a flood. The correct format is Attempts:Seconds.
+set telnet-flood 5:60
+
+# If you want telnet-flood to apply even to +f users, set this setting to 1.
+set paranoid-telnet-flood 1
+
+# Set here the amount of seconds before giving up on hostname/address lookup
+# (you might want to increase this if you are on a slow network). The default is
+# RES_TIMEOUT, which is generally 5, the allowed maximum is RES_MAXRETRANS (see
+# <resolv.h>).
+#set resolve-timeout 5
+
+
+##### SSL SETTINGS #####
+
+# Settings in this section take effect when eggdrop is compiled with TLS
+# support.
+#
+# IMPORTANT: The following two settings MUST be uncommented in order to
+# use SSL functionality!
+
+# File containing your private key, needed for the SSL certificate
+# (see below). You can create one issuing the following command:
+#
+# openssl genrsa -out eggdrop.key 4096
+#
+# It will create a 4096 bit RSA key, strong enough for eggdrop.
+# For your convenience, you can type 'make sslcert' after 'make install'
+# and you'll get a key and a certificate in your eggdrop directory.
+# If you installed to a non-default location, use 'make sslcert DEST=...'
+#
+# THIS IS REQUIRED if you intend to use this bot as a hub for SSL hubs/
+# listen ports, secure file transfer, /ctcp botnick schat, or
+# using a certificate to authenticate with NickServ.
+#set ssl-privatekey "eggdrop.key"
+
+# Specify the filename where your SSL certificate is located. If you
+# don't set this, eggdrop will not be able to act as a server in SSL
+# connections, as with most ciphers a certificate and a private key
+# are required on the server side. Must be in PEM format.
+# If you don't have one, you can create it using the following command:
+#
+# openssl req -new -key eggdrop.key -x509 -out eggdrop.crt -days 365
+#
+# For your convenience, you can type 'make sslcert' after 'make install'
+# and you'll get a key and a certificate in your eggdrop directory.
+# If you installed to a non-default location, use 'make sslcert DEST=...'
+#
+# THIS IS REQUIRED if you intend to use this bot as a hub for SSL hubs/
+# listen ports, secure file transfer, /ctcp botnick schat, or
+# using a certificate to authenticate with NickServ.
+#set ssl-certificate "eggdrop.crt"
+
+# Sets the maximum depth for the certificate chain verification that will
+# be allowed for ssl. When certificate verification is enabled, any chain
+# exceeding this depth will fail verification.
+#set ssl-verify-depth 9
+
+# Specify the location at which CA certificates for verification purposes
+# are located. These certificates are trusted. If you don't set this,
+# certificate verification will not work.
+set ssl-capath "/etc/ssl/"
+#set ssl-cafile ""
+
+# Specify the list of protocols allowed for use with ssl. The protocol list is
+# one or more protocol strings separated by spaces. Available protocols are
+# SSLv2, SSLv3, TLSv1, TLSv1.1, TLSv1.2, TLSv1.3.
+# set ssl-protocols "TLSv1 TLSv1.1 TLSv1.2 TLSv1.3"
+
+# Specify the list of ciphers (in order of preference) allowed for use with
+# ssl. The cipher list is one or more cipher strings separated by colons,
+# commas or spaces. Unavailable ciphers are silently ignored unless no usable
+# cipher could be found. For the list of possible cipher strings and their
+# meanings, please refer to the ciphers(1) manual.
+# Note: if you set this, the value replaces any ciphers OpenSSL might use by
+# default. To include the default ciphers, you can put DEFAULT as a cipher
+# string in the list.
+# For example:
+#
+# set ssl-ciphers "DEFAULT ADH"
+#
+# This will make eggdrop allow the default OpenSSL selection plus anonymous
+# DH ciphers.
+#
+# set ssl-ciphers "ALL"
+#
+# This will make eggdrop allow all ciphers supported by OpenSSL, in a
+# reasonable order.
+#set ssl-ciphers ""
+
+# Specify the location of a dhparam file. This file is necessary if you are
+# using a Diffie-Hellman based key exchange. If you don't know what this is,
+# you are probably safe leaving it commented.
+# You can create a dhparam file using the following command:
+# openssl dhparam -out dhparam.pem 4096
+#set ssl-dhparam "dhparam.pem"
+
+# Enable certificate authorization. Set to 1 to allow users and bots to
+# identify automatically by their certificate fingerprints. Setting it
+# to 2 to will force fingerprint logins. With a value of 2, users without
+# a fingerprint set or with a certificate UID not matching their handle
+# won't be allowed to login on SSL enabled telnet ports. Fingerprints
+# must be set in advance with the .fprint and .chfinger commands.
+# NOTE: this setting has no effect on plain-text ports.
+#set ssl-cert-auth 0
+
+# You can control SSL certificate verification using the following variables.
+# All of them are flag-based. You can set them by adding together the numbers
+# for all exceptions you want to enable. By default certificate verification
+# is disabled and all certificates are assumed to be valid. The numbers are
+# the following:
+#
+# Enable certificate verification - 1
+# Allow self-signed certificates - 2
+# Don't check peer common or alt names - 4
+# Allow expired certificates - 8
+# Allow certificates which are not valid yet - 16
+# Allow revoked certificates - 32
+# A value of 0 disables verification.
+
+# Control certificate verification for DCC chats (only /dcc chat botnick)
+#set ssl-verify-dcc 0
+
+# Control certificate verification for linking to hubs
+#set ssl-verify-bots 0
+
+# Control certificate verification for SSL listening ports. This includes
+# leaf bots connecting, users telneting in and /ctcp bot chat.
+#set ssl-verify-clients 0
+
+
+##### MORE ADVANCED SETTINGS #####
+
+# Set this to your socks host if your Eggdrop sits behind a firewall. If
+# you use a Sun "telnet passthru" firewall, prefix the host with a '!'.
+#set firewall "!sun-barr.ebay:3666"
+
+# If you have a NAT firewall (your box has an IP in one of the following
+# ranges: 192.168.0.0-192.168.255.255, 172.16.0.0-172.31.255.255,
+# 10.0.0.0-10.255.255.255 and your firewall transparently changes your
+# address to a unique address for your box) or you have IP masquerading
+# between you and the rest of the world, and /dcc chat, /ctcp chat or
+# userfile sharing aren't working, enter your outside IP here. This IP
+# is used for transfers and CTCP replies only, and is different than the
+# vhost4/6 settings. You likely still need to set them.
+#set nat-ip "127.0.0.1"
+
+# If you want all dcc file transfers to use a particular portrange either
+# because you're behind a firewall, or for other security reasons, set it
+# here.
+#set reserved-portrange 2010:2020
+
+# Set the time in minutes that temporary ignores should last.
+set ignore-time 15
+
+# Define here what Eggdrop considers 'hourly'. All calls to it, including such
+# things as note notifying or userfile saving, are affected by this.
+# For example:
+#
+# set hourly-updates 15
+#
+# The bot will save its userfile 15 minutes past every hour.
+set hourly-updates 00
+
+# Un-comment the next line and set the list of owners of the bot.
+# You NEED to change this setting.
+# This is a list of handles -- usernames in the bot.
+set owner "terminaldweller"
+
+# Who should a note be sent to when new users are learned?
+set notify-newusers "$owner"
+
+# Enter the flags that new users added via the 'hello' message command (see
+# 'learn-users' description further down) should get by default. See
+# '.help whois' on the partyline for a list of flags and their descriptions.
+set default-flags "hp"
+
+# Enter all user-defined fields that should be displayed in a '.whois'.
+# This will only be shown if the user has one of these extra fields.
+# You might prefer to comment this out and use the userinfo1.0.tcl script
+# which provides commands for changing all of these.
+set whois-fields "url birthday"
+
+# Uncomment these two lines if you wish to disable the .tcl and .set commands.
+# If you select your owners wisely, you should be okay enabling these.
+#unbind dcc n tcl *dcc:tcl
+#unbind dcc n set *dcc:set
+
+# If you enable this setting, only permanent owners (owner setting) will be
+# able to use .tcl and .set. Moreover, if you want only let permanent owners
+# use .dump, then set this to 2.
+# WARNING: setting this to 0 is a security risk, don't do it unless you trust
+# your owners enough to give them shell access to the account the bot is
+# running on.
+set must-be-owner 1
+
+# Comment out this line to add the 'simul' partyline command (owners can
+# manipulate other people on the party line). Please select owners wisely
+# and use this command ethically!
+unbind dcc n simul *dcc:simul
+
+# Set here the maximum number of socket connections you will allow. You can
+# increase this later, but never decrease it below current usage.
+# If you're using Tcl threads, this is a per-thread maximum.
+set max-socks 100
+
+# Enable this setting if you want +d & +k users to use commands bound as -|-.
+set allow-dk-cmds 1
+
+# If your Eggdrop rejects bots that actually have already disconnected from
+# another hub, but the disconnect information has not yet spread over the
+# botnet due to lag, use this setting. The bot will wait dupwait-timeout
+# seconds before it checks again and then finally reject the bot.
+set dupwait-timeout 5
+
+# Enable cidr support for b/e/I modes. This means the bot will understand
+# and match modes in cidr notation, and will be able to put and enforce such
+# bans or unban itself, if banned with a cidr mask.
+# Do NOT set this, if your network/server does not support cidr!
+set cidr-support 0
+
+# Disable this setting if you do not want to show name and release level of the
+# operating system. You'll probably also want to edit the default motd (in
+# text/motd) and remove its display from there.
+set show-uname 1
+
+
+# You MUST remove this line for your bot to start. This has been added to
+# prevent you from starting up a bot that is not fully configured. Bots
+# that have not been fully configured may join the wrong IRC network, the
+# wrong channels, or generally do things that you do not want. Please make
+# sure that you have double-checked every setting. There's also a similar line
+# lower down, just to make sure you're reading :)
+#die "Please make sure you edit your config file completely."
+
+
+##### MODULES #####
+
+# Below are various settings for the modules included with Eggdrop.
+# PLEASE READ AND EDIT THEM CAREFULLY, even if you're an old hand at
+# Eggdrop, things change.
+
+# This path specifies the path were Eggdrop should look for its modules.
+# If you run the bot from the compilation directory, you will want to set
+# this to "". If you use 'make install' (like all good kiddies do ;), this
+# is a fine default. Otherwise, use your head :)
+set mod-path "modules/"
+
+
+#### PBKDF2 MODULE ####
+
+# IF YOU DON'T READ THIS YOU MAY RENDER YOUR USERFILE USELESS LATER
+# Eggdrop uses hashing in the userfile, so users can have secure passwords.
+# Eggdrop will not start without an encryption module.
+#
+# As of Eggdrop 1.9.0, a new module was added for hashing, the PBKDF2 module.
+# The PBKDF2 module was designed to work with the previous encryption module
+# (blowfish) to make the transition easier. If this is a new bot, you can
+# safely load just the PBKDF2 module. If you are transitioning a userfile from
+# 1.8 or earlier, you should load this AND the blowfish module (below). By doing
+# so, Eggdrop will seamlessly update the old blowfish hashes to the new PBKDF2
+# hashes once a user logs in for the first time, and allow you to (eventually)
+# remove the blowfish module altogether (See the remove-pass setting).
+
+# Outside of the specific case noted above, please note that if you change your
+# encryption method later (i.e. using other modules like a rijndael module), you
+# can't use your current userfile anymore.
+#
+# NOTE FOR BOTNET USERS: If all bots on the botnet are not running the same
+# configuration settings for encryption, you may encounter password-related
+# issues when linking.
+#
+loadmodule pbkdf2
+
+# Cryptographic hash function used. openssl list -digest-algorithms
+#set pbkdf2-method "SHA256"
+
+# Number of rounds. The higher the number, the longer hashing takes; but also
+# the higher the protection against brute force attacks.
+#set pbkdf2-rounds 16000
+
+# Remove old password hashes after updating to a pbkdf2 hash?
+#
+# WARNING: DO NOT CHANGE THIS UNLESS YOU KNOW WHAT YOU ARE DOING
+# Enabling this setting will break compatibility with older Eggdrops by ceasing
+# to write to the PASS field (where password hashes from modules like blowfish
+# are stored), as well as remove an existing PASS hash if found when writing a
+# new pbkdf2 hash. In some scenarios (for example, a hub sharing a userfile to
+# a leaf that does not have a pbkdf2 module loaded) enabling this setting may
+# result in a user having no password set at all.
+#
+# This setting is planned to be enabled by default in Eggdrop 2.0.
+#set remove-pass 0
+
+#### BLOWFISH MODULE ####
+#
+# This module is planned to be removed in Eggdrop 2.0
+#
+# Load this if you intend to use a pre-1.9.0 userfile (Or in other words, do
+# not load this if you are starting this as a fresh bot and are not linking
+# it to a botnet that uses blowfish hashes)
+#
+# You also need to load this if you use a script that employs the
+# encrypt/decrypt Tcl commands.
+#
+loadmodule blowfish
+
+# Specify whether to use ECB or CBC operation modes for the tcl commands
+# 'encrypt' and 'decrypt'. Prior to version 1.9.0, the less secure ecb
+# method was used by default. If you are using these commands with older bots,
+# change this to 'ecb' for compatibility, or upgrade the older bots.
+set blowfish-use-mode cbc
+
+
+#### DNS MODULE (Deprecated) ####
+
+## This module provided asynchronous dns support, but as of v1.9.2, this
+## functionality was moved into the core code. If you are having issues with the
+## new DNS functionality, or just want to continue using this module, compile
+## Eggdrop with the --disable-tdns flag (./configure --disdable-tdns).
+#
+## You really probably don't want to uncomment this!!!!
+#
+#loadmodule dns
+#set dns-servers "8.8.8.8 1.1.1.1 185.222.222.222"
+#set dns-cache 86400
+#set dns-negcache 600
+#set dns-maxsends 4
+#set dns-retrydelay 3
+
+#### CHANNELS MODULE ####
+
+# This module provides channel related support for the bot. Without it,
+# you won't be able to make the bot join a channel or save channel
+# specific userfile information.
+loadmodule channels
+
+# Enter here the filename where dynamic channel settings are stored.
+set chanfile "eggdrop.chan"
+
+# Set this setting to 1 if you want your bot to expire bans/exempts/invites set
+# by other opped bots on the channel.
+set force-expire 0
+
+# Set this setting to 1 if you want your bot to share user greets with other
+# bots on the channel if sharing user data.
+set share-greet 0
+
+# Set this setting to 1 if you want to allow users to store an info line.
+set use-info 1
+
+# Set this setting to 1 if you want to allow both +p and +s channel modes
+# to be enforced at the same time by the chanmode channel setting.
+# Make sure your server supports +ps mixing or you may get endless mode
+# floods.
+set allow-ps 0
+
+# The following settings are used as default values when you .+chan #chan or .tcl
+# channel add #chan. Look below for explanation of every option.
+
+set default-flood-chan 15:60
+set default-flood-deop 3:10
+set default-flood-kick 3:10
+set default-flood-join 5:60
+set default-flood-ctcp 3:60
+set default-flood-nick 5:60
+set default-aop-delay 5:30
+set default-idle-kick 0
+set default-chanmode "nt"
+set default-stopnethack-mode 0
+set default-revenge-mode 0
+set default-ban-type 3
+set default-ban-time 120
+set default-exempt-time 60
+set default-invite-time 60
+
+set default-chanset {
+ -autoop -autovoice
+ -bitch +cycle
+ +dontkickops +dynamicbans
+ +dynamicexempts +dynamicinvites
+ -enforcebans +greet
+ -inactive -nodesynch
+ -protectfriends +protectops
+ -revenge -revengebot
+ -secret -seen
+ +shared -statuslog
+ +userbans +userexempts
+ +userinvites -protecthalfops
+ -autohalfop -static
+}
+
+# chanmode +/-<modes>
+# This setting makes the bot enforce channel modes. It will always add
+# the +<modes> and remove the -<modes> modes.
+#
+# idle-kick 0
+# This setting will make the bot check every minute for idle
+# users. Set this to 0 to disable idle check.
+#
+# stopnethack-mode 0
+# This setting will make the bot de-op anyone who enters the channel
+# with serverops. There are seven different modes for this settings:
+# 0 turn off
+# 1 isoptest (allow serverop if registered op)
+# 2 wasoptest (allow serverop if op before split)
+# 3 allow serverop if isop or wasop
+# 4 allow serverop if isop and wasop.
+# 5 If the channel is -bitch, see stopnethack-mode 3
+# If the channel is +bitch, see stopnethack-mode 1
+# 6 If the channel is -bitch, see stopnethack-mode 2
+# If the channel is +bitch, see stopnethack-mode 4
+#
+# revenge-mode 0
+# This settings defines how the bot should punish bad users when
+# revenging. There are four possible settings:
+# 0 Deop the user.
+# 1 Deop the user and give them the +d flag for the channel.
+# 2 Deop the user, give them the +d flag for the channel, and kick them.
+# 3 Deop the user, give them the +d flag for the channel, kick, and ban them.
+#
+# ban-type 3
+# This setting defines what type of bans should eggdrop place for +k users or
+# when revenge-mode is 3.
+# Available types are:
+# 0 *!user@host
+# 1 *!*user@host
+# 2 *!*@host
+# 3 *!*user@*.host
+# 4 *!*@*.host
+# 5 nick!user@host
+# 6 nick!*user@host
+# 7 nick!*@host
+# 8 nick!*user@*.host
+# 9 nick!*@*.host
+# You can also specify types from 10 to 19 which correspond to types
+# 0 to 9, but instead of using a * wildcard to replace portions of the
+# host, only numbers in hostnames are replaced with the '?' wildcard.
+# Same is valid for types 20-29, but instead of '?', the '*' wildcard
+# will be used. Types 30-39 set the host to '*'.
+#
+# ban-time 120
+# Set here how long temporary bans will last (in minutes). If you
+# set this setting to 0, the bot will never remove them.
+#
+# exempt-time 60
+# Set here how long temporary exempts will last (in minutes). If you
+# set this setting to 0, the bot will never remove them. The bot will
+# check the exempts every X minutes, but will not remove the exempt if
+# a ban is set on the channel that matches that exempt. Once the ban is
+# removed, then the exempt will be removed the next time the bot checks.
+# Please note that this is an IRCnet feature.
+#
+# invite-time 60
+# Set here how long temporary invites will last (in minutes). If you
+# set this setting to 0, the bot will never remove them. The bot will
+# check the invites every X minutes, but will not remove the invite if
+# a channel is set to +i. Once the channel is -i then the invite will be
+# removed the next time the bot checks. Please note that this is an IRCnet
+# feature.
+#
+# aop-delay (minimum:maximum)
+# This is used for autoop, autohalfop, autovoice. If an op or voice joins a
+# channel while another op or voice is pending, the bot will attempt to put
+# both modes on one line.
+# aop-delay 0 No delay is used.
+# aop-delay X An X second delay is used.
+# aop-delay X:Y A random delay between X and Y is used.
+#
+# need-op { putserv "PRIVMSG #lamest :op me cos i'm lame!" }
+# This setting will make the bot run the script enclosed in brackets
+# if it does not have ops. This must be shorter than 120 characters.
+# If you use scripts like getops.tcl or botnetop.tcl, you don't need
+# to set this setting.
+#
+# need-invite { putserv "PRIVMSG #lamest :let me in!" }
+# This setting will make the bot run the script enclosed in brackets
+# if it needs an invite to the channel. This must be shorter than 120
+# characters. If you use scripts like getops.tcl or botnetop.tcl, you
+# don't need to set this setting.
+#
+# need-key { putserv "PRIVMSG #lamest :let me in!" }
+# This setting will make the bot run the script enclosed in brackets
+# if it needs the key to the channel. This must be shorter than 120
+# characters. If you use scripts like getops.tcl or botnetop.tcl, you
+# don't need to set this setting
+#
+# need-unban { putserv "PRIVMSG #lamest :let me in!" }
+# This setting will make the bot run the script enclosed in brackets
+# if it needs to be unbanned on the channel. This must be shorter than
+# 120 characters. If you use scripts like getops.tcl or botnetop.tcl,
+# you don't need to set this setting
+#
+# need-limit { putserv "PRIVMSG #lamest :let me in!" }
+# This setting will make the bot run the script enclosed in brackets
+# if it needs the limit to be raised on the channel. This must be
+# shorter than 120 characters. If you use scripts like getops.tcl or
+# botnetop.tcl, you don't need to set this setting
+#
+# flood-chan 15:60
+# Set here how many channel messages in how many seconds from one
+# host constitutes a flood. Setting this to 0, 0:X or X:0 disables
+# flood protection for the channel, where X is an integer >= 0.
+#
+# flood-deop 3:10
+# Set here how many deops in how many seconds from one host constitutes
+# a flood. Setting this to 0, 0:X or X:0 disables deop flood protection
+# for the channel, where X is an integer >= 0.
+#
+# flood-kick 3:10
+# Set here how many kicks in how many seconds from one host constitutes
+# a flood. Setting this to 0, 0:X or X:0 disables kick flood protection
+# for the channel, where X is an integer >= 0.
+#
+# flood-join 5:60
+# Set here how many joins in how many seconds from one host constitutes
+# a flood. Setting this to 0, 0:X or X:0 disables join flood protection
+# for the channel, where X is an integer >= 0.
+#
+# flood-ctcp 3:60
+# Set here how many channel ctcps in how many seconds from one host
+# constitutes a flood. Setting this to 0, 0:X or X:0 disables ctcp flood
+# protection for the channel, where X is an integer >= 0.
+#
+# flood-nick 5:60
+# Set here how many nick changes in how many seconds from one host
+# constitutes a flood. Setting this to 0, 0:X or X:0 disables nick flood
+# protection for the channel, where X is an integer >= 0.
+#
+# A complete list of all available channel settings:
+#
+# enforcebans
+# When a ban is set, kick people who are on the channel and match
+# the ban?
+#
+# dynamicbans
+# Only activate bans on the channel when necessary? This keeps
+# the channel's ban list from getting excessively long. The bot
+# still remembers every ban, but it only activates a ban on the
+# channel when it sees someone join who matches that ban.
+#
+# userbans
+# Allow bans to be made by users directly? If turned off, the bot
+# will require all bans to be made through the bot's console.
+#
+# dynamicexempts
+# Only activate exempts on the channel when necessary? This keeps
+# the channel's exempt list from getting excessively long. The bot
+# still remembers every exempt, but it only activates a exempt on
+# the channel when it sees a ban set that matches the exempt. The
+# exempt remains active on the channel for as long as the ban is
+# still active.
+#
+# userexempts
+# Allow exempts to be made by users directly? If turned off, the
+# bot will require all exempts to be made through the bot's console.
+#
+# dynamicinvites
+# Only activate invites on the channel when necessary? This keeps
+# the channel's invite list from getting excessively long. The bot
+# still remembers every invite, but the invites are only activated
+# when the channel is set to invite only and a user joins after
+# requesting an invite. Once set, the invite remains until the
+# channel goes to -i.
+#
+# userinvites
+# Allow invites to be made by users directly? If turned off, the
+# bot will require all invites to be made through the bot's console.
+#
+# autoop
+# Op users with the +o flag as soon as they join the channel?
+# This is insecure and not recommended.
+#
+# autohalfop
+# Halfop users with the +l flag as soon as they join the channel?
+# This is insecure and not recommended.
+#
+# bitch
+# Only let users with +o) flag be opped on the channel?
+#
+# greet
+# Say a user's info line when they join the channel?
+#
+# protectops
+# Re-op a user with the +o flag if they get deopped?
+#
+# protecthalfops
+# Re-halfop a user with the +l flag if they get dehalfopped?
+#
+# protectfriends
+# Re-op a user with the +f flag if they get deopped?
+#
+# statuslog
+# Log the channel status line every 5 minutes? This shows the bot's
+# status on the channel (op, voice, etc.), the channel's modes, and
+# the total number of members, ops, voices, regular users, and +b,
+# +e, and +I modes on the channel. A sample status line follows:
+#
+# [01:40] @#lamest (+istn) : [m/1 o/1 v/4 n/7 b/1 e/5 I/7]
+#
+# revenge
+# Remember people who deop/kick/ban the bot, valid ops, or friends
+# and punish them? Users with the +f flag are exempt from revenge.
+#
+# revengebot
+# This is similar to to the 'revenge' option, but it only triggers
+# if a bot gets deopped, kicked or banned.
+#
+# autovoice
+# Voice users with the +v flag when they join the channel?
+#
+# secret
+# Prevent this channel from being listed on the botnet?
+#
+# shared
+# Share channel-related user info for this channel?
+#
+# cycle
+# Cycle the channel when it has no ops?
+#
+# dontkickops
+# Do you want the bot not to be able to kick users who have the +o
+# flag, letting them kick-flood for instance to protect the channel
+# against clone attacks.
+#
+# inactive
+# This prevents the bot from joining the channel (or makes it leave
+# the channel if it is already there). It can be useful to make the
+# bot leave a channel without losing its settings, channel-specific
+# user flags, channel bans, and without affecting sharing.
+#
+# seen
+# Respond to seen requests in the channel? The seen module must be
+# loaded for this to work.
+#
+# nodesynch
+# Allow non-ops to perform channel modes? This can stop the bot from
+# fighting with services such as ChanServ, or from kicking IRCops when
+# setting channel modes without having ops.
+#
+# static
+# Allow only permanent owners to remove the channel?
+
+# To add a channel to eggdrop, please enter the bot's partyline and type
+# .+chan #channel. Check also .help chanset and .help chaninfo.
+# You can still add a channel here and it will be saved if you have a
+# chanfile. We recommend you to use the partyline though.
+#
+channel add #eggdrop
+
+
+#### SERVER MODULE ####
+
+# This module provides the core server support. You have to load this
+# if you want your bot to come on IRC. Not loading this is equivalent
+# to the old NO_IRC define.
+loadmodule server
+
+# Control certificate verification for irc servers. For a description of the
+# possible values, look at the SSL SETTINGS section above.
+set ssl-verify-server 1
+
+## What is your network?
+## Options are:
+## EFnet
+## IRCnet
+## Undernet
+## DALnet
+## Libera
+## freenode
+## QuakeNet
+## Rizon
+## Twitch (This requires twitch.mod to be loaded as well)
+## Other (This is a good, sane default option to use if your network/ircd is
+## not listed here. Additional configuration options for this setting
+## can be found further down in the IRC MODULE section)
+set net-type "Other"
+
+# Set the nick the bot uses on IRC, and on the botnet unless you specify a
+# separate botnet-nick, here.
+set nick "eggdrop"
+
+# Set the alternative nick which the bot uses on IRC if the nick specified
+# by 'set nick' is unavailable. All '?' characters will be replaced by random
+# numbers.
+set altnick "eggdrop_"
+
+# Set what should be displayed in the real-name field for the bot on IRC.
+# This can not be blank, it has to contain something.
+set realname "/msg eggdrop hello"
+
+# This is a Tcl script to be run immediately after connecting to a server. If
+# you want to authenticate Eggdrop with NickServ, uncomment and edit the middle
+# line below.
+bind evnt - init-server evnt:init_server
+
+proc evnt:init_server {type} {
+ global botnick
+ putquick "MODE $botnick +i-ws"
+# putserv "PRIVMSG NickServ :identify <password>"
+}
+
+# Set the default port which should be used if none is specified with
+# '.jump' or in 'set servers'.
+set default-port 6697
+
+# This is the bot's server list. The bot will start at the first server listed,
+# and cycle through them whenever it gets disconnected. You need to change these
+# servers to YOUR network's servers.
+#
+# The format is:
+# server add <server> [port [password]]
+# Prefix the port with a plus sign to attempt a SSL connection:
+# server add <server> +port [password]
+#
+# Both the port and password fields are optional. If a port isn't specified,
+# the default-port setting will be used. If you want to set a password or use
+# SSL, you must specify a port.
+#
+# This format is new as of version 1.9.0. The previous method using
+# set servers {} will still work for now, but is deprecated and will be removed
+# in a future release.
+server add irc.terminaldweller.com +6697
+
+#### CAP Features ####
+# This section controls IRCv3 capabilities supported natively by Eggdrop. You
+# can enable individual settings here to be requested as part of the
+# registration process with the IRC server. Not all servers support all CAP
+# features. https://ircv3.net/support/networks.html maintains a list of some
+# popular servers, and you can also use '.tcl cap ls' from the partyline
+# to list capabilities available on that server.
+#
+# The capabilities currently known to be supported by Eggdrop are as follows:
+#
+# account-notify, account-tag, away-notify, chghost, echo-message,
+# extended-join, invite-notify, message-tags, server-time, sasl, setname,
+# +typing
+#
+
+# SASL is a method that allows Eggdrop to authenticate with a NickServ service
+# as part of the connection process to a server, eliminating the need to later
+# authenticate via a /msg command.
+#
+# To request SASL authentication via CAP, set this to 1
+set sasl 1
+
+# Set SASL mechanism to authenticate with.
+# Options are:
+# 0 = PLAIN (normal user/pass exchange, only encrypted
+# if connected to the IRC server with a
+# SSL/TLS connection)
+#
+# 1 = ECDSA-NIST256P-CHALLENGE (Uses a certificate; usually requires a
+# public key to be registered with NickServ
+# or other similar service. Set certificate
+# to use in sasl-ecdsa-key setting below)
+#
+# 2 = EXTERNAL (Some other method you set up. Certificates
+# used are defined in ssl-certificate and
+# ssl-privatekey settings in SSL section)
+#
+set sasl-mechanism 0
+
+# Set username to authenticate to IRC NickServ with
+set sasl-username "eggdrop"
+
+# Set password to authenticate to IRC NickServ with
+set sasl-password "" # pragma: allowlist secret
+
+# Specify the location of certificate to use for the SASL
+# ecdsa-nist256p-challenge. An ECDSA certificate can be generated with the
+# command:
+# openssl ecparam -genkey -name prime256v1 -out eggdrop-ecdsa.pem
+#set sasl-ecdsa-key "eggdrop-ecdsa.pem"
+
+# Set SASL failure action
+# If SASL authentication fails, do you want to connect to the server anyway?
+# Set this to 0 to disconnect and retry until success, or 1 to continue
+# connecting to the server without SASL authentication.
+set sasl-continue 0
+#
+# Timeout (in seconds) before giving up SASL authentication
+#set sasl-timeout 15
+
+# To request the account-notify feature via CAP, set this to 1
+set account-notify 1
+
+# To request the extended-join feature via CAP, set this to 1
+set extended-join 1
+
+# To request the invite-notify feature via CAP, set this to 1
+#set invite-notify 0
+
+# To request the message-tags feature via CAP, set this to 1
+#set message-tags 0
+
+# To request the account-tag feature via CAP, set this to 1
+# This can be enabled if necessary for imperfect account tracking if you don't
+# have the WHOX (use_354), account-notify and extended-join features available
+# see doc/ACCOUNTS for details
+#set account-tag 0
+
+# If you have any additional CAP features you would like to request at
+# registration but are not listed above, set them here as space separated
+# strings. Setting features here does not guarantee Eggdrop's ability to support
+# them.
+#set cap-request "feature1 feature2 feature3"
+
+#### End of CAP features ####
+
+# Number of seconds to wait between transmitting queued lines to the server.
+# Lower this value at your own risk. ircd is known to start flood control at
+# 512 bytes/2 seconds.
+set msg-rate 2
+
+# This setting makes the bot try to get his original nickname back if its
+# primary nickname is already in use.
+set keep-nick 1
+
+# This setting makes the bot squelch the error message when rejecting a DCC
+# CHAT, SEND or message command. Normally, Eggdrop notifies the user that the
+# command has been rejected because they don't have access. Note that sometimes
+# IRC server operators detect bots that way.
+set quiet-reject 1
+
+# If you want your bot to answer lower case ctcp requests (non rfc-
+# compliant), set this setting to 1. mIRC will do this, most other
+# clients will not.
+set lowercase-ctcp 0
+
+# Set how many ctcps should be answered at once.
+set answer-ctcp 3
+
+# Set here how many msgs in how many seconds from one host constitutes
+# a flood. If you set this to 0:0, msg flood protection will be disabled.
+set flood-msg 5:60
+
+# Set here how many ctcps in how many seconds from one host constitutes
+# a flood. If you set this to 0:0, ctcp flood protection will be disabled.
+set flood-ctcp 3:60
+
+# This setting defines how long Eggdrop should wait before moving from one
+# server to another on disconnect. If you set 0 here, Eggdrop will not wait
+# at all and will connect instantly. Setting this too low could result in
+# your bot being K:Lined.
+set server-cycle-wait 60
+
+# Set here how long Eggdrop should wait for a response when connecting to a
+# server before giving up and moving on to next server.
+set server-timeout 60
+
+# Set this to 1 if Eggdrop should check for stoned servers? (where the
+# server connection has died, but Eggdrop hasn't been notified yet).
+set check-stoned 1
+
+# If you want your bot to exit the server if it receives an ERROR message,
+# set this to 1.
+set serverror-quit 1
+
+# Set here the maximum number of lines to queue to the server. If you're
+# going to dump large chunks of text to people over IRC, you will probably
+# want to raise this. 300 is fine for most people though.
+set max-queue-msg 300
+
+# If you want Eggdrop to trigger binds for ignored users, set this to 1.
+set trigger-on-ignore 0
+
+# This setting configures PUBM and MSGM binds to be exclusive of PUB and MSG
+# binds. This means if a MSGM bind with the mask "*help*" exists and is
+# triggered, any MSG bindings with "help" in their mask will not be
+# triggered. Don't enable this unless you know what you are doing!
+set exclusive-binds 0
+
+# Allow identical messages in the mode queue?
+set double-mode 1
+
+# Allow identical messages in the server queue?
+set double-server 1
+
+# Allow identical messages in the help queue?
+set double-help 1
+
+# This optimizes the kick queue. It also traces nick changes and parts in
+# the channel and changes the kick queue accordingly.
+# Options are:
+# 0 = Turn it off.
+# 1 = Optimize the kick queue by summarizing kicks.
+# 2 = Trace nick changes and parts on the channel and change the queue
+# accordingly. For example, bot will not try to kick users who have
+# already parted the channel.
+# ATTENTION: Setting 2 is very CPU intensive.
+set optimize-kicks 1
+
+# If your network supports more recipients per command then 1, you can
+# change this behavior here. Set this to the number of recipients per
+# command, or set this to 0 for unlimited.
+set stack-limit 4
+
+# Sets the default RPL_ISUPPORT (raw 005) information to use as a fallback.
+# These MUST be compatible to all IRCds you might want to connect to.
+# The actual server settings overwrite these, so you shouldn't need to modify.
+#set isupport-default "CASEMAPPING=rfc1459 CHANNELLEN=80 NICKLEN=9 CHANTYPES=#& PREFIX=(ov)@+ CHANMODES=b,k,l,imnpst MODES=3 MAXCHANNELS=10 TOPICLEN=250 KICKLEN=250 STATUSMSG=@+"
+
+### SERVER MODULE - OTHER NETWORKS (net-type "Other") ###
+
+# This settings defines how umode +r is understood by Eggdrop. Some networks
+# use +r to indicate a restricted connection. If this is your case, and you
+# want your bot to leave restricted servers and jump to the next server on its
+# list, then set it to 1. The default setting is 0.
+#set check-mode-r 0
+
+# This setting allows you to specify the maximum nick-length supported by your
+# network. The default setting is 9. The maximum supported length by Eggdrop
+# is 32.
+#set nick-len 9
+
+
+#### CTCP MODULE ####
+
+# This module provides the normal ctcp replies that you'd expect.
+# Without it loaded, CTCP CHAT will not work. The server module
+# is required for this module to function.
+loadmodule ctcp
+
+# Set here how the ctcp module should answer ctcps.
+# Options are:
+# 0 = Normal behavior is used.
+# 1 = The bot ignores all ctcps, except for CHAT and PING requests
+# by users with the +o flag.
+# 2 = Normal behavior is used, however the bot will not answer more
+# than X ctcps in Y seconds (defined by 'set flood-ctcp').
+set ctcp-mode 0
+
+# There are also several variables to help make your bot less noticeable.
+# They are: ctcp-version, ctcp-finger, and ctcp-userinfo. You can use set to set
+# them to values you'd like.
+
+
+#### IRC MODULE ####
+
+# This module provides basic IRC support for your bot. You have to
+# load this if you want your bot to come on IRC. The server and channels
+# modules must be loaded for this module to function.
+loadmodule irc
+
+# Set this to 1 if you want to bounce all server bans.
+set bounce-bans 0
+
+# Set this to 1 if you want to bounce all server exemptions (+e modes).
+# This is disabled if use-exempts is disabled.
+set bounce-exempts 0
+
+# Set this to 1 if you want to bounce all server invitations (+I modes).
+# This is disabled if use-invites is disabled.
+set bounce-invites 0
+
+# Set this to 1 if you want to bounce all server modes.
+set bounce-modes 0
+
+# The following settings should be left commented unless the default values
+# are being overridden. By default, exempts and invites are on for EFnet and
+# IRCnet, but off for all other large networks. This behavior can be modified
+# with the following 2 flags. If your network doesn't support +e/+I modes then
+# you will be unable to use these features.
+#
+# Do you want to enable exempts (+e modes)?
+#set use-exempts 0
+
+# Do you want to enable invites (+I modes)?
+#set use-invites 0
+
+# If you want people to be able to add themselves to the bot's userlist
+# with the default userflags (defined above in the config file) via the
+# 'hello' msg command, set this to 1.
+set learn-users 0
+
+# Set here the time (in seconds) to wait for someone to return from a netsplit
+# (i.e. wasop will expire afterwards). Set this to 1500 on IRCnet since its
+# nick delay stops after 30 minutes.
+set wait-split 600
+
+# Set here the time (in seconds) that someone must have been off-channel
+# before re-displaying their info line.
+set wait-info 180
+
+# Set this to the maximum number of bytes to send in the arguments
+# of modes sent to the server. Most servers default this to 200.
+set mode-buf-length 200
+
+# Many IRCops find bots by seeing if they reply to 'hello' in a msg.
+# You can change this to another word by un-commenting the following
+# two lines and changing "myword" to the word wish to use instead of
+# 'hello'. It must be a single word.
+#unbind msg - hello *msg:hello
+#bind msg - myword *msg:hello
+
+# Many takeover attempts occur due to lame users blindly /msg ident'ing to
+# the bot and attempting to guess passwords. We now unbind this command by
+# default to discourage them. You can enable these commands by commenting the
+# following two lines.
+unbind msg - ident *msg:ident
+unbind msg - addhost *msg:addhost
+
+# Some IRC servers are using some non-standard op-like channel prefixes/modes.
+# Define them here so the bot can recognize them. Just "@" should be fine for
+# most networks. Un-comment the second line for some UnrealIRCds.
+
+set opchars "@"
+#set opchars "@&~"
+
+# If you are so lame you want the bot to display peoples info lines, even
+# when you are too lazy to add their chanrecs to a channel, set this to 1.
+# *NOTE* This means *every* user with an info line will have their info
+# line displayed on EVERY channel they join (provided they have been gone
+# longer than wait-info).
+set no-chanrec-info 0
+
+### IRC MODULE - IRCnet SPECIFIC FEATURES (net-type "IRCnet") ###
+
+# Attention: Use these settings *only* if you set 'net-type' to "IRCnet"!
+
+# At the moment, the current IRCnet IRCd version (2.10) doesn't support the
+# mixing of b, o and v modes with e and I modes. This might be changed in the
+# future, so use 1 at the moment for this setting.
+set prevent-mixing 1
+
+### IRC MODULE - OTHER NETWORKS (net-type "Other") ###
+
+# Attention: Use these settings *only* if you set net-type to "Other"!
+
+# If your network supports more users per kick command then 1, you can
+# change this behavior here. Set this to the number of users to kick at
+# once, or set this to 0 for all at once.
+#set kick-method 1
+
+# Some networks don't include the +l limit and +k or -k key modes
+# in the modes-per-line limitation. Set include-lk to 0 for
+# these networks.
+#set include-lk 1
+
+# If your network doesn't use rfc 1459 compliant string matching routines,
+# set this to 0.
+#set rfc-compliant 1
+
+
+#### TWITCH MODULE ####
+
+# This module attempts to provide connectivity with the Twitch gaming platform.
+# While Twitch provides an IRC gateway to connect with it's streaming service,
+# it does not claim to (and certainly does not) follow the IRC RFC in any
+# meaningful way. The intent of this module is not to provide the full spectrum
+# of management functions typically associated with Eggdrop; please see the docs
+# for additional information. Only load this if you are connecting to Twitch!
+# Please see doc/TWITCH for Twitch-specific setup information, like how to
+# configure the required CAP settings in the IRC section above.
+#loadmodule twitch
+
+
+#### TRANSFER MODULE ####
+
+# The transfer module provides DCC SEND/GET support and userfile transfer
+# support for userfile sharing. Un-comment the next line to load it if you
+# need this functionality.
+#loadmodule transfer
+
+# Set here the maximum number of simultaneous downloads to allow for
+# each user.
+set max-dloads 3
+
+# Set here the block size for dcc transfers. ircII uses 512 bytes,
+# but admits that it may be too small. 1024 is standard these days.
+# 0 is turbo-dcc (recommended).
+set dcc-block 0
+
+# Enable this setting if you want to copy files to a temporary location before
+# sending or receiving them. This might be useful for file stability, but if
+# your directories are NFS mounted, it's a pain. Setting this to 1 is not
+# advised for big files or if you're low on disk space.
+set copy-to-tmp 1
+
+# Set here the time (in seconds) to wait before an inactive transfer times out.
+set xfer-timeout 30
+
+# By default, Eggdrop will abort the linking process if userfile sharing is
+# enabled but the userfile transfer fails. Set this to 0 to keep the bots
+# linked if the userfile transfer fails and retry every minute (both bots must
+# be v1.9.0 or higher).
+#set sharefail-unlink 1
+
+#### SHARE MODULE ####
+
+# This module provides userfile sharing support between two directly
+# linked bots. The transfer and channels modules are required for this
+# module to correctly function. Un-comment the following line to load
+# the share module.
+#loadmodule share
+
+# Settings in this section must be un-commented before setting.
+
+# When two bots get disconnected, this setting allows them to create a
+# resync buffer which saves all changes done to the userfile during
+# the disconnect. When they reconnect, they will not have to transfer
+# the complete user file, but, instead, just send the resync buffer.
+#
+# NOTE: This has been known to cause loss of channel flags and other
+# problems. Using this setting is not recommended.
+#set allow-resync 0
+
+# This setting specifies how long to hold another bots resync data
+# before flushing it.
+#set resync-time 900
+
+# When sharing user lists, DON'T ACCEPT global flag changes from other bots?
+# NOTE: The bot will still send changes made on the bot, it just won't accept
+# any global flag changes from other bots. This overrides the private-globals
+# setting (below).
+#set private-global 0
+
+# When sharing user lists, if private-global isn't set, which global flag
+# changes from other bots should be ignored?
+#set private-globals "mnot"
+
+# When sharing user lists, don't accept ANY userfile changes from other
+# bots? Paranoid people should use this feature on their hub bot. This
+# will force all userlist changes to be made via the hub.
+#set private-user 0
+
+# This setting makes the bot discard its own bot records in favor of
+# the ones sent by the hub.
+# NOTE: No passwords or botflags are shared, only ports and
+# address are added to sharing procedure. This only works with hubs that
+# are v1.5.1 or higher.
+#set override-bots 0
+
+
+#### COMPRESS MODULE ####
+
+# This module provides support for file compression. This allows the
+# bot to transfer compressed user files and therefore save a significant amount
+# of bandwidth. The share module must be loaded to load this module. Un-comment
+# the following line to the compress module.
+#loadmodule compress
+
+# Allow compressed sending of user files? The user files are compressed with
+# the compression level defined in `compress-level'.
+set share-compressed 1
+
+# This is the default compression level used. These levels are the same as
+# those used by GNU gzip.
+#set compress-level 9
+
+
+#### FILESYSTEM MODULE ####
+
+# This module provides an area within the bot where users can store and
+# manage files. With this module, the bot is usable as a file server. The
+# transfer module is required for this module to function. Un-comment
+# the following line to load the filesys module.
+#loadmodule filesys
+
+# Set here the 'root' directory for the file system.
+set files-path "/home/mydir/filesys"
+
+# If you want to allow uploads, set this to the directory uploads
+# should be put into. Set this to "" if you don't want people to
+# upload files to your bot.
+set incoming-path "/home/mydir/filesys/incoming"
+
+# If you don't want to have a central incoming directory, but instead
+# want uploads to go to the current directory that a user is in, set
+# this setting to 1.
+set upload-to-pwd 0
+
+# Eggdrop creates a '.filedb' file in each subdirectory of your file area
+# to keep track of its own file system information. If you can't do that (for
+# example, if the dcc path isn't owned by you, or you just don't want it to do
+# that) specify a path here where you'd like all of the database files to be
+# stored instead.
+set filedb-path ""
+
+# Set here the maximum number of people that can be in the file area at once.
+# Setting this to 0 makes it effectively infinite.
+set max-file-users 20
+
+# Set here the maximum allowable file size that will be received (in KB).
+# Setting this to 0 makes it effectively infinite.
+set max-filesize 1024
+
+
+#### NOTES MODULE ####
+
+# This module provides support for storing of notes for users from each other.
+# Note sending between currently online users is supported in the core, this is
+# only for storing the notes for later retrieval.
+loadmodule notes
+
+# Set here the filename where private notes between users are stored.
+set notefile "eggdrop.notes"
+
+# Set here the maximum number of notes to allow to be stored for each user
+# (to prevent flooding).
+set max-notes 50
+
+# Set here how long (in days) to store notes before expiring them.
+set note-life 60
+
+# Set this to 1 if you want to allow users to specify a forwarding address
+# for forwarding notes to another account on another bot.
+set allow-fwd 0
+
+# Set this to 1 if you want the bot to let people know hourly if they have
+# any notes.
+set notify-users 0
+
+# Set this to 1 if you want the bot to let people know on join if they have
+# any notes.
+set notify-onjoin 1
+
+# Comment out this next line. Otherwise, your bot won't start.
+# die "You didn't edit your config file completely like you were told, did you?"
+
+# This next line checks if eggdrop is being executed from the source directory
+if {[file exists aclocal.m4]} { die {You are attempting to run Eggdrop from the source directory. Please finish installing Eggdrop by running "make install" and run it from the install location.} }
+
+
+#### CONSOLE MODULE ####
+
+# This module provides storage of console settings when you exit the
+# bot or type .store on the partyline.
+loadmodule console
+
+# Save users console settings automatically? Otherwise, they have
+# to use the .store command.
+set console-autosave 1
+
+# If a user doesn't have any console settings saved, which channel
+# do you want them automatically put on?
+set force-channel 0
+
+# Enable this setting if a user's global info line should be displayed
+# when they join a botnet channel.
+set info-party 0
+
+
+#### WOOBIE MODULE ####
+
+# This is for demonstrative purposes only. If you are looking for starting
+# point in writing modules, woobie is the right thing.
+#loadmodule woobie
+
+
+#### SEEN MODULE ####
+
+# This module provides very basic seen commands via msg, on channel or via dcc.
+# This module works only for users in the bot's userlist. If you are looking for
+# a better and more advanced seen module, try the gseen module by G'Quann. You
+# can find it at http://www.kreativrauschen.com/gseen.mod/.
+#loadmodule seen
+
+
+#### ASSOC MODULE ####
+
+# This module provides assoc support, i.e. naming channels on the botnet.
+# You can load it by un-commenting the following line.
+#loadmodule assoc
+
+
+#### UPTIME MODULE ####
+
+# This module reports uptime statistics to http://uptime.eggheads.org.
+# Go look and see what your uptime is! It takes about 9 hours to show up,
+# so if your bot isn't listed, try again later. The server module must be
+# loaded for this module to function.
+#
+# Information sent to the server includes the bot's uptime, botnet-nick,
+# server, version, and IP address. This information is stored in a temporary
+# logfile for debugging purposes only. The only publicly available information
+# will be the bot's botnet-nick, version and uptime. If you do not wish for this
+# information to be sent, comment out the following line.
+loadmodule uptime
+
+
+#### IDENT MODULE ####
+
+# This module adds Eggdrop support for the externally-provided oident
+# service, or alternatively the ability for Eggdrop to act as its own ident
+# daemon. Please read the docs at doc/settings/mod.ident for additional
+# information on correctly configuring this section. If you don't know
+# what ident or oident are, it is safe to leave this section commented.
+#loadmodule ident
+
+# Set the ident method you wish to use. Each of these methods requires
+# some form of external configuration in order to function. See
+# doc/settings/mod.ident for additional information.
+# Options are:
+# 0 = oidentd
+# Your bot will overwrite $HOME/.oidentd.conf right before opening the
+# socket to the IRC server with the global reply.
+# NOTE: requires the oidentd service to be running on the host machine
+# 1 = Builtin
+# Your bot will automatically turn its builtin identd on and off when
+# needed so it shouldn't conflict with other identds that do the same.
+# NOTE: Eggdrop must be granted permissions on the host system to bind
+# to port 113.
+#set ident-method 0
+
+# Set the ident port to use for ident-method 1.
+#set ident-port 113
+
+##### SCRIPTS #####
+
+# This is a good place to load scripts to use with your bot.
+
+# This line loads script.tcl from the scripts directory inside your Eggdrop's
+# directory. All scripts should be put there, although you can place them where
+# you like as long as you can supply a fully qualified path to them.
+#
+# source scripts/script.tcl
+
+source scripts/alltools.tcl
+source scripts/action.fix.tcl
+
+# This script enhances Eggdrop's built-in dcc '.whois' command to allow all
+# users to '.whois' their own handle.
+source scripts/dccwhois.tcl
+
+# This script provides many useful informational functions, like setting
+# users' URLs, e-mail address, ICQ numbers, etc. You can modify it to add
+# extra entries.
+source scripts/userinfo.tcl
+loadhelp userinfo.help
+
+# Use this script for Tcl and Eggdrop backwards compatibility.
+# NOTE: This can also cause problems with some newer scripts.
+#source scripts/compat.tcl
+
+# A few IRC networks (EFnet and Undernet) have added some simple checks to
+# prevent drones from connecting to the IRC network. While these checks are
+# fairly trivial, they will prevent your Eggdrop from automatically
+# connecting. In an effort to work-around these, we have developed a couple of
+# TCL scripts to automate the process.
+
+if {[info exists net-type]} {
+ switch -- ${net-type} {
+ "EFnet" {
+ # EFnet
+ source scripts/quotepong.tcl
+ }
+ "0" {
+ # EFnet
+ source scripts/quotepong.tcl
+ }
+ }
+}
diff --git a/terminaldweller.com/ejabberd/add_users.sh b/terminaldweller.com/ejabberd/add_users.sh
new file mode 100755
index 0000000..5243730
--- /dev/null
+++ b/terminaldweller.com/ejabberd/add_users.sh
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+EJABBERD=$(docker ps | grep ejabberd | awk '{print $1}')
+docker exec -it ${EJABBERD} bin/ejabberdctl register someuser1 jabber.terminaldweller.com passywo00rd # pragma: allowlist secret
+docker exec -it ${EJABBERD} bin/ejabberdctl register someuser2 jabber.terminaldweller.com passywo00rd # pragma: allowlist secret
+docker exec -it ${EJABBERD} bin/ejabberdctl register someuser3 jabber.terminaldweller.com passywo00rd # pragma: allowlist secret
diff --git a/terminaldweller.com/ejabberd/docker-compose.yaml b/terminaldweller.com/ejabberd/docker-compose.yaml
index 3c860ae..e3c1095 100644
--- a/terminaldweller.com/ejabberd/docker-compose.yaml
+++ b/terminaldweller.com/ejabberd/docker-compose.yaml
@@ -1,7 +1,7 @@
version: "3.4"
services:
ejabberd:
- image: ejabberd/ecs:23.01
+ image: ejabberd/ecs:23.04
networks:
- ejabberdnet
ports:
@@ -13,6 +13,7 @@ services:
- "5443:5443"
#- "1883:1883"
#- "127.0.0.1:5080:5080"
+ - "443:443"
restart: unless-stopped
volumes:
- ./ejabberd.yml:/home/ejabberd/conf/ejabberd.yml
diff --git a/terminaldweller.com/ejabberd/ejabberd.yml b/terminaldweller.com/ejabberd/ejabberd.yml
index 5072841..58a5595 100644
--- a/terminaldweller.com/ejabberd/ejabberd.yml
+++ b/terminaldweller.com/ejabberd/ejabberd.yml
@@ -82,15 +82,26 @@ listen:
ciphers: 'TLS_CIPHERS'
dhfile: 'DH_FILE'
request_handlers:
- '/admin': ejabberd_web_admin
+ #'/admin': ejabberd_web_admin
'/api': mod_http_api
'/bosh': mod_bosh
'/captcha': ejabberd_captcha
'/upload': mod_http_upload
'/ws': ejabberd_http_ws
'/oauth': ejabberd_oauth
+ #'/.well-known/host-meta': mod_host_meta
+ #'/.well-known/host-meta.json': mod_host_meta
+ - port: 443
+ ip: '0.0.0.0'
+ module: ejabberd_http
+ tls: true
+ protocol_options: 'TLS_OPTIONS'
+ ciphers: 'TLS_CIPHERS'
+ dhfile: 'DH_FILE'
+ request_handlers:
'/.well-known/host-meta': mod_host_meta
'/.well-known/host-meta.json': mod_host_meta
+ '/admin': ejabberd_web_admin
- port: 5080
ip: '0.0.0.0'
module: ejabberd_http
@@ -257,16 +268,32 @@ modules:
mod_carboncopy: {}
mod_client_state: {}
mod_configure: {}
- mod_disco: {}
+ mod_disco:
+ server_info:
+ -
+ modules: all
+ name: "abuse-addresses"
+ urls: ["mailto:devi@terminaldweller.com"]
+ -
+ modules: [mod_host_meta]
+ name: "mod host meta location"
+ urls:
+ - https://jabber.terminaldweller.com:5443
mod_fail2ban: {}
mod_http_api: {}
mod_http_upload:
put_url: https://@HOST@:5443/upload
+ docroot: /var/www/upload
+ custom_headers:
+ "Access-Control-Allow-Origin": "https://@HOST@"
+ "Access-Control-Allow-Methods": "GET,HEAD,PUT,OPTIONS"
+ "Access-Control-Allow-Headers": "Content-Type"
mod_last: {}
mod_mam:
- db_type: sql
+ db_type: mnesia
assume_mam_usage: true
- default: never
+ default: always
+ use_cache: true
mod_mqtt: {}
mod_muc:
access:
@@ -279,7 +306,7 @@ modules:
- allow
default_room_options:
allow_subscription: true
- mam: false
+ mam: true
mod_muc_admin: {}
mod_offline:
access_max_user_messages: max_user_offline_messages
diff --git a/terminaldweller.com/limnoria/limnoriabot.conf b/terminaldweller.com/limnoria/limnoriabot.conf
new file mode 100644
index 0000000..cdd65ce
--- /dev/null
+++ b/terminaldweller.com/limnoria/limnoriabot.conf
@@ -0,0 +1,5361 @@
+
+######
+# Although it is technically possible to do so, we do not recommend that
+# you edit this file with a text editor.
+# Whenever possible, do it on IRC using the Config plugin, which
+# checks values you set are valid before writing them to the
+# configuration.
+# Moreover, if you edit this file while the bot is running, your
+# changes may be lost.
+######
+
+
+###
+# Determines whether the bot will defend itself against command-
+# flooding.
+#
+# Default value: True
+###
+supybot.abuse.flood.command: True
+
+###
+# Determines whether the bot will defend itself against invalid command-
+# flooding.
+#
+# Default value: True
+###
+supybot.abuse.flood.command.invalid: True
+
+###
+# Determines how many invalid commands users are allowed per minute. If
+# a user sends more than this many invalid commands in any 60 second
+# period, they will be ignored for
+# supybot.abuse.flood.command.invalid.punishment seconds. Typically,
+# this value is lower than supybot.abuse.flood.command.maximum, since
+# it's far less likely (and far more annoying) for users to flood with
+# invalid commands than for them to flood with valid commands.
+#
+# Default value: 5
+###
+supybot.abuse.flood.command.invalid.maximum: 5
+
+###
+# Determines whether the bot will notify people that they're being
+# ignored for invalid command flooding.
+#
+# Default value: True
+###
+supybot.abuse.flood.command.invalid.notify: True
+
+###
+# Determines how many seconds the bot will ignore users who flood it
+# with invalid commands. Typically, this value is higher than
+# supybot.abuse.flood.command.punishment, since it's far less likely
+# (and far more annoying) for users to flood with invalid commands than
+# for them to flood with valid commands.
+#
+# Default value: 600
+###
+supybot.abuse.flood.command.invalid.punishment: 600
+
+###
+# Determines how many commands users are allowed per minute. If a user
+# sends more than this many commands in any 60 second period, they will
+# be ignored for supybot.abuse.flood.command.punishment seconds.
+#
+# Default value: 12
+###
+supybot.abuse.flood.command.maximum: 1200
+
+###
+# Determines whether the bot will notify people that they're being
+# ignored for command flooding.
+#
+# Default value: True
+###
+supybot.abuse.flood.command.notify: True
+
+###
+# Determines how many seconds the bot will ignore users who flood it
+# with commands.
+#
+# Default value: 300
+###
+supybot.abuse.flood.command.punishment: 300
+
+###
+# Determines the interval used for the history storage.
+#
+# Default value: 60
+###
+supybot.abuse.flood.interval: 60
+
+###
+# Determines whether the bot will always join a channel when it's
+# invited. If this value is False, the bot will only join a channel if
+# the user inviting it has the 'admin' capability (or if it's explicitly
+# told to join the channel using the Admin.join command).
+#
+# Default value: False
+###
+supybot.alwaysJoinOnInvite: False
+
+###
+# These are the capabilities that are given to everyone by default. If
+# they are normal capabilities, then the user will have to have the
+# appropriate anti-capability if you want to override these
+# capabilities; if they are anti-capabilities, then the user will have
+# to have the actual capability to override these capabilities. See
+# docs/CAPABILITIES if you don't understand why these default to what
+# they do.
+#
+# Default value: -admin -aka.add -aka.remove -aka.set -alias.add -alias.remove -owner -scheduler.add -scheduler.remove -scheduler.repeat -trusted
+###
+supybot.capabilities: -admin -aka.add -aka.remove -aka.set -alias.add -alias.remove -owner -scheduler.add -scheduler.remove -scheduler.repeat -trusted
+
+###
+# Determines whether the bot by default will allow users to have a
+# capability. If this is disabled, a user must explicitly have the
+# capability for whatever command they wish to run. To set this in a
+# channel-specific way, use the 'channel capability setdefault' command.
+#
+# Default value: True
+###
+supybot.capabilities.default: True
+
+###
+# Determines what capabilities the bot will never tell to a non-admin
+# whether or not a user has them.
+#
+# Default value:
+###
+supybot.capabilities.private:
+
+###
+# These are the capabilities that are given to every authenticated user
+# by default. You probably want to use supybot.capabilities instead, to
+# give these capabilities both to registered and non-registered users.
+#
+# Default value:
+###
+supybot.capabilities.registeredUsers:
+
+###
+# Allows this bot's owner user to use commands that grants them shell
+# access. This config variable exists in case you want to prevent MITM
+# from the IRC network itself (vulnerable IRCd or IRCops) from gaining
+# shell access to the bot's server by impersonating the owner. Setting
+# this to False also disables plugins and commands that can be used to
+# indirectly gain shell access.
+#
+# Default value: True
+###
+supybot.commands.allowShell: True
+
+###
+# Determines what commands have default plugins set, and which plugins
+# are set to be the default for each of those commands.
+###
+supybot.commands.defaultPlugins.addcapability: Admin
+supybot.commands.defaultPlugins.capabilities: User
+supybot.commands.defaultPlugins.disable: Owner
+supybot.commands.defaultPlugins.enable: Owner
+supybot.commands.defaultPlugins.help: Misc
+supybot.commands.defaultPlugins.ignore: Admin
+
+###
+# Determines what plugins automatically get precedence over all other
+# plugins when selecting a default plugin for a command. By default,
+# this includes the standard loaded plugins. You probably shouldn't
+# change this if you don't know what you're doing; if you do know what
+# you're doing, then also know that this set is case-sensitive.
+#
+# Default value: Admin Channel Config Misc Owner User
+###
+supybot.commands.defaultPlugins.importantPlugins: Admin Channel Config Misc Owner User
+supybot.commands.defaultPlugins.list: Misc
+supybot.commands.defaultPlugins.reload: Owner
+supybot.commands.defaultPlugins.removecapability: Admin
+supybot.commands.defaultPlugins.unignore: Admin
+
+###
+# Determines what commands are currently disabled. Such commands will
+# not appear in command lists, etc. They will appear not even to exist.
+#
+# Default value:
+###
+supybot.commands.disabled:
+
+###
+# Determines whether the bot will allow nested commands, which rule. You
+# definitely should keep this on.
+#
+# Default value: True
+###
+supybot.commands.nested: True
+
+###
+# Supybot allows you to specify what brackets are used for your nested
+# commands. Valid sets of brackets include [], <>, {}, and (). [] has
+# strong historical motivation, but <> or () might be slightly superior
+# because they cannot occur in a nick. If this string is empty, nested
+# commands will not be allowed in this channel.
+#
+# Default value: []
+###
+supybot.commands.nested.brackets: []
+
+###
+# Determines what the maximum number of nested commands will be; users
+# will receive an error if they attempt commands more nested than this.
+#
+# Default value: 10
+###
+supybot.commands.nested.maximum: 10
+
+###
+# Supybot allows nested commands. Enabling this option will allow nested
+# commands with a syntax similar to UNIX pipes, for example: 'bot: foo |
+# bar'.
+#
+# Default value: False
+###
+supybot.commands.nested.pipeSyntax: False
+
+###
+# Determines what characters are valid for quoting arguments to commands
+# in order to prevent them from being tokenized.
+#
+# Default value: "
+###
+supybot.commands.quotes: "
+
+###
+# Determines what databases are available for use. If this value is not
+# configured (that is, if its value is empty) then sane defaults will be
+# provided.
+#
+# Default value: sqlite3 anydbm dbm cdb flat pickle
+###
+supybot.databases: sqlite3 anydbm dbm cdb flat pickle
+
+###
+# Determines what filename will be used for the channels database. This
+# file will go into the directory specified by the
+# supybot.directories.conf variable.
+#
+# Default value: channels.conf
+###
+supybot.databases.channels.filename: channels.conf
+
+###
+# Determines what filename will be used for the ignores database. This
+# file will go into the directory specified by the
+# supybot.directories.conf variable.
+#
+# Default value: ignores.conf
+###
+supybot.databases.ignores.filename: ignores.conf
+
+###
+# Determines what filename will be used for the networks database. This
+# file will go into the directory specified by the
+# supybot.directories.conf variable.
+#
+# Default value: networks.conf
+###
+supybot.databases.networks.filename: networks.conf
+
+###
+# Determines whether database-based plugins that can be channel-specific
+# will be so. This can be overridden by individual channels. Do note
+# that the bot needs to be restarted immediately after changing this
+# variable or your db plugins may not work for your channel; also note
+# that you may wish to set
+# supybot.databases.plugins.channelSpecific.link appropriately if you
+# wish to share a certain channel's databases globally.
+#
+# Default value: True
+###
+supybot.databases.plugins.channelSpecific: True
+
+###
+# Determines what channel global (non-channel-specific) databases will
+# be considered a part of. This is helpful if you've been running
+# channel-specific for awhile and want to turn the databases for your
+# primary channel into global databases. If
+# supybot.databases.plugins.channelSpecific.link.allow prevents linking,
+# the current channel will be used. Do note that the bot needs to be
+# restarted immediately after changing this variable or your db plugins
+# may not work for your channel.
+#
+# Default value: #
+###
+supybot.databases.plugins.channelSpecific.link: #
+
+###
+# Determines whether another channel's global (non-channel-specific)
+# databases will be allowed to link to this channel's databases. Do note
+# that the bot needs to be restarted immediately after changing this
+# variable or your db plugins may not work for your channel.
+#
+# Default value: True
+###
+supybot.databases.plugins.channelSpecific.link.allow: True
+
+###
+# Determines whether the bot will require user registration to use 'add'
+# commands in database-based Supybot plugins.
+#
+# Default value: True
+###
+supybot.databases.plugins.requireRegistration: True
+
+###
+# Determines whether CDB databases will be allowed as a database
+# implementation.
+#
+# Default value: True
+###
+supybot.databases.types.cdb: True
+
+###
+# Determines how often CDB databases will have their modifications
+# flushed to disk. When the number of modified records is greater than
+# this fraction of the total number of records, the database will be
+# entirely flushed to disk.
+#
+# Default value: 0.5
+###
+supybot.databases.types.cdb.maximumModifications: 0.5
+
+###
+# Determines whether the bot will allow users to unregister their users.
+# This can wreak havoc with already-existing databases, so by default we
+# don't allow it. Enable this at your own risk. (Do also note that this
+# does not prevent the owner of the bot from using the unregister
+# command.)
+#
+# Default value: False
+###
+supybot.databases.users.allowUnregistration: False
+
+###
+# Determines what filename will be used for the users database. This
+# file will go into the directory specified by the
+# supybot.directories.conf variable.
+#
+# Default value: users.conf
+###
+supybot.databases.users.filename: users.conf
+
+###
+# Determines how long it takes identification to time out. If the value
+# is less than or equal to zero, identification never times out.
+#
+# Default value: 0
+###
+supybot.databases.users.timeoutIdentification: 0
+
+###
+# Determines whether the bot will automatically flush all flushers
+# *very* often. Useful for debugging when you don't know what's breaking
+# or when, but think that it might be logged.
+#
+# Default value: False
+###
+supybot.debug.flushVeryOften: False
+
+###
+# Determines whether the bot will automatically thread all commands.
+#
+# Default value: False
+###
+supybot.debug.threadAllCommands: False
+
+###
+# Determines whether the bot will ignore unidentified users by default.
+# Of course, that'll make it particularly hard for those users to
+# register or identify with the bot without adding their hostmasks, but
+# that's your problem to solve.
+#
+# Default value: False
+###
+supybot.defaultIgnore: False
+
+###
+# Determines what the default timeout for socket objects will be. This
+# means that *all* sockets will timeout when this many seconds has gone
+# by (unless otherwise modified by the author of the code that uses the
+# sockets).
+#
+# Default value: 10
+###
+supybot.defaultSocketTimeout: 10
+
+###
+# Determines what directory backup data is put into. Set it to /dev/null
+# to disable backup (it is a special value, so it also works on Windows
+# and systems without /dev/null).
+#
+# Default value: backup
+###
+supybot.directories.backup: /config/backup
+
+###
+# Determines what directory configuration data is put into.
+#
+# Default value: conf
+###
+supybot.directories.conf: /config/conf
+
+###
+# Determines what directory data is put into.
+#
+# Default value: data
+###
+supybot.directories.data: /config/data
+
+###
+# Determines what directory temporary files are put into.
+#
+# Default value: tmp
+###
+supybot.directories.data.tmp: /config/data/tmp
+
+###
+# Determines what directory files of the web server (templates, custom
+# images, ...) are put into.
+#
+# Default value: web
+###
+supybot.directories.data.web: /config/data/web
+
+###
+# Determines what directory the bot will store its logfiles in.
+#
+# Default value: logs
+###
+supybot.directories.log: /config/logs
+
+###
+# Determines what directories the bot will look for plugins in. Accepts
+# a comma-separated list of strings. This means that to add another
+# directory, you can nest the former value and add a new one. E.g. you
+# can say: bot: 'config supybot.directories.plugins [config
+# supybot.directories.plugins], newPluginDirectory'.
+#
+# Default value:
+###
+supybot.directories.plugins: /config/plugins
+
+###
+# Determines the maximum time the bot will wait before attempting to
+# reconnect to an IRC server. The bot may, of course, reconnect earlier
+# if possible.
+#
+# Default value: 300.0
+###
+supybot.drivers.maxReconnectWait: 300.0
+
+###
+# Determines the minimum time the bot will wait before attempting to
+# reconnect to an IRC server.
+#
+# Default value: 10.0
+###
+supybot.drivers.minReconnectWait: 10.0
+
+###
+# Determines what driver module the bot will use. Current, the only (and
+# default) driver is Socket.
+#
+# Default value: default
+###
+supybot.drivers.module: default
+
+###
+# Determines the default length of time a driver should block waiting
+# for input.
+#
+# Default value: 1.0
+###
+supybot.drivers.poll: 1.0
+
+###
+# A string that is the external IP of the bot. If this is the empty
+# string, the bot will attempt to find out its IP dynamically (though
+# sometimes that doesn't work, hence this variable). This variable is
+# not used by Limnoria and its built-in plugins: see
+# supybot.protocols.irc.vhost / supybot.protocols.irc.vhostv6 to set the
+# IRC bind host, and supybot.servers.http.hosts4 /
+# supybot.servers.http.hosts6 to set the HTTP server bind host.
+#
+# Default value:
+###
+supybot.externalIP:
+
+###
+# Determines whether the bot will periodically flush data and
+# configuration files to disk. Generally, the only time you'll want to
+# set this to False is when you want to modify those configuration files
+# by hand and don't want the bot to flush its current version over your
+# modifications. Do note that if you change this to False inside the
+# bot, your changes won't be flushed. To make this change permanent, you
+# must edit the registry yourself.
+#
+# Default value: True
+###
+supybot.flush: True
+
+###
+# Determines whether the bot will unidentify someone when that person
+# changes their nick. Setting this to True will cause the bot to track
+# such changes. It defaults to False for a little greater security.
+#
+# Default value: False
+###
+supybot.followIdentificationThroughNickChanges: False
+
+###
+# Determines the bot's ident string, if the server doesn't provide one
+# by default.
+#
+# Default value: limnoria
+###
+supybot.ident: limnoria
+
+###
+# Determines the bot's default language if translations exist. Currently
+# supported are: de, en, es, fi, fr, it
+#
+# Default value: en
+###
+supybot.language: en
+
+###
+# Determines what the bot's logging format will be. The relevant
+# documentation on the available formattings is Python's documentation
+# on its logging module.
+#
+# Default value: %(levelname)s %(asctime)s %(name)s %(message)s
+###
+supybot.log.format: %(levelname)s %(asctime)s %(name)s %(message)s
+
+###
+# Determines what the minimum priority level logged to file will be. Do
+# note that this value does not affect the level logged to stdout; for
+# that, you should set the value of supybot.log.stdout.level. Valid
+# values are DEBUG, INFO, WARNING, ERROR, and CRITICAL, in order of
+# increasing priority.
+#
+# Default value: INFO
+###
+supybot.log.level: INFO
+
+###
+# Determines what the bot's logging format will be. The relevant
+# documentation on the available formattings is Python's documentation
+# on its logging module.
+#
+# Default value: %(levelname)s %(asctime)s %(message)s
+###
+supybot.log.plugins.format: %(levelname)s %(asctime)s %(message)s
+
+###
+# Determines whether the bot will separate plugin logs into their own
+# individual logfiles.
+#
+# Default value: False
+###
+supybot.log.plugins.individualLogfiles: False
+
+###
+# Determines whether the bot will log to stdout.
+#
+# Default value: True
+###
+supybot.log.stdout: True
+
+###
+# Determines whether the bot's logs to stdout (if enabled) will be
+# colorized with ANSI color.
+#
+# Default value: False
+###
+supybot.log.stdout.colorized: False
+
+###
+# Determines what the bot's logging format will be. The relevant
+# documentation on the available formattings is Python's documentation
+# on its logging module.
+#
+# Default value: %(levelname)s %(asctime)s %(message)s
+###
+supybot.log.stdout.format: %(levelname)s %(asctime)s %(message)s
+
+###
+# Determines what the minimum priority level logged will be. Valid
+# values are DEBUG, INFO, WARNING, ERROR, and CRITICAL, in order of
+# increasing priority.
+#
+# Default value: INFO
+###
+supybot.log.stdout.level: INFO
+
+###
+# Determines whether the bot will wrap its logs when they're output to
+# stdout.
+#
+# Default value: False
+###
+supybot.log.stdout.wrap: False
+
+###
+# Determines the format string for timestamps in logfiles. Refer to the
+# Python documentation for the time module to see what formats are
+# accepted. If you set this variable to the empty string, times will be
+# logged in a simple seconds-since-epoch format.
+#
+# Default value: %Y-%m-%dT%H:%M:%S
+###
+supybot.log.timestampFormat: %Y-%m-%dT%H:%M:%S
+
+###
+# Determines what networks the bot will connect to.
+#
+# Default value:
+###
+supybot.networks: devinet
+
+###
+# Determines what certificate file (if any) the bot will use to connect
+# with SSL sockets to devinet.
+#
+# Default value:
+###
+supybot.networks.devinet.certfile:
+
+###
+# Space-separated list of channels the bot will join only on devinet.
+#
+# Default value:
+###
+supybot.networks.devinet.channels: #limnoriabot #matrix_devi_netdata_notifs #rss #rss_security
+
+###
+# Determines what key (if any) will be used to join the channel.
+#
+# Default value:
+###
+supybot.networks.devinet.channels.key:
+
+###
+# Determines the bot's ident string, if the server doesn't provide one
+# by default. If empty, defaults to supybot.ident.
+#
+# Default value:
+###
+supybot.networks.devinet.ident:
+
+###
+# Determines what nick the bot will use on this network. If empty,
+# defaults to supybot.nick.
+#
+# Default value:
+###
+supybot.networks.devinet.nick: limnoria
+
+###
+# Determines what password will be used on devinet. Yes, we know that
+# technically passwords are server-specific and not network-specific,
+# but this is the best we can do right now.
+#
+# Default value:
+###
+supybot.networks.devinet.password:
+
+###
+# Deprecated config value, keep it to False.
+#
+# Default value: False
+###
+supybot.networks.devinet.requireStarttls: False
+
+###
+# Determines what SASL ECDSA key (if any) will be used on devinet. The
+# public key must be registered with NickServ for SASL ECDSA-
+# NIST256P-CHALLENGE to work.
+#
+# Default value:
+###
+supybot.networks.devinet.sasl.ecdsa_key:
+
+###
+# Determines what SASL mechanisms will be tried and in which order.
+#
+# Default value: scram-sha-256 external ecdsa-nist256p-challenge plain
+###
+supybot.networks.devinet.sasl.mechanisms: scram-sha-256 external ecdsa-nist256p-challenge plain
+
+###
+# Determines what SASL password will be used on devinet.
+#
+# Default value:
+###
+supybot.networks.devinet.sasl.password: p@ssw0rd # pragma: allowlist secret
+
+###
+# Determines whether the bot will abort the connection if the none of
+# the enabled SASL mechanism succeeded.
+#
+# Default value: False
+###
+supybot.networks.devinet.sasl.required: False
+
+###
+# Determines what SASL username will be used on devinet. This should be
+# the bot's account name.
+#
+# Default value:
+###
+supybot.networks.devinet.sasl.username: limnoriabot
+
+###
+# Space-separated list of servers the bot will connect to for devinet.
+# Each will be tried in order, wrapping back to the first when the cycle
+# is completed.
+#
+# Default value:
+###
+supybot.networks.devinet.servers: irc.terminaldweller.com:6697
+
+###
+# If not empty, determines the hostname:port of the socks proxy that
+# will be used to connect to this network.
+#
+# Default value:
+###
+supybot.networks.devinet.socksproxy:
+
+###
+# Determines whether the bot will attempt to connect with SSL sockets to
+# devinet.
+#
+# Default value: True
+###
+supybot.networks.devinet.ssl: True
+
+###
+# A certificate that is trusted to verify certificates of this network
+# (aka. Certificate Authority).
+#
+# Default value:
+###
+supybot.networks.devinet.ssl.authorityCertificate:
+
+###
+# Space-separated list of fingerprints of trusted certificates for this
+# network. Supported hash algorithms are: md5, sha1, sha224, sha256,
+# sha384, and sha512. If non-empty, Certification Authority signatures
+# will not be used to verify certificates.
+#
+# Default value:
+###
+supybot.networks.devinet.ssl.serverFingerprints:
+
+###
+# Determines what user modes the bot will request from the server when
+# it first connects. If empty, defaults to supybot.protocols.irc.umodes
+#
+# Default value:
+###
+supybot.networks.devinet.umodes:
+
+###
+# Determines the real name which the bot sends to the server. If empty,
+# defaults to supybot.user
+#
+# Default value:
+###
+supybot.networks.devinet.user:
+
+###
+# Determines the bot's default nick.
+#
+# Default value: supybot
+###
+supybot.nick: limnoriabot
+
+###
+# Determines what alternative nicks will be used if the primary nick
+# (supybot.nick) isn't available. A %s in this nick is replaced by the
+# value of supybot.nick when used. If no alternates are given, or if all
+# are used, the supybot.nick will be perturbed appropriately until an
+# unused nick is found.
+#
+# Default value: %s` %s_
+###
+supybot.nick.alternates: %s` %s_
+
+###
+# Determines what file the bot should write its PID (Process ID) to, so
+# you can kill it more easily. If it's left unset (as is the default)
+# then no PID file will be written. A restart is required for changes to
+# this variable to take effect.
+#
+# Default value:
+###
+supybot.pidFile:
+
+###
+# List of all plugins that were ever loaded. Currently has no effect
+# whatsoever. You probably want to use the 'load' or 'unload' commands,
+# or edit supybot.plugins.<pluginname> instead of this.
+#
+# Default value:
+###
+supybot.plugins: Admin AutoMode Channel ChatGPT Config DDG Fediverse Math MessageParser Misc Network NickAuth Owner Plugin PluginDownloader RSS ShrinkUrl User Utilities
+
+###
+# Determines whether this plugin is loaded by default.
+###
+supybot.plugins.Admin: True
+
+###
+# Determines whether this plugin is publicly visible.
+#
+# Default value: True
+###
+supybot.plugins.Admin.public: True
+
+###
+# Determines whether this plugin is loaded by default.
+###
+supybot.plugins.AutoMode: True
+
+###
+# Determines whether the bot will check for 'alternative capabilities'
+# (ie. autoop, autohalfop, autovoice) in addition to/instead of classic
+# ones.
+#
+# Default value: True
+###
+supybot.plugins.AutoMode.alternativeCapabilities: True
+
+###
+# Determines whether the bot will automatically ban people who join the
+# channel and are on the banlist.
+#
+# Default value: True
+###
+supybot.plugins.AutoMode.ban: True
+
+###
+# Determines how many seconds the bot will automatically ban a person
+# when banning.
+#
+# Default value: 86400
+###
+supybot.plugins.AutoMode.ban.period: 86400
+
+###
+# Determines how many seconds the bot will wait before applying a mode.
+# Has no effect on bans.
+#
+# Default value: 0
+###
+supybot.plugins.AutoMode.delay: 0
+
+###
+# Determines whether this plugin is enabled.
+#
+# Default value: True
+###
+supybot.plugins.AutoMode.enable: True
+
+###
+# Extra modes that will be applied to a user. Example syntax: user1+o-v
+# user2+v user3-v
+#
+# Default value:
+###
+supybot.plugins.AutoMode.extra:
+
+###
+# Determines whether the bot will "fall through" to halfop/voicing when
+# auto-opping is turned off but auto-halfopping/voicing are turned on.
+#
+# Default value: True
+###
+supybot.plugins.AutoMode.fallthrough: True
+
+###
+# Determines whether the bot will automatically halfop people with the
+# <channel>,halfop capability when they join the channel.
+#
+# Default value: False
+###
+supybot.plugins.AutoMode.halfop: False
+
+###
+# Determines whether the bot will automatically op people with the
+# <channel>,op capability when they join the channel.
+#
+# Default value: False
+###
+supybot.plugins.AutoMode.op: False
+
+###
+# Determines whether this plugin will automode owners even if they don't
+# have op/halfop/voice/whatever capability.
+#
+# Default value: False
+###
+supybot.plugins.AutoMode.owner: False
+
+###
+# Determines whether this plugin is publicly visible.
+#
+# Default value: True
+###
+supybot.plugins.AutoMode.public: True
+
+###
+# Determines whether the bot will automatically voice people with the
+# <channel>,voice capability when they join the channel.
+#
+# Default value: False
+###
+supybot.plugins.AutoMode.voice: False
+
+###
+# Determines whether this plugin is loaded by default.
+###
+supybot.plugins.Channel: True
+
+###
+# Determines whether the bot will always try to rejoin a channel
+# whenever it's kicked from the channel.
+#
+# Default value: True
+###
+supybot.plugins.Channel.alwaysRejoin: True
+
+###
+# Determines whether the output of 'nicks' will be sent in private. This
+# prevents mass-highlights of a channel's users, accidental or on
+# purpose.
+#
+# Default value: True
+###
+supybot.plugins.Channel.nicksInPrivate: True
+
+###
+# Determines what part message should be used by default. If the part
+# command is called without a part message, this will be used. If this
+# value is empty, then no part message will be used (they are optional
+# in the IRC protocol). The standard substitutions ($version, $nick,
+# etc.) are all handled appropriately.
+#
+# Default value: Limnoria $version
+###
+supybot.plugins.Channel.partMsg: Limnoria $version
+
+###
+# Determines whether this plugin is publicly visible.
+#
+# Default value: True
+###
+supybot.plugins.Channel.public: True
+
+###
+# Determines how many seconds the bot will wait before rejoining a
+# channel if kicked and supybot.plugins.Channel.alwaysRejoin is on.
+#
+# Default value: 0
+###
+supybot.plugins.Channel.rejoinDelay: 0
+
+###
+# Determines whether this plugin is loaded by default.
+###
+supybot.plugins.ChatGPT: True
+
+###
+# Your OpenAI API Key (required)
+#
+# Default value:
+###
+supybot.plugins.ChatGPT.api_key:
+
+###
+# Number between -2.0 and 2.0. Positive values penalize new tokens based
+# on their existing frequency in the text so far, decreasing the model's
+# likelihood to repeat the same line verbatim.
+#
+# Default value: 0.0
+###
+supybot.plugins.ChatGPT.frequency_penalty: 0.0
+
+###
+# The maximum number of tokens to generate in the chat completion. The
+# total length of input tokens and generated tokens is limited by the
+# model's context length.
+#
+# Default value: 200
+###
+supybot.plugins.ChatGPT.max_tokens: 1000
+
+###
+# OpenAI endpoint model, default: "gpt-3.5-turbo"
+#
+# Default value: gpt-3.5-turbo
+###
+supybot.plugins.ChatGPT.model: gpt-3.5-turbo
+
+###
+# Prefix nick on replies true/false...
+#
+# Default value: True
+###
+supybot.plugins.ChatGPT.nick_prefix: True
+
+###
+# Number between -2.0 and 2.0. Positive values penalize new tokens based
+# on whether they appear in the text so far, increasing the model's
+# likelihood to talk about new topics.
+#
+# Default value: 0.0
+###
+supybot.plugins.ChatGPT.presence_penalty: 0.0
+
+###
+# The prompt defining your bot's personality.
+#
+# Default value: You are $botnick the IRC bot. Be brief, helpful
+###
+supybot.plugins.ChatGPT.prompt: You are $botnick the IRC bot. Be brief, helpful
+
+###
+# Determines whether this plugin is publicly visible.
+#
+# Default value: True
+###
+supybot.plugins.ChatGPT.public: True
+
+###
+# Get spammy and enable line per line reply...
+#
+# Default value: False
+###
+supybot.plugins.ChatGPT.reply_intact: True
+
+###
+# What sampling temperature to use, between 0 and 2. Higher values like
+# 0.8 will make the output more random, while lower values like 0.2 will
+# make it more focused and deterministic. We generally recommend
+# altering this or top_p but not both.
+#
+# Default value: 1.0
+###
+supybot.plugins.ChatGPT.temperature: 1.0
+
+###
+# An alternative to sampling with temperature, called nucleus sampling,
+# where the model considers the results of the tokens with top_p
+# probability mass. So 0.1 means only the tokens comprising the top 10%
+# probability mass are considered. We generally recommend altering this
+# or temperature but not both.
+#
+# Default value: 1.0
+###
+supybot.plugins.ChatGPT.top_p: 1.0
+
+###
+# Determines whether this plugin is loaded by default.
+###
+supybot.plugins.Config: True
+
+###
+# Determines whether this plugin is publicly visible.
+#
+# Default value: True
+###
+supybot.plugins.Config.public: True
+
+###
+# Determines whether this plugin is loaded by default.
+###
+supybot.plugins.DDG: True
+
+###
+# Determines the maximum number of results the bot will respond with.
+#
+# Default value: 4
+###
+supybot.plugins.DDG.maxResults: 4
+
+###
+# Determines whether this plugin is publicly visible.
+#
+# Default value: True
+###
+supybot.plugins.DDG.public: True
+
+###
+# Set the DDG search region to return results for the language/country
+# of your choice. E.g. 'us-en' for United States.
+# https://duckduckgo.com/params
+#
+# Default value:
+###
+supybot.plugins.DDG.region:
+
+###
+# Determines what level of search filtering to use by default. 'active'
+# - most filtering, 'moderate' - default filtering, 'off' - no filtering
+#
+# Default value: moderate
+###
+supybot.plugins.DDG.searchFilter: moderate
+
+###
+# Determines whether the bot will show a snippet of each resulting link.
+# If False, it will show the title of the link instead.
+#
+# Default value: True
+###
+supybot.plugins.DDG.showSnippet: True
+
+###
+# Determines whether this plugin is loaded by default.
+###
+supybot.plugins.Fediverse: True
+
+###
+# Determines whether the content of a status will be shown when the
+# status has a Content Warning.
+#
+# Default value: True
+###
+supybot.plugins.Fediverse.format.statuses.showContentWithCW: True
+
+###
+# Determines whether this plugin is publicly visible.
+#
+# Default value: True
+###
+supybot.plugins.Fediverse.public: True
+
+###
+# Determines whether the bot will output the profile of URLs to
+# Fediverse accounts it sees in channel messages.
+#
+# Default value: False
+###
+supybot.plugins.Fediverse.snarfers.profile: False
+
+###
+# Determines whether the bot will output the content of statuses whose
+# URLs it sees in channel messages.
+#
+# Default value: False
+###
+supybot.plugins.Fediverse.snarfers.status: False
+
+###
+# Determines whether the bot will output the profile of
+# @username@hostname accounts it sees in channel messages.
+#
+# Default value: False
+###
+supybot.plugins.Fediverse.snarfers.username: False
+
+###
+# Determines whether this plugin is loaded by default.
+###
+supybot.plugins.Math: True
+
+###
+# Determines whether this plugin is publicly visible.
+#
+# Default value: True
+###
+supybot.plugins.Math.public: True
+
+###
+# Determines whether this plugin is loaded by default.
+###
+supybot.plugins.MessageParser: True
+
+###
+# Determines whether the message parser is enabled. If enabled, will
+# trigger on regexps added to the regexp db.
+#
+# Default value: True
+###
+supybot.plugins.MessageParser.enable: True
+
+###
+# Determines whether the message parser is enabled for NOTICE messages
+# too.
+#
+# Default value: False
+###
+supybot.plugins.MessageParser.enableForNotices: False
+
+###
+# Determines whether we keep updating the usage count for each regexp,
+# for popularity ranking.
+#
+# Default value: True
+###
+supybot.plugins.MessageParser.keepRankInfo: True
+
+###
+# Determines the separator used between regexps when shown by the list
+# command.
+#
+# Default value: ,
+###
+supybot.plugins.MessageParser.listSeparator: ,
+
+###
+# Determines the maximum number of triggers in one message. Set this to
+# 0 to allow an infinite number of triggers.
+#
+# Default value: 0
+###
+supybot.plugins.MessageParser.maxTriggers: 0
+
+###
+# Determines whether this plugin is publicly visible.
+#
+# Default value: True
+###
+supybot.plugins.MessageParser.public: True
+
+###
+# Determines the number of regexps returned by the triggerrank command.
+#
+# Default value: 20
+###
+supybot.plugins.MessageParser.rankListLength: 20
+
+###
+# Determines the capabilities required (if any) to manage the regexp
+# database, including add, remove, lock, unlock. Use 'channel,capab' for
+# channel-level capabilities. Note that absence of an explicit
+# anticapability means user has capability.
+#
+# Default value: admin; channel,op
+###
+supybot.plugins.MessageParser.requireManageCapability: admin; channel,op
+
+###
+# Determines the capability required (if any) to vacuum the database.
+#
+# Default value: admin
+###
+supybot.plugins.MessageParser.requireVacuumCapability: admin
+
+###
+# Determines whether this plugin is loaded by default.
+###
+supybot.plugins.Misc: True
+
+###
+# Sets a custom help string, displayed when the 'help' command is called
+# without arguments.
+#
+# Default value:
+###
+supybot.plugins.Misc.customHelpString:
+
+###
+# Determines whether or not the nick will be included in the output of
+# last when it is part of a nested command
+#
+# Default value: False
+###
+supybot.plugins.Misc.last.nested.includeNick: False
+
+###
+# Determines whether or not the timestamp will be included in the output
+# of last when it is part of a nested command
+#
+# Default value: False
+###
+supybot.plugins.Misc.last.nested.includeTimestamp: False
+
+###
+# Determines whether the bot will list private plugins with the list
+# command if given the --private switch. If this is disabled, non-owner
+# users should be unable to see what private plugins are loaded.
+#
+# Default value: False
+###
+supybot.plugins.Misc.listPrivatePlugins: False
+
+###
+# Determines whether the bot will list unloaded plugins with the list
+# command if given the --unloaded switch. If this is disabled, non-owner
+# users should be unable to see what unloaded plugins are available.
+#
+# Default value: False
+###
+supybot.plugins.Misc.listUnloadedPlugins: False
+
+###
+# Determines how many messages the bot will issue when using the 'more'
+# command.
+#
+# Default value: 1
+###
+supybot.plugins.Misc.mores: 1
+
+###
+# Determines whether this plugin is publicly visible.
+#
+# Default value: True
+###
+supybot.plugins.Misc.public: True
+
+###
+# Determines the format string for timestamps in the Misc.last command.
+# Refer to the Python documentation for the time module to see what
+# formats are accepted. If you set this variable to the empty string,
+# the timestamp will not be shown.
+#
+# Default value: [%H:%M:%S]
+###
+supybot.plugins.Misc.timestampFormat: [%H:%M:%S]
+
+###
+# Determines whether this plugin is loaded by default.
+###
+supybot.plugins.Network: True
+
+###
+# Determines whether this plugin is publicly visible.
+#
+# Default value: True
+###
+supybot.plugins.Network.public: True
+
+###
+# Determines whether this plugin is loaded by default.
+###
+supybot.plugins.NickAuth: True
+
+###
+# Determines whether this plugin is publicly visible.
+#
+# Default value: True
+###
+supybot.plugins.NickAuth.public: True
+
+###
+# Determines whether this plugin is loaded by default.
+###
+supybot.plugins.Owner: True
+
+###
+# Determines the format of messages sent by the 'announce' command.
+# $owner may be used for the username of the owner calling this command,
+# and $text for the announcement being made.
+#
+# Default value: Announcement from my owner ($owner): $text
+###
+supybot.plugins.Owner.announceFormat: Announcement from my owner ($owner): $text
+
+###
+# Determines whether this plugin is publicly visible.
+#
+# Default value: True
+###
+supybot.plugins.Owner.public: True
+
+###
+# Determines what quit message will be used by default. If the quit
+# command is called without a quit message, this will be used. If this
+# value is empty, the nick of the person giving the quit command will be
+# used. The standard substitutions ($version, $nick, etc.) are all
+# handled appropriately.
+#
+# Default value: Limnoria $version
+###
+supybot.plugins.Owner.quitMsg: Limnoria $version
+
+###
+# Determines whether this plugin is loaded by default.
+###
+supybot.plugins.Plugin: True
+
+###
+# Determines whether this plugin is publicly visible.
+#
+# Default value: True
+###
+supybot.plugins.Plugin.public: True
+
+###
+# Determines whether this plugin is loaded by default.
+###
+supybot.plugins.PluginDownloader: True
+
+###
+# Determines whether this plugin is publicly visible.
+#
+# Default value: True
+###
+supybot.plugins.PluginDownloader.public: True
+
+###
+# Determines whether this plugin is loaded by default.
+###
+supybot.plugins.RSS: True
+
+###
+# Determines which RSS feeds should be announced in the channel; valid
+# input is a list of strings (either registered RSS feeds or RSS feed
+# URLs) separated by spaces.
+#
+# Default value:
+###
+supybot.plugins.RSS.announce:
+supybot.plugins.RSS.announce.#rss:
+supybot.plugins.RSS.announce.\:devinet.#limnoriabot: coffezilla drcreepen jackrhysider luetin09 magnetar margery28 margery28nitter mentaloutlaw naturestemper oculusimpera philion scaryjuju"youtube thedarksomnium thevolgun
+supybot.plugins.RSS.announce.\:devinet.#rss:
+supybot.plugins.RSS.announce.\:devinet.#rss_security: cvenew hibp zdiadvisorypublished zdiadvisoryupcoming
+
+###
+# The format the bot will use for displaying headlines of a RSS feed
+# that is announced. See supybot.plugins.RSS.format for the available
+# variables.
+#
+# Default value: News from $feed_name: $title <$link>
+###
+supybot.plugins.RSS.announceFormat: News from $feed_name: $title <$link>
+
+###
+# Indicates how many headlines an rss feed will output by default, if no
+# number is provided.
+#
+# Default value: 1
+###
+supybot.plugins.RSS.defaultNumberOfHeadlines: 1
+
+###
+# Determines what feeds should be accessible as commands.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds: anabolicaliens antsareeverywhere arjancode barelysociable blackhat boostcon brodierobertson bryanjenks bytebytego chillingtalesfordarknights chrisatmachine chyrosran22 coffezilla coinbureau computerphile contextfree cppcon creepsmcpasta"youtube creepyghoststories cryochamber cryptotips cvenew distrotube djware doingfedtime drcreepen fireship gavinfreeborn geminihomeentertainment"youtube gotbletu gppenitentiarylifeweswatson hak5 hibp husseinnasser ippsec jackrhysider jeffgeerling joshuafluke karljobst kimiversen learnlinuxtv level1linux level1techs lexfridman lifeofboris lighthousehorror linustechtips local58tv"youtube luetin09 lukesmith magnetar margery28 margery28nitter maryamsadeghi mcoding mentaloutlaw mikelevin mozillasecurityadvisory mrcreepypasta myplayhouse naturestemper networkchuck newworldreview nexpo nickjanetakis nullbyte numberphile numberphile2 oculusimpera openwrtsecuirtyadvisory pagefire philion robbraxmantech romnexyoutube scaryjuju"youtube semicolonsons seytonic sgtmarkiv sokoninaru\u305d\u3053\u306b\u9cf4\u308b stefanmischook studyingwithalex st\xf6ek techworldwithnana thecherno thedarkcosmos thedarksomnium theexploringseries thejimmydoreshow thelinuxcast thelinuxexperiment theprimeagen thevolgun vivaladirtleague vormithrax"youtube wolflordrho yannickilcher zdiadvisorypublished zdiadvisoryupcoming
+
+###
+# The URL for the feed anabolicaliens. Note that because announced lines
+# are cached, you may need to reload this plugin after changing this
+# option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.anabolicaliens: https://www.youtube.com/feeds/videos.xml?channel_id=UCQPmOWNza6PMesQaWWBEhJA
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.anabolicaliens.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.anabolicaliens.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.anabolicaliens.waitPeriod: 0
+
+###
+# The URL for the feed antsareeverywhere. Note that because announced
+# lines are cached, you may need to reload this plugin after changing
+# this option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.antsareeverywhere: https://www.youtube.com/feeds/videos.xml?channel_id=UCa4GzOwXZbQPQyPHhQmpKCQ
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.antsareeverywhere.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.antsareeverywhere.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.antsareeverywhere.waitPeriod: 0
+
+###
+# The URL for the feed arjancode. Note that because announced lines are
+# cached, you may need to reload this plugin after changing this option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.arjancode: https://www.youtube.com/feeds/videos.xml?channel_id=UCVhQ2NnY5Rskt6UjCUkJ_DA
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.arjancode.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.arjancode.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.arjancode.waitPeriod: 0
+
+###
+# The URL for the feed barelysociable. Note that because announced lines
+# are cached, you may need to reload this plugin after changing this
+# option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.barelysociable: https://www.youtube.com/feeds/videos.xml?channel_id=UC9PIn6-XuRKZ5HmYeu46AIw
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.barelysociable.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.barelysociable.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.barelysociable.waitPeriod: 0
+
+###
+# The URL for the feed blackhat. Note that because announced lines are
+# cached, you may need to reload this plugin after changing this option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.blackhat: https://www.youtube.com/feeds/videos.xml?channel_id=UCJ6q9Ie29ajGqKApbLqfBOg
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.blackhat.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.blackhat.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.blackhat.waitPeriod: 0
+
+###
+# The URL for the feed boostcon. Note that because announced lines are
+# cached, you may need to reload this plugin after changing this option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.boostcon: https://www.youtube.com/feeds/videos.xml?channel_id=UC5e__RG9K3cHrPotPABnrwg
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.boostcon.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.boostcon.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.boostcon.waitPeriod: 0
+
+###
+# The URL for the feed brodierobertson. Note that because announced
+# lines are cached, you may need to reload this plugin after changing
+# this option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.brodierobertson: https://www.youtube.com/feeds/videos.xml?channel_id=UCld68syR8Wi-GY_n4CaoJGA
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.brodierobertson.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.brodierobertson.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.brodierobertson.waitPeriod: 0
+
+###
+# The URL for the feed bryanjenks. Note that because announced lines are
+# cached, you may need to reload this plugin after changing this option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.bryanjenks: https://www.youtube.com/feeds/videos.xml?channel_id=UCfhSB16X9MXhzSFe_H7XbHg
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.bryanjenks.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.bryanjenks.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.bryanjenks.waitPeriod: 0
+
+###
+# The URL for the feed bytebytego. Note that because announced lines are
+# cached, you may need to reload this plugin after changing this option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.bytebytego: https://www.youtube.com/feeds/videos.xml?channel_id=UCZgt6AzoyjslHTC9dz0UoTw
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.bytebytego.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.bytebytego.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.bytebytego.waitPeriod: 0
+
+###
+# The URL for the feed chillingtalesfordarknights. Note that because
+# announced lines are cached, you may need to reload this plugin after
+# changing this option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.chillingtalesfordarknights: https://www.youtube.com/feeds/videos.xml?channel_id=UC79H1bXWDNodOD8_VtZd_DA
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.chillingtalesfordarknights.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.chillingtalesfordarknights.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.chillingtalesfordarknights.waitPeriod: 0
+
+###
+# The URL for the feed chrisatmachine. Note that because announced lines
+# are cached, you may need to reload this plugin after changing this
+# option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.chrisatmachine: https://www.youtube.com/feeds/videos.xml?channel_id=UCS97tchJDq17Qms3cux8wcA
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.chrisatmachine.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.chrisatmachine.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.chrisatmachine.waitPeriod: 0
+
+###
+# The URL for the feed chyrosran22. Note that because announced lines
+# are cached, you may need to reload this plugin after changing this
+# option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.chyrosran22: https://www.youtube.com/feeds/videos.xml?channel_id=UCD0y51PJfvkZNe3y3FR5riw
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.chyrosran22.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.chyrosran22.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.chyrosran22.waitPeriod: 0
+
+###
+# The URL for the feed coffezilla. Note that because announced lines are
+# cached, you may need to reload this plugin after changing this option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.coffezilla: https://www.youtube.com/feeds/videos.xml?channel_id=UCFQMnBA3CS502aghlcr0_aw
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.coffezilla.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.coffezilla.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.coffezilla.waitPeriod: 0
+
+###
+# The URL for the feed coinbureau. Note that because announced lines are
+# cached, you may need to reload this plugin after changing this option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.coinbureau: https://www.youtube.com/feeds/videos.xml?channel_id=UCqK_GSMbpiV8spgD3ZGloSw
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.coinbureau.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.coinbureau.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.coinbureau.waitPeriod: 0
+
+###
+# The URL for the feed computerphile. Note that because announced lines
+# are cached, you may need to reload this plugin after changing this
+# option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.computerphile: https://www.youtube.com/feeds/videos.xml?channel_id=UC9-y-6csu5WGm29I7JiwpnA
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.computerphile.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.computerphile.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.computerphile.waitPeriod: 0
+
+###
+# The URL for the feed contextfree. Note that because announced lines
+# are cached, you may need to reload this plugin after changing this
+# option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.contextfree: https://www.youtube.com/feeds/videos.xml?channel_id=UCS4FAVeYW_IaZqAbqhlvxlA
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.contextfree.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.contextfree.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.contextfree.waitPeriod: 0
+
+###
+# The URL for the feed cppcon. Note that because announced lines are
+# cached, you may need to reload this plugin after changing this option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.cppcon: https://www.youtube.com/feeds/videos.xml?channel_id=UCMlGfpWw-RUdWX_JbLCukXg
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.cppcon.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.cppcon.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.cppcon.waitPeriod: 0
+
+###
+# The URL for the feed creepsmcpasta"youtube. Note that because
+# announced lines are cached, you may need to reload this plugin after
+# changing this option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.creepsmcpasta"youtube: https://www.youtube.com/feeds/videos.xml?user=CreepsMcPasta
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.creepsmcpasta"youtube.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.creepsmcpasta"youtube.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.creepsmcpasta"youtube.waitPeriod: 0
+
+###
+# The URL for the feed creepyghoststories. Note that because announced
+# lines are cached, you may need to reload this plugin after changing
+# this option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.creepyghoststories: https://www.youtube.com/feeds/videos.xml?channel_id=UCnK36WwcJDTEhyS7w3SQntg
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.creepyghoststories.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.creepyghoststories.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.creepyghoststories.waitPeriod: 0
+
+###
+# The URL for the feed cryochamber. Note that because announced lines
+# are cached, you may need to reload this plugin after changing this
+# option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.cryochamber: https://www.youtube.com/feeds/videos.xml?channel_id=UCVHOgH4XEyYx-ZEaya1XqCQ
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.cryochamber.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.cryochamber.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.cryochamber.waitPeriod: 0
+
+###
+# The URL for the feed cryptotips. Note that because announced lines are
+# cached, you may need to reload this plugin after changing this option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.cryptotips: https://www.youtube.com/feeds/videos.xml?channel_id=UCavTvSwEoRABvnPtLg0e6LQ
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.cryptotips.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.cryptotips.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.cryptotips.waitPeriod: 0
+
+###
+# The URL for the feed cvenew. Note that because announced lines are
+# cached, you may need to reload this plugin after changing this option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.cvenew: https://nitter.net/CVEnew/rss
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.cvenew.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.cvenew.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.cvenew.waitPeriod: 0
+
+###
+# The URL for the feed distrotube. Note that because announced lines are
+# cached, you may need to reload this plugin after changing this option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.distrotube: https://www.youtube.com/feeds/videos.xml?channel_id=UCVls1GmFKf6WlTraIb_IaJg
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.distrotube.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.distrotube.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.distrotube.waitPeriod: 0
+
+###
+# The URL for the feed djware. Note that because announced lines are
+# cached, you may need to reload this plugin after changing this option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.djware: https://www.youtube.com/feeds/videos.xml?channel_id=UC05XpvbHZUQOfA6xk4dlmcw
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.djware.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.djware.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.djware.waitPeriod: 0
+
+###
+# The URL for the feed doingfedtime. Note that because announced lines
+# are cached, you may need to reload this plugin after changing this
+# option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.doingfedtime: https://www.youtube.com/feeds/videos.xml?channel_id=UCUP5UhD6cMfpN4vxW3FYJLQ
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.doingfedtime.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.doingfedtime.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.doingfedtime.waitPeriod: 0
+
+###
+# The URL for the feed drcreepen. Note that because announced lines are
+# cached, you may need to reload this plugin after changing this option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.drcreepen: https://www.youtube.com/feeds/videos.xml?channel_id=UCcZ_-5180OBED8NBkZgkRmQ
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.drcreepen.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.drcreepen.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.drcreepen.waitPeriod: 0
+
+###
+# The URL for the feed fireship. Note that because announced lines are
+# cached, you may need to reload this plugin after changing this option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.fireship: https://www.youtube.com/feeds/videos.xml?channel_id=UCsBjURrPoezykLs9EqgamOA
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.fireship.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.fireship.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.fireship.waitPeriod: 0
+
+###
+# The URL for the feed gavinfreeborn. Note that because announced lines
+# are cached, you may need to reload this plugin after changing this
+# option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.gavinfreeborn: https://www.youtube.com/feeds/videos.xml?user=g297125009
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.gavinfreeborn.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.gavinfreeborn.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.gavinfreeborn.waitPeriod: 0
+
+###
+# The URL for the feed geminihomeentertainment"youtube. Note that
+# because announced lines are cached, you may need to reload this plugin
+# after changing this option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.geminihomeentertainment"youtube: https://www.youtube.com/feeds/videos.xml?channel_id=UC9YXCCz-A28lxhMA-ArfBaA
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.geminihomeentertainment"youtube.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.geminihomeentertainment"youtube.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.geminihomeentertainment"youtube.waitPeriod: 0
+
+###
+# The URL for the feed gotbletu. Note that because announced lines are
+# cached, you may need to reload this plugin after changing this option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.gotbletu: https://www.youtube.com/feeds/videos.xml?channel_id=UCvEdeev3sZoxi5hMksZI4KA
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.gotbletu.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.gotbletu.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.gotbletu.waitPeriod: 0
+
+###
+# The URL for the feed gppenitentiarylifeweswatson. Note that because
+# announced lines are cached, you may need to reload this plugin after
+# changing this option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.gppenitentiarylifeweswatson: https://www.youtube.com/feeds/videos.xml?channel_id=UCWUxLYGeeIKxxioUqL54Q8g
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.gppenitentiarylifeweswatson.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.gppenitentiarylifeweswatson.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.gppenitentiarylifeweswatson.waitPeriod: 0
+
+###
+# The URL for the feed hak5. Note that because announced lines are
+# cached, you may need to reload this plugin after changing this option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.hak5: https://www.youtube.com/feeds/videos.xml?user=Hak5Darren
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.hak5.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.hak5.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.hak5.waitPeriod: 0
+
+###
+# The URL for the feed hibp. Note that because announced lines are
+# cached, you may need to reload this plugin after changing this option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.hibp: https://rssgen.terminaldweller.com/?action=display&bridge=HaveIBeenPwnedBridge&order=dateAdded&item_limit=20&format=Atom
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.hibp.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.hibp.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.hibp.waitPeriod: 0
+
+###
+# The URL for the feed husseinnasser. Note that because announced lines
+# are cached, you may need to reload this plugin after changing this
+# option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.husseinnasser: https://www.youtube.com/feeds/videos.xml?user=GISIGeometry
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.husseinnasser.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.husseinnasser.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.husseinnasser.waitPeriod: 0
+
+###
+# The URL for the feed ippsec. Note that because announced lines are
+# cached, you may need to reload this plugin after changing this option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.ippsec: https://www.youtube.com/feeds/videos.xml?channel_id=UCa6eh7gCkpPo5XXUDfygQQA
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.ippsec.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.ippsec.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.ippsec.waitPeriod: 0
+
+###
+# The URL for the feed jackrhysider. Note that because announced lines
+# are cached, you may need to reload this plugin after changing this
+# option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.jackrhysider: https://www.youtube.com/feeds/videos.xml?channel_id=UCMIqrmh2lMdzhlCPK5ahsAg
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.jackrhysider.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.jackrhysider.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.jackrhysider.waitPeriod: 0
+
+###
+# The URL for the feed jeffgeerling. Note that because announced lines
+# are cached, you may need to reload this plugin after changing this
+# option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.jeffgeerling: https://www.youtube.com/feeds/videos.xml?user=geerlingguy
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.jeffgeerling.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.jeffgeerling.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.jeffgeerling.waitPeriod: 0
+
+###
+# The URL for the feed joshuafluke. Note that because announced lines
+# are cached, you may need to reload this plugin after changing this
+# option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.joshuafluke: https://www.youtube.com/feeds/videos.xml?channel_id=UC-91UA-Xy2Cvb98deRXuggA
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.joshuafluke.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.joshuafluke.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.joshuafluke.waitPeriod: 0
+
+###
+# The URL for the feed karljobst. Note that because announced lines are
+# cached, you may need to reload this plugin after changing this option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.karljobst: https://www.youtube.com/feeds/videos.xml?channel_id=UC3ltptWa0xfrDweghW94Acg
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.karljobst.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.karljobst.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.karljobst.waitPeriod: 0
+
+###
+# The URL for the feed kimiversen. Note that because announced lines are
+# cached, you may need to reload this plugin after changing this option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.kimiversen: https://www.youtube.com/feeds/videos.xml?channel_id=UCoJTOwZxbvq8Al8Qat2zgTA
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.kimiversen.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.kimiversen.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.kimiversen.waitPeriod: 0
+
+###
+# The URL for the feed learnlinuxtv. Note that because announced lines
+# are cached, you may need to reload this plugin after changing this
+# option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.learnlinuxtv: https://www.youtube.com/feeds/videos.xml?user=JtheLinuxguy
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.learnlinuxtv.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.learnlinuxtv.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.learnlinuxtv.waitPeriod: 0
+
+###
+# The URL for the feed level1linux. Note that because announced lines
+# are cached, you may need to reload this plugin after changing this
+# option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.level1linux: https://www.youtube.com/feeds/videos.xml?channel_id=UCOWcZ6Wicl-1N34H0zZe38w
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.level1linux.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.level1linux.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.level1linux.waitPeriod: 0
+
+###
+# The URL for the feed level1techs. Note that because announced lines
+# are cached, you may need to reload this plugin after changing this
+# option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.level1techs: https://www.youtube.com/feeds/videos.xml?channel_id=UC4w1YQAJMWOz4qtxinq55LQ
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.level1techs.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.level1techs.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.level1techs.waitPeriod: 0
+
+###
+# The URL for the feed lexfridman. Note that because announced lines are
+# cached, you may need to reload this plugin after changing this option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.lexfridman: https://www.youtube.com/feeds/videos.xml?user=lexfridman
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.lexfridman.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.lexfridman.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.lexfridman.waitPeriod: 0
+
+###
+# The URL for the feed lifeofboris. Note that because announced lines
+# are cached, you may need to reload this plugin after changing this
+# option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.lifeofboris: https://www.youtube.com/feeds/videos.xml?channel_id=UCS5tt2z_DFvG7-39J3aE-bQ
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.lifeofboris.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.lifeofboris.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.lifeofboris.waitPeriod: 0
+
+###
+# The URL for the feed lighthousehorror. Note that because announced
+# lines are cached, you may need to reload this plugin after changing
+# this option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.lighthousehorror: https://www.youtube.com/feeds/videos.xml?channel_id=UCHIKRYVrVYwKb2QpoLG5W3w
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.lighthousehorror.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.lighthousehorror.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.lighthousehorror.waitPeriod: 0
+
+###
+# The URL for the feed linustechtips. Note that because announced lines
+# are cached, you may need to reload this plugin after changing this
+# option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.linustechtips: https://www.youtube.com/feeds/videos.xml?channel_id=UCXuqSBlHAE6Xw-yeJA0Tunw
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.linustechtips.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.linustechtips.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.linustechtips.waitPeriod: 0
+
+###
+# The URL for the feed local58tv"youtube. Note that because announced
+# lines are cached, you may need to reload this plugin after changing
+# this option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.local58tv"youtube: https://www.youtube.com/feeds/videos.xml?channel_id=UCuoMasRkMhlj1VNVAOJdw5w
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.local58tv"youtube.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.local58tv"youtube.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.local58tv"youtube.waitPeriod: 0
+
+###
+# The URL for the feed luetin09. Note that because announced lines are
+# cached, you may need to reload this plugin after changing this option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.luetin09: https://www.youtube.com/feeds/videos.xml?user=Luetin09
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.luetin09.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.luetin09.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.luetin09.waitPeriod: 0
+
+###
+# The URL for the feed lukesmith. Note that because announced lines are
+# cached, you may need to reload this plugin after changing this option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.lukesmith: https://www.youtube.com/feeds/videos.xml?channel_id=UC2eYFnH61tmytImy1mTYvhA
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.lukesmith.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.lukesmith.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.lukesmith.waitPeriod: 0
+
+###
+# The URL for the feed magnetar. Note that because announced lines are
+# cached, you may need to reload this plugin after changing this option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.magnetar: https://www.youtube.com/feeds/videos.xml?channel_id=UCVLZiwP7Hz7GDDaETFmUs7Q
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.magnetar.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.magnetar.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.magnetar.waitPeriod: 0
+
+###
+# The URL for the feed margery28. Note that because announced lines are
+# cached, you may need to reload this plugin after changing this option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.margery28: https://rssgen.terminaldweller.com/?action=display&bridge=TwitterBridge&context=By+username&u=_margery28_&norep=on&noretweet=on&nopinned=on&nopic=on&noimg=on&noimgscaling=on&format=Atom
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.margery28.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.margery28.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.margery28.waitPeriod: 0
+
+###
+# The URL for the feed margery28nitter. Note that because announced
+# lines are cached, you may need to reload this plugin after changing
+# this option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.margery28nitter: https://nitter.net/_margery28_/rss
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.margery28nitter.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.margery28nitter.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.margery28nitter.waitPeriod: 0
+
+###
+# The URL for the feed maryamsadeghi. Note that because announced lines
+# are cached, you may need to reload this plugin after changing this
+# option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.maryamsadeghi: https://www.youtube.com/feeds/videos.xml?channel_id=UCUxmjSBn7Blx6eWpeC0I4xQ
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.maryamsadeghi.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.maryamsadeghi.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.maryamsadeghi.waitPeriod: 0
+
+###
+# The URL for the feed mcoding. Note that because announced lines are
+# cached, you may need to reload this plugin after changing this option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.mcoding: https://www.youtube.com/feeds/videos.xml?channel_id=UCaiL2GDNpLYH6Wokkk1VNcg
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.mcoding.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.mcoding.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.mcoding.waitPeriod: 0
+
+###
+# The URL for the feed mentaloutlaw. Note that because announced lines
+# are cached, you may need to reload this plugin after changing this
+# option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.mentaloutlaw: https://www.youtube.com/feeds/videos.xml?channel_id=UC7YOGHUfC1Tb6E4pudI9STA
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.mentaloutlaw.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.mentaloutlaw.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.mentaloutlaw.waitPeriod: 0
+
+###
+# The URL for the feed mikelevin. Note that because announced lines are
+# cached, you may need to reload this plugin after changing this option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.mikelevin: https://www.youtube.com/feeds/videos.xml?channel_id=UCd26IHBHcbtxD7pUdnIgiCw
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.mikelevin.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.mikelevin.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.mikelevin.waitPeriod: 0
+
+###
+# The URL for the feed mozillasecurityadvisory. Note that because
+# announced lines are cached, you may need to reload this plugin after
+# changing this option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.mozillasecurityadvisory: https://rssgen.terminaldweller.com/?action=display&bridge=MozillaSecurityBridge&format=Atom
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.mozillasecurityadvisory.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.mozillasecurityadvisory.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.mozillasecurityadvisory.waitPeriod: 0
+
+###
+# The URL for the feed mrcreepypasta. Note that because announced lines
+# are cached, you may need to reload this plugin after changing this
+# option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.mrcreepypasta: https://www.youtube.com/feeds/videos.xml?user=MrCreepyPasta
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.mrcreepypasta.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.mrcreepypasta.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.mrcreepypasta.waitPeriod: 0
+
+###
+# The URL for the feed myplayhouse. Note that because announced lines
+# are cached, you may need to reload this plugin after changing this
+# option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.myplayhouse: https://www.youtube.com/feeds/videos.xml?channel_id=UCVik6mzTCurdJmvdj5dCa7A
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.myplayhouse.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.myplayhouse.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.myplayhouse.waitPeriod: 0
+
+###
+# The URL for the feed naturestemper. Note that because announced lines
+# are cached, you may need to reload this plugin after changing this
+# option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.naturestemper: https://www.youtube.com/feeds/videos.xml?user=NaturesTemper
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.naturestemper.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.naturestemper.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.naturestemper.waitPeriod: 0
+
+###
+# The URL for the feed networkchuck. Note that because announced lines
+# are cached, you may need to reload this plugin after changing this
+# option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.networkchuck: https://www.youtube.com/feeds/videos.xml?user=NetworkChuck
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.networkchuck.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.networkchuck.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.networkchuck.waitPeriod: 0
+
+###
+# The URL for the feed newworldreview. Note that because announced lines
+# are cached, you may need to reload this plugin after changing this
+# option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.newworldreview: https://www.youtube.com/feeds/videos.xml?channel_id=UCdSnjmLUUe_NT4ml9OkUi1A
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.newworldreview.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.newworldreview.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.newworldreview.waitPeriod: 0
+
+###
+# The URL for the feed nexpo. Note that because announced lines are
+# cached, you may need to reload this plugin after changing this option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.nexpo: https://www.youtube.com/feeds/videos.xml?channel_id=UCpFFItkfZz1qz5PpHpqzYBw
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.nexpo.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.nexpo.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.nexpo.waitPeriod: 0
+
+###
+# The URL for the feed nickjanetakis. Note that because announced lines
+# are cached, you may need to reload this plugin after changing this
+# option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.nickjanetakis: https://www.youtube.com/feeds/videos.xml?channel_id=UCorzANoC3fX9VVefJHM5wtA
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.nickjanetakis.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.nickjanetakis.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.nickjanetakis.waitPeriod: 0
+
+###
+# The URL for the feed nullbyte. Note that because announced lines are
+# cached, you may need to reload this plugin after changing this option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.nullbyte: https://www.youtube.com/feeds/videos.xml?channel_id=UCgTNupxATBfWmfehv21ym-g
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.nullbyte.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.nullbyte.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.nullbyte.waitPeriod: 0
+
+###
+# The URL for the feed numberphile. Note that because announced lines
+# are cached, you may need to reload this plugin after changing this
+# option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.numberphile: https://www.youtube.com/feeds/videos.xml?channel_id=UCoxcjq-8xIDTYp3uz647V5A
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.numberphile.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.numberphile.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.numberphile.waitPeriod: 0
+
+###
+# The URL for the feed numberphile2. Note that because announced lines
+# are cached, you may need to reload this plugin after changing this
+# option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.numberphile2: https://www.youtube.com/feeds/videos.xml?channel_id=UCyp1gCHZJU_fGWFf2rtMkCg
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.numberphile2.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.numberphile2.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.numberphile2.waitPeriod: 0
+
+###
+# The URL for the feed oculusimpera. Note that because announced lines
+# are cached, you may need to reload this plugin after changing this
+# option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.oculusimpera: https://www.youtube.com/feeds/videos.xml?channel_id=UC8AaO8zkIoxbUp1_p0rl13g
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.oculusimpera.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.oculusimpera.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.oculusimpera.waitPeriod: 0
+
+###
+# The URL for the feed openwrtsecuirtyadvisory. Note that because
+# announced lines are cached, you may need to reload this plugin after
+# changing this option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.openwrtsecuirtyadvisory: https://rssgen.terminaldweller.com/?action=display&bridge=OpenwrtSecurityBridge&format=Atom
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.openwrtsecuirtyadvisory.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.openwrtsecuirtyadvisory.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.openwrtsecuirtyadvisory.waitPeriod: 0
+
+###
+# The URL for the feed pagefire. Note that because announced lines are
+# cached, you may need to reload this plugin after changing this option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.pagefire: https://www.youtube.com/feeds/videos.xml?channel_id=UC6gD8kk_Z_5bX2PcRk2fwDg
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.pagefire.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.pagefire.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.pagefire.waitPeriod: 0
+
+###
+# The URL for the feed philion. Note that because announced lines are
+# cached, you may need to reload this plugin after changing this option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.philion: https://www.youtube.com/feeds/videos.xml?channel_id=UCgKJPhVzv8w0VaZFnS_VmaA
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.philion.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.philion.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.philion.waitPeriod: 0
+
+###
+# The URL for the feed robbraxmantech. Note that because announced lines
+# are cached, you may need to reload this plugin after changing this
+# option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.robbraxmantech: https://www.youtube.com/feeds/videos.xml?channel_id=UCYVU6rModlGxvJbszCclGGw
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.robbraxmantech.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.robbraxmantech.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.robbraxmantech.waitPeriod: 0
+
+###
+# The URL for the feed romnexyoutube. Note that because announced lines
+# are cached, you may need to reload this plugin after changing this
+# option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.romnexyoutube: https://www.youtube.com/feeds/videos.xml?channel_id=UC4QEH0BC7ZQMYIEmr1yAHfQ
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.romnexyoutube.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.romnexyoutube.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.romnexyoutube.waitPeriod: 0
+
+###
+# The URL for the feed scaryjuju"youtube. Note that because announced
+# lines are cached, you may need to reload this plugin after changing
+# this option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.scaryjuju"youtube: https://www.youtube.com/feeds/videos.xml?user=WeArEraW11
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.scaryjuju"youtube.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.scaryjuju"youtube.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.scaryjuju"youtube.waitPeriod: 0
+
+###
+# The URL for the feed semicolonsons. Note that because announced lines
+# are cached, you may need to reload this plugin after changing this
+# option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.semicolonsons: https://www.youtube.com/feeds/videos.xml?channel_id=UC17mJJnvzAa_e9qQqLIfIeQ
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.semicolonsons.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.semicolonsons.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.semicolonsons.waitPeriod: 0
+
+###
+# The URL for the feed seytonic. Note that because announced lines are
+# cached, you may need to reload this plugin after changing this option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.seytonic: https://www.youtube.com/feeds/videos.xml?channel_id=UCW6xlqxSY3gGur4PkGPEUeA
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.seytonic.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.seytonic.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.seytonic.waitPeriod: 0
+
+###
+# The URL for the feed sgtmarkiv. Note that because announced lines are
+# cached, you may need to reload this plugin after changing this option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.sgtmarkiv: https://www.youtube.com/feeds/videos.xml?channel_id=UC_NSOckDnuypJK_FpCO6ogA
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.sgtmarkiv.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.sgtmarkiv.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.sgtmarkiv.waitPeriod: 0
+
+###
+# The URL for the feed sokoninaruそこに鳴る. Note that because announced
+# lines are cached, you may need to reload this plugin after changing
+# this option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.sokoninaru\u305d\u3053\u306b\u9cf4\u308b: https://www.youtube.com/feeds/videos.xml?channel_id=UC0Whg8Zz7TT1VSpWeCjghKg
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.sokoninaru\u305d\u3053\u306b\u9cf4\u308b.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.sokoninaru\u305d\u3053\u306b\u9cf4\u308b.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.sokoninaru\u305d\u3053\u306b\u9cf4\u308b.waitPeriod: 0
+
+###
+# The URL for the feed stefanmischook. Note that because announced lines
+# are cached, you may need to reload this plugin after changing this
+# option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.stefanmischook: https://www.youtube.com/feeds/videos.xml?channel_id=UCyUBW72KU30dfAYWLVNZO8Q
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.stefanmischook.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.stefanmischook.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.stefanmischook.waitPeriod: 0
+
+###
+# The URL for the feed studyingwithalex. Note that because announced
+# lines are cached, you may need to reload this plugin after changing
+# this option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.studyingwithalex: https://www.youtube.com/feeds/videos.xml?channel_id=UCUdkjbeIFea0qUSgwR1CUOg
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.studyingwithalex.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.studyingwithalex.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.studyingwithalex.waitPeriod: 0
+
+###
+# The URL for the feed stöek. Note that because announced lines are
+# cached, you may need to reload this plugin after changing this option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.st\xf6ek: https://www.youtube.com/feeds/videos.xml?channel_id=UCQN2DsjnYH60SFBIA6IkNwg
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.st\xf6ek.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.st\xf6ek.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.st\xf6ek.waitPeriod: 0
+
+###
+# The URL for the feed techworldwithnana. Note that because announced
+# lines are cached, you may need to reload this plugin after changing
+# this option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.techworldwithnana: https://www.youtube.com/feeds/videos.xml?channel_id=UCdngmbVKX1Tgre699-XLlUA
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.techworldwithnana.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.techworldwithnana.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.techworldwithnana.waitPeriod: 0
+
+###
+# The URL for the feed thecherno. Note that because announced lines are
+# cached, you may need to reload this plugin after changing this option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.thecherno: https://www.youtube.com/feeds/videos.xml?channel_id=UCQ-W1KE9EYfdxhL6S4twUNw
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.thecherno.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.thecherno.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.thecherno.waitPeriod: 0
+
+###
+# The URL for the feed thedarkcosmos. Note that because announced lines
+# are cached, you may need to reload this plugin after changing this
+# option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.thedarkcosmos: https://www.youtube.com/feeds/videos.xml?channel_id=UClVIqFHcD0Dvh6BB-bYq1rg
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.thedarkcosmos.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.thedarkcosmos.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.thedarkcosmos.waitPeriod: 0
+
+###
+# The URL for the feed thedarksomnium. Note that because announced lines
+# are cached, you may need to reload this plugin after changing this
+# option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.thedarksomnium: https://www.youtube.com/feeds/videos.xml?channel_id=UC_e39rWdkQqo5-LbiLiU10g
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.thedarksomnium.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.thedarksomnium.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.thedarksomnium.waitPeriod: 0
+
+###
+# The URL for the feed theexploringseries. Note that because announced
+# lines are cached, you may need to reload this plugin after changing
+# this option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.theexploringseries: https://www.youtube.com/feeds/videos.xml?user=ManggMangg
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.theexploringseries.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.theexploringseries.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.theexploringseries.waitPeriod: 0
+
+###
+# The URL for the feed thejimmydoreshow. Note that because announced
+# lines are cached, you may need to reload this plugin after changing
+# this option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.thejimmydoreshow: https://www.youtube.com/feeds/videos.xml?channel_id=UC3M7l8ved_rYQ45AVzS0RGA
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.thejimmydoreshow.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.thejimmydoreshow.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.thejimmydoreshow.waitPeriod: 0
+
+###
+# The URL for the feed thelinuxcast. Note that because announced lines
+# are cached, you may need to reload this plugin after changing this
+# option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.thelinuxcast: https://www.youtube.com/feeds/videos.xml?channel_id=UCylGUf9BvQooEFjgdNudoQg
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.thelinuxcast.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.thelinuxcast.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.thelinuxcast.waitPeriod: 0
+
+###
+# The URL for the feed thelinuxexperiment. Note that because announced
+# lines are cached, you may need to reload this plugin after changing
+# this option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.thelinuxexperiment: https://www.youtube.com/feeds/videos.xml?channel_id=UCaw_Lz7oifDb-PZCAcZ07kw
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.thelinuxexperiment.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.thelinuxexperiment.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.thelinuxexperiment.waitPeriod: 0
+
+###
+# The URL for the feed theprimeagen. Note that because announced lines
+# are cached, you may need to reload this plugin after changing this
+# option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.theprimeagen: https://www.youtube.com/feeds/videos.xml?channel_id=UC8ENHE5xdFSwx71u3fDH5Xw
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.theprimeagen.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.theprimeagen.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.theprimeagen.waitPeriod: 0
+
+###
+# The URL for the feed thevolgun. Note that because announced lines are
+# cached, you may need to reload this plugin after changing this option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.thevolgun: https://www.youtube.com/feeds/videos.xml?channel_id=UCcmEL8JoDBE25gvCFkrqhcw
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.thevolgun.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.thevolgun.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.thevolgun.waitPeriod: 0
+
+###
+# The URL for the feed vivaladirtleague. Note that because announced
+# lines are cached, you may need to reload this plugin after changing
+# this option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.vivaladirtleague: https://www.youtube.com/feeds/videos.xml?channel_id=UCchBatdUMZoMfJ3rIzgV84g
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.vivaladirtleague.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.vivaladirtleague.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.vivaladirtleague.waitPeriod: 0
+
+###
+# The URL for the feed vormithrax"youtube. Note that because announced
+# lines are cached, you may need to reload this plugin after changing
+# this option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.vormithrax"youtube: https://www.youtube.com/feeds/videos.xml?channel_id=UCxMZO9A4Jixjr9lbgeBiQ6w
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.vormithrax"youtube.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.vormithrax"youtube.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.vormithrax"youtube.waitPeriod: 0
+
+###
+# The URL for the feed wolflordrho. Note that because announced lines
+# are cached, you may need to reload this plugin after changing this
+# option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.wolflordrho: https://www.youtube.com/feeds/videos.xml?channel_id=UCqajGNTzlQLk5uRsD8R5m3Q
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.wolflordrho.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.wolflordrho.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.wolflordrho.waitPeriod: 0
+
+###
+# The URL for the feed yannickilcher. Note that because announced lines
+# are cached, you may need to reload this plugin after changing this
+# option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.yannickilcher: https://www.youtube.com/feeds/videos.xml?channel_id=UCZHmQk67mSJgfCCTn7xBfew
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.yannickilcher.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.yannickilcher.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.yannickilcher.waitPeriod: 0
+
+###
+# The URL for the feed zdiadvisorypublished. Note that because announced
+# lines are cached, you may need to reload this plugin after changing
+# this option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.zdiadvisorypublished: https://www.zerodayinitiative.com/rss/published/
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.zdiadvisorypublished.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.zdiadvisorypublished.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.zdiadvisorypublished.waitPeriod: 0
+
+###
+# The URL for the feed zdiadvisoryupcoming. Note that because announced
+# lines are cached, you may need to reload this plugin after changing
+# this option.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.zdiadvisoryupcoming: https://www.zerodayinitiative.com/rss/upcoming/
+
+###
+# Feed-specific announce format. Defaults to
+# supybot.plugins.RSS.announceFormat if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.zdiadvisoryupcoming.announceFormat:
+
+###
+# Feed-specific format. Defaults to supybot.plugins.RSS.format if empty.
+#
+# Default value:
+###
+supybot.plugins.RSS.feeds.zdiadvisoryupcoming.format:
+
+###
+# If set to a non-zero value, overrides supybot.plugins.RSS.waitPeriod
+# for this particular feed.
+#
+# Default value: 0
+###
+supybot.plugins.RSS.feeds.zdiadvisoryupcoming.waitPeriod: 0
+
+###
+# The format the bot will use for displaying headlines of a RSS feed
+# that is triggered manually. In addition to fields defined by
+# feedparser ($published (the entry date), $title, $link, $description,
+# $id, etc.), the following variables can be used: $feed_name, $date
+# (parsed date, as defined in supybot.reply.format.time)
+#
+# Default value: $date: $title <$link>
+###
+supybot.plugins.RSS.format: $date: $title <$link>
+
+###
+# Determines what string is used to separate headlines in new feeds.
+#
+# Default value: |
+###
+supybot.plugins.RSS.headlineSeparator: |
+
+###
+# Indicates how many headlines an rss feed will output when it is first
+# added to announce for a channel.
+#
+# Default value: 5
+###
+supybot.plugins.RSS.initialAnnounceHeadlines: 5
+
+###
+# Space separated list of strings, lets you filter headlines to those
+# not containing any items in this blacklist.
+#
+# Default value:
+###
+supybot.plugins.RSS.keywordBlacklist:
+
+###
+# Space separated list of strings, lets you filter headlines to those
+# containing one or more items in this whitelist.
+#
+# Default value:
+###
+supybot.plugins.RSS.keywordWhitelist:
+
+###
+# Indicates how many new news entries may be sent at the same time.
+# Extra entries will be discarded.
+#
+# Default value: 5
+###
+supybot.plugins.RSS.maximumAnnounceHeadlines: 5
+
+###
+# Determines whether announces will be sent as notices instead of
+# privmsgs.
+#
+# Default value: False
+###
+supybot.plugins.RSS.notice: False
+
+###
+# Determines whether this plugin is publicly visible.
+#
+# Default value: True
+###
+supybot.plugins.RSS.public: True
+
+###
+# Determines whether feed items should be sorted by their
+# publication/update timestamp or kept in the same order as they appear
+# in a feed.
+#
+# Default value: asInFeed
+###
+supybot.plugins.RSS.sortFeedItems: asInFeed
+
+###
+# Indicates how many seconds the bot will wait between retrieving RSS
+# feeds; requests made within this period will return cached results.
+#
+# Default value: 1800
+###
+supybot.plugins.RSS.waitPeriod: 1800
+
+###
+# Determines whether this plugin is loaded by default.
+###
+supybot.plugins.ShrinkUrl: True
+
+###
+# Determines whether this plugin will bold certain portions of its
+# replies.
+#
+# Default value: True
+###
+supybot.plugins.ShrinkUrl.bold: True
+
+###
+# Determines what website the bot will use when shrinking a URL.
+#
+# Default value: x0
+###
+supybot.plugins.ShrinkUrl.default: x0
+
+###
+# The minimum length a URL must be before the bot will shrink it.
+#
+# Default value: 48
+###
+supybot.plugins.ShrinkUrl.minimumLength: 48
+
+###
+# Determines what URLs are to be snarfed; URLs matching the regexp given
+# will not be snarfed. Give the empty string if you have no URLs that
+# you'd like to exclude from being snarfed.
+#
+# Default value:
+###
+supybot.plugins.ShrinkUrl.nonSnarfingRegexp:
+
+###
+# Determines whether the bot will shrink the URLs of outgoing messages
+# if those URLs are longer than supybot.plugins.ShrinkUrl.minimumLength.
+#
+# Default value: False
+###
+supybot.plugins.ShrinkUrl.outFilter: True
+
+###
+# Determines whether this plugin is publicly visible.
+#
+# Default value: True
+###
+supybot.plugins.ShrinkUrl.public: True
+
+###
+# If set to a non-empty value, specifies the list of services to rotate
+# through for the shrinkSnarfer and outFilter.
+#
+# Default value:
+###
+supybot.plugins.ShrinkUrl.serviceRotation:
+
+###
+# Determines whether the shrink snarfer is enabled. This snarfer will
+# watch for URLs in the channel, and if they're sufficiently long (as
+# determined by supybot.plugins.ShrinkUrl.minimumLength) it will post a
+# smaller URL from the service as denoted in
+# supybot.plugins.ShrinkUrl.default.
+#
+# Default value: False
+###
+supybot.plugins.ShrinkUrl.shrinkSnarfer: False
+
+###
+# Determines whether the snarfer will show the domain of the URL being
+# snarfed along with the shrunken URL.
+#
+# Default value: True
+###
+supybot.plugins.ShrinkUrl.shrinkSnarfer.showDomain: True
+
+###
+# Determines whether this plugin is loaded by default.
+###
+supybot.plugins.User: True
+
+###
+# Determines what message the bot sends when a user isn't identified or
+# recognized.
+#
+# Default value:
+###
+supybot.plugins.User.customWhoamiError:
+
+###
+# Determines whether the output of 'user list' will be sent in private.
+# This prevents mass-highlights of people who use their nick as their
+# bot username.
+#
+# Default value: True
+###
+supybot.plugins.User.listInPrivate: True
+
+###
+# Determines whether this plugin is publicly visible.
+#
+# Default value: True
+###
+supybot.plugins.User.public: True
+
+###
+# Determines whether this plugin is loaded by default.
+###
+supybot.plugins.Utilities: True
+
+###
+# Determines whether this plugin is publicly visible.
+#
+# Default value: True
+###
+supybot.plugins.Utilities.public: True
+
+###
+# Determines whether the bot will always load important plugins (Admin,
+# Channel, Config, Misc, Owner, and User) regardless of what their
+# configured state is. Generally, if these plugins are configured not to
+# load, you didn't do it on purpose, and you still want them to load.
+# Users who don't want to load these plugins are smart enough to change
+# the value of this variable appropriately :)
+#
+# Default value: True
+###
+supybot.plugins.alwaysLoadImportant: True
+
+###
+# Determines how many bytes the bot will 'peek' at when looking through
+# a URL for a doctype or title or something similar. It'll give up after
+# it reads this many bytes, even if it hasn't found what it was looking
+# for.
+#
+# Default value: 16384
+###
+supybot.protocols.http.peekSize: 16384
+
+###
+# Determines what HTTP proxy all HTTP requests should go through. The
+# value should be of the form 'host:port'.
+#
+# Default value:
+###
+supybot.protocols.http.proxy:
+
+###
+# If set, the Accept-Language HTTP header will be set to this value for
+# requests. Useful for overriding the auto-detected language based on
+# the server's location.
+#
+# Default value:
+###
+supybot.protocols.http.requestLanguage:
+
+###
+# If set, the User-Agent HTTP header will be set to a randomly selected
+# value from this comma-separated list of strings for requests.
+#
+# Default value:
+###
+supybot.protocols.http.userAgents:
+
+###
+# Determines what will be used as the default banmask style.
+#
+# Default value: host
+###
+supybot.protocols.irc.banmask: host
+
+###
+# Determines what certificate file (if any) the bot will use connect
+# with SSL sockets by default.
+#
+# Default value:
+###
+supybot.protocols.irc.certfile:
+
+###
+# Determines whether the bot will enable draft/experimental extensions
+# of the IRC protocol. Setting this to True may break your bot at any
+# time without warning and/or break your configuration irreversibly. So
+# keep it False unless you know what you are doing.
+#
+# Default value: False
+###
+supybot.protocols.irc.experimentalExtensions: False
+
+###
+# Determines how many old messages the bot will keep around in its
+# history. Changing this variable will not take effect on a network
+# until it is reconnected.
+#
+# Default value: 1000
+###
+supybot.protocols.irc.maxHistoryLength: 1000
+
+###
+# Determines whether the bot will send PINGs to the server it's
+# connected to in order to keep the connection alive and discover
+# earlier when it breaks. Really, this option only exists for debugging
+# purposes: you always should make it True unless you're testing some
+# strange server issues.
+#
+# Default value: True
+###
+supybot.protocols.irc.ping: True
+
+###
+# Determines the number of seconds between sending pings to the server,
+# if pings are being sent to the server.
+#
+# Default value: 120
+###
+supybot.protocols.irc.ping.interval: 120
+
+###
+# Determines whether the bot will refuse duplicated messages to be
+# queued for delivery to the server. This is a safety mechanism put in
+# place to prevent plugins from sending the same message multiple times;
+# most of the time it doesn't matter, unless you're doing certain kinds
+# of plugin hacking.
+#
+# Default value: False
+###
+supybot.protocols.irc.queuing.duplicates: False
+
+###
+# Determines how many seconds must elapse between JOINs sent to the
+# server.
+#
+# Default value: 0.0
+###
+supybot.protocols.irc.queuing.rateLimit.join: 0.0
+
+###
+# Determines whether the bot will strictly follow the RFC; currently
+# this only affects what strings are considered to be nicks. If you're
+# using a server or a network that requires you to message a nick such
+# as services@this.network.server then you you should set this to False.
+#
+# Default value: False
+###
+supybot.protocols.irc.strictRfc: False
+
+###
+# A floating point number of seconds to throttle queued messages -- that
+# is, messages will not be sent faster than once per throttleTime
+# seconds.
+#
+# Default value: 1.0
+###
+supybot.protocols.irc.throttleTime: 1.0
+
+###
+# Determines what user modes the bot will request from the server when
+# it first connects. Many people might choose +i; some networks allow
+# +x, which indicates to the auth services on those networks that you
+# should be given a fake host.
+#
+# Default value:
+###
+supybot.protocols.irc.umodes:
+
+###
+# Determines what vhost the bot will bind to before connecting a server
+# (IRC, HTTP, ...) via IPv4.
+#
+# Default value:
+###
+supybot.protocols.irc.vhost:
+
+###
+# Determines what vhost the bot will bind to before connecting a server
+# (IRC, HTTP, ...) via IPv6.
+#
+# Default value:
+###
+supybot.protocols.irc.vhostv6:
+
+###
+# Determines whether server certificates will be verified, which checks
+# whether the server certificate is signed by a known certificate
+# authority, and aborts the connection if it is not. This is assumed to
+# be True of serverFingerprints or authorityCertificate is set.
+#
+# Default value: False
+###
+supybot.protocols.ssl.verifyCertificates: False
+
+###
+# Format used by generic database plugins (Lart, Dunno, Prase, Success,
+# Quote, ...) to show an entry. You can use the following variables:
+# $type/$types/$Type/$Types (plugin name and variants), $id, $text, $at
+# (creation time), $userid/$username/$nick (author).
+#
+# Default value: $Type #$id: $text (added by $username at $at)
+###
+supybot.replies.databaseRecord: $Type #$id: $text (added by $username at $at)
+
+###
+# Determines what error message the bot gives when it wants to be
+# ambiguous.
+###
+supybot.replies.error: An error has occurred and has been logged. Please\
+ contact this bot's administrator for more\
+ information.
+
+###
+# Determines what error message the bot gives to the owner when it wants
+# to be ambiguous.
+###
+supybot.replies.errorOwner: An error has occurred and has been logged. Check\
+ the logs for more information.
+
+###
+# Determines what generic error message is given when the bot is telling
+# someone that they aren't cool enough to use the command they tried to
+# use, and the author of the code calling errorNoCapability didn't
+# provide an explicit capability for whatever reason.
+###
+supybot.replies.genericNoCapability: You're missing some capability you\
+ need. This could be because you\
+ actually possess the anti-capability\
+ for the capability that's required of\
+ you, or because the channel provides\
+ that anti-capability by default, or\
+ because the global capabilities include\
+ that anti-capability. Or, it could be\
+ because the channel or\
+ supybot.capabilities.default is set to\
+ False, meaning that no commands are\
+ allowed unless explicitly in your\
+ capabilities. Either way, you can't do\
+ what you want to do.
+
+###
+# Determines what message the bot replies with when someone tries to use
+# a command that requires being identified or having a password and
+# neither credential is correct.
+###
+supybot.replies.incorrectAuthentication: Your hostmask doesn't match or your\
+ password is wrong.
+
+###
+# Determines what error message is given when the bot is telling someone
+# they aren't cool enough to use the command they tried to use.
+###
+supybot.replies.noCapability: You don't have the %s capability. If you think\
+ that you should have this capability, be sure\
+ that you are identified before trying again.\
+ The 'whoami' command can tell you if you're\
+ identified.
+
+###
+# Determines what error message the bot replies with when someone tries
+# to accessing some information on a user the bot doesn't know about.
+###
+supybot.replies.noUser: I can't find %s in my user database. If you didn't\
+ give a user name, then I might not know what your\
+ user is, and you'll need to identify before this\
+ command might work.
+
+###
+# Determines what error message the bot replies with when someone tries
+# to do something that requires them to be registered but they're not
+# currently recognized.
+###
+supybot.replies.notRegistered: You must be registered to use this command.\
+ If you are already registered, you must\
+ either identify (using the identify command)\
+ or add a hostmask matching your current\
+ hostmask (using the "hostmask add" command).
+
+###
+# Determines what message the bot sends when it thinks you've
+# encountered a bug that the developers don't know about.
+###
+supybot.replies.possibleBug: This may be a bug. If you think it is, please\
+ file a bug report at\
+ <https://github.com/progval/Limnoria/issues>.
+
+###
+# Determines what error messages the bot sends to people who try to do
+# things in a channel that really should be done in private.
+###
+supybot.replies.requiresPrivacy: That operation cannot be done in a channel.
+
+###
+# Determines what message the bot replies with when a command succeeded.
+# If this configuration variable is empty, no success message will be
+# sent.
+###
+supybot.replies.success: The operation succeeded.
+
+###
+# Determines whether error messages that result from bugs in the bot
+# will show a detailed error message (the uncaught exception) or a
+# generic error message.
+#
+# Default value: False
+###
+supybot.reply.error.detailed: False
+
+###
+# Determines whether the bot will send error messages to users in
+# private. You might want to do this in order to keep channel traffic to
+# minimum. This can be used in combination with
+# supybot.reply.error.withNotice.
+#
+# Default value: False
+###
+supybot.reply.error.inPrivate: False
+
+###
+# Determines whether the bot will *not* provide details in the error
+# message to users who attempt to call a command for which they do not
+# have the necessary capability. You may wish to make this True if you
+# don't want users to understand the underlying security system
+# preventing them from running certain commands.
+#
+# Default value: False
+###
+supybot.reply.error.noCapability: False
+
+###
+# Determines whether the bot will send error messages to users via
+# NOTICE instead of PRIVMSG. You might want to do this so users can
+# ignore NOTICEs from the bot and not have to see error messages; or you
+# might want to use it in combination with supybot.reply.error.inPrivate
+# so private errors don't open a query window in most IRC clients.
+#
+# Default value: False
+###
+supybot.reply.error.withNotice: False
+
+###
+# Maximum number of items in a list before the end is replaced with 'and
+# others'. Set to 0 to always show the entire list.
+#
+# Default value: 0
+###
+supybot.reply.format.list.maximumItems: 0
+
+###
+# Determines how timestamps printed for human reading should be
+# formatted. Refer to the Python documentation for the time module to
+# see valid formatting characters for time formats.
+#
+# Default value: %Y-%m-%dT%H:%M:%S%z
+###
+supybot.reply.format.time: %Y-%m-%dT%H:%M:%S%z
+
+###
+# Determines whether elapsed times will be given as "1 day, 2 hours, 3
+# minutes, and 15 seconds" or as "1d 2h 3m 15s".
+#
+# Default value: False
+###
+supybot.reply.format.time.elapsed.short: False
+
+###
+# Determines how urls should be formatted.
+#
+# Default value: <%s>
+###
+supybot.reply.format.url: <%s>
+
+###
+# Determines whether the bot will reply privately when replying in a
+# channel, rather than replying to the whole channel.
+#
+# Default value: False
+###
+supybot.reply.inPrivate: False
+
+###
+# Determines the absolute maximum length of the bot's reply -- no reply
+# will be passed through the bot with a length greater than this.
+#
+# Default value: 131072
+###
+supybot.reply.maximumLength: 131072
+
+###
+# Determines whether the bot will break up long messages into chunks and
+# allow users to use the 'more' command to get the remaining chunks.
+#
+# Default value: True
+###
+supybot.reply.mores: True
+
+###
+# Determines how many mores will be sent instantly (i.e., without the
+# use of the more command, immediately when they are formed). Defaults
+# to 1, which means that a more command will be required for all but the
+# first chunk.
+#
+# Default value: 1
+###
+supybot.reply.mores.instant: 1
+
+###
+# Determines how long individual chunks will be. If set to 0, uses our
+# super-tweaked, get-the-most-out-of-an-individual-message default.
+#
+# Default value: 0
+###
+supybot.reply.mores.length: 0
+
+###
+# Determines what the maximum number of chunks (for use with the 'more'
+# command) will be.
+#
+# Default value: 50
+###
+supybot.reply.mores.maximum: 50
+
+###
+# Determines whether the bot will send multi-message replies in a single
+# message. This defaults to True in order to prevent the bot from
+# flooding. If this is set to False the bot will send multi-message
+# replies on multiple lines.
+#
+# Default value: True
+###
+supybot.reply.oneToOne: True
+
+###
+# Determines whether the bot will allow you to send channel-related
+# commands outside of that channel. Sometimes people find it confusing
+# if a channel-related command (like Filter.outfilter) changes the
+# behavior of the channel but was sent outside the channel itself.
+#
+# Default value: False
+###
+supybot.reply.requireChannelCommandsToBeSentInChannel: False
+
+###
+# Supybot normally replies with the full help whenever a user misuses a
+# command. If this value is set to True, the bot will only reply with
+# the syntax of the command (the first line of the help) rather than the
+# full help.
+#
+# Default value: False
+###
+supybot.reply.showSimpleSyntax: False
+
+###
+# Determines what prefix characters the bot will reply to. A prefix
+# character is a single character that the bot will use to determine
+# what messages are addressed to it; when there are no prefix characters
+# set, it just uses its nick. Each character in this string is
+# interpreted individually; you can have multiple prefix chars
+# simultaneously, and if any one of them is used as a prefix the bot
+# will assume it is being addressed.
+#
+# Default value:
+###
+supybot.reply.whenAddressedBy.chars: @
+
+###
+# Determines whether the bot will reply when people address it by its
+# nick, rather than with a prefix character.
+#
+# Default value: True
+###
+supybot.reply.whenAddressedBy.nick: True
+
+###
+# Determines whether the bot will reply when people address it by its
+# nick at the end of the message, rather than at the beginning.
+#
+# Default value: False
+###
+supybot.reply.whenAddressedBy.nick.atEnd: False
+
+###
+# Determines what extra nicks the bot will always respond to when
+# addressed by, even if its current nick is something else.
+#
+# Default value:
+###
+supybot.reply.whenAddressedBy.nicks:
+
+###
+# Determines what strings the bot will reply to when they are at the
+# beginning of the message. Whereas prefix.chars can only be one
+# character (although there can be many of them), this variable is a
+# space-separated list of strings, so you can set something like '@@ ??'
+# and the bot will reply when a message is prefixed by either @@ or ??.
+#
+# Default value:
+###
+supybot.reply.whenAddressedBy.strings:
+
+###
+# Determines whether the bot should attempt to reply to all messages
+# even if they don't address it (either via its nick or a prefix
+# character). If you set this to True, you almost certainly want to set
+# supybot.reply.whenNotCommand to False.
+#
+# Default value: False
+###
+supybot.reply.whenNotAddressed: False
+
+###
+# Determines whether the bot will reply with an error message when it is
+# addressed but not given a valid command. If this value is False, the
+# bot will remain silent, as long as no other plugins override the
+# normal behavior.
+#
+# Default value: True
+###
+supybot.reply.whenNotCommand: True
+
+###
+# Determines whether the bot will always prefix the user's nick to its
+# reply to that user's command.
+#
+# Default value: True
+###
+supybot.reply.withNickPrefix: True
+
+###
+# Determines whether the bot will reply with a notice when replying in a
+# channel, rather than replying with a privmsg as normal.
+#
+# Default value: False
+###
+supybot.reply.withNotice: False
+
+###
+# Determines whether the bot will reply with a notice when it is sending
+# a private message, in order not to open a /query window in clients.
+#
+# Default value: True
+###
+supybot.reply.withNoticeWhenPrivate: True
+
+###
+# Determines the path of the file served as favicon to browsers.
+#
+# Default value:
+###
+supybot.servers.http.favicon:
+
+###
+# Space-separated list of IPv4 hosts the HTTP server will bind.
+#
+# Default value: 0.0.0.0
+###
+supybot.servers.http.hosts4: 0.0.0.0
+
+###
+# Space-separated list of IPv6 hosts the HTTP server will bind.
+#
+# Default value: ::0
+###
+supybot.servers.http.hosts6: ::0
+
+###
+# Determines whether the server will stay alive if no plugin is using
+# it. This also means that the server will start even if it is not used.
+#
+# Default value: False
+###
+supybot.servers.http.keepAlive: False
+
+###
+# Determines what port the HTTP server will bind.
+#
+# Default value: 8080
+###
+supybot.servers.http.port: 8080
+
+###
+# Determines the public URL of the server. By default it is
+# http://<hostname>:<port>/, but you will want to change this if there
+# is a reverse proxy (nginx, apache, ...) in front of the bot.
+#
+# Default value:
+###
+supybot.servers.http.publicUrl:
+
+###
+# If true, uses IPV6_V6ONLY to disable forwaring of IPv4 traffic to IPv6
+# sockets. On *nix, has the same effect as setting kernel variable
+# net.ipv6.bindv6only to 1.
+#
+# Default value: True
+###
+supybot.servers.http.singleStack: True
+
+###
+# A floating point number of seconds to throttle snarfed URLs, in order
+# to prevent loops between two bots snarfing the same URLs and having
+# the snarfed URL in the output of the snarf message.
+#
+# Default value: 10.0
+###
+supybot.snarfThrottle: 10.0
+
+###
+# Determines the number of seconds between running the upkeep function
+# that flushes (commits) open databases, collects garbage, and records
+# some useful statistics at the debugging level.
+#
+# Default value: 3600
+###
+supybot.upkeepInterval: 3600
+
+###
+# Determines the real name which the bot sends to the server. A standard
+# real name using the current version of the bot will be generated if
+# this is left empty.
+#
+# Default value: Limnoria $version
+###
+supybot.user: Limnoria $version
diff --git a/terminaldweller.com/lounge/docker-compose.yml b/terminaldweller.com/lounge/docker-compose.yml
index e755935..3b79a92 100644
--- a/terminaldweller.com/lounge/docker-compose.yml
+++ b/terminaldweller.com/lounge/docker-compose.yml
@@ -1,29 +1,27 @@
version: '3'
services:
app:
- image: thelounge/thelounge:4.3.1
+ image: thelounge/thelounge:4.4.1
volumes:
- thelounge-data:/var/opt/thelounge
networks:
- - traefik-public
- deploy:
- placement:
- constraints:
- - node.labels.thelounge.thelounge-data == true
- labels:
- - traefik.enable=true
- - traefik.docker.network=traefik-public
- - traefik.constraint-label=traefik-public
- - traefik.http.routers.thelounge-http.rule=Host(`lounge.terminaldweller.com`)
- - traefik.http.routers.thelounge-http.entrypoints=http
- - traefik.http.routers.thelounge-http.middlewares=https-redirect
- - traefik.http.routers.thelounge-https.rule=Host(`lounge.terminaldweller.com`)
- - traefik.http.routers.thelounge-https.entrypoints=https
- - traefik.http.routers.thelounge-https.tls=true
- - traefik.http.routers.thelounge-https.tls.certresolver=le
- - traefik.http.services.thelounge.loadbalancer.server.port=9000
+ - loungenet
+ labels:
+ - traefik.enable=true
+ #- traefik.docker.network=traefik-public
+ #- traefik.constraint-label=traefik-public
+ #- traefik.http.routers.thelounge-http.rule=Host(`lounge.terminaldweller.com`)
+ #- traefik.http.routers.thelounge-http.entrypoints=http
+ #- traefik.http.routers.thelounge-http.entrypoints=websecure
+ #- traefik.http.routers.thelounge-http.middlewares=https-redirect
+ - traefik.http.routers.thelounge.rule=Host(`lounge.terminaldweller.com`)
+ - traefik.http.routers.thelounge.entrypoints=websecure
+ - traefik.http.routers.thelounge.tls=true
+ - traefik.http.routers.thelounge.tls.certresolver=letls
+ #- traefik.http.services.thelounge.loadbalancer.server.port=9000
networks:
- traefik-public:
+ loungenet:
+ name: matrix_default
external: true
volumes:
thelounge-data:
diff --git a/terminaldweller.com/mail/mailcow.conf b/terminaldweller.com/mail/mailcow.conf
new file mode 100644
index 0000000..b7e3a2a
--- /dev/null
+++ b/terminaldweller.com/mail/mailcow.conf
@@ -0,0 +1,248 @@
+# ------------------------------
+# mailcow web ui configuration
+# ------------------------------
+# example.org is _not_ a valid hostname, use a fqdn here.
+# Default admin user is "admin"
+# Default password is "moohoo"
+
+MAILCOW_HOSTNAME=mail.terminaldweller.com
+
+# Password hash algorithm
+# Only certain password hash algorithm are supported. For a fully list of supported schemes,
+# see https://mailcow.github.io/mailcow-dockerized-docs/model-passwd/
+MAILCOW_PASS_SCHEME=BLF-CRYPT
+
+# ------------------------------
+# SQL database configuration
+# ------------------------------
+
+DBNAME=mailcow
+DBUSER=mailcow
+
+# Please use long, random alphanumeric strings (A-Za-z0-9)
+
+DBPASS=
+DBROOT=
+
+# ------------------------------
+# HTTP/S Bindings
+# ------------------------------
+
+# You should use HTTPS, but in case of SSL offloaded reverse proxies:
+# Might be important: This will also change the binding within the container.
+# If you use a proxy within Docker, point it to the ports you set below.
+# Do _not_ use IP:PORT in HTTP(S)_BIND or HTTP(S)_PORT
+# IMPORTANT: Do not use port 8081, 9081 or 65510!
+# Example: HTTP_BIND=1.2.3.4
+# For IPv6 see https://mailcow.github.io/mailcow-dockerized-docs/firststeps-ip_bindings/
+
+HTTP_PORT=80
+HTTP_BIND=
+
+HTTPS_PORT=443
+HTTPS_BIND=
+
+# ------------------------------
+# Other bindings
+# ------------------------------
+# You should leave that alone
+# Format: 11.22.33.44:25 or 12.34.56.78:465 etc.
+
+SMTP_PORT=25
+SMTPS_PORT=465
+SUBMISSION_PORT=587
+IMAP_PORT=143
+IMAPS_PORT=993
+POP_PORT=110
+POPS_PORT=995
+SIEVE_PORT=4190
+DOVEADM_PORT=127.0.0.1:19991
+SQL_PORT=127.0.0.1:13306
+SOLR_PORT=127.0.0.1:18983
+REDIS_PORT=127.0.0.1:7654
+XMPP_C2S_PORT=5222
+XMPP_S2S_PORT=5269
+XMPP_HTTPS_PORT=5443
+
+# Your timezone
+# See https://en.wikipedia.org/wiki/List_of_tz_database_time_zones for a list of timezones
+# Use the row named 'TZ database name' + pay attention for 'Notes' row
+
+TZ=IRTC
+
+# Fixed project name
+# Please use lowercase letters only
+
+COMPOSE_PROJECT_NAME=mailcowdockerized
+
+# Set this to "allow" to enable the anyone pseudo user. Disabled by default.
+# When enabled, ACL can be created, that apply to "All authenticated users"
+# This should probably only be activated on mail hosts, that are used exclusivly by one organisation.
+# Otherwise a user might share data with too many other users.
+ACL_ANYONE=disallow
+
+# Garbage collector cleanup
+# Deleted domains and mailboxes are moved to /var/vmail/_garbage/timestamp_sanitizedstring
+# How long should objects remain in the garbage until they are being deleted? (value in minutes)
+# Check interval is hourly
+
+MAILDIR_GC_TIME=7200
+
+# Additional SAN for the certificate
+#
+# You can use wildcard records to create specific names for every domain you add to mailcow.
+# Example: Add domains "example.com" and "example.net" to mailcow, change ADDITIONAL_SAN to a value like:
+#ADDITIONAL_SAN=imap.*,smtp.*
+# This will expand the certificate to "imap.example.com", "smtp.example.com", "imap.example.net", "imap.example.net"
+# plus every domain you add in the future.
+#
+# You can also just add static names...
+#ADDITIONAL_SAN=srv1.example.net
+# ...or combine wildcard and static names:
+#ADDITIONAL_SAN=imap.*,srv1.example.com
+#
+
+ADDITIONAL_SAN=
+
+# Additional server names for mailcow UI
+#
+# Specify alternative addresses for the mailcow UI to respond to
+# This is useful when you set mail.* as ADDITIONAL_SAN and want to make sure mail.maildomain.com will always point to the mailcow UI.
+# If the server name does not match a known site, Nginx decides by best-guess and may redirect users to the wrong web root.
+# You can understand this as server_name directive in Nginx.
+# Comma separated list without spaces! Example: ADDITIONAL_SERVER_NAMES=a.b.c,d.e.f
+
+ADDITIONAL_SERVER_NAMES=
+
+# Skip running ACME (acme-mailcow, Let's Encrypt certs) - y/n
+
+SKIP_LETS_ENCRYPT=n
+
+# Create seperate certificates for all domains - y/n
+# this will allow adding more than 100 domains, but some email clients will not be able to connect with alternative hostnames
+# see https://wiki.dovecot.org/SSL/SNIClientSupport
+ENABLE_SSL_SNI=n
+
+# Skip IPv4 check in ACME container - y/n
+
+SKIP_IP_CHECK=n
+
+# Skip HTTP verification in ACME container - y/n
+
+SKIP_HTTP_VERIFICATION=n
+
+# Skip ClamAV (clamd-mailcow) anti-virus (Rspamd will auto-detect a missing ClamAV container) - y/n
+
+SKIP_CLAMD=n
+
+# Skip SOGo: Will disable SOGo integration and therefore webmail, DAV protocols and ActiveSync support (experimental, unsupported, not fully implemented) - y/n
+
+SKIP_SOGO=n
+
+# Skip Solr on low-memory systems or if you do not want to store a readable index of your mails in solr-vol-1.
+
+SKIP_SOLR=n
+
+# Solr heap size in MB, there is no recommendation, please see Solr docs.
+# Solr is a prone to run OOM and should be monitored. Unmonitored Solr setups are not recommended.
+
+SOLR_HEAP=1024
+
+# Allow admins to log into SOGo as email user (without any password)
+
+ALLOW_ADMIN_EMAIL_LOGIN=n
+
+# Enable watchdog (watchdog-mailcow) to restart unhealthy containers
+
+USE_WATCHDOG=y
+
+# Send watchdog notifications by mail (sent from watchdog@MAILCOW_HOSTNAME)
+# CAUTION:
+# 1. You should use external recipients
+# 2. Mails are sent unsigned (no DKIM)
+# 3. If you use DMARC, create a separate DMARC policy ("v=DMARC1; p=none;" in _dmarc.MAILCOW_HOSTNAME)
+# Multiple rcpts allowed, NO quotation marks, NO spaces
+
+#WATCHDOG_NOTIFY_EMAIL=a@example.com,b@example.com,c@example.com
+WATCHDOG_NOTIFY_EMAIL=thabogre@gmail.com
+
+# Notify about banned IP (includes whois lookup)
+WATCHDOG_NOTIFY_BAN=n
+
+# Subject for watchdog mails. Defaults to "Watchdog ALERT" followed by the error message.
+#WATCHDOG_SUBJECT=
+
+# Checks if mailcow is an open relay. Requires a SAL. More checks will follow.
+# https://www.servercow.de/mailcow?lang=en
+# https://www.servercow.de/mailcow?lang=de
+# No data is collected. Opt-in and anonymous.
+# Will only work with unmodified mailcow setups.
+WATCHDOG_EXTERNAL_CHECKS=n
+
+# Max log lines per service to keep in Redis logs
+
+LOG_LINES=9999
+
+# Internal IPv4 /24 subnet, format n.n.n (expands to n.n.n.0/24)
+# Use private IPv4 addresses only, see https://en.wikipedia.org/wiki/Private_network#Private_IPv4_addresses
+
+IPV4_NETWORK=172.22.1
+
+# Internal IPv6 subnet in fc00::/7
+# Use private IPv6 addresses only, see https://en.wikipedia.org/wiki/Private_network#Private_IPv6_addresses
+
+IPV6_NETWORK=fd4d:6169:6c63:6f77::/64
+
+# Use this IPv4 for outgoing connections (SNAT)
+
+#SNAT_TO_SOURCE=
+
+# Use this IPv6 for outgoing connections (SNAT)
+
+#SNAT6_TO_SOURCE=
+
+# Create or override an API key for the web UI
+# You _must_ define API_ALLOW_FROM, which is a comma separated list of IPs
+# An API key defined as API_KEY has read-write access
+# An API key defined as API_KEY_READ_ONLY has read-only access
+# Allowed chars for API_KEY and API_KEY_READ_ONLY: a-z, A-Z, 0-9, - # pragma: allowlist secret
+# You can define API_KEY and/or API_KEY_READ_ONLY
+
+#API_KEY=
+#API_KEY_READ_ONLY=
+#API_ALLOW_FROM=172.22.1.1,127.0.0.1
+
+# mail_home is ~/Maildir
+MAILDIR_SUB=Maildir
+
+# SOGo session timeout in minutes
+SOGO_EXPIRE_SESSION=480
+
+# DOVECOT_MASTER_USER and DOVECOT_MASTER_PASS must both be provided. No special chars.
+# Empty by default to auto-generate master user and password on start.
+# User expands to DOVECOT_MASTER_USER@mailcow.local
+# LEAVE EMPTY IF UNSURE
+DOVECOT_MASTER_USER=
+# LEAVE EMPTY IF UNSURE
+DOVECOT_MASTER_PASS=
+
+# Let's Encrypt registration contact information
+# Optional: Leave empty for none
+# This value is only used on first order!
+# Setting it at a later point will require the following steps:
+# https://mailcow.github.io/mailcow-dockerized-docs/debug-reset-tls/
+ACME_CONTACT=
+
+# Used Docker Compose version
+# Switch here between native (compose plugin) and standalone
+# For more informations take a look at the mailcow docs regarding the configuration options.
+# Normally this should be untouched but if you decided to use either of those you can switch it manually here.
+# Please be aware that at least one of those variants should be installed on your maschine or mailcow will fail.
+
+DOCKER_COMPOSE_VERSION=native
+# Enable watchdog verbose logging
+WATCHDOG_VERBOSE=n
+# WebAuthn device manufacturer verification
+# After setting WEBAUTHN_ONLY_TRUSTED_VENDORS=y only devices from trusted manufacturers are allowed
+# root certificates can be placed for validation under mailcow-dockerized/data/web/inc/lib/WebAuthn/rootCertificates
+WEBAUTHN_ONLY_TRUSTED_VENDORS=n
diff --git a/terminaldweller.com/main/nginx.conf b/terminaldweller.com/main/nginx.conf
index e4f047f..ddeab02 100644
--- a/terminaldweller.com/main/nginx.conf
+++ b/terminaldweller.com/main/nginx.conf
@@ -43,6 +43,7 @@ http {
add_header Access-Control-Allow-Origin "*";
}
+ # synapse
location /.well-known/matrix/server {
access_log off;
add_header Access-Control-Allow-Origin "*";
@@ -56,6 +57,11 @@ http {
return 200 '{"m.homeserver": {"base_url": "https://matrix.terminaldweller.com"}}';
}
+ # pleroma
+ location = /.well-known/host-meta {
+ return 301 https://pleroma.terminaldweller.com$request_uri;
+ }
+
location / {
root /srv/;
add_header Access-Control-Allow-Origin "*";
diff --git a/terminaldweller.com/main/srv/ergo.png b/terminaldweller.com/main/srv/ergo.png
new file mode 100644
index 0000000..3c41e82
--- /dev/null
+++ b/terminaldweller.com/main/srv/ergo.png
Binary files differ
diff --git a/terminaldweller.com/main/srv/index.html b/terminaldweller.com/main/srv/index.html
index e58fb82..e65174e 100644
--- a/terminaldweller.com/main/srv/index.html
+++ b/terminaldweller.com/main/srv/index.html
@@ -9,6 +9,7 @@
<meta name="description" content="list of links for terminaldweller"/>
<meta name="author" content="terminaldweller"/>
<title>main</title>
+ <link rel="icon" type="image/x-icon" href="./ergo.png">
<style>
a:link {
color: #005faf;
@@ -58,36 +59,47 @@
img:hover {
filter: opacity(0.2) blur(.5rem);
}
+ ul {
+ list-style-type: square;
+ }
</style>
</head>
<body style="color:#005f87;background:#000000;text-align:center;padding:0px;border:0px;margin:0px;font-family:mono;border:solid;">
<h2>LIST OF LINKS</h2>
<p class="line">
+ <div style="display: flex;align-items: center;justify-content: center;">
+ <div class="row">
+ <div>
+ <img style="width: 20%;" src="./ergo.png" title="this blockie is for this webpage. it changes when/if the page changes."/>
+ </div>
+ </div>
+ </div>
+ <br>
<div style="color: #005f00;font-weight: bold;">
- Timestamp: Sat May 6 04:51:26 PM +0330 2023
+ Timestamp: 1689232468
</div>
</p>
<p class="line">
<div>This page is available on:</div>
- <div><a href="https://terminaldweller.com">web2</a> - &lt;<span class="pseudolink">https://terminaldweller.com</span>&gt;</div>
- <div><a href="https://ipfs.terminaldweller.com">IPFS</a> - <span class="pseudolink">https://ipfs.terminaldweller.com</span> or <span class="pseudolink">terminaldweller.eth</span></div>
- <div><a href="gemini://gemini.terminaldweller.com">gemini</a> - <span class="pseudolink">gemini://gemini.terminaldweller.com</span></div>
+ <div><a href="https://terminaldweller.com">the clear webs</a> - <span class="pseudolink">https://terminaldweller.com</span></div>
+ <div><a href="https://ipfs.terminaldweller.com">IPFS</a> - <span class="pseudolink">https://ipfs.terminaldweller.com</span> or <span class="pseudolink">terminaldweller.eth</span><a href="https://www.ipfs.tech/" style="color: #005f00;text-decoration: none;font-weight: bold;" title="https://www.ipfs.tech/"> +</a></div>
+ <div><a href="gemini://gemini.terminaldweller.com">gemini</a> - <span class="pseudolink">gemini://gemini.terminaldweller.com</span><a href="https://gemini.circumlunar.space/" style="color: #005f00;text-decoration: none;font-weight: bold;" title="https://gemini.circumlunar.space/"> +</a></div>
<div><a href="http://iedzwh5v2vouywqy4eak3eu33amfn3rzhdcln7j4r5kcyvf46cea.b32.i2p/">i2p mirror</a> - <span class="pseudolink">http://iedzwh5v2vouywqy4eak3eu33amfn3rzhdcln7j4r5kcyvf46cea.b32.i2p</span></div>
<div><a href="http://dqunl5rzlv6skqfklqr4dwi4zph2vqoaennc7qoinqs5mlug4docq2yd.onion/">tor mirror</a> - <span class="pseudolink">http://dqunl5rzlv6skqfklqr4dwi4zph2vqoaennc7qoinqs5mlug4docq2yd.onion</span></div>
- <div><a href="http://[21e:cd57:a147:322a:723b:a322:e4c8:c26e]/">yggdrasil</a> - <span class="pseudolink">http://[21e:cd57:a147:322a:723b:a322:e4c8:c26e]</span></div>
+ <div><a href="http://[21e:cd57:a147:322a:723b:a322:e4c8:c26e]/">yggdrasil</a> - <span class="pseudolink">http://[21e:cd57:a147:322a:723b:a322:e4c8:c26e]</span><a href="https://yggdrasil-network.github.io/" style="color: #005f00;text-decoration: none;font-weight: bold;" title="https://yggdrasil-network.github.io/"> +</a></div>
<div><a href="http://fyqzoraakwjwkj48cmp4ho8gy9k3hdk67stjb8z34d1u3p9urtgy.loki">lokinet</a> - <span class="pseudolink">http://fyqzoraakwjwkj48cmp4ho8gy9k3hdk67stjb8z34d1u3p9urtgy.loki</span></div>
<div><a href="gopher://gopher.terminaldweller.com">gopher</a> - <span class="pseudolink">gopher://gopher.terminaldweller.com</span></div>
</p>
<p class="line">
- <h3>WKD <a class="plus" href="https://wiki.gnupg.org/WKD" style="color: #005f00;text-decoration: none;">+</a></h3>
- <div>WKD direct and advanced are setup on/for the domain.</div>
+ <h3>WKD <a class="plus" href="https://wiki.gnupg.org/WKD" style="color: #005f00;text-decoration: none;" title="https://wiki.gnupg.org/WKD">+</a></h3>
+ <div>WKD direct and advanced are set up on/for the domain.</div>
</p>
<p class="line">
- <h3>OpenAlias <a href="https://openalias.org/" style="color: #005f00;text-decoration: none;">+</a></h3>
+ <h3>OpenAlias <a href="https://openalias.org/" style="color: #005f00;text-decoration: none;" title="https://openalias.org/">+</a></h3>
<div>OpenAlias records are set for the domain.</div>
</p>
<p class="line">
- <h3>Keyoxide <a href="https://keyoxide.org/" style="color: #005f00;text-decoration: none">+</a></h3>
+ <h3>Keyoxide <a href="https://keyoxide.org/" style="color: #005f00;text-decoration: none" title="https://keyoxide.org/">+</a></h3>
<div><a href="https://keyoxide.org/hkp/9e20464f1ccf3b103249fa93a6a0f5158b3881df">keyoxide</a> - <span class="pseudolink">https://keyoxide.org/hkp/9e20464f1ccf3b103249fa93a6a0f5158b3881df</span></div>
<div>I don't use all the accounts listed on the PGP pubkey regularly. The preferred methods of contacting me are the ones that are listed here, IRC, email and XMPP (The order is not significant).</div>
<br/>
@@ -97,11 +109,12 @@
<li>IRC Rizon</li>
<li>IRC Tilde</li>
<li>Opencollective</li>
+ <li>Twitter of course</li>
</ul>
</p>
<div>
<p class="line">
- <h3>PGP Key: devi@terminaldweller.com</h3>
+ <h3>PGP Key: <span class="pseudolink">devi@terminaldweller.com</span></h3>
<div>PGP FP: <span class="fingerprint pseudolink">9E20464F1CCF3B103249FA93A6A0F5158B3881DF</span></div>
<div><a href="https://github.com/terminaldweller.gpg">github</a> - <span class="pseudolink">https://github.com/terminaldweller.gpg</span></div>
<div><a href="https://gitlab.com/terminaldweller.gpg">gitlab</a> - <span class="pseudolink">https://gitlab.com/terminaldweller.gpg</span></div>
@@ -114,41 +127,45 @@
</p>
<p class="line">
<h3>SSH Key</h3>
- <div>SSH FP: <span class="fingerprint pseudolink">SHA256:tyuaTy005jkJOIPXkrJAAlCKD91d1ftEXzGTqjmEZh4</span></div>
+ <div>SSH FP: SHA256:<span class="fingerprint pseudolink">tyuaTy005jkJOIPXkrJAAlCKD91d1ftEXzGTqjmEZh4</span></div>
<div><a href="https://github.com/terminaldweller.keys">github</a> - <span class="pseudolink">https://github.com/terminaldweller.keys</span></div>
<div><a href="https://gitlab.com/terminaldweller.keys">gitlab</a> - <span class="pseudolink">https://gitlab.com/terminaldweller.keys</span></div>
<div><a href="https://codeberg.org/terminaldweller.keys">codeberg</a> - <span class="pseudolink">https://codeberg.org/terminaldweller.keys</span></div>
<div><a href="keys/id_rsa_pub">self-hosted</a></div>
</p>
<p class="line">
- <h3>PGP key: thabogre@gmail.com</h3>
+ <h3>PGP key: <span class="pseudolink">thabogre@gmail.com</span></h3>
<div>PGP FP: <span class="fingerprint pseudolink">FB3E38C3D7C6C07C66A4E3AD4041446A786EBAB4</span></div>
<div><a href="keys/gmail_gpg_pubkey">self-hosted</a></div>
<div>I manually upload the PGP key to <a href="https://keys.openpgp.org">https://keys.openpgp.org</a> and <a href="https://pgp.mit.edu/">https://pgp.mit.edu/</a> as well.</div>
</p>
<p class="line">
- <h3>PGP key: bloodstalker@zoho.com</h3>
+ <h3>PGP key: <span class="pseudolink">bloodstalker@zoho.com</span></h3>
<div>PGP FP: <span class="fingerprint pseudolink">1501CFE6C731BA61BE6BC065F4241FB7ACBB40E1</span></div>
<div><a href="keys/zoho_gpg_pubkey">self-hosted</a></div>
<div>I manually upload the PGP key to <a href="https://keys.openpgp.org">https://keys.openpgp.org</a> and <a href="https://pgp.mit.edu/">https://pgp.mit.edu/</a> as well.</div>
</p>
<p class="line">
<h3>IRC</h3>
- <div><a href="https://libera.chat">Libera</a>: terminaldweller FP: <span class="fingerprint pseudolink">FEF763019F0799C1B5CD190FC89080240665CDCAE1CB889D4413775447A4826F48B18DC134D3ACDDE1D932CF3280E6026099857CF46177F1D87CD9AA859C615F</span></div>
+ <div><a href="https://libera.chat">Libera.Chat</a>: terminaldweller FP: <span class="fingerprint pseudolink">FEF763019F0799C1B5CD190FC89080240665CDCAE1CB889D4413775447A4826F48B18DC134D3ACDDE1D932CF3280E6026099857CF46177F1D87CD9AA859C615F</span></div>
<div><a href="https://oftc.net/">OFTC</a>: terminaldweller FP: <span class="fingerprint pseudolink">1072EFECA623C6E3D7A6628BEB6021F77EA2C876</span></div>
- <div><a href="https://rizon.net/">Rizon</a>: terminaldweller FP: <span class="fingerprint pseudolink">1072EFECA623C6E3D7A6628BEB6021F77EA2C876</span></div>
- <div><a href="https://tilde.chat/">Tilde</a>: terminaldweller FP: <span class="fingerprint pseudolink">1072EFECA623C6E3D7A6628BEB6021F77EA2C876</span></div>
- <div><a href="https://bnet.eu.org/">Bonobonet</a>: terminaldweller FP: <span class="fingerprint pseudolink">5e3bd8ab6f8c6f6a614d4b2245fd6b5737a6e59917c6719de62b55bac77b978c</span></div>
- <br/>
+ <div><a href="https://rizon.net/">rizon</a>: terminaldweller FP: <span class="fingerprint pseudolink">1072EFECA623C6E3D7A6628BEB6021F77EA2C876</span></div>
+ <div><a href="https://tilde.chat/">tilde.chat</a>: terminaldweller FP: <span class="fingerprint pseudolink">1072EFECA623C6E3D7A6628BEB6021F77EA2C876</span></div>
+ <div><a href="https://bnet.eu.org/">BonoboNET</a>: terminaldweller FP: <span class="fingerprint pseudolink">5e3bd8ab6f8c6f6a614d4b2245fd6b5737a6e59917c6719de62b55bac77b978c</span></div>
<div>You can also find me on Libera, OFTC and Rizon in ##terminaldweller.</div>
+ <br>
+ <h4 style="margin: 0px;padding: 0px;">OTR <a href="https://otr.cypherpunks.ca/" style="color: #005f00;text-decoration: none;font-weight: bold;" title="https://otr.cypherpunks.ca/">+</a></h4>
+ <div><a href="https://libera.chat">Libera.Chat</a>: OTR FP: <span class="fingerprint pseudolink">7C919CDF 8E5E6546 0FC2F670 7F51458C 458AE9BE</span> | <span class="fingerprint pseudolink">7C919CDF8E5E65460FC2F6707F51458C458AE9BE</span></div>
+ <div><a href="https://oftc.net/">OFTC</a>: OTR FP: <span class="fingerprint pseudolink">AEA731CA F51E6AA8 72AB5123 AE8A90EA B823AB2C</span> | <span class="fingerprint pseudolink">AEA731CAF51E6AA872AB5123AE8A90EAB823AB2C</span></div>
+ <div><a href="https://rizon.net/">rizon</a>: OTR FP: <span class="fingerprint pseudolink">957129CA 0FB85F8E 5703AF0D 12313BBB 3BF8822B</span> | <span class="fingerprint pseudolink">957129CA0FB85F8E5703AF0D12313BBB3BF8822B</span></div>
+ <div><a href="https://tilde.chat/">tilde.chat</a>: OTR FP: <span class="fingerprint pseudolink">8C220E07 A3D5E103 B57B68CE 40B7D6F9 1A631A75</span> | <span class="fingerprint pseudolink">8C220E07A3D5E103B57B68CE40B7D6F91A631A75</span></div>
+ <div><a href="https://bnet.eu.org/">BonoboNET</a>: OTR FP: <span class="fingerprint pseudolink">B6C3FF85 0C2DA87F FE451366 0CDE443E DB8EED0C</span> | <span class="fingerprint pseudolink">B6C3FF850C2DA87FFE4513660CDE443EDB8EED0C</span></div>
</p>
</div>
<p class="line">
- <h3>XMPP</h3>
+ <h3>XMPP <a href="https://xmpp.org/" style="color: #005f00;text-decoration: none;font-weight: bold;" title="https://xmpp.org/">+</a></h3>
<div><span class="pseudolink">devi@jabber.terminaldweller.com</span></div>
<div><span class="pseudolink">devi@draugr.de</span></div>
- <br/>
- <div>(currently I do not have OMEMO, just OTR)</div>
</p>
<p class="line">
<h3>Email</h3>
@@ -162,12 +179,14 @@
<div>For emails, I have adopted a "polite" policy. I sign all emails, unless I receive an encrypted email in which case, I will also encrypt the response.</div>
</p>
<p class="line">
- <h3>Matrix</h3>
- <div><a href="https://matrix.to/#/@devi:terminaldweller.com">@devi:terminaldweller.com</a> - <span class="pseudolink">https://matrix.to/#/@devi:terminaldweller.com</span></div>
- <div><a href="https://matrix.to/#/@terminaldweller:matrix.org">@terminaldweller:matrix.org</a> - <span class="pseudolink">https://matrix.to/#/@terminaldweller:matrix.org</span></div>
+ <h3>Matrix <a href="https://matrix.org/" style="color: #005f00;text-decoration: none;font-weight: bold;" title="https://matrix.org/">+</a></h3>
+ <div><a href="https://matrix.to/#/@devi:terminaldweller.com">@devi:terminaldweller.com</a> - <span class="pseudolink">@devi:terminaldweller.com</span> - <span class="pseudolink">https://matrix.to/#/@devi:terminaldweller.com</span></div>
+ <div>I'm using webfinger for the matrix ID. My actual matrix ID is <span class="pseudolink">@devi:matrix.terminaldweller.com</span>.</div>
+ <br>
+ <div><a href="https://matrix.to/#/@terminaldweller:matrix.org">@terminaldweller:matrix.org</a> - <span class="pseudolink">@terminaldweller:matrix.org</span> - <span class="pseudolink">https://matrix.to/#/@terminaldweller:matrix.org</span></div>
</p>
<p class="line">
- <h3>OpenID</h3>
+ <h3>OpenID <a href="https://openid.net/" style="color: #005f00;text-decoration: none;font-weight: bold;" title="https://openid.net/">+</a></h3>
<div>OpenID: <a href="https://launchpad.net/~terminaldweller">https://launchpad.net/~terminaldweller</a> - <span class="pseudolink">https://launchpad.net/~terminaldweller</span></div>
</p>
<p class="line">
@@ -179,9 +198,24 @@
<div><a href="https://gitlab.com/terminaldweller">gitlab.com/terminaldweller</a> - <span class="pseudolink">https://gitlab.com/terminaldweller</span></div>
</p>
<p class="line">
- <h3>Mastodon</h3>
- <div><a href="https://pleroma.terminaldweller.com/users/devi">@devi@pleroma.terminaldweller.com</a> - <span class="pseudolink">https://pleroma.terminaldweller.com/users/devi</span></div>
- <div><a href="https://fosstodon.org/@terminaldweller">@terminaldweller@fosstodon.com</a> - <span class="pseudolink">https://fosstodon.org/@terminaldweller</span></div>
+ <h3>Hugging Face</h3>
+ <div><a href="https://huggingface.co/terminaldweller">huggingface.co/terminaldweller</a> - <span class="pseudolink">https://huggingface.co/terminaldweller</span></div>
+ </p>
+ <p class="line">
+ <h3>Kaggle</h3>
+ <div><a href="https://www.kaggle.com/terminaldweller">kaggle.com/terminaldweller</a> - <span class="pseudolink">https://www.kaggle.com/terminaldweller</span></div>
+ </p>
+ <p class="line">
+ <h3>ActivityPub <a href="https://www.w3.org/TR/activitypub/" style="color: #005f00;text-decoration: none;font-weight: bold;" title="https://www.w3.org/TR/activitypub/">+</a></h3>
+ <div><a href="https://pleroma.terminaldweller.com/users/devi">@devi@terminaldweller.com</a> - <span class="pseudolink">@devi@terminaldweller.com</span> - <span class="pseudolink">https://pleroma.terminaldweller.com/users/devi</span></div>
+ <div>I'm using webfinger for the pleroma ID. My actual pleroma ID is <span class="pseudolink">@devi@pleroma.terminaldweller.com</span>.</div>
+ <br>
+ <div><a href="https://fosstodon.org/@terminaldweller">@terminaldweller@fosstodon.com</a> - <span class="pseudolink">@terminaldweller@fosstodon.com</span> - <span class="pseudolink">https://fosstodon.org/@terminaldweller</span></div>
+ </p>
+ <p class="line">
+ <h3>Nostr <a href="https://nostr.com/" style="color: #005f00;text-decoration: none;font-weight: bold;" title="https://nostr.com/">+</a></h3>
+ <div>Public Key: <span class="fingerprint pseudolink">929386850940d0902cd065324591448f6714ca52f3e6ef9c911d9e471e9ef12c</span></div>
+ <div>Nprofile: <span class="fingerprint pseudolink">nprofile1qqsf9yuxs5y5p5ys9ngx2vj9j9zg7ec5eff08eh0njg3m8j8r600ztqtrsaa3</span></div>
</p>
<p class="line">
<h3>Blog</h3>
@@ -193,24 +227,52 @@
</p>
<p class="line">
<h3>Blockie Canaries</h3>
+ <div>Because it's easier to remember a picture with colors than a long random-looking string.</div>
+ <br>
<div style="display: flex;align-items: center;justify-content: center;">
<div class="row">
<div>
<img src="./identicon.png" title="GPG devi@terminaldweller.com"/>
</div>
<div>
+ <img src="./gmail.png" title="GPG thabogre@gmail.com"/>
+ </div>
+ <div>
+ <img src="./zoho.png" title="GPG bloodstalker@zoho.com"/>
+ </div>
+ <div>
<img src="./ssh_pub.png" title="ssh"/>
</div>
<div>
- <img src="./gmail.png" title="GPG thabogre@gmail.com"/>
+ <img src="./nostr.png" title="nostr"/>
</div>
+ </div>
+ </div>
+ <div style="display: flex;align-items: center;justify-content: center;">
+ <div class="row">
<div>
- <img src="./zoho.png" title="GPG bloodstalker@zoho.com"/>
+ <img src="./otr_libera.png" title="OTR Libera.Chat"/>
+ </div>
+ <div>
+ <img src="./otr_oftc.png" title="OTR OFTC"/>
+ </div>
+ <div>
+ <img src="./otr_tilde.png" title="OTR tilde.chat"/>
+ </div>
+ <div>
+ <img src="./otr_rizon.png" title="OTR rizon"/>
+ </div>
+ <div>
+ <img src="./otr_bonobonet.png" title="OTR BonoboNET"/>
</div>
</div>
</div>
</p>
<p class="line">
+ <h3>Privacy Policy</h3>
+ <p>I keep IP logs. If that is of concern to you, please use this website over the anonymizing networks it is available on (Tor,I2P,Lokinet).</p>
+ </p>
+ <p class="line">
<h3>Services</h3>
<div>N/A</div>
</p>
diff --git a/terminaldweller.com/main/srv/nostr.png b/terminaldweller.com/main/srv/nostr.png
new file mode 100644
index 0000000..3ecb9e0
--- /dev/null
+++ b/terminaldweller.com/main/srv/nostr.png
Binary files differ
diff --git a/terminaldweller.com/main/srv/otr_bonobonet.png b/terminaldweller.com/main/srv/otr_bonobonet.png
new file mode 100644
index 0000000..25ee999
--- /dev/null
+++ b/terminaldweller.com/main/srv/otr_bonobonet.png
Binary files differ
diff --git a/terminaldweller.com/main/srv/otr_libera.png b/terminaldweller.com/main/srv/otr_libera.png
new file mode 100644
index 0000000..47bf0f2
--- /dev/null
+++ b/terminaldweller.com/main/srv/otr_libera.png
Binary files differ
diff --git a/terminaldweller.com/main/srv/otr_oftc.png b/terminaldweller.com/main/srv/otr_oftc.png
new file mode 100644
index 0000000..923a81c
--- /dev/null
+++ b/terminaldweller.com/main/srv/otr_oftc.png
Binary files differ
diff --git a/terminaldweller.com/main/srv/otr_rizon.png b/terminaldweller.com/main/srv/otr_rizon.png
new file mode 100644
index 0000000..634836f
--- /dev/null
+++ b/terminaldweller.com/main/srv/otr_rizon.png
Binary files differ
diff --git a/terminaldweller.com/main/srv/otr_tilde.png b/terminaldweller.com/main/srv/otr_tilde.png
new file mode 100644
index 0000000..4cc814b
--- /dev/null
+++ b/terminaldweller.com/main/srv/otr_tilde.png
Binary files differ
diff --git a/terminaldweller.com/matterbridge/matterbridge.toml b/terminaldweller.com/matterbridge/matterbridge.toml
index 4ee98a3..f36312c 100644
--- a/terminaldweller.com/matterbridge/matterbridge.toml
+++ b/terminaldweller.com/matterbridge/matterbridge.toml
@@ -1,35 +1,109 @@
[general]
-RemoteNickFormat="[{PROTOCOL}/{BRIDGE}] <{NICK}> "
+RemoteNickFormat="[{PROTOCOL}/{BRIDGE}] <{CHANNEL}/{NICK}> "
+ShowJoinPart=true
[matrix.matrix]
Server="https://matrix.org"
Login="termibot"
-Password="" #pragma: allowlist secret
+Password="p@ssw0rd" # pragma: allowlist secret
NoHomeServerSuffix=true
-[matrix.terminaldweller]
+[matrix.devimatrix]
Server="https://matrix.terminaldweller.com"
-Login="devi"
-Password="" #pragma: allowlist secret
+Login="matterbridge_bot"
+Password="p@ssw0rd" # pragma: allowlist secret
NoHomeServerSuffix=true
[irc.devinet]
-Nick=""
-NickServNick=""
-NickServPassword="" #pragma: allowlist secret
+Nick="termi"
+NickServNick="termi"
+NickServPassword="p@ssw0rd" # pragma: allowlist secret
Server="irc.terminaldweller.com:6697"
UseTLS=true
UseSASL=true
SkipTLSVerify=false
+[slack]
+[slack.magmacore]
+Token="xoxb-token" # pragma: allowlist secret
+PreserveThreading=true
+
+# [xmpp.jabber.terminaldweller.com]
+# Server="jabber.terminaldweller.com:5222"
+# Jid="matterbot@jabber.terminaldweller.com"
+# Password=""
+# Muc="conference.jabber.example.com"
+# Nick="xmppbot"
+# RemoteNickFormat="[{PROTOCOL}] <{NICK}> "
+
[[gateway]]
name="gate_one"
enable=true
[[gateway.in]]
account="matrix.matrix"
- channel="#doipver:matrix.org"
+ channel="#ipfs-chatter:ipfs.io"
+
+ [[gateway.inout]]
+ account="irc.devinet"
+ channel="#matrix-ipfs"
+
+[[gateway]]
+ name="gate_two"
+ enable=false
+
+ [[gateway.in]]
+ account="matrix.matrix"
+ channel="#privacy-security-anonymity:matrix.org"
+
+ [[gateway.inout]]
+ account="irc.devinet"
+ channel="#priv-sec-anon"
+
+[[gateway]]
+ name="gate_three"
+ enable=false
+
+ [[gateway.in]]
+ account="matrix.matrix"
+ channel="#librewolf:matrix.org"
+
+ [[gateway.inout]]
+ account="irc.devinet"
+ channel="#matrix-librewolf"
+
+[[gateway]]
+ name="gate_four"
+ enable=true
+
+ [[gateway.in]]
+ account="matrix.matrix"
+ channel="#xmrmine:matrix.org"
+
+ [[gateway.inout]]
+ account="irc.devinet"
+ channel="#matrix-monero-mining"
+
+[[gateway]]
+ name="gate_five"
+ enable=true
+
+ [[gateway.in]]
+ account="slack.magmacore"
+ channel="general"
+
+ [[gateway.inout]]
+ account="irc.devinet"
+ channel="#slack-magmacore-general"
+
+[[gateway]]
+ name="gate_six"
+ enable=true
+
+ [[gateway.in]]
+ account="matrix.devimatrix"
+ channel="!QwGIJxYlkXfHdrkdot:terminaldweller.com"
[[gateway.inout]]
account="irc.devinet"
- channel="#matterbridge"
+ channel="#matrix_devi_netdata_notifs"
diff --git a/terminaldweller.com/pleroma/config.exs b/terminaldweller.com/pleroma/config.exs
index 382941e..4b21683 100644
--- a/terminaldweller.com/pleroma/config.exs
+++ b/terminaldweller.com/pleroma/config.exs
@@ -26,6 +26,8 @@ config :pleroma, Pleroma.Repo,
hostname: System.get_env("DB_HOST", "db"),
pool_size: 10
+config :pleroma, Pleroma.Web.WebFinger, domain: "terminaldweller.com"
+
# Configure web push notifications
config :web_push_encryption, :vapid_details, subject: "mailto:#{System.get_env("NOTIFY_EMAIL")}"
diff --git a/terminaldweller.com/sopel/default.cfg b/terminaldweller.com/sopel/default.cfg
new file mode 100644
index 0000000..74a353b
--- /dev/null
+++ b/terminaldweller.com/sopel/default.cfg
@@ -0,0 +1,41 @@
+[core]
+nick = sopelbot
+host = irc.terminaldweller.com
+use_ssl = true
+port = 6697
+owner = terminaldweller
+channels =
+ "#sopelbot"
+commands_on_connect =
+auth_method = sasl
+auth_target = PLAIN
+auth_username = sopelbot
+auth_password =
+owner_account = terminaldweller
+
+[weather]
+weather_provider = https://openweathermap.org/
+weather_api_key =
+
+[ip]
+
+[meetbot]
+
+[currency]
+
+[wikipedia]
+
+[tell]
+
+[safety]
+
+[admin]
+
+[py]
+
+[help]
+
+[url]
+
+[bugzilla]
+
diff --git a/terminaldweller.com/soulhack/run.sh b/terminaldweller.com/soulhack/run.sh
new file mode 100644
index 0000000..5d2338b
--- /dev/null
+++ b/terminaldweller.com/soulhack/run.sh
@@ -0,0 +1,18 @@
+#!/bin/sh
+
+docker run \
+ --entrypoint /soulshack \
+ -v ./AmQMzQGpzZQEJZG.yml:/personalities/AmQMzQGpzZQEJZG.yml \
+ -it soulshack:dev \
+ --nick botnick \
+ --server irc.terminaldweller.com \
+ --port 6697 \
+ --ssl \
+ --openaikey api_key \
+ --channel '#mychannel' \
+ --admins terminaldweller \
+ --chunkmax 8192 \
+ --chunkdelay 30s \
+ --nickservnick botnick \
+ --nickservpass \
+ --become personality
diff --git a/terminaldweller.com/tor_bnc/Dockerfile b/terminaldweller.com/tor_bnc/Dockerfile
new file mode 100644
index 0000000..155349b
--- /dev/null
+++ b/terminaldweller.com/tor_bnc/Dockerfile
@@ -0,0 +1,12 @@
+FROM alpine:3.18
+
+ARG GOPROXY=https://goproxy.io
+RUN apk add --no-cache proxychains-ng git && git clone https://git.sr.ht/~emersion/soju /src && apk del git
+RUN apk add --no-cache go sqlite sqlite-libs sqlite-dev
+RUN apk add --no-cache git make && cd /src; GOFLAGS='-trimpath -tags=libsqlite3' make soju sojuctl && apk del make
+RUN chmod a+w /src/cmd/soju /src/cmd/sojuctl
+RUN mv /src/soju /src/sojuctl /src/sojudb /bin
+
+EXPOSE 6697
+
+ENTRYPOINT ["soju", "-config", "/data/config"]
diff --git a/terminaldweller.com/tor_bnc/config b/terminaldweller.com/tor_bnc/config
new file mode 100644
index 0000000..f14ae32
--- /dev/null
+++ b/terminaldweller.com/tor_bnc/config
@@ -0,0 +1,3 @@
+listen irc+insecure://0.0.0.0:6697
+db sqlite3 /data/soju_sq3.db
+listen unix+admin:///run/soju_admin
diff --git a/terminaldweller.com/tor_bnc/docker-compose.yml b/terminaldweller.com/tor_bnc/docker-compose.yml
new file mode 100644
index 0000000..040dea2
--- /dev/null
+++ b/terminaldweller.com/tor_bnc/docker-compose.yml
@@ -0,0 +1,16 @@
+version: "3.9"
+services:
+ soju:
+ #build: .
+ image: mpldr/soju:latest
+ entrypoint: ["proxychains4","-q","soju", "-config","/data/config"]
+ #entrypoint: ["proxychains4","-q","soju","-listen", "irc+insecure://0.0.0.0:6697", "-config","/data/config"]
+ command:
+ - -debug
+ ports:
+ - "1026:6697"
+ #- "127.0.0.1:1026:6697"
+ volumes:
+ - ./soju-data:/data
+ - /etc/hostname:/etc/hostname
+ - ./proxychains.conf:/etc/proxychains.conf
diff --git a/terminaldweller.com/tor_bnc/proxychains.conf b/terminaldweller.com/tor_bnc/proxychains.conf
new file mode 100644
index 0000000..6b52457
--- /dev/null
+++ b/terminaldweller.com/tor_bnc/proxychains.conf
@@ -0,0 +1,68 @@
+# proxychains.conf VER 3.1
+#
+# HTTP, SOCKS4, SOCKS5 tunneling proxifier with DNS.
+#
+
+# The option below identifies how the ProxyList is treated.
+# only one option should be uncommented at time,
+# otherwise the last appearing option will be accepted
+#
+dynamic_chain
+#
+# Dynamic - Each connection will be done via chained proxies
+# all proxies chained in the order as they appear in the list
+# at least one proxy must be online to play in chain
+# (dead proxies are skipped)
+# otherwise EINTR is returned to the app
+#
+#strict_chain
+#
+# Strict - Each connection will be done via chained proxies
+# all proxies chained in the order as they appear in the list
+# all proxies must be online to play in chain
+# otherwise EINTR is returned to the app
+#
+#random_chain
+#
+# Random - Each connection will be done via random proxy
+# (or proxy chain, see chain_len) from the list.
+# this option is good to test your IDS :)
+
+# Make sense only if random_chain
+#chain_len = 2
+
+# Quiet mode (no output from library)
+#quiet_mode
+
+# Proxy DNS requests - no leak for DNS data
+proxy_dns
+
+# Some timeouts in milliseconds
+tcp_read_time_out 15000
+tcp_connect_time_out 8000
+localnet 10.0.0.0/255.0.0.0
+localnet 172.16.0.0/255.240.0.0
+localnet 192.168.0.0/255.255.0.0
+localnet 127.0.0.0/255.0.0.0
+
+# ProxyList format
+# type host port [user pass]
+# (values separated by 'tab' or 'blank')
+#
+#
+# Examples:
+#
+# socks5 192.168.67.78 1080 lamer secret
+# http 192.168.89.3 8080 justu hidden
+# socks4 192.168.1.49 1080
+# http 192.168.39.93 8080
+#
+#
+# proxy types: http, socks4, socks5
+# ( auth types supported: "basic"-http "user/pass"-socks )
+#
+[ProxyList]
+# add proxy here ...
+# meanwile
+# defaults set to "tor"
+socks5 172.17.0.1 9050
diff --git a/terminaldweller.com/update_main.sh b/terminaldweller.com/update_main.sh
index 3b0afcb..935f4d6 100755
--- a/terminaldweller.com/update_main.sh
+++ b/terminaldweller.com/update_main.sh
@@ -1,20 +1,32 @@
#!/usr/bin/env sh
set -ex
-# PROXY="proxychains4 -q -f ~/proxies/ice/proxychains.conf"
-PROXY=""
+(cd ./main/srv/keys && \
+ gpg2 --export --armor devi@terminaldweller.com > gpg_pubkey && \
+ gpg2 --export --armor thabogre@gmail.com > gmail_gpg_pubkey && \
+ gpg2 --export --armor bloodstalker@zoho.com > zoho_gpg_pubkey)
-# GPG
-gpg2 --export --armor devi@terminaldweller.com > gpg_pubkey
-gpg2 --export devi@terminaldweller.com > gpg_pubkey.asc
-mv ./gpg_pubkey ./main/srv/keys/
-mv ./gpg_pubkey.asc ./main/srv/.well-known/openpgpkey/hu/
+(cd ./main/srv/.well-known/openpgpkey/hu/ && \
+ gpg2 --export devi@terminaldweller.com > gpg_pubkey.asc && \
+ gpg2 --export thabogre@gmail.com > gpg_gmail.asc && \
+ gpg2 --export bloodstalker@zoho.com > gpg_zoho.asc)
-gpg2 --export --armor thabogre@gmail.com > gmail_gpg_pubkey
-mv ./gmail_gpg_pubkey ./main/srv/keys/
-
-gpg2 --export --armor bloodstalker@zoho.com > zoho_gpg_pubkey
-mv ./zoho_gpg_pubkey ./main/srv/keys/
+(cd ~/scripts/identicon && \
+ poetry run ~/scripts/identicon/gen_blockie.py \
+ --input ./main/srv/.well-known/openpgpkey/hu/gpg_pubkey.asc \
+ --out ../terminaldweller.com/main/srv/identicon.png)
+(cd ~/scripts/identicon && \
+ poetry run ~/scripts/identicon/gen_blockie.py \
+ --input ./main/srv/.well-known/openpgpkey/hu/gpg_gmail.asc \
+ --out ../terminaldweller.com/main/srv/gmail.png)
+(cd ~/scripts/identicon && \
+ poetry run ~/scripts/identicon/gen_blockie.py \
+ --input ./main/srv/.well-known/openpgpkey/hu/gpg_zoho.asc \
+ --out ../terminaldweller.com/main/srv/zoho.png)
+(cd ~/scripts/identicon && \
+ poetry run ~/scripts/identicon/gen_blockie.py \
+ --input ~/.ssh/id_rsa.pub \
+ --out ../terminaldweller.com/main/srv/ssh_pub.png)
# main
#lokinet
@@ -31,3 +43,8 @@ rm ./index.txt
~/devi/html2gmi.git/master/html2gmi -m -t -l 1000 -i ~/scripts/terminaldweller.com/main/srv/index.html > index.gmi
${PROXY} scp -4 -P 3333 ./index.gmi ubuntu@jump8.terminaldweller.com:/home/ubuntu/gemini/srv/
rm ./index.gmi
+
+#ipfs
+${PROXY} scp -4 -r -P 3333 ./main/srv/ ubuntu@89.147.110.30:/home/ubuntu/terminaldweller.com-ipfs/
+${PROXY} ssh -p 3333 ubuntu@89.147.110.30 ipfs add -r ~/terminaldweller.com-ipfs/srv/
+${PROXY} ssh -p 3333 ubuntu@89.147.110.30 ipfs pin add -r ${IPFS_ROOT_HASH}
diff --git a/terminaldweller.com/znc/docker-compose.yaml b/terminaldweller.com/znc/docker-compose.yaml
new file mode 100644
index 0000000..7dcee68
--- /dev/null
+++ b/terminaldweller.com/znc/docker-compose.yaml
@@ -0,0 +1,17 @@
+version: "3"
+services:
+ znc:
+ image: znc:1.8.2
+ # in my case, this is a user named znc and we are using this user's home dir
+ #user: 1001:1001
+ networks:
+ - zncnet
+ ports:
+ - "1025:1025"
+ restart: unless-stopped
+ volumes:
+ - /home/znc/.znc:/znc-data
+ - /etc/letsencrypt/live/znc.terminaldweller.com/fullchain.pem:/etc/letsencrypt/live/znc.terminaldweller.com/fullchain.pem:ro
+ - /etc/letsencrypt/live/znc.terminaldweller.com/privkey.pem:/etc/letsencrypt/live/znc.terminaldweller.com/privkey.pem:ro
+networks:
+ zncnet: