at 25.11-pre 1.7 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.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}