{...}: let numbers = ["0" "1" "2" "3" "4" "5" "6" "7" "8" "9"]; mkNumberedCommand = { command_template, prefix, number, desc_template, }: { name = "${prefix}${number}"; value = { action = '' function() ${command_template number} end ''; lua = true; desc = "${desc_template number}"; }; }; mkGotoTerminalCommand = number: let desc_template = number: "Goto terminal number ${number}"; command_template = number: ''require("harpoon.term").gotoTerminal(${number})''; prefix = "gt"; in mkNumberedCommand {inherit desc_template command_template prefix number;}; mkGotoFileCommand = number: let desc_template = number: "Goto Buffer number ${number}"; command_template = number: ''require("harpoon.ui").nav_file(${number})''; prefix = "gf"; in mkNumberedCommand {inherit desc_template command_template prefix number;}; gotoTerminalMappings = builtins.listToAttrs (builtins.map mkGotoTerminalCommand numbers); gotoFileMappings = builtins.listToAttrs (builtins.map mkGotoFileCommand numbers); in { programs.nixvim = { plugins.harpoon = { enable = true; # menu.width = "vim.api.nvim_win_get_width(0) - 4"; # TODO integrate that keymaps = { tmuxGotoTerminal = null; # TODO }; }; maps.normalVisualOp = { "-" = { action = '' function() require("harpoon.ui").nav_next() end ''; lua = true; desc = "go to the next marked file"; }; "_" = { action = '' function() require("harpoon.ui").nav_prev() end ''; lua = true; desc = "go to the previous marked file"; }; "" = { action = '' function() require("harpoon.mark").add_file() end ''; lua = true; desc = "add a mark to the open file in harpoon."; }; "gqc" = { action = '' function() require("harpoon.cmd-ui").toggle_quick_menu() end ''; lua = true; desc = "toggle the harpoon command quick menu to see all commands."; }; "q" = { action = '' function() require("harpoon.ui").toggle_quick_menu() end ''; lua = true; desc = "toggle the harpoon normal quick menu to see all marks."; }; } // gotoFileMappings // gotoTerminalMappings; }; }