aboutsummaryrefslogtreecommitdiffstats
path: root/pkgs
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs')
-rw-r--r--pkgs/populate/default.nix40
1 files changed, 38 insertions, 2 deletions
diff --git a/pkgs/populate/default.nix b/pkgs/populate/default.nix
index 80e2b96..103235f 100644
--- a/pkgs/populate/default.nix
+++ b/pkgs/populate/default.nix
@@ -1,7 +1,7 @@
with import ../../lib;
with shell;
-{ coreutils, dash, findutils, git, jq, openssh, pass, rsync, writers }:
+{ coreutils, dash, findutils, git, jq, openssh, pass, passage, rsync, writers }:
let
check = { force, target }: let
@@ -171,6 +171,41 @@ let
${rsync' target rsyncDefaultConfig /* sh */ "$tmp_dir"}
'';
+ pop.passage = target: source: /* sh */ ''
+ set -efu
+
+ export PASSAGE_AGE=${quote source.age}
+ export PASSAGE_DIR=${quote source.dir}
+ export PASSAGE_IDENTITIES_FILE=${quote source.identities_file}
+
+ umask 0077
+
+ tmp_dir=$(${coreutils}/bin/mktemp -dt populate-passage.XXXXXXXX)
+ trap cleanup EXIT
+ cleanup() {
+ rm -fR "$tmp_dir"
+ }
+
+ ${findutils}/bin/find "$PASSAGE_DIR" -type f -name \*.age -follow |
+ while read -r age_path; do
+
+ pass_name=''${age_path#$PASSAGE_DIR/}
+ pass_name=''${pass_name%.age}
+
+ out=$tmp_dir/$pass_name
+
+ ${coreutils}/bin/mkdir -p "$(${coreutils}/bin/dirname "$out")"
+ ${passage}/bin/passage show "$pass_name" > "$out"
+
+ ${coreutils}/bin/touch -r "$age_path" "$out"
+ done
+
+ ${findutils}/bin/find "$tmp_dir" -type d \
+ -exec ${coreutils}/bin/touch -t 311111111111.11 {} +
+
+ ${rsync' target rsyncDefaultConfig /* sh */ "$tmp_dir"}
+ '';
+
pop.pipe = target: source: /* sh */ ''
${quote source.command} | {
${runShell target /* sh */ "cat > ${quote target.path}"}
@@ -205,7 +240,8 @@ let
(filter: /* sh */ "--${filter.type} ${quote filter.pattern}")
config.filters} \
-e ${quote (ssh' target)} \
- -vFrlptD \
+ --info=backup,del,copy,misc,mount,name,nonreg,remove,skip,symsafe \
+ -FrlptD \
${optionalString config.deleteExcluded /* sh */ "--delete-excluded"} \
"$source_path" \
${quote (