grimm-nixos-laptop/common/cloudsync.nix

48 lines
2.0 KiB
Nix

{pkgs, config, lib, ... }: let
cfg = config.grimmShared;
in {
config = with cfg; lib.mkIf (enable && cloudSync.enable) (let
cloud_cmd = ''${pkgs.nextcloud-client}/bin/nextcloudcmd -u ${config.grimmShared.cloudSync.username} -p "$(cat ${config.grimmShared.cloudSync.passwordFile})" -h -n --path'';
sync_server = "https://${config.grimmShared.cloudSync.server}";
in {
environment.systemPackages = with pkgs; [
(writeShellScriptBin "cloudsync-cmd" (cloud_cmd + " $@ " + sync_server))
nextcloud-client
];
systemd.services = lib.mkMerge (lib.mapAttrsToList (local_user: user_conf: let
paths = user_conf.syncPaths;
sync_script = lib.strings.concatLines (map ({local, remote}: let
remote_clean = lib.strings.concatStrings (builtins.match "/*(.+)" remote);
in "${cloud_cmd} /${remote_clean} ${local} ${sync_server}" ) paths);
in { # user-specific sync jobs
"nextcloud-autosync-${local_user}" = lib.mkIf ( paths != [] ) {
description = "Auto sync Nextcloud";
after = [ "network-online.target" ];
wants = [ "network-online.target" ];
serviceConfig.Type = "simple";
serviceConfig.User = local_user;
serviceConfig.Group= "users";
script= sync_script;
# TimeoutStopSec = "180";
# KillMode = "process";
# KillSignal = "SIGINT";
wantedBy = ["multi-user.target"];
enable=true;
};
}) config.users.users );
systemd.timers = lib.mkMerge (lib.mapAttrsToList (local_user: user_conf: let
paths = user_conf.syncPaths;
in { # user-specific sync jobs
"nextcloud-autosync-${local_user}" = lib.mkIf ( paths != [] ) {
description = "Automatic sync files with Nextcloud when booted up after 5 minutes then rerun every 60 minutes";
timerConfig.OnBootSec = "5min";
timerConfig.OnUnitActiveSec = "60min";
wantedBy = ["multi-user.target" "timers.target"];
enable = true;
};
}) config.users.users );
});
}