summary refs log tree commit diff
path: root/nixos/modules/services/games/minetest-server.nix
diff options
context:
space:
mode:
authorRichard Zetterberg <richard.zetterberg@googlemail.com>2015-04-04 12:36:43 +0200
committerRichard Zetterberg <richard.zetterberg@googlemail.com>2015-04-04 12:36:43 +0200
commit0b1f994f292e4cbf7cb7c8275c9b7512a3090aa2 (patch)
treeca9908b476b3d21d469d90bcab7956ee217b4f66 /nixos/modules/services/games/minetest-server.nix
parent46178f057e0e133b5948a11076d53ddf7c8cb8eb (diff)
downloadnixpkgs-0b1f994f292e4cbf7cb7c8275c9b7512a3090aa2.tar
nixpkgs-0b1f994f292e4cbf7cb7c8275c9b7512a3090aa2.tar.gz
nixpkgs-0b1f994f292e4cbf7cb7c8275c9b7512a3090aa2.tar.bz2
nixpkgs-0b1f994f292e4cbf7cb7c8275c9b7512a3090aa2.tar.lz
nixpkgs-0b1f994f292e4cbf7cb7c8275c9b7512a3090aa2.tar.xz
nixpkgs-0b1f994f292e4cbf7cb7c8275c9b7512a3090aa2.tar.zst
nixpkgs-0b1f994f292e4cbf7cb7c8275c9b7512a3090aa2.zip
Adds minetest server service
Diffstat (limited to 'nixos/modules/services/games/minetest-server.nix')
-rw-r--r--nixos/modules/services/games/minetest-server.nix104
1 files changed, 104 insertions, 0 deletions
diff --git a/nixos/modules/services/games/minetest-server.nix b/nixos/modules/services/games/minetest-server.nix
new file mode 100644
index 00000000000..996e313386f
--- /dev/null
+++ b/nixos/modules/services/games/minetest-server.nix
@@ -0,0 +1,104 @@
+{ config, lib, pkgs, ... }:
+
+with lib;
+
+let
+  cfg   = config.services.minetest-server;
+  flag  = val: name: if val != null then "--${name} ${val} " else "";
+  flags = [ 
+    (flag cfg.gameId "gameid") 
+    (flag cfg.world "world") 
+    (flag cfg.configPath "config") 
+    (flag cfg.logPath "logfile") 
+    (flag cfg.port "port") 
+  ];
+in
+{
+  options = {
+    services.minetest-server = {
+      enable = mkOption {
+        type        = types.bool;
+        default     = false;
+        description = "If enabled, starts a Minetest Server.";
+      };
+
+      gameId = mkOption {
+        type        = types.nullOr types.str;
+        default     = null;
+        description = ''
+          Id of the game to use. To list available games run 
+          `minetestserver --gameid list`.
+
+          If only one game exists, this option can be null.
+        '';
+      };
+
+      world = mkOption {
+        type        = types.nullOr types.path;
+        default     = null;
+        description = ''
+          Name of the world to use. To list available worlds run
+          `minetestserver --world list`.
+
+          If only one world exists, this option can be null.
+        '';
+      };
+
+      configPath = mkOption {
+        type        = types.nullOr types.path;
+        default     = null;
+        description = ''
+          Path to the config to use.
+
+          If set to null, the config of the running user will be used:
+          `~/.minetest/minetest.conf`.
+        '';
+      };
+
+      logPath = mkOption {
+        type        = types.nullOr types.path;
+        default     = null;
+        description = ''
+          Path to logfile for logging. 
+
+          If set to null, logging will be output to stdout which means
+          all output will be catched by systemd.
+        '';
+      };
+
+      port = mkOption {
+        type        = types.nullOr types.int;
+        default     = null;
+        description = ''
+          Port number to bind to.
+
+          If set to null, the default 30000 will be used.
+        '';
+      };
+    };
+  };
+
+  config = mkIf cfg.enable {
+    users.extraUsers.minetest = {
+      description     = "Minetest Server Service user";
+      home            = "/var/lib/minetest";
+      createHome      = true;
+      uid             = config.ids.uids.minetest;
+    };
+
+    systemd.services.minetest-server = {
+      description   = "Minetest Server Service";
+      wantedBy      = [ "multi-user.target" ];
+      after         = [ "network.target" ];
+
+      serviceConfig.Restart = "always";
+      serviceConfig.User    = "minetest";
+
+      script = ''
+        cd /var/lib/minetest
+
+        exec ${pkgs.minetest}/bin/minetestserver ${concatStrings flags}
+      '';
+    };
+  };
+}