Initial new commit

This commit is contained in:
DavidOnTop 2025-05-08 19:00:25 +02:00
commit c46ad3d427
Signed by: DavidOnTop
GPG key ID: 8D3E9A75E3E13D89
22 changed files with 2401 additions and 0 deletions

26
LICENSE Normal file
View file

@ -0,0 +1,26 @@
GLWTS(Good Luck With That Shit) Public License
Copyright (c) Every-fucking-one, except the Author
Everyone is permitted to copy, distribute, modify, merge, sell, publish,
sublicense or whatever the fuck they want with this software but at their
OWN RISK.
Preamble
The author has absolutely no fucking clue what the code in this project
does. It might just fucking work or not, there is no third option.
GOOD LUCK WITH THAT SHIT PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION, AND MODIFICATION
0. You just DO WHATEVER THE FUCK YOU WANT TO as long as you NEVER LEAVE
A FUCKING TRACE TO TRACK THE AUTHOR of the original product to blame for
or held responsible.
IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE.
Good luck and Godspeed.

31
after/init.lua Executable file
View file

@ -0,0 +1,31 @@
vim.opt.nu = true
vim.opt.number = true
vim.opt.relativenumber = true
vim.opt.cursorline = true
-- vim.cmd[[
-- highlight CursorColumn guibg=none ctermbg=none
-- highlight link CursorColumn CursorLine
-- ]]
-- fixmap
vim.cmd[[
map <Space>m\ <nop>
map <Space>m/ <nop>
map <Space>mA <nop>
map <Space>mgS <nop>
map <Space>tt <nop>
map <Space>tm <nop>
]]
vim.opt.nu = true
vim.opt.number = true
vim.opt.relativenumber = true
vim.opt.cursorline = true
require("plugins")

2
init.lua Executable file
View file

@ -0,0 +1,2 @@
require("config")
require("plugins")

79
lazy-lock.json Normal file
View file

@ -0,0 +1,79 @@
{
"Comment.nvim": { "branch": "master", "commit": "e30b7f2008e52442154b66f7c519bfd2f1e32acb" },
"Ionide-vim": { "branch": "master", "commit": "c7e8973426431839e9d888a4aa8d6a41251ba16f" },
"LuaSnip": { "branch": "master", "commit": "7351d673f430e89f11962dc45b7360d6a0a26d2d" },
"close-buffers.nvim": { "branch": "master", "commit": "3acbcad1211572342632a6c0151f839e7dead27f" },
"cmp-buffer": { "branch": "main", "commit": "b74fab3656eea9de20a9b8116afa3cfc4ec09657" },
"cmp-nvim-lsp": { "branch": "main", "commit": "a8912b88ce488f411177fc8aed358b04dc246d7b" },
"cmp-nvim-lua": { "branch": "main", "commit": "f12408bdb54c39c23e67cab726264c10db33ada8" },
"cmp-path": { "branch": "main", "commit": "c6635aae33a50d6010bf1aa756ac2398a2d54c32" },
"cmp_luasnip": { "branch": "master", "commit": "98d9cb5c2c38532bd9bdb481067b20fea8f32e90" },
"crates.nvim": { "branch": "main", "commit": "1dffccc0a95f656ebe00cacb4de282473430c5a1" },
"editorconfig-vim": { "branch": "master", "commit": "6a58b7c11f79c0e1d0f20533b3f42f2a11490cf8" },
"fidget.nvim": { "branch": "main", "commit": "d9ba6b7bfe29b3119a610892af67602641da778e" },
"friendly-snippets": { "branch": "main", "commit": "572f5660cf05f8cd8834e096d7b4c921ba18e175" },
"gitsigns.nvim": { "branch": "main", "commit": "1796c7cedfe7e5dd20096c5d7b8b753d8f8d22eb" },
"go.nvim": { "branch": "master", "commit": "37ec4d9be3edef64b725bfe29684e1fe019873bc" },
"guihua.lua": { "branch": "master", "commit": "0cc9631914ffcbe3e474e809c610d12a75b660cf" },
"harpoon": { "branch": "harpoon2", "commit": "ed1f853847ffd04b2b61c314865665e1dadf22c7" },
"heirline.nvim": { "branch": "master", "commit": "74529ce6a47f3f8dc7546c221c187a2dd025ffee" },
"hop.nvim": { "branch": "master", "commit": "1a1eceafe54b5081eae4cb91c723abd1d450f34b" },
"hunk.nvim": { "branch": "master", "commit": "b475ba0011e4b8ef7d7ddecd9764ee1a5f41366d" },
"indent-blankline.nvim": { "branch": "master", "commit": "005b56001b2cb30bfa61b7986bc50657816ba4ba" },
"lazy.nvim": { "branch": "main", "commit": "6c3bda4aca61a13a9c63f1c1d1b16b9d3be90d7a" },
"lsp_signature.nvim": { "branch": "master", "commit": "a793d02b6a5e639fa9d3f2a89a839fa688ab2d0a" },
"markview.nvim": { "branch": "main", "commit": "6bbbbf5790cdea622b53fe94b49b9801037e2db9" },
"mason-lspconfig.nvim": { "branch": "main", "commit": "1a31f824b9cd5bc6f342fc29e9a53b60d74af245" },
"mason-null-ls.nvim": { "branch": "main", "commit": "de19726de7260c68d94691afb057fa73d3cc53e7" },
"mason-nvim-dap.nvim": { "branch": "main", "commit": "4c2cdc69d69fe00c15ae8648f7e954d99e5de3ea" },
"mason.nvim": { "branch": "main", "commit": "fc98833b6da5de5a9c5b1446ac541577059555be" },
"melange-nvim": { "branch": "master", "commit": "2db5407f2f6d6d6286f50f2f7365728d66f6f3ae" },
"mini.nvim": { "branch": "main", "commit": "90ab64f944a5a63a9efebe6735e1f2c6d4db3613" },
"neo-tree.nvim": { "branch": "v2.x", "commit": "80dc74d081823649809f78370fa5b204aa9a853a" },
"neodev.nvim": { "branch": "main", "commit": "46aa467dca16cf3dfe27098042402066d2ae242d" },
"neoscroll.nvim": { "branch": "master", "commit": "f957373912e88579e26fdaea4735450ff2ef5c9c" },
"none-ls.nvim": { "branch": "main", "commit": "7c493a266a6b1ed419f8a2e431651bc15b10df27" },
"nui.nvim": { "branch": "main", "commit": "f535005e6ad1016383f24e39559833759453564e" },
"numb.nvim": { "branch": "master", "commit": "7f564e638d3ba367abf1ec91181965b9882dd509" },
"nvim-autopairs": { "branch": "master", "commit": "4d74e75913832866aa7de35e4202463ddf6efd1b" },
"nvim-bqf": { "branch": "main", "commit": "e20417d5e589e03eaaaadc4687904528500608be" },
"nvim-cmp": { "branch": "main", "commit": "b5311ab3ed9c846b585c0c15b7559be131ec4be9" },
"nvim-dap": { "branch": "master", "commit": "8df427aeba0a06c6577dc3ab82de3076964e3b8d" },
"nvim-dap-ui": { "branch": "master", "commit": "f7d75cca202b52a60c520ec7b1ec3414d6e77b0f" },
"nvim-dap-virtual-text": { "branch": "master", "commit": "df66808cd78b5a97576bbaeee95ed5ca385a9750" },
"nvim-jdtls": { "branch": "master", "commit": "c23f200fee469a415c77265ca55b496feb646992" },
"nvim-lspconfig": { "branch": "master", "commit": "46434074f188e6bfccf9d9153dd8be6b1381498b" },
"nvim-metals": { "branch": "main", "commit": "04d8ce24638412a2c93dd79fecca4b2c7b9c07f9" },
"nvim-navbuddy": { "branch": "master", "commit": "a34786c77a528519f6b8a142db7609f6e387842d" },
"nvim-navic": { "branch": "master", "commit": "d0a8c17c4dc721b00bc2ac305c6ffbb036beeb74" },
"nvim-nio": { "branch": "master", "commit": "21f5324bfac14e22ba26553caf69ec76ae8a7662" },
"nvim-surround": { "branch": "main", "commit": "0e62500b98f4513feaaf7425c135472457ea5b7d" },
"nvim-treesitter": { "branch": "master", "commit": "94ea4f436d2b59c80f02e293466c374584f03b8c" },
"nvim-treesitter-context": { "branch": "master", "commit": "6daca3ad780f045550b820f262002f35175a6c04" },
"nvim-treesitter-textobjects": { "branch": "master", "commit": "ed373482db797bbf71bdff37a15c7555a84dce47" },
"nvim-ts-autotag": { "branch": "main", "commit": "a1d526af391f6aebb25a8795cbc05351ed3620b5" },
"nvim-web-devicons": { "branch": "master", "commit": "2c2b4eafce6cdd0cb165036faa17396eff18f847" },
"org-bullets.nvim": { "branch": "main", "commit": "21437cfa99c70f2c18977bffd423f912a7b832ea" },
"orgmode": { "branch": "master", "commit": "15d66ead1285d99f8a21c4ef4874ac62e9320fe6" },
"plenary.nvim": { "branch": "master", "commit": "857c5ac632080dba10aae49dba902ce3abf91b35" },
"rainbow_csv.nvim": { "branch": "main", "commit": "26de78d8324f7ac6a3e478319d1eb1f17123eb5b" },
"rustaceanvim": { "branch": "master", "commit": "e9c5aaba16fead831379d5f44617547a90b913c7" },
"suda.vim": { "branch": "master", "commit": "9adda7d195222d4e2854efb2a88005a120296c47" },
"telescope-dap.nvim": { "branch": "master", "commit": "783366bd6c1e7fa0a5c59c07db37f49c805a28df" },
"telescope-fzf-native.nvim": { "branch": "main", "commit": "1f08ed60cafc8f6168b72b80be2b2ea149813e55" },
"telescope.nvim": { "branch": "0.1.x", "commit": "a0bbec21143c7bc5f8bb02e0005fa0b982edc026" },
"templ.vim": { "branch": "main", "commit": "5cc48b93a4538adca0003c4bc27af844bb16ba24" },
"texpresso.vim": { "branch": "main", "commit": "907838c08bbf99ad6bed3c908f1d0551a92ab4e0" },
"todo-comments.nvim": { "branch": "main", "commit": "304a8d204ee787d2544d8bc23cd38d2f929e7cc5" },
"toggleterm.nvim": { "branch": "main", "commit": "50ea089fc548917cc3cc16b46a8211833b9e3c7c" },
"transparent.nvim": { "branch": "main", "commit": "8a2749a2fa74f97fe6557f61b89ac7fd873f3c21" },
"undotree": { "branch": "master", "commit": "b951b87b46c34356d44aa71886aecf9dd7f5788a" },
"vim-glsl": { "branch": "master", "commit": "40dd0b143ef93f3930a8a409f60c1bb85e28b727" },
"vim-sleuth": { "branch": "master", "commit": "be69bff86754b1aa5adcbb527d7fcd1635a84080" },
"vim-slint": { "branch": "main", "commit": "9badce3860297562bb5e80ba1666628f9e0ac632" },
"vim-visual-multi": { "branch": "master", "commit": "a6975e7c1ee157615bbc80fc25e4392f71c344d4" },
"vimtex": { "branch": "master", "commit": "85cb04f5a9d2289b9d2b62d5d84342fe9675ec08" },
"which-key.nvim": { "branch": "main", "commit": "370ec46f710e058c9c1646273e6b225acf47cbed" },
"wilder.nvim": { "branch": "master", "commit": "679f348dc90d80ff9ba0e7c470c40a4d038dcecf" },
"zig.vim": { "branch": "master", "commit": "e55a7949561d34822b7cd2290819927b79825dcd" }
}

168
lua/config/commands.lua Executable file
View file

@ -0,0 +1,168 @@
local pickers = require "telescope.pickers"
local finders = require "telescope.finders"
local conf = require("telescope.config").values
local actions = require "telescope.actions"
local action_state = require "telescope.actions.state"
vim.api.nvim_create_user_command("OP", function()
local folders = vim.fn.systemlist("\\ls -d $HOME/projects/*/")
for i, folder in ipairs(folders) do
folders[i] = string.match(string.match(folder, "[^/]*/$"), "^[^/]*")
end
pickers.new({}, {
prompt_title = "Open project",
finder = finders.new_table {
results = folders
},
sorter = conf.generic_sorter({}),
attach_mappings = function(prompt_bufnr, map)
actions.select_default:replace(function()
actions.close(prompt_bufnr)
local selection = action_state.get_selected_entry()
selection = selection[1]
vim.cmd("cd $HOME/projects/" .. selection)
end)
return true
end
}):find()
end, {})
vim.api.nvim_create_user_command("OD", function()
local folders = vim.fn.systemlist("\\ls -d */")
for i, folder in ipairs(folders) do
folders[i] = string.match(string.match(folder, "[^/]*/$"), "^[^/]*")
end
pickers.new({}, {
prompt_title = "Open directory",
finder = finders.new_table {
results = folders
},
sorter = conf.generic_sorter({}),
attach_mappings = function(prompt_bufnr, map)
actions.select_default:replace(function()
actions.close(prompt_bufnr)
local selection = action_state.get_selected_entry()
selection = selection[1]
vim.cmd("cd " .. selection)
end)
return true
end
}):find()
end, {})
vim.api.nvim_create_user_command("Config", function()
vim.cmd("cd $HOME/.config/nvim")
end, {})
vim.api.nvim_create_user_command("RetabFile2Spaces", function()
vim.cmd(":set ts=2 sts=2 noet | retab! | set ts=4 sts=4 et | retab!")
end, {})
vim.api.nvim_create_user_command("RetabFile4SpacesToTab", function()
vim.cmd(":set ts=4 sts=4 noet | retab! | set ts=4 sts=0 noexpandtab | retab!")
end, {})
local function get_makefile_targets()
local makefile = "./Makefile"
local targets = {}
local file = io.open(makefile, "r")
if file then
for line in file:lines() do
local target = line:match("^[^\\s:]+:.*")
if target then
local tg = target:match("^[^:]+")
table.insert(targets, tg)
end
end
file:close()
end
return targets
end
vim.api.nvim_create_user_command("Make", function(args)
local vimCmd = "TermExec cmd=\"make"
if (args["args"]) then
vimCmd = vimCmd .. " " .. args["args"]
end
vimCmd = vimCmd .. "\""
vim.cmd(vimCmd)
end, {
nargs = "*",
["complete"] = function()
return get_makefile_targets()
end
})
vim.api.nvim_create_user_command("Maket", function()
local targets = get_makefile_targets()
pickers.new({}, {
prompt_title = "Run make target",
finder = finders.new_table {
results = targets
},
sorter = conf.generic_sorter({}),
attach_mappings = function(prompt_bufnr, map)
actions.select_default:replace(function()
actions.close(prompt_bufnr)
local selection = action_state.get_selected_entry()
selection = selection[1]
vim.cmd(":Make " .. selection)
end)
return true
end
}):find()
end, {})
function get_just_targets()
local handle = io.popen("just --summary")
local res = handle:read("*a")
handle:close()
local targets = {}
-- insert space seperated targets
for target in string.gmatch(res, "%S+") do
table.insert(targets, target)
end
end
vim.api.nvim_create_user_command("Just", function(args)
local vimCmd = "TermExec cmd=\"just"
if (args["args"]) then
vimCmd = vimCmd .. " " .. args["args"]
end
vimCmd = vimCmd .. "\""
vim.cmd(vimCmd)
end, {
nargs = "*",
["complete"] = function()
return get_just_targets()
end
})
vim.api.nvim_create_user_command("Justt", function()
local targets = get_makefile_targets()
pickers.new({}, {
prompt_title = "Run just target",
finder = finders.new_table {
results = targets
},
sorter = conf.generic_sorter({}),
attach_mappings = function(prompt_bufnr, map)
actions.select_default:replace(function()
actions.close(prompt_bufnr)
local selection = action_state.get_selected_entry()
selection = selection[1]
vim.cmd(":Just " .. selection)
end)
return true
end
}):find()
end, {})
vim.api.nvim_create_autocmd('TextYankPost', {
desc = 'Highlight when yanking (copying) text',
group = vim.api.nvim_create_augroup('HightlightYank', { clear = true }),
callback = function()
vim.highlight.on_yank()
end,
})

4
lua/config/init.lua Executable file
View file

@ -0,0 +1,4 @@
require("config.pmstrap")
require("config.sets")
require("config.keymap")
require("config.commands")

240
lua/config/keymap.lua Executable file
View file

@ -0,0 +1,240 @@
-- local wk = require("which-key")
--
-- local keys = {
-- e = {
-- name = "Toggle",
-- e = {"<cmd>NeoTreeFloatToggle<CR>", "NeoTree"},
-- w = {vim.cmd.Ex, "netrw"},
-- s = {"<cmd>NeoTreeShowToggle<CR>", "neotree sidebar"},
-- g = {"<cmd>NeoTreeFloatToggle git_status<CR>", "Git Status"},
-- -- b = {"<cmd>NeoTreeFloatToggle buffers<CR>", "Buffers"},
-- c = {"<cmd>NeoTreeClose<CR>" , "Close"},
-- u = {vim.cmd.UndotreeToggle, "UndoTree"},
-- },
-- c = {
-- name = "LSP",
-- f = {function () vim.lsp.buf.format() end, "Format"},
-- w = {function () vim.lsp.buf.workspace_symbol("") end, "workspace symbol"},
-- d = {function () vim.diagnostic.open_float() end, "diagnostic"},
-- a = {function () vim.lsp.buf.code_action() end, "code actions"},
-- R = {function () vim.lsp.buf.references() end, "references"},
-- r = {function () vim.lsp.buf.rename() end, "rename"},
-- h = {function () vim.lsp.buf.hover() end, "Hover"},
-- t = {function () vim.lsp.buf.type_definition() end,"Type Definition"},
-- s = {"<cmd>Navbuddy<cr>", "Navbuddy"},
-- S = {require("telescope.builtin").lsp_document_symbols, "Document Symbols"},
-- l = {
-- name = "LSP",
-- k = {"<cmd>LspStop<cr>", "Stop"},
-- s = {"<cmd>LspStart<cr>", "Start"},
-- r = {"<cmd>LspRestart<cr>", "Restart"},
-- },
-- },
-- b = {
-- name = "Buffer",
-- h = {vim.cmd.bprevious, "Previous"},
-- l = {vim.cmd.bnext, "Next"},
-- H = {vim.cmd.bfirst, "First"},
-- L = {vim.cmd.blast, "Last"},
-- b = {require("telescope.builtin").buffers, "Picker"},
-- c = {"<cmd>:bp | sp | bn | bd<cr>", "Close"},
-- C = {"<cmd>:bp | sp | bn | bd!<cr>", "Close Force"},
-- d = {function() vim.cmd("bd") end, "Delete buffer"},
-- D = {function() vim.cmd("bd!") end, "Delete buffer Force"},
-- o = {function() vim.cmd("BDelete other") end, "Delete other buffers"},
-- m = {function() vim.cmd("BDelete select") end, "Select buffer to delete"},
-- },
-- f = {
-- name = "Telescope & fzf",
-- c = {require("telescope.builtin").colorscheme, "Find Colorscheme"},
-- d = {require("telescope.builtin").diagnostics, "Find Diagnostics"},
-- w = {require("telescope.builtin").grep_string, "Find current Word"},
-- f = {require("telescope.builtin").find_files, "telescope find files"},
-- g = {require("telescope.builtin").live_grep, "live grep"},
-- b = {require("telescope.builtin").buffers, "buffers"},
-- h = {require("telescope.builtin").help_tags, "help tags"},
-- s = {function () require("telescope.builtin").grep_string({ search = vim.fn.input("Grep > ")}); end, "grep search through files"},
-- m = {"<cmd>Maket<cr>", "Make"},
-- },
-- s = {
-- name = "Settings",
-- c = {function ()
-- vim.opt.scrolloff = 100
-- end, "Always center cursor"},
-- C = {function ()
-- vim.opt.scrolloff = 8
-- end, "Disable Cursor center"},
-- f = {function ()
-- vim.opt.nu = true
-- vim.opt.relativenumber = true
-- end, "Fix number and relative numbers"},
-- },
-- h = {
-- name = "Hop",
-- w = {"<cmd>HopWord<cr>", "Word"},
-- a = {"<cmd>HopAnywhere<cr>", "Anywhere"},
-- l = {"<cmd>HopLine<cr>", "Line"},
-- p = {"<cmd>HopPattern<cr>", "Pattern"},
-- c = {"<cmd>HopChar1<cr>", "Char1"},
-- x = {"<cmd>HopChar2<cr>", "Char2"},
-- h = {vim.cmd.HopChar2, "Hop"},
-- },
-- d = {
-- name = "Debug",
-- b = {function () require("dap").toggle_breakpoint() end, "toggle breakpoint"},
-- c = {function () require("dap").continue() end, "launch or continue execution"},
-- s = {function () require("dap").step_into() end, "step into"},
-- o = {function () require("dap").step_over() end, "step over"},
-- r = {function () require("dap").repl.open() end, "open repl"},
-- w = {"<cmd>DapUIFloat<cr>", "DapUI"},
-- },
-- w = {
-- name = "workspace",
-- a = {vim.lsp.buf.add_workspace_folder, "add folder"},
-- r = {vim.lsp.buf.remove_workspace_folder, "remove folder"},
-- l = {function() print(vim.inspect(vim.lsp.buf.list_workspace_folders())) end, "list folders"},
-- },
-- q = {
-- name = "Quick nav",
-- q = {require("harpoon.ui").toggle_quick_menu, "Menu"},
-- a = {function () require("harpoon"):list():append() end, "Add file"},
-- r = {function () require("harpoon"):list():remove() end, "Remove File"},
-- },
--
-- }
--
-- wk.register(keys, {prefix = "<leader>"})
-- wk.register(keys, {prefix = "<C-Space>"})
-- wk.register(keys, {prefix = "<C-Space>", mode = "i"})
-- wk.register(keys, {prefix = "<C-Space>", mode = "v"})
local keys = {
{ "bC", "<cmd>:bp | sp | bn | bd!<cr>", desc = "Close Force" },
{ "bD", function() vim.cmd("bd!") end, desc = "Delete buffer Force" },
{ "bH", vim.cmd.bfirst, desc = "First" },
{ "bL", vim.cmd.blast, desc = "Last" },
{ "bb", require("telescope.builtin").buffers, desc = "Picker" },
{ "bc", "<cmd>:bp | sp | bn | bd<cr>", desc = "Close" },
{ "bd", vim.cmd.bd, desc = "Delete buffer" },
{ "bh", vim.cmd.bprevious, desc = "Previous" },
{ "bl", vim.cmd.bnext, desc = "Next" },
{ "bm", function() vim.cmd("BDelete select") end, desc = "Select buffer to delete" },
{ "bo", function() vim.cmd("BDelete other") end, desc = "Delete other buffers" },
{ "cR", vim.lsp.buf.references, desc = "references" },
{ "cS", require("telescope.builtin").lsp_document_symbols, desc = "Document Symbols" },
{ "ca", vim.lsp.buf.code_action, desc = "code actions" },
{ "cd", vim.diagnostic.open_float, desc = "diagnostic" },
{ "cf", vim.lsp.buf.format, desc = "Format" },
{ "ch", vim.lsp.buf.hover, desc = "Hover" },
{ "clk", "<cmd>LspStop<cr>", desc = "Stop" },
{ "clr", "<cmd>LspRestart<cr>", desc = "Restart" },
{ "cls", "<cmd>LspStart<cr>", desc = "Start" },
{ "cr", vim.lsp.buf.rename, desc = "rename" },
{ "cs", "<cmd>Navbuddy<cr>", desc = "Navbuddy" },
{ "ct", vim.lsp.buf.type_definition, desc = "Type Definition" },
{ "cw", function() vim.lsp.buf.workspace_symbol("") end, desc = "workspace symbol" },
{ "db", require("dap").toggle_breakpoint, desc = "toggle breakpoint" },
{ "dc", require("dap").continue, desc = "launch or continue execution" },
{ "do", require("dap").step_over, desc = "step over" },
{ "dr", require("dap").repl.open, desc = "open repl" },
{ "ds", require("dap").step_into, desc = "step into" },
{ "dw", "<cmd>DapUIFloat<cr>", desc = "DapUI" },
{ "ec", "<cmd>NeoTreeClose<CR>", desc = "Close" },
{ "ee", "<cmd>NeoTreeFloatToggle<CR>", desc = "NeoTree" },
{ "eg", "<cmd>NeoTreeFloatToggle git_status<CR>", desc = "Git Status" },
{ "es", "<cmd>NeoTreeShowToggle<CR>", desc = "neotree sidebar" },
{ "eu", vim.cmd.UndotreeToggle, desc = "UndoTree" },
{ "ew", vim.cmd.Ex, desc = "netrw" },
{ "fb", require("telescope.builtin").buffers, desc = "buffers" },
{ "fc", require("telescope.builtin").colorscheme, desc = "Find Colorscheme" },
{ "fd", require("telescope.builtin").diagnostics, desc = "Find Diagnostics" },
{ "ff", require("telescope.builtin").find_files, desc = "telescope find files" },
{ "fg", require("telescope.builtin").live_grep, desc = "live grep" },
{ "fh", require("telescope.builtin").help_tags, desc = "help tags" },
{ "fm", "<cmd>Maket<cr>", desc = "Make"},
{ "fs", function () require("telescope.builtin").grep_string({ search = vim.fn.input("Grep > ")}); end, desc = "grep search through files" },
{ "fw", require("telescope.builtin").grep_string, desc = "Find current Word" },
{ "ha", "<cmd>HopAnywhere<cr>", desc = "Anywhere" },
{ "hc", "<cmd>HopChar1<cr>", desc = "Char1" },
{ "hh", vim.cmd.HopChar2, desc = "Hop" },
{ "hl", "<cmd>HopLine<cr>", desc = "Line" },
{ "hp", "<cmd>HopPattern<cr>", desc = "Pattern" },
{ "hw", "<cmd>HopWord<cr>", desc = "Word" },
{ "hx", "<cmd>HopChar2<cr>", desc = "Char2" },
{ "qa", function () require("harpoon"):list():append() end, desc = "Add file" },
{ "qq", require("harpoon.ui").toggle_quick_menu, desc = "Menu" },
{ "qr", function() require("harpoon"):list():remove() end, desc = "Remove File" },
{ "sC", function() vim.opt.scrolloff = 8 end, desc = "Disable Cursor center" },
{ "sc", function() vim.opt.scrolloff = 100 end, desc = "Always center cursor" },
{ "sf", function() vim.opt.nu = true; vim.opt.relativenumber = true end, desc = "Fix number and relative numbers" },
{ "wa", vim.lsp.buf.add_workspace_folder, desc = "add folder" },
{ "wl", function() print(vim.inspect(vim.lsp.buf.list_workspace_folders())) end, desc = "list folders" },
{ "wr", vim.lsp.buf.remove_workspace_folder, desc = "remove folder" },
}
for i, key in ipairs(keys) do
vim.keymap.set("n", "<leader>" .. key[1], key[2], {desc = key["desc"]})
vim.keymap.set("n", "<C-Space>" .. key[1], key[2], {desc = key["desc"]})
vim.keymap.set("i", "<C-Space>" .. key[1], key[2], {desc = key["desc"]})
vim.keymap.set("v", "<C-Space>" .. key[1], key[2], {desc = key["desc"]})
end
-- LSP
vim.keymap.set("n", "gd", function() vim.lsp.buf.definition() end, {desc = "goto definition"})
vim.keymap.set("n", "K", function() vim.lsp.buf.hover() end, {})
vim.keymap.set("n", "[d", function() vim.diagnostic.goto_next() end, {desc = "goto next"})
vim.keymap.set("n", "]d", function() vim.diagnostic.goto_prev() end, {desc = "goto prev"})
vim.keymap.set("i", "<C-s>", function() vim.lsp.buf.signature_help() end)
vim.keymap.set("i", "<C-h>", function () vim.lsp.buf.hover() end, {})
-- term
vim.keymap.set("n", "<C-\\>", vim.cmd.ToggleTerm)
vim.keymap.set("t", "<C-\\>", vim.cmd.ToggleTerm)
vim.keymap.set("v", "<C-\\>", vim.cmd.ToggleTerm)
-- center
vim.keymap.set("n", "<C-d>", "<C-d>zz")
vim.keymap.set("n", "<C-u>", "<C-u>zz")
vim.keymap.set("n", "n", "nzzzv")
vim.keymap.set("n", "N", "Nzzzv")
-- visual move
vim.keymap.set("x", "K", ":move '<-2<CR>gv=gv")
vim.keymap.set("x", "J", ":move '>+1<CR>gv=gv")
-- me lazy
vim.keymap.set("i", "<C-c>", "<Esc>")
-- non char keybinds
vim.keymap.set("n", "<leader>f/", function ()
require("telescope.builtin").current_buffer_fuzzy_find(require("telescope.themes").get_dropdown {
winblend = 10,
previewer = false,
})
end, {desc = "fuzzy find"})
vim.keymap.set('n', '<leader>f?', require('telescope.builtin').oldfiles, { desc = 'Find recently opened files' })
vim.keymap.set("i", "<C-Space>f/", function ()
require("telescope.builtin").current_buffer_fuzzy_find(require("telescope.themes").get_dropdown {
winblend = 10,
previewer = false,
})
end, {desc = "fuzzy find"})
vim.keymap.set('i', '<C-Space>f?', require('telescope.builtin').oldfiles, { desc = 'Find recently opened files' })
for i = 9, 1, -1 do
vim.keymap.set("n", "<M-" .. i .. ">", function() require("harpoon"):list():select(i) end, {desc = ""})
vim.keymap.set("i", "<M-" .. i .. ">", function() require("harpoon"):list():select(i) end, {desc = ""})
vim.keymap.set("v", "<M-" .. i .. ">", function() require("harpoon"):list():select(i) end, {desc = ""})
end

358
lua/config/packages.lua Executable file
View file

@ -0,0 +1,358 @@
return {
{
"neovim/nvim-lspconfig",
dependencies = {
"williamboman/mason.nvim",
"williamboman/mason-lspconfig.nvim",
"j-hui/fidget.nvim",
"folke/neodev.nvim",
},
},
{
"ray-x/lsp_signature.nvim",
event = "BufRead",
config = function() require "lsp_signature".setup() end,
},
{
"hrsh7th/nvim-cmp",
dependencies = {
"hrsh7th/cmp-nvim-lsp",
"L3MON4D3/LuaSnip",
"saadparwaiz1/cmp_luasnip",
"hrsh7th/cmp-nvim-lua",
"hrsh7th/cmp-buffer",
"hrsh7th/cmp-path",
"rafamadriz/friendly-snippets"
},
},
{
"jay-babu/mason-null-ls.nvim",
event = { "BufReadPre", "BufNewFile" },
dependencies = {
"williamboman/mason.nvim",
"nvimtools/none-ls.nvim",
},
config = function()
end,
},
{
"nvimtools/none-ls.nvim"
},
{
"OXY2DEV/markview.nvim",
lazy = false,
},
-- syntax highlighting
{
"nvim-treesitter/nvim-treesitter",
build = ":TSUpdate"
},
'nvim-treesitter/nvim-treesitter-context',
{
"nvim-treesitter/nvim-treesitter-textobjects",
dependencies = { "nvim-treesitter" },
},
-- fzf Telescope
{
"nvim-telescope/telescope.nvim",
branch = "0.1.x",
dependencies = {
"nvim-lua/plenary.nvim"
}
},
{
"nvim-telescope/telescope-fzf-native.nvim",
build = "make",
},
-- debugging
"mfussenegger/nvim-dap",
"jay-babu/mason-nvim-dap.nvim",
{
"rcarriga/nvim-dap-ui",
tag = "v4.0.0",
dependencies = {
"mfussenegger/nvim-dap",
"nvim-neotest/nvim-nio"
},
},
{ "theHamsta/nvim-dap-virtual-text", opts = {} },
"nvim-telescope/telescope-dap.nvim",
-- git
"lewis6991/gitsigns.nvim",
"echasnovski/mini.nvim",
{ 'kazhala/close-buffers.nvim', config = true },
"editorconfig/editorconfig-vim",
{ "nacro90/numb.nvim", opts = {} },
{ "kylechui/nvim-surround", opts = {} },
{
"phaazon/hop.nvim",
event = "BufRead",
opts = {}
},
{
"ThePrimeagen/harpoon",
branch = "harpoon2",
dependencies = { "nvim-lua/plenary.nvim" },
init = function()
local harpoon = require("harpoon")
harpoon:setup()
end
},
-- misc editing
"lambdalisue/suda.vim",
"tpope/vim-sleuth",
"mbbill/undotree",
{ "windwp/nvim-autopairs", opts = {} },
{
"mg979/vim-visual-multi",
config = function()
vim.cmd([[
let g:VM_leader='<Space>m'
let g:VM_maps['Find Under'] = '<C-m>'
]])
end
},
{
"windwp/nvim-ts-autotag",
opts = {
filetypes = { 'html', 'javascript', 'typescript', 'javascriptreact', 'typescriptreact', 'svelte', 'vue', 'tsx', 'jsx', 'rescript', 'xml', 'php', 'markdown', 'astro', 'glimmer', 'handlebars', 'hbs', "rust" },
},
},
{
"kevinhwang91/nvim-bqf",
event = { "BufRead", "BufNew" },
opts = {
auto_enable = true,
preview = {
win_height = 12,
win_vheight = 12,
delay_syntax = 80,
border_chars = { "", "", "", "", "", "", "", "", "" },
},
func_map = {
vsplit = "",
ptogglemode = "z,",
stoggleup = "",
},
filter = {
fzf = {
action_for = { ["ctrl-s"] = "split" },
extra_opts = { "--bind", "ctrl-o:toggle-all", "--prompt", "> " },
},
},
}
},
"nvim-tree/nvim-web-devicons",
{
"lukas-reineke/indent-blankline.nvim",
init = function()
require("ibl").setup({
indent = {
tab_char = "",
char = "",
},
})
end
},
{
"folke/which-key.nvim",
config = function()
local wk = require("which-key")
wk.setup {
-- popup_mappings = {
-- scroll_down = "<C-j>",
-- scroll_up = "<C-k>",
-- },
-- window = {
-- border = "single",
-- },
}
end
},
"rebelot/heirline.nvim",
{
"akinsho/toggleterm.nvim",
version = "*",
opts = {
direction = "float",
float_opts = {
border = "curved"
},
}
},
{
"karb94/neoscroll.nvim",
event = "WinScrolled",
opts = {
mappings = { "<C-u>", "<C-d>", "<C-b>", "<C-f>", "<C-y>", "<C-e>", "zt", "zz", "zb" },
hide_cursor = true,
stop_eof = true,
use_local_scrolloff = false,
respect_scrolloff = false,
cursor_scrolls_alone = true,
easing_function = nil,
pre_hook = nil,
post_hook = nil,
}
},
{
"folke/todo-comments.nvim",
event = "BufRead",
},
{ 'numToStr/Comment.nvim', opts = {} },
{
"SmiteshP/nvim-navbuddy",
dependencies = {
"neovim/nvim-lspconfig",
"SmiteshP/nvim-navic",
"MunifTanjim/nui.nvim",
"numToStr/Comment.nvim",
"nvim-telescope/telescope.nvim"
},
opts = {
window = { border = "rounded", },
}
},
{
"gelguy/wilder.nvim",
config = function()
-- local wilder = require("wilder")
-- wilder.setup({
-- modes = {":", "/", "?"},
-- })
-- wilder.set_option("renderer", wilder.popupmenu_renderer({
-- pumblend = 50,
-- }))
vim.cmd('call wilder#setup({"modes": [":", "/", "?"]})')
vim.cmd(
'call wilder#set_option("renderer", wilder#popupmenu_renderer({"highlighter": wilder#basic_highlighter(), "left": [ " ", wilder#popupmenu_devicons(), ], "right": [ " ", wilder#popupmenu_scrollbar(), ], "pumblend": 20}))')
vim.cmd(
'call wilder#set_option("renderer", wilder#popupmenu_renderer(wilder#popupmenu_border_theme({"highlighter": wilder#basic_highlighter(), "min_width": "100%", "min_height": "50%", "reverse": 0, "highlights": {"border": "Normal",},"border": "rounded"})))')
end,
},
{
"nvim-neo-tree/neo-tree.nvim",
branch = "v2.x",
dependencies = {
"nvim-lua/plenary.nvim",
"nvim-tree/nvim-web-devicons",
"MunifTanjim/nui.nvim",
},
},
-- lenguage specific
-- scala
{
"scalameta/nvim-metals",
dependencies = {
"nvim-lua/plenary.nvim",
},
ft = { "scala", "sbt", "java" },
opts = function()
local metals_config = require("metals").bare_config()
metals_config.on_attach = function(client, bufnr)
-- your on_attach function
end
return metals_config
end,
config = function(self, metals_config)
local nvim_metals_group = vim.api.nvim_create_augroup("nvim-metals", { clear = true })
vim.api.nvim_create_autocmd("FileType", {
pattern = self.ft,
callback = function()
require("metals").initialize_or_attach(metals_config)
end,
group = nvim_metals_group,
})
end
},
-- org
{
"nvim-orgmode/orgmode",
lazy = false,
dependencies = {
"nvim-treesitter/nvim-treesitter",
"hrsh7th/nvim-cmp",
},
config = function()
require("orgmode").setup({})
require('nvim-treesitter.configs').setup({
ensure_installed = 'all',
ignore_install = { 'org' },
})
end
},
{
"akinsho/org-bullets.nvim"
},
-- f#
{ "ionide/Ionide-vim" },
-- go
{ "joerdav/templ.vim" },
{
"ray-x/go.nvim",
dependencies = { -- optional packages
"ray-x/guihua.lua",
"neovim/nvim-lspconfig",
"nvim-treesitter/nvim-treesitter",
},
config = function()
require("go").setup()
end,
event = { "CmdlineEnter" },
ft = { "go", 'gomod' },
build = ':lua require("go.install").update_all_sync()' -- if you need to install/update all binaries
},
-- csv
'cameron-wags/rainbow_csv.nvim',
-- rust
{
"saecki/crates.nvim",
tag = "v0.3.0",
dependencies = {
"nvim-lua/plenary.nvim"
},
},
{
'mrcjkb/rustaceanvim',
version = '^5',
lazy = false,
},
-- diff
{
"julienvincent/hunk.nvim",
cmd = { "DiffEditor" },
config = function()
require("hunk").setup()
end,
},
-- slint
{ "slint-ui/vim-slint" },
-- zig
"ziglang/zig.vim",
-- glsl
"tikhomirov/vim-glsl",
-- java
"mfussenegger/nvim-jdtls",
-- latex
"lervag/vimtex",
"let-def/texpresso.vim",
-- themes
"xiyaowong/transparent.nvim",
"savq/melange-nvim",
}

25
lua/config/pmstrap.lua Executable file
View file

@ -0,0 +1,25 @@
vim.g.mapleader = " "
vim.g.maplocalleader = " "
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
if not (vim.uv or vim.loop).fs_stat(lazypath) then
vim.fn.system({
"git",
"clone",
"--filter=blob:none",
"--branch=stable",
"https://github.com/folke/lazy.nvim.git",
lazypath
})
end
vim.opt.rtp:prepend(lazypath)
-- Setup lazy.nvim
require("lazy").setup("config.packages", {
defaults = {
lazy = false,
},
--install = { colorscheme = { "melange" } },
})

57
lua/config/sets.lua Executable file
View file

@ -0,0 +1,57 @@
-- numbers
vim.opt.number = true
vim.opt.relativenumber = true
-- tab && indent
vim.opt.tabstop = 4
vim.opt.softtabstop = 0
vim.opt.shiftwidth = 4
vim.opt.smartindent = true
vim.o.breakindent = true
vim.o.expandtab = true
-- lines
vim.opt.wrap = true
vim.opt.smarttab = true
vim.opt.list = true
vim.opt.listchars:append "eol:↴"
-- undo
vim.opt.undodir = os.getenv("HOME") .. "/.local/share/nvim/undofile"
vim.opt.undofile = true
-- search
vim.opt.hlsearch = false
vim.opt.incsearch = true
vim.o.ignorecase = true
vim.o.smartcase = true
-- colors
vim.opt.termguicolors = true
vim.cmd.colorscheme "melange"
vim.opt.cursorline = true
-- misc
vim.opt.swapfile = false
vim.opt.backup = false
vim.opt.scrolloff = 8
vim.opt.sidescrolloff = 8
vim.opt.signcolumn = "yes"
vim.opt.isfname:append("@-@")
vim.opt.updatetime = 50
vim.opt.timeoutlen = 300
vim.o.mouse = "a"
vim.opt.showmode = false
vim.g.have_nerd_font = true
vim.o.completeopt = "menuone,noselect"
-- vim.filetype.add({extension = {leaf = 'html'}})
vim.wo.foldmethod = "manual"
vim.opt.foldcolumn = "1"

15
lua/plugins/autopairs.lua Executable file
View file

@ -0,0 +1,15 @@
local npairs = require("nvim-autopairs")
local Rule = require("nvim-autopairs.rule")
npairs.setup({
check_ts = true,
ts_config = {
lua = { "string" },
javascript = { "template_string" },
},
enable_check_bracket_line = false,
ignored_next_char = "[%w%.]",
})
local ts_conds = require("nvim-autopairs.ts-conds")

44
lua/plugins/dap.lua Executable file
View file

@ -0,0 +1,44 @@
local dap = require("dap")
local dapui = require("dapui")
dapui.setup()
local sign = vim.fn.sign_define
sign("DapBreakpoint", { text = "", texthl = "DapBreakpoint", linehl = "", numhl = ""})
sign("DapBreakpointCondition", { text = "", texthl = "DapBreakpointCondition", linehl = "", numhl = ""})
sign("DapLogPoint", { text = "", texthl = "DapLogPoint", linehl = "", numhl = ""})
dap.listeners.after.event_initialized["dapui_config"] = function()
dapui.open()
end
dap.listeners.before.event_terminated["dapui_config"] = function()
dapui.close()
end
dap.listeners.before.event_exited["dapui_config"] = function()
dapui.close()
end
vim.api.nvim_create_user_command("DapUIFloat", function (at)
dapui.float_element(at.args)
end, {})
dap.configurations.scala = {
{
type = "scala",
request = "launch",
name = "RunOrTest",
metals = {
runType = "runOrTestFile",
--args = { "firstArg", "secondArg", "thirdArg" }, -- here just as an example
},
},
{
type = "scala",
request = "launch",
name = "Test Target",
metals = {
runType = "testTarget",
},
},
}

10
lua/plugins/git.lua Executable file
View file

@ -0,0 +1,10 @@
require('gitsigns').setup {
signs = {
add = { text = '+' },
change = { text = '~' },
delete = { text = '_' },
topdelete = { text = '' },
changedelete = { text = '~' },
},
}

11
lua/plugins/init.lua Executable file
View file

@ -0,0 +1,11 @@
require("plugins.autopairs")
require("plugins.dap")
require("plugins.git")
require("plugins.lsp")
require("plugins.mini")
require("plugins.neotree")
require("plugins.none-ls")
require("plugins.rust")
require("plugins.statusline")
require("plugins.telescope")
require("plugins.treesitter")

314
lua/plugins/lsp.lua Executable file
View file

@ -0,0 +1,314 @@
-- local ih = require("inlay-hints")
require('neodev').setup()
-- vim.lsp.ensure_installed({
-- "clangd",
-- "gopls",
-- "jdtls",
-- "eslint",
-- "tailwindcss",
-- "tsserver",
-- "cssmodules_ls",
-- "rome",
-- "jsonls",
-- "sumneko_lua",
-- "pylsp",
-- "rust_analyzer",
-- "stylelint_lsp",
-- })
local navic = require("nvim-navic")
navic.setup {
icons = {
File = "",
Module = "",
Namespace = "",
Package = "",
Class = "",
Method = "",
Property = "",
Field = "",
Constructor = "",
Enum = "",
Interface = "",
Function = "",
Variable = "",
Constant = "",
String = "",
Number = "",
Boolean = "",
Array = "",
Object = "",
Key = "",
Null = "",
EnumMember = "",
Struct = "",
Event = "",
Operator = "",
TypeParameter = "",
},
highlight = false,
separator = " > ",
depth_limit = 0,
depth_limit_indicator = "..",
safe_output = true
}
local augroup = vim.api.nvim_create_augroup("LspFormatting", {})
vim.lsp.inlay_hint.enable(true)
local on_attach = function(client, bufnr)
local nmap = function(keys, func, desc)
if desc then
desc = 'LSP: ' .. desc
end
vim.keymap.set('n', keys, func, { buffer = bufnr, desc = desc })
end
-- ih.on_attach(client, bufnr)
--require("lsp-inlayhints").on_attach(client, bufnr)
if client.server_capabilities.documentSymbolProvider then
navic.attach(client, bufnr)
require("nvim-navbuddy").attach(client, bufnr)
end
nmap('gr', require('telescope.builtin').lsp_references, '[G]oto [R]eferences')
nmap('gI', vim.lsp.buf.implementation, '[G]oto [I]mplementation')
nmap('<C-k>', vim.lsp.buf.signature_help, 'Signature Documentation')
-- Lesser used LSP functionality
nmap('gD', vim.lsp.buf.declaration, '[G]oto [D]eclaration')
-- Create a command `:Format` local to the LSP buffer
vim.api.nvim_buf_create_user_command(bufnr, 'Format', function(_)
vim.lsp.buf.format()
end, { desc = 'Format current buffer with LSP' })
-- format on save autocmd
if client.supports_method("textDocument/formatting") then
vim.api.nvim_clear_autocmds({ group = augroup, buffer = bufnr })
vim.api.nvim_create_autocmd("BufWritePre", {
group = augroup,
buffer = bufnr,
callback = function()
-- on 0.8, you should use vim.lsp.buf.format({ bufnr = bufnr }) instead
-- on later neovim version, you should use vim.lsp.buf.format({ async = false }) instead
-- vim.lsp.buf.formatting_sync()
--vim.lsp.buf.format({async = false, bufnr = bufnr, filter = function(client) return client.name == "null-ls" end})
vim.lsp.buf.format({ async = false, bufnr = bufnr })
end,
})
end
end
local servers = {
-- sumneko_lua = {
-- Lua = {
-- workspace = { checkThirdParty = false },
-- telemetry = { enable = false },
-- },
-- },
}
local capabilities = vim.lsp.protocol.make_client_capabilities()
capabilities = require('cmp_nvim_lsp').default_capabilities(capabilities)
capabilities.offsetEncoding = { "utf-16" } -- fix copilot
require('mason').setup()
require("mason-nvim-dap").setup({
automatic_installation = true,
handlers = {
function(config)
require("mason-nvim-dap").default_setup(config)
end
}
})
local mason_lspconfig = require 'mason-lspconfig'
mason_lspconfig.setup {
ensure_installed = vim.tbl_keys(servers),
}
mason_lspconfig.setup_handlers {
function(server_name)
require('lspconfig')[server_name].setup {
capabilities = capabilities,
on_attach = on_attach,
settings = servers[server_name],
}
end,
}
vim.g.rustaceanvim = {
tools = {},
server = {
on_attach = on_attach,
default_settings = {
["rust-analyzer"] = {
cargo = {
features = "all"
},
inlayHints = {
closyreCaptureHints = {
enable = true,
},
},
check = {
command = "clippy",
features = "all",
},
imports = {
preferPrelude = true,
}
}
},
},
dap = {
},
}
-- require("lspconfig").rust_analyzer.setup{
-- capabilities = capabilities,
-- on_attach = on_attach,
-- settings = {
-- -- ["rust-analyzer"] = {
-- cargo = {
-- features = "all"
-- },
-- inlayHints = {
-- closyreCaptureHints = {
-- enable = true,
-- },
-- },
-- check = {
-- command = "clippy",
-- features = "all",
-- },
-- imports = {
-- preferPrelude = true,
-- }
-- -- },
-- },
-- }
require("lspconfig").zls.setup {
cmd = { "zls" },
on_attach = on_attach,
}
require("lspconfig").tailwindcss.setup {
filetypes = {
"astro", "astro-markdown", "clojure", "django-html", "htmldjango", "edge", "eelixir", "elixir", "ejs", "erb", "eruby", "gohtml", "haml", "handlebars", "hbs", "html", "html-eex", "heex", "jade", "leaf", "liquid", "markdown", "mdx", "mustache", "njk", "nunjucks", "php", "razor", "slim", "twig", "css", "less", "postcss", "sass", "scss", "stylus", "sugarss", "javascript", "javascriptreact", "reason", "rescript", "typescript", "typescriptreact", "vue", "svelte",
"rust", "fsharp",
},
init_options = {
userLanguages = {
rust = "html",
fsharp = "html",
},
},
root_dir = require("lspconfig").util.root_pattern("tailwind.config.cjs", "tailwind.config.mjs", "tailwind.config.js", "tailwind.config.ts"),
settings = {
tailwindCSS = {
--files = {exclude = ""},
classAttributes = { "class", "className", "class:list", "classList", "ngClass", "classes" },
lint = {
cssConflict = "warning",
invalidApply = "error",
invalidConfigPath = "error",
invalidScreen = "error",
invalidTailwindDirective = "error",
invalidVariant = "error",
recommendedVariantOrder = "warning"
},
validate = true
}
}
}
require("lspconfig").gleam.setup({})
-- lspinfo
require('fidget').setup()
local cmp_autopairs = require('nvim-autopairs.completion.cmp')
local cmp = require 'cmp'
-- local luasnip = require 'luasnip'
cmp.setup {
-- snippet = {
-- expand = function(args)
-- luasnip.lsp_expand(args.body)
-- end,
-- },
mapping = cmp.mapping.preset.insert {
-- ["<C-y>"] = cmp.mapping.confirm({ slelect = true}),
["<C-Space><C-Space>"] = cmp.mapping.complete({}),
['<C-d>'] = cmp.mapping.scroll_docs(-4),
['<C-f>'] = cmp.mapping.scroll_docs(4),
['<CR>'] = cmp.mapping.confirm {
behavior = cmp.ConfirmBehavior.Replace,
select = true,
},
['<Tab>'] = cmp.mapping(function(fallback)
if cmp.visible() then
cmp.select_next_item()
-- elseif luasnip.expand_or_jumpable() then
-- luasnip.expand_or_jump()
else
fallback()
end
end, { 'i', 's' }),
['<S-Tab>'] = cmp.mapping(function(fallback)
if cmp.visible() then
cmp.select_prev_item()
-- elseif luasnip.jumpable(-1) then
-- luasnip.jump(-1)
else
fallback()
end
end, { 'i', 's' }),
},
sources = {
{ name = 'nvim_lsp' },
-- { name = 'luasnip' },
{ name = "crates" },
{ name = 'orgmode' },
},
}
-- cmp.event:on(
-- 'confirm_done',
-- cmp_autopairs.on_confirm_done()
-- )
cmp.event:on(
'confirm_done',
vim.schedule_wrap(function(completion_item)
-- Get the current buffer's filetype
local filetype = vim.api.nvim_buf_get_option(0, 'filetype')
-- Check if the filetype is NOT fsharp
if filetype ~= 'fsharp' then
-- If it's not fsharp, let cmp-autopairs handle it
cmp_autopairs.on_confirm_done()(completion_item)
else
-- If it is fsharp, do nothing (skip the cmp-autopairs action)
end
end)
)
vim.diagnostic.config({
signs = true,
underline = true,
update_in_insert = true,
virtual_text = true,
})
-- require("luasnip.loaders.from_vscode").lazy_load()
-- require("luasnip.loaders.from_snipmate").lazy_load()

10
lua/plugins/mini.lua Executable file
View file

@ -0,0 +1,10 @@
require("mini.ai").setup({
custom_textobjects = {
[','] = require("mini.ai").gen_spec.pair(',', ',', {}),
['9'] = require("mini.ai").gen_spec.pair('(', ',', {}),
['0'] = require("mini.ai").gen_spec.pair(',', ')', {}),
}
})
require("mini.jump").setup({})
require("mini.sessions").setup({autowrite = false, directory = '~/.local/share/nvim/sessions'})

7
lua/plugins/neotree.lua Executable file
View file

@ -0,0 +1,7 @@
require("neo-tree").setup({
source_selector = {
winbar = true,
statusline = false,
},
})

15
lua/plugins/none-ls.lua Executable file
View file

@ -0,0 +1,15 @@
local null_ls = require("null-ls")
null_ls.setup({
sources = {
null_ls.builtins.formatting.stylua,
null_ls.builtins.formatting.shfmt,
null_ls.builtins.formatting.prettier,
null_ls.builtins.code_actions.gitsigns,
--null_ls.builtins.completion.luasnip,
null_ls.builtins.diagnostics.buf,
null_ls.builtins.formatting.biome,
null_ls.builtins.formatting.buf,
null_ls.builtins.formatting.fantomas,
null_ls.builtins.formatting.swift_format,
}
})

140
lua/plugins/rust.lua Executable file
View file

@ -0,0 +1,140 @@
require("crates").setup {
smart_insert = true,
insert_closing_quote = true,
avoid_prerelease = true,
autoload = true,
autoupdate = true,
loading_indicator = true,
date_format = "%Y-%m-%d",
thousands_separator = ".",
notification_title = "Crates",
--curl_args = { "-sL", "--retry", "1" },
disable_invalid_feature_diagnostic = false,
text = {
loading = "  Loading",
version = "  %s",
prerelease = "  %s",
yanked = "  %s",
nomatch = "  No match",
upgrade = "  %s",
error = "  Error fetching crate",
},
highlight = {
loading = "CratesNvimLoading",
version = "CratesNvimVersion",
prerelease = "CratesNvimPreRelease",
yanked = "CratesNvimYanked",
nomatch = "CratesNvimNoMatch",
upgrade = "CratesNvimUpgrade",
error = "CratesNvimError",
},
popup = {
autofocus = false,
copy_register = '"',
style = "minimal",
border = "none",
show_version_date = false,
show_dependency_version = true,
max_height = 30,
min_width = 20,
padding = 1,
text = {
title = " %s",
pill_left = "",
pill_right = "",
description = "%s",
created_label = " created ",
created = "%s",
updated_label = " updated ",
updated = "%s",
downloads_label = " downloads ",
downloads = "%s",
homepage_label = " homepage ",
homepage = "%s",
repository_label = " repository ",
repository = "%s",
documentation_label = " documentation ",
documentation = "%s",
crates_io_label = " crates.io ",
crates_io = "%s",
categories_label = " categories ",
keywords_label = " keywords ",
version = " %s",
prerelease = " %s",
yanked = " %s",
version_date = " %s",
feature = " %s",
enabled = " %s",
transitive = " %s",
normal_dependencies_title = " Dependencies",
build_dependencies_title = " Build dependencies",
dev_dependencies_title = " Dev dependencies",
dependency = " %s",
optional = " %s",
dependency_version = " %s",
loading = "",
},
highlight = {
title = "CratesNvimPopupTitle",
pill_text = "CratesNvimPopupPillText",
pill_border = "CratesNvimPopupPillBorder",
description = "CratesNvimPopupDescription",
created_label = "CratesNvimPopupLabel",
created = "CratesNvimPopupValue",
updated_label = "CratesNvimPopupLabel",
updated = "CratesNvimPopupValue",
downloads_label = "CratesNvimPopupLabel",
downloads = "CratesNvimPopupValue",
homepage_label = "CratesNvimPopupLabel",
homepage = "CratesNvimPopupUrl",
repository_label = "CratesNvimPopupLabel",
repository = "CratesNvimPopupUrl",
documentation_label = "CratesNvimPopupLabel",
documentation = "CratesNvimPopupUrl",
crates_io_label = "CratesNvimPopupLabel",
crates_io = "CratesNvimPopupUrl",
categories_label = "CratesNvimPopupLabel",
keywords_label = "CratesNvimPopupLabel",
version = "CratesNvimPopupVersion",
prerelease = "CratesNvimPopupPreRelease",
yanked = "CratesNvimPopupYanked",
version_date = "CratesNvimPopupVersionDate",
feature = "CratesNvimPopupFeature",
enabled = "CratesNvimPopupEnabled",
transitive = "CratesNvimPopupTransitive",
normal_dependencies_title = "CratesNvimPopupNormalDependenciesTitle",
build_dependencies_title = "CratesNvimPopupBuildDependenciesTitle",
dev_dependencies_title = "CratesNvimPopupDevDependenciesTitle",
dependency = "CratesNvimPopupDependency",
optional = "CratesNvimPopupOptional",
dependency_version = "CratesNvimPopupDependencyVersion",
loading = "CratesNvimPopupLoading",
},
keys = {
hide = { "q", "<esc>" },
open_url = { "<cr>" },
select = { "<cr>" },
select_alt = { "s" },
toggle_feature = { "<cr>" },
copy_value = { "yy" },
goto_item = { "gd", "K", "<C-LeftMouse>" },
jump_forward = { "<c-i>" },
jump_back = { "<c-o>", "<C-RightMouse>" },
},
},
src = {
insert_closing_quote = true,
text = {
prerelease = "  pre-release ",
yanked = "  yanked ",
},
coq = {
enabled = false,
name = "Crates",
},
},
null_ls = {
enabled = false,
name = "Crates",
},
}

773
lua/plugins/statusline.lua Executable file
View file

@ -0,0 +1,773 @@
local conditions = require("heirline.conditions")
local utils = require("heirline.utils")
local colors = {
bright_bg = utils.get_highlight("Folded").bg,
bright_fg = utils.get_highlight("Folded").fg,
dark_bg = "#0c0c0c",
red = utils.get_highlight("DiagnosticError").fg,
dark_red = utils.get_highlight("DiffDelete").bg,
green = utils.get_highlight("String").fg,
blue = utils.get_highlight("Function").fg,
gray = utils.get_highlight("NonText").fg,
orange = utils.get_highlight("Constant").fg,
purple = utils.get_highlight("Statement").fg,
cyan = utils.get_highlight("Special").fg,
diag_warn = utils.get_highlight("DiagnosticWarn").fg,
diag_error = utils.get_highlight("DiagnosticError").fg,
diag_hint = utils.get_highlight("DiagnosticHint").fg,
diag_info = utils.get_highlight("DiagnosticInfo").fg,
git_del = utils.get_highlight("DiffRemoved").fg,
git_add = utils.get_highlight("DiffAdd").fg,
git_change = utils.get_highlight("DiffChanged").fg,
}
require("heirline").load_colors(colors)
local ViMode = {
-- get vim current mode, this information will be required by the provider
-- and the highlight functions, so we compute it only once per component
-- evaluation and store it as a component attribute
init = function(self)
self.mode = vim.fn.mode(1) -- :h mode()
end,
-- Now we define some dictionaries to map the output of mode() to the
-- corresponding string and color. We can put these into `static` to compute
-- them at initialisation time.
static = {
mode_names = { -- change the strings if you like it vvvvverbose!
n = "N",
no = "N?",
nov = "N?",
noV = "N?",
["no\22"] = "N?",
niI = "Ni",
niR = "Nr",
niV = "Nv",
nt = "Nt",
v = "V",
vs = "Vs",
V = "V_",
Vs = "Vs",
["\22"] = "^V",
["\22s"] = "^V",
s = "S",
S = "S_",
["\19"] = "^S",
i = "I",
ic = "Ic",
ix = "Ix",
R = "R",
Rc = "Rc",
Rx = "Rx",
Rv = "Rv",
Rvc = "Rv",
Rvx = "Rv",
c = "C",
cv = "Ex",
r = "...",
rm = "M",
["r?"] = "?",
["!"] = "!",
t = "T",
},
mode_colors = {
n = "red" ,
i = "green",
v = "cyan",
V = "cyan",
["\22"] = "cyan",
c = "orange",
s = "purple",
S = "purple",
["\19"] = "purple",
R = "orange",
r = "orange",
["!"] = "red",
t = "red",
}
},
-- We can now access the value of mode() that, by now, would have been
-- computed by `init()` and use it to index our strings dictionary.
-- note how `static` fields become just regular attributes once the
-- component is instantiated.
-- To be extra meticulous, we can also add some vim statusline syntax to
-- control the padding and make sure our string is always at least 2
-- characters long. Plus a nice Icon.
provider = function(self)
--return "  %2("..self.mode_names[self.mode].."%)"
if self ~= nil then
if self.mode ~= nil then
local mn = self.mode_names[self.mode]
if mn ~= nil then
return "%2("..self.mode_names[self.mode].."%)"
end
end
end
--return "%2("..self.mode_names[self.mode].."%)"
end,
-- Same goes for the highlight. Now the foreground will change according to the current mode.
hl = function(self)
local mode = self.mode:sub(1, 1) -- get only the first mode character
return { fg = self.mode_colors[mode], bold = true, }
end,
-- Re-evaluate the component only on ModeChanged event!
-- Also allorws the statusline to be re-evaluated when entering operator-pending mode
update = {
"ModeChanged",
pattern = "*:*",
callback = vim.schedule_wrap(function()
vim.cmd("redrawstatus")
end),
},
}
ViMode = utils.surround({ "", "" }, "dark_bg", { ViMode})
local FileNameBlock = {
-- let's first set up some attributes needed by this component and it's children
init = function(self)
self.filename = vim.api.nvim_buf_get_name(0)
end,
}
-- We can now define some children separately and add them later
local FileIcon = {
init = function(self)
local filename = self.filename
local extension = vim.fn.fnamemodify(filename, ":e")
self.icon, self.icon_color = require("nvim-web-devicons").get_icon_color(filename, extension, { default = true })
end,
provider = function(self)
return self.icon and (self.icon .. " ")
end,
hl = function(self)
return { fg = self.icon_color }
end
}
local FileName = {
provider = function(self)
-- first, trim the pattern relative to the current directory. For other
-- options, see :h filename-modifers
local filename = vim.fn.fnamemodify(self.filename, ":.")
if filename == "" then return "[No Name]" end
-- now, if the filename would occupy more than 1/4th of the available
-- space, we trim the file path to its initials
-- See Flexible Components section below for dynamic truncation
if not conditions.width_percent_below(#filename, 0.25) then
filename = vim.fn.pathshorten(filename)
end
return filename
end,
hl = { fg = utils.get_highlight("Directory").fg },
}
local FileFlags = {
{
condition = function()
return vim.bo.modified
end,
provider = "[+]",
hl = { fg = "green" },
},
{
condition = function()
return not vim.bo.modifiable or vim.bo.readonly
end,
provider = "",
hl = { fg = "orange" },
},
}
-- Now, let's say that we want the filename color to change if the buffer is
-- modified. Of course, we could do that directly using the FileName.hl field,
-- but we'll see how easy it is to alter existing components using a "modifier"
-- component
local FileNameModifer = {
hl = function()
if vim.bo.modified then
-- use `force` because we need to override the child's hl foreground
return { fg = "cyan", bold = true, force=true }
end
end,
}
-- let's add the children to our FileNameBlock component
FileNameBlock = utils.insert(FileNameBlock,
FileIcon,
utils.insert(FileNameModifer, FileName), -- a new table where FileName is a child of FileNameModifier
FileFlags,
{ provider = '%<'} -- this means that the statusline is cut here when there's not enough space
)
local FileSize = {
provider = function()
-- stackoverflow, compute human readable file size
local suffix = { 'b', 'k', 'M', 'G', 'T', 'P', 'E' }
local fsize = vim.fn.getfsize(vim.api.nvim_buf_get_name(0))
fsize = (fsize < 0 and 0) or fsize
if fsize < 1024 then
return fsize..suffix[1]
end
local i = math.floor((math.log(fsize) / math.log(1024)))
return string.format("%.2g%s", fsize / math.pow(1024, i), suffix[i + 1])
end
}
local FileLastModified = {
-- did you know? Vim is full of functions!
provider = function()
local ftime = vim.fn.getftime(vim.api.nvim_buf_get_name(0))
return (ftime > 0) and os.date("%c", ftime)
end
}
FileNameBlock = utils.surround({ "", "" }, "dark_bg", FileNameBlock)
-- We're getting minimalists here!
local Ruler = {
-- %l = current line number
-- %L = number of lines in the buffer
-- %c = column number
-- %P = percentage through file of displayed window
provider = "%7(%l/%3L%):%2c %P",
}
Ruler = utils.surround({ "", "" }, "dark_bg", Ruler)
-- I take no credits for this! :lion:
local ScrollBar ={
static = {
sbar = { '', '', '', '', '', '', '', '' }
-- Another variant, because the more choice the better.
-- sbar = { '🭶', '🭷', '🭸', '🭹', '🭺', '🭻' }
},
provider = function(self)
local curr_line = vim.api.nvim_win_get_cursor(0)[1]
local lines = vim.api.nvim_buf_line_count(0)
local i = math.floor((curr_line - 1) / lines * #self.sbar) + 1
return string.rep(self.sbar[i], 2)
end,
hl = { fg = "blue", bg = "dark_bg" },
}
local LSPActive = {
condition = conditions.lsp_attached,
update = {'LspAttach', 'LspDetach'},
-- You can keep it simple,
-- provider = " [LSP]",
-- Or complicate things a bit and get the servers names
provider = function()
local names = {}
for i, server in pairs(vim.lsp.get_active_clients({ bufnr = 0 })) do
table.insert(names, server.name)
end
return " [" .. table.concat(names, " ") .. "]"
end,
hl = { fg = "green", bold = true },
}
LSPActive = utils.surround({ "", "" }, "dark_bg", LSPActive)
-- Full nerd (with icon colors and clickable elements)!
-- works in multi window, but does not support flexible components (yet ...)
local Navic = {
condition = function() return require("nvim-navic").is_available() end,
static = {
-- create a type highlight map
type_hl = {
File = "Directory",
Module = "@include",
Namespace = "@namespace",
Package = "@include",
Class = "@structure",
Method = "@method",
Property = "@property",
Field = "@field",
Constructor = "@constructor",
Enum = "@field",
Interface = "@type",
Function = "@function",
Variable = "@variable",
Constant = "@constant",
String = "@string",
Number = "@number",
Boolean = "@boolean",
Array = "@field",
Object = "@type",
Key = "@keyword",
Null = "@comment",
EnumMember = "@field",
Struct = "@structure",
Event = "@keyword",
Operator = "@operator",
TypeParameter = "@type",
},
-- bit operation dark magic, see below...
enc = function(line, col, winnr)
return bit.bor(bit.lshift(line, 16), bit.lshift(col, 6), winnr)
end,
-- line: 16 bit (65535); col: 10 bit (1023); winnr: 6 bit (63)
dec = function(c)
local line = bit.rshift(c, 16)
local col = bit.band(bit.rshift(c, 6), 1023)
local winnr = bit.band(c, 63)
return line, col, winnr
end
},
init = function(self)
local data = require("nvim-navic").get_data() or {}
local children = {}
-- create a child for each level
for i, d in ipairs(data) do
-- encode line and column numbers into a single integer
local pos = self.enc(d.scope.start.line, d.scope.start.character, self.winnr)
local child = {
{
provider = d.icon,
hl = self.type_hl[d.type],
},
{
-- escape `%`s (elixir) and buggy default separators
provider = d.name:gsub("%%", "%%%%"):gsub("%s*->%s*", ''),
-- highlight icon only or location name as well
-- hl = self.type_hl[d.type],
on_click = {
-- pass the encoded position through minwid
minwid = pos,
callback = function(_, minwid)
-- decode
local line, col, winnr = self.dec(minwid)
vim.api.nvim_win_set_cursor(vim.fn.win_getid(winnr), {line, col})
end,
name = "heirline_navic",
},
},
}
-- add a separator only if needed
if #data > 1 and i < #data then
table.insert(child, {
provider = " > ",
hl = { fg = 'bright_fg' },
})
end
table.insert(children, child)
end
-- instantiate the new child, overwriting the previous one
self.child = self:new(children, 1)
end,
-- evaluate the children containing navic components
provider = function(self)
return self.child:eval()
end,
hl = { fg = "gray" },
update = 'CursorMoved'
}
-- local Diagnostics = {
--
-- condition = conditions.has_diagnostics,
--
-- static = {
-- error_icon = vim.fn.sign_getdefined("DiagnosticSignError")[1].text,
-- warn_icon = vim.fn.sign_getdefined("DiagnosticSignWarn")[1].text,
-- info_icon = vim.fn.sign_getdefined("DiagnosticSignInfo")[1].text,
-- hint_icon = vim.fn.sign_getdefined("DiagnosticSignHint")[1].text,
-- },
--
-- init = function(self)
-- self.errors = #vim.diagnostic.get(0, { severity = vim.diagnostic.severity.ERROR })
-- self.warnings = #vim.diagnostic.get(0, { severity = vim.diagnostic.severity.WARN })
-- self.hints = #vim.diagnostic.get(0, { severity = vim.diagnostic.severity.HINT })
-- self.info = #vim.diagnostic.get(0, { severity = vim.diagnostic.severity.INFO })
-- end,
--
-- update = { "DiagnosticChanged", "BufEnter" },
--
-- {
-- provider = function(self)
-- -- 0 is just another output, we can decide to print it or not!
-- return self.errors > 0 and (self.error_icon .. self.errors .. " ")
-- end,
-- hl = { fg = "diag_error" },
-- },
-- {
-- provider = function(self)
-- return self.warnings > 0 and (self.warn_icon .. self.warnings .. " ")
-- end,
-- hl = { fg = "diag_warn" },
-- },
-- {
-- provider = function(self)
-- return self.info > 0 and (self.info_icon .. self.info .. " ")
-- end,
-- hl = { fg = "diag_info" },
-- },
-- {
-- provider = function(self)
-- return self.hints > 0 and (self.hint_icon .. self.hints)
-- end,
-- hl = { fg = "diag_hint" },
-- },
-- }
local Git = {
condition = conditions.is_git_repo,
init = function(self)
self.status_dict = vim.b.gitsigns_status_dict
self.has_changes = self.status_dict.added ~= 0 or self.status_dict.removed ~= 0 or self.status_dict.changed ~= 0
end,
hl = { fg = "orange" },
{ -- git branch name
provider = function(self)
return "" .. self.status_dict.head
end,
hl = { bold = true }
},
-- You could handle delimiters, icons and counts similar to Diagnostics
{
condition = function(self)
return self.has_changes
end,
provider = "("
},
{
provider = function(self)
local count = self.status_dict.added or 0
return count > 0 and ("+" .. count)
end,
hl = { fg = "green" },
},
{
provider = function(self)
local count = self.status_dict.removed or 0
return count > 0 and ("-" .. count)
end,
hl = { fg = "red" },
},
{
provider = function(self)
local count = self.status_dict.changed or 0
return count > 0 and ("~" .. count)
end,
hl = { fg = "blue" },
},
{
condition = function(self)
return self.has_changes
end,
provider = ")",
},
}
local DAPMessages = {
condition = function()
local session = require("dap").session()
return session ~= nil
end,
provider = function()
return "" .. require("dap").status()
end,
hl = "Debug"
-- see Click-it! section for clickable actions
}
local WorkDir = {
provider = function()
local icon = (vim.fn.haslocaldir(0) == 1 and "l" or "g") .. " " .. ""
local cwd = vim.fn.getcwd(0)
cwd = vim.fn.fnamemodify(cwd, ":~")
if not conditions.width_percent_below(#cwd, 0.25) then
cwd = vim.fn.pathshorten(cwd)
end
local trail = cwd:sub(-1) == '/' and '' or "/"
return icon .. cwd .. trail
end,
hl = { fg = "blue", bold = true },
}
local TerminalName = {
-- we could add a condition to check that buftype == 'terminal'
-- or we could do that later (see #conditional-statuslines below)
provider = function()
local tname, _ = vim.api.nvim_buf_get_name(0):gsub(".*:", "")
return "" .. tname
end,
hl = { fg = "blue", bold = true },
}
-------------------------------------------------------------------------------------
local TablineBufnr = {
provider = function(self)
return tostring(self.bufnr) .. ". "
end,
hl = "Comment",
}
-- we redefine the filename component, as we probably only want the tail and not the relative path
local TablineFileName = {
provider = function(self)
-- self.filename will be defined later, just keep looking at the example!
local filename = self.filename
filename = filename == "" and "[No Name]" or vim.fn.fnamemodify(filename, ":t")
return filename
end,
hl = function(self)
return { bold = self.is_active or self.is_visible, italic = true }
end,
}
-- this looks exactly like the FileFlags component that we saw in
-- #crash-course-part-ii-filename-and-friends, but we are indexing the bufnr explicitly
-- also, we are adding a nice icon for terminal buffers.
local TablineFileFlags = {
{
condition = function(self)
return vim.api.nvim_buf_get_option(self.bufnr, "modified")
end,
provider = "[+]",
hl = { fg = "green" },
},
{
condition = function(self)
return not vim.api.nvim_buf_get_option(self.bufnr, "modifiable")
or vim.api.nvim_buf_get_option(self.bufnr, "readonly")
end,
provider = function(self)
if vim.api.nvim_buf_get_option(self.bufnr, "buftype") == "terminal" then
return ""
else
return ""
end
end,
hl = { fg = "orange" },
},
}
-- Here the filename block finally comes together
local TablineFileNameBlock = {
init = function(self)
self.filename = vim.api.nvim_buf_get_name(self.bufnr)
end,
hl = function(self)
if self.is_active then
return "TabLineSel"
-- why not?
-- elseif not vim.api.nvim_buf_is_loaded(self.bufnr) then
-- return { fg = "gray" }
else
return "TabLine"
end
end,
on_click = {
callback = function(_, minwid, _, button)
if (button == "m") then -- close on mouse middle click
vim.schedule(function()
vim.api.nvim_buf_delete(minwid, { force = false })
end)
else
vim.api.nvim_win_set_buf(0, minwid)
end
end,
minwid = function(self)
return self.bufnr
end,
name = "heirline_tabline_buffer_callback",
},
TablineBufnr,
FileIcon, -- turns out the version defined in #crash-course-part-ii-filename-and-friends can be reutilized as is here!
TablineFileName,
TablineFileFlags,
}
-- a nice "x" button to close the buffer
local TablineCloseButton = {
condition = function(self)
return not vim.api.nvim_buf_get_option(self.bufnr, "modified")
end,
{ provider = " " },
{
provider = "",
hl = { fg = "gray" },
on_click = {
callback = function(_, minwid)
vim.schedule(function()
vim.api.nvim_buf_delete(minwid, { force = false })
end)
vim.cmd.redrawtabline()
end,
minwid = function(self)
return self.bufnr
end,
name = "heirline_tabline_close_buffer_callback",
},
},
}
-- The final touch!
local TablineBufferBlock = utils.surround({ "", "" }, function(self)
if self.is_active then
return utils.get_highlight("TabLineSel").bg
else
return utils.get_highlight("TabLine").bg
end
end, { TablineFileNameBlock, TablineCloseButton })
-- and here we go
local BufferLine = utils.make_buflist(
TablineBufferBlock,
{ provider = "", hl = { fg = "gray" } }, -- left truncation, optional (defaults to "<")
{ provider = "", hl = { fg = "gray" } } -- right trunctation, also optional (defaults to ...... yep, ">")
-- by the way, open a lot of buffers and try clicking them ;)
)
local Tabpage = {
provider = function(self)
return "%" .. self.tabnr .. "T " .. self.tabpage .. " %T"
end,
hl = function(self)
if not self.is_active then
return "TabLine"
else
return "TabLineSel"
end
end,
}
local TabpageClose = {
provider = "%999X  %X",
hl = "TabLine",
}
local TabPages = {
-- only show this component if there's 2 or more tabpages
condition = function()
return #vim.api.nvim_list_tabpages() >= 2
end,
{ provider = "%=" },
utils.make_tablist(Tabpage),
TabpageClose,
}
local TabLineOffset = {
condition = function(self)
local win = vim.api.nvim_tabpage_list_wins(0)[1]
local bufnr = vim.api.nvim_win_get_buf(win)
self.winid = win
if vim.bo[bufnr].filetype == "NvimTree" then
self.title = "NvimTree"
return true
elseif vim.bo[bufnr].filetype == "neo-tree" then
self.title = "NeoTree"
return true
elseif vim.bo[bufnr].filetype == "nerdtree" then
self.title = "NerdTree"
return true
end
-- elseif vim.bo[bufnr].filetype == "TagBar" then
-- ...
end,
provider = function(self)
local title = self.title
local width = vim.api.nvim_win_get_width(self.winid)
local pad = math.ceil((width - #title) / 2)
return string.rep(" ", pad) .. title .. string.rep(" ", pad)
end,
hl = function(self)
if vim.api.nvim_get_current_win() == self.winid then
return "TablineSel"
else
return "Tabline"
end
end,
}
local Align = { provider = "%=" }
local Space = { provider = " " }
local StatusLine = {
ViMode, Space, FileNameBlock, Space, Git, Space, Align,
DAPMessages, Align,
LSPActive, Space, Ruler
}
local WinBar = {
utils.surround({"", ""}, "#000000", Navic)
}
local TabBar = {
TabLineOffset, BufferLine, TabPages,
}
require("heirline").setup({
statusline = StatusLine,
tabline = TabBar,
winbar = WinBar,
opts = {
disable_winbar_cb = function(args)
local buf = args.buf
local buftype = vim.tbl_contains({ "prompt", "nofile", "help", "quickfix" }, vim.bo[buf].buftype)
local filetype = vim.tbl_contains({ "gitcommit", "fugitive", "Trouble", "packer", "neo-tree", "nerdtree", "NvimTree" }, vim.bo[buf].filetype)
return buftype or filetype
end,
}
})
vim.o.showtabline = 2
vim.o.laststatus = 3
-- require("lualine").setup {
-- options = {
-- icons_enabled = true,
-- theme = "auto",
-- component_separators = { left = "", right = ""},
-- section_separators = { left = "", right = ""},
-- disabled_filetypes = {
-- statusline = {},
-- winbar = {},
-- },
-- ignore_focus = {},
-- always_divide_middle = true,
-- globalstatus = false,
-- refresh = {
-- statusline = 1000,
-- tabline = 1000,
-- winbar = 1000,
-- }
-- },
-- sections = {
-- lualine_a = {"mode"},
-- lualine_b = {"diff"},
-- lualine_c = {"branch"},
-- lualine_x = {"location"},
-- lualine_y = {"progress"},
-- lualine_z = {"filename"}
-- },
-- inactive_sections = {
-- lualine_a = {},
-- lualine_b = {},
-- lualine_c = {"filename"},
-- lualine_x = {"location"},
-- lualine_y = {},
-- lualine_z = {}
-- },
-- tabline = {},
-- winbar = {},
-- inactive_winbar = {},
-- extensions = {}
-- }

17
lua/plugins/telescope.lua Executable file
View file

@ -0,0 +1,17 @@
require "telescope".setup {
extensions = {
workspaces = {
keep_insert = true,
}
},
pickers = {
colorscheme = {
enable_preview = true
}
}
}
pcall(require("telescope").load_extension, "fzf")
require("telescope").load_extension("dap")
require("telescope").load_extension("harpoon")

55
lua/plugins/treesitter.lua Executable file
View file

@ -0,0 +1,55 @@
vim.filetype.add({extension = {wgsl = "wgsl"}})
require"nvim-treesitter.configs".setup {
ensure_installed = { "wgsl", "bash", "cmake", "cpp", "dockerfile", "gitignore", "glsl", "go", "graphql", "html", "java", "javascript", "json5", "kotlin", "markdown", "python", "rasi", "regex", "c", "lua", "rust", "scss", "sql", "sxhkdrc", "toml", "typescript", "yaml" },
sync_install = false,
auto_install = true,
indent = { enable = true, disable = { 'python' } },
highlight = {
enable = true,
},
incremental_selection = {
enable = true,
keymaps = {
init_selection = "gnn",
node_incremental = "grn",
scope_incremental = "grc",
node_decremental = "grm",
},
},
-- rainbow = {
-- enable = true,
-- -- list of languages you want to disable the plugin for
-- disable = {},
-- -- Which query to use for finding delimiters
-- query = 'rainbow-parens',
-- -- Highlight the entire buffer all at once
-- strategy = require('ts-rainbow').strategy.global,
-- },
}
local treesitter_parser_config = require "nvim-treesitter.parsers".get_parser_configs()
treesitter_parser_config.templ = {
install_info = {
url = "https://github.com/vrischmann/tree-sitter-templ.git",
files = {"src/parser.c", "src/scanner.c"},
branch = "master",
},
}
treesitter_parser_config.just = {
install_info = {
url = "https://github.com/IndianBoy42/tree-sitter-just", -- local path or git repo
files = { "src/parser.c", "src/scanner.cc" },
branch = "main",
-- use_makefile = true -- this may be necessary on MacOS (try if you see compiler errors)
},
maintainers = { "@IndianBoy42" },
}
vim.treesitter.language.register('templ', 'templ')
vim.wo.foldmethod = "manual"
vim.wo.foldexpr = "nvim_treesitter#foldexpr()"
vim.o.foldlevelstart = 99 -- do not close folds when a buffer is opened