Skip to content

Commit

Permalink
Merge pull request NixOS#64112 from davidtwco/deluge/users-groups-fir…
Browse files Browse the repository at this point in the history
…ewalls

nixos/deluge: add user/group/openFirewall opts and extraction packages to path
  • Loading branch information
infinisil committed Jul 12, 2019
2 parents ec381b5 + 16c394f commit 5b8b5a6
Show file tree
Hide file tree
Showing 2 changed files with 74 additions and 23 deletions.
91 changes: 70 additions & 21 deletions nixos/modules/services/torrent/deluge.nix
Expand Up @@ -118,36 +118,74 @@ in {
more informations.
'';
};

user = mkOption {
type = types.str;
default = "deluge";
description = ''
User account under which deluge runs.
'';
};

group = mkOption {
type = types.str;
default = "deluge";
description = ''
Group under which deluge runs.
'';
};

extraPackages = mkOption {
type = types.listOf types.package;
default = [];
description = ''
Extra packages available at runtime to enable Deluge's plugins. For example,
extraction utilities are required for the built-in "Extractor" plugin.
This always contains unzip, gnutar, xz, p7zip and bzip2.
'';
};
};

deluge.web = {
enable = mkEnableOption "Deluge Web daemon";

port = mkOption {
type = types.port;
type = types.port;
default = 8112;
description = ''
Deluge web UI port.
'';
};

openFirewall = mkOption {
type = types.bool;
default = false;
description = ''
Open ports in the firewall for deluge web daemon
'';
};
};
};
};

config = mkIf cfg.enable {

systemd.tmpfiles.rules = [ "d '${configDir}' 0770 deluge deluge" ]
# Provide a default set of `extraPackages`.
services.deluge.extraPackages = with pkgs; [ unzip gnutar xz p7zip bzip2 ];

systemd.tmpfiles.rules = [ "d '${configDir}' 0770 ${cfg.user} ${cfg.group}" ]
++ optional (cfg.config ? "download_location")
"d '${cfg.config.download_location}' 0770 deluge deluge"
"d '${cfg.config.download_location}' 0770 ${cfg.user} ${cfg.group}"
++ optional (cfg.config ? "torrentfiles_location")
"d '${cfg.config.torrentfiles_location}' 0770 deluge deluge"
"d '${cfg.config.torrentfiles_location}' 0770 ${cfg.user} ${cfg.group}"
++ optional (cfg.config ? "move_completed_path")
"d '${cfg.config.move_completed_path}' 0770 deluge deluge";
"d '${cfg.config.move_completed_path}' 0770 ${cfg.user} ${cfg.group}";

systemd.services.deluged = {
after = [ "network.target" ];
description = "Deluge BitTorrent Daemon";
wantedBy = [ "multi-user.target" ];
path = [ pkgs.deluge ];
path = [ pkgs.deluge ] ++ cfg.extraPackages;
serviceConfig = {
ExecStart = ''
${pkgs.deluge}/bin/deluged \
Expand All @@ -157,8 +195,8 @@ in {
# To prevent "Quit & shutdown daemon" from working; we want systemd to
# manage it!
Restart = "on-success";
User = "deluge";
Group = "deluge";
User = cfg.user;
Group = cfg.group;
UMask = "0002";
LimitNOFILE = cfg.openFilesLimit;
};
Expand All @@ -177,26 +215,37 @@ in {
--config ${configDir} \
--port ${toString cfg.web.port}
'';
User = "deluge";
Group = "deluge";
User = cfg.user;
Group = cfg.group;
};
};

networking.firewall = mkIf (cfg.declarative && cfg.openFirewall && !(cfg.config.random_port or true)) {
allowedTCPPortRanges = singleton (listToRange (cfg.config.listen_ports or listenPortsDefault));
allowedUDPPortRanges = singleton (listToRange (cfg.config.listen_ports or listenPortsDefault));
};
networking.firewall = mkMerge [
(mkIf (cfg.declarative && cfg.openFirewall && !(cfg.config.random_port or true)) {
allowedTCPPortRanges = singleton (listToRange (cfg.config.listen_ports or listenPortsDefault));
allowedUDPPortRanges = singleton (listToRange (cfg.config.listen_ports or listenPortsDefault));
})
(mkIf (cfg.web.openFirewall) {
allowedTCPPorts = [ cfg.web.port ];
})
];

environment.systemPackages = [ pkgs.deluge ];

users.users.deluge = {
group = "deluge";
uid = config.ids.uids.deluge;
home = cfg.dataDir;
createHome = true;
description = "Deluge Daemon user";
users.users = mkIf (cfg.user == "deluge") {
deluge = {
group = cfg.group;
uid = config.ids.uids.deluge;
home = cfg.dataDir;
createHome = true;
description = "Deluge Daemon user";
};
};

users.groups.deluge.gid = config.ids.gids.deluge;
users.groups = mkIf (cfg.group == "deluge") {
deluge = {
gid = config.ids.gids.deluge;
};
};
};
}
6 changes: 4 additions & 2 deletions nixos/tests/deluge.nix
Expand Up @@ -8,9 +8,11 @@ import ./make-test.nix ({ pkgs, ...} : {
simple = {
services.deluge = {
enable = true;
web.enable = true;
web = {
enable = true;
openFirewall = true;
};
};
networking.firewall.allowedTCPPorts = [ 8112 ];
};

declarative =
Expand Down

0 comments on commit 5b8b5a6

Please sign in to comment.