diff --git a/init.lua b/init.lua index eea471b..daa3aee 100644 --- a/init.lua +++ b/init.lua @@ -1,6 +1,8 @@ -- ~/.config/nvim/init.lua --- 1. BOOTSTRAP PAQ (Der Manager selbst) +-- ============================================================================= +-- 1. BOOTSTRAP PAQ (Plugin Manager Installation) +-- ============================================================================= local data_path = vim.fn.stdpath("data") .. "/site/pack/paqs/start/" local paq_path = data_path .. "paq-nvim" @@ -10,104 +12,158 @@ if vim.fn.empty(vim.fn.glob(paq_path)) > 0 then vim.cmd("packadd paq-nvim") end --- 2. PLUGINS LADEN +-- ============================================================================= +-- 2. PLUGINS LADEN & AUTO-INSTALL +-- ============================================================================= local plugins = require("plugins") local paq = require("paq") paq(plugins) --- 3. AUTO-CHECK FÜR NEUE PLUGINS local missing_plugins = false for _, plugin in ipairs(plugins) do - local name = plugin:match(".*/(.*)") + local plugin_name = type(plugin) == "table" and plugin[1] or plugin + local name = plugin_name:match(".*/(.*)") if name and vim.fn.empty(vim.fn.glob(data_path .. name)) > 0 then missing_plugins = true break end end -if missing_plugins then paq.install() end --- 4. DEINE RUHE-OPTIONEN (A11y / Screenreader optimiert) -local opt = vim.opt -opt.number = false -- Keine Zeilennummern -opt.relativenumber = false -- Keine relativen Nummern -opt.showcmd = false -- Keine Anzeige unfertiger Befehle -opt.laststatus = 0 -- Statuszeile aus (weniger Lärm) -opt.ruler = false -- Keine Cursor-Position unten rechts -opt.showmode = false -- "-- INSERT --" Anzeige aus -opt.mouse = "" -- Maus deaktiviert -opt.shortmess:append("atI") -- Kürzere Meldungen, kein Intro-Screen -opt.hidden = true -- Buffer im Hintergrund erlauben - --- 5. LSP SCHUTZ & DIAGNOSTICS -local ok_lsp, lspconfig = pcall(require, "lspconfig") -if ok_lsp then - vim.diagnostic.config({ - virtual_text = false, -- Verhindert, dass Text in der Zeile "schwebt" - underline = true, -- Fehler werden unterstrichen - signs = false, -- Keine Icons am Rand - }) +if missing_plugins then + print("Neue Plugins gefunden. Installiere... Bitte danach Neovim neu starten.") + paq.install() end --- 6. KEYMAPS (LEADER-TASTE) +-- ============================================================================= +-- 3. EDITOR OPTIONEN (A11y / Screenreader optimiert) +-- ============================================================================= +local opt = vim.opt +opt.number = false +opt.relativenumber = false +opt.showcmd = false +opt.laststatus = 0 +opt.ruler = false +opt.showmode = false +opt.mouse = "" +opt.shortmess:append("atI") +opt.hidden = true +opt.termguicolors = true -- Wichtig für moderne LSPs/UI + +-- ============================================================================= +-- 4. DIAGNOSTICS (Fehleranzeige) +-- ============================================================================= +vim.diagnostic.config({ + virtual_text = false, -- Kein Text-Rauschen in der Zeile + underline = true, -- Fehler werden unterstrichen + signs = false, -- Keine Icons am Rand (weniger Lärm) + update_in_insert = false, +}) + +-- ============================================================================= +-- 5. KEYMAPS (Leader: Leertaste) +-- ============================================================================= vim.g.mapleader = " " -vim.keymap.set("n", "e", vim.diagnostic.setqflist) -- Fehler in Liste zeigen --- Leertaste + b öffnet das Dashboard + +-- Fehlerliste (Quickfix) öffnen +vim.keymap.set("n", "e", vim.diagnostic.setqflist, { desc = "Fehlerliste zeigen" }) + +-- Dashboard öffnen vim.keymap.set("n", "b", function() local ok, dashboard = pcall(require, "config.dashboard") - if ok then - dashboard.open() - else - print("Dashboard konnte nicht geladen werden!") - end + if ok then dashboard.open() else print("Dashboard nicht gefunden!") end end, { desc = "Zurück zum Dashboard" }) -local updater =require("core.update") -vim.keymap.set("n", "U", updater.update, { desc = "Update MonoVim Core" }) --- 7. MINI.BUFREMOVE SETUP -local ok_mini, bufremove = pcall(require, "mini.bufremove") -if ok_mini then - bufremove.setup({}) + +-- Core Update +local ok_up, updater = pcall(require, "core.update") +if ok_up then + vim.keymap.set("n", "U", updater.update, { desc = "Update MonoVim Core" }) end --- 8. DASHBOARD LOGIK (VERHINDERT LEERE BUFFER) +-- ============================================================================= +-- 6. MASON & LSP SETUP (VERZÖGERT FÜR STABILITÄT) +-- ============================================================================= +vim.schedule(function() + local ok_mason, mason = pcall(require, "mason") + local ok_mason_lsp, mason_lspconfig = pcall(require, "mason-lspconfig") + local ok_lspconfig, lspconfig = pcall(require, "lspconfig") + + if ok_mason and ok_mason_lsp and ok_lspconfig then + mason.setup({ + ui = { border = "rounded" } + }) + + mason_lspconfig.setup({ + ensure_installed = { "basedpyright", "rust_analyzer", "lua_ls" }, + }) + + -- Sicherheitscheck: Existiert die Funktion wirklich? + if mason_lspconfig.setup_handlers then + mason_lspconfig.setup_handlers({ + -- Standard-Handler für jeden installierten Server + function(server_name) + local opts = {} + + -- Falls nvim-cmp für Autovervollständigung genutzt wird + local ok_cmp, cmp_lsp = pcall(require, "cmp_nvim_lsp") + if ok_cmp then + opts.capabilities = cmp_lsp.default_capabilities() + end + + lspconfig[server_name].setup(opts) + end, + + -- Spezial-Konfiguration für Lua (verhindert 'vim' Warnungen) + ["lua_ls"] = function() + lspconfig.lua_ls.setup({ + settings = { + Lua = { + diagnostics = { globals = { "vim" } } + } + } + }) + end, + }) + end + end +end) + +-- ============================================================================= +-- 7. BUFFER MANAGEMENT & DASHBOARD LOGIK +-- ============================================================================= +local ok_mini, bufremove = pcall(require, "mini.bufremove") +if ok_mini then bufremove.setup({}) end + local function force_dashboard() vim.schedule(function() local listed = vim.fn.getbufinfo({buflisted = 1}) - -- Wenn keine Buffer mehr da sind ODER nur noch ein leerer Buffer existiert if #listed == 0 or (#listed == 1 and listed[1].name == "" and vim.bo[listed[1].bufnr].filetype == "") then local ok_dash, dashboard = pcall(require, "config.dashboard") - if ok_dash then - dashboard.open() - end + if ok_dash then dashboard.open() end end end) end --- LAZYVIM-STYLE CLOSE: Leertaste + d +-- Buffer schließen (Speichern-Abfrage integriert) vim.keymap.set("n", "d", function() if vim.bo.modified then local choice = vim.fn.confirm("Änderungen speichern?", "&Ja\n&Nein\n&Abbrechen", 1) - if choice == 1 then - vim.cmd("write") - if ok_mini then bufremove.delete(0, false) else vim.cmd("bd") end - elseif choice == 2 then - if ok_mini then bufremove.delete(0, true) else vim.cmd("bd!") end + if choice == 1 then + vim.cmd("write") + elseif choice == 3 then + return end - else - if ok_mini then bufremove.delete(0, false) else vim.cmd("bd") end end -end, { desc = "Buffer schließen und Dashboard prüfen" }) + + if ok_mini then + bufremove.delete(0, true) + else + vim.cmd("bd!") + end +end, { desc = "Buffer schließen" }) --- 9. AUTOCMDS FÜR DAS DASHBOARD --- Beim Starten ohne Datei -vim.api.nvim_create_autocmd("VimEnter", { +-- Autocommands für Dashboard (beim Start und beim Löschen von Buffern) +vim.api.nvim_create_autocmd({ "VimEnter", "BufDelete" }, { callback = function() - if vim.fn.argc() == 0 and vim.api.nvim_buf_get_name(0) == "" then - force_dashboard() - end - end, -}) - --- Wenn ein Buffer gelöscht wird (z.B. durch :bd oder d) -vim.api.nvim_create_autocmd("BufDelete", { - callback = force_dashboard -}) + force_dashboard() + end +}) \ No newline at end of file diff --git a/lua/.DS_Store b/lua/.DS_Store index 2dbca32..bed58e7 100644 Binary files a/lua/.DS_Store and b/lua/.DS_Store differ diff --git a/lua/plugins.lua b/lua/plugins.lua index e14b1cf..76ab40e 100644 --- a/lua/plugins.lua +++ b/lua/plugins.lua @@ -2,6 +2,8 @@ return { "savq/paq-nvim", -- Der Manager selbst "neovim/nvim-lspconfig", -- LSP Support "nvim-treesitter/nvim-treesitter", -- Syntax Highlighting + "williamboman/mason.nvim", + "williamboman/mason-lspconfig.nvim", "tpope/vim-fugitive", "echasnovski/mini.nvim", -} \ No newline at end of file +}