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" "local-fs.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 cp -avn ${crashplan}/conf.template/* ${crashplan.vardir}/conf
52 for x in app.asar bin EULA.txt install.vars lang lib libjniwrap64.so libjniwrap.so libjtux64.so libjtux.so libmd564.so libmd5.so share skin upgrade; do
53 rm -f ${crashplan.vardir}/$x;
54 ln -sf ${crashplan}/$x ${crashplan.vardir}/$x;
55 done
56 '';
57
58 serviceConfig = {
59 Type = "forking";
60 EnvironmentFile = "${crashplan}/bin/run.conf";
61 ExecStart = "${crashplan}/bin/CrashPlanEngine start";
62 ExecStop = "${crashplan}/bin/CrashPlanEngine stop";
63 PIDFile = "${crashplan.vardir}/CrashPlanEngine.pid";
64 WorkingDirectory = crashplan;
65 };
66 };
67 };
68}