summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--nvim/.config/nvim/lua/tobyvin/autocmds.lua34
-rw-r--r--nvim/.config/nvim/lua/tobyvin/keymaps.lua16
-rw-r--r--nvim/.config/nvim/lua/tobyvin/plugins.lua14
-rw-r--r--nvim/.config/nvim/lua/tobyvin/plugins/alpha.lua149
-rw-r--r--nvim/.config/nvim/lua/tobyvin/plugins/gitsigns.lua1
-rw-r--r--nvim/.config/nvim/lua/tobyvin/plugins/rust-tools.lua1
-rw-r--r--nvim/.config/nvim/lua/tobyvin/utils/buffer.lua108
7 files changed, 218 insertions, 105 deletions
diff --git a/nvim/.config/nvim/lua/tobyvin/autocmds.lua b/nvim/.config/nvim/lua/tobyvin/autocmds.lua
index 4b9e3cb..5427c72 100644
--- a/nvim/.config/nvim/lua/tobyvin/autocmds.lua
+++ b/nvim/.config/nvim/lua/tobyvin/autocmds.lua
@@ -1,40 +1,6 @@
local M = {}
M.setup = function()
- local augroup = vim.api.nvim_create_augroup("tobyvin_buffers", { clear = true })
-
- vim.api.nvim_create_autocmd("User", {
- group = augroup,
- pattern = "bdelete",
- callback = function(opts)
- local windows = vim.tbl_filter(function(win)
- return vim.api.nvim_win_get_buf(win) == opts.bufnr
- end, vim.api.nvim_list_wins())
-
- local buffers = vim.tbl_filter(function(buf)
- return vim.api.nvim_buf_is_valid(buf) and vim.bo[buf].buflisted
- end, vim.api.nvim_list_bufs())
-
- if buffers ~= nil and #buffers > 1 then
- local next_buffer = vim.fn.winbufnr(vim.fn.winnr("#"))
-
- if not next_buffer then
- for i, v in ipairs(buffers) do
- if v == opts.bufnr then
- next_buffer = buffers[i % #buffers + 1]
- break
- end
- end
- end
-
- for _, win in ipairs(windows) do
- vim.api.nvim_win_set_buf(win, next_buffer)
- end
- end
- end,
- desc = "Sets the window to the alternate buffer for bdelete",
- })
-
local augroup_hl = vim.api.nvim_create_augroup("tobyvin_hl", { clear = true })
vim.api.nvim_create_autocmd("CmdlineEnter", {
diff --git a/nvim/.config/nvim/lua/tobyvin/keymaps.lua b/nvim/.config/nvim/lua/tobyvin/keymaps.lua
index 27646b9..3322916 100644
--- a/nvim/.config/nvim/lua/tobyvin/keymaps.lua
+++ b/nvim/.config/nvim/lua/tobyvin/keymaps.lua
@@ -6,22 +6,18 @@ M.training_wheels = function()
end
M.setup = function()
- vim.keymap.set("n", "<leader>q", utils.buffer.quit, { desc = "Quit" })
- vim.keymap.set("n", "<leader>c", utils.buffer.bdelete, { desc = "Close" })
- vim.keymap.set("n", "<leader>x", utils.buffer.tabclose, { desc = "Close" })
- vim.keymap.set("n", "<leader>w", "<CMD>write<CR>", { desc = "Write" })
- vim.keymap.set("i", "<C-c>", M.training_wheels, { desc = "Helper to quit using <C-c>" })
+ vim.keymap.set("n", "<leader>q", "<cmd>qall<cr>", { desc = "quit" })
+ vim.keymap.set("n", "<leader>c", utils.buffer.bdelete, { desc = "bdelete" })
+ vim.keymap.set("n", "<leader>x", "<cmd>close<cr>", { desc = "close" })
+ vim.keymap.set("n", "<leader>z", "<cmd>tabclose<cr>", { desc = "tabclose" })
+ vim.keymap.set("n", "<leader>w", "<cmd>write<cr>", { desc = "write" })
vim.keymap.set("n", "<C-u>", "<C-u>zz", { desc = "Up half page and center" })
vim.keymap.set("n", "<C-d>", "<C-d>zz", { desc = "Down half page and center" })
vim.keymap.set("n", "<a-j>", "<CMD>m +1<CR>", { desc = "Move line down" })
vim.keymap.set("n", "<a-k>", "<CMD>m -2<CR>", { desc = "Move line up" })
-
vim.keymap.set("v", "<a-k>", "<CMD>m '<-2<CR>gv=gv", { desc = "Move selection up" })
vim.keymap.set("v", "<a-j>", "<CMD>m '>+1<CR>gv=gv", { desc = "Move selection down" })
-
- local nmap_run = utils.keymap.group("n", "<leader>r", { desc = "Run" })
-
- nmap_run("c", utils.job.cmd, { desc = "Command" })
+ vim.keymap.set("i", "<C-c>", M.training_wheels, { desc = "Helper to quit using <C-c>" })
end
return M
diff --git a/nvim/.config/nvim/lua/tobyvin/plugins.lua b/nvim/.config/nvim/lua/tobyvin/plugins.lua
index 2087742..3732be8 100644
--- a/nvim/.config/nvim/lua/tobyvin/plugins.lua
+++ b/nvim/.config/nvim/lua/tobyvin/plugins.lua
@@ -15,6 +15,14 @@ M.plugins = function(use)
use("lewis6991/impatient.nvim")
use({
+ "goolord/alpha-nvim",
+ requires = { "kyazdani42/nvim-web-devicons" },
+ config = function()
+ require("tobyvin.plugins.alpha").setup()
+ end,
+ })
+
+ use({
"rcarriga/nvim-notify",
config = function()
require("tobyvin.plugins.notify").setup()
@@ -506,7 +514,11 @@ M.setup = function()
"https://github.com/wbthomason/packer.nvim",
install_path,
})
- vim.notify("Installing packer. Reload neovim to load plugins.", vim.log.levels.INFO, { title = "[packer] Installing" })
+ vim.notify(
+ "Installing packer. Reload neovim to load plugins.",
+ vim.log.levels.INFO,
+ { title = "[packer] Installing" }
+ )
vim.cmd([[packadd packer.nvim]])
end
diff --git a/nvim/.config/nvim/lua/tobyvin/plugins/alpha.lua b/nvim/.config/nvim/lua/tobyvin/plugins/alpha.lua
new file mode 100644
index 0000000..4ecbc24
--- /dev/null
+++ b/nvim/.config/nvim/lua/tobyvin/plugins/alpha.lua
@@ -0,0 +1,149 @@
+local M = {}
+
+M.setup = function()
+ local status_ok, alpha = pcall(require, "alpha")
+ if not status_ok then
+ vim.notify("Failed to load module 'alpha'", vim.log.levels.ERROR)
+ return
+ end
+
+ local startify = require("alpha.themes.startify")
+ local fortune = require("alpha.fortune")
+
+ local logo = {
+ type = "text",
+ val = {
+ " ",
+ " ███╗ ██╗███████╗ ██████╗ ██╗ ██╗██╗███╗ ███╗ ",
+ " ████╗ ██║██╔════╝██╔═══██╗██║ ██║██║████╗ ████║ ",
+ " ██╔██╗ ██║█████╗ ██║ ██║██║ ██║██║██╔████╔██║ ",
+ " ██║╚██╗██║██╔══╝ ██║ ██║╚██╗ ██╔╝██║██║╚██╔╝██║ ",
+ " ██║ ╚████║███████╗╚██████╔╝ ╚████╔╝ ██║██║ ╚═╝ ██║ ",
+ " ╚═╝ ╚═══╝╚══════╝ ╚═════╝ ╚═══╝ ╚═╝╚═╝ ╚═╝ ",
+ },
+ opts = {
+ position = "left",
+ hl = "DevIconVim",
+ },
+ }
+
+ local function info_value()
+ local total_plugins = #vim.tbl_keys(packer_plugins)
+ local datetime = os.date(" %d-%m-%Y")
+ local v = vim.version()
+ return "DATE: "
+ .. datetime
+ .. " VIM: v"
+ .. v.major
+ .. "."
+ .. v.minor
+ .. "."
+ .. v.patch
+ .. " PLUGINS: "
+ .. total_plugins
+ end
+
+ local info = {
+ type = "text",
+ val = info_value(),
+ opts = {
+ hl = "DevIconVim",
+ position = "left",
+ },
+ }
+
+ local message = {
+ type = "text",
+ val = fortune({ max_width = 60 }),
+ opts = {
+ position = "left",
+ hl = "Statement",
+ },
+ }
+
+ local header = {
+ type = "group",
+ val = {
+ logo,
+ info,
+ message,
+ },
+ }
+
+ local mru = {
+ type = "group",
+ val = {
+ {
+ type = "text",
+ val = "MRU",
+ opts = {
+ hl = "String",
+ shrink_margin = false,
+ position = "left",
+ max_width = 60,
+ },
+ },
+ {
+ type = "group",
+ val = function()
+ return { startify.mru(1, vim.fn.getcwd(), 5) }
+ end,
+ },
+ },
+ }
+
+ local buttons = {
+ type = "group",
+ val = {
+ {
+ type = "text",
+ val = "CMD",
+ opts = {
+ hl = "String",
+ shrink_margin = false,
+ position = "left",
+ },
+ },
+ { type = "padding", val = 1 },
+ startify.button("e", "new", "<cmd>enew<cr>"),
+ startify.button("s", "session", "<cmd>SessionManager load_current_dir_session<cr>"),
+ startify.button("q", "quit", "<cmd>qa<cr>"),
+ },
+ opts = {
+ position = "left",
+ },
+ }
+
+ local config = {
+ layout = {
+ header,
+ { type = "padding", val = 1 },
+ mru,
+ { type = "padding", val = 1 },
+ buttons,
+ },
+ opts = {
+ position = "center",
+ width = 50,
+ },
+ }
+
+ alpha.setup(config)
+
+ vim.api.nvim_create_autocmd("User", {
+ group = vim.api.nvim_create_augroup("alpha_user", { clear = true }),
+ pattern = "BDeletePre",
+ callback = function()
+ if
+ #vim.fn.getbufinfo({ buflisted = 1 }) < 2
+ and vim.api.nvim_buf_get_name(0) ~= ""
+ and vim.api.nvim_buf_get_option(0, "filetype") ~= "Alpha"
+ then
+ alpha.start(false)
+ end
+ end,
+ desc = "Run Alpha when last buffer closed",
+ })
+end
+
+return M
diff --git a/nvim/.config/nvim/lua/tobyvin/plugins/gitsigns.lua b/nvim/.config/nvim/lua/tobyvin/plugins/gitsigns.lua
index cc1aabf..4b73f2c 100644
--- a/nvim/.config/nvim/lua/tobyvin/plugins/gitsigns.lua
+++ b/nvim/.config/nvim/lua/tobyvin/plugins/gitsigns.lua
@@ -52,7 +52,6 @@ M.setup = function()
topdelete = { text = "契" },
changedelete = { text = "▎" },
},
- current_line_blame = true,
preview_config = { border = "rounded" },
on_attach = M.on_attach,
})
diff --git a/nvim/.config/nvim/lua/tobyvin/plugins/rust-tools.lua b/nvim/.config/nvim/lua/tobyvin/plugins/rust-tools.lua
index cec90e0..000ce23 100644
--- a/nvim/.config/nvim/lua/tobyvin/plugins/rust-tools.lua
+++ b/nvim/.config/nvim/lua/tobyvin/plugins/rust-tools.lua
@@ -36,6 +36,7 @@ M.setup = function()
utils.job.cmd("cargo")
end
+ utils.keymap.group("n", "<leader>r", { desc = "Run" })
vim.keymap.set("n", "<leader>rr", runnables, { desc = "Runnables", buffer = bufnr })
vim.keymap.set("n", "<leader>rd", debuggables, { desc = "Debug", buffer = bufnr })
vim.keymap.set("n", "<leader>ro", open_cargo_toml, { desc = "Open Cargo.toml", buffer = bufnr })
diff --git a/nvim/.config/nvim/lua/tobyvin/utils/buffer.lua b/nvim/.config/nvim/lua/tobyvin/utils/buffer.lua
index 2169e30..b6b0b63 100644
--- a/nvim/.config/nvim/lua/tobyvin/utils/buffer.lua
+++ b/nvim/.config/nvim/lua/tobyvin/utils/buffer.lua
@@ -37,73 +37,63 @@ M.popup = function(file_path)
vim.api.nvim_buf_set_option(0, "modifiable", false)
end
----@param retry fun(force:boolean?):nil
-M.modified_prompt_retry = function(retry)
- local bufname = vim.fn.bufname(vim.fn.bufname())
-
- vim.ui.select({ "write", "discard", "abort" }, {
- prompt = string.format("No write since last change for buffer %s:", bufname),
- kind = "select_normal",
- }, function(_, idx)
- if idx == 1 then
- vim.cmd("write")
- retry()
- elseif idx == 2 then
- retry(true)
- else
- vim.notify(
- string.format("No write since last change for buffer %d", bufname),
- vim.log.levels.ERROR,
- { title = "Aborting..." }
- )
- end
- end)
-end
-
----@param cmd string vim command
----@param force boolean
-M.kill = function(cmd, force)
- local winid = vim.fn.win_getid()
- local bufnr = vim.fn.winbufnr(winid)
-
- if not force and vim.bo[bufnr].modified then
- return M.modified_prompt_retry(M[cmd])
+--- @class BdeleteOptions
+--- @field force boolean Force deletion and ignore unsaved changes.
+--- @field unload boolean Unloaded only, do not delete. See |:bunload|
+
+--- Wrapper around nvim_buf_delete that preserves window layout
+--- @param buffer number? Buffer handle, or 0 for current buffer
+--- @param opts BdeleteOptions? Optional parameters
+M.bdelete = function(buffer, opts)
+ if buffer == nil then
+ buffer = vim.fn.bufnr()
end
- vim.api.nvim_exec_autocmds("User", { pattern = cmd })
-
- if (string.sub(cmd, 1, 1) == "b" and vim.api.nvim_buf_is_valid(bufnr)) or vim.api.nvim_win_is_valid(winid) then
- vim.cmd(cmd .. (force and "!" or ""))
+ if opts == nil then
+ opts = {
+ force = false,
+ unload = true,
+ }
end
-end
-
----@param force boolean
-M.bdelete = function(force)
- M.kill("bdelete", force)
-end
----@param force boolean
-M.bwipeout = function(force)
- M.kill("bwipeout", force)
-end
+ if not opts.force and vim.bo[buffer].modified then
+ local bufname = vim.fn.bufname(vim.fn.bufname())
+
+ return vim.ui.select({ "write", "discard", "abort" }, {
+ prompt = string.format("No write since last change for buffer %s:", bufname),
+ kind = "select_normal",
+ }, function(_, idx)
+ if idx == 1 then
+ vim.cmd("write")
+ M.bdelete(buffer)
+ elseif idx == 2 then
+ M.bdelete(buffer, { force = true })
+ else
+ vim.notify(
+ string.format("No write since last change for buffer %d", bufname),
+ vim.log.levels.ERROR,
+ { title = "Aborting..." }
+ )
+ end
+ end)
+ end
----@param force boolean
-M.close = function(force)
- M.kill("close", force)
-end
+ if vim.fn.buflisted(buffer) == 1 then
+ local windows = vim.fn.getbufinfo(buffer)[1].windows
----@param force boolean
-M.quit = function(force)
- M.kill("quit", force)
-end
+ for _, window in ipairs(windows) do
+ local alt_buffer = vim.fn.bufnr("#")
+ if vim.fn.buflisted(alt_buffer) == 1 then
+ vim.api.nvim_win_set_buf(window, alt_buffer)
+ end
+ end
+ end
----@param force boolean
-M.tabclose = function(force)
- local cmd = "tabclose"
- if #vim.api.nvim_list_tabpages() == 1 then
- cmd = "qall"
+ if vim.api.nvim_buf_is_valid(buffer) then
+ vim.api.nvim_exec_autocmds("User", { pattern = "BDeletePre" })
+ vim.api.nvim_buf_set_option(buffer, "buflisted", false)
+ vim.api.nvim_buf_delete(buffer, opts)
end
- vim.cmd(cmd .. (force and "!" or ""))
end
return M