at master 1.5 kB view raw
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}