at 23.11-pre 2.3 kB view raw
1{ config, lib, pkgs, ... }: 2 3with lib; 4 5let 6 7 cfg = config.services.serviio; 8 9 serviioStart = pkgs.writeScript "serviio.sh" '' 10 #!${pkgs.bash}/bin/sh 11 12 SERVIIO_HOME=${pkgs.serviio} 13 14 # Setup the classpath 15 SERVIIO_CLASS_PATH="$SERVIIO_HOME/lib/*:$SERVIIO_HOME/config" 16 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" 20 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 ''; 24 25in { 26 27 ###### interface 28 options = { 29 services.serviio = { 30 31 enable = mkOption { 32 type = types.bool; 33 default = false; 34 description = lib.mdDoc '' 35 Whether to enable the Serviio Media Server. 36 ''; 37 }; 38 39 dataDir = mkOption { 40 type = types.path; 41 default = "/var/lib/serviio"; 42 description = lib.mdDoc '' 43 The directory where serviio stores its state, data, etc. 44 ''; 45 }; 46 47 }; 48 }; 49 50 ###### implementation 51 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 }; 65 66 users.users.serviio = 67 { group = "serviio"; 68 home = cfg.dataDir; 69 description = "Serviio Media Server User"; 70 createHome = true; 71 isSystemUser = true; 72 }; 73 74 users.groups.serviio = { }; 75 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 }; 87}