Ghost One: packaged.
svn path=/nixos/trunk/; revision=25136
This commit is contained in:
parent
37a9ffffb0
commit
652a22f0da
@ -58,6 +58,7 @@ in
|
|||||||
foldingAtHome = 37;
|
foldingAtHome = 37;
|
||||||
sabnzbd = 38;
|
sabnzbd = 38;
|
||||||
kdm = 39;
|
kdm = 39;
|
||||||
|
ghostOne = 40;
|
||||||
# When adding a uid, make sure it doesn't match an existing gid.
|
# When adding a uid, make sure it doesn't match an existing gid.
|
||||||
|
|
||||||
nixbld = 30000; # start of range of uids
|
nixbld = 30000; # start of range of uids
|
||||||
@ -98,6 +99,7 @@ in
|
|||||||
privoxy = 32;
|
privoxy = 32;
|
||||||
disnix = 33;
|
disnix = 33;
|
||||||
osgi = 34;
|
osgi = 34;
|
||||||
|
ghostOne = 40;
|
||||||
# When adding a gid, make sure it doesn't match an existing uid.
|
# When adding a gid, make sure it doesn't match an existing uid.
|
||||||
|
|
||||||
users = 100;
|
users = 100;
|
||||||
|
@ -52,6 +52,7 @@
|
|||||||
./services/backup/sitecopy-backup.nix
|
./services/backup/sitecopy-backup.nix
|
||||||
./services/databases/mysql.nix
|
./services/databases/mysql.nix
|
||||||
./services/databases/postgresql.nix
|
./services/databases/postgresql.nix
|
||||||
|
./services/games/ghost-one.nix
|
||||||
./services/hardware/acpid.nix
|
./services/hardware/acpid.nix
|
||||||
./services/hardware/bluetooth.nix
|
./services/hardware/bluetooth.nix
|
||||||
./services/hardware/hal.nix
|
./services/hardware/hal.nix
|
||||||
|
103
modules/services/games/ghost-one.nix
Normal file
103
modules/services/games/ghost-one.nix
Normal file
@ -0,0 +1,103 @@
|
|||||||
|
{pkgs, config, ...}:
|
||||||
|
with pkgs.lib;
|
||||||
|
let
|
||||||
|
|
||||||
|
cfg = config.services.ghostOne;
|
||||||
|
ghostUser = "ghostone";
|
||||||
|
stateDir = "/var/lib/ghost-one";
|
||||||
|
in
|
||||||
|
{
|
||||||
|
|
||||||
|
###### interface
|
||||||
|
|
||||||
|
options = {
|
||||||
|
services.ghostOne = {
|
||||||
|
|
||||||
|
enable = mkOption {
|
||||||
|
default = false;
|
||||||
|
description = "Enable Ghost-One Warcraft3 game hosting server.";
|
||||||
|
};
|
||||||
|
|
||||||
|
language = mkOption {
|
||||||
|
default = "English";
|
||||||
|
description = "The language of bot messages: English, Spanish, Russian, Serbian or Turkish.";
|
||||||
|
};
|
||||||
|
|
||||||
|
war3path = mkOption {
|
||||||
|
default = "";
|
||||||
|
description = ''
|
||||||
|
The path to your local Warcraft III directory, which must contain war3.exe, storm.dll, and game.dll.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
mappath = mkOption {
|
||||||
|
default = "";
|
||||||
|
description = ''
|
||||||
|
The path to the directory where you keep your map files. GHost One doesn't require
|
||||||
|
map files but if it has access to them it can send them to players and automatically
|
||||||
|
calculate most map config values. GHost One will search [bot_mappath + map_localpath]
|
||||||
|
for the map file (map_localpath is set in each map's config file).
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
config = mkOption {
|
||||||
|
default = "";
|
||||||
|
description = "Extra configuration options.";
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
###### implementation
|
||||||
|
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
|
||||||
|
users.extraUsers = singleton
|
||||||
|
{ name = ghostUser;
|
||||||
|
uid = config.ids.uids.ghostOne;
|
||||||
|
description = "Ghost One game server user";
|
||||||
|
home = stateDir;
|
||||||
|
};
|
||||||
|
|
||||||
|
users.extraGroups = singleton
|
||||||
|
{ name = ghostUser;
|
||||||
|
gid = config.ids.gids.ghostOne;
|
||||||
|
};
|
||||||
|
|
||||||
|
services.ghostOne.config = ''
|
||||||
|
# bot_log = /dev/stderr
|
||||||
|
bot_language = ${pkgs.ghostOne}/share/ghost-one/languages/${cfg.language}.cfg
|
||||||
|
bot_war3path = ${cfg.war3path}
|
||||||
|
|
||||||
|
bot_mapcfgpath = mapcfgs
|
||||||
|
bot_savegamepath = savegames
|
||||||
|
bot_mappath = ${cfg.mappath}
|
||||||
|
bot_replaypath = replays
|
||||||
|
'';
|
||||||
|
|
||||||
|
jobs.ghostOne = {
|
||||||
|
name = "ghost-one";
|
||||||
|
script = ''
|
||||||
|
mkdir -p ${stateDir}
|
||||||
|
cd ${stateDir}
|
||||||
|
chown ${ghostUser}:${ghostUser} .
|
||||||
|
|
||||||
|
mkdir -p mapcfgs
|
||||||
|
chown ${ghostUser}:${ghostUser} mapcfgs
|
||||||
|
|
||||||
|
mkdir -p replays
|
||||||
|
chown ${ghostUser}:${ghostUser} replays
|
||||||
|
|
||||||
|
mkdir -p savegames
|
||||||
|
chown ${ghostUser}:${ghostUser} savegames
|
||||||
|
|
||||||
|
ln -sf ${pkgs.writeText "ghost.cfg" cfg.config} ghost.cfg
|
||||||
|
ln -sf ${pkgs.ghostOne}/share/ghost-one/ip-to-country.csv
|
||||||
|
${pkgs.su}/bin/su -s ${pkgs.stdenv.shell} ${ghostUser} \
|
||||||
|
-c "LANG=C ${pkgs.ghostOne}/bin/ghost++"
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user