From 4767195fff58cfc6ea8d8bf41765b8c949fd6ae0 Mon Sep 17 00:00:00 2001
From: Oliver Davies <oliver@oliverdavies.dev>
Date: Fri, 28 Feb 2025 10:25:29 +0000
Subject: [PATCH] Update to harpoon2, update keymaps

---
 .../home-manager/features/cli/neovim.nix      |  2 +-
 nvim/plugin/harpoon.lua                       | 54 +++++++++++++++----
 2 files changed, 45 insertions(+), 11 deletions(-)

diff --git a/nix/modules/home-manager/features/cli/neovim.nix b/nix/modules/home-manager/features/cli/neovim.nix
index 157f86c2..ccade431 100644
--- a/nix/modules/home-manager/features/cli/neovim.nix
+++ b/nix/modules/home-manager/features/cli/neovim.nix
@@ -24,7 +24,7 @@ in
         conf-vim
         edit-alternate-vim
         gitsigns-nvim
-        harpoon
+        harpoon2
         mini-nvim
         nvim-web-devicons
         oil-nvim
diff --git a/nvim/plugin/harpoon.lua b/nvim/plugin/harpoon.lua
index 03769f0a..5fb40738 100644
--- a/nvim/plugin/harpoon.lua
+++ b/nvim/plugin/harpoon.lua
@@ -1,13 +1,47 @@
-require("harpoon").setup()
+local harpoon = require "harpoon"
 
-local mark = require "harpoon.mark"
-local ui = require "harpoon.ui"
+harpoon:setup()
 
-vim.keymap.set("n", "<M-h><M-l>", ui.toggle_quick_menu)
-vim.keymap.set("n", "<M-h><M-m>", mark.add_file)
+vim.keymap.set("n", "<leader>A", function()
+  harpoon:list():prepend()
+end)
 
-for i = 1, 5 do
-  vim.keymap.set("n", string.format("<space>%s", i), function()
-    ui.nav_file(i)
-  end)
-end
+vim.keymap.set("n", "<leader>a", function()
+  harpoon:list():add()
+end)
+
+vim.keymap.set("n", "<C-e>", function()
+  harpoon.ui:toggle_quick_menu(harpoon:list())
+end)
+
+vim.keymap.set("n", "<C-h>", function()
+  harpoon:list():select(1)
+end)
+
+vim.keymap.set("n", "<C-j>", function()
+  harpoon:list():select(2)
+end)
+
+vim.keymap.set("n", "<C-k>", function()
+  harpoon:list():select(3)
+end)
+
+vim.keymap.set("n", "<C-l>", function()
+  harpoon:list():select(4)
+end)
+
+vim.keymap.set("n", "<leader><C-h>", function()
+  harpoon:list():replace_at(1)
+end)
+
+vim.keymap.set("n", "<leader><C-j>", function()
+  harpoon:list():replace_at(2)
+end)
+
+vim.keymap.set("n", "<leader><C-k>", function()
+  harpoon:list():replace_at(3)
+end)
+
+vim.keymap.set("n", "<leader><C-l>", function()
+  harpoon:list():replace_at(4)
+end)