return { "polarmutex/git-worktree.nvim", name = "git-worktree", config = function() require("telescope").load_extension("git_worktree") vim.keymap.set( "n", "gw", "lua require('telescope').extensions.git_worktree.git_worktrees()", { desc = "worktrees" } ) vim.keymap.set( "n", "gW", "lua require('telescope').extensions.git_worktree.create_git_worktree()", { desc = "worktree create" } ) end, opts = function() local Worktree = require("git-worktree") Worktree.on_tree_change(function(op, metadata) if op == Worktree.Operations.Create then local Path = require("plenary.path") local Job = require("plenary.job") -- If we're dealing with create, the path is relative to the worktree and not absolute -- so we need to convert it to an absolute path. local git_path = metadata.path if not Path:new(git_path):is_absolute() then git_path = Path:new():absolute() if git_path:sub(-#"/") == "/" then git_path = string.sub(git_path, 1, string.len(git_path) - 1) end end print(git_path) -- git_path = string.match(git_path, "(.-)%.git") .. ".git" -- bare_repo_path = if Path:new(git_path .. "/.symlink"):exists() then local worktree_path = git_path .. "/" .. metadata.path .. "/" local link_gitignored_cmd = "ln -s " .. git_path .. "/.symlink/* " .. worktree_path os.execute(link_gitignored_cmd) end -- Job:new({ -- "git", -- "branch", -- "-u origin/" .. metadata.branch, -- }):start() --TODO setup branch tracking via `git branch -u origin/` end end) end, }