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 default = false;
20 description = ''
21 Whether to run the AMule daemon. You need to manually run "amuled --ec-config" to configure the service for the first time.
22 '';
23 };
24
25 dataDir = mkOption {
26 default = ''/home/${user}/'';
27 description = ''
28 The directory holding configuration, incoming and temporary files.
29 '';
30 };
31
32 user = mkOption {
33 default = null;
34 description = ''
35 The user the AMule daemon should run as.
36 '';
37 };
38
39 };
40
41 };
42
43
44 ###### implementation
45
46 config = mkIf cfg.enable {
47
48 users.extraUsers = mkIf (cfg.user == null) [
49 { name = "amule";
50 description = "AMule daemon";
51 group = "amule";
52 uid = config.ids.uids.amule;
53 } ];
54
55 users.extraGroups = mkIf (cfg.user == null) [
56 { name = "amule";
57 gid = config.ids.gids.amule;
58 } ];
59
60 systemd.services.amuled = {
61 description = "AMule daemon";
62 wantedBy = [ "ip-up.target" ];
63
64 preStart = ''
65 mkdir -p ${cfg.dataDir}
66 chown ${user} ${cfg.dataDir}
67 '';
68
69 script = ''
70 ${pkgs.su}/bin/su -s ${pkgs.stdenv.shell} ${user} \
71 -c 'HOME="${cfg.dataDir}" ${pkgs.amuleDaemon}/bin/amuled'
72 '';
73 };
74 };
75}