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}