This commit is contained in:
elwrcl committed 2026-10-31 16:08:20 +03:00
1 parent 54da39799a
commit 8174bf56f8
2 files changed
+60

No files matched your search

+1
View File
@@ -100,6 +100,7 @@ in
config.flake.homeModules.home-discord-plugins config.flake.homeModules.home-discord-plugins
config.flake.homeModules.home-thunderbird config.flake.homeModules.home-thunderbird
config.flake.homeModules.home-obsidian config.flake.homeModules.home-obsidian
config.flake.homeModules.home-obsidian-icloud-sync
config.flake.homeModules.home-mpv config.flake.homeModules.home-mpv
config.flake.homeModules.home-mpv-intel-hard config.flake.homeModules.home-mpv-intel-hard
config.flake.homeModules.home-mpv-svp config.flake.homeModules.home-mpv-svp
@@ -0,0 +1,59 @@
{ ... }:
{
flake.homeModules.home-obsidian-icloud-sync =
{ config, pkgs, ... }:
let
vault = "${config.home.homeDirectory}/${config.programs.obsidian.vaults.notes.target}";
remote = "icloud:Obsidian/elars";
filters = pkgs.writeText "obsidian-icloud-filters.txt" ''
- .obsidian/**
- .trash/**
- .DS_Store
'';
sync = pkgs.writeShellScript "obsidian-icloud-sync" ''
workdir="${config.xdg.stateHome}/obsidian-icloud-sync"
${pkgs.coreutils}/bin/mkdir -p "$workdir"
resync=()
shopt -s nullglob
listings=("$workdir"/*.lst)
if [ ''${#listings[@]} -eq 0 ]; then
resync=(--resync)
fi
if ! ${pkgs.diffutils}/bin/cmp -s ${filters} "$workdir/filters.txt"; then
${pkgs.coreutils}/bin/install -m644 ${filters} "$workdir/filters.txt"
resync=(--resync)
fi
exec ${pkgs.rclone}/bin/rclone bisync "${vault}" "${remote}" \
--filters-file "$workdir/filters.txt" \
--workdir "$workdir" \
--resilient --recover --max-lock 2m \
--conflict-resolve newer \
"''${resync[@]}"
'';
in
{
systemd.user.services.obsidian-icloud-sync = {
Unit = {
Description = "Obsidian vault <-> iCloud (rclone bisync)";
After = [ "network-online.target" ];
};
Service = {
Type = "oneshot";
ExecStart = "${sync}";
};
};
systemd.user.timers.obsidian-icloud-sync = {
Unit.Description = "Periodic Obsidian iCloud sync";
Timer = {
OnStartupSec = "1min";
OnUnitInactiveSec = "3min";
};
Install.WantedBy = [ "timers.target" ];
};
};
}