{lib, ...}: let inherit (lib.options) mkEnableOption mkOption; inherit (lib.types) bool; inherit (lib.nvim.binds) mkMappingOption; inherit (lib.nvim.types) mkPluginSetupOption luaInline; inherit (lib.generators) mkLuaInline; setupOptions = { defaults = { save_on_toggle = mkOption { description = "any time the ui menu is closed then we will save the state back to the backing list, not to the fs"; type = bool; default = false; }; sync_on_ui_close = mkOption { description = "any time the ui menu is closed then the state of the list will be sync'd back to the fs"; type = bool; default = false; }; key = mkOption { description = "how the out list key is looked up. This can be useful when using worktrees and using git remote instead of file path"; type = luaInline; default = mkLuaInline '' function() return vim.loop.cwd() end ''; }; }; }; in { options.vim.navigation.harpoon = { mappings = { markFile = mkMappingOption "Mark file [Harpoon]" "a"; listMarks = mkMappingOption "List marked files [Harpoon]" ""; file1 = mkMappingOption "Go to marked file 1 [Harpoon]" ""; file2 = mkMappingOption "Go to marked file 2 [Harpoon]" ""; file3 = mkMappingOption "Go to marked file 3 [Harpoon]" ""; file4 = mkMappingOption "Go to marked file 4 [Harpoon]" ""; }; enable = mkEnableOption "Harpoon: quick bookmarks on keybinds"; setupOpts = mkPluginSetupOption "Harpoon" setupOptions; }; }