mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-11-01 15:11:25 +00:00
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;
|
||||
sabnzbd = 38;
|
||||
kdm = 39;
|
||||
ghostOne = 40;
|
||||
# When adding a uid, make sure it doesn't match an existing gid.
|
||||
|
||||
nixbld = 30000; # start of range of uids
|
||||
@ -98,6 +99,7 @@ in
|
||||
privoxy = 32;
|
||||
disnix = 33;
|
||||
osgi = 34;
|
||||
ghostOne = 40;
|
||||
# When adding a gid, make sure it doesn't match an existing uid.
|
||||
|
||||
users = 100;
|
||||
|
@ -52,6 +52,7 @@
|
||||
./services/backup/sitecopy-backup.nix
|
||||
./services/databases/mysql.nix
|
||||
./services/databases/postgresql.nix
|
||||
./services/games/ghost-one.nix
|
||||
./services/hardware/acpid.nix
|
||||
./services/hardware/bluetooth.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…
Reference in New Issue
Block a user