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