From 44fdfa566d11cfe779c05e1be7b8b015023bd06b Mon Sep 17 00:00:00 2001 From: Ian Date: Fri, 10 Jul 2026 23:34:51 +0200 Subject: [PATCH] feat various: fzf, formatting, dependencies script --- lua/check_dependencies/init.lua | 39 +++++++++++++++++ lua/config/check_dependencies.lua | 9 ++++ lua/config/conform.lua | 5 +++ lua/config/fzf.lua | 43 ++++++++++++++++++- lua/config/init.lua | 3 ++ lua/config/keybinds.lua | 70 ++++++++++++++----------------- lua/config/pack.lua | 15 +++---- nvim-pack-lock.json | 4 ++ 8 files changed, 142 insertions(+), 46 deletions(-) create mode 100644 lua/check_dependencies/init.lua create mode 100644 lua/config/check_dependencies.lua create mode 100644 lua/config/conform.lua diff --git a/lua/check_dependencies/init.lua b/lua/check_dependencies/init.lua new file mode 100644 index 0000000..f9ec294 --- /dev/null +++ b/lua/check_dependencies/init.lua @@ -0,0 +1,39 @@ +local M = {} + +cmdsList = nil + +function M.checkCommand(cmd, desc) + local toRun = "" + + if IS_UNIX then + toRun = "command -v " .. cmd + else + toRun = "where " .. cmd + end + + local p = io.popen(toRun) + local output = p:read("*l") + p:close() + + if output == nil and desc ~= nil and desc ~= "" then + print(cmd .. " [" .. desc .. "] - not found!") + elseif output == nil then + print(cmd .. " - not found!") + else + print(cmd .. " - ok") + end +end + +function M.run() + for i, cmd in ipairs(cmdsList) do + M.checkCommand(cmd.cmd, cmd.desc) + end +end + +function M.setup(cmds) + IS_UNIX = package.config:sub(1, 1) ~= "\\" + cmdsList = cmds + vim.api.nvim_create_user_command("DependenciesCheck", M.run, {}) +end + +return M diff --git a/lua/config/check_dependencies.lua b/lua/config/check_dependencies.lua new file mode 100644 index 0000000..276f34d --- /dev/null +++ b/lua/config/check_dependencies.lua @@ -0,0 +1,9 @@ +require('check_dependencies').setup({ + {cmd = "git", desc="git"}, + + -- fzf dependencies + {cmd = "fzf", desc="fuzzy finder"}, + {cmd = "fd", desc="better find"}, + {cmd = "bat", desc="cat alternative"}, +}) + diff --git a/lua/config/conform.lua b/lua/config/conform.lua new file mode 100644 index 0000000..3d944b3 --- /dev/null +++ b/lua/config/conform.lua @@ -0,0 +1,5 @@ +require("conform").setup({ + formatters_by_ft = { + lua = { "stylua" }, + }, +}) diff --git a/lua/config/fzf.lua b/lua/config/fzf.lua index e90010c..0ac6ade 100644 --- a/lua/config/fzf.lua +++ b/lua/config/fzf.lua @@ -1 +1,42 @@ -vim.keymap.set('n', 'f', 'FzfLua') +vim.keymap.set("n", "fz", "FzfLua") +vim.keymap.set("n", "ff", "FzfLua files") +vim.keymap.set("n", "fg", "FzfLua live_grep") +vim.keymap.set("n", "fr", "FzfLua resume") +vim.keymap.set("n", "fb", "FzfLua buffers") + +require("fzf-lua").setup({ + defaults = { + formatter = "path.dirname_first", + }, + winopts = { + fullscreen = true, + preview = { + default = "bat", + vertical = "down:60%", + horizontal = "right:50%", + layout = "vertical", + }, + }, + keymap = { + fzf = { + ["ctrl-z"] = "abort", + ["ctrl-u"] = "unix-line-discard", + ["ctrl-f"] = "half-page-down", + ["ctrl-b"] = "half-page-up", + ["ctrl-a"] = "beginning-of-line", + ["ctrl-e"] = "end-of-line", + ["alt-a"] = "toggle-all", + ["alt-g"] = "first", + ["alt-G"] = "last", + ["ctrl-k"] = "up", + ["ctrl-j"] = "down", + + -- Only valid with fzf previewers (bat/cat/git/etc) + ["f3"] = "toggle-preview-wrap", + ["f4"] = "toggle-preview", + ["ctrl-q"] = "select-all+accept", + -- [""] = "preview-page-down", + -- [""] = "preview-page-up", + }, + }, +}) diff --git a/lua/config/init.lua b/lua/config/init.lua index a7e4f46..3e0aa7b 100644 --- a/lua/config/init.lua +++ b/lua/config/init.lua @@ -8,3 +8,6 @@ require('config.oil') require('config.autopairs') require('config.fzf') require('config.indent_blank_line') +require('config.conform') + +require('config.check_dependencies') diff --git a/lua/config/keybinds.lua b/lua/config/keybinds.lua index b118c9a..f301338 100644 --- a/lua/config/keybinds.lua +++ b/lua/config/keybinds.lua @@ -1,62 +1,56 @@ -vim.api.nvim_create_user_command('W', "update", { nargs='?'}) +vim.api.nvim_create_user_command("W", "update", { nargs = "?" }) local bind = vim.keymap.set vim.g.mapleader = "," -bind('n', 'v', 'vspl', { desc = 'Vertical split' }) -bind('n', 'e', 'e .set relativenumber', { desc = 'Netrw file manager' }) +bind("n", "v", "vspl", { desc = "Vertical split" }) +bind("n", "e", "e .set relativenumber", { desc = "Netrw file manager" }) -- Buffer navigation -bind('n', '', 'bp', { desc = 'Buffer previous' }) -bind('n', '', 'bn', { desc = 'Buffer next' }) -bind('n', '', 'CloseOpenBuff', { desc = 'Buffer close' }) +bind("n", "", "bp", { desc = "Buffer previous" }) +bind("n", "", "bn", { desc = "Buffer next" }) +bind("n", "", "CloseOpenBuff", { desc = "Buffer close" }) -- Buffer resize -bind('n', '+', 'vertical resize +5', { desc = 'Buffer increase size' }) -bind('n', '-', 'vertical resize -5', { desc = 'Buffer decrease size' }) +bind("n", "+", "vertical resize +5", { desc = "Buffer increase size" }) +bind("n", "-", "vertical resize -5", { desc = "Buffer decrease size" }) -- Tab movements -bind('n', '', 'tabnew', { desc = 'New tab' }) -bind('n', '', 'tabclose', { desc = 'Close tab' }) -bind('n', '', 'tabnext', { desc = 'Next tab' }) -bind('n', '', 'tabprevious', { desc = 'Previous tab' }) +bind("n", "", "tabnew", { desc = "New tab" }) +bind("n", "", "tabclose", { desc = "Close tab" }) +bind("n", "", "tabnext", { desc = "Next tab" }) +bind("n", "", "tabprevious", { desc = "Previous tab" }) -- Movements into buffer -bind('n', "", "zz", { desc = 'Center cursor after page down' }) -bind('n', "", "zz", { desc = 'Center cursor after page up' }) +bind("n", "", "zz", { desc = "Center cursor after page down" }) +bind("n", "", "zz", { desc = "Center cursor after page up" }) -- Move lines in visual mode -bind('v', 'K', ":m '<-2gv=gv", { desc = 'Move highlighted lines up' }) -bind('v', 'J', ":m '>+1gv=gv", { desc = 'Move highlighted lines down' }) +bind("v", "K", ":m '<-2gv=gv", { desc = "Move highlighted lines up" }) +bind("v", "J", ":m '>+1gv=gv", { desc = "Move highlighted lines down" }) -- Text cleaning -bind('n', 'w', '%s/\\s\\+$/nohlsearch', { desc = 'Delete white spaces at end of each line' }) +bind("n", "w", "%s/\\s\\+$/nohlsearch", { desc = "Delete white spaces at end of each line" }) -- Quick fix list -bind('n', 'cc', 'cclose') -bind('n', 'co', 'copen') +bind("n", "cc", "cclose") +bind("n", "co", "copen") +-- Oil vim vim.keymap.set("n", "", function() - local dir = vim.fn.expand("%:p:h") - if dir == "" then - dir = vim.loop.cwd() - end - require("oil").open(dir) + local dir = vim.fn.expand("%:p:h") + if dir == "" then + dir = vim.loop.cwd() + end + require("oil").open(dir) end, { desc = "Open Oil in current file directory" }) --- Telescope --- bind('n', 'ff', 'Telescope find_files') --- bind('n', 'fg', 'Telescope live_grep') --- bind('n', 'fg', require("telescope").extensions.live_grep_args.live_grep_args, { noremap = true }) --- bind('n', 'fb', 'Telescope buffers') --- bind('n', 'fh', 'Telescope help_tags') - --- Testing funcs --- vim.api.nvim_create_user_command('MyFuncs', require('my_funcs').reopen, { nargs='?'}) --- bind('n', 'r', 'MyFuncs') - --- vim.api.nvim_create_user_command('MyFuncsPP', require('my_funcs').print_path, { nargs='?'}) --- bind('n', 'pp', 'MyFuncsPP') --- bind({'n', 'i'}, '', 'w', { desc = 'Save with CTRL+s' }) +-- Conform +vim.api.nvim_create_user_command("FormatConform", function(opts) + require("conform").format() +end, { + desc = "Format current buffer", +}) +bind("n", "", "FormatConform") diff --git a/lua/config/pack.lua b/lua/config/pack.lua index ae99a43..eac1421 100644 --- a/lua/config/pack.lua +++ b/lua/config/pack.lua @@ -1,9 +1,10 @@ vim.pack.add({ - { src = "https://github.com/catppuccin/nvim", name = "catppuccin" }, - { src = "https://github.com/neogitorg/neogit", name = "neogit" }, - { src = "https://github.com/stevearc/oil.nvim", name = "oil.nvim" }, - { src = "https://github.com/nvim-tree/nvim-web-devicons", name = "web-dev-devicons" }, - { src = "https://github.com/windwp/nvim-autopairs", name = "nvim-autopairs" }, - { src = "https://github.com/ibhagwan/fzf-lua", name = "fzf-lua" }, - { src = "https://github.com/lukas-reineke/indent-blankline.nvim", name = "indent-blankline.nvim" }, + { src = "https://github.com/catppuccin/nvim", name = "catppuccin" }, + { src = "https://github.com/neogitorg/neogit", name = "neogit" }, + { src = "https://github.com/stevearc/oil.nvim", name = "oil.nvim" }, + { src = "https://github.com/nvim-tree/nvim-web-devicons", name = "web-dev-devicons" }, + { src = "https://github.com/windwp/nvim-autopairs", name = "nvim-autopairs" }, + { src = "https://github.com/ibhagwan/fzf-lua", name = "fzf-lua" }, + { src = "https://github.com/lukas-reineke/indent-blankline.nvim", name = "indent-blankline.nvim" }, + { src = "https://github.com/stevearc/conform.nvim", name = "conform.nvim" }, }) diff --git a/nvim-pack-lock.json b/nvim-pack-lock.json index c45b03a..522c884 100644 --- a/nvim-pack-lock.json +++ b/nvim-pack-lock.json @@ -4,6 +4,10 @@ "rev": "e068ab5f8261f23f6f71ffd8791ae40315b77b9c", "src": "https://github.com/catppuccin/nvim" }, + "conform.nvim": { + "rev": "619363c30309d29ffa631e67c8183f2a72caa373", + "src": "https://github.com/stevearc/conform.nvim" + }, "fzf-lua": { "rev": "39da6060d53659acf3ec118200bc48721b29b8fd", "src": "https://github.com/ibhagwan/fzf-lua"