grafana-alloy: don't build the frontend twice
[NixPkgs.git] / nixos / modules / services / misc / mame.nix
blobed98ef3ed8a64f5fab761b793073cf8954c64e74
1 { config, lib, pkgs, ... }:
2 let
3   cfg = config.services.mame;
4   mame = "mame${lib.optionalString pkgs.stdenv.hostPlatform.is64bit "64"}";
5 in
7   options = {
8     services.mame = {
9       enable = lib.mkOption {
10         type = lib.types.bool;
11         default = false;
12         description = ''
13           Whether to setup TUN/TAP Ethernet interface for MAME emulator.
14         '';
15       };
16       user = lib.mkOption {
17         type = lib.types.str;
18         description = ''
19           User from which you run MAME binary.
20         '';
21       };
22       hostAddr = lib.mkOption {
23         type = lib.types.str;
24         description = ''
25           IP address of the host system. Usually an address of the main network
26           adapter or the adapter through which you get an internet connection.
27         '';
28         example = "192.168.31.156";
29       };
30       emuAddr = lib.mkOption {
31         type = lib.types.str;
32         description = ''
33           IP address of the guest system. The same you set inside guest OS under
34           MAME. Should be on the same subnet as {option}`services.mame.hostAddr`.
35         '';
36         example = "192.168.31.155";
37       };
38     };
39   };
41   config = lib.mkIf cfg.enable {
42     environment.systemPackages = [ pkgs.mame ];
44     security.wrappers."${mame}" = {
45       owner = "root";
46       group = "root";
47       capabilities = "cap_net_admin,cap_net_raw+eip";
48       source = "${pkgs.mame}/bin/${mame}";
49     };
51     systemd.services.mame = {
52       description = "MAME TUN/TAP Ethernet interface";
53       after = [ "network.target" ];
54       wantedBy = [ "multi-user.target" ];
55       path = [ pkgs.iproute2 ];
56       serviceConfig = {
57         Type = "oneshot";
58         RemainAfterExit = true;
59         ExecStart = "${pkgs.mame}/bin/taputil.sh -c ${cfg.user} ${cfg.emuAddr} ${cfg.hostAddr} -";
60         ExecStop = "${pkgs.mame}/bin/taputil.sh -d ${cfg.user}";
61       };
62     };
63   };
65   meta.maintainers = [ ];