grafana-alloy: don't build the frontend twice
[NixPkgs.git] / nixos / modules / services / misc / serviio.nix
bloba9449e54f5b0096b18eaf92e522e56f16edc9026
1 { config, lib, pkgs, ... }:
3 with lib;
5 let
7   cfg = config.services.serviio;
9   serviioStart = pkgs.writeScript "serviio.sh" ''
10     #!${pkgs.bash}/bin/sh
12     SERVIIO_HOME=${pkgs.serviio}
14     # Setup the classpath
15     SERVIIO_CLASS_PATH="$SERVIIO_HOME/lib/*:$SERVIIO_HOME/config"
17     # Setup Serviio specific properties
18     JAVA_OPTS="-Djava.net.preferIPv4Stack=true -Djava.awt.headless=true -Dorg.restlet.engine.loggerFacadeClass=org.restlet.ext.slf4j.Slf4jLoggerFacade
19                -Dderby.system.home=${cfg.dataDir}/library -Dserviio.home=${cfg.dataDir} -Dffmpeg.location=${pkgs.ffmpeg}/bin/ffmpeg -Ddcraw.location=${pkgs.dcraw}/bin/dcraw"
21     # Execute the JVM in the foreground
22     exec ${pkgs.jre}/bin/java -Xmx512M -Xms20M -XX:+UseG1GC -XX:GCTimeRatio=1 -XX:MinHeapFreeRatio=10 -XX:MaxHeapFreeRatio=20 $JAVA_OPTS -classpath "$SERVIIO_CLASS_PATH" org.serviio.MediaServer "$@"
23   '';
25 in {
27   ###### interface
28   options = {
29     services.serviio = {
31       enable = mkOption {
32         type = types.bool;
33         default = false;
34         description = ''
35           Whether to enable the Serviio Media Server.
36         '';
37       };
39       dataDir = mkOption {
40         type = types.path;
41         default = "/var/lib/serviio";
42         description = ''
43           The directory where serviio stores its state, data, etc.
44         '';
45       };
47     };
48   };
50   ###### implementation
52   config = mkIf cfg.enable {
53     systemd.services.serviio = {
54       description = "Serviio Media Server";
55       after = [ "network.target" ];
56       wantedBy = [ "multi-user.target" ];
57       path = [ pkgs.serviio ];
58       serviceConfig = {
59         User = "serviio";
60         Group = "serviio";
61         ExecStart = "${serviioStart}";
62         ExecStop = "${serviioStart} -stop";
63       };
64     };
66     users.users.serviio =
67       { group = "serviio";
68         home = cfg.dataDir;
69         description = "Serviio Media Server User";
70         createHome = true;
71         isSystemUser = true;
72       };
74     users.groups.serviio = { };
76     networking.firewall = {
77       allowedTCPPorts = [
78         8895  # serve UPnP responses
79         23423 # console
80         23424 # mediabrowser
81       ];
82       allowedUDPPorts = [
83         1900 # UPnP service discovery
84       ];
85     };
86   };