1{ config, pkgs, lib, ... }: 2 3let 4 cfg = config.services.crashplan; 5 crashplan = pkgs.crashplan; 6 varDir = "/var/lib/crashplan"; 7in 8 9with lib; 10 11{ 12 options = { 13 services.crashplan = { 14 enable = mkOption { 15 default = false; 16 type = types.bool; 17 description = '' 18 Starts crashplan background service. 19 ''; 20 }; 21 }; 22 }; 23 24 config = mkIf cfg.enable { 25 environment.systemPackages = [ crashplan ]; 26 27 systemd.services.crashplan = { 28 description = "CrashPlan Backup Engine"; 29 30 wantedBy = [ "multi-user.target" ]; 31 after = [ "network.target" ]; 32 33 preStart = '' 34 ensureDir() { 35 dir=$1 36 mode=$2 37 38 if ! test -e $dir; then 39 ${pkgs.coreutils}/bin/mkdir -m $mode -p $dir 40 elif [ "$(${pkgs.coreutils}/bin/stat -c %a $dir)" != "$mode" ]; then 41 ${pkgs.coreutils}/bin/chmod $mode $dir 42 fi 43 } 44 45 ensureDir ${crashplan.vardir} 755 46 ensureDir ${crashplan.vardir}/conf 700 47 ensureDir ${crashplan.manifestdir} 700 48 ensureDir ${crashplan.vardir}/cache 700 49 ensureDir ${crashplan.vardir}/backupArchives 700 50 ensureDir ${crashplan.vardir}/log 777 51 ''; 52 53 serviceConfig = { 54 Type = "forking"; 55 EnvironmentFile = "${crashplan}/bin/run.conf"; 56 ExecStart = "${crashplan}/bin/CrashPlanEngine start"; 57 ExecStop = "${crashplan}/bin/CrashPlanEngine stop"; 58 PIDFile = "${crashplan.vardir}/CrashPlanEngine.pid"; 59 WorkingDirectory = crashplan; 60 }; 61 }; 62 }; 63}