diff --git a/nvim/config/lua/git-ref.lua b/nvim/config/lua/git-ref.lua new file mode 100644 index 0000000..ecb7dd3 --- /dev/null +++ b/nvim/config/lua/git-ref.lua @@ -0,0 +1,41 @@ +function get_git_info() + local abs_path = vim.fn.expand("%:p") + local git_root = vim.fn.systemlist( + "git -C " .. vim.fn.escape(vim.fn.fnamemodify(abs_path, ":h"), " ") .. " rev-parse --show-toplevel" + )[1] + + if vim.v.shell_error ~= 0 then + return + end + + local git_repo = vim.fn.system("git remote get-url origin"):match("([^/:]+/[^/.]+)%.?[^/]*$"):gsub("\n", "") + local git_branch = vim.fn.system("git rev-parse --abbrev-ref HEAD"):gsub("\n", "") + + return { + file = vim.fn.fnamemodify(abs_path, ":s?" .. git_root .. "/??"), + branch = git_branch, + repo = git_repo, + } +end + +vim.keymap.set("v", "gy", function() + local git_info = get_git_info() + if git_info == nil then + vim.notify("Failed to get git info", vim.log.levels.ERROR) + return + end + + local start_line = vim.fn.line("v") + local end_line = vim.fn.line(".") + + local message = string.format( + "https://github.com/%s/blob/%s/%s#L%d-L%d", + git_info.repo, + git_info.branch, + git_info.file, + start_line, + end_line + ) + vim.fn.setreg("+", message) + vim.notify("Copied:\n\t" .. message, vim.log.levels.INFO) +end, { noremap = true, silent = true, desc = "Copy GitHub Link" }) diff --git a/nvim/config/lua/init.lua b/nvim/config/lua/init.lua index 1f60943..13234a3 100644 --- a/nvim/config/lua/init.lua +++ b/nvim/config/lua/init.lua @@ -1,21 +1,22 @@ -require('base') -require('aerial-config') -require('autopairs-config') -require('cmp-config') -require('comment-config') -require('dap-config') -require('diffview-config') -require('git-signs') -require('llm') -require('leap-config') -require('lsp-config') -require('lsp-lines-config') -require('lualine-config') -require('neotree-config') -require('noice-config') -require('numb-config') -require('silicon-config') -require('telescope-config') -require('toggleterm-config') -require('ts-config') -require('which-key-config') +require("base") +require("aerial-config") +require("autopairs-config") +require("cmp-config") +require("comment-config") +require("dap-config") +require("diffview-config") +require("git-ref") +require("git-signs") +require("llm") +require("leap-config") +require("lsp-config") +require("lsp-lines-config") +require("lualine-config") +require("neotree-config") +require("noice-config") +require("numb-config") +require("silicon-config") +require("telescope-config") +require("toggleterm-config") +require("ts-config") +require("which-key-config")