summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore2
-rw-r--r--Rakefile63
-rw-r--r--config-src/inspircd.aliases17
-rw-r--r--config-src/inspircd.censor63
-rw-r--r--config-src/inspircd.cgiirc.erb97
-rw-r--r--config-src/inspircd.conf25
-rw-r--r--config-src/inspircd.helpop-full629
-rw-r--r--config-src/inspircd.modules83
-rw-r--r--config-src/inspircd.motd60
-rw-r--r--config-src/inspircd.netwide.erb111
-rw-r--r--config-src/inspircd.opers.erb44
-rw-r--r--config-src/inspircd.rules5
-rw-r--r--config-src/inspircd.servspecific.erb70
-rw-r--r--insomniaircd_conf.gemspec15
-rw-r--r--network.yaml57
15 files changed, 1341 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..d144cbe
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,2 @@
+conf/
+secret.key
diff --git a/Rakefile b/Rakefile
new file mode 100644
index 0000000..42953db
--- /dev/null
+++ b/Rakefile
@@ -0,0 +1,63 @@
+$:.push File.expand_path("../lib", __FILE__)
+
+require 'rake'
+require 'insomniaircd_conf'
+
+INPUT = "config-src"
+OUTPUT = "conf"
+
+
+directory OUTPUT
+
+task :clean do
+ rm_rf OUTPUT
+end
+
+task :compile, [:hostname] => [OUTPUT] do |t, args|
+ conf = InsomniaIRCDConf.new(args[:hostname], get_key)
+
+ files = Rake::FileList["#{INPUT}/*"]
+
+ files.each do |filename|
+ next if !File.file? filename
+ if filename =~ /.erb$/
+ template = File.read("#{filename}")
+ File.open("#{OUTPUT}/" + File.basename(filename[0..-5]), "w") do |file|
+ file.puts conf.render_template(template)
+ end
+ elsif filename =~ /.encrypted$/
+
+ else
+ cp filename, "#{OUTPUT}/"
+ end
+ end
+end
+
+namespace "secret" do
+ task :mkkey do
+ File.write("secure.key", InsomniaIRCDConf::Secure::random_key)
+ end
+
+ task :encrypt, [:secret] do |t, args|
+ secure = InsomniaIRCDConf::Secure.new(get_key)
+ puts "Encryption result: " + secure.encrypt(args[:secret])
+ end
+
+ task :decrypt, [:secret] do |t, args|
+ secure = InsomniaIRCDConf::Secure.new(get_key)
+ puts "Decryption result: " + secure.decrypt(args[:secret])
+ end
+end
+
+def get_key
+ if ENV.has_key? "SECRET_KEY"
+ ENV["SECRET_KEY"]
+ else
+ if File.file? "secret.key"
+ File.read("secret.key")
+ else
+ raise "SECRET_KEY variable not set!"
+ end
+ end
+end
+
diff --git a/config-src/inspircd.aliases b/config-src/inspircd.aliases
new file mode 100644
index 0000000..b2af8b9
--- /dev/null
+++ b/config-src/inspircd.aliases
@@ -0,0 +1,17 @@
+#
+# Command aliases.
+# These are mostly to make services easier to use.
+#
+
+<alias text="NICKSERV" format=":IDENTIFY *" replace="PRIVMSG NickServ :IDENTIFY $3-" requires="NickServ" uline="yes">
+<alias text="NICKSERV" replace="PRIVMSG NickServ :$2-" requires="NickServ" uline="yes">
+<alias text="CHANSERV" replace="PRIVMSG ChanServ :$2-" requires="ChanServ" uline="yes">
+<alias text="HOSTSERV" replace="PRIVMSG HostServ :$2-" requires="HostServ" uline="yes">
+<alias text="BOTSERV" replace="PRIVMSG BotServ :$2-" requires="BotServ" uline="yes">
+<alias text="OPERSERV" replace="PRIVMSG OperServ :$2-" requires="OperServ" uline="yes" operonly="yes">
+<alias text="NS" replace="PRIVMSG NickServ :$2-" requires="NickServ" uline="yes">
+<alias text="CS" replace="PRIVMSG ChanServ :$2-" requires="ChanServ" uline="yes">
+<alias text="HS" replace="PRIVMSG HostServ :$2-" requires="HostServ" uline="yes">
+<alias text="BS" replace="PRIVMSG BotServ :$2-" requires="BotServ" uline="yes">
+<alias text="OS" replace="PRIVMSG OperServ :$2-" requires="OperServ" uline="yes" operonly="yes">
+
diff --git a/config-src/inspircd.censor b/config-src/inspircd.censor
new file mode 100644
index 0000000..b7c58a3
--- /dev/null
+++ b/config-src/inspircd.censor
@@ -0,0 +1,63 @@
+#
+# Configuration file for m_censor.so (1.0.0.0)
+# C.J.Edwards May 2004.
+#
+
+#
+# The tags for this module are formatted as follows:
+#
+# <badword text="simple word" replace="text to replace with">
+#
+# You can specify <badword text="simple word" replace="">
+# to block lines containing the word
+
+<badword text="shit" replace="<censored>">
+<badword text="fuck" replace="<censored>">
+<badword text="pussy" replace="<censored>">
+<badword text="fuck" replace="<censored>">
+<badword text="whore" replace="<censored>">
+<badword text="slut" replace="<censored>">
+<badword text="shit" replace="<censored>">
+<badword text="asshole" replace="<censored>">
+<badword text="bitch" replace="<censored>">
+<badword text="cunt" replace="<censored>">
+<badword text="vagina" replace="<censored>">
+<badword text="penis" replace="<censored>">
+<badword text="jackass" replace="<censored>">
+<badword text="*fucker*" replace="<censored>">
+<badword text="faggot" replace="<censored>">
+<badword text="fag" replace="<censored>">
+<badword text="horny" replace="<censored>">
+<badword text="dickhead" replace="<censored>">
+<badword text="sonuvabitch" replace="<censored>">
+<badword text="*fuck*" replace="<censored>">
+<badword text="bastard" replace="<censored>">
+<badword text="tits" replace="<censored>">
+
+
+#
+# Reserved and forbidden nicks.
+#
+
+<badnick nick="ChanServ" reason="Reserved For Services">
+<badnick nick="NickServ" reason="Reserved For Services">
+<badnick nick="OperServ" reason="Reserved For Services">
+<badnick nick="MemoServ" reason="Reserved For Services">
+
+<badnick nick="*fuck*" reason="Inappropriate Nick">
+<badnick nick="*bitch*" reason="Inappropriate Nick">
+<badnick nick="*jackass*" reason="Inappropriate Nick">
+<badnick nick="*penis*" reason="Inappropriate Nick">
+<badnick nick="*shit*" reason="Inappropriate Nick">
+<badnick nick="*asshole*" reason="Inappropriate Nick">
+<badnick nick="*dickhead*" reason="Inappropriate Nick">
+<badnick nick="*vagina*" reason="Inappropriate Nick">
+<badnick nick="*cunt*" reason="Inappropriate Nick">
+<badnick nick="*whore*" reason="Inappropriate Nick">
+<badnick nick="*faggot*" reason="Inappropriate Nick">
+<badnick nick="*fagget*" reason="Inappropriate Nick">
+<badnick nick="*nigger*" reason="Inappropriate Nick">
+
+<badnick nick="KOR|*" reason="Virus drones">
+<badnick nick="USA|*" reason="Virus drones">
+
diff --git a/config-src/inspircd.cgiirc.erb b/config-src/inspircd.cgiirc.erb
new file mode 100644
index 0000000..9d251bc
--- /dev/null
+++ b/config-src/inspircd.cgiirc.erb
@@ -0,0 +1,97 @@
+#
+# Configuration for mibbit
+#
+
+<cgihost type="webirc" password="<%= secret :mibbit %>" mask="64.62.228.82">
+<cgihost type="webirc" password="<%= secret :mibbit %>" mask="207.192.75.252">
+<cgihost type="webirc" password="<%= secret :mibbit %>" mask="78.129.202.38">
+<cgihost type="webirc" password="<%= secret :mibbit %>" mask="109.169.29.95">
+
+<connect allow="64.62.228.82"
+ timeout="60"
+ flood="10"
+ pingfreq="120"
+ threshold="5"
+ sendq="131074"
+ recvq="4096"
+ globalmax="60"
+ localmax="60"
+ port="6667">
+
+<connect allow="64.62.228.82"
+ timeout="60"
+ flood="10"
+ pingfreq="120"
+ threshold="5"
+ sendq="131074"
+ recvq="4096"
+ globalmax="60"
+ localmax="60"
+ port="6697">
+
+<connect allow="207.192.75.252"
+ timeout="60"
+ flood="10"
+ pingfreq="120"
+ threshold="5"
+ sendq="131074"
+ recvq="4096"
+ globalmax="60"
+ localmax="60"
+ port="6667">
+
+<connect allow="207.192.75.252"
+ timeout="60"
+ flood="10"
+ pingfreq="120"
+ threshold="5"
+ sendq="131074"
+ recvq="4096"
+ globalmax="60"
+ localmax="60"
+ port="6697">
+
+<connect allow="78.129.202.38"
+ timeout="60"
+ flood="10"
+ pingfreq="120"
+ threshold="5"
+ sendq="131074"
+ recvq="4096"
+ globalmax="60"
+ localmax="60"
+ port="6667">
+
+<connect allow="78.129.202.38"
+ timeout="60"
+ flood="10"
+ pingfreq="120"
+ threshold="5"
+ sendq="131074"
+ recvq="4096"
+ globalmax="60"
+ localmax="60"
+ port="6697">
+
+<connect allow="109.169.29.95"
+ timeout="60"
+ flood="10"
+ pingfreq="120"
+ threshold="5"
+ sendq="131074"
+ recvq="4096"
+ globalmax="60"
+ localmax="60"
+ port="6667">
+
+<connect allow="109.169.29.95"
+ timeout="60"
+ flood="10"
+ pingfreq="120"
+ threshold="5"
+ sendq="131074"
+ recvq="4096"
+ globalmax="60"
+ localmax="60"
+ port="6697">
+
diff --git a/config-src/inspircd.conf b/config-src/inspircd.conf
new file mode 100644
index 0000000..d343c6c
--- /dev/null
+++ b/config-src/inspircd.conf
@@ -0,0 +1,25 @@
+#
+# InsomniaIRC Network Configuration
+# =================================
+#
+# This is the base of the config file. All config settings should be in the
+# appropriate include file below.
+#
+# The included files should not include other files.
+#
+
+# Load all the modules first.
+<include file="conf/inspircd.modules">
+
+# Text files for MOTD, RULES, etc.
+<files motd="conf/inspircd.motd" rules="conf/inspircd.rules">
+<include file="conf/inspircd.helpop-full">
+
+# Network Settings
+<include file="conf/inspircd.netwide">
+<include file="conf/inspircd.opers">
+<include file="conf/inspircd.censor">
+<include file="conf/inspircd.cgiirc">
+
+# Server specific settings
+<include file="conf/inspircd.servspecific">
diff --git a/config-src/inspircd.helpop-full b/config-src/inspircd.helpop-full
new file mode 100644
index 0000000..aa0aa40
--- /dev/null
+++ b/config-src/inspircd.helpop-full
@@ -0,0 +1,629 @@
+#####################
+# Helpop Standard #
+#####################
+
+<helpop key="start" value="InspIRCd help system
+-
+This system provides help for commands and modes.
+Specify your question or a command name as the
+parameter for this command.
+-
+/HELPOP CUSER - To see a list of user commands
+/HELPOP COPER - To see a list of oper commands
+/HELPOP UMODES - To see a list of user modes
+/HELPOP CHMODES - To see a list of channel modes">
+
+<helpop key="nohelp" value="There is no help for the topic
+you searched for. Please try again.">
+
+#####################
+# User Commands #
+#####################
+
+<helpop key="cuser" value="User Commands
+-------------
+USER NICK QUIT VERSION PING
+PONG ADMIN PRIVMSG INFO TIME
+WHOIS NOTICE JOIN NAMES PART
+KICK MODE TOPIC WHO MOTD
+RULES OPER LIST LUSERS STATS
+USERHOST AWAY ISON SUMMON USERS
+INVITE PASS WHOWAS LINKS MAP
+COMMANDS MODULES KNOCK SILENCE DEVOICE
+REMOVE UNINVITE VHOST WATCH TBAN
+TITLE CYCLE DCCALLOW FPART FINGERPRINT
+SSLINFO">
+
+<helpop key="sslinfo" value="/SSLINFO [nick]
+Shows the SSL key fingerprint for the user if they have an SSL
+client key.">
+
+<helpop key="fingerprint" value="/FINGERPRINT [nick]
+Shows the SSL fingerprint of a user.">
+
+<helpop key="uninvite" value="/UNINVITE [nick] [channel]
+Uninvite a user from a channel, same syntax as INVITE.">
+
+<helpop key="tban" value="/TBAN [channel] [duration] [banmask]
+Sets a timed ban. The duration of the ban can be specified in the
+following format: 1w2d3h4m6s which indicates a ban of one week, two
+days, three hours, four minutes and six seconds. Alternatively the
+ban may just be specified as a number of seconds. All timed bans
+appear in the banlist as normal bans and may be safely removed
+before their time is up.">
+
+<helpop key="dccallow" value="/DCCALLOW [+|-] [nick] [duration]
+Add a nickname to or delete a nickname from your DCCALLOW list.">
+
+<helpop key="cycle" value="/CYCLE [channel]
+Cycles a channel (Leaving and Rejoining), overrides restrictions that
+would stop a new user joining, such as User Limits and Channel Keys.">
+
+<helpop key="title" value="/TITLE [name] [password]
+Adds a WHOIS title line and optionally sets a VHOST depending
+on username and password.">
+
+<helpop key="watch" value="/WATCH [C|S|+/-[NICK]]
+Adds or deletes a user from the watch list. C clears the list
+and S queries the status.">
+
+<helpop key="vhost" value="/VHOST [username] [password]
+Authenticate for a vhost.">
+
+<helpop key="remove" value="/REMOVE [channel] [nick] {[reason]}
+Removes a user from a channel you specify. You must be at least a
+channel halfoperator to remove a user. A removed user will part with
+a message stating they were removed from the channel and by whom.">
+
+<helpop key="fpart" value="/FPART [nick] [channel] {[reason]}
+This behaves identically to /REMOVE, the only difference is that that
+[channel] and [nick] parameters are switched around to match /KICK's
+syntax. Also, /REMOVE is a builtin mIRC command which caused trouble
+for some users. This feature was added in the 1.1 branch.">
+
+<helpop key="devoice" value="/DEVOICE [channel]
+Devoices yourself from the specified channel.">
+
+<helpop key="silence" value="/SILENCE [+/-]<hostmask> [p|c|i|n|t|a|x]
+ p Block private messages
+ c Block channel messages
+ i Block invites
+ n Block private notices
+ t Block channel notices
+ a Block all of the above
+ x Exception
+A serverside /ignore of the given hostmask.
+/SILENCE without a parameter will list the hostmasks that you have silenced.">
+
+<helpop key="knock" value="/KNOCK [channel]
+Sends a notice to a channel indicating you wish to join.">
+
+<helpop key="user" value="/USER [ident] [local host] [remote host] :[GECOS]
+This command is used by your client to register your irc session.
+You should not use it during an established connection.">
+
+<helpop key="nick" value="/NICK [new nick]
+Change your nickname to [new nick].">
+
+<helpop key="quit" value="/QUIT {[reason]}
+Quit from IRC and end your current session.">
+
+<helpop key="version" value="/VERSION
+Returns the server's version number.">
+
+<helpop key="ping" value="/PING [server]
+Ping a server. Target server will answer with a PONG.">
+
+<helpop key="pong" value="/PONG [server]
+Your client should send this to answer server PINGs. You
+should not issue this command manually.">
+
+<helpop key="admin" value="/ADMIN [server]
+Fetches the administrative information on the given server.">
+
+<helpop key="privmsg" value="/MSG [target] [text]
+Sends a message to a user or channel specified in [target].">
+
+<helpop key="notice" value="/NOTICE [target] [text]
+Sends a notice to a user or channel specified in [target].">
+
+<helpop key="join" value="/JOIN [channel]{,[channel]} [key]{,[key]}
+Joins one or more channels you provide the names for.">
+
+<helpop key="names" value="/NAMES [channel]{,[channel]}
+Return a list of users on the channels you provide.">
+
+<helpop key="part" value="/PART [channel]{,[channel] [reason]}
+Leaves one or more channels you specify.">
+
+<helpop key="kick" value="/KICK [channel] [nick] {[reason]}
+Kicks a user from a channel you specify. You must be
+At least a channel halfoperator to kick a user.">
+
+<helpop key="mode" value="/MODE [target] [+|-][modes]{[+|-][modes]} {mode parameters}
+Sets the mode for a channel or a nickname specified in [target]
+A user may only set modes upon themselves, and may not set the
++o usermode, and a user may only change channel modes of
+channels where they are at least a halfoperator.">
+
+<helpop key="topic" value="/TOPIC [channel] {topic}
+Sets or retrieves the channel topic. If a channel topic is
+given in the command and the channel is either not +t, or
+You are at least a halfoperator, the channel topic will be
+changed to the new one you provide.">
+
+<helpop key="who" value="/WHO [ [search-pattern] [ohurmaiMplf] ]
+Looks up the information of users matching the range you provide.
+You may only /WHO nicknames in channels or on servers where you
+share a common channel with them, or ones which are not +i (unless
+you are an IRC operator). The search-pattern may be a special
+sequence of characters determined by the flags given below, or
+it may be one of a nickname, a channel, a hostmask, an ip address
+mask or a server mask.
+-
+Valid WHO flags
+---------------
+The following flags after the mask have the following affects:
+-
+ o Show online IRC operators matching the mask
+ u Unlimit the results past the maximum /who results value
+ (IRC operators only)
+ r Show all users whose realnames match the mask. When this
+ flag is set it overrides the meaning of the search-pattern,
+ which must contain a glob pattern intended to match GECOS
+ (realname) fields.
+ h Show real hostnames rather than masked hostnames (IRC
+ operators only)
+ m Search for all users with a given set of user modes. When
+ this flag is set it overrides the meaning of the
+ search-pattern, which must contain the mode sequence to
+ search for, for example to find all users with +i and
+ without +s, issue the command WHO +i-s m.
+ a Show all users who have an away message matching the given mask
+ p Show all users who are connected on the given port number
+ i Show all users who have an ident (username) matching the given mask
+ M Show all users who have metadata attached to them with
+ the given key name
+ l Show only local users
+ f Show only remote (far) users
+-
+You may combine multiple flags in one WHO command except where stated in the table above.">
+
+<helpop key="motd" value="/MOTD [server]
+Show the message of the day for [server]. Messages of the
+day contain important server rules and notice and should be
+read before using a server in any way!">
+
+<helpop key="rules" value="/RULES
+Show the rules file for the local server. This is similar in
+effect to /MOTD except that rules are optional. All users are
+sent the MOTD when they connect without having to request it.">
+
+<helpop key="oper" value="/OPER [login] [password]
+Attempts to authenticate a user as an IRC operator.
+Please be aware that both successful and unsuccessful oper attempts
+are logged, and sent to online IRC operators.">
+
+<helpop key="list" value="/LIST [pattern]
+Creates a list of all existing channels matching the glob pattern
+[pattern], e.g. *chat* or bot*.">
+
+<helpop key="lusers" value="/LUSERS
+Shows a count of local and remote users, servers and channels.">
+
+<helpop key="userhost" value="/USERHOST [nickname]
+Returns the hostname and nickname of a user, and some other
+miscellaneous information.">
+
+<helpop key="away" value="/AWAY {message}
+If a message is given, marks you as being away, otherwise
+removes your away status and previous message.">
+
+<helpop key="ison" value="/ISON [nick] {[nick]...}
+Returns a subset of the nicks you give, showing only those
+that are currently online.">
+
+<helpop key="summon" value="/SUMMON [user]
+Summons a user from the shell where the ircd is running onto irc
+This command is deprecated in the current protocol.">
+
+<helpop key="users" value="/USERS
+Shows users logged into the shell where the ircd is running.
+This command is deprecated in the current protocol.">
+
+<helpop key="invite" value="/INVITE [nick] [channel]
+Invites a user to a channel. If the channel is NOT +i, any
+user, channel op or not, may invite any other user to the
+channel, so long as they are a member of that channel.
+Otherwise, if +i is set only channel halfoperators
+and above may invite users into the channel.">
+
+<helpop key="pass" value="/PASS [password]
+This command is used by your irc client when setting up
+your irc session, and should not be issued by a fully
+connected client.">
+
+<helpop key="whowas" value="/WHOWAS [nick]
+Returns a list of times the user was last seen on irc
+along with the time they were last seen and their server.">
+
+<helpop key="links" value="/LINKS
+Shows all servers linked to this one. Note that in this
+server implementation all links will be flattened as
+a tree based layout is not in use.">
+
+<helpop key="map" value="/MAP
+Shows a graphical representation of all users and servers
+on the network. The tree diagram is inaccurate in this
+implementation as a tree based network is not in place.">
+
+#####################
+# Oper Commands #
+#####################
+
+<helpop key="coper" value="Oper Commands
+-------------
+DIE RESTART KILL REHASH TRACE
+CONNECT SQUIT MODULES MKPASSWD SHUN
+KLINE QLINE GLINE ELINE ZLINE
+SAJOIN SAPART SAMODE SAQUIT SANICK
+SETIDLE SETHOST SETNAME SETIDENT SWHOIS
+OPERMOTD CHGHOST CHGNAME CHGIDENT CBAN
+NICKLOCK NICKUNLOCK LOADMODULE UNLOADMODULE RELOADMODULE
+SPYLIST SPYNAMES GLOADMODULE GUNLOADMODULE GRELOADMODULE
+FREEZE UNFREEZE OPERPERMS RCONNECT RSQUIT
+CHECK CLONES FILTER GLOBOPS USERIP
+JUMPSERVER LOCKSERV UNLOCKSERV ALLTIME TAXONOMY
+TLINE">
+
+<helpop key="userip" value="/USERIP [nickname]
+Returns the ip and nickname of a user.">
+
+<helpop key="tline" value="/TLINE [host or ip mask]
+This command returns the number of local and global clients matched,
+and the percentage of clients matched, plus how they were matched
+(by IP address or by hostname).">
+
+<helpop key="taxonomy" value="/TAXONOMY [nick]
+Lists all metadata attached to the user.">
+
+<helpop key="lockserv" value="/LOCKSERV
+Locks out all new connections notifying connecting users that the
+service is temporarily closed and to try again later.">
+
+<helpop key="unlockserv" value="/UNLOCKSERV
+Opens the server up again for new connections.">
+
+<helpop key="jumpserver" value="/JUMPSERVER {[newserver] [newport] [+/-flags] {:[reason]}}
+Sets or cancels jumpserver mode. If no parameters are given,
+jumpserver mode is cancelled, if it is currently set. If parameters
+are given, a server address must be given for [newserver] and a
+server port must be given for [newport]. Zero or more status flags
+should be given for 'flags', from the list below (if you do not
+wish to specify any flags just place a '+' in this field):
+1. +a: Redirect all users immediately (except for opers) and cause
+them to quit with the given reason
+2. +n: Redirect any new users who connect and cause them to quit
+during registration
+You may use + and - to set or unset these flags in the command, the
+default flags are -a+n, which will just redirect new users. The
+reason parameter is optional, and if not provided defaults to
+'Please use this server/port instead' (the default given in various
+numeric lists)">
+
+<helpop key="filter" value="/FILTER [filter-definition] {[action] [flags] {[gline-duration]} :[reason]}
+This command will add a filter when more than one parameter is
+given, using the specified filter definition, action, gline
+duration (when the type is 'gline') and reason. When only one
+parameter is provided (the filter pattern) the provided filter will
+be removed. Note that if you remove a configuration-defined filter,
+it will re-appear at next rehash unless it is also removed from the
+config file.">
+
+<helpop key="clones" value="/CLONES [limit]
+Retrieves a list of users with more clones than the specified
+limit.">
+
+<helpop key="check" value="/CHECK [nick|ip|hostmask|channel]
+Allows opers to look up advanced information on channels, hostmasks
+or IP addresses, in a similar way to WHO but in more detail.">
+
+<helpop key="alltime" value="/ALLTIME
+Shows the time (with any delta, if applied) on all servers on
+the network.">
+
+<helpop key="rconnect" value="/RCONNECT [source mask] [target mask]
+All servers matching [source mask] will try to connect to
+the first server in the config file matching [target mask].">
+
+<helpop key="rsquit" value="/RSQUIT {[source mask]} [target mask]
+Causes the remote server [target mask] to be disconnected from
+the network, by [source mask] if specified.">
+
+<helpop key="operperms" value="/OPERPERMS [nick]
+List all commands an oper has access to use.">
+
+<helpop key="freeze" value="/FREEZE [nick]
+Prevents the user from sending commands until they reconnect.
+User is also notified they have been frozen.">
+
+<helpop key="unfreeze" value="/UNFREEZE [nick]
+Unfreezes a user frozen by the /FREEZE command.">
+
+<helpop key="spylist" value="/SPYLIST
+Operates the same as /LIST but includes +s and +p channels.">
+
+<helpop key="spynames" value="/SPYNAMES [channel]
+Operates the same as /name but works on +s and +p channels.">
+
+<helpop key="globops" value="/GLOBOPS [message]
+Sends a message to all +g users.">
+
+<helpop key="cban" value="/CBAN [channel] {[duration] :[reason]}
+Sets or removes a channel ban. You must specify at least
+3 parameters to add a ban, and one parameter to remove a ban.
+The duration may be specified in seconds, or in the following format
+1y2w3d4h5m6s - meaning one year, two weeks, three days, 4 hours,
+5 minutes and 6 seconds. All fields in this format are optional.">
+
+<helpop key="sajoin" value="/SAJOIN [nick] [channel]
+Forces the user to join the channel.">
+
+<helpop key="sapart" value="/SAPART [nick] [channel]
+Forces the user to part the channel.">
+
+<helpop key="samode" value="/SAMODE [#chan] +/-[modes] {[parameters for modes]}
+Gives the channel or nick the modes specified.">
+
+<helpop key="sanick" value="/SANICK [nick] [new nick]
+Changes the users nick to the new nick.">
+
+<helpop key="saquit" value="/SAQUIT [nick] [reason]
+Forces user to quit with the specified reason.">
+
+<helpop key="setidle" value="/SETIDLE [idle time]
+Sets your idle time (in seconds).">
+
+<helpop key="sethost" value="/SETHOST [host]
+Sets your host to the specified host.">
+
+<helpop key="setident" value="/SETIDENT [ident]
+Sets your ident to the specified ident.">
+
+<helpop key="setname" value="/SETNAME [name]
+Sets your name to the specified name.">
+
+<helpop key="swhois" line="/SWHOIS [nick] [swhois]
+Sets the users swhois field to the given swhois.">
+
+<helpop key="mkpasswd" value="/MKPASSWD [hashtype] [plaintext]
+Encodes the plaintext to a hash of the given type and displays
+the result.">
+
+<helpop key="opermotd" value="/OPERMOTD
+Re-displays the Oper MOTD.">
+
+<helpop key="nicklock" value="/NICKLOCK [nick] [new nick]
+Changes user's nick to the new nick, and forces
+it to remain as such for the remainder of the session.">
+
+<helpop key="nickunlock" value="/NICKUNLOCK [nick]
+Allows the user to change nicks.">
+
+<helpop key="chghost" value="/CHGHOST [nickname] [new hostname]
+Changes the hostname of the user to the new hostname.">
+
+<helpop key="chgname" value="/CHGNAME [nickname] [new name]
+Changes the name of the user to the new name.">
+
+<helpop key="chgident" value="/CHGIDENT [nickname] [new ident]
+Changes the ident of the user to the new ident.">
+
+<helpop key="shun" value="/SHUN [user@host] {[duration] :[reason]}
+Sets or removes a shun (serverside ignore) on a host and ident mask.
+You must specify at least 3 parameters to add a shun, and one
+parameter to remove a shun (just the user@host section).
+The duration may be specified in seconds, or in the following format
+1y2w3d4h5m6s - meaning one year, two weeks, three days, 4 hours,
+5 minutes and 6 seconds. All fields in this format are optional.">
+
+<helpop key="die" value="/DIE [password]
+If the correct password is provided, and you are an operator,
+This command will shut down the local server.">
+
+<helpop key="restart" value="/RESTART [password]
+If the correct password is provided, and you are an operator,
+This command will restart the local server.">
+
+<helpop key="commands" value="/COMMANDS
+Shows all currently available commands.">
+
+<helpop key="kill" value="/KILL [user] [reason]
+This command will disconnect a user from IRC with the given reason.">
+
+<helpop key="rehash" value="/REHASH
+This command will cause the server configuration file to be
+re-read and values re-initialized.">
+
+<helpop key="trace" value="/TRACE [nick|user@host|servermask]
+This command will provide a list of all users and servers which
+must be passed through or over to reach a given object (server or user).">
+
+<helpop key="connect" value="/CONNECT [servermask]
+Create a mesh connection to the given servermask. You must have
+configured the server for linking in your configuration file,
+and provided a password.">
+
+<helpop key="squit" value="/SQUIT [servermask]
+Disconnects the local server from the mesh network, causing every
+other server in the network to drop it.">
+
+<helpop key="modules" value="/MODULES
+Lists currently loaded modules, their memory offsets and version
+numbers and flags. If you are not an operator, you will see reduced
+detail.">
+
+<helpop key="loadmodule" value="/LOADMODULE [filename.so]
+Loads a module into the IRCd.">
+
+<helpop key="unloadmodule" value="/UNLOADMODULE [filename.so]
+Unloads a module from the IRCd. The module cannot have the static
+flag set (see the output of /MODULES).">
+
+<helpop key="reloadmodule" value="/RELOADMODULE [filename.so]
+Unloads and reloads a module in the IRCd. This module cannot have
+the static flag set (see the output of /MODULES).">
+
+<helpop key="gloadmodule" value="/GLOADMODULE [filename.so]
+Globally loads a module into the network.">
+
+<helpop key="gunloadmodule" value="/GUNLOADMODULE [filename.so]
+Globally unloads a module from the network. The module cannot
+have the static flag set (see the output of /MODULES).">
+
+<helpop key="greloadmodule" value="/GRELOADMODULE [filename.so]
+Globally unloads and reloads a module in the network. This module
+cannot have the static flag set (see the output of /MODULES).">
+
+<helpop key="kline" value="/KLINE [user@host] {[duration] :[reason]}
+Sets or removes a k-line (host based ban) on a host and ident mask.
+You must specify at least 3 parameters to add a ban, and one
+parameter to remove a ban (just the user@host section).
+The duration may be specified in seconds, or in the following format
+1y2w3d4h5m6s - meaning one year, two weeks, three days, 4 hours,
+5 minutes and 6 seconds. All fields in this format are optional.">
+
+<helpop key="zline" value="/ZLINE [ipmask] {[duration] :[reason]}
+Sets or removes a z-line (ip based ban) on an ip range mask.
+You must specify at least 3 parameters to add a ban, and one
+parameter to remove a ban (just the user@host section).
+The duration may be specified in seconds, or in the following format
+1y2w3d4h5m6s - meaning one year, two weeks, three days, 4 hours,
+5 minutes and 6 seconds. All fields in this format are optional.">
+
+<helpop key="qline" value="/QLINE [nickmask] {[duration] :[reason]}
+Sets or removes a q-line (nick based ban) on a nick mask.
+You must specify at least 3 parameters to add a ban, and one
+parameter to remove a ban (just the user@host section).
+The duration may be specified in seconds, or in the following format
+1y2w3d4h5m6s - meaning one year, two weeks, three days, 4 hours,
+5 minutes and 6 seconds. All fields in this format are optional.">
+
+<helpop key="gline" value="/GLINE [user@host] {[duration] :[reason]}
+Sets or removes a g-line (global host based ban) on host mask.
+You must specify at least 3 parameters to add a ban, and one
+parameter to remove a ban (just the user@host section).
+The duration may be specified in seconds, or in the following format
+1y2w3d4h5m6s - meaning one year, two weeks, three days, 4 hours,
+5 minutes and 6 seconds. All fields in this format are optional.">
+
+<helpop key="eline" value="/ELINE [user@host] {[duration] :[reason]}
+Sets or removes a e-line (local ban exception) on host mask.
+You must specify at least 3 parameters to add an exception, and one
+parameter to remove an exception (just the user@host section).
+The duration may be specified in seconds, or in the following format
+1y2w3d4h5m6s - meaning one year, two weeks, three days, 4 hours,
+5 minutes and 6 seconds. All fields in this format are optional.">
+
+######################
+# User/Channel Modes #
+######################
+
+<helpop key="umodes" value="User Modes
+----------
+o Is an IRC operator
+i Is invisible to /WHO
+w Can receive wallops messages
+s Can receive server notices
+n [mask] Can receive server notices specified by [mask]
+x Cloaked hostname (requires cloaking module)
+h Will receive helpops notification (requires helpop module)
+r Nickname is registered
+d Hides all non-private messages and notices
+B Is a bot
+G Messages are censored to user
+W Can see when a user uses WHOIS on them
+S mIRC colour codes are stripped to the user
+D User can not receive PRIVMSGs
+H Hides an oper's WHOIS line
+I Hides a user's channel list from non-opers
+Q Hides an oper completely
+R Only registered users can message you">
+
+<helpop key="chmodes" value="Channel Modes
+-------------
+v [nickname] Gives voice to [nickname] (can talk on +m channel)
+h [nickname] Gives halfops to [nickname]
+o [nickname] Gives ops to [nickname]
+b [hostmask] Bans [hostmask] on the channel
+a [nickname] Give protected status to [nickname] (+q only)
+q [nickname] Give founder status to [nickname] (ulines only)
+i Make the channel invite only, must /INVITE users
+k [key] Set the channel key (password) to [key]
+l [limit] Set the maximum possible users to [limit]
+m Enable moderation. Only +vo(h) can speak
+n Only users who are members of the channel may message it
+p Make channel private (hide from /LIST)
+s Make channel secret (can't be used at the same time as +p)
+O Channel is IRCops only (can only be set by IRCops)
+t Only halfops and above can change the topic
+Q Only U-Lined servers/nicks can kick
+T Only halfops/ops can send NOTICEs to the channel
+C No CTCPs allowed to the channel
+c mIRC colour codes blocked on the channel
+S mIRC colour codes are stripped from the channel
+e [hostmask] Ban exception on [hostmask]
+K No /KNOCK allowed to channel
+L [channel] If the channel is full, redirect users to [channel]
+N No nick changes while on the channel
+G Censors channel based on network censor config
+g [word] All messages containing the word are blocked
+I [hostmask] Invite exception allows user to join a channel with +i
+j [joins]:[sec] Prevents join flooding
+J [seconds] Prevents auto-rejoin on kick
+f [*][lines]:[sec] Kick on text flood. With * user is banned
+V No invites allowed
+r Channel is registered
+R Only registered users can join
+M Non-registered users can't chat
+z SSL clients only
+x Join exception mask. Avoids +ibkO
+-------------
+NOTE: A large number of these modes are dependent upon server-side modules
+being loaded by a server/network administrator. The actual modes available
+on your network may be very different to this list. Please consult your
+help channel if you have any questions.">
+
+######################
+# Stats Symbols #
+######################
+
+<helpop key="stats" value="/STATS [symbol]
+Shows various server statistics. Depending on configuration this
+command may be reserved for oper-only use.
+-
+Valid symbols are:
+-
+m Show command statistics, number of times commands have been used
+z Show memory usage statistics
+o Show a list of all valid oper usernames and hostmasks
+l Show all inbound and outbound server and client connections
+u Show server uptime
+k Show k-lines (local bans)
+g Show g-lines (global bans)
+q Show q-lines (nick mask bans)
+Z Show z-lines (ip mask bans)
+Y Show connection classes
+c Show link blocks
+U Show u-lined servers
+P Show online opers and their idle times
+I Show connect class permissions
+e Show e-lines (local ban exemptions)
+C Show channel bans
+s Show filters
+L Show all client connections with information and IP address
+T Show bandwidth/socket statistics
+p Show open client ports, and the port type (ssl, plaintext, etc) plus number of users on each port
+-
+Note that all /STATS use is broadcast to online IRC operators.">
+
diff --git a/config-src/inspircd.modules b/config-src/inspircd.modules
new file mode 100644
index 0000000..f3eb0f4
--- /dev/null
+++ b/config-src/inspircd.modules
@@ -0,0 +1,83 @@
+## Modules ##
+
+<module name="m_ssl_gnutls.so">
+<module name="m_spanningtree.so">
+<module name="m_md5.so">
+<module name="m_sha256.so">
+<module name="m_alltime.so">
+<module name="m_banexception.so">
+<module name="m_banredirect.so">
+<module name="m_botmode.so">
+<module name="m_censor.so">
+<module name="m_chanprotect.so">
+<module name="m_halfop.so">
+<module name="m_chghost.so">
+<module name="m_chgname.so">
+<module name="m_chgident.so">
+<module name="m_cloaking.so">
+<module name="m_conn_umodes.so">
+<module name="m_dnsbl.so"> #
+<module name="m_globops.so">
+<module name="m_helpop.so">
+<module name="m_hidechans.so">
+<module name="m_hideoper.so">
+<module name="m_joinflood.so">
+<module name="m_kicknorejoin.so">
+<module name="m_knock.so">
+<module name="m_namesx.so">
+<module name="m_noctcp.so">
+<module name="m_nokicks.so">
+<module name="m_nonotice.so">
+<module name="m_operchans.so">
+<module name="m_password_hash.so">
+<module name="m_operlevels.so">
+<module name="m_opermodes.so">
+<module name="m_override.so">
+<module name="m_redirect.so">
+<module name="m_sajoin.so">
+<module name="m_samode.so">
+<module name="m_sanick.so">
+<module name="m_sapart.so">
+<module name="m_securelist.so">
+<module name="m_services_account.so">
+<module name="m_showwhois.so">
+<module name="m_svshold.so">
+<module name="m_tline.so">
+<module name="m_alias.so">
+<module name="m_close.so">
+<module name="m_nickflood.so">
+<module name="m_auditorium.so">
+<module name="m_inviteexception.so">
+<module name="m_blockcolor.so">
+<module name="m_cban.so">
+<module name="m_chancreate.so">
+<module name="m_chanfilter.so">
+<module name="m_blockcaps.so">
+<module name="m_commonchans.so">
+<module name="m_cycle.so">
+<module name="m_deaf.so">
+<module name="m_denychans.so">
+<module name="m_devoice.so">
+<module name="m_messageflood.so">
+<module name="m_nicklock.so">
+<module name="m_nonicks.so">
+<module name="m_operjoin.so">
+<module name="m_remove.so">
+<module name="m_seenicks.so">
+<module name="m_swhois.so">
+<module name="m_uninvite.so">
+<module name="m_allowinvite.so">
+<module name="m_autoop.so">
+<module name="m_exemptchanops.so">
+<module name="m_permchannels.so">
+<module name="m_sslmodes.so">
+<module name="m_ojoin.so">
+<module name="m_shun.so">
+<module name="m_watch.so">
+<module name="m_silence.so">
+<module name="m_uhnames.so">
+<module name="m_cap.so">
+<module name="m_timedbans.so">
+<module name="m_ircv3.so">
+<module name="m_sslinfo.so">
+<module name="m_cgiirc.so">
diff --git a/config-src/inspircd.motd b/config-src/inspircd.motd
new file mode 100644
index 0000000..581704f
--- /dev/null
+++ b/config-src/inspircd.motd
@@ -0,0 +1,60 @@
+ _____ _ _____ _____ _____
+|_ _| (_) |_ _| __ \ / ____|
+ | | _ __ ___ ___ _ __ ___ _ __ _ __ _ | | | |__) | |
+ | | | '_ \/ __|/ _ \| '_ ` _ \| '_ \| |/ _` | | | | _ /| |
+ _| |_| | | \__ \ (_) | | | | | | | | | | (_| |_| |_| | \ \| |____
+|_____|_| |_|___/\___/|_| |_| |_|_| |_|_|\__,_|_____|_| \_\\_____|
+
+Welcome to the InsomniaIRC Network! Your host is Hippocrates.
+
+We would like to point out that we are not an "XDCC Network" ...
+XDCC bots and/or bottlers are forbidden on this network.
+
+InsomniaIRC Round Robins:
+ irc.insomniairc.net/6667 (Normal IRC)
+ irc.insomniairc.net/6697 (SSL Server)
+
+We Currently Have Two User Servers:
+ Hypocrisy.InsomniaIRC.net (IPv4, IPv6, SSL (broken IPv6))
+ Hippocrates.InsomniaIRC.net (IPv4, IPv6, SSL)
+
+:: While you can connect to a specific server, we recommend using the
+ round robin
+
+Some of Our Most Active Channels Include:
+ * #chat - General Chat Channel - All Welcome.
+ * #gay - Unofficial chat channel for /r/gay of Reddit.com
+
+Our official Network Help Channel: #help
+
+We Have Three Simple Expectations
+ 1. Respect All Users - Treat them as they want to be treated in hopes
+ that they treat you as you want to be treated.
+ 2. Threating to DDoS, Hack, etc is lame; don't do it.
+ 3. Impersonating users also falls into the lame catagory.
+
+:: NOTICE: Upon connecting, you will be scanned by our open proxy monitor.
+ You acknowledge this by connecting to our network.
+
+:: Please remember that use of this network is a privlege which can be
+ terminated at any time.
+
+:: Lame stuff is generally ill-advised and chances are you will be banned.
+
+:: Problems? Below are four people you can go to !!
+ jesterpm (jesterpm@InsomniaIRC.net)
+ Suspect (Suspect@InsomniaIRC.net)
+ Weyoun (Weyoun@InsomniaIRC.net)
+ Jonbo (Jonbo@InsomniaIRC.net)
+
+Or you can email ircops@InsomniaIRC.net
+
+
+ _____..---========+*+==========---.._____
+ ______________________ __,-='=====____ =================== _____=====`=
+ (._____________________I__) - _-=_/ `---------=+=--------'
+ / /__...---===='---+---_'
+ '------'---.___ - _ = _.-' * * * *
+ `--------'
+ Src: chris.com
+*********************************************
diff --git a/config-src/inspircd.netwide.erb b/config-src/inspircd.netwide.erb
new file mode 100644
index 0000000..93dd937
--- /dev/null
+++ b/config-src/inspircd.netwide.erb
@@ -0,0 +1,111 @@
+#
+# Network Wide Configuration ##
+#
+
+# U:Lines
+<uline server="services.insomniairc.net" silent="yes">
+<uline server="defender.insomniairc.net" silent="yes">
+
+# Misc. settings.
+<insane hostmasks="no" ipmasks="no" nickmasks="no" trigger="95.5">
+
+<channels users="20" opers="60">
+
+<whowas groupsize="10" maxgroups="100000" maxkeep="3d">
+
+<shun enabledcommands="PING PONG JOIN PART NICK QUIT" notifyuser="no">
+
+<ojoin prefix="!" notice="yes" op="yes">
+
+<blockcaps percent="80"
+ minlen="6"
+ capsmap="ABCDEFGHIJKLMNOPQRSTUVWXYZ! ">
+
+<security operspywhois="yes"
+ customversion=""
+ hidebans="no"
+ restrictbannedusers="yes"
+ hidewhois=""
+ hidesplits="no"
+ flatlinks="no"
+ hideulines="no"
+ userstats="Pu"
+ hidemodes="eI">
+
+<chanprotect noservices="yes"
+ qprefix="~"
+ aprefix="&"
+ deprotectself="yes"
+ deprotectothers="yes">
+
+<options prefixquit="Quit: "
+ pingwarning="30"
+ serverpingfreq="120"
+ allowhalfop="yes"
+ defaultmodes="nt"
+ hostintopic="no"
+ syntaxhints="yes"
+ cyclehosts="yes"
+ ircumsgprefix="no"
+ announcets="yes"
+ moronbanner="You have been banned. E-mail ircops@insomniairc.net with the error below for assistance."
+ exemptchanops="no">
+
+<performance netbuffersize="10240"
+ maxwho="128"
+ somaxconn="128"
+ softlimit="12800"
+ nouserdns="no"
+ quietbursts="yes">
+
+# Die/Restart Passwords
+<power diepass="<%= secret :diepass %>"
+ restartpass="<%= secret :restartpass %>"
+ pause="2">
+
+# Trigger a part/join in all channels when a hostname changes.
+<options cyclehosts="no">
+
+# We run NTP everywhere.
+<timesync enable="no" master="no">
+
+# Ban List Limits
+<banlist chan="*" limit="69">
+
+# Cloak Keys
+<cloak key="<%= secret :cloak0 %>"
+ key1="<%= secret :cloak1 %>"
+ key2="<%= secret :cloak2 %>"
+ key3="<%= secret :cloak3 %>"
+ key4="<%= secret :cloak4 %>"
+ prefix="Insomniac-"
+ ipalways="false"
+ lowercase="false"
+ mode="half">
+
+# Blacklists
+<dnsbl name="Tor sectoor.de"
+ type="bitmask"
+ domain="tor.dnsbl.sectoor.de"
+ action="GLINE"
+ reason="Tor exit server detected. Please visit http://www.sectoor.de/tor.php?ip=%ip% for more information."
+ duration="1h"
+ bitmask="1">
+
+<dnsbl name="DroneBL"
+ type="bitmask"
+ domain="dnsbl.dronebl.org"
+ action="GLINE"
+ reason="You are listed in DroneBL. Please visit http://dronebl.org/lookup.do?ip=%ip% "
+ duration="1h"
+ bitmask="253">
+
+<dnsbl
+ name="EFnet RBL"
+ type="record"
+ domain="rbl.efnetrbl.org"
+ action="ZLINE"
+ reason="You are listed in the EFnet RBL and have been banned from InsomniaIRC. See http://efnetrbl.org for more information."
+ duration="3d"
+ records="1-5">
+
diff --git a/config-src/inspircd.opers.erb b/config-src/inspircd.opers.erb
new file mode 100644
index 0000000..ddb3786
--- /dev/null
+++ b/config-src/inspircd.opers.erb
@@ -0,0 +1,44 @@
+#
+# IRCOP Definitions.
+#
+
+#
+# Oper Classes
+#
+<class name="FullControl" commands="*" privs="*" usermodes="*" channelmodes="*">
+<class name="Shutdown" commands="DIE RESTART REHASH LOADMODULE UNLOADMODULE RELOAD">
+<class name="ServerLink" commands="CONNECT SQUIT RCONNECT MKPASSWD MKSHA256">
+<class name="BanControl" commands="KILL GLINE KLINE ZLINE QLINE ELINE">
+<class name="IRCOpClass" commands="OPER CHGNAME" usermodes="s" channelmodes="O">
+<class name="OperChat" commands="WALLOPS GLOBOPS SETIDLE SPYLIST SPYNAMES">
+<class name="HostCloak" commands="SETHOST SETIDENT SETNAME CHGHOST CHGIDENT">
+<override noisy="yes" requirekey="no">
+
+#
+# Oper types.
+#
+<type name="NetAdmin"
+ classes="FullControl"
+ host="NetAdmin.InsomniaIRC.net"
+ modes="+s +AaCcQqkKLlOodxtf"
+ override="*">
+
+<type name="GlobalOp"
+ classes="OperChat BanControl HostCloak ServerLink IRCOpClass"
+ host="IRCOp.InsomniaIRC.net"
+ modes="+s +AaCcQqkKLlOodxtf">
+
+<type name="Helper"
+ classes="HostCloak"
+ host="Helper.InsomniaIRC.net">
+
+#
+# o:lines
+#
+<% opers.each do |oper| %>
+<oper name="<%= oper['name'] %>"
+ hash="<%= oper['hash'] %>"
+ password="<%= oper['password'] %>"
+ host="*@*"
+ type="<%= oper['type'] %>">
+<% end %>
diff --git a/config-src/inspircd.rules b/config-src/inspircd.rules
new file mode 100644
index 0000000..2a70fc6
--- /dev/null
+++ b/config-src/inspircd.rules
@@ -0,0 +1,5 @@
+* We Have Three Simple Expectations
+ 1. Respect All Users - Treat them as they want to be treated in hopes
+ that they treat you as you want to be treated.
+ 2. Threating to DDoS, Hack, etc is lame; don't do it.
+ 3. Impersonating users also falls into the lame catagory. \ No newline at end of file
diff --git a/config-src/inspircd.servspecific.erb b/config-src/inspircd.servspecific.erb
new file mode 100644
index 0000000..71605dc
--- /dev/null
+++ b/config-src/inspircd.servspecific.erb
@@ -0,0 +1,70 @@
+#
+# Server Specific Config
+#
+# This template is used to generate the server specific bits of the config.
+#
+
+#
+# Server Description
+#
+<server name="<%= hostname %>"
+ description="The InsomniaIRC Network"
+ network="InsomniaIRC">
+
+#
+# Admin Information
+#
+<admin name="<%= server.admin['name'] %>"
+ nick="<%= server.admin['nick'] %>"
+ email="<%= server.admin['email'] %>">
+
+#
+# Binds
+#
+<bind address="*" port="6667" type="clients">
+<bind address="*" port="6697" type="clients" ssl="gnutls">
+<bind address="*" port="6663" type="servers">
+<bind address="*" port="6664" type="servers" ssl="gnutls">
+
+<gnutls cafile="ca.pem"
+ certcount="4"
+ certfile="conf/irc.crt"
+ crlfile="crl.pem"
+ dh_bits="1024"
+ keyfile="conf/irc.key">
+
+<dns server="8.8.8.8" timeout="5">
+
+#
+# Connection Settings
+#
+<connect allow="*"
+ flood="20"
+ globalmax="10"
+ localmax="10"
+ modes="+ixw"
+ pingfreq="120"
+ recvq="8192"
+ sendq="262144"
+ threshold="1"
+ timeout="60">
+
+#
+# Link Configuration
+#
+<% server.links.each do |link| %>
+<link name="<%= link['hostname'] %>"
+ ipaddr="<%= link['ipddr'].nil? ? Resolv.getaddress(link['hostname']) : link['ip'] %>"
+ port="<%= link['port'].nil? ? 6664 : link['port'] %>"
+ ssl="gnutls"
+ bind="<%= link['bind'].nil? ? Resolv.getaddress(hostname) : link['bind'] %>"
+ statshidden="no"
+ hidden="no"
+ sendpass="<%= secret link['hostname'] %>"
+ recvpass="<%= secret hostname %>">
+<% end %>
+
+<% if !hostname.nil? && File.file?("servers/#{hostname}") %>
+ <%= ERB.new(File.read("config-src/servers/#{hostname}")).result(binding) %>
+<% end %>
+
diff --git a/insomniaircd_conf.gemspec b/insomniaircd_conf.gemspec
new file mode 100644
index 0000000..39c3df2
--- /dev/null
+++ b/insomniaircd_conf.gemspec
@@ -0,0 +1,15 @@
+require 'rake'
+
+Gem::Specification.new do |s|
+ s.name = 'insomniaircd_conf'
+ s.version = '1.0.0'
+ s.date = '2015-01-17'
+ s.summary = "InsomniaIRC IRC Configs"
+ s.description = "Config generation logic for Insnomnia IRC."
+ s.authors = ["Jesse Morgan"]
+ s.email = 'jesterpm@insomniairc.net'
+ s.require_paths = ["lib"]
+ s.files = FileList['lib/*.rb'].to_a
+ s.homepage = 'https://github.com/insomniairc/insomniaircd_conf'
+ s.license = 'MIT'
+end
diff --git a/network.yaml b/network.yaml
new file mode 100644
index 0000000..a363b23
--- /dev/null
+++ b/network.yaml
@@ -0,0 +1,57 @@
+---
+servers:
+ hypocrisy.insomniairc.net:
+ admin:
+ name: Jesse Morgan
+ nick: jesterpm
+ email: jesterpm@insomniairc.net
+ links:
+ - hostname: euclid.insomniairc.net
+ - hostname: services.insomniairc.net
+ ipaddr: 127.0.0.1
+ port: 6663
+ bind: 127.0.0.1
+ - hostname: defender.insomniairc.net
+ ipaddr: 127.0.0.1
+ port: 6663
+ bind: 127.0.0.1
+
+ euclid.insomniairc.net:
+ admin:
+ name: Brian Sherson
+ nick: Weyoun
+ email: caretaker@insomniairc.net
+ links:
+ - hostname: hypocrisy.insomniairc.net
+
+secrets:
+ hypocrisy.insomniairc.net: i7i/MaQhej0p7Am5AQg8KrQrRf6j0x/4Drl8UKIJstI=
+ euclid.insomniairc.net: snVrI5K8KR6uGmVoYJbd+fTeaf6lXdxYZARrpMBGrWk=
+ services.insomniairc.net: qS92Pg/NGQ5NqvENwgQpVG+eRM8rOJ4ZSL+srYz01GY=
+ defender.insomniairc.net: st7W9jHf9Dj9wvhdClzR1k+DyaGy+3DTHU3lOgy0tG0=
+ diepass: FDGHkqeVnm6DGRpbpaZELu3jO1U4P8LgoZ8MWCWzolU=
+ restartpass: iDdLN5Z/59vVf/fOqh4/gRelT+KPI69sHxqf6cBO0Pw=
+ mibbit: eTU34SS7U8ZzxlJium8Yyhu5XAohGTc5FQ4+UlZIr1jilWFAvnagywYco6Riam9n
+ cloak0: EHzXTNP9FKzSV65joFCPz/izOa+vuYye659yKhyzs3U=
+ cloak1: bYQ28hQSEuW3yjgJxSJ7+WxVbDHZYUOCLYCLe1uGOJ8=
+ cloak2: cKAzZgSmEQxjJuFHJsDlvSjXBvgYaf1bvYQ+/FojMus=
+ cloak3: +tZIgTNNuvCDU9KJqseOPrnzzItQCWaz9BFDYJyRiZw=
+ cloak4: a/QZdafAupdQCR+uzL3gzYMQVsSG25bMejMCWbUQFyk=
+
+opers:
+ - name: Caretaker
+ hash: sha256
+ password: A+lvLGX3Y6hHfz88DJAYQ6LBgjG7qhAqLzZ1y2Wm4IszUQsdY2ibVzq0Rakrl1y09tcReQsFiMwp4LcZmJ3fyRXmk+KcKb4JvXiQhERl/S5RM6Qs43x/5zU9yDD1CaoT
+ type: NetAdmin
+ - name: jesterpm
+ hash: sha256
+ password: GU+VDGLFmTPbhaIeFf3ce9Fo6ZJBGH7MufaiaehP7pmI/JpnXaWl5amMZm7PzXpYgyI36iWCPQKA7Uyyrl98gUqq3VkbNtNCFlkuZ9Nndoj5T2F/V1qcPtpnwACFOplI
+ type: NetAdmin
+ - name: jonbo
+ hash: sha256
+ password: 48LStEhJUHHh+QzZj2SRwudFuhW/lMHDHFABSglHV83VeINnCBPJCJo/ygCKbb02XPZ3htqnIufL9J27AB9DxSlGOJmkJbrVYFsr09VaXJMrm+hR32OU8Q/w4FhGvUm1
+ type: NetAdmin
+ - name: Suspect
+ hash: sha256
+ password: axUhv+aUsYBW3SnYstFlzr9Lu1jC6Oi8yQCYWzKzHdxaYnMX/EEmzpffwdLKFxLLDQQmGvw23VoIMXEizGfJvVO1gqPzoVuJx9Rk9w66cOi07Roa10BI+BtAbihHa68E
+ type: NetAdmin