1{
2 config,
3 lib,
4 pkgs,
5 ...
6}:
7let
8 cfg = config.services.onedrive;
9
10 onedriveLauncher = pkgs.writeShellScriptBin "onedrive-launcher" ''
11 # XDG_CONFIG_HOME is not recognized in the environment here.
12 if [ -f $HOME/.config/onedrive-launcher ]
13 then
14 # Hopefully using underscore boundary helps locate variables
15 for _onedrive_config_dirname_ in $(cat $HOME/.config/onedrive-launcher | grep -v '[ \t]*#' )
16 do
17 systemctl --user start onedrive@$_onedrive_config_dirname_
18 done
19 else
20 systemctl --user start onedrive@onedrive
21 fi
22 '';
23
24in
25{
26 ### Documentation
27 # meta.doc = ./onedrive.xml;
28
29 ### Interface
30
31 options.services.onedrive = {
32 enable = lib.mkEnableOption "OneDrive service";
33
34 package = lib.mkOption {
35 type = lib.types.package;
36 default = pkgs.onedrive;
37 defaultText = lib.literalExpression "pkgs.onedrive";
38 description = ''
39 OneDrive package to use.
40 '';
41 };
42 };
43 ### Implementation
44
45 config = lib.mkIf cfg.enable {
46 environment.systemPackages = [ cfg.package ];
47
48 systemd.user.services."onedrive@" = {
49 description = "Onedrive sync service";
50
51 serviceConfig = {
52 Type = "simple";
53 ExecStart = ''
54 ${cfg.package}/bin/onedrive --monitor --confdir=%h/.config/%i
55 '';
56 Restart = "on-failure";
57 RestartSec = 3;
58 RestartPreventExitStatus = 3;
59 };
60 };
61
62 systemd.user.services.onedrive-launcher = {
63 wantedBy = [ "default.target" ];
64 serviceConfig = {
65 Type = "oneshot";
66 ExecStart = "${onedriveLauncher}/bin/onedrive-launcher";
67 };
68 };
69 };
70}