From 41bdeb88009dd232808edee9fc0e4ae94358d8d6 Mon Sep 17 00:00:00 2001 From: Arpit Chakladar Date: Sat, 29 Aug 2026 02:02:23 +0530 Subject: refactor: moving script into modules that makes sense - instead of collecting all scripts into modules/scripts we are moving them to modules that makes sense (yazi-file-chooser.sh into yazi) --- modules/file-management/yazi/default.nix | 88 +++++++++++++++-------- modules/file-management/yazi/yazi-file-chooser.sh | 21 ++++++ 2 files changed, 79 insertions(+), 30 deletions(-) create mode 100644 modules/file-management/yazi/yazi-file-chooser.sh (limited to 'modules/file-management') diff --git a/modules/file-management/yazi/default.nix b/modules/file-management/yazi/default.nix index 8d59446..d704614 100644 --- a/modules/file-management/yazi/default.nix +++ b/modules/file-management/yazi/default.nix @@ -1,5 +1,29 @@ # Terminal file manager with native previews -{ config, lib, ... }: +{ + config, + lib, + pkgs, + ... +}: +let + inherit ((import ../../lib/script.nix { inherit lib pkgs; })) mkScriptModule; + yaziFileChooser = mkScriptModule { + scope = [ + "file-management" + "yazi" + ]; + name = "yazi-file-chooser"; + path = ./yazi-file-chooser.sh; + description = "Yazi-based file chooser for XDG Desktop Portal"; + deps = [ + pkgs.bash + config.file-management.yazi.package + config.terminal.kitty.package + ]; + extraLinks = [ "~/.config/xdg-desktop-portal-termfilechooser/config" ]; + inherit config; + }; +in { imports = [ ./theme.nix @@ -15,40 +39,44 @@ defaultText = lib.literalExpression "config.programs.yazi.finalPackage"; description = "The yazi package to use. Defaults to the wrapped finalPackage from programs.yazi."; }; - }; + } + // yaziFileChooser.options.file-management.yazi; - config = lib.mkIf config.file-management.yazi.enable { - programs.yazi = { - enable = true; - shellWrapperName = "yy"; - enableZshIntegration = config.terminal.zsh.enable; - settings = { - mgr = { - show_hidden = true; + config = lib.mkMerge [ + (lib.mkIf config.file-management.yazi.enable { + programs.yazi = { + enable = true; + shellWrapperName = "yy"; + enableZshIntegration = config.terminal.zsh.enable; + settings = { + mgr = { + show_hidden = true; + }; }; }; - }; - home.file.".local/share/icons/hicolor/scalable/apps/yazi.png" = { - source = config.lib.file.mkOutOfStoreSymlink "${config.file-management.yazi.package}/share/pixmaps/yazi.png"; - }; + home.file.".local/share/icons/hicolor/scalable/apps/yazi.png" = { + source = config.lib.file.mkOutOfStoreSymlink "${config.file-management.yazi.package}/share/pixmaps/yazi.png"; + }; - xdg.desktopEntries."yazi" = { - name = "Yazi"; - exec = "${lib.getExe config.terminal.kitty.package} --class yazi -e ${lib.getExe config.file-management.yazi.package}"; - icon = "yazi"; - categories = [ "Utility" ]; - comment = "Terminal file manager"; - terminal = false; - type = "Application"; - }; + xdg.desktopEntries."yazi" = { + name = "Yazi"; + exec = "${lib.getExe config.terminal.kitty.package} --class yazi -e ${lib.getExe config.file-management.yazi.package}"; + icon = "yazi"; + categories = [ "Utility" ]; + comment = "Terminal file manager"; + terminal = false; + type = "Application"; + }; - xdg.mimeApps.defaultApplications = { - "inode/directory" = "yazi.desktop"; - }; + xdg.mimeApps.defaultApplications = { + "inode/directory" = "yazi.desktop"; + }; - home.sessionVariables = { - TERMCMD = lib.mkIf config.terminal.kitty.enable "${lib.getExe config.terminal.kitty.package} --class file-explorer --title 'Yazi'"; - }; - }; + home.sessionVariables = { + TERMCMD = lib.mkIf config.terminal.kitty.enable "${lib.getExe config.terminal.kitty.package} --class file-explorer --title 'Yazi'"; + }; + }) + yaziFileChooser.config + ]; } diff --git a/modules/file-management/yazi/yazi-file-chooser.sh b/modules/file-management/yazi/yazi-file-chooser.sh new file mode 100644 index 0000000..7978222 --- /dev/null +++ b/modules/file-management/yazi/yazi-file-chooser.sh @@ -0,0 +1,21 @@ +#!/usr/bin/env bash +# $1 toggles multiple selection +# $2 toggles directory select mode +# $3 toggles save file mode +# $4 is the initial directory path +# $5 is the output path file + +# multiple="$1" +directory="$2" +# save="$3" +path="$4" +out="$5" + +# Pick directory vs single/multiple file +if [ "$directory" = "1" ]; then + # Outputs the final working directory path on exit + exec yazi "$path" --cwd-file="$out" +else + # Writes all selected file paths to the output file on exit + exec yazi "$path" --chooser-file="$out" +fi -- cgit v1.2.3