{ pkgs, config, lib, ... }: let inherit (lib) mkIf mkEnableOption getExe; cfg = config.console.yazi; in { options = { console.yazi.enable = mkEnableOption "enable yazi file manager"; }; config = mkIf cfg.enable { programs.yazi = { enable = true; # file manager in rust enableNushellIntegration = true; shellWrapperName = "y"; settings = { opener = { open = [ { run = "xdg-open \"$@\""; orphan = true; desc = "Open"; } ]; edit = [ { run = "$EDITOR \"$@\""; block = true; desc = "Edit"; } ]; dragdrop = [ { run = "${getExe pkgs.ripdrag} -ab \"$@\""; desc = "Drag'n'drop"; orphan = true; for = "unix"; } ]; }; open.rules = [ { mime = "text/*"; use = ["edit" "open" "dragdrop"]; } { name = "*.json"; use = ["edit" "open" "dragdrop"]; } { name = "*.yaml"; use = ["edit" "open" "dragdrop"]; } { name = "*.yml"; use = ["edit" "open" "dragdrop"]; } { name = "*.toml"; use = ["edit" "open" "dragdrop"]; } { name = "*.sh"; use = ["edit" "open" "dragdrop"]; } { name = "*.ini"; use = ["edit" "open" "dragdrop"]; } { name = "*.conf"; use = ["edit" "open" "dragdrop"]; } { name = "*.csv"; use = ["edit" "open" "dragdrop"]; } { name = "*.go"; use = ["edit" "open" "dragdrop"]; } { name = "*.html"; use = ["edit" "open" "dragdrop"]; } { name = "*.c"; use = ["edit" "open" "dragdrop"]; } { name = "*.cpp"; use = ["edit" "open" "dragdrop"]; } { name = "*.rs"; use = ["edit" "open" "dragdrop"]; } { name = "*.nix"; use = ["edit" "open" "dragdrop"]; } { name = "*.py"; use = ["edit" "open" "dragdrop"]; } { name = "*"; use = ["open" "edit" "dragdrop"]; } ]; }; }; }; }