From e9ab2b85a72c82faf091e4449f6dbae364fcf3f7 Mon Sep 17 00:00:00 2001 From: Henrik Bakken Date: Fri, 28 Mar 2025 21:47:00 +0100 Subject: [PATCH] nvim break up makespecs --- nvim/init.lua | 463 +++++++++++++++++++++++++------------------------- 1 file changed, 236 insertions(+), 227 deletions(-) diff --git a/nvim/init.lua b/nvim/init.lua index 99d0085..2322689 100644 --- a/nvim/init.lua +++ b/nvim/init.lua @@ -1,6 +1,6 @@ vim.opt.termguicolors = true vim.g.mapleader = vim.keycode("") -vim.g.maplocalleader = vim.keycode("") +vim.g.maplocalleader = vim.keycode(",") -- ---------------------------------------- -- SETTINGS @@ -487,7 +487,7 @@ local function makespec_lualine() options = { theme = "auto", globalstatus = false }, extensions = { "fugitive" }, sections = { - lualine_a = { { "mode", color = { bg = "goldenrod" } } }, + lualine_a = { "mode" }, lualine_b = { "branch" }, lualine_c = { { @@ -549,110 +549,33 @@ local function makespec_lualine() } end -local function makespecs_utilbundles() +local function makespec_oil() return { - { - "catgoose/nvim-colorizer.lua", - event = "BufReadPre", - opts = { user_default_options = { mode = "virtualtext" } }, + "stevearc/oil.nvim", + dependencies = { "mini.icons" }, + cmd = { "Oil" }, + opts = { + watch_for_changes = true, + view_options = { show_hidden = true }, }, - "dhruvasagar/vim-table-mode", -- tables - "itchyny/vim-qfedit", -- editable quickfix list - { "ethanholz/nvim-lastplace", opts = {} }, -- keep location upon reopening - "tpope/vim-eunuch", -- Move, Rename etc - "tpope/vim-sleuth", -- do the right thing with tabstop and softtabstop - "mbbill/undotree", - { - "echasnovski/mini.basics", - opts = { - options = { basic = true, extra_ui = true }, - mappings = { move_with_alt = true }, - }, - }, - { - "echasnovski/mini.icons", - opts = {}, - }, - { - "echasnovski/mini.surround", - version = false, - opts = {}, - }, - { - "folke/snacks.nvim", - priority = 1000, - lazy = false, - ---@type snacks.Config - opts = { - bigfile = { - enabled = true, - notify = true, -- show notification when big file detected - size = 1.5 * 1024 * 1024, -- 1.5MB - line_length = 1000, -- average line length (useful for minified files) - -- Enable or disable features when big file detected - ---@param ctx {buf: number, ft:string} - setup = function(ctx) - if vim.fn.exists(":NoMatchParen") ~= 0 then vim.cmd([[NoMatchParen]]) end - Snacks.util.wo(0, { foldmethod = "manual", statuscolumn = "", conceallevel = 0 }) - vim.schedule(function() - if vim.api.nvim_buf_is_valid(ctx.buf) then vim.bo[ctx.buf].syntax = ctx.ft end - end) - end, - }, - bufdelete = { enabled = true }, - image = { enabled = true }, - indent = { enabled = true }, - lazygit = { enabled = vim.fn.has("lazygit") == 1 }, - notifier = { - enabled = true, - style = "minimal", - refresh = 500, - top_down = false, - }, - ---@class snacks.picker - picker = { - formatters = { file = { filename_first = true } }, - win = { preview = { wo = { statuscolumn = "" } } }, - }, - quickfile = { enabled = true }, - rename = { enabled = true }, - }, - keys = { - { "r", function() Snacks.rename.rename_file() end, desc = "Rename File" }, - { "", function() Snacks.bufdelete() end, desc = "Delete Buffer" }, - { "G", function() Snacks.lazygit() end, desc = "Launch Lazygit" }, - { ".", function() Snacks.scratch.open() end, desc = "Scratch Buffer" }, - -- find - { "", function() Snacks.picker.git_files() end, desc = "Find Git Files" }, - { "", function() Snacks.picker.files() end, desc = "Find Files" }, - { "", function() Snacks.picker.buffers() end, desc = "Find Buffers" }, - { "d", function() Snacks.picker.files({ cwd = "/home/hjalmarlucius/dotfiles" }) end, desc = "Find Config" }, - { "n", function() Snacks.picker.files({ cwd = "/home/hjalmarlucius/notes" }) end, desc = "Find Note" }, - -- search - { "", function() Snacks.picker.help() end, desc = "Help Pages" }, - { "", function() Snacks.picker.colorschemes() end, desc = "Colorschemes" }, - { "", function() Snacks.picker.grep() end, desc = "Grep" }, - { "*", function() Snacks.picker.grep_word() end, desc = "Visual selection or word", mode = { "n", "x" } }, - { "/", function() Snacks.picker.search_history() end, desc = "Search History" }, - { "b", function() Snacks.picker.lines() end, desc = "Grep Buffer" }, - { "B", function() Snacks.picker.grep_buffers() end, desc = "Grep Buffers" }, - { "D", function() Snacks.picker.grep({ cwd = "/home/hjalmarlucius/dotfiles" }) end, desc = "Find Config Content" }, - { "N", function() Snacks.picker.grep({ cwd = "/home/hjalmarlucius/notes" }) end, desc = "Find Notes Content" }, - { "i", function() Snacks.picker.diagnostics() end, desc = "Diagnostics" }, - { "l", function() Snacks.picker.loclist() end, desc = "Location List" }, - { "h", function() Snacks.picker.notifications() end, desc = "Notification History" }, - { "p", function() Snacks.picker.projects() end, desc = "Find Projects" }, - { "q", function() Snacks.picker.qflist() end, desc = "Quickfix List" }, - { "ø", function() Snacks.picker.command_history() end, desc = "Command History" }, - { "ss", function() Snacks.picker.lsp_symbols() end, desc = "LSP Symbols" }, - { "sS", function() Snacks.picker.lsp_workspace_symbols() end, desc = "LSP Workspace Symbols" }, - { "u", function() Snacks.picker.undo() end, desc = "Undo History" }, - }, + keys = { + { "e", "Oil .", noremap = true }, + { "E", "Oil --float .", noremap = true }, }, + init = function() + vim.api.nvim_create_autocmd("User", { + pattern = "OilActionsPost", + callback = function(event) + if event.data.actions.type == "move" then + Snacks.rename.on_rename_file(event.data.actions.src_url, event.data.actions.dest_url) + end + end, + }) + end, } end -local function makespecs_filemgmt() +local function makespec_neotree() return { { "nvim-neo-tree/neo-tree.nvim", @@ -662,29 +585,6 @@ local function makespecs_filemgmt() opts = { hijack_netrw_behavior = "disabled" }, keys = { { "", "Neotree", noremap = true } }, }, - { - "stevearc/oil.nvim", - dependencies = { "mini.icons" }, - cmd = { "Oil" }, - opts = { - watch_for_changes = true, - view_options = { show_hidden = true }, - }, - keys = { - { "e", "Oil .", noremap = true }, - { "E", "Oil --float .", noremap = true }, - }, - init = function() - vim.api.nvim_create_autocmd("User", { - pattern = "OilActionsPost", - callback = function(event) - if event.data.actions.type == "move" then - Snacks.rename.on_rename_file(event.data.actions.src_url, event.data.actions.dest_url) - end - end, - }) - end, - }, } end @@ -734,7 +634,80 @@ local function makespecs_previewers() } end -local function makespecs_git() +local function makespec_vimflog() + return { + { + "rbong/vim-flog", + dependencies = { "tpope/vim-fugitive" }, + cmd = { "Flog", "Flogsplit", "Floggit" }, + config = function() + vim.g.flog_permanent_default_opts = { + -- format = "%ad [%h] {%an}%d %s", + format = "%ad [%h]%d %s", + date = "short", + } + end, + keys = { + { "gl", "vertical Flogsplit -path=%" }, + { "gL", "vertical Flogsplit" }, + }, + }, + } +end +local function makespec_diffview() + return { + "sindrets/diffview.nvim", + cmd = { + "DiffviewOpen", + "DiffviewClose", + "DiffviewToggleFiles", + "DiffviewFocusFiles", + "DiffviewRefresh", + "DiffviewFileHistory", + }, + keys = { + { "gd", "DiffviewOpen", noremap = true }, + { "gh", "DiffviewFileHistory", noremap = true }, + }, + } +end +local function makespec_fugitive() + return { + "tpope/vim-fugitive", + cmd = { + "Git", + "Gedit", + "Gdiffsplit", + "Gread", + "Gwrite", + "Ggrep", + "Glgrep", + "Gmove", + "GRename", + "GDelete", + "GRemove", + "Gdelete", + "GUnlink", + "GBrowse", + }, + config = function() + vim.api.nvim_create_autocmd("User", { + pattern = { "FugitiveCommit", "BufReadPost" }, + callback = function() + vim.opt.foldmethod = "syntax" + vim.opt.foldlevel = 0 + end, + }) + end, + keys = { + { "", "vertical Git" }, + { "gp", "Git! push" }, + { "gP", "Git! push -f" }, + }, + } +end + +local function makespec_gitsigns() local function on_gitsigns_attach(bufnr) local gs = require("gitsigns") local function next_hunk() @@ -780,101 +753,121 @@ local function makespecs_git() end return { - { - "sindrets/diffview.nvim", - cmd = { - "DiffviewOpen", - "DiffviewClose", - "DiffviewToggleFiles", - "DiffviewFocusFiles", - "DiffviewRefresh", - "DiffviewFileHistory", + "lewis6991/gitsigns.nvim", + opts = { + signcolumn = true, + numhl = true, + linehl = false, + word_diff = false, + signs_staged_enable = false, + on_attach = on_gitsigns_attach, + -- extra thin lines + signs = { + add = { text = "▎" }, + change = { text = "▎" }, + delete = { text = "▎" }, + topdelete = { text = "▎" }, + changedelete = { text = "▎" }, + untracked = { text = "▎" }, }, - keys = { - { "gd", "DiffviewOpen", noremap = true }, - { "gh", "DiffviewFileHistory", noremap = true }, - }, - }, - { - "tpope/vim-fugitive", - cmd = { - "Git", - "Gedit", - "Gdiffsplit", - "Gread", - "Gwrite", - "Ggrep", - "Glgrep", - "Gmove", - "GRename", - "GDelete", - "GRemove", - "Gdelete", - "GUnlink", - "GBrowse", - }, - config = function() - vim.api.nvim_create_autocmd("User", { - pattern = { "FugitiveCommit", "BufReadPost" }, - callback = function() - vim.opt.foldmethod = "syntax" - vim.opt.foldlevel = 0 - end, - }) - end, - keys = { - { "", "vertical Git" }, - { "gp", "Git! push" }, - { "gP", "Git! push -f" }, - }, - }, - { - "rbong/vim-flog", - dependencies = { "tpope/vim-fugitive" }, - cmd = { "Flog", "Flogsplit", "Floggit" }, - config = function() - vim.g.flog_permanent_default_opts = { - -- format = "%ad [%h] {%an}%d %s", - format = "%ad [%h]%d %s", - date = "short", - } - end, - keys = { - { "gl", "vertical Flogsplit -path=%" }, - { "gL", "vertical Flogsplit" }, - }, - }, - { - "lewis6991/gitsigns.nvim", - opts = { - signcolumn = true, - numhl = true, - linehl = false, - word_diff = false, - signs_staged_enable = false, - on_attach = on_gitsigns_attach, - -- extra thin lines - signs = { - add = { text = "▎" }, - change = { text = "▎" }, - delete = { text = "▎" }, - topdelete = { text = "▎" }, - changedelete = { text = "▎" }, - untracked = { text = "▎" }, - }, - signs_staged = { - add = { text = "▎" }, - change = { text = "▎" }, - delete = { text = "▎" }, - topdelete = { text = "▎" }, - changedelete = { text = "▎" }, - }, + signs_staged = { + add = { text = "▎" }, + change = { text = "▎" }, + delete = { text = "▎" }, + topdelete = { text = "▎" }, + changedelete = { text = "▎" }, }, }, } end -local function makespec_todolists() +local function makespec_snacks() + return { + "folke/snacks.nvim", + priority = 1000, + lazy = false, + ---@type snacks.Config + opts = { + bigfile = { + enabled = true, + notify = true, -- show notification when big file detected + size = 1.5 * 1024 * 1024, -- 1.5MB + line_length = 1000, -- average line length (useful for minified files) + -- Enable or disable features when big file detected + ---@param ctx {buf: number, ft:string} + setup = function(ctx) + if vim.fn.exists(":NoMatchParen") ~= 0 then vim.cmd([[NoMatchParen]]) end + Snacks.util.wo(0, { foldmethod = "manual", statuscolumn = "", conceallevel = 0 }) + vim.schedule(function() + if vim.api.nvim_buf_is_valid(ctx.buf) then vim.bo[ctx.buf].syntax = ctx.ft end + end) + end, + }, + bufdelete = { enabled = true }, + image = { enabled = true }, + indent = { enabled = true }, + lazygit = { enabled = vim.fn.has("lazygit") == 1 }, + notifier = { + enabled = true, + style = "minimal", + refresh = 500, + top_down = false, + }, + ---@class snacks.picker + picker = { + formatters = { file = { filename_first = true } }, + win = { preview = { wo = { statuscolumn = "" } } }, + }, + quickfile = { enabled = true }, + rename = { enabled = true }, + }, + -- stylua: ignore + keys = { + { "r", function() Snacks.rename.rename_file() end, desc = "Rename File" }, + { "", function() Snacks.bufdelete() end, desc = "Delete Buffer" }, + { "G", function() Snacks.lazygit() end, desc = "Launch Lazygit" }, + { ".", function() Snacks.scratch.open() end, desc = "Scratch Buffer" }, + -- find + { "", function() Snacks.picker.git_files() end, desc = "Find Git Files" }, + { "", function() Snacks.picker.files() end, desc = "Find Files" }, + { "", function() Snacks.picker.buffers() end, desc = "Find Buffers" }, + { "d", function() Snacks.picker.files({ cwd = "/home/hjalmarlucius/dotfiles" }) end, desc = "Find Config" }, + { "n", function() Snacks.picker.files({ cwd = "/home/hjalmarlucius/notes" }) end, desc = "Find Note", }, + -- search + { "", function() Snacks.picker.help() end, desc = "Help Pages" }, + { "", function() Snacks.picker.colorschemes() end, desc = "Colorschemes" }, + { "", function() Snacks.picker.grep() end, desc = "Grep" }, + { "*", function() Snacks.picker.grep_word() end, desc = "Visual selection or word", mode = { "n", "x" }, }, + { "/", function() Snacks.picker.search_history() end, desc = "Search History" }, + { "b", function() Snacks.picker.lines() end, desc = "Grep Buffer" }, + { "B", function() Snacks.picker.grep_buffers() end, desc = "Grep Buffers" }, + { "D", function() Snacks.picker.grep({ cwd = "/home/hjalmarlucius/dotfiles" }) end, desc = "Find Config Content" }, + { "N", function() Snacks.picker.grep({ cwd = "/home/hjalmarlucius/notes" }) end, desc = "Find Notes Content", }, + { "i", function() Snacks.picker.diagnostics() end, desc = "Diagnostics" }, + { "l", function() Snacks.picker.loclist() end, desc = "Location List" }, + { "h", function() Snacks.picker.notifications() end, desc = "Notification History" }, + { "p", function() Snacks.picker.projects() end, desc = "Find Projects" }, + { "q", function() Snacks.picker.qflist() end, desc = "Quickfix List" }, + { "ø", function() Snacks.picker.command_history() end, desc = "Command History" }, + { "ss", function() Snacks.picker.lsp_symbols() end, desc = "LSP Symbols" }, + { "sS", function() Snacks.picker.lsp_workspace_symbols() end, desc = "LSP Workspace Symbols" }, + { "u", function() Snacks.picker.undo() end, desc = "Undo History" }, + }, + } +end + +local function makespecs_mini() + return { + { + "echasnovski/mini.basics", + opts = { options = { basic = true, extra_ui = true }, mappings = { move_with_alt = true } }, + }, + { "echasnovski/mini.icons", opts = {} }, + { "echasnovski/mini.surround", version = false, opts = {} }, + } +end + +local function makespec_todocomments() return { "folke/todo-comments.nvim", dependencies = { "nvim-lua/plenary.nvim" }, @@ -907,7 +900,7 @@ local function makespec_todolists() } end -local function makespec_tmux() +local function makespec_tmuxnav() return { -- tmux / vim interop "alexghergh/nvim-tmux-navigation", @@ -994,7 +987,7 @@ local function makespec_treesitter() } end -local function makespec_search() +local function makespec_hlslens() return { -- search count > 99 "kevinhwang91/nvim-hlslens", @@ -1051,7 +1044,7 @@ local function makespec_lint() } end -local function makespec_autoformat() +local function makespec_conform() return { "stevearc/conform.nvim", lazy = true, @@ -1140,28 +1133,44 @@ end -- LAZY -- ---------------------------------------- -local lazyspecs = {} +local lazyspecs = { + "dhruvasagar/vim-table-mode", -- tables + "itchyny/vim-qfedit", -- editable quickfix list + { "ethanholz/nvim-lastplace", opts = {} }, -- keep location upon reopening + "tpope/vim-eunuch", -- Move, Rename etc + "tpope/vim-sleuth", -- do the right thing with tabstop and softtabstop + "mbbill/undotree", +} for _, spec in ipairs({ - makespec_flash(), - makespec_lualine(), - makespec_autoformat(), - makespec_noice(), + makespec_snacks(), + makespec_conform(), -- autoformat makespec_treesitter(), - makespec_todolists(), - makespec_tmux(), + makespec_todocomments(), makespec_autotag(), makespec_lint(), - makespec_search(), makespec_mason(), + -- navigation + makespec_tmuxnav(), + makespec_hlslens(), + makespec_flash(), + -- visuals + makespec_lualine(), + makespec_noice(), + -- file browsers + makespec_neotree(), + makespec_oil(), + -- git + makespec_gitsigns(), + makespec_fugitive(), + makespec_diffview(), + makespec_vimflog(), }) do table.insert(lazyspecs, spec) end for _, specs in ipairs({ makespecs_themes(), - makespecs_utilbundles(), - makespecs_filemgmt(), + makespecs_mini(), makespecs_previewers(), - makespecs_git(), }) do for _, spec in ipairs(specs) do table.insert(lazyspecs, spec)