at v192 1.5 kB view raw
1{ config, lib, pkgs, ... }: 2 3with lib; 4 5let 6 cfg = config.services.peerflix; 7 8 configFile = pkgs.writeText "peerflix-config.json" '' 9 { 10 "connections": 50, 11 "tmp": "${cfg.downloadDir}" 12 } 13 ''; 14 15in { 16 17 ###### interface 18 19 options.services.peerflix = { 20 enable = mkOption { 21 description = "Whether to enable peerflix service."; 22 default = false; 23 type = types.bool; 24 }; 25 26 stateDir = mkOption { 27 description = "Peerflix state directory."; 28 default = "/var/lib/peerflix"; 29 type = types.path; 30 }; 31 32 downloadDir = mkOption { 33 description = "Peerflix temporary download directory."; 34 default = "${cfg.stateDir}/torrents"; 35 type = types.path; 36 }; 37 }; 38 39 ###### implementation 40 41 config = mkIf cfg.enable { 42 systemd.services.peerflix = { 43 description = "Peerflix Daemon"; 44 wantedBy = [ "multi-user.target" ]; 45 after = [ "network-interfaces.target" ]; 46 environment.HOME = cfg.stateDir; 47 48 preStart = '' 49 mkdir -p "${cfg.stateDir}"/{torrents,.config/peerflix-server} 50 if [ "$(id -u)" = 0 ]; then chown -R peerflix "${cfg.stateDir}"; fi 51 ln -fs "${configFile}" "${cfg.stateDir}/.config/peerflix-server/config.json" 52 ''; 53 54 serviceConfig = { 55 ExecStart = "${pkgs.nodePackages.peerflix-server}/bin/peerflix-server"; 56 PermissionsStartOnly = true; 57 User = "peerflix"; 58 }; 59 }; 60 61 users.extraUsers.peerflix.uid = config.ids.uids.peerflix; 62 }; 63}