{pkgs, ...}: let numbers = ["0" "1" "2" "3" "4" "5" "6" "7" "8" "9"]; mkNumberedCommand = { command_template, prefix, number, desc_template, }: { key = "${prefix}${number}"; action.__raw = '' function() ${command_template number} end ''; options.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.map mkGotoTerminalCommand numbers; gotoFileMappings = builtins.map mkGotoFileCommand numbers; in { programs.nixvim = { plugins.harpoon = { enable = true; package = pkgs.vimExtraPlugins.harpoon; enableTelescope = true; # menu.width = "vim.api.nvim_win_get_width(0) - 4"; # TODO: integrate that keymaps = { tmuxGotoTerminal = null; # TODO: }; }; keymaps = [ { key = "-"; action.__raw = '' function() require("harpoon.ui").nav_next() end ''; options.desc = "go to the next marked file"; } { key = "_"; action.__raw = '' function() require("harpoon.ui").nav_prev() end ''; options.desc = "go to the previous marked file"; } { key = ""; action.__raw = '' function() require("harpoon.mark").add_file() end ''; options.desc = "add a mark to the open file in harpoon."; } { key = "gqc"; action.__raw = '' function() require("harpoon.cmd-ui").toggle_quick_menu() end ''; options.desc = "toggle the harpoon command quick menu to see all commands."; } { key = "q"; action.__raw = '' function() require("harpoon.ui").toggle_quick_menu() end ''; options.desc = "toggle the harpoon normal quick menu to see all marks."; } ] ++ gotoFileMappings ++ gotoTerminalMappings; }; }