Newest version of dotfiles with Ghostty, Fish, kickstart vim and zsh updates

This commit is contained in:
2025-06-04 16:33:07 +02:00
parent ee2a3a74ca
commit 778d39833c
132 changed files with 6177 additions and 5317 deletions

Binary file not shown.

View File

@@ -1,54 +0,0 @@
-- Autocmds are automatically loaded on the VeryLazy event
-- Docs: https://www.lazyvim.org/configuration/general
-- Default autocmds that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/autocmds.lua
-- Add any additional autocmds here
local function find_python_executable()
if vim.env.VIRTUAL_ENV then
local paths = vim.fn.glob(vim.env.VIRTUAL_ENV .. "/**/bin/python", true, true)
local executable_path = table.concat(paths, ", ")
if executable_path ~= "" then
vim.api.nvim_echo({ { "Using path for python: " .. executable_path, "None" } }, false, {})
return executable_path
end
elseif vim.fn.filereadable(".venv/bin/python") == 1 then
local executable_path = vim.fn.expand(".venv/bin/python")
vim.api.nvim_echo({ { "Using path for python: " .. executable_path, "None" } }, false, {})
return executable_path
end
vim.api.nvim_echo({ { "No python executable found (see autocmds.lua)", "WarningMsg" } }, false, {})
end
vim.api.nvim_create_autocmd("FileType", {
pattern = { "python" },
callback = function()
vim.g.python3_host_prog = find_python_executable() -- python executable
vim.opt_local.colorcolumn = "72,88" -- Ruler at column number
vim.opt_local.tabstop = 4 -- Number of spaces tabs count for
vim.opt_local.shiftwidth = 4 -- Size of an indent
end,
})
vim.api.nvim_create_autocmd("FileType", {
pattern = { "rust" },
callback = function()
vim.opt_local.colorcolumn = "79" -- Ruler at column number
vim.opt_local.tabstop = 4 -- Number of spaces tabs count for
vim.opt_local.shiftwidth = 4 -- Size of an indent
end,
})
vim.api.nvim_create_autocmd("FileType", {
pattern = "typescript",
callback = function()
vim.opt_local.colorcolumn = "79" -- Ruler at column number
vim.opt_local.tabstop = 4
vim.opt_local.shiftwidth = 4
end,
})
-- see lint.lua
-- vim.api.nvim_create_autocmd({ "InsertLeave", "BufWritePost" }, {
-- callback = function()
-- require("lint").try_lint()
-- end,
-- })

View File

@@ -1,22 +0,0 @@
-- Keymaps are automatically loaded on the VeryLazy event
-- Docs: https://www.lazyvim.org/configuration/general
-- Default keymaps that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/keymaps.lua
-- Add any additional keymaps here
local Util = require("lazyvim.util")
local function map(mode, lhs, rhs, opts)
local keys = require("lazy.core.handler").handlers.keys
---@cast keys LazyKeysHandler
-- do not create the keymap if a lazy keys handler exists
if not keys.active[keys.parse({ lhs, mode = mode }).id] then
opts = opts or {}
opts.silent = opts.silent ~= false
if opts.remap and not vim.g.vscode then
opts.remap = nil
end
vim.keymap.set(mode, lhs, rhs, opts)
end
end
map("n", "<leader>bo", "<cmd>%bd|e#<cr>", { desc = "Close all buffers but the current one" })

View File

@@ -1,62 +0,0 @@
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
if not vim.loop.fs_stat(lazypath) then
-- bootstrap lazy.nvim
-- stylua: ignore
-- "git"
vim.fn.system({"git", "clone", "--filter=blob:none", "https://github.com/folke/lazy.nvim.git", "--branch=stable", lazypath })
end
vim.opt.rtp:prepend(vim.env.LAZY or lazypath)
require("lazy").setup({
spec = {
-- add LazyVim and import its plugins
{ "LazyVim/LazyVim", import = "lazyvim.plugins" },
-- import any extras modules here
-- { import = "lazyvim.plugins.extras.lang.docker" },
{ import = "lazyvim.plugins.extras.lang.json" },
{ import = "lazyvim.plugins.extras.lang.rust" },
-- { import = "lazyvim.plugins.extras.lang.tailwind" },
{ import = "lazyvim.plugins.extras.lang.terraform" },
{ import = "lazyvim.plugins.extras.lang.typescript" },
-- { import = "lazyvim.plugins.extras.formatting.prettier" },
{ import = "lazyvim.plugins.extras.linting.eslint" },
{ import = "lazyvim.plugins.extras.test.core" },
{ import = "lazyvim.plugins.extras.dap.core" },
{ import = "lazyvim.plugins.extras.dap.nlua" },
-- { import = "lazyvim.plugins.extras.coding.copilot" }, -- see ai.lua instead
{ import = "lazyvim.plugins.extras.coding.yanky" },
{ import = "lazyvim.plugins.extras.util.mini-hipatterns" },
{ import = "lazyvim.plugins.extras.vscode" },
{ import = "lazyvim.plugins.extras.editor.mini-files" },
{ import = "lazyvim.plugins.extras.coding.luasnip" },
{ import = "lazyvim.plugins.extras.lsp.none-ls" },
{ import = "plugins" },
},
defaults = {
-- By default, only LazyVim plugins will be lazy-loaded. Your custom plugins will load during startup.
-- If you know what you're doing, you can set this to `true` to have all your custom plugins lazy-loaded by default.
lazy = false,
-- It's recommended to leave version=false for now, since a lot the plugin that support versioning,
-- have outdated releases, which may break your Neovim install.
version = false, -- always use the latest git commit
-- version = "*", -- try installing the latest stable version for plugins that support semver
},
install = { colorscheme = { "catppuccin" } },
checker = { enabled = true }, -- automatically check for plugin updates
performance = {
rtp = {
-- disable some rtp plugins
disabled_plugins = {
"gzip",
-- "matchit",
-- "matchparen",
-- "netrwPlugin",
"tarPlugin",
"tohtml",
"tutor",
"zipPlugin",
},
},
},
})

View File

@@ -1,12 +0,0 @@
-- Options are automatically loaded before lazy.nvim startup
-- Docs: https://www.lazyvim.org/configuration/general
-- Default options that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/options.lua
-- Add any additional options here
vim.opt.listchars = "tab:▸ ,trail:·,nbsp:␣,extends:,precedes:" -- show symbols for whitespace
vim.opt.relativenumber = false -- relative line numbers
vim.opt.scrolloff = 10 -- keep 20 lines above and below the cursor
vim.opt.tabstop = 2
vim.opt.shiftwidth = 2
vim.opt.expandtab = true
vim.opt.smartindent = true

View File

@@ -0,0 +1,94 @@
-- Explorer-Konfiguration (Neo-tree)
require('neo-tree').setup({
close_if_last_window = false,
popup_border_style = "rounded",
enable_git_status = true,
enable_diagnostics = true,
sources = {
"filesystem",
"buffers",
"git_status",
},
source_selector = {
winbar = true,
content_layout = "center",
tabs_layout = "equal",
},
filesystem = {
filtered_items = {
visible = true,
hide_dotfiles = false,
hide_gitignored = false,
},
follow_current_file = {
enabled = true,
},
use_libuv_file_watcher = true,
},
window = {
position = "right",
width = 35,
mapping_options = {
noremap = true,
nowait = true,
},
},
git_status = {
symbols = {
added = "",
modified = "",
deleted = "",
renamed = "",
untracked = "",
ignored = "",
unstaged = "",
staged = "",
conflict = "",
},
},
})
-- Harpoon (Schnellwechsel zwischen Dateien)
local mark = require("harpoon.mark")
local ui = require("harpoon.ui")
vim.keymap.set("n", "<leader>a", mark.add_file, { desc = "Datei zu Harpoon hinzufügen" })
vim.keymap.set("n", "<leader>h", ui.toggle_quick_menu, { desc = "Harpoon-Menü anzeigen" })
-- Schnellzugriff auf die ersten 4 Dateien
vim.keymap.set("n", "<leader>1", function() ui.nav_file(1) end, { desc = "Harpoon Datei 1" })
vim.keymap.set("n", "<leader>2", function() ui.nav_file(2) end, { desc = "Harpoon Datei 2" })
vim.keymap.set("n", "<leader>3", function() ui.nav_file(3) end, { desc = "Harpoon Datei 3" })
vim.keymap.set("n", "<leader>4", function() ui.nav_file(4) end, { desc = "Harpoon Datei 4" })
-- Tastenkombinationen für Neo-tree
vim.keymap.set("n", "<leader>e", ":Neotree toggle right<CR>", { silent = true, desc = "Explorer öffnen" })
-- Git Signs
require('gitsigns').setup({
signs = {
add = { text = '+' },
change = { text = '~' },
delete = { text = '_' },
topdelete = { text = '' },
changedelete = { text = '~' },
untracked = { text = '' },
},
signcolumn = true,
on_attach = function(bufnr)
local gs = package.loaded.gitsigns
-- Navigation zwischen Änderungen
vim.keymap.set('n', ']c', function()
if vim.wo.diff then return ']c' end
vim.schedule(function() gs.next_hunk() end)
return '<Ignore>'
end, { expr = true, buffer = bufnr })
vim.keymap.set('n', '[c', function()
if vim.wo.diff then return '[c' end
vim.schedule(function() gs.prev_hunk() end)
return '<Ignore>'
end, { expr = true, buffer = bufnr })
end
})

View File

@@ -0,0 +1,183 @@
-- ~/.config/nvim/lua/custom/hydra.lua
local Hydra = require('hydra')
-- Fenster-Management Hydra
Hydra({
name = 'Fenster',
mode = 'n',
body = '<C-w>',
heads = {
-- Navigieren zwischen Fenstern
{ 'h', '<C-w>h', { desc = 'links' } },
{ 'j', '<C-w>j', { desc = 'unten' } },
{ 'k', '<C-w>k', { desc = 'oben' } },
{ 'l', '<C-w>l', { desc = 'rechts' } },
-- Fenster verschieben
{ 'H', '<C-w>H', { desc = 'nach links verschieben' } },
{ 'J', '<C-w>J', { desc = 'nach unten verschieben' } },
{ 'K', '<C-w>K', { desc = 'nach oben verschieben' } },
{ 'L', '<C-w>L', { desc = 'nach rechts verschieben' } },
-- Größe ändern
{ '>', '<C-w>>', { desc = 'breiter' } },
{ '<', '<C-w><', { desc = 'schmaler' } },
{ '+', '<C-w>+', { desc = 'höher' } },
{ '-', '<C-w>-', { desc = 'niedriger' } },
{ '=', '<C-w>=', { desc = 'gleiche Größe' } },
-- Neue Fenster
{ 's', '<C-w>s', { desc = 'horizontal teilen' } },
{ 'v', '<C-w>v', { desc = 'vertikal teilen' } },
{ 'n', '<cmd>new<CR>', { desc = 'neue horizontale Teilung' } },
{ 'N', '<cmd>vnew<CR>', { desc = 'neue vertikale Teilung' } },
-- Fenster schließen
{ 'c', '<C-w>c', { desc = 'schließen' } },
{ 'o', '<C-w>o', { desc = 'andere schließen' } },
-- Beenden
{ 'q', nil, { desc = 'beenden', exit = true } },
{ '<Esc>', nil, { desc = 'beenden', exit = true } },
}
})
-- Harpoon Hydra
Hydra({
name = 'Harpoon',
mode = 'n',
body = '<leader>h',
heads = {
{ 'a', function() require("harpoon.mark").add_file() end, { desc = 'Datei hinzufügen' } },
{ 'h', function() require("harpoon.ui").toggle_quick_menu() end, { desc = 'Menü anzeigen' } },
{ 'n', function() require("harpoon.ui").nav_next() end, { desc = 'Nächste Datei' } },
{ 'p', function() require("harpoon.ui").nav_prev() end, { desc = 'Vorherige Datei' } },
{ '1', function() require("harpoon.ui").nav_file(1) end, { desc = 'Datei 1' } },
{ '2', function() require("harpoon.ui").nav_file(2) end, { desc = 'Datei 2' } },
{ '3', function() require("harpoon.ui").nav_file(3) end, { desc = 'Datei 3' } },
{ '4', function() require("harpoon.ui").nav_file(4) end, { desc = 'Datei 4' } },
{ '5', function() require("harpoon.ui").nav_file(5) end, { desc = 'Datei 5' } },
{ 'q', nil, { desc = 'beenden', exit = true } },
{ '<Esc>', nil, { desc = 'beenden', exit = true } },
}
})
-- Git-Operationen Hydra (funktioniert mit Gitsigns und Neogit)
Hydra({
name = 'Git',
mode = 'n',
body = '<leader>g',
heads = {
-- Gitsigns
{ 'h', function() require("gitsigns").preview_hunk() end, { desc = 'Änderung anzeigen' } },
{ 'n', function() require("gitsigns").next_hunk() end, { desc = 'Nächste Änderung' } },
{ 'p', function() require("gitsigns").prev_hunk() end, { desc = 'Vorherige Änderung' } },
{ 's', function() require("gitsigns").stage_hunk() end, { desc = 'Änderung stagen' } },
{ 'u', function() require("gitsigns").undo_stage_hunk() end, { desc = 'Stagen rückgängig' } },
{ 'r', function() require("gitsigns").reset_hunk() end, { desc = 'Änderung zurücksetzen' } },
-- Neogit
{ 'g', function() require("neogit").open() end, { desc = 'Neogit öffnen', exit = true } },
{ 'c', function() require("neogit").open({ "commit" }) end, { desc = 'Commit', exit = true } },
{ 'P', function() require("neogit").open({ "push" }) end, { desc = 'Push', exit = true } },
{ 'l', function() require("neogit").open({ "log" }) end, { desc = 'Log', exit = true } },
-- Diffview
{ 'd', '<cmd>DiffviewOpen<CR>', { desc = 'Diff anzeigen', exit = true } },
-- Beenden
{ 'q', nil, { desc = 'beenden', exit = true } },
{ '<Esc>', nil, { desc = 'beenden', exit = true } },
}
})
-- Neo-tree Hydra
Hydra({
name = 'Explorer',
mode = 'n',
body = '<leader>E',
heads = {
{ 'e', '<cmd>Neotree toggle right<CR>', { desc = 'Explorer ein/aus', exit = true } },
{ 'f', '<cmd>Neotree focus filesystem right<CR>', { desc = 'Dateisystem', exit = true } },
{ 'b', '<cmd>Neotree focus buffers right<CR>', { desc = 'Buffer', exit = true } },
{ 'g', '<cmd>Neotree focus git_status right<CR>', { desc = 'Git-Status', exit = true } },
-- Leap Integration
{ 's', function()
-- Öffne Neo-tree und springe mit Leap
vim.cmd('Neotree focus filesystem right')
-- Eine kleine Verzögerung, damit Neo-tree Zeit hat, zu öffnen
vim.defer_fn(function()
require('leap').leap { target_windows = { vim.api.nvim_get_current_win() } }
end, 100)
end,
{ desc = 'Suchen mit Leap', exit = true }
},
-- Beenden
{ 'q', nil, { desc = 'beenden', exit = true } },
{ '<Esc>', nil, { desc = 'beenden', exit = true } },
}
})
-- LSP und Coding-Hydra
Hydra({
name = 'Code',
mode = 'n',
body = '<leader>c',
heads = {
-- LSP Aktionen
{ 'a', vim.lsp.buf.code_action, { desc = 'Code-Aktion' } },
{ 'r', vim.lsp.buf.rename, { desc = 'Umbenennen' } },
{ 'd', vim.lsp.buf.definition, { desc = 'Definition', exit = true } },
{ 'D', vim.lsp.buf.declaration, { desc = 'Deklaration', exit = true } },
{ 'i', vim.lsp.buf.implementation, { desc = 'Implementation', exit = true } },
{ 'h', vim.lsp.buf.hover, { desc = 'Hover Info' } },
{ 'f', function() require('conform').format() end, { desc = 'Formatieren' } },
-- Diagnostik
{ 'n', vim.diagnostic.goto_next, { desc = 'Nächster Fehler' } },
{ 'p', vim.diagnostic.goto_prev, { desc = 'Vorheriger Fehler' } },
{ 'l', vim.diagnostic.open_float, { desc = 'Fehler anzeigen' } },
-- Beenden
{ 'q', nil, { desc = 'beenden', exit = true } },
{ '<Esc>', nil, { desc = 'beenden', exit = true } },
}
})
-- Erweiterte Navigation mit Leap und Harpoon
Hydra({
name = 'Navigation',
mode = 'n',
body = '<leader>n',
heads = {
-- Leap
{ 'f', function() require('leap').leap { target_windows = { vim.api.nvim_get_current_win() } } end,
{ desc = 'Leap vorwärts', exit = true } },
{ 'F', function() require('leap').leap { backward = true, target_windows = { vim.api.nvim_get_current_win() } } end,
{ desc = 'Leap rückwärts', exit = true } },
{ 'w', function()
require('leap').leap { target_windows = vim.tbl_filter(
function(win) return vim.api.nvim_win_get_config(win).relative == '' end,
vim.api.nvim_list_wins()
) }
end, { desc = 'Leap alle Fenster', exit = true } },
-- Harpoon
{ 'h', function() require("harpoon.ui").toggle_quick_menu() end, { desc = 'Harpoon-Menü', exit = true } },
{ '1', function() require("harpoon.ui").nav_file(1) end, { desc = 'Harpoon 1', exit = true } },
{ '2', function() require("harpoon.ui").nav_file(2) end, { desc = 'Harpoon 2', exit = true } },
{ '3', function() require("harpoon.ui").nav_file(3) end, { desc = 'Harpoon 3', exit = true } },
{ '4', function() require("harpoon.ui").nav_file(4) end, { desc = 'Harpoon 4', exit = true } },
-- Dateiexploration
{ 'e', '<cmd>Neotree toggle right<CR>', { desc = 'Explorer', exit = true } },
{ 't', '<cmd>Telescope find_files<CR>', { desc = 'Dateien suchen', exit = true } },
{ 'g', '<cmd>Telescope live_grep<CR>', { desc = 'Inhalte suchen', exit = true } },
-- Beenden
{ 'q', nil, { desc = 'beenden', exit = true } },
{ '<Esc>', nil, { desc = 'beenden', exit = true } },
}
})

View File

@@ -0,0 +1,280 @@
-- LSP und Treesitter Konfiguration
local capabilities = vim.lsp.protocol.make_client_capabilities()
capabilities = require('cmp_nvim_lsp').default_capabilities(capabilities)
-- Mason für einfache LSP-Installation
require('mason').setup()
require('mason-lspconfig').setup({
ensure_installed = {
-- Sprachen
'lua_ls', -- Lua
'pyright', -- Python
'ruff', -- Python Linter
'ts_ls', -- TypeScript/JavaScript
-- 'vue-language-server', -- Vue
'intelephense', -- PHP
'html', -- HTML
'cssls', -- CSS
'yamlls', -- YAML
'jsonls', -- JSON
'docker_compose_language_service', -- Docker Compose
'dockerls', -- Dockerfile
'gopls',
},
})
-- LSP-Server konfigurieren
local lspconfig = require('lspconfig')
-- Lua
lspconfig.lua_ls.setup({
capabilities = capabilities,
})
-- TypeScript (inkl. React)
lspconfig.ts_ls.setup({
capabilities = capabilities,
})
-- Typescript-Tools für bessere TS/JS Unterstützung
require("typescript-tools").setup({
settings = {
-- Für NestJS, React und andere TS-Frameworks
tsserver_file_preferences = {
importModuleSpecifierPreference = "relative",
},
},
})
-- Python
lspconfig.pyright.setup({
capabilities = capabilities,
})
-- PHP/Symfony
lspconfig.intelephense.setup({
capabilities = capabilities,
settings = {
intelephense = {
stubs = {
"apache", "bcmath", "bz2", "calendar", "Core", "curl", "date", "dba",
"dom", "fileinfo", "filter", "ftp", "gd", "gettext", "hash", "iconv",
"imap", "intl", "json", "ldap", "libxml", "mbstring", "mysqli", "mysqlnd",
"oci8", "openssl", "pcntl", "pcre", "PDO", "pdo_mysql", "pdo_pgsql",
"pdo_sqlite", "pgsql", "Phar", "posix", "pspell", "readline", "Reflection",
"session", "shmop", "SimpleXML", "snmp", "soap", "sockets", "sodium", "SPL",
"sqlite3", "standard", "superglobals", "sysvmsg", "sysvsem", "sysvshm",
"tidy", "tokenizer", "xml", "xmlreader", "xmlrpc", "xmlwriter", "xsl", "Zend OPcache",
"zip", "zlib", "wordpress", "symfony"
},
},
},
})
-- Go
lspconfig.gopls.setup({
capabilities = capabilities,
settings = {
gopls = {
analyses = {
unusedparams = true,
},
staticcheck = true,
gofumpt = true, -- Strengere Formatierung als gofmt
usePlaceholders = true,
completeUnimported = true,
experimentalPostfixCompletions = true,
},
},
})
-- YAML mit Schema-Unterstützung
lspconfig.yamlls.setup({
capabilities = capabilities,
settings = {
yaml = {
schemas = require('schemastore').yaml.schemas(),
},
},
})
-- JSON mit Schema-Unterstützung
lspconfig.jsonls.setup({
capabilities = capabilities,
settings = {
json = {
schemas = require('schemastore').json.schemas(),
validate = { enable = true },
},
},
})
-- Treesitter-Konfiguration für Syntax-Highlighting
require('nvim-treesitter.configs').setup({
ensure_installed = {
"lua", "vim", "vimdoc", "json", "yaml", "html", "css",
"javascript", "typescript", "tsx", "php", "python", "vue",
"dockerfile", "markdown", "regex", "bash", "go",
},
highlight = { enable = true },
indent = { enable = true },
})
-- Autocomplete-Konfiguration
local cmp = require('cmp')
local luasnip = require('luasnip')
cmp.setup({
snippet = {
expand = function(args)
luasnip.lsp_expand(args.body)
end,
},
window = {
completion = cmp.config.window.bordered(),
documentation = cmp.config.window.bordered(),
},
mapping = cmp.mapping.preset.insert({
['<C-d>'] = cmp.mapping.scroll_docs(-4),
['<C-f>'] = cmp.mapping.scroll_docs(4),
['<C-Space>'] = cmp.mapping.complete(),
['<CR>'] = cmp.mapping.confirm({ 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 = cmp.config.sources({
{ name = 'nvim_lsp' },
{ name = 'luasnip' },
{ name = 'buffer' },
{ name = 'path' },
}),
})
-- Einfache benutzerdefinierte Snippets (optional)
-- Hier ein Beispiel für ein paar einfache Snippets
local snippets_path = vim.fn.stdpath("config") .. "/snippets"
if vim.fn.isdirectory(snippets_path) == 0 then
vim.fn.mkdir(snippets_path, "p")
end
-- Füge einige nützliche Snippets hinzu
luasnip.add_snippets("python", {
luasnip.snippet("def", {
luasnip.text_node("def "),
luasnip.insert_node(1, "function_name"),
luasnip.text_node("("),
luasnip.insert_node(2, "args"),
luasnip.text_node("):\n\t"),
luasnip.insert_node(0),
}),
})
luasnip.add_snippets("typescript", {
luasnip.snippet("fn", {
luasnip.text_node("function "),
luasnip.insert_node(1, "name"),
luasnip.text_node("("),
luasnip.insert_node(2, "params"),
luasnip.text_node(") {\n\t"),
luasnip.insert_node(0),
luasnip.text_node("\n}"),
}),
})
luasnip.add_snippets("go", {
luasnip.snippet("func", {
luasnip.text_node("func "),
luasnip.insert_node(1, "name"),
luasnip.text_node("("),
luasnip.insert_node(2, "params"),
luasnip.text_node(") "),
luasnip.insert_node(3, "returnType"),
luasnip.text_node(" {\n\t"),
luasnip.insert_node(0),
luasnip.text_node("\n}"),
}),
luasnip.snippet("if", {
luasnip.text_node("if "),
luasnip.insert_node(1, "condition"),
luasnip.text_node(" {\n\t"),
luasnip.insert_node(0),
luasnip.text_node("\n}"),
}),
})
-- Code-Formatierung
require("conform").setup({
formatters_by_ft = {
javascript = { "prettier" },
typescript = { "prettier" },
javascriptreact = { "prettier" },
typescriptreact = { "prettier" },
vue = { "prettier" },
json = { "prettier" },
yaml = { "prettier" },
html = { "prettier" },
css = { "prettier" },
php = { "php_cs_fixer" },
python = { "black" },
lua = { "stylua" },
go = { "gofumpt" },
},
})
-- Formatierung beim Speichern
vim.api.nvim_create_autocmd("BufWritePre", {
pattern = "*",
callback = function()
require("conform").format({ async = false, lsp_fallback = true })
end,
})
-- Einstellungen für die Diagnostik (Fehleranzeige)
vim.diagnostic.config({
virtual_text = {
format = function(diagnostic)
local icon = ""
if diagnostic.severity == vim.diagnostic.severity.ERROR then
icon = ""
elseif diagnostic.severity == vim.diagnostic.severity.WARN then
icon = ""
elseif diagnostic.severity == vim.diagnostic.severity.INFO then
icon = " "
elseif diagnostic.severity == vim.diagnostic.severity.HINT then
icon = ""
end
return icon .. diagnostic.message
end
},
signs = true, -- Symbole in der Randspalte anzeigen
underline = true, -- Problematischen Code unterstreichen
update_in_insert = false,
severity_sort = true,
float = {
border = "rounded",
source = "always",
},
})
-- Tastenkombinationen für Diagnostik
vim.keymap.set('n', '<leader>cd', vim.diagnostic.open_float, { desc = 'Fehlerdetails anzeigen' })
vim.keymap.set('n', '[d', vim.diagnostic.goto_prev, { desc = 'Vorheriger Fehler' })
vim.keymap.set('n', ']d', vim.diagnostic.goto_next, { desc = 'Nächster Fehler' })
vim.keymap.set('n', '<leader>q', vim.diagnostic.setloclist, { desc = 'Fehler in Liste anzeigen' })

View File

@@ -0,0 +1,449 @@
return {
-- Fuzzy Finder
{
'nvim-telescope/telescope.nvim',
dependencies = {
'nvim-lua/plenary.nvim',
'nvim-telescope/telescope-fzf-native.nvim',
},
},
-- LSP & Completion
{
'neovim/nvim-lspconfig',
dependencies = {
'williamboman/mason.nvim',
'williamboman/mason-lspconfig.nvim',
'hrsh7th/nvim-cmp',
'hrsh7th/cmp-nvim-lsp',
'hrsh7th/cmp-buffer',
'hrsh7th/cmp-path',
'L3MON4D3/LuaSnip',
'saadparwaiz1/cmp_luasnip',
'j-hui/fidget.nvim',
},
config = function()
-- Nichts hier definieren - wir laden die Konfiguration aus der lsp.lua
require("custom.lsp")
end,
},
-- Snipped
{
"rafamadriz/friendly-snippets",
dependencies = {
"L3MON4D3/LuaSnip",
},
config = function()
require("luasnip.loaders.from_vscode").lazy_load()
end,
},
-- Syntax Highlighting
{
'nvim-treesitter/nvim-treesitter',
build = ':TSUpdate',
dependencies = {
'nvim-treesitter/nvim-treesitter-textobjects',
},
},
-- Datei-Explorer
{
"nvim-neo-tree/neo-tree.nvim",
dependencies = {
"nvim-lua/plenary.nvim",
"nvim-tree/nvim-web-devicons", -- Für Datei-Icons
"MunifTanjim/nui.nvim", -- UI-Komponenten-Bibliothek
},
config = function()
-- Standardkonfiguration deaktivieren
vim.g.neo_tree_remove_legacy_commands = 1
require("neo-tree").setup({
close_if_last_window = false, -- Neovim schließen, wenn nur noch Neo-tree offen ist?
popup_border_style = "rounded", -- Stil für Popup-Fenster
enable_git_status = true, -- Git-Integration aktivieren
enable_diagnostics = true, -- Zeige Diagnostik-Informationen (LSP)
default_component_configs = {
container = {
enable_character_fade = true, -- Schöne Übergänge bei Textlängen
width = "100%",
right_padding = 0,
},
indent = {
indent_size = 2,
padding = 1,
with_markers = true,
indent_marker = "",
last_indent_marker = "",
highlight = "NeoTreeIndentMarker",
with_expanders = true, -- Klick-/Tastatur-expandierbare Ordner
expander_collapsed = "",
expander_expanded = "",
expander_highlight = "NeoTreeExpander",
},
icon = {
folder_closed = "",
folder_open = "",
folder_empty = "󰜌",
default = "*",
highlight = "NeoTreeFileIcon"
},
modified = {
symbol = "[+]",
highlight = "NeoTreeModified",
},
name = {
trailing_slash = false,
use_git_status_colors = true,
highlight = "NeoTreeFileName",
},
git_status = {
symbols = {
-- Symbole für Git-Status
added = "", -- oder "✚"
modified = "", -- oder "✹"
deleted = "", -- oder ""
renamed = "", -- oder ""
untracked = "", -- oder "✭"
ignored = "", -- oder "◌"
unstaged = "", -- oder "✗"
staged = "", -- oder "✓"
conflict = "", -- oder "≠"
}
},
},
-- Welche Ansichten verfügbar sein sollen
source_selector = {
winbar = true, -- Zeige Auswahl in der Fensterleiste
statusline = false, -- Nicht in der Statuszeile anzeigen
content_layout = "center",
sources = { -- Verfügbare Quellen
{ source = "filesystem", display_name = " Dateien " },
{ source = "buffers", display_name = " Buffer " },
{ source = "git_status", display_name = " Git " },
},
tabs_layout = "equal", -- "equal", "focus"
},
-- Dateisystemansicht
filesystem = {
filtered_items = {
visible = true, -- Gefilterte Elemente mit anderen Stil anzeigen
hide_dotfiles = false, -- Versteckte Dateien anzeigen
hide_gitignored = false, -- Git-ignorierte Dateien anzeigen
hide_hidden = false, -- Versteckte Dateien unter Windows anzeigen
hide_by_name = {
-- "node_modules", -- Auskommentieren, um zu verstecken
},
hide_by_pattern = {
-- "*.meta", -- Auskommentieren, um zu verstecken
},
always_show = { -- Immer anzeigen, auch wenn sie sonst gefiltert würden
".gitignored",
".env",
},
never_show = { -- Dateien, die immer ausgeblendet werden
".DS_Store",
},
never_show_by_pattern = { -- Regex-Muster für Dateien, die nie angezeigt werden
-- ".*\\.meta$",
},
},
follow_current_file = {
enabled = true, -- Hervorheben der aktuellen Datei im Explorer
leave_dirs_open = false, -- Ordner öffnen, wenn Datei darin
},
group_empty_dirs = false, -- Leere Unterordner unter Elternordner gruppieren
hijack_netrw_behavior = "open_default", -- Netrw ersetzen
use_libuv_file_watcher = true, -- Effiziente Dateiüberwachung (bemerkt Änderungen)
window = {
mappings = {
-- Tastenkombinationen im Dateisystem-Fenster
["<space>"] = "none", -- Space für andere Funktionen freigeben
["<2-LeftMouse>"] = "open",
["<cr>"] = "open",
["S"] = "open_split", -- In horizontales Split öffnen
["s"] = "open_vsplit", -- In vertikales Split öffnen
["t"] = "open_tabnew", -- In neuem Tab öffnen
["C"] = "close_node", -- Knoten schließen
["z"] = "close_all_nodes", -- Alle Knoten schließen
["R"] = "refresh", -- Aktualisieren
["a"] = {
"add", -- Neue Datei/Ordner erstellen
config = {
show_path =
"relative" -- Relativen Pfad beim Erstellen anzeigen
}
},
["d"] = "delete", -- Löschen
["r"] = "rename", -- Umbenennen
["y"] = "copy_to_clipboard", -- In Zwischenablage kopieren
["x"] = "cut_to_clipboard", -- Ausschneiden
["p"] = "paste_from_clipboard", -- Einfügen
["c"] = "copy", -- Kopieren (mit Ziel-Auswahl)
["m"] = "move", -- Verschieben (mit Ziel-Auswahl)
["/"] = "filter_on_submit", -- Filtern
["<esc>"] = "clear_filter", -- Filter löschen
["f"] = "filter_on_submit", -- Filtern (Alternative)
["<c-x>"] = "clear_filter", -- Filter löschen (Alternative)
["?"] = "show_help", -- Hilfe anzeigen
}
},
},
-- Buffer-Ansicht (Geöffnete Dateien)
buffers = {
follow_current_file = {
enabled = true, -- Aktuelle Datei hervorheben
},
group_empty_dirs = true, -- Leere Ordner gruppieren
show_unloaded = true, -- Auch nicht geladene Buffer anzeigen
},
-- Git-Status-Ansicht
git_status = {
window = {
mappings = {
["A"] = "git_add_all", -- Alle Änderungen stagen
["u"] = "git_unstage_file", -- Datei unstagen
["a"] = "git_add_file", -- Datei stagen
["r"] = "git_revert_file", -- Änderungen zurücksetzen
["c"] = "git_commit", -- Commit erstellen
["p"] = "git_push", -- Push
["gg"] = "git_commit_and_push", -- Commit und Push
}
}
},
-- Hauptfenster-Konfiguration
window = {
position = "right", -- Explorer auf der rechten Seite
width = 35, -- Breite des Explorers
mapping_options = {
noremap = true,
nowait = true,
},
mappings = {
["<space>"] = "none", -- Space für andere Funktionen freigeben
["<2-LeftMouse>"] = "open",
["<cr>"] = "open",
["S"] = "open_split",
["s"] = "open_vsplit",
["t"] = "open_tabnew",
["w"] = "open_with_window_picker", -- Mit Fensterauswahl öffnen
["C"] = "close_node",
["z"] = "close_all_nodes",
["R"] = "refresh",
["a"] = {
"add",
config = {
show_path = "relative"
}
},
["d"] = "delete",
["r"] = "rename",
["y"] = "copy_to_clipboard",
["x"] = "cut_to_clipboard",
["p"] = "paste_from_clipboard",
["c"] = "copy",
["m"] = "move",
["q"] = "close_window", -- Fenster schließen
["?"] = "show_help",
}
}
})
-- Tastenkombination zum Öffnen des Explorers
vim.keymap.set("n", "<leader>e", ":Neotree toggle right<CR>",
{ silent = true, desc = "Explorer ein/aus" })
-- Tastenkombination für Dateiansicht
vim.keymap.set("n", "<leader>ef", ":Neotree focus filesystem right<CR>",
{ silent = true, desc = "Datei-Explorer" })
-- Tastenkombination für Buffer-Liste
vim.keymap.set("n", "<leader>eb", ":Neotree focus buffers right<CR>",
{ silent = true, desc = "Buffer-Liste" })
-- Tastenkombination für Git-Status
vim.keymap.set("n", "<leader>eg", ":Neotree focus git_status right<CR>",
{ silent = true, desc = "Git-Status" })
end,
},
-- Schnellwechsel zwischen Dateien (wie Harpoon)
{
'ThePrimeagen/harpoon',
dependencies = {
'nvim-lua/plenary.nvim',
},
config = function()
-- Basiseinstellungen für Harpoon
require("harpoon").setup()
-- Einfache, direkte Keybindings
vim.keymap.set("n", "<leader>a", require("harpoon.mark").add_file, { desc = "Datei markieren" })
vim.keymap.set("n", "<leader>h", require("harpoon.ui").toggle_quick_menu,
{ desc = "Harpoon-Menü" })
vim.keymap.set("n", "<C-j>", function() require("harpoon.ui").nav_file(1) end)
vim.keymap.set("n", "<C-k>", function() require("harpoon.ui").nav_file(2) end)
vim.keymap.set("n", "<C-l>", function() require("harpoon.ui").nav_file(3) end)
vim.keymap.set("n", "<C-;>", function() require("harpoon.ui").nav_file(4) end)
end,
},
-- Git-Integration
{
'lewis6991/gitsigns.nvim',
config = true,
},
-- Formatierung
{
'stevearc/conform.nvim',
},
-- Framework-Unterstützung
-- PHP/Symfony
{
'phpactor/phpactor',
ft = 'php',
build = 'composer install --no-dev -o',
},
-- TypeScript/JavaScript/React/Vue/NestJS
{
'pmizio/typescript-tools.nvim',
dependencies = {
'nvim-lua/plenary.nvim',
'neovim/nvim-lspconfig',
},
config = function()
require("typescript-tools").setup({
settings = {
tsserver_file_preferences = {
importModuleSpecifierPreference = "relative",
},
},
})
end,
},
-- Vue.js
-- {
-- 'neovim/nvim-lspconfig',
-- opts = function(_, opts)
-- -- Füge Volar als Server hinzu
-- opts.servers = opts.servers or {}
-- opts.servers.volar = {
-- filetypes = { 'vue', 'typescript', 'javascript' }
-- }
-- end,
-- },
-- Playwright Testing
{
'mxsdev/nvim-dap',
dependencies = {
'rcarriga/nvim-dap-ui',
'mfussenegger/nvim-dap-python',
},
},
-- YAML und JSON Unterstützung
'b0o/schemastore.nvim',
-- Für Zen-Modus
{
"folke/zen-mode.nvim",
cmd = "ZenMode",
opts = {
window = {
width = 90,
options = {
number = false,
relativenumber = false,
},
},
},
},
-- Für Git-Integration
{
"sindrets/diffview.nvim",
dependencies = { "nvim-lua/plenary.nvim" },
},
-- Für Neogit
{
"NeogitOrg/neogit",
dependencies = {
"nvim-lua/plenary.nvim",
"sindrets/diffview.nvim",
},
cmd = "Neogit",
},
-- Für Farbvorschau in Code
{
"norcalli/nvim-colorizer.lua",
cmd = "ColorizerToggle",
config = true,
},
-- Leap/Lightspeed
{
"ggandor/leap.nvim",
config = function()
require('leap').add_default_mappings()
end,
},
-- Hydra für kontextbezogene Tastaturmodi
{
"anuvyklack/hydra.nvim",
event = "VeryLazy",
config = function()
-- Die Konfigurationen folgen im nächsten Schritt
require("custom.hydra")
end,
},
-- Window-Picker
{
"s1n7ax/nvim-window-picker",
version = "v2.*",
config = function()
require("window-picker").setup({
filter_rules = {
-- Filtere diese Fenstertypen aus
bo = {
filetype = { "neo-tree", "neo-tree-popup", "notify", "quickfix" },
buftype = { "terminal" },
},
},
highlights = {
statusline = {
focused = {
fg = "#000000",
bg = "#E35E4F",
},
unfocused = {
fg = "#000000",
bg = "#44CC41",
},
},
},
picker_config = {
statusline_winbar_picker = {
-- Verwende Buchstaben des Alphabets für die Fensterauswahl
selection_chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ",
},
},
})
end,
}
}

View File

@@ -0,0 +1,5 @@
-- You can add your own plugins here or in other files in this directory!
-- I promise not to create any merge conflicts in this directory :)
--
-- See the kickstart.nvim README for more information
return {}

View File

@@ -0,0 +1,52 @@
--[[
--
-- This file is not required for your own configuration,
-- but helps people determine if their system is setup correctly.
--
--]]
local check_version = function()
local verstr = tostring(vim.version())
if not vim.version.ge then
vim.health.error(string.format("Neovim out of date: '%s'. Upgrade to latest stable or nightly", verstr))
return
end
if vim.version.ge(vim.version(), '0.10-dev') then
vim.health.ok(string.format("Neovim version is: '%s'", verstr))
else
vim.health.error(string.format("Neovim out of date: '%s'. Upgrade to latest stable or nightly", verstr))
end
end
local check_external_reqs = function()
-- Basic utils: `git`, `make`, `unzip`
for _, exe in ipairs { 'git', 'make', 'unzip', 'rg' } do
local is_executable = vim.fn.executable(exe) == 1
if is_executable then
vim.health.ok(string.format("Found executable: '%s'", exe))
else
vim.health.warn(string.format("Could not find executable: '%s'", exe))
end
end
return true
end
return {
check = function()
vim.health.start 'kickstart.nvim'
vim.health.info [[NOTE: Not every warning is a 'must-fix' in `:checkhealth`
Fix only warnings for plugins and languages you intend to use.
Mason will give warnings for languages that are not installed.
You do not need to install, unless you want to use those languages!]]
local uv = vim.uv or vim.loop
vim.health.info('System Information: ' .. vim.inspect(uv.os_uname()))
check_version()
check_external_reqs()
end,
}

View File

@@ -0,0 +1,16 @@
-- autopairs
-- https://github.com/windwp/nvim-autopairs
return {
'windwp/nvim-autopairs',
event = 'InsertEnter',
-- Optional dependency
dependencies = { 'hrsh7th/nvim-cmp' },
config = function()
require('nvim-autopairs').setup {}
-- If you want to automatically add `(` after selecting a function or method
local cmp_autopairs = require 'nvim-autopairs.completion.cmp'
local cmp = require 'cmp'
cmp.event:on('confirm_done', cmp_autopairs.on_confirm_done())
end,
}

View File

@@ -0,0 +1,148 @@
-- debug.lua
--
-- Shows how to use the DAP plugin to debug your code.
--
-- Primarily focused on configuring the debugger for Go, but can
-- be extended to other languages as well. That's why it's called
-- kickstart.nvim and not kitchen-sink.nvim ;)
return {
-- NOTE: Yes, you can install new plugins here!
'mfussenegger/nvim-dap',
-- NOTE: And you can specify dependencies as well
dependencies = {
-- Creates a beautiful debugger UI
'rcarriga/nvim-dap-ui',
-- Required dependency for nvim-dap-ui
'nvim-neotest/nvim-nio',
-- Installs the debug adapters for you
'williamboman/mason.nvim',
'jay-babu/mason-nvim-dap.nvim',
-- Add your own debuggers here
'leoluz/nvim-dap-go',
},
keys = {
-- Basic debugging keymaps, feel free to change to your liking!
{
'<F5>',
function()
require('dap').continue()
end,
desc = 'Debug: Start/Continue',
},
{
'<F1>',
function()
require('dap').step_into()
end,
desc = 'Debug: Step Into',
},
{
'<F2>',
function()
require('dap').step_over()
end,
desc = 'Debug: Step Over',
},
{
'<F3>',
function()
require('dap').step_out()
end,
desc = 'Debug: Step Out',
},
{
'<leader>b',
function()
require('dap').toggle_breakpoint()
end,
desc = 'Debug: Toggle Breakpoint',
},
{
'<leader>B',
function()
require('dap').set_breakpoint(vim.fn.input 'Breakpoint condition: ')
end,
desc = 'Debug: Set Breakpoint',
},
-- Toggle to see last session result. Without this, you can't see session output in case of unhandled exception.
{
'<F7>',
function()
require('dapui').toggle()
end,
desc = 'Debug: See last session result.',
},
},
config = function()
local dap = require 'dap'
local dapui = require 'dapui'
require('mason-nvim-dap').setup {
-- Makes a best effort to setup the various debuggers with
-- reasonable debug configurations
automatic_installation = true,
-- You can provide additional configuration to the handlers,
-- see mason-nvim-dap README for more information
handlers = {},
-- You'll need to check that you have the required things installed
-- online, please don't ask me how to install them :)
ensure_installed = {
-- Update this to ensure that you have the debuggers for the langs you want
'delve',
},
}
-- Dap UI setup
-- For more information, see |:help nvim-dap-ui|
dapui.setup {
-- Set icons to characters that are more likely to work in every terminal.
-- Feel free to remove or use ones that you like more! :)
-- Don't feel like these are good choices.
icons = { expanded = '', collapsed = '', current_frame = '*' },
controls = {
icons = {
pause = '',
play = '',
step_into = '',
step_over = '',
step_out = '',
step_back = 'b',
run_last = '▶▶',
terminate = '',
disconnect = '',
},
},
}
-- Change breakpoint icons
-- vim.api.nvim_set_hl(0, 'DapBreak', { fg = '#e51400' })
-- vim.api.nvim_set_hl(0, 'DapStop', { fg = '#ffcc00' })
-- local breakpoint_icons = vim.g.have_nerd_font
-- and { Breakpoint = '', BreakpointCondition = '', BreakpointRejected = '', LogPoint = '', Stopped = '' }
-- or { Breakpoint = '●', BreakpointCondition = '⊜', BreakpointRejected = '⊘', LogPoint = '◆', Stopped = '⭔' }
-- for type, icon in pairs(breakpoint_icons) do
-- local tp = 'Dap' .. type
-- local hl = (type == 'Stopped') and 'DapStop' or 'DapBreak'
-- vim.fn.sign_define(tp, { text = icon, texthl = hl, numhl = hl })
-- end
dap.listeners.after.event_initialized['dapui_config'] = dapui.open
dap.listeners.before.event_terminated['dapui_config'] = dapui.close
dap.listeners.before.event_exited['dapui_config'] = dapui.close
-- Install golang specific config
require('dap-go').setup {
delve = {
-- On Windows delve must be run attached or it crashes.
-- See https://github.com/leoluz/nvim-dap-go/blob/main/README.md#configuring
detached = vim.fn.has 'win32' == 0,
},
}
end,
}

View File

@@ -0,0 +1,61 @@
-- Adds git related signs to the gutter, as well as utilities for managing changes
-- NOTE: gitsigns is already included in init.lua but contains only the base
-- config. This will add also the recommended keymaps.
return {
{
'lewis6991/gitsigns.nvim',
opts = {
on_attach = function(bufnr)
local gitsigns = require 'gitsigns'
local function map(mode, l, r, opts)
opts = opts or {}
opts.buffer = bufnr
vim.keymap.set(mode, l, r, opts)
end
-- Navigation
map('n', ']c', function()
if vim.wo.diff then
vim.cmd.normal { ']c', bang = true }
else
gitsigns.nav_hunk 'next'
end
end, { desc = 'Jump to next git [c]hange' })
map('n', '[c', function()
if vim.wo.diff then
vim.cmd.normal { '[c', bang = true }
else
gitsigns.nav_hunk 'prev'
end
end, { desc = 'Jump to previous git [c]hange' })
-- Actions
-- visual mode
map('v', '<leader>hs', function()
gitsigns.stage_hunk { vim.fn.line '.', vim.fn.line 'v' }
end, { desc = 'git [s]tage hunk' })
map('v', '<leader>hr', function()
gitsigns.reset_hunk { vim.fn.line '.', vim.fn.line 'v' }
end, { desc = 'git [r]eset hunk' })
-- normal mode
map('n', '<leader>hs', gitsigns.stage_hunk, { desc = 'git [s]tage hunk' })
map('n', '<leader>hr', gitsigns.reset_hunk, { desc = 'git [r]eset hunk' })
map('n', '<leader>hS', gitsigns.stage_buffer, { desc = 'git [S]tage buffer' })
map('n', '<leader>hu', gitsigns.stage_hunk, { desc = 'git [u]ndo stage hunk' })
map('n', '<leader>hR', gitsigns.reset_buffer, { desc = 'git [R]eset buffer' })
map('n', '<leader>hp', gitsigns.preview_hunk, { desc = 'git [p]review hunk' })
map('n', '<leader>hb', gitsigns.blame_line, { desc = 'git [b]lame line' })
map('n', '<leader>hd', gitsigns.diffthis, { desc = 'git [d]iff against index' })
map('n', '<leader>hD', function()
gitsigns.diffthis '@'
end, { desc = 'git [D]iff against last commit' })
-- Toggles
map('n', '<leader>tb', gitsigns.toggle_current_line_blame, { desc = '[T]oggle git show [b]lame line' })
map('n', '<leader>tD', gitsigns.preview_hunk_inline, { desc = '[T]oggle git show [D]eleted' })
end,
},
},
}

View File

@@ -0,0 +1,9 @@
return {
{ -- Add indentation guides even on blank lines
'lukas-reineke/indent-blankline.nvim',
-- Enable `lukas-reineke/indent-blankline.nvim`
-- See `:help ibl`
main = 'ibl',
opts = {},
},
}

View File

@@ -0,0 +1,60 @@
return {
{ -- Linting
'mfussenegger/nvim-lint',
event = { 'BufReadPre', 'BufNewFile' },
config = function()
local lint = require 'lint'
lint.linters_by_ft = {
markdown = { 'markdownlint' },
}
-- To allow other plugins to add linters to require('lint').linters_by_ft,
-- instead set linters_by_ft like this:
-- lint.linters_by_ft = lint.linters_by_ft or {}
-- lint.linters_by_ft['markdown'] = { 'markdownlint' }
--
-- However, note that this will enable a set of default linters,
-- which will cause errors unless these tools are available:
-- {
-- clojure = { "clj-kondo" },
-- dockerfile = { "hadolint" },
-- inko = { "inko" },
-- janet = { "janet" },
-- json = { "jsonlint" },
-- markdown = { "vale" },
-- rst = { "vale" },
-- ruby = { "ruby" },
-- terraform = { "tflint" },
-- text = { "vale" }
-- }
--
-- You can disable the default linters by setting their filetypes to nil:
-- lint.linters_by_ft['clojure'] = nil
-- lint.linters_by_ft['dockerfile'] = nil
-- lint.linters_by_ft['inko'] = nil
-- lint.linters_by_ft['janet'] = nil
-- lint.linters_by_ft['json'] = nil
-- lint.linters_by_ft['markdown'] = nil
-- lint.linters_by_ft['rst'] = nil
-- lint.linters_by_ft['ruby'] = nil
-- lint.linters_by_ft['terraform'] = nil
-- lint.linters_by_ft['text'] = nil
-- Create autocommand which carries out the actual linting
-- on the specified events.
local lint_augroup = vim.api.nvim_create_augroup('lint', { clear = true })
vim.api.nvim_create_autocmd({ 'BufEnter', 'BufWritePost', 'InsertLeave' }, {
group = lint_augroup,
callback = function()
-- Only run the linter in buffers that you can modify in order to
-- avoid superfluous noise, notably within the handy LSP pop-ups that
-- describe the hovered symbol using Markdown.
if vim.opt_local.modifiable:get() then
lint.try_lint()
end
end,
})
end,
},
}

View File

@@ -0,0 +1,25 @@
-- Neo-tree is a Neovim plugin to browse the file system
-- https://github.com/nvim-neo-tree/neo-tree.nvim
return {
'nvim-neo-tree/neo-tree.nvim',
version = '*',
dependencies = {
'nvim-lua/plenary.nvim',
'nvim-tree/nvim-web-devicons', -- not strictly required, but recommended
'MunifTanjim/nui.nvim',
},
cmd = 'Neotree',
keys = {
{ '\\', ':Neotree reveal<CR>', desc = 'NeoTree reveal', silent = true },
},
opts = {
filesystem = {
window = {
mappings = {
['\\'] = 'close_window',
},
},
},
},
}

View File

@@ -1,180 +0,0 @@
return {
{
"nvim-lualine/lualine.nvim",
optional = true,
event = "VeryLazy",
opts = function()
local icons = require("lazyvim.config").icons
local Util = require("lazyvim.util")
return {
options = {
theme = "catppuccin",
component_separators = { left = "", right = "" },
section_separators = { left = "", right = "" },
globalstatus = true,
disabled_filetypes = { statusline = { "dashboard", "alpha" } },
},
sections = {
lualine_a = { "mode" },
lualine_b = { "branch" },
lualine_c = {
{
"diagnostics",
symbols = {
error = icons.diagnostics.Error,
warn = icons.diagnostics.Warn,
info = icons.diagnostics.Info,
hint = icons.diagnostics.Hint,
},
},
{ "filetype", icon_only = true, separator = "", padding = { left = 1, right = 0 } },
{ "filename", path = 1, symbols = { modified = "", readonly = "", unnamed = "" } },
-- stylua: ignore
{
function() return require("nvim-navic").get_location() end,
cond = function() return package.loaded["nvim-navic"] and require("nvim-navic").is_available() end,
},
},
lualine_x = {
-- stylua: ignore
{
function() return require("noice").api.status.command.get() end,
cond = function() return package.loaded["noice"] and require("noice").api.status.command.has() end,
color = Util.ui.fg("Statement"),
},
-- stylua: ignore
{
function() return require("noice").api.status.mode.get() end,
cond = function() return package.loaded["noice"] and require("noice").api.status.mode.has() end,
color = Util.ui.fg("Constant"),
},
-- stylua: ignore
{
function() return "" .. require("dap").status() end,
cond = function () return package.loaded["dap"] and require("dap").status() ~= "" end,
color = Util.ui.fg("Debug"),
},
{
require("lazy.status").updates,
cond = require("lazy.status").has_updates,
color = Util.ui.fg("Special"),
},
{
"diff",
symbols = {
added = icons.git.added,
modified = icons.git.modified,
removed = icons.git.removed,
},
},
},
lualine_y = {
{ "progress", separator = " ", padding = { left = 1, right = 0 } },
{ "location", padding = { left = 0, right = 1 } },
},
lualine_z = {
function()
return "" .. os.date("%R")
end,
},
},
extensions = { "neo-tree", "lazy" },
}
end,
},
-- custom config which piggybacks on the copilot extras in lazy.lua.
{
"zbirenbaum/copilot.lua",
enabled = false,
cmd = "Copilot",
build = ":Copilot auth",
event = "InsertEnter",
config = function()
require("copilot").setup({
panel = {
enabled = true,
auto_refresh = true,
},
suggestion = {
enabled = true,
auto_trigger = true,
accept = false, -- disable built-in keymapping
},
})
-- hide copilot suggestions when cmp menu is open
-- to prevent odd behavior/garbled up suggestions
local cmp_status_ok, cmp = pcall(require, "cmp")
if cmp_status_ok then
cmp.event:on("menu_opened", function()
vim.b.copilot_suggestion_hidden = true
end)
cmp.event:on("menu_closed", function()
vim.b.copilot_suggestion_hidden = false
end)
end
end,
},
{
{
"jellydn/CopilotChat.nvim",
enabled = false,
dependencies = { "zbirenbaum/copilot.lua" }, -- Or { "github/copilot.vim" }
opts = {
mode = "split", -- newbuffer or split , default: newbuffer
debug = false, -- Enable or disable debug mode, the log file will be in ~/.local/state/nvim/CopilotChat.nvim.log
},
build = function()
vim.defer_fn(function()
vim.cmd("UpdateRemotePlugins")
vim.notify("CopilotChat - Updated remote plugins. Please restart Neovim.")
end, 3000)
end,
event = "VeryLazy",
keys = {
{ "<leader>cce", "<cmd>CopilotChatExplain<cr>", desc = "CopilotChat - Explain code" },
{ "<leader>cct", "<cmd>CopilotChatTests<cr>", desc = "CopilotChat - Generate tests" },
},
},
},
-- copilot status in lualine
-- this is taken from the copilot lazyvim extras at:
-- https://www.lazyvim.org/plugins/extras/coding.copilot
{
"nvim-lualine/lualine.nvim",
enabled = false,
optional = true,
event = "VeryLazy",
opts = function(_, opts)
local Util = require("lazyvim.util").ui
local colors = {
[""] = Util.fg("Special"),
["Normal"] = Util.fg("Special"),
["Warning"] = Util.fg("DiagnosticError"),
["InProgress"] = Util.fg("DiagnosticWarn"),
}
table.insert(opts.sections.lualine_x, 2, {
function()
local icon = require("lazyvim.config").icons.kinds.Copilot
local status = require("copilot.api").status.data
return icon .. (status.message or "")
end,
cond = function()
local ok, clients = pcall(vim.lsp.get_active_clients, { name = "copilot", bufnr = 0 })
return ok and #clients > 0
end,
color = function()
if not package.loaded["copilot"] then
return
end
local status = require("copilot.api").status.data
return colors[status.status] or colors[""]
end,
})
end,
},
}

View File

@@ -1,7 +0,0 @@
return {
"windwp/nvim-autopairs",
event = "InsertEnter",
opts = {
enable_check_bracket_line = true,
},
}

View File

@@ -1,52 +0,0 @@
return {
-- nvim-cmp configuration so to not preselect completion and require tab to select
{
"hrsh7th/nvim-cmp",
dependencies = {
"hrsh7th/cmp-emoji",
opts = nil,
},
---@param opts cmp.ConfigSchema
opts = function(_, opts)
local has_words_before = function()
unpack = unpack or table.unpack
local line, col = unpack(vim.api.nvim_win_get_cursor(0))
return col ~= 0 and vim.api.nvim_buf_get_lines(0, line - 1, line, true)[1]:sub(col, col):match("%s") == nil
end
local luasnip = require("luasnip")
local cmp = require("cmp")
opts.mapping = vim.tbl_extend("force", opts.mapping, {
["<CR>"] = vim.NIL,
["<Tab>"] = cmp.mapping(function(fallback)
if cmp.visible() then
cmp.confirm({ behavior = cmp.ConfirmBehavior.Insert, select = true })
elseif require("copilot.suggestion").is_visible() then
require("copilot.suggestion").accept()
elseif luasnip.expand_or_locally_jumpable() then
luasnip.expand_or_jump()
elseif has_words_before() then
cmp.complete()
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" }),
})
opts.preselect = cmp.PreselectMode.None
opts.sources = cmp.config.sources(vim.list_extend(opts.sources, { { name = "emoji" } }))
end,
},
}

View File

@@ -1,17 +0,0 @@
return {
{
"CRAG666/code_runner.nvim",
config = function()
require("code_runner").setup({
focus = false,
filetype = {
go = {
"go run",
},
},
})
end,
keys = { { "<leader>rf", "<cmd>RunFile term<cr>", desc = "Run file" } },
},
}

View File

@@ -1,64 +0,0 @@
return {
-- NOTE: also see treesitter.lua for languages with improved syntax highlighting
-- NOTE: colorschemes already installed in LazyVim: https://www.lazyvim.org/plugins/colorscheme
-- set the colorscheme
{
"LazyVim/LazyVim",
-- lazy = false,
opts = {
-- colorscheme = "dracula-dark",
colorscheme = "tokyonight-storm",
-- colorscheme = "tokyonight-night",
-- colorscheme = "tokyonight-moon",
-- colorscheme = "tokyonight-day",
-- colorscheme = "catppuccin",
-- colorscheme = "catppuccin-macchiato",
-- colorscheme = "catppuccin-mocha",
-- colorscheme = "catppuccin-frappe",
-- colorscheme = "catppuccin-latte",
-- colorscheme = "material",
},
},
{
"catppuccin/nvim",
-- lazy = false,
name = "catppuccin",
priority = 1000,
opts = {
flavor = "mocha",
transparent_background = true,
integrations = {
gitsigns = true,
telescope = true,
neogit = true,
nvimtree = true,
indent_blankline = true,
dashboard = true,
which_key = true,
mini = true,
harpoon = true,
notify = true,
},
},
},
{
"marko-cerovac/material.nvim",
priority = 1000,
opts = {
contrast = {
terminal = false,
sidebars = false,
floating_windows = false,
cursor_line = false,
},
style = "deep ocean", -- Verfügbare Stile: "darker", "lighter", "oceanic", "palenight", "deep ocean"
transparent = true, -- Macht den Hintergrund transparent
lualine_style = "default", -- oder "stealth" für einen minimalistischeren Look
},
},
}

View File

@@ -1,4 +0,0 @@
return {
{ "goolord/alpha-nvim", enabled = true },
}

View File

@@ -1,66 +0,0 @@
-- See https://www.lazyvim.org/plugins/extras/dap.core
-- and test.lua for keymaps
return {
{
"williamboman/mason.nvim",
opts = function(_, opts)
local ensure_installed = {
-- python
"debugpy",
-- see lazy.lua for LazyVim extras
}
opts.ensure_installed = opts.ensure_installed or {}
vim.list_extend(opts.ensure_installed, ensure_installed)
end,
},
{
"mfussenegger/nvim-dap-python",
dependencies = {
"mfussenegger/nvim-dap",
},
ft = { "python" },
config = function()
local dap_python = require("dap-python")
local function find_debugpy_python_path()
-- Return the path to the debugpy python executable if it is
-- installed in $VIRTUAL_ENV, otherwise get it from Mason
if vim.env.VIRTUAL_ENV then
local paths = vim.fn.glob(vim.env.VIRTUAL_ENV .. "/**/debugpy", true, true)
if table.concat(paths, ", ") ~= "" then
return vim.env.VIRTUAL_ENV .. "/bin/python"
end
end
local mason_registry = require("mason-registry")
local path = mason_registry.get_package("debugpy"):get_install_path() .. "/venv/bin/python"
return path
end
local dap_python_path = find_debugpy_python_path()
vim.api.nvim_echo({ { "Using path for dap-python: " .. dap_python_path, "None" } }, false, {})
dap_python.setup(dap_python_path)
end,
},
-- extend Go extras setup from lazy.lua, with DAP capability
-- also see https://github.com/LazyVim/LazyVim/pull/1115
{
"leoluz/nvim-dap-go",
dependencies = {
{ "mfussenegger/nvim-dap" },
},
ft = { "go" },
config = true,
keys = {
-- workaround, as nvim-dap-go does not have a DAP strategy set up for neotest
-- see https://github.com/nvim-neotest/neotest-go/issues/12
{ "<leader>tg", "<cmd>lua require('dap-go').debug_test()<CR>", desc = "Debug Nearest (Go)" },
},
},
}

View File

@@ -1,267 +0,0 @@
-- since this is just an example spec, don't actually load anything here and return an empty spec
-- stylua: ignore
if true then return {} end
-- every spec file under config.plugins will be loaded automatically by lazy.nvim
--
-- In your plugin files, you can:
-- * add extra plugins
-- * disable/enabled LazyVim plugins
-- * override the configuration of LazyVim plugins
return {
-- add gruvbox
{ "ellisonleao/gruvbox.nvim" },
-- Configure LazyVim to load gruvbox
{
"LazyVim/LazyVim",
opts = {
colorscheme = "gruvbox",
},
},
-- change trouble config
{
"folke/trouble.nvim",
-- opts will be merged with the parent spec
opts = { use_diagnostic_signs = true },
},
-- disable trouble
{ "folke/trouble.nvim", enabled = false },
-- add symbols-outline
{
"simrat39/symbols-outline.nvim",
cmd = "SymbolsOutline",
keys = { { "<leader>cs", "<cmd>SymbolsOutline<cr>", desc = "Symbols Outline" } },
config = true,
},
-- override nvim-cmp and add cmp-emoji
{
"hrsh7th/nvim-cmp",
dependencies = { "hrsh7th/cmp-emoji" },
---@param opts cmp.ConfigSchema
opts = function(_, opts)
local cmp = require("cmp")
opts.sources = cmp.config.sources(vim.list_extend(opts.sources, { { name = "emoji" } }))
end,
},
-- change some telescope options and a keymap to browse plugin files
{
"nvim-telescope/telescope.nvim",
keys = {
-- add a keymap to browse plugin files
-- stylua: ignore
{
"<leader>fp",
function() require("telescope.builtin").find_files({ cwd = require("lazy.core.config").options.root }) end,
desc = "Find Plugin File",
},
},
-- change some options
opts = {
defaults = {
layout_strategy = "horizontal",
layout_config = { prompt_position = "top" },
sorting_strategy = "ascending",
winblend = 0,
},
},
},
-- add telescope-fzf-native
{
"telescope.nvim",
dependencies = {
"nvim-telescope/telescope-fzf-native.nvim",
build = "make",
config = function()
require("telescope").load_extension("fzf")
end,
},
},
-- add pyright to lspconfig
{
"neovim/nvim-lspconfig",
---@class PluginLspOpts
opts = {
---@type lspconfig.options
servers = {
-- pyright will be automatically installed with mason and loaded with lspconfig
pyright = {},
},
},
},
-- add tsserver and setup with typescript.nvim instead of lspconfig
{
"neovim/nvim-lspconfig",
dependencies = {
"jose-elias-alvarez/typescript.nvim",
init = function()
require("lazyvim.util").on_attach(function(_, buffer)
-- stylua: ignore
vim.keymap.set( "n", "<leader>co", "TypescriptOrganizeImports", { buffer = buffer, desc = "Organize Imports" })
vim.keymap.set("n", "<leader>cR", "TypescriptRenameFile", { desc = "Rename File", buffer = buffer })
end)
end,
},
---@class PluginLspOpts
opts = {
---@type lspconfig.options
servers = {
-- tsserver will be automatically installed with mason and loaded with lspconfig
tsserver = {},
},
-- you can do any additional lsp server setup here
-- return true if you don't want this server to be setup with lspconfig
---@type table<string, fun(server:string, opts:_.lspconfig.options):boolean?>
setup = {
-- example to setup with typescript.nvim
tsserver = function(_, opts)
require("typescript").setup({ server = opts })
return true
end,
-- Specify * to use this function as a fallback for any server
-- ["*"] = function(server, opts) end,
},
},
},
-- for typescript, LazyVim also includes extra specs to properly setup lspconfig,
-- treesitter, mason and typescript.nvim. So instead of the above, you can use:
{ import = "lazyvim.plugins.extras.lang.typescript" },
-- add more treesitter parsers
{
"nvim-treesitter/nvim-treesitter",
opts = {
ensure_installed = {
"bash",
"help",
"html",
"javascript",
"json",
"lua",
"markdown",
"markdown_inline",
"python",
"query",
"regex",
"tsx",
"typescript",
"vim",
"yaml",
},
},
},
-- since `vim.tbl_deep_extend`, can only merge tables and not lists, the code above
-- would overwrite `ensure_installed` with the new value.
-- If you'd rather extend the default config, use the code below instead:
{
"nvim-treesitter/nvim-treesitter",
opts = function(_, opts)
-- add tsx and treesitter
vim.list_extend(opts.ensure_installed, {
"tsx",
"typescript",
})
end,
},
-- the opts function can also be used to change the default opts:
{
"nvim-lualine/lualine.nvim",
event = "VeryLazy",
opts = function(_, opts)
table.insert(opts.sections.lualine_x, "😄")
end,
},
-- or you can return new options to override all the defaults
{
"nvim-lualine/lualine.nvim",
event = "VeryLazy",
opts = function()
return {
--[[add your custom lualine config here]]
}
end,
},
-- use mini.starter instead of alpha
{ import = "lazyvim.plugins.extras.ui.mini-starter" },
-- add jsonls and schemastore ans setup treesitter for json, json5 and jsonc
{ import = "lazyvim.plugins.extras.lang.json" },
-- add any tools you want to have installed below
{
"williamboman/mason.nvim",
opts = {
ensure_installed = {
"stylua",
"shellcheck",
"shfmt",
"flake8",
},
},
},
-- Use <tab> for completion and snippets (supertab)
-- first: disable default <tab> and <s-tab> behavior in LuaSnip
{
"L3MON4D3/LuaSnip",
keys = function()
return {}
end,
},
-- then: setup supertab in cmp
{
"hrsh7th/nvim-cmp",
dependencies = {
"hrsh7th/cmp-emoji",
},
---@param opts cmp.ConfigSchema
opts = function(_, opts)
local has_words_before = function()
unpack = unpack or table.unpack
local line, col = unpack(vim.api.nvim_win_get_cursor(0))
return col ~= 0 and vim.api.nvim_buf_get_lines(0, line - 1, line, true)[1]:sub(col, col):match("%s") == nil
end
local luasnip = require("luasnip")
local cmp = require("cmp")
opts.mapping = vim.tbl_extend("force", opts.mapping, {
["<Tab>"] = cmp.mapping(function(fallback)
if cmp.visible() then
cmp.select_next_item()
-- You could replace the expand_or_jumpable() calls with expand_or_locally_jumpable()
-- they way you will only jump inside the snippet region
elseif luasnip.expand_or_jumpable() then
luasnip.expand_or_jump()
elseif has_words_before() then
cmp.complete()
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" }),
})
end,
},
}

View File

@@ -1,24 +0,0 @@
return {
-- change neo-tree confi
{
"nvim-neo-tree/neo-tree.nvim",
-- opts will be merged with the parent spec
opts = {
filesystem = {
filtered_items = {
visible = true, -- when true, they will just be displayed differently than normal items
hide_dotfiles = false,
hide_gitignored = true,
},
-- This will use the OS level file watchers to detect changes
-- instead of relying on nvim autocmd events.
use_libuv_file_watcher = true,
},
window = {
position = "right",
},
},
},
}

View File

@@ -1,59 +0,0 @@
return {
{
"williamboman/mason.nvim",
opts = function(_, opts)
local ensure_installed = {
-- python
"black",
-- lua
"stylua",
-- shell
"shfmt",
-- yaml
"yamlfix",
"yamlfmt",
-- rust
-- rustfmt via rustup
-- see lazy.lua for LazyVim extras
}
opts.ensure_installed = opts.ensure_installed or {}
vim.list_extend(opts.ensure_installed, ensure_installed)
end,
},
{
"mhartington/formatter.nvim",
enabled = false, -- let's see what happens with null-ls and LazyVim
config = function()
local formatter = require("formatter")
formatter.setup({
filetype = {
lua = {
require("formatter.filetypes.lua").stylua,
},
python = {
require("formatter.filetypes.python").black,
},
sh = {
require("formatter.filetypes.sh").shfmt,
},
yaml = {
require("formatter.filetypes.yaml").yamlfix,
require("formatter.filetypes.yaml").yamlfmt,
},
},
})
end,
},
"windwp/nvim-autopairs",
event = "InsertEnter",
opts = {}, -- this is equalent to setup({}) function
}

View File

@@ -1,31 +0,0 @@
return {
-- Formatting
{
"stevearc/conform.nvim",
optional = true,
opts = {
formatters_by_ft = {
javascript = { "prettier" },
typescript = { "prettier" },
javascriptreact = { "prettier" },
typescriptreact = { "prettier" },
},
formatters = {
prettier = {
prepend_args = { "--tab-width", "2", "--single-quote", "--trailing-comma", "all" },
},
},
},
},
-- Linting
{
"mfussenegger/nvim-lint",
optional = true,
opts = {
linters_by_ft = {
javascript = { "eslint" },
typescript = { "eslint" },
},
},
},
}

View File

@@ -1,77 +0,0 @@
return {
{
"sindrets/diffview.nvim",
dependencies = {
{ "nvim-lua/plenary.nvim" },
{ "nvim-tree/nvim-web-devicons" },
},
lazy = false,
config = function()
-- vim.opt.fillchars = "diff:"
vim.opt.fillchars = "diff:░"
require("diffview").setup({
enhanced_diff_hl = true, -- See ':h diffview-config-enhanced_diff_hl'
})
end,
keys = {
-- use [c and [c to navigate diffs (vim built in), see :h jumpto-diffs
-- use ]x and [x to navigate conflicts
{ "<leader>gdc", ":DiffviewOpen origin/main...HEAD", desc = "Compare commits" },
{ "<leader>gdd", ":DiffviewClose<CR>", desc = "Close Diffview tab" },
{ "<leader>gdh", ":DiffviewFileHistory %<CR>", desc = "File history" },
{ "<leader>gdH", ":DiffviewFileHistory<CR>", desc = "Repo history" },
{ "<leader>gdm", ":DiffviewOpen<CR>", desc = "Solve merge conflicts" },
{ "<leader>gdo", ":DiffviewOpen main", desc = "DiffviewOpen" },
{ "<leader>gdp", ":DiffviewOpen origin/main...HEAD --imply-local", desc = "Review current PR" },
{
"<leader>gdP",
":DiffviewFileHistory --range=origin/main...HEAD --right-only --no-merges",
desc = "Review current PR (per commit)",
},
},
},
{
"f-person/git-blame.nvim",
keys = {
-- toggle needs to be called twice; https://github.com/f-person/git-blame.nvim/issues/16
{ "<leader>gbe", ":GitBlameEnable<CR>", desc = "Blame line (enable)" },
{ "<leader>gbd", ":GitBlameDisable<CR>", desc = "Blame line (disable)" },
{ "<leader>gbs", ":GitBlameCopySHA<CR>", desc = "Copy SHA" },
{ "<leader>gbc", ":GitBlameCopyCommitURL<CR>", desc = "Copy commit URL" },
{ "<leader>gbf", ":GitBlameCopyFileURL<CR>", desc = "Copy file URL" },
},
},
{
"tpope/vim-fugitive",
},
{
"topaxi/gh-actions.nvim",
dependencies = { "nvim-lua/plenary.nvim", "MunifTanjim/nui.nvim" },
build = "make",
cmd = "GhActions",
keys = {
{ "<leader>ga", "<cmd>GhActions<cr>", desc = "Open Github Actions" },
},
-- optional, you can also install and use `yq` instead.
config = function(_, opts)
require("gh-actions").setup(opts)
end,
opts = {},
},
{
"NeogitOrg/neogit",
dependencies = {
"nvim-lua/plenary.nvim", -- required
"nvim-telescope/telescope.nvim", -- optional
"sindrets/diffview.nvim", -- optional
"ibhagwan/fzf-lua", -- optional
},
config = true,
},
}

View File

@@ -1,22 +0,0 @@
return {
{
"ThePrimeagen/harpoon",
dependencies = {
{ "nvim-lua/plenary.nvim" },
{ "nvim-telescope/telescope.nvim" },
},
keys = {
{ "<leader>hh", ":lua require('harpoon.ui').toggle_quick_menu()<CR>", desc = "Harpoon menu" },
-- { "<leader>ht", ":Telescope harpoon marks<CR>", desc = "Telescope menu" },
{ "<leader>ha", ":lua require('harpoon.mark').add_file()<CR>", desc = "Add file as marked" },
{ "<leader>hn", ":lua require('harpoon.ui').nav_next()<CR>", desc = "Next file" },
{ "<leader>hp", ":lua require('harpoon.ui').nav_prev()<CR>", desc = "Previous file" },
{ "<leader>ht", ":lua require('harpoon.term').gotoTerminal(1)<CR>", desc = "Terminal" },
},
config = function()
require("telescope").load_extension("harpoon")
end,
},
}

View File

@@ -1,50 +0,0 @@
return {
{
"williamboman/mason.nvim",
opts = function(_, opts)
local ensure_installed = {
-- python
"mypy",
-- lua
"luacheck",
-- shell
"shellcheck",
-- yaml
"yamllint",
-- sql
"sqlfluff",
-- markdown
"vale",
-- see lazy.lua for LazyVim extras
}
opts.ensure_installed = opts.ensure_installed or {}
vim.list_extend(opts.ensure_installed, ensure_installed)
end,
},
{
-- NOTE: autocmd is required, see autocmds.lua
"mfussenegger/nvim-lint",
enabled = false, -- let's see what happens with null-ls and LazyVim
config = function()
local lint = require("lint")
lint.linters_by_ft = {
python = { "mypy" },
lua = { "luacheck" },
yaml = { "yamllint" },
sh = { "shellcheck" },
sql = { "sqlfluff" },
markdown = { "vale" },
}
end,
},
}

View File

@@ -1,114 +0,0 @@
-- https://www.lazyvim.org/plugins/lsp
return {
-- change mason config
-- note: don't forget to update treesitter for languages
{
"williamboman/mason.nvim",
opts = function(_, opts)
local ensure_installed = {
-- python
"ruff-lsp",
"pyright",
-- lua
"lua-language-server",
-- shell
"bash-language-server",
-- docker
"dockerfile-language-server",
-- rust
"rust-analyzer",
--svelte
"svelte-language-server",
-- vue
"vue-language-server",
-- php
"intelephense",
-- see lazy.lua for LazyVim extras
}
opts.ensure_installed = opts.ensure_installed or {}
vim.list_extend(opts.ensure_installed, ensure_installed)
end,
},
{
"nvimtools/none-ls.nvim",
dependencies = { "mason.nvim" },
event = { "BufReadPre", "BufNewFile" },
opts = function(_, opts)
local null_ls = require("null-ls")
local formatting = null_ls.builtins.formatting
local diagnostics = null_ls.builtins.diagnostics
local code_actions = null_ls.builtins.code_actions
-- null_ls.setup({
-- debug = false, -- Turn on debug for :NullLsLog
-- -- diagnostics_format = "#{m} #{s}[#{c}]",
-- })
local function prefer_bin_from_venv(executable_name)
-- Return the path to the executable if $VIRTUAL_ENV is set and the binary exists somewhere beneath the $VIRTUAL_ENV path, otherwise get it from Mason
if vim.env.VIRTUAL_ENV then
local paths = vim.fn.glob(vim.env.VIRTUAL_ENV .. "/**/bin/" .. executable_name, true, true)
local executable_path = table.concat(paths, ", ")
if executable_path ~= "" then
-- vim.api.nvim_echo(
-- { { "Using path for " .. executable_name .. ": " .. executable_path, "None" } },
-- false,
-- {}
-- )
return executable_path
end
end
local mason_registry = require("mason-registry")
local mason_path = mason_registry.get_package(executable_name):get_install_path()
.. "/venv/bin/"
.. executable_name
-- vim.api.nvim_echo({ { "Using Mason for " .. executable_name .. ": " .. mason_path, "None" } }, false, {})
return mason_path
end
local sources = {
-- list of supported sources:
-- https://github.com/jose-elias-alvarez/null-ls.nvim/blob/main/doc/BUILTINS.md
diagnostics.mypy.with({
filetypes = { "python" },
command = prefer_bin_from_venv("mypy"),
}),
formatting.black.with({
filetypes = { "python" },
command = prefer_bin_from_venv("black"),
}),
-- installed via Mason
formatting.stylua.with({
extra_args = { "--indent-type", "Spaces", "--indent-width", "2" },
}),
formatting.shfmt,
formatting.yamlfix, -- requires python
formatting.prettierd,
diagnostics.yamllint,
diagnostics.sqlfluff.with({
extra_args = { "--dialect", "postgres" },
}),
code_actions.gitsigns,
}
-- extend opts.sources
for _, source in ipairs(sources) do
table.insert(opts.sources, source)
end
end,
},
}

View File

@@ -1,9 +0,0 @@
return {
{
"iamcco/markdown-preview.nvim",
ft = "markdown",
build = function()
vim.fn["mkdp#util#install"]()
end,
},
}

View File

@@ -1,10 +0,0 @@
return {
{
"nvim-neo-tree/neo-tree.nvim",
opts = {
filesystem = {
bind_to_cwd = false,
},
},
},
}

View File

@@ -1,32 +0,0 @@
return {
{
"ahmedkhalf/project.nvim",
dependencies = {
"nvim-telescope/telescope.nvim",
},
config = function()
require("project_nvim").setup({
-- your configuration comes here
-- or leave it empty to use the default settings
-- refer to the configuration section below
--
-- All the patterns used to detect root dir, when **"pattern"** is in
-- detection_methods
patterns = {
".git",
"_darcs",
".hg",
".bzr",
".svn",
"Makefile",
"package.json",
"pyproject.toml",
"poetry.lock",
},
})
require("telescope").load_extension("projects")
end,
},
}

View File

@@ -1,19 +0,0 @@
return {
"ThePrimeagen/refactoring.nvim",
dependencies = {
{ "nvim-lua/plenary.nvim" },
{ "nvim-treesitter/nvim-treesitter" },
},
config = function()
require("refactoring").setup()
end,
keys = {
{
"<leader>cR",
":lua require('refactoring').select_refactor()<CR>",
mode = "v",
desc = "Refactor",
},
},
}

View File

@@ -1,5 +0,0 @@
return {
-- disable tabs
{ "akinsho/bufferline.nvim", enabled = false },
}

View File

@@ -1,5 +0,0 @@
-- tailwind-tools.lua
return {
"luckasRanarison/tailwind-tools.nvim",
opts = {}, -- your configuration
}

View File

@@ -1,63 +0,0 @@
return {
-- change telescope config
{
"nvim-telescope/telescope.nvim",
-- opts will be merged with the parent spec
opts = {
defaults = {
file_ignore_patterns = { "^.git/", "^node_modules/", "^poetry.lock" },
},
},
},
-- https://github.com/nvim-telescope/telescope-live-grep-args.nvim
{
"nvim-telescope/telescope-live-grep-args.nvim",
dependencies = {
"nvim-telescope/telescope.nvim",
},
config = function()
-- https://github.com/nvim-telescope/telescope-live-grep-args.nvim
-- Uses ripgrep args (rg) for live_grep
-- Command examples:
-- -i "Data" # case insensitive
-- -g "!*.md" # ignore md files
-- -w # whole word
-- -e # regex
-- see 'man rg' for more
require("telescope").load_extension("live_grep_args")
end,
keys = {
{
"<leader>/",
":lua require('telescope').extensions.live_grep_args.live_grep_args()<CR>",
desc = "Live Grep (Args)",
},
},
-- opts will be merged with the parent spec
opts = {
pickers = {
live_grep = {
additional_args = function()
return { "--hidden" }
end,
},
},
},
},
-- https://www.lazyvim.org/configuration/recipes#add-telescope-fzf-native
{
"nvim-telescope/telescope-fzf-native.nvim",
dependencies = {
"nvim-telescope/telescope.nvim",
},
build = "make",
config = function()
require("telescope").load_extension("fzf")
end,
},
}

View File

@@ -1,64 +0,0 @@
return {
{
"nvim-neotest/neotest",
dependencies = {
{ "nvim-lua/plenary.nvim" },
{ "nvim-treesitter/nvim-treesitter" },
{ "antoinemadec/FixCursorHold.nvim" },
{ "folke/neodev.nvim" },
-- adapters
{ "nvim-neotest/neotest-vim-test" },
{ "nvim-neotest/neotest-python" },
{ "rouge8/neotest-rust" },
{ "nvim-neotest/neotest-go" },
{ "adrigzr/neotest-mocha" },
{ "vim-test/vim-test" },
},
keys = {
{
"<leader>tS",
":lua require('neotest').run.run({ suite = true })<CR>",
desc = "Run all tests in suite",
},
},
opts = {
adapters = {
["neotest-python"] = {
-- https://github.com/nvim-neotest/neotest-python
runner = "pytest",
args = { "--log-level", "INFO", "--color", "yes", "-vv", "-s" },
-- dap = { justMyCode = false },
},
["neotest-go"] = {
-- see lazy.lua
},
-- ["neotest-rust"] = {
-- -- see lazy.lua
-- -- https://github.com/rouge8/neotest-rust
-- --
-- -- requires nextest, which can be installed via "cargo binstall":
-- -- https://github.com/cargo-bins/cargo-binstall
-- -- https://nexte.st/book/pre-built-binaries.html
-- },
["neotest-mocha"] = {
-- https://github.com/adrigzr/neotest-mocha
filetypes = { "javascript", "javascriptreact", "typescript", "typescriptreact" },
command = "npm test --",
env = { CI = true },
cwd = function(_) -- skipped arg is path
return vim.fn.getcwd()
end,
},
["neotest-vim-test"] = {
-- https://github.com/nvim-neotest/neotest-vim-test
ignore_file_types = { "python", "vim", "lua", "rust", "go" },
},
},
},
},
}

View File

@@ -1,45 +0,0 @@
return {
-- {
-- "numToStr/Navigator.nvim",
-- config = true,
-- keys = {
-- { "<C-h>", "<cmd>NavigatorLeft<cr>", desc = "Move left" },
-- { "<C-l", "<cmd>NavigatorRight<cr>", desc = "Move right" },
-- { "<C-j>", "<cmd>NavigatorDown<cr>", desc = "Move down" },
-- { "<C-k>", "<cmd>NavigatorUp<cr>", desc = "Move up" },
-- },
-- },
-- {
-- "alexghergh/nvim-tmux-navigation",
-- config = function()
-- require("nvim-tmux-navigation").setup({
-- disable_when_zoomed = true, -- defaults to false
-- keybindings = {
-- left = "<C-h>",
-- down = "<C-j>",
-- up = "<C-k>",
-- right = "<C-l>",
-- last_active = "<C-\\>",
-- next = "<C-Space>",
-- },
-- })
-- end,
-- },
{
"christoomey/vim-tmux-navigator",
cmd = {
"TmuxNavigateLeft",
"TmuxNavigateDown",
"TmuxNavigateUp",
"TmuxNavigateRight",
"TmuxNavigatePrevious",
},
keys = {
{ "<c-h>", "<cmd><C-U>TmuxNavigateLeft<cr>" },
{ "<c-j>", "<cmd><C-U>TmuxNavigateDown<cr>" },
{ "<c-k>", "<cmd><C-U>TmuxNavigateUp<cr>" },
{ "<c-l>", "<cmd><C-U>TmuxNavigateRight<cr>" },
{ "<c-\\>", "<cmd><C-U>TmuxNavigatePrevious<cr>" },
},
},
}

View File

@@ -1,85 +0,0 @@
return {
-- add more treesitter parsers, used for e.g. theming and other plugins
-- https://github.com/nvim-treesitter/nvim-treesitter#supported-languages
{
"nvim-treesitter/nvim-treesitter",
-- opts will be merged with the parent spec
opts = {
ensure_installed = {
"bash",
"c",
"comment",
"css",
"diff",
"git_config",
"git_rebase",
"go",
"gomod",
"html",
"http",
"javascript",
"json",
"lua",
"make",
"markdown",
"markdown_inline",
"php",
"proto",
"python",
"query",
"graphql",
"regex",
"rst",
"rust",
"scss",
"svelte",
"swift",
"sql",
"terraform",
"tsx",
"typescript",
"vim",
"vue",
"yaml",
},
autotag = {
enable = true,
},
-- Hier kommt die neue Konfiguration
indent = { enable = true },
highlight = {
enable = true,
additional_vim_regex_highlighting = false,
},
-- Operator-Hervorhebung
playground = {
enable = true,
disable = {},
updatetime = 25,
persist_queries = false,
keybindings = {
toggle_query_editor = "o",
toggle_hl_groups = "i",
toggle_injected_languages = "t",
toggle_anonymous_nodes = "a",
toggle_language_display = "I",
focus_language = "f",
unfocus_language = "F",
update = "R",
goto_node = "<cr>",
show_help = "?",
},
},
},
},
-- https://github.com/nvim-treesitter/nvim-treesitter-context
{
"nvim-treesitter/nvim-treesitter-context",
dependencies = { "nvim-treesitter/nvim-treesitter" },
},
{
"windwp/nvim-ts-autotag",
},
}

View File

@@ -1,9 +0,0 @@
return {
{
"mbbill/undotree",
cmd = "UndotreeToggle",
keys = {
{ "<leader>fu", "<cmd>UndotreeToggle<cr>", desc = "Undo tree" },
},
},
}

View File

@@ -1,50 +0,0 @@
local lsp_conficts, _ = pcall(vim.api.nvim_get_autocmds, { group = "LspAttach_conflicts" })
if not lsp_conficts then
vim.api.nvim_create_augroup("LspAttach_conflicts", {})
end
vim.api.nvim_create_autocmd("LspAttach", {
group = "LspAttach_conflicts",
desc = "prevent tsserver and volar competing",
callback = function(args)
if not (args.data and args.data.client_id) then
return
end
local active_clients = vim.lsp.get_active_clients()
local client = vim.lsp.get_client_by_id(args.data.client_id)
-- prevent tsserver and volar competing
-- if client.name == "volar" or require("lspconfig").util.root_pattern("nuxt.config.ts")(vim.fn.getcwd()) then
-- OR
if client.name == "volar" then
for _, client_ in pairs(active_clients) do
-- stop tsserver if volar is already active
if client_.name == "tsserver" then
client_.stop()
end
end
elseif client.name == "tsserver" then
for _, client_ in pairs(active_clients) do
-- prevent tsserver from starting if volar is already active
if client_.name == "volar" then
client.stop()
end
end
end
end,
})
return {
{
"neovim/nvim-lspconfig",
opts = {
servers = {
volar = {
filetypes = {
"javascript",
"typescript",
"vue",
},
},
},
},
},
{},
}

View File

@@ -1,21 +0,0 @@
return {
{
"folke/which-key.nvim",
event = "VeryLazy",
opts = {
defaults = {
mappings = {
{ "<leader>t", { name = "+test" } },
{ "<leader>gb", { name = "+blame" } },
{ "<leader>gd", { name = "+diffview" } },
{ "<leader>h", { name = "+harpoon" } },
{ "<leader>r", { name = "+run" } },
},
},
},
config = function(_, opts)
local wk = require("which-key")
wk.setup(opts)
end,
},
}

View File

@@ -1,4 +0,0 @@
return {
{ "folke/zen-mode.nvim" },
}