aboutsummaryrefslogtreecommitdiffstats
path: root/modules/scripts/yazi-file-chooser
diff options
context:
space:
mode:
Diffstat (limited to 'modules/scripts/yazi-file-chooser')
-rw-r--r--modules/scripts/yazi-file-chooser/default.nix24
-rw-r--r--modules/scripts/yazi-file-chooser/script.sh20
2 files changed, 44 insertions, 0 deletions
diff --git a/modules/scripts/yazi-file-chooser/default.nix b/modules/scripts/yazi-file-chooser/default.nix
new file mode 100644
index 0000000..d06151a
--- /dev/null
+++ b/modules/scripts/yazi-file-chooser/default.nix
@@ -0,0 +1,24 @@
+{
+ config,
+ lib,
+ pkgs,
+ ...
+}:
+let
+ inherit ((import ../lib.nix { inherit lib pkgs; })) mkScriptModule;
+ base = mkScriptModule {
+ name = "yazi-file-chooser";
+ path = ./script.sh;
+ description = "Yazi-based file chooser for XDG Desktop Portal";
+ deps = [
+ config.file-management.yazi.package
+ config.terminal.kitty.package
+ ];
+ extraLinks = [ "~/.config/xdg-desktop-portal-termfilechooser/config" ];
+ inherit config;
+ };
+in
+{
+ options = base.options;
+ config = base.moduleConfig;
+}
diff --git a/modules/scripts/yazi-file-chooser/script.sh b/modules/scripts/yazi-file-chooser/script.sh
new file mode 100644
index 0000000..a2f9166
--- /dev/null
+++ b/modules/scripts/yazi-file-chooser/script.sh
@@ -0,0 +1,20 @@
+# $1 = multiple selection (1/0)
+# $2 = directory select mode (1/0)
+# $3 = save file mode (1/0)
+# $4 = initial directory path
+# $5 = output path file (where portal expects selected paths)
+
+multiple="$1"
+directory="$2"
+save="$3"
+path="$4"
+out="$5"
+
+# Pick directory vs single/multiple file
+if [ "$directory" = "1" ]; then
+ # --cwd-file outputs the final working directory path when exiting
+ exec yazi "$path" --cwd-file="$out"
+else
+ # --chooser-file writes all selected file path(s) to $out on exit
+ exec yazi "$path" --chooser-file="$out"
+fi