about summary refs log tree commit diff stats
path: root/home-manager/config/lf/commands/scripts/archive
diff options
context:
space:
mode:
authorSoispha <soispha@vhack.eu>2023-05-28 22:10:24 +0200
committerSoispha <soispha@vhack.eu>2023-05-28 22:10:24 +0200
commite5af81a5f9d9d3a2af0d3e970815e3c73beb0840 (patch)
treea8acf6adde5c6f509bf523c28d4243869a3d1107 /home-manager/config/lf/commands/scripts/archive
parentFix(bootstrap): Quote scripts (diff)
downloadnixos-config-e5af81a5f9d9d3a2af0d3e970815e3c73beb0840.tar.gz
nixos-config-e5af81a5f9d9d3a2af0d3e970815e3c73beb0840.zip
Fix(hm/conf/lf/cmds): Rework some of them
Diffstat (limited to '')
-rwxr-xr-xhome-manager/config/lf/commands/scripts/archive42
1 files changed, 29 insertions, 13 deletions
diff --git a/home-manager/config/lf/commands/scripts/archive b/home-manager/config/lf/commands/scripts/archive
index 617a4ace..3d267fa1 100755
--- a/home-manager/config/lf/commands/scripts/archive
+++ b/home-manager/config/lf/commands/scripts/archive
@@ -9,30 +9,46 @@ SHELL_LIBRARY_VERSION="1.1.3" . %SHELL_LIBRARY_PATH
 # times.
 set -f
 
-archivers=$(tmp 'echo "gzip xz 7z zip"');
+archivers="$(tmp 'echo "gzip xz 7z zip"')";
 
-readp "File Name: " name;
+prompt "Archive name: "
+name=""
+while [ -z "$name" ] || [ -e "$name" ]
+do
+  read -r name
+  if [ -e "$name" ]; then
+    prompt "Archive already exists, overwrite [y|N]: "
+    read -r ans
 
-FX="$(awk -v Root="$(if [ "$(pwd)" = "/" ]; then pwd; else echo "$(pwd)/";fi)" '{
-for (i=1; i<=NF; i++) {
-    gsub(Root, "", $i);
-    print $i;
-}
-}' "$(tmp "echo \"$fx\" | tr '\n' ' '")")";
+    if [ "$ans" = "y" ]; then
+      break
+    else
+      prompt "Archive name: "
+    fi
+  fi
+done
 
-case $(awk '{for (i=1; i<=NF; i++) print $i}' $archivers | fzf) in
+root="$(if [ "$(pwd)" = "/" ]; then pwd; else echo "$(pwd)/";fi)";
+
+# fx contains all selected file name separated by a newline
+while read -r raw_file; do
+    file="$(echo "$raw_file" | sed "s|$root||")";
+    set -- "$@" "$file";
+done < "$(tmp "echo '$fx'")";
+
+case "$(awk '{for (i=1; i<=NF; i++) print $i}' "$archivers" | fzf)" in
     "gzip")
-        tar -czf "$name".tar.gz $FX
+        tar -czf "$name".tar.gz "$@"
         ;;
     "xz")
-        tar -cf "$name".tar $FX
+        tar -cf "$name".tar "$@"
         xz -z -9 -e -T0 "$name".tar
         ;;
     "7z")
-        7z a "$name".7z $FX
+        7z a "$name".7z "$@"
         ;;
     "zip")
-        zip --symlinks -r "$name".zip $FX
+        zip --symlinks -r "$name".zip "$@"
         ;;
 esac
 # vim: ft=sh