From b9413da4b99ef5ae843fe3226e8445b94b355ab2 Mon Sep 17 00:00:00 2001 From: Crony Akatsuki Date: Wed, 5 Nov 2025 18:10:11 +0100 Subject: [PATCH] feat(shell): setup yazi file manager. --- modules/cross-platform/home-manager/shell.nix | 46 +++++++++++++++++++ .../home-manager/yazi/folder-rules/main.lua | 12 +++++ .../home-manager/yazi/smart-tab/main.lua | 7 +++ 3 files changed, 65 insertions(+) create mode 100644 modules/cross-platform/home-manager/yazi/folder-rules/main.lua create mode 100644 modules/cross-platform/home-manager/yazi/smart-tab/main.lua diff --git a/modules/cross-platform/home-manager/shell.nix b/modules/cross-platform/home-manager/shell.nix index ab052eb..8d2649c 100644 --- a/modules/cross-platform/home-manager/shell.nix +++ b/modules/cross-platform/home-manager/shell.nix @@ -141,5 +141,51 @@ filter_mode = "directory"; }; }; + + # Install and setup yazi + programs.yazi = { + enable = true; + enableZshIntegration = true; + shellWrapperName = "y"; + settings = { + mgr = { + ratio = [0 4 4]; + sort_by = "natural"; + show_hidden = true; + show_symlink = false; + }; + }; + plugins = { + full-border = pkgs.yaziPlugins.full-border; + smart-enter = pkgs.yaziPlugins.smart-enter; + smart-tab = ./yazi/smart-tab; + folder-rules = ./yazi/folder-rules; + }; + initLua = '' + require("full-border"):setup({ + type = ui.Border.ROUNDED, + }) + + require("smart-enter"):setup({ + open_multi = true, + }) + + require("folder-rules"):setup() + ''; + keymap = { + mgr.prepend_keymap = [ + { + on = "l"; + run = "plugin smart-enter"; + desc = "Enter the child directory, or open the file"; + } + { + on = "t"; + run = "plugin smart-tab"; + desc = "Create a tab and enter the howered directory"; + } + ]; + }; + }; }; } diff --git a/modules/cross-platform/home-manager/yazi/folder-rules/main.lua b/modules/cross-platform/home-manager/yazi/folder-rules/main.lua new file mode 100644 index 0000000..ad2db62 --- /dev/null +++ b/modules/cross-platform/home-manager/yazi/folder-rules/main.lua @@ -0,0 +1,12 @@ +local function setup() + ps.sub("cd", function() + local cwd = cx.active.current.cwd + if cwd:ends_with("downs") then + ya.emit("sort", { "mtime", reverse = true, dir_first = false }) + else + ya.emit("sort", { "natural", reverse = false, dir_first = true }) + end + end) +end + +return { setup = setup } diff --git a/modules/cross-platform/home-manager/yazi/smart-tab/main.lua b/modules/cross-platform/home-manager/yazi/smart-tab/main.lua new file mode 100644 index 0000000..e5270d3 --- /dev/null +++ b/modules/cross-platform/home-manager/yazi/smart-tab/main.lua @@ -0,0 +1,7 @@ +--- @sync entry +return { + entry = function() + local h = cx.active.current.hovered + ya.emit("tab_create", h and h.cha.is_dir and { h.url } or { current = true }) + end, +}