at master 2.3 kB view raw
1{ 2 config, 3 lib, 4 pkgs, 5 ... 6}: 7let 8 9 cfg = config.services.serviio; 10 11 serviioStart = pkgs.writeScript "serviio.sh" '' 12 #!${pkgs.bash}/bin/sh 13 14 SERVIIO_HOME=${pkgs.serviio} 15 16 # Setup the classpath 17 SERVIIO_CLASS_PATH="$SERVIIO_HOME/lib/*:$SERVIIO_HOME/config" 18 19 # Setup Serviio specific properties 20 JAVA_OPTS="-Djava.net.preferIPv4Stack=true -Djava.awt.headless=true -Dorg.restlet.engine.loggerFacadeClass=org.restlet.ext.slf4j.Slf4jLoggerFacade 21 -Dderby.system.home=${cfg.dataDir}/library -Dserviio.home=${cfg.dataDir} -Dffmpeg.location=${pkgs.ffmpeg}/bin/ffmpeg -Ddcraw.location=${pkgs.dcraw}/bin/dcraw" 22 23 # Execute the JVM in the foreground 24 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 "$@" 25 ''; 26 27in 28{ 29 30 ###### interface 31 options = { 32 services.serviio = { 33 34 enable = lib.mkOption { 35 type = lib.types.bool; 36 default = false; 37 description = '' 38 Whether to enable the Serviio Media Server. 39 ''; 40 }; 41 42 dataDir = lib.mkOption { 43 type = lib.types.path; 44 default = "/var/lib/serviio"; 45 description = '' 46 The directory where serviio stores its state, data, etc. 47 ''; 48 }; 49 50 }; 51 }; 52 53 ###### implementation 54 55 config = lib.mkIf cfg.enable { 56 systemd.services.serviio = { 57 description = "Serviio Media Server"; 58 after = [ "network.target" ]; 59 wantedBy = [ "multi-user.target" ]; 60 path = [ pkgs.serviio ]; 61 serviceConfig = { 62 User = "serviio"; 63 Group = "serviio"; 64 ExecStart = "${serviioStart}"; 65 ExecStop = "${serviioStart} -stop"; 66 }; 67 }; 68 69 users.users.serviio = { 70 group = "serviio"; 71 home = cfg.dataDir; 72 description = "Serviio Media Server User"; 73 createHome = true; 74 isSystemUser = true; 75 }; 76 77 users.groups.serviio = { }; 78 79 networking.firewall = { 80 allowedTCPPorts = [ 81 8895 # serve UPnP responses 82 23423 # console 83 23424 # mediabrowser 84 ]; 85 allowedUDPPorts = [ 86 1900 # UPnP service discovery 87 ]; 88 }; 89 }; 90}