1{ config, lib, pkgs, ... }:
2
3with lib;
4
5let
6 cfg = config.services.deluge;
7 cfg_web = config.services.deluge.web;
8 openFilesLimit = 4096;
9
10in {
11 options = {
12 services = {
13 deluge = {
14 enable = mkOption {
15 default = false;
16 description = "Start the Deluge daemon";
17 };
18
19 openFilesLimit = mkOption {
20 default = openFilesLimit;
21 example = 8192;
22 description = ''
23 Number of files to allow deluged to open.
24 '';
25 };
26 };
27
28 deluge.web = {
29 enable = mkOption {
30 default = false;
31 description = ''
32 Start Deluge Web daemon.
33 '';
34 };
35 };
36 };
37 };
38
39 config = mkIf cfg.enable {
40
41 systemd.services.deluged = {
42 after = [ "network.target" ];
43 description = "Deluge BitTorrent Daemon";
44 wantedBy = [ "multi-user.target" ];
45 path = [ pkgs.pythonPackages.deluge ];
46 serviceConfig = {
47 ExecStart = "${pkgs.pythonPackages.deluge}/bin/deluged -d";
48 # To prevent "Quit & shutdown daemon" from working; we want systemd to manage it!
49 Restart = "on-success";
50 User = "deluge";
51 Group = "deluge";
52 LimitNOFILE = cfg.openFilesLimit;
53 };
54 };
55
56 systemd.services.delugeweb = mkIf cfg_web.enable {
57 after = [ "network.target" ];
58 description = "Deluge BitTorrent WebUI";
59 wantedBy = [ "multi-user.target" ];
60 path = [ pkgs.pythonPackages.deluge ];
61 serviceConfig.ExecStart = "${pkgs.pythonPackages.deluge}/bin/deluge --ui web";
62 serviceConfig.User = "deluge";
63 serviceConfig.Group = "deluge";
64 };
65
66 environment.systemPackages = [ pkgs.pythonPackages.deluge ];
67
68 users.extraUsers.deluge = {
69 group = "deluge";
70 uid = config.ids.uids.deluge;
71 home = "/var/lib/deluge/";
72 createHome = true;
73 description = "Deluge Daemon user";
74 };
75
76 users.extraGroups.deluge.gid = config.ids.gids.deluge;
77 };
78}