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)