aboutsummaryrefslogtreecommitdiffstats
path: root/modules/by-name/nv/nvim/plgs/harpoon
diff options
context:
space:
mode:
authorBenedikt Peetz <benedikt.peetz@b-peetz.de>2024-11-09 12:35:44 +0100
committerBenedikt Peetz <benedikt.peetz@b-peetz.de>2024-11-09 12:54:51 +0100
commit2122a01f99c6da466b8f0f55c965c11a9043d117 (patch)
tree6c1697afc30a5bb72635bda7db9b5610386a5b71 /modules/by-name/nv/nvim/plgs/harpoon
parentfix(pkgs/stamp): Fallback to `dot-license` (diff)
downloadnixos-config-2122a01f99c6da466b8f0f55c965c11a9043d117.zip
refactor(modules/legacy/conf/nvim): Move to `by-name`
Diffstat (limited to 'modules/by-name/nv/nvim/plgs/harpoon')
-rw-r--r--modules/by-name/nv/nvim/plgs/harpoon/default.nix100
1 files changed, 100 insertions, 0 deletions
diff --git a/modules/by-name/nv/nvim/plgs/harpoon/default.nix b/modules/by-name/nv/nvim/plgs/harpoon/default.nix
new file mode 100644
index 00000000..05a40d9f
--- /dev/null
+++ b/modules/by-name/nv/nvim/plgs/harpoon/default.nix
@@ -0,0 +1,100 @@
+{
+ pkgs,
+ config,
+ lib,
+ ...
+}: 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;
+ cfg = config.soispha.programs.nvim;
+in {
+ home-manager.users.soispha.programs.nixvim = lib.mkIf cfg.enable {
+ plugins.harpoon = {
+ enable = true;
+ package = pkgs.vimPlugins.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 = "<leader><leader>";
+ 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 = "<leader>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;
+ };
+}