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