{
  empty = {
    plugins.harpoon.enable = true;
  };

  defaults = {
    plugins.harpoon = {
      enable = true;

      # https://github.com/ThePrimeagen/harpoon/blob/harpoon2/lua/harpoon/config.lua
      settings = {
        settings = {
          save_on_toggle = false;
          sync_on_ui_close = false;
          key.__raw = ''
            function()
              return vim.loop.cwd()
            end
          '';
        };
        default = {
          select_with_nil = false;
          encode.__raw = ''
            function(obj)
              return vim.json.encode(obj)
            end
          '';
          decode.__raw = ''
            function(str)
              return vim.json.decode(str)
            end
          '';
          display.__raw = ''
            function(list_item)
              return list_item.value
            end
          '';
          # Very long functions omitted for the sake of conciseness
        };
      };
    };
  };

  example = {
    plugins.harpoon = {
      enable = true;

      settings = {
        settings = {
          save_on_toggle = true;
          sync_on_ui_close = false;
        };

        # https://github.com/ThePrimeagen/harpoon/tree/harpoon2?tab=readme-ov-file#-api
        cmd = {
          add.__raw = ''
            function(possible_value)
              -- get the current line idx
              local idx = vim.fn.line(".")

              -- read the current line
              local cmd = vim.api.nvim_buf_get_lines(0, idx - 1, idx, false)[1]
              if cmd == nil then
                  return nil
              end

              return {
                  value = cmd,
                  context = { },
              }
            end
          '';

          select.__raw = ''
            function(list_item, list, option)
              vim.cmd(list_item.value)
            end
          '';
        };
      };
    };
  };

  telescopeEnabled = {
    plugins = {
      telescope.enable = true;
      web-devicons.enable = true;

      harpoon = {
        enable = true;

        enableTelescope = true;
      };
    };
  };
}
