Git Dashboard
There are a few ways to create dashboards in nvim. The two main ones I have experimented with are dashboard nvim
and snacks nvim
. If you are using lazyvim, snacks comes preinstalled by default. Personally I don't like the default settings, so I have modified them to look like this.

The code for that is below:
1return {2 "folke/snacks.nvim",3 opts = {4 terminal = {5 enabled = false,6 },7 dashboard = {8 preset = {9 header = [[10âââââââ âââââââââââ ââââââââââ ââââââ âââââââ ââââ ââââââââââââââââââââ11âââââââââââââââââââ âââââââââââââââââââââââââââ âââââ ââââââââââââââââââââ12âââ âââââââââ âââ ââââââââââââââââââââââ âââ ââââââ âââââââââ âââ13âââ âââââââââ ââââ âââââââââââ âââââââââââ âââ ââââââââââââââââ âââ14ââââââââââââââââ âââââââ âââ âââ âââââââââââââââââ ââââââââââââââ âââ15âââââââ ââââââââ âââââ âââ âââ ââââââââââ ââââââ âââââââââââââ âââ16 ]],1718 keys = {19 { icon = "ï ", key = "f", desc = "Find File", action = ":lua LazyVim.pick()()" },20 { icon = "ï ", key = "n", desc = "New File", action = ":ene | startinsert" },21 { icon = "ï ", key = "R", desc = "Recent Files", action = ":lua LazyVim.pick('oldfiles')()" },22 { icon = "ïą ", key = "g", desc = "Find Text", action = ":lua Snacks.dashboard.pick('live_grep')" },23 { icon = "ïŁ ", key = "c", desc = "Config", action = ":lua LazyVim.pick.config_files()()" },24 { icon = "î ", key = "r", desc = "Restore Session", action = ":lua require('persistence').load()" },25 { icon = "ó°Č ", key = "l", desc = "Lazy", action = ":Lazy" },26 { icon = "îȘ ", key = "x", desc = "Lazy Extras", action = ":LazyExtras" },27 { icon = "ó°ł ", key = "u", desc = "Update", action = ":Lazy update", group = "@property" },28 { icon = "ó°ł ", key = "m", desc = "Mason", action = ":Mason", group = "@property" },29 { icon = "ïŠ ", key = "q", desc = "Quit", action = ":qa" },30 },31 },32 sections = {33 { section = "header" },34 {35 pane = 2,36 section = "terminal",37 cmd = "",38 height = 8,39 padding = 1,40 },41 -- { pane = 2, icon = "ï ", title = "Recent Files", section = "recent_files", indent = 2, padding = 1 },42 { section = "keys", gap = 1, padding = 1 },43 {44 pane = 2,45 icon = "î ",46 desc = "Browse Repo",47 padding = 1,48 key = "b",49 action = function()50 Snacks.gitbrowse()51 end,52 },53 -- {54 -- pane = 1,55 -- icon = " ",56 -- title = "Projects",57 -- section = "projects",58 -- indent = 2,59 -- padding = 1,60 -- },61 function()62 local in_git = Snacks.git.get_root() ~= nil63 local cmds = {64 {65 title = "Git Info",66 cmd = "git log -n 3 --pretty=format:'%h - %s - %an (%cr)'",67 icon = " ",68 height = 4,69 },70 {71 icon = "î„ ",72 title = "Git Status",73 cmd = "git --no-pager diff --stat -B -M -C",74 height = 8,75 },76 -- gh ext install meiji163/gh-notify77 {78 title = "Notifications",79 cmd = "gh notify -s -n2",80 icon = "ïł ",81 section = "terminal",82 action = function()83 vim.ui.open("https://github.com/notifications")84 end,85 key = "N",86 height = 3,87 },88 -- {89 -- title = "Open Issues",90 -- cmd = "gh issue list -L 3",91 -- key = "i",92 -- action = function()93 -- vim.fn.jobstart("gh issue list --web", { detach = true })94 -- end,95 -- icon = "ï ",96 -- height = 7,97 -- },98 {99 icon = "ï ",100 title = "Open PRs",101 cmd = "gh pr list -L 3",102 key = "P",103 action = function()104 vim.fn.jobstart("gh pr list --web", { detach = true })105 end,106 height = 7,107 },108 }109 return vim.tbl_map(function(cmd)110 return vim.tbl_extend("force", {111 pane = 2,112 section = "terminal",113 enabled = in_git,114 padding = 1,115 ttl = 5 * 60,116 indent = 3,117 }, cmd)118 end, cmds)119 end,120 { section = "startup" },121 },122 },123 indent = {124 animate = {125 style = "down", -- "out", "up_down", "down", "up"126 },127 enabled = true,128 indent = {129 enabled = false,130 only_scope = true,131 hl = {132 "SnacksIndentCustom2",133 "SnacksIndentCustom3",134 },135 },136 scope = {137 enabled = true,138 hl = "SnacksIndentCustom",139 },140 },141 scroll = {142 enabled = false, -- Disables smooth scrolling143 },144 },145}146
Additionally, I created a function which pops up with github notification information:

I will paste the code for that below as well:
1-- Track the notification window ID2local gh_notification_win_id = nil34vim.keymap.set("n", "<C-7>", function()5 -- Check if notifications window is already open, close it if it is6 if gh_notification_win_id and vim.api.nvim_win_is_valid(gh_notification_win_id) then7 vim.api.nvim_win_close(gh_notification_win_id, true)8 gh_notification_win_id = nil9 return10 end1112 local success, git_notifications = pcall(function()13 return vim.fn.system("gh notify -s -a -n5"):gsub("\n$", "")14 end)1516 if not success or git_notifications == "" then17 require("noice").notify("No GitHub notifications or error running command", "warn")18 return19 end2021 -- Strip ANSI escape sequences and format output22 local cleaned = git_notifications:gsub("\27%[[%d;]+m", "") -- Remove ANSI color codes23 local formatted = {}24 for line in cleaned:gmatch("[^\r\n]+") do25 -- Extract date/time and description26 local date_time, description = line:match("%s*(%d+/%w+ %d+:%d+)%s*(.*)")27 if date_time and description then28 table.insert(formatted, string.format("%s %s", date_time, description))29 end30 end3132 -- Create a buffer for the notifications33 local buf = vim.api.nvim_create_buf(false, true)3435 -- Set buffer content36 vim.api.nvim_buf_set_lines(buf, 0, -1, false, formatted)3738 -- Calculate window dimensions39 local width = math.min(160, vim.o.columns - 4)40 local height = math.min(#formatted + 1, 15)4142 -- Center the window43 local row = math.floor((vim.o.lines - height) / 2)44 local col = math.floor((vim.o.columns - width) / 2)4546 -- Create floating window47 local padding = 1 -- top, left, bottom, right48 local win = vim.api.nvim_open_win(buf, true, {49 relative = "editor",50 width = width - 2 * padding,51 height = height - 1 * padding,52 row = row + padding,53 col = col + padding,54 style = "minimal",55 border = "rounded",56 title = "GitHub Notifications",57 title_pos = "center",58 })5960 -- Store window ID for toggle functionality61 gh_notification_win_id = win6263 vim.bo[buf].modifiable = false64 vim.bo[buf].buftype = "nofile"65 vim.bo[buf].filetype = "gh-notifications"6667 -- Add keymaps to close the window68 vim.api.nvim_buf_set_keymap(buf, "n", "q", "<cmd>close<CR>", { noremap = true, silent = true })69 vim.api.nvim_buf_set_keymap(buf, "n", "<Esc>", "<cmd>close<CR>", { noremap = true, silent = true })70end, { desc = "Show GitHub notifications", silent = true })71
Note that for these to work, you have to have github cli installed, in addition to an extention; if you're receiving a warning about gh notify -s -n5
not working, that's because you haven't installed the extension. You can do that with a simple command in your terminal outside of vim: gh ext install meiji163/gh-notify
.