python312Packages.dissect-extfs: 3.11 -> 3.12
[NixPkgs.git] / nixos / modules / services / torrent / peerflix.nix
blob821c829f6b4af292cd58ca84aecc7e826df8d9bc
1 { config, lib, options, pkgs, ... }:
3 with lib;
5 let
6   cfg = config.services.peerflix;
7   opt = options.services.peerflix;
9   configFile = pkgs.writeText "peerflix-config.json" ''
10     {
11       "connections": 50,
12       "tmp": "${cfg.downloadDir}"
13     }
14   '';
16 in {
18   ###### interface
20   options.services.peerflix = {
21     enable = mkOption {
22       description = "Whether to enable peerflix service.";
23       default = false;
24       type = types.bool;
25     };
27     stateDir = mkOption {
28       description = "Peerflix state directory.";
29       default = "/var/lib/peerflix";
30       type = types.path;
31     };
33     downloadDir = mkOption {
34       description = "Peerflix temporary download directory.";
35       default = "${cfg.stateDir}/torrents";
36       defaultText = literalExpression ''"''${config.${opt.stateDir}}/torrents"'';
37       type = types.path;
38     };
39   };
41   ###### implementation
43   config = mkIf cfg.enable {
44     systemd.tmpfiles.rules = [
45       "d '${cfg.stateDir}' - peerflix - - -"
46     ];
48     systemd.services.peerflix = {
49       description = "Peerflix Daemon";
50       wantedBy = [ "multi-user.target" ];
51       after = [ "network.target" ];
52       environment.HOME = cfg.stateDir;
54       preStart = ''
55         mkdir -p "${cfg.stateDir}"/{torrents,.config/peerflix-server}
56         ln -fs "${configFile}" "${cfg.stateDir}/.config/peerflix-server/config.json"
57       '';
59       serviceConfig = {
60         ExecStart = "${pkgs.nodePackages.peerflix-server}/bin/peerflix-server";
61         User = "peerflix";
62       };
63     };
65     users.users.peerflix = {
66       isSystemUser = true;
67       group = "peerflix";
68     };
69     users.groups.peerflix = {};
70   };