at 18.03-beta 2.1 kB view raw
1{ config, pkgs, lib, ... }: 2 3with lib; 4 5let 6 cfg = config.services.plexpy; 7in 8{ 9 options = { 10 services.plexpy = { 11 enable = mkEnableOption "PlexPy Plex Monitor"; 12 13 dataDir = mkOption { 14 type = types.str; 15 default = "/var/lib/plexpy"; 16 description = "The directory where PlexPy stores its data files."; 17 }; 18 19 configFile = mkOption { 20 type = types.str; 21 default = "/var/lib/plexpy/config.ini"; 22 description = "The location of PlexPy's config file."; 23 }; 24 25 port = mkOption { 26 type = types.int; 27 default = 8181; 28 description = "TCP port where PlexPy listens."; 29 }; 30 31 user = mkOption { 32 type = types.str; 33 default = "plexpy"; 34 description = "User account under which PlexPy runs."; 35 }; 36 37 group = mkOption { 38 type = types.str; 39 default = "nogroup"; 40 description = "Group under which PlexPy runs."; 41 }; 42 43 package = mkOption { 44 type = types.package; 45 default = pkgs.plexpy; 46 defaultText = "pkgs.plexpy"; 47 description = '' 48 The PlexPy package to use. 49 ''; 50 }; 51 }; 52 }; 53 54 config = mkIf cfg.enable { 55 systemd.services.plexpy = { 56 description = "PlexPy Plex Monitor"; 57 after = [ "network.target" ]; 58 wantedBy = [ "multi-user.target" ]; 59 preStart = '' 60 test -d "${cfg.dataDir}" || { 61 echo "Creating initial PlexPy data directory in \"${cfg.dataDir}\"." 62 mkdir -p "${cfg.dataDir}" 63 chown ${cfg.user}:${cfg.group} "${cfg.dataDir}" 64 } 65 ''; 66 serviceConfig = { 67 Type = "simple"; 68 User = cfg.user; 69 Group = cfg.group; 70 PermissionsStartOnly = "true"; 71 GuessMainPID = "false"; 72 ExecStart = "${cfg.package}/bin/plexpy --datadir ${cfg.dataDir} --config ${cfg.configFile} --port ${toString cfg.port} --pidfile ${cfg.dataDir}/plexpy.pid --nolaunch"; 73 Restart = "on-failure"; 74 }; 75 }; 76 77 users.extraUsers = mkIf (cfg.user == "plexpy") { 78 plexpy = { group = cfg.group; uid = config.ids.uids.plexpy; }; 79 }; 80 }; 81}