{ lib, pkgs, ... }: let make_plugin = names: lib.listToAttrs (map (name: { name = name; value = { package = pkgs.yaziPlugins.${name}; setup = true; }; }) names); in { home-manager.users.djai.programs.yazi = { enable = true; enableFishIntegration = true; plugins = with pkgs.yaziPlugins; { duckdb = duckdb; compress = compress; bookmarks = bookmarks; clipboard = clipboard; ouch = ouch; rich-preview = rich-preview; jump-to-char = jump-to-char; yafg = { package = yafg; setup = true; settings = { toggle-mode-key = "alt-t"; editor = "nvim"; args = [ "--noplugin" ]; file-arg-format = "+{row} {file}"; }; }; relative-motions = relative-motions; } // make_plugin ["starship" "close-and-restore-tab" "full-border"] ; # FIXME: lots of these are wonky keymap = { mgr.prepend_keymap = [ {on = [ "F" "G" ]; description = "use fmf"; run = "plugin yafg";} {on = [ "f" ]; description = "Jump to char"; run = "plugin jump-to-char";} {on = [ "y" ]; description = "Yank selected files (copy)"; run = [ "yank" "plugin clipboard -- --action=copy" ];} {on = [ "x" ]; description = "Yank selected files (cut)"; run = [ "yank --cut" "plugin clipboard -- --action=copy" ];} {on = [ "" ]; description = "Paste yanked clipboard files"; run = "plugin clipboard -- --action=paste";} {on = [ "m" ]; description = "Save current position as bookmark "; run = "plugin bookmarks save";} {on = [ "'" ]; description = "Jump to bookmark "; run = "plugin bookmarks jump";} {on = [ "b" "d" ]; description = "Delete bookmark"; run = "plugin bookmarks delete";} {on = [ "B" "D" ]; description = "Delete all bookmarks"; run = "plugin bookmarks delete_all";} {on = [ "c" "a" "a" ]; description = "Archive selected files"; run = "plugin compress";} {on = [ "c" "a" "p" ]; description = "Archive selected files (encrypted)"; run = "plugin compress -p";} {on = [ "1" ]; run = "plugin relative-motions 1";} {on = [ "2" ]; run = "plugin relative-motions 2";} {on = [ "3" ]; run = "plugin relative-motions 3";} {on = [ "4" ]; run = "plugin relative-motions 4";} {on = [ "5" ]; run = "plugin relative-motions 5";} {on = [ "6" ]; run = "plugin relative-motions 6";} {on = [ "7" ]; run = "plugin relative-motions 7";} {on = [ "8" ]; run = "plugin relative-motions 8";} {on = [ "9" ]; run = "plugin relative-motions 9";} {on = [ "" ]; description = "Restore previously closed tab"; run = "plugin close-and-restore-tab restore";} ]; }; }; }