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