diff --git a/modules/applications/default.nix b/modules/applications/default.nix index 75bce2d..d6dbef0 100644 --- a/modules/applications/default.nix +++ b/modules/applications/default.nix @@ -33,6 +33,7 @@ ./vim ./vscode ./wayland.nix + ./yazi.nix ./zellij ./zoom.nix ./zoxide.nix diff --git a/modules/applications/yazi.nix b/modules/applications/yazi.nix new file mode 100644 index 0000000..b6ba0ab --- /dev/null +++ b/modules/applications/yazi.nix @@ -0,0 +1,153 @@ +{ + pkgs, + lib, + config, + ... +}: +let + cfg = config.my.applications.yazi; +in +{ + options.my.applications.yazi = { + enable = lib.mkEnableOption "yazi terminal file manager"; + }; + + config = lib.mkIf cfg.enable { + home-manager.sharedModules = [ + { + programs.yazi = { + enable = true; + enableZshIntegration = true; + shellWrapperName = "y"; + + package = pkgs.yazi.override { + _7zz = pkgs._7zz-rar; + }; + + extraPackages = with pkgs; [ + file # MIME / file type detection + ffmpeg # video thumbnails + _7zz-rar # archive preview/extract, RAR support + jq # JSON preview + poppler # PDF preview + fd # file search + ripgrep # content search + fzf # fuzzy navigation + zoxide # historical directory jump + resvg # SVG preview + imagemagick # HEIC / JXL / font / image preview + wl-clipboard # Wayland clipboard + xdg-utils # xdg-open + ]; + + plugins = { + "full-border" = { + package = pkgs.yaziPlugins.full-border; + setup = true; + }; + + "toggle-pane" = pkgs.yaziPlugins.toggle-pane; + chmod = pkgs.yaziPlugins.chmod; + }; + + keymap = { + mgr.prepend_keymap = [ + { + on = "T"; + run = "plugin toggle-pane max-preview"; + desc = "Maximize or restore preview pane"; + } + { + on = [ + "c" + "m" + ]; + run = "plugin chmod"; + desc = "Chmod selected files"; + } + ]; + }; + + settings = { + mgr = { + ratio = [ + 1 + 3 + 4 + ]; + sort_by = "natural"; + sort_sensitive = false; + sort_dir_first = true; + sort_reverse = false; + linemode = "size"; + show_hidden = true; + show_symlink = true; + scrolloff = 8; + }; + + preview = { + wrap = "yes"; + tab_size = 2; + }; + + opener = { + edit = [ + { + run = "${pkgs.neovim}/bin/nvim %s"; + block = true; + for = "unix"; + } + ]; + + open = [ + { + run = "${pkgs.xdg-utils}/bin/xdg-open %s"; + orphan = true; + desc = "Open"; + for = "linux"; + } + ]; + }; + + open = { + prepend_rules = [ + { + mime = "text/*"; + use = "edit"; + } + { + url = "*.nix"; + use = "edit"; + } + { + url = "*.json"; + use = "edit"; + } + { + url = "*.md"; + use = "edit"; + } + { + mime = "image/*"; + use = "open"; + } + { + mime = "video/*"; + use = "open"; + } + { + mime = "audio/*"; + use = "open"; + } + { + mime = "application/pdf"; + use = "open"; + } + ]; + }; + }; + }; + } + ]; + }; +} diff --git a/modules/features/cli/interactive.nix b/modules/features/cli/interactive.nix index 0aa5699..7ff487e 100644 --- a/modules/features/cli/interactive.nix +++ b/modules/features/cli/interactive.nix @@ -15,6 +15,7 @@ in config = lib.mkIf cfg.enable { my.applications = { vim.enable = true; + yazi.enable = true; zellij.enable = true; };