Newest version of dotfiles with Ghostty, Fish, kickstart vim and zsh updates
This commit is contained in:
94
.config/nvim/lua/custom/config.lua
Normal file
94
.config/nvim/lua/custom/config.lua
Normal 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
|
||||
})
|
||||
183
.config/nvim/lua/custom/hydra.lua
Normal file
183
.config/nvim/lua/custom/hydra.lua
Normal 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 } },
|
||||
}
|
||||
})
|
||||
280
.config/nvim/lua/custom/lsp.lua
Normal file
280
.config/nvim/lua/custom/lsp.lua
Normal 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' })
|
||||
449
.config/nvim/lua/custom/plugins.lua
Normal file
449
.config/nvim/lua/custom/plugins.lua
Normal 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,
|
||||
}
|
||||
}
|
||||
5
.config/nvim/lua/custom/plugins/init.lua
Normal file
5
.config/nvim/lua/custom/plugins/init.lua
Normal 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 {}
|
||||
Reference in New Issue
Block a user