aboutsummaryrefslogtreecommitdiff
path: root/nixpkgs/nixos/modules/services/misc/mame.nix
diff options
context:
space:
mode:
authorKatharina Fey <kookie@spacekookie.de>2020-01-12 01:00:12 +0000
committerKatharina Fey <kookie@spacekookie.de>2020-01-12 01:00:12 +0000
commiteeaf5d25d5f6ae7ae1f5bf8a3dee4559693f8147 (patch)
treeafc41ca8dde96b41089ca324533084aef570322f /nixpkgs/nixos/modules/services/misc/mame.nix
parent63c4c4dda49dc69e5812faa7ef8406180998f3ae (diff)
parente4134747f5666bcab8680aff67fa3b63384f9a0f (diff)
Merge commit 'e4134747f5666bcab8680aff67fa3b63384f9a0f'
Diffstat (limited to 'nixpkgs/nixos/modules/services/misc/mame.nix')
-rw-r--r--nixpkgs/nixos/modules/services/misc/mame.nix67
1 files changed, 67 insertions, 0 deletions
diff --git a/nixpkgs/nixos/modules/services/misc/mame.nix b/nixpkgs/nixos/modules/services/misc/mame.nix
new file mode 100644
index 00000000000..c5d5e9e4837
--- /dev/null
+++ b/nixpkgs/nixos/modules/services/misc/mame.nix
@@ -0,0 +1,67 @@
+{ config, lib, pkgs, ... }:
+
+with lib;
+
+let
+ cfg = config.services.mame;
+ mame = "mame${lib.optionalString pkgs.stdenv.is64bit "64"}";
+in
+{
+ options = {
+ services.mame = {
+ enable = mkOption {
+ type = types.bool;
+ default = false;
+ description = ''
+ Whether to setup TUN/TAP Ethernet interface for MAME emulator.
+ '';
+ };
+ user = mkOption {
+ type = types.str;
+ description = ''
+ User from which you run MAME binary.
+ '';
+ };
+ hostAddr = mkOption {
+ type = types.str;
+ description = ''
+ IP address of the host system. Usually an address of the main network
+ adapter or the adapter through which you get an internet connection.
+ '';
+ example = "192.168.31.156";
+ };
+ emuAddr = mkOption {
+ type = types.str;
+ description = ''
+ IP address of the guest system. The same you set inside guest OS under
+ MAME. Should be on the same subnet as <option>services.mame.hostAddr</option>.
+ '';
+ example = "192.168.31.155";
+ };
+ };
+ };
+
+ config = mkIf cfg.enable {
+ environment.systemPackages = [ pkgs.mame ];
+
+ security.wrappers."${mame}" = {
+ source = "${pkgs.mame}/bin/${mame}";
+ capabilities = "cap_net_admin,cap_net_raw+eip";
+ };
+
+ systemd.services.mame = {
+ description = "MAME TUN/TAP Ethernet interface";
+ after = [ "network.target" ];
+ wantedBy = [ "multi-user.target" ];
+ path = [ pkgs.iproute ];
+ serviceConfig = {
+ Type = "oneshot";
+ RemainAfterExit = true;
+ ExecStart = "${pkgs.mame}/bin/taputil.sh -c ${cfg.user} ${cfg.emuAddr} ${cfg.hostAddr} -";
+ ExecStop = "${pkgs.mame}/bin/taputil.sh -d ${cfg.user}";
+ };
+ };
+ };
+
+ meta.maintainers = with lib.maintainers; [ gnidorah ];
+}