1{ config, lib, pkgs, ... }:
2
3with lib;
4
5let
6 cfg = config.services.amule;
7 user = if cfg.user != null then cfg.user else "amule";
8in
9
10{
11
12 ###### interface
13
14 options = {
15
16 services.amule = {
17
18 enable = mkOption {
19 type = types.bool;
20 default = false;
21 description = ''
22 Whether to run the AMule daemon. You need to manually run "amuled --ec-config" to configure the service for the first time.
23 '';
24 };
25
26 dataDir = mkOption {
27 type = types.str;
28 default = "/home/${user}/";
29 description = ''
30 The directory holding configuration, incoming and temporary files.
31 '';
32 };
33
34 user = mkOption {
35 type = types.nullOr types.str;
36 default = null;
37 description = ''
38 The user the AMule daemon should run as.
39 '';
40 };
41
42 };
43
44 };
45
46
47 ###### implementation
48
49 config = mkIf cfg.enable {
50
51 users.users = mkIf (cfg.user == null) [
52 { name = "amule";
53 description = "AMule daemon";
54 group = "amule";
55 uid = config.ids.uids.amule;
56 } ];
57
58 users.groups = mkIf (cfg.user == null) [
59 { name = "amule";
60 gid = config.ids.gids.amule;
61 } ];
62
63 systemd.services.amuled = {
64 description = "AMule daemon";
65 wantedBy = [ "multi-user.target" ];
66 after = [ "network.target" ];
67
68 preStart = ''
69 mkdir -p ${cfg.dataDir}
70 chown ${user} ${cfg.dataDir}
71 '';
72
73 script = ''
74 ${pkgs.su}/bin/su -s ${pkgs.runtimeShell} ${user} \
75 -c 'HOME="${cfg.dataDir}" ${pkgs.amuleDaemon}/bin/amuled'
76 '';
77 };
78 };
79}