diff --git a/modules/nixos/syncthing/default.nix b/modules/nixos/syncthing/default.nix index 52f6564..cc5dc98 100644 --- a/modules/nixos/syncthing/default.nix +++ b/modules/nixos/syncthing/default.nix @@ -1,10 +1,17 @@ -{ config, lib, ... }: +{ + config, + lib, + pkgs, + ... +}: let cfg = config.services.syncthing; guiPort = 8384; transferPort = 22000; fqdn = "sync.local"; + # TODO: look into https://github.com/dschrempf/syncthing-resolve-conflicts + syncthing-resolve-conflicts = pkgs.callPackage ./syncthing-resolve-conflicts.nix { }; user = "sid"; dirs = [ @@ -81,6 +88,10 @@ in }; }; + environment.systemPackages = [ + syncthing-resolve-conflicts + ]; + sops.secrets."syncthing/gui-pw" = { owner = cfg.user; group = cfg.group; diff --git a/modules/nixos/syncthing/syncthing-resolve-conflicts.nix b/modules/nixos/syncthing/syncthing-resolve-conflicts.nix new file mode 100644 index 0000000..07263b7 --- /dev/null +++ b/modules/nixos/syncthing/syncthing-resolve-conflicts.nix @@ -0,0 +1,13 @@ +{ + writeShellApplication, + ... +}: + +let + name = "syncthing-resolve-conflicts"; + text = builtins.readFile ./${name}.sh; +in +writeShellApplication { + inherit name text; + meta.mainProgram = name; +} diff --git a/modules/nixos/syncthing/syncthing-resolve-conflicts.sh b/modules/nixos/syncthing/syncthing-resolve-conflicts.sh new file mode 100644 index 0000000..e7862ca --- /dev/null +++ b/modules/nixos/syncthing/syncthing-resolve-conflicts.sh @@ -0,0 +1,28 @@ +DRY_RUN=true + +if [[ "${1:-}" == "--apply" ]]; then + DRY_RUN=false + echo "--- RUNNING IN LIVE MODE: Files will be renamed ---" +else + echo "--- RUNNING IN DRY-RUN MODE: No changes will be made ---" + echo "--- Use 'syncthing-resolve-conflicts --apply' to perform the rename ---" +fi + +find . -type f -name "*sync-conflict*" ! -name "*.db" -print0 | while IFS= read -r -d '' file; do + new=$(echo "$file" | sed -E 's/\.sync-conflict-[0-9]{8}-[0-9]{6}-[A-Z0-9]+//') + + if [[ "$file" != "$new" ]]; then + if [ "$DRY_RUN" = true ]; then + echo "[DRY-RUN] Would rename: '$file' -> '$new'" + else + if [[ -f "$new" ]]; then + echo "[SKIP] Target already exists: '$new'" + else + echo "Renaming: '$file' -> '$new'" + mv "$file" "$new" + fi + fi + fi +done + +echo "--- Done ---"