Files
monovim/init.lua
2026-04-08 00:39:08 +02:00

114 lines
3.9 KiB
Lua

-- ~/.config/nvim/init.lua
-- 1. BOOTSTRAP PAQ (Der Manager selbst)
local data_path = vim.fn.stdpath("data") .. "/site/pack/paqs/start/"
local paq_path = data_path .. "paq-nvim"
if vim.fn.empty(vim.fn.glob(paq_path)) > 0 then
print("Installiere Paq...")
vim.fn.system({ "git", "clone", "--depth=1", "https://github.com/savq/paq-nvim.git", paq_path })
vim.cmd("packadd paq-nvim")
end
-- 2. PLUGINS LADEN
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(".*/(.*)")
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
})
end
-- 6. KEYMAPS (LEADER-TASTE)
vim.g.mapleader = " "
vim.keymap.set("n", "<leader>e", vim.diagnostic.setqflist) -- Fehler in Liste zeigen
-- Leertaste + b öffnet das Dashboard
vim.keymap.set("n", "<leader>b", function()
local ok, dashboard = pcall(require, "config.dashboard")
if ok then
dashboard.open()
else
print("Dashboard konnte nicht geladen werden!")
end
end, { desc = "Zurück zum Dashboard" })
local updater =require("core.update")
vim.keymap.set("n", "<leader>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({})
end
-- 8. DASHBOARD LOGIK (VERHINDERT LEERE BUFFER)
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
end
end)
end
-- LAZYVIM-STYLE CLOSE: Leertaste + d
vim.keymap.set("n", "<leader>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
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" })
-- 9. AUTOCMDS FÜR DAS DASHBOARD
-- Beim Starten ohne Datei
vim.api.nvim_create_autocmd("VimEnter", {
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 <leader>d)
vim.api.nvim_create_autocmd("BufDelete", {
callback = force_dashboard
})