# This is a sample dgamelaunch configuration file. Only bash-style comments
# are allowed, such as this. Each configuration option will be explained
# along with its default value.



# Global config variables:


# Max amount of registered users to allow. Has no effect if dgl was
# compiled with SQLite
maxusers = 64000

# Allow registration of new nicks? (yes or no)
allow_new_nicks = yes

# Max length for newly registered nicks. Must be less than 20.
# By default, NetHack only stores the first 10 chars of a name into
# the record/logfile.
maxnicklen = 20

# Set the default watching-screen sorting mode. Can be one of
# "username", "game", "windowsize", "starttime" or "idletime".
# "username" is the default.
sortmode = "username"

# Set the columns displayed in the watching-screen. Each column definition
# must have four elements as:
#   [ "<display title>", "<sortname>", <Screen column>, "<printf format>" ]
#
# <sortname> may be "unsorted", "username", "game", "windowsize", "starttime",
# "duration", "idletime", or (if shmem is enabled) "watchers".
#
watch_columns = [ ["", "", 1, "%s)"],
                  ["User", "username", 4, "%-15s"],
                  ["Game", "game", 21, "%-11s"],
                  ["Term", "windowsize", 34, "%s"],
                  ["Idle", "idletime", 43, "%-10s"],
                  ["Started", "starttime", 60, "%s"]
                ]

# Path to a prepared chroot jail.
chroot_path = "/var/dgl"

# From inside the jail, dgamelaunch's working directory for rcfiles/ttyrec/etc
dglroot = "/dgldir/"

# Strings to be replaced in every banner
# you can have either direct string replacements, like
# "$FOO" = "BAR", or you can get the server time with
# "$FOO" = timeformat("%F %T")
# for the timeformat parameter string format, see man strftime
bannervars = [ "$MOTDTIME" = "2011.10.08",
	       "$SERVERID" = "$ATTR(14)Roguelike Gallery - rlgallery.org$ATTR()",
	       "$DATETIME" = timeformat("%F %T")
	     ]

# From inside the jail, location of a banner file, which is
# shown in submenus that cannot be defined separately.
# Some string substitution is done for every banner file contents:
# - bannervars from above
# - $VERSION replaced with "dgamelaunch v" + dgl version number.
# - $USERNAME replaced with logged-in user's name, or with "[Anonymous]"
# - $INCLUDE(filename) the named file will be inserted here.
banner = "/dgldir/dgl-banner"

# The following two options are fairly insecure. They will force us to
# load the password/group database into memory while still having root
# privileges. Replace them with shed_uid/shed_gid entries as soon as
# possible if you decide to use them. dgamelaunch will inform you of
# the uids/gids corresponding to your choices when it loads.
#
# Note that shed_uid and shed_gid will always take precedence over
# shed_user and shed_group if they are specified.

# shed_user: username to shed privileges to
#shed_user = "games"
# shed_group: group name to shed privileges to
#shed_group = "games"

# Preferably, you may use the respective gids/uids. This is for Debian:
shed_uid = 501
shed_gid = 501

# Locale. Leaving this out, dgamelaunch will not explicitly set locale.
locale = "en_US.UTF-8"

# Default TERM, used if the user's $TERM is unknown.
# If undefined, dgamelaunch will just terminate in that case.
default_term = "xterm"

# Should dgl send select-UTF8-charset escape code? (that is: ESC % G)
# default is no.
#utf8esc = yes

# Should dgl allow XON/XOFF? Default is "yes", meaning "don't touch it".
# "no" disables XON/XOFF
#flowcontrol = no

# Maximum time in seconds user can idle in the dgamelaunch menus
# before dgl exits. Default value is 0, which disables the idling timer.
# Does not apply to external programs or config editors.
# For setting game idle time, use max_idle_time in the game DEFINE.
# menu_max_idle_time = 1024

# Passwd refers to the file that stores the user database.
# The default passwd file is "/dgl-login" for flat-text database, and for
# sqlite, whatever value was defined for the sqlite database at compile time.
# This is also used for the shared memory key, if shmem is enabled at compile
# time.
#passwd = "/dgl-login"

# Lockfile is used only when dgl was compiled without sqlite.
#lockfile = "/dgl-lock"

#
# define some commands that are run when something happens. format is
# commands [ <time> ] = <command> ...
#
# <time> can be one of:
#   dglstart  = when someone telnets in
#   login     = when user has logged in
#   register  = right after a new user is registered
#   gamestart = just before a game is started
#   gameend   = after a game ends (see also per-game "postcommand" define)
#
# <command> is:
#   mkdir "foo"        = create a directory "foo"
#   chdir "foo"        = change current work dir to "foo"
#   cp "foo" "bar"     = copy file "foo" to "bar", overwriting previous "bar"
#   ifnxcp "foo" "bar" = copy file "foo" to "bar", if "bar" doesn't exist
#   unlink "foo"       = delete file "foo"
#   setenv "foo" "bar" = set environment variable "foo" to "bar"
#   exec "foo" "bar"   = execute "foo" with "bar" as it's param
#   rawprint "foo"     = output string "foo"
#   chpasswd           = do the change password prompting, if logged in
#   chmail             = do the change email prompting, if logged in
#   watch_menu         = go to the watching menu
#   quit               = quit dgl
#   ask_login          = do the login prompting, if not logged in
#   ask_register       = do register new user prompting, if not logged in and
#                        registration of new nicks is allowed.
#   play_game "foo"    = start game which has the short name "foo"
#                        (user must be logged in)
#   submenu "foo"      = go to submenu "foo"
#   return             = return from submenu
#
#  NOTE: edit_options-command was removed. use ifnxcp and exec to simulate it.
#
# The commands will be done inside the chroot and with the uid and gid
# defined above.
# Parameters to the commands are subject to variable substitution:
#   %r = dglroot, as defined above
#   %n = user nick, if user is logged in
#   %N = first character of user name, if user is logged in
#   %u = shed_uid, as defined above, but numeric
#   %g = game name, if user has selected a game.
#   %s = short game name, if user has selected a game.
#   %t = ttyrec path & filename of the last game played.
#
# Also some escape codes:
#   \\ = backslash
#   \a = bell
#   \b = backspace
#   \e = escape character
#   \f = form feed
#   \n = newline
#   \r = carriage return
#   \t = tab
#   \v = vertical tab
#
# eg. commands[login] = mkdir "foo", unlink "bar", setenv "Z" "foo"
#

# Change the terminal title: (assuming terminals support the escape code)
#commands[dglstart] = rawprint "\e]2;nethack.alt.org\a"

# create the user's dirs when they register
commands[register] = mkdir "%ruserdata/%n",
                     mkdir "%rttyrec/%n",
                     mkdir "%rttyrec/%n/rogue3",
                     mkdir "%rttyrec/%n/rogue4",
                     mkdir "%rttyrec/%n/rogue5",
                     mkdir "%rttyrec/%n/srogue",
                     mkdir "%rttyrec/%n/arogue5"

commands[login] = mkdir "%ruserdata/%n",
                  mkdir "%rttyrec/%n",
                  mkdir "%rttyrec/%n/rogue3",
                  mkdir "%rttyrec/%n/rogue4",
                  mkdir "%rttyrec/%n/rogue5",
                  mkdir "%rttyrec/%n/srogue",
                  mkdir "%rttyrec/%n/arogue5"

# file mode for when commands copy files.
# readable and writable by all. you could use eg. "0644" to be more secure.
filemode = "0644"




# Define the main menus.
# You _must_ define "mainmenu_anon" and "mainmenu_user".
# $VERSION and $SERVERID will be replaced, as per the bannerfile above.

# First, the menu shown to anonymous user:
menu["mainmenu_anon"] {
        bannerfile = "/dgldir/dgl_menu_main_anon.txt"
        commands["l"] = ask_login
        commands["r"] = ask_register
        commands["w"] = watch_menu
        commands["q"] = quit
}

# Then the menu shown when the user has logged in:
# $USERNAME in here will be replaced with the user name.
menu["mainmenu_user"] {
# contents of this file are written to screen.
# the file must be inside the chroot.
# Some string subsitutions can be done in the file:
# $INCLUDE(filename) =  includes the file to this file.
# String substitutions defined in bannervars-section above.
# $VERSION           =  dgamelaunch version
# $USERNAME          =  user name (or [Anonymous] if not logged in)
# $ATTR(params)      =  change text color and attributes.
#        params can be either number (to set the text color),
#	 one, or any of "b" (bold), "s" (standout), "u" (underline),
#	 "r" (reverse) or "d" (dim),
#	 or both color number and attribute characters, separated by colon.
#	 Empty param resets color and attributes to default.
        bannerfile = "/dgldir/dgl_menu_main_user.txt"
# after which cursor is moved to this location
# if cursor-definition is missing, the cursor is put
# to the end of the last line of the banner.
#        cursor = (5,18)
# keys we accept. format is
#  commands["string_of_keys"] = <commandlist>
# for example, you could use commands["qQ"] = quit
        commands["c"] = chpasswd
        commands["e"] = chmail
        commands["w"] = watch_menu
        commands["3"] = play_game "RogV3"
        commands["4"] = play_game "RogV4"
        commands["5"] = play_game "RogV5"
        commands["Ss"] = play_game "SRog"
        commands["Aa"] = play_game "ARog5"
        commands["q"] = quit
}

# this menu is shown when user presses '?' in the watching menu
menu["watchmenu_help"] {
	bannerfile = "/dgldir/dgl_menu_watchmenu_help.txt"
	commands["qQ "] = return
}

# Rogue V3: short and simple, like the game
DEFINE {
  game_path = "/usr/bin/rogue3"
  game_name = "Rogue V3 (3.6)"
  short_name = "RogV3"

  game_args = "rogue3", "-n", "%n"

  inprogressdir = "%rinprogress/rogue3/"
  ttyrecdir = "%rttyrec/%n/rogue3/"

  # Don't do anything with rcfiles.  Rogue has none.

  # Back up the savefile, just in case
  commands = cp "/var/games/roguelike/rogue3save/%u-%n.r3sav" "%rbackup/%u-%n.r3sav.bak"
}

# Rogue V4: just like it, but a little different
DEFINE {
  game_path = "/usr/bin/rogue4"
  game_name = "Rogue V4 (5.2)"
  short_name = "RogV4"

  game_args = "rogue4", "-n", "%n"
  inprogressdir = "%rinprogress/rogue4/"
  ttyrecdir = "%rttyrec/%n/rogue4/"

  commands = cp "/var/games/roguelike/rogue4save/%u-%n.r4sav" "%rbackup/%u-%n.r4sav.bak"
}

# Rogue V5: a little more different from both
DEFINE {
  game_path = "/usr/bin/rogue5"
  game_name = "Rogue V5 (5.4)"
  short_name = "RogV5"

  game_args = "rogue5", "-n", "%n"
  inprogressdir = "%rinprogress/rogue5/"
  ttyrecdir = "%rttyrec/%n/rogue5/"

  commands = cp "/var/games/roguelike/rogue5save/%u-%n.r5sav" "%rbackup/%u-%n.r5sav.bak"
}

# Super-Rogue: different?
DEFINE {
  game_path = "/usr/bin/srogue"
  game_name = "Super-Rogue"
  short_name = "SRog"

  game_args = "srogue", "-n", "%n"
  inprogressdir = "%rinprogress/srogue/"
  ttyrecdir = "%rttyrec/%n/srogue/"

  commands = cp "/var/games/roguelike/sroguesave/%u-%n.srsav" "%rbackup/%u-%n.srsav.bak"
}

# Advanced Rogue 5: not different?
DEFINE {
  game_path = "/usr/bin/arogue5"
  game_name = "Advanced Rogue 5"
  short_name = "ARog5"

  game_args = "arogue5", "-n", "%n"
  inprogressdir = "%rinprogress/arogue5/"
  ttyrecdir = "%rttyrec/%n/arogue5/"

  commands = cp "/var/games/roguelike/arogue5save/%u-%n.ar5sav" "%rbackup/%u-%n.ar5sav.bak"
}


# Next, we'll define one game's data:

#DEFINE {
#  # From inside the jail, the location of the binary to be launched.
#  game_path = "/bin/nethackstub"
#
#  # Full name of the game
#  game_name = "NetHack stub"
#
#  # Short name, used in the watching menu
#  short_name = "NHstb"
#
#  # arguments for when we exec the binary
#  game_args = "/bin/nethackstub",
#	      "foo",
#	      "user:%n",
#	      "shed_uid:%u",
#	      "bar"
#
#  # From inside the jail, where dgamelaunch should put mail.
#  spooldir = "/var/mail/"
#
#  # From inside the jail, the default .nethackrc that is copied for new users.
#  # rc_template = "/dgl-default-rcfile"
#
#  # If player idles longer than max_idle_time seconds, the game will
#  # receive a sighup. Default value is 0, which disables the idling timer.
#  max_idle_time = 2000
#
#  # Player-specific path to an extra information file written by the game
#  # The game should write the extra information on one line in this format:
#  #    <numeric-weight>|extra-information
#  # For example, the game might write: "100|Astral", "1|D:1", etc. to indicate
#  # where the player is in the game world. The numeric weight is used when
#  # a spectator sorts games by the extra information field: higher weights
#  # will be sorted to appear before lower weights.
#  # 
#  extra_info_file = "%rgamedir/%n.extrainfo"
#
#  # Make sure the inprogress dir actually exists. default is "inprogress/"
#  # Each game you define here must have it's own.
#  inprogressdir = "%rinprogress-nethackstub/"
#
#  # We can also define per-game commands, that are executed
#  # when the game starts:
#  # commands = chdir "/dgldir", mkdir "foo_%u_%g"
#
#  # We can also define per-game commands executed after the game ends,
#  # but before commands[gameend]
#  postcommands = chdir "/"
#
#  # If the game uses an ancient encoding, you may specify "ibm" or "dec".
#  # If set to "ask", the game will be run with --print-charset beforehand,
#  # expected to return one of these values.
#  encoding = "unicode"
#}


#
# the second game
#
#

#DEFINE {
#  game_path = "/nh343/nethack"
#  game_name = "NetHack 3.4.3"
#  short_name = "NH343"
#
#  game_args = "/nh343/nethack", "-u", "%n"
#
#  spooldir = "/mail/"
#  rc_template = "/dgl-default-rcfile.nh343"
#
#  rc_fmt = "%ruserdata/%n/%n.nh343rc"
#
#  inprogressdir = "%rinprogress-nh343/"
#
## The place where ttyrecs are stored for this game.
## If this is not defined, ttyrecs are not saved for this game.
## Leaving this undefined also means the games cannot be spectated.
#  ttyrecdir = "%ruserdata/%n/ttyrec/"
#
#
#  # back up savefile
#  commands = cp "/nh343/var/save/%u%n.gz" "/nh343/var/save/%u%n.gz.bak",
#  # set NETHACKOPTIONS to point to the rcfile
#             setenv "NETHACKOPTIONS" "@%ruserdata/%n/%n.nh343rc",
#  # set up nethack mail stuff, assuming it's compiled with it...
#             setenv "MAIL" "/mail/%n",
#             setenv "SIMPLEMAIL" "1",
#  # don't let the mail file grow
#             unlink "/mail/%n"
#}

#
# third game
#
#

#DEFINE {
#  game_path = "/bin/crawlss017"
#  game_name = "Crawl Stone Soup 0.1.7"
#  short_name = "Cr017"
#
#  game_args = "/bin/crawlss017",
#	      "-name",   "%n",
#	      "-dir",    "/crawlss017/",
#	      "-rc",     "%rrcfiles/%n.crawlrc",
#	      "-morgue", "/crawlss017/morgues/",
#	      "-macro",  "/crawlss017/macros/%n.macro"
#
#  rc_template = "/dgl-default-rcfile.crawl"
#  rc_fmt = "%rrcfiles/%n.crawlrc"
#  inprogressdir = "%rinprogress-crawlss017/"
#  encoding = ask
#}

#
# fourth game
#
#

#DEFINE {
#  game_path = "/bin/crawlss020"
#  game_name = "Crawl Stone Soup 0.2.0"
#  short_name = "Cr020"
#
#  game_args = "/bin/crawlss020",
#	      "-name",   "%n",
#	      "-dir",    "/crawlss020/",
#	      "-rc",     "/crawlss020/plr/%n/%n.crawlrc",
#	      "-morgue", "/crawlss020/plr/%n/",
#	      "-macro",  "/crawlss020/plr/%n/"
#
#  rc_template = "/dgl-default-rcfile.crawl"
#  rc_fmt = "/crawlss020/plr/%n/%n.crawlrc"
#  inprogressdir = "%rinprogress-crawlss020/"
#}
