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.mkPackageOption pkgs "onedrive" { };
35 };
36 ### Implementation
37
38 config = lib.mkIf cfg.enable {
39 environment.systemPackages = [ cfg.package ];
40
41 systemd.user.services."onedrive@" = {
42 description = "Onedrive sync service";
43
44 serviceConfig = {
45 Type = "simple";
46 ExecStart = ''
47 ${cfg.package}/bin/onedrive --monitor --confdir=%h/.config/%i
48 '';
49 Restart = "on-failure";
50 RestartSec = 3;
51 RestartPreventExitStatus = 3;
52 };
53 };
54
55 systemd.user.services.onedrive-launcher = {
56 wantedBy = [ "default.target" ];
57 serviceConfig = {
58 Type = "oneshot";
59 ExecStart = "${onedriveLauncher}/bin/onedrive-launcher";
60 };
61 };
62 };
63}