Latest commit

History

56 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

gitgraph.nvim

Git Graph plugin for neovim.

NOTE: this project is still very WIP and there is no help documentation aside from this README.md.

Roadmap - Goals

Completed

  • ✔️ 100% lua
  • ✔️ temporal topological order
  • ✔️ branches stick to their lane
  • ✔️ easy to spot merge commits and branch children
  • ✔️ hooks for easy extension with diffview.nvim etc
  • ✔️ easily configurable date formats
  • ✔️ easily configurable highlight groups
  • ✔️ performant scrolling
  • ✔️ easy to follow branch crossings

Future

  • auto updating graph
  • performant load times for large repos

Screenshots

imageimage

Usage

Note that this is still very early days and things may rapidly change in the beginning

 {
'isakbm/gitgraph.nvim',
opts= {
git_cmd="git",
symbols= {
merge_commit='M',
commit='*',
},
format= {
timestamp='%H:%M:%S %d-%m-%Y',
fields= { 'hash', 'timestamp', 'author', 'branch_name', 'tag' },
},
hooks= {
on_select_commit=function(commit)
print('selected commit:', commit.hash)
end,
on_select_range_commit=function(from, to)
print('selected range:', from.hash, to.hash)
end,
},
},
keys= {
{
"<leader>gl",
function()
require('gitgraph').draw({}, { all=true, max_count=5000 })
end,
desc="GitGraph - Draw",
},
},
},

View commit with Diffview.nvim

When in the git graph buffer you can open Diffview on the commit under the cursor with Enter.

When in visual mode you get the Diffview for the selected range.

 {
'isakbm/gitgraph.nvim',
dependencies= { 'sindrets/diffview.nvim' },
---@typeI.GGConfigopts= {
hooks= {
-- Check diff of a commiton_select_commit=function(commit)
vim.notify('DiffviewOpen ' ..commit.hash..'^!')
vim.cmd(':DiffviewOpen ' ..commit.hash..'^!')
end,
-- Check diff from commit a -> commit bon_select_range_commit=function(from, to)
vim.notify('DiffviewOpen ' ..from.hash..'~1..' ..to.hash)
vim.cmd(':DiffviewOpen ' ..from.hash..'~1..' ..to.hash)
end,
},
},
},

Use custom symbols

For example, use kitty branch symbols more detail

symbols= {
merge_commit='',
commit='',
merge_commit_end='',
commit_end='',
-- Advanced symbolsGVER='',
GHOR='',
GCLD='',
GCRD='',
GCLU='',
GCRU='',
GLRU='',
GLRD='',
GLUD='',
GRUD='',
GFORKU='',
GFORKD='',
GRUDCD='',
GRUDCU='',
GLUDCD='',
GLUDCU='',
GLRDCL='',
GLRDCR='',
GLRUCL='',
GLRUCR='',
},

Keymaps

... more keymaps to come ...

Highlights Groups

commit information

  • 'GitGraphHash'
  • 'GitGraphTimestamp'
  • 'GitGraphAuthor'
  • 'GitGraphBranchName'
  • 'GitGraphBranchTag'
  • 'GitGraphBranchMsg'

branch colors

  • 'GitGraphBranch1'
  • 'GitGraphBranch2'
  • 'GitGraphBranch3'
  • 'GitGraphBranch4'
  • 'GitGraphBranch5'

About

Git Graph plugin for neovim

Resources

Stars

443 stars

Watchers

13 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Latest commit

History

56 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

gitgraph.nvim

Git Graph plugin for neovim.

NOTE: this project is still very WIP and there is no help documentation aside from this README.md.

Roadmap - Goals

Completed

  • ✔️ 100% lua
  • ✔️ temporal topological order
  • ✔️ branches stick to their lane
  • ✔️ easy to spot merge commits and branch children
  • ✔️ hooks for easy extension with diffview.nvim etc
  • ✔️ easily configurable date formats
  • ✔️ easily configurable highlight groups
  • ✔️ performant scrolling
  • ✔️ easy to follow branch crossings

Future

  • auto updating graph
  • performant load times for large repos

Screenshots

imageimage

Usage

Note that this is still very early days and things may rapidly change in the beginning

 {
'isakbm/gitgraph.nvim',
opts= {
git_cmd="git",
symbols= {
merge_commit='M',
commit='*',
},
format= {
timestamp='%H:%M:%S %d-%m-%Y',
fields= { 'hash', 'timestamp', 'author', 'branch_name', 'tag' },
},
hooks= {
on_select_commit=function(commit)
print('selected commit:', commit.hash)
end,
on_select_range_commit=function(from, to)
print('selected range:', from.hash, to.hash)
end,
},
},
keys= {
{
"<leader>gl",
function()
require('gitgraph').draw({}, { all=true, max_count=5000 })
end,
desc="GitGraph - Draw",
},
},
},

View commit with Diffview.nvim

When in the git graph buffer you can open Diffview on the commit under the cursor with Enter.

When in visual mode you get the Diffview for the selected range.

 {
'isakbm/gitgraph.nvim',
dependencies= { 'sindrets/diffview.nvim' },
---@typeI.GGConfigopts= {
hooks= {
-- Check diff of a commiton_select_commit=function(commit)
vim.notify('DiffviewOpen ' ..commit.hash..'^!')
vim.cmd(':DiffviewOpen ' ..commit.hash..'^!')
end,
-- Check diff from commit a -> commit bon_select_range_commit=function(from, to)
vim.notify('DiffviewOpen ' ..from.hash..'~1..' ..to.hash)
vim.cmd(':DiffviewOpen ' ..from.hash..'~1..' ..to.hash)
end,
},
},
},

Use custom symbols

For example, use kitty branch symbols more detail

symbols= {
merge_commit='',
commit='',
merge_commit_end='',
commit_end='',
-- Advanced symbolsGVER='',
GHOR='',
GCLD='',
GCRD='',
GCLU='',
GCRU='',
GLRU='',
GLRD='',
GLUD='',
GRUD='',
GFORKU='',
GFORKD='',
GRUDCD='',
GRUDCU='',
GLUDCD='',
GLUDCU='',
GLRDCL='',
GLRDCR='',
GLRUCL='',
GLRUCR='',
},

Keymaps

... more keymaps to come ...

Highlights Groups

commit information

  • 'GitGraphHash'
  • 'GitGraphTimestamp'
  • 'GitGraphAuthor'
  • 'GitGraphBranchName'
  • 'GitGraphBranchTag'
  • 'GitGraphBranchMsg'

branch colors

  • 'GitGraphBranch1'
  • 'GitGraphBranch2'
  • 'GitGraphBranch3'
  • 'GitGraphBranch4'
  • 'GitGraphBranch5'

About

Git Graph plugin for neovim

Resources

Stars

443 stars

Watchers

13 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

56 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

gitgraph.nvim

Git Graph plugin for neovim.

NOTE: this project is still very WIP and there is no help documentation aside from this README.md.

Roadmap - Goals

Completed

  • ✔️ 100% lua
  • ✔️ temporal topological order
  • ✔️ branches stick to their lane
  • ✔️ easy to spot merge commits and branch children
  • ✔️ hooks for easy extension with diffview.nvim etc
  • ✔️ easily configurable date formats
  • ✔️ easily configurable highlight groups
  • ✔️ performant scrolling
  • ✔️ easy to follow branch crossings

Future

  • auto updating graph
  • performant load times for large repos

Screenshots

imageimage

Usage

Note that this is still very early days and things may rapidly change in the beginning

 {
'isakbm/gitgraph.nvim',
opts= {
git_cmd="git",
symbols= {
merge_commit='M',
commit='*',
},
format= {
timestamp='%H:%M:%S %d-%m-%Y',
fields= { 'hash', 'timestamp', 'author', 'branch_name', 'tag' },
},
hooks= {
on_select_commit=function(commit)
print('selected commit:', commit.hash)
end,
on_select_range_commit=function(from, to)
print('selected range:', from.hash, to.hash)
end,
},
},
keys= {
{
"<leader>gl",
function()
require('gitgraph').draw({}, { all=true, max_count=5000 })
end,
desc="GitGraph - Draw",
},
},
},

View commit with Diffview.nvim

When in the git graph buffer you can open Diffview on the commit under the cursor with Enter.

When in visual mode you get the Diffview for the selected range.

 {
'isakbm/gitgraph.nvim',
dependencies= { 'sindrets/diffview.nvim' },
---@typeI.GGConfigopts= {
hooks= {
-- Check diff of a commiton_select_commit=function(commit)
vim.notify('DiffviewOpen ' ..commit.hash..'^!')
vim.cmd(':DiffviewOpen ' ..commit.hash..'^!')
end,
-- Check diff from commit a -> commit bon_select_range_commit=function(from, to)
vim.notify('DiffviewOpen ' ..from.hash..'~1..' ..to.hash)
vim.cmd(':DiffviewOpen ' ..from.hash..'~1..' ..to.hash)
end,
},
},
},

Use custom symbols

For example, use kitty branch symbols more detail

symbols= {
merge_commit='',
commit='',
merge_commit_end='',
commit_end='',
-- Advanced symbolsGVER='',
GHOR='',
GCLD='',
GCRD='',
GCLU='',
GCRU='',
GLRU='',
GLRD='',
GLUD='',
GRUD='',
GFORKU='',
GFORKD='',
GRUDCD='',
GRUDCU='',
GLUDCD='',
GLUDCU='',
GLRDCL='',
GLRDCR='',
GLRUCL='',
GLRUCR='',
},

Keymaps

... more keymaps to come ...

Highlights Groups

commit information

  • 'GitGraphHash'
  • 'GitGraphTimestamp'
  • 'GitGraphAuthor'
  • 'GitGraphBranchName'
  • 'GitGraphBranchTag'
  • 'GitGraphBranchMsg'

branch colors

  • 'GitGraphBranch1'
  • 'GitGraphBranch2'
  • 'GitGraphBranch3'
  • 'GitGraphBranch4'
  • 'GitGraphBranch5'

About

Git Graph plugin for neovim

Resources

Stars

443 stars

Watchers

13 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

56 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

gitgraph.nvim

Git Graph plugin for neovim.

NOTE: this project is still very WIP and there is no help documentation aside from this README.md.

Roadmap - Goals

Completed

  • ✔️ 100% lua
  • ✔️ temporal topological order
  • ✔️ branches stick to their lane
  • ✔️ easy to spot merge commits and branch children
  • ✔️ hooks for easy extension with diffview.nvim etc
  • ✔️ easily configurable date formats
  • ✔️ easily configurable highlight groups
  • ✔️ performant scrolling
  • ✔️ easy to follow branch crossings

Future

  • auto updating graph
  • performant load times for large repos

Screenshots

imageimage

Usage

Note that this is still very early days and things may rapidly change in the beginning

 {
'isakbm/gitgraph.nvim',
opts= {
git_cmd="git",
symbols= {
merge_commit='M',
commit='*',
},
format= {
timestamp='%H:%M:%S %d-%m-%Y',
fields= { 'hash', 'timestamp', 'author', 'branch_name', 'tag' },
},
hooks= {
on_select_commit=function(commit)
print('selected commit:', commit.hash)
end,
on_select_range_commit=function(from, to)
print('selected range:', from.hash, to.hash)
end,
},
},
keys= {
{
"<leader>gl",
function()
require('gitgraph').draw({}, { all=true, max_count=5000 })
end,
desc="GitGraph - Draw",
},
},
},

View commit with Diffview.nvim

When in the git graph buffer you can open Diffview on the commit under the cursor with Enter.

When in visual mode you get the Diffview for the selected range.

 {
'isakbm/gitgraph.nvim',
dependencies= { 'sindrets/diffview.nvim' },
---@typeI.GGConfigopts= {
hooks= {
-- Check diff of a commiton_select_commit=function(commit)
vim.notify('DiffviewOpen ' ..commit.hash..'^!')
vim.cmd(':DiffviewOpen ' ..commit.hash..'^!')
end,
-- Check diff from commit a -> commit bon_select_range_commit=function(from, to)
vim.notify('DiffviewOpen ' ..from.hash..'~1..' ..to.hash)
vim.cmd(':DiffviewOpen ' ..from.hash..'~1..' ..to.hash)
end,
},
},
},

Use custom symbols

For example, use kitty branch symbols more detail

symbols= {
merge_commit='',
commit='',
merge_commit_end='',
commit_end='',
-- Advanced symbolsGVER='',
GHOR='',
GCLD='',
GCRD='',
GCLU='',
GCRU='',
GLRU='',
GLRD='',
GLUD='',
GRUD='',
GFORKU='',
GFORKD='',
GRUDCD='',
GRUDCU='',
GLUDCD='',
GLUDCU='',
GLRDCL='',
GLRDCR='',
GLRUCL='',
GLRUCR='',
},

Keymaps

... more keymaps to come ...

Highlights Groups

commit information

  • 'GitGraphHash'
  • 'GitGraphTimestamp'
  • 'GitGraphAuthor'
  • 'GitGraphBranchName'
  • 'GitGraphBranchTag'
  • 'GitGraphBranchMsg'

branch colors

  • 'GitGraphBranch1'
  • 'GitGraphBranch2'
  • 'GitGraphBranch3'
  • 'GitGraphBranch4'
  • 'GitGraphBranch5'

About

Git Graph plugin for neovim

Resources

Stars

443 stars

Watchers

13 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Latest commit

History

56 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

gitgraph.nvim

Git Graph plugin for neovim.

NOTE: this project is still very WIP and there is no help documentation aside from this README.md.

Roadmap - Goals

Completed

  • ✔️ 100% lua
  • ✔️ temporal topological order
  • ✔️ branches stick to their lane
  • ✔️ easy to spot merge commits and branch children
  • ✔️ hooks for easy extension with diffview.nvim etc
  • ✔️ easily configurable date formats
  • ✔️ easily configurable highlight groups
  • ✔️ performant scrolling
  • ✔️ easy to follow branch crossings

Future

  • auto updating graph
  • performant load times for large repos

Screenshots

imageimage

Usage

Note that this is still very early days and things may rapidly change in the beginning

 {
'isakbm/gitgraph.nvim',
opts= {
git_cmd="git",
symbols= {
merge_commit='M',
commit='*',
},
format= {
timestamp='%H:%M:%S %d-%m-%Y',
fields= { 'hash', 'timestamp', 'author', 'branch_name', 'tag' },
},
hooks= {
on_select_commit=function(commit)
print('selected commit:', commit.hash)
end,
on_select_range_commit=function(from, to)
print('selected range:', from.hash, to.hash)
end,
},
},
keys= {
{
"<leader>gl",
function()
require('gitgraph').draw({}, { all=true, max_count=5000 })
end,
desc="GitGraph - Draw",
},
},
},

View commit with Diffview.nvim

When in the git graph buffer you can open Diffview on the commit under the cursor with Enter.

When in visual mode you get the Diffview for the selected range.

 {
'isakbm/gitgraph.nvim',
dependencies= { 'sindrets/diffview.nvim' },
---@typeI.GGConfigopts= {
hooks= {
-- Check diff of a commiton_select_commit=function(commit)
vim.notify('DiffviewOpen ' ..commit.hash..'^!')
vim.cmd(':DiffviewOpen ' ..commit.hash..'^!')
end,
-- Check diff from commit a -> commit bon_select_range_commit=function(from, to)
vim.notify('DiffviewOpen ' ..from.hash..'~1..' ..to.hash)
vim.cmd(':DiffviewOpen ' ..from.hash..'~1..' ..to.hash)
end,
},
},
},

Use custom symbols

For example, use kitty branch symbols more detail

symbols= {
merge_commit='',
commit='',
merge_commit_end='',
commit_end='',
-- Advanced symbolsGVER='',
GHOR='',
GCLD='',
GCRD='',
GCLU='',
GCRU='',
GLRU='',
GLRD='',
GLUD='',
GRUD='',
GFORKU='',
GFORKD='',
GRUDCD='',
GRUDCU='',
GLUDCD='',
GLUDCU='',
GLRDCL='',
GLRDCR='',
GLRUCL='',
GLRUCR='',
},

Keymaps

... more keymaps to come ...

Highlights Groups

commit information

  • 'GitGraphHash'
  • 'GitGraphTimestamp'
  • 'GitGraphAuthor'
  • 'GitGraphBranchName'
  • 'GitGraphBranchTag'
  • 'GitGraphBranchMsg'

branch colors

  • 'GitGraphBranch1'
  • 'GitGraphBranch2'
  • 'GitGraphBranch3'
  • 'GitGraphBranch4'
  • 'GitGraphBranch5'

About

Git Graph plugin for neovim

Resources

Stars

443 stars

Watchers

13 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

56 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

gitgraph.nvim

Git Graph plugin for neovim.

NOTE: this project is still very WIP and there is no help documentation aside from this README.md.

Roadmap - Goals

Completed

  • ✔️ 100% lua
  • ✔️ temporal topological order
  • ✔️ branches stick to their lane
  • ✔️ easy to spot merge commits and branch children
  • ✔️ hooks for easy extension with diffview.nvim etc
  • ✔️ easily configurable date formats
  • ✔️ easily configurable highlight groups
  • ✔️ performant scrolling
  • ✔️ easy to follow branch crossings

Future

  • auto updating graph
  • performant load times for large repos

Screenshots

imageimage

Usage

Note that this is still very early days and things may rapidly change in the beginning

 {
'isakbm/gitgraph.nvim',
opts= {
git_cmd="git",
symbols= {
merge_commit='M',
commit='*',
},
format= {
timestamp='%H:%M:%S %d-%m-%Y',
fields= { 'hash', 'timestamp', 'author', 'branch_name', 'tag' },
},
hooks= {
on_select_commit=function(commit)
print('selected commit:', commit.hash)
end,
on_select_range_commit=function(from, to)
print('selected range:', from.hash, to.hash)
end,
},
},
keys= {
{
"<leader>gl",
function()
require('gitgraph').draw({}, { all=true, max_count=5000 })
end,
desc="GitGraph - Draw",
},
},
},

View commit with Diffview.nvim

When in the git graph buffer you can open Diffview on the commit under the cursor with Enter.

When in visual mode you get the Diffview for the selected range.

 {
'isakbm/gitgraph.nvim',
dependencies= { 'sindrets/diffview.nvim' },
---@typeI.GGConfigopts= {
hooks= {
-- Check diff of a commiton_select_commit=function(commit)
vim.notify('DiffviewOpen ' ..commit.hash..'^!')
vim.cmd(':DiffviewOpen ' ..commit.hash..'^!')
end,
-- Check diff from commit a -> commit bon_select_range_commit=function(from, to)
vim.notify('DiffviewOpen ' ..from.hash..'~1..' ..to.hash)
vim.cmd(':DiffviewOpen ' ..from.hash..'~1..' ..to.hash)
end,
},
},
},

Use custom symbols

For example, use kitty branch symbols more detail

symbols= {
merge_commit='',
commit='',
merge_commit_end='',
commit_end='',
-- Advanced symbolsGVER='',
GHOR='',
GCLD='',
GCRD='',
GCLU='',
GCRU='',
GLRU='',
GLRD='',
GLUD='',
GRUD='',
GFORKU='',
GFORKD='',
GRUDCD='',
GRUDCU='',
GLUDCD='',
GLUDCU='',
GLRDCL='',
GLRDCR='',
GLRUCL='',
GLRUCR='',
},

Keymaps

... more keymaps to come ...

Highlights Groups

commit information

  • 'GitGraphHash'
  • 'GitGraphTimestamp'
  • 'GitGraphAuthor'
  • 'GitGraphBranchName'
  • 'GitGraphBranchTag'
  • 'GitGraphBranchMsg'

branch colors

  • 'GitGraphBranch1'
  • 'GitGraphBranch2'
  • 'GitGraphBranch3'
  • 'GitGraphBranch4'
  • 'GitGraphBranch5'

About

Git Graph plugin for neovim

Resources

Stars

443 stars

Watchers

13 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

56 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

gitgraph.nvim

Git Graph plugin for neovim.

NOTE: this project is still very WIP and there is no help documentation aside from this README.md.

Roadmap - Goals

Completed

  • ✔️ 100% lua
  • ✔️ temporal topological order
  • ✔️ branches stick to their lane
  • ✔️ easy to spot merge commits and branch children
  • ✔️ hooks for easy extension with diffview.nvim etc
  • ✔️ easily configurable date formats
  • ✔️ easily configurable highlight groups
  • ✔️ performant scrolling
  • ✔️ easy to follow branch crossings

Future

  • auto updating graph
  • performant load times for large repos

Screenshots

imageimage

Usage

Note that this is still very early days and things may rapidly change in the beginning

 {
'isakbm/gitgraph.nvim',
opts= {
git_cmd="git",
symbols= {
merge_commit='M',
commit='*',
},
format= {
timestamp='%H:%M:%S %d-%m-%Y',
fields= { 'hash', 'timestamp', 'author', 'branch_name', 'tag' },
},
hooks= {
on_select_commit=function(commit)
print('selected commit:', commit.hash)
end,
on_select_range_commit=function(from, to)
print('selected range:', from.hash, to.hash)
end,
},
},
keys= {
{
"<leader>gl",
function()
require('gitgraph').draw({}, { all=true, max_count=5000 })
end,
desc="GitGraph - Draw",
},
},
},

View commit with Diffview.nvim

When in the git graph buffer you can open Diffview on the commit under the cursor with Enter.

When in visual mode you get the Diffview for the selected range.

 {
'isakbm/gitgraph.nvim',
dependencies= { 'sindrets/diffview.nvim' },
---@typeI.GGConfigopts= {
hooks= {
-- Check diff of a commiton_select_commit=function(commit)
vim.notify('DiffviewOpen ' ..commit.hash..'^!')
vim.cmd(':DiffviewOpen ' ..commit.hash..'^!')
end,
-- Check diff from commit a -> commit bon_select_range_commit=function(from, to)
vim.notify('DiffviewOpen ' ..from.hash..'~1..' ..to.hash)
vim.cmd(':DiffviewOpen ' ..from.hash..'~1..' ..to.hash)
end,
},
},
},

Use custom symbols

For example, use kitty branch symbols more detail

symbols= {
merge_commit='',
commit='',
merge_commit_end='',
commit_end='',
-- Advanced symbolsGVER='',
GHOR='',
GCLD='',
GCRD='',
GCLU='',
GCRU='',
GLRU='',
GLRD='',
GLUD='',
GRUD='',
GFORKU='',
GFORKD='',
GRUDCD='',
GRUDCU='',
GLUDCD='',
GLUDCU='',
GLRDCL='',
GLRDCR='',
GLRUCL='',
GLRUCR='',
},

Keymaps

... more keymaps to come ...

Highlights Groups

commit information

  • 'GitGraphHash'
  • 'GitGraphTimestamp'
  • 'GitGraphAuthor'
  • 'GitGraphBranchName'
  • 'GitGraphBranchTag'
  • 'GitGraphBranchMsg'

branch colors

  • 'GitGraphBranch1'
  • 'GitGraphBranch2'
  • 'GitGraphBranch3'
  • 'GitGraphBranch4'
  • 'GitGraphBranch5'

About

Git Graph plugin for neovim

Resources

Stars

443 stars

Watchers

13 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Latest commit

History

56 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

gitgraph.nvim

Git Graph plugin for neovim.

NOTE: this project is still very WIP and there is no help documentation aside from this README.md.

Roadmap - Goals

Completed

  • ✔️ 100% lua
  • ✔️ temporal topological order
  • ✔️ branches stick to their lane
  • ✔️ easy to spot merge commits and branch children
  • ✔️ hooks for easy extension with diffview.nvim etc
  • ✔️ easily configurable date formats
  • ✔️ easily configurable highlight groups
  • ✔️ performant scrolling
  • ✔️ easy to follow branch crossings

Future

  • auto updating graph
  • performant load times for large repos

Screenshots

imageimage

Usage

Note that this is still very early days and things may rapidly change in the beginning

 {
'isakbm/gitgraph.nvim',
opts= {
git_cmd="git",
symbols= {
merge_commit='M',
commit='*',
},
format= {
timestamp='%H:%M:%S %d-%m-%Y',
fields= { 'hash', 'timestamp', 'author', 'branch_name', 'tag' },
},
hooks= {
on_select_commit=function(commit)
print('selected commit:', commit.hash)
end,
on_select_range_commit=function(from, to)
print('selected range:', from.hash, to.hash)
end,
},
},
keys= {
{
"<leader>gl",
function()
require('gitgraph').draw({}, { all=true, max_count=5000 })
end,
desc="GitGraph - Draw",
},
},
},

View commit with Diffview.nvim

When in the git graph buffer you can open Diffview on the commit under the cursor with Enter.

When in visual mode you get the Diffview for the selected range.

 {
'isakbm/gitgraph.nvim',
dependencies= { 'sindrets/diffview.nvim' },
---@typeI.GGConfigopts= {
hooks= {
-- Check diff of a commiton_select_commit=function(commit)
vim.notify('DiffviewOpen ' ..commit.hash..'^!')
vim.cmd(':DiffviewOpen ' ..commit.hash..'^!')
end,
-- Check diff from commit a -> commit bon_select_range_commit=function(from, to)
vim.notify('DiffviewOpen ' ..from.hash..'~1..' ..to.hash)
vim.cmd(':DiffviewOpen ' ..from.hash..'~1..' ..to.hash)
end,
},
},
},

Use custom symbols

For example, use kitty branch symbols more detail

symbols= {
merge_commit='',
commit='',
merge_commit_end='',
commit_end='',
-- Advanced symbolsGVER='',
GHOR='',
GCLD='',
GCRD='',
GCLU='',
GCRU='',
GLRU='',
GLRD='',
GLUD='',
GRUD='',
GFORKU='',
GFORKD='',
GRUDCD='',
GRUDCU='',
GLUDCD='',
GLUDCU='',
GLRDCL='',
GLRDCR='',
GLRUCL='',
GLRUCR='',
},

Keymaps

... more keymaps to come ...

Highlights Groups

commit information

  • 'GitGraphHash'
  • 'GitGraphTimestamp'
  • 'GitGraphAuthor'
  • 'GitGraphBranchName'
  • 'GitGraphBranchTag'
  • 'GitGraphBranchMsg'

branch colors

  • 'GitGraphBranch1'
  • 'GitGraphBranch2'
  • 'GitGraphBranch3'
  • 'GitGraphBranch4'
  • 'GitGraphBranch5'

About

Git Graph plugin for neovim

Resources

Stars

443 stars

Watchers

13 watching

Forks

Releases

Packages

Contributors

Languages