diff --git a/init.lua b/init.lua new file mode 100644 index 0000000..eb62583 --- /dev/null +++ b/init.lua @@ -0,0 +1,36 @@ +-- Désactive l'avertissement de dépréciation de nvim-lspconfig +vim.g.lspconfig_suppress_deprecation_warning = true +-- Au lieu de : set number +vim.opt.number = true +vim.opt.relativenumber = true -- Très utile pour les sauts de ligne en tant que dev + +-- Indentation (Python/C friendly) +vim.opt.tabstop = 4 +vim.opt.shiftwidth = 4 +vim.opt.expandtab = true + +-- Recherche +vim.opt.ignorecase = true +vim.opt.smartcase = true + +-- Clipboard (pour copier vers l'OS directement) +vim.opt.clipboard = "unnamedplus" + +-- 1. Définir la touche Leader (Espace est le standard moderne) +vim.g.mapleader = " " + +-- 2. Installer Lazy.nvim si absent +local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" +if not vim.loop.fs_stat(lazypath) then + vim.fn.system({ + "git", "clone", "--filter=blob:none", + "https://github.com/folke/lazy.nvim.git", "--branch=stable", lazypath, + }) +end +vim.opt.rtp:prepend(lazypath) + +-- 3. Charger tes options et tes plugins +require("core.options") +require("core.keymaps") + +require("lazy").setup("plugins") -- Il va chercher les fichiers dans lua/plugins/ diff --git a/lazy-lock.json b/lazy-lock.json new file mode 100644 index 0000000..785b792 --- /dev/null +++ b/lazy-lock.json @@ -0,0 +1,12 @@ +{ + "catppuccin": { "branch": "main", "commit": "12c004cde3f36cb1d57242f1e6aac46b09a0e5b4" }, + "lazy.nvim": { "branch": "main", "commit": "306a05526ada86a7b30af95c5cc81ffba93fef97" }, + "lualine.nvim": { "branch": "master", "commit": "47f91c416daef12db467145e16bed5bbfe00add8" }, + "mason.nvim": { "branch": "main", "commit": "44d1e90e1f66e077268191e3ee9d2ac97cc18e65" }, + "nvim-lspconfig": { "branch": "master", "commit": "2163c54bb6cfec53e3e555665ada945b8c8331b9" }, + "nvim-tree.lua": { "branch": "master", "commit": "4b30847c91d498446cb8440c03031359b045e050" }, + "nvim-treesitter": { "branch": "main", "commit": "5cb05e1b0fa3c469958a2b26f36b3fe930af221c" }, + "nvim-web-devicons": { "branch": "master", "commit": "737cf6c657898d0c697311d79d361288a1343d50" }, + "plenary.nvim": { "branch": "master", "commit": "b9fd5226c2f76c951fc8ed5923d85e4de065e509" }, + "telescope.nvim": { "branch": "master", "commit": "d90956833d7c27e73c621a61f20b29fdb7122709" } +} diff --git a/lua/core/keymaps.lua b/lua/core/keymaps.lua new file mode 100644 index 0000000..7dc4515 --- /dev/null +++ b/lua/core/keymaps.lua @@ -0,0 +1,24 @@ +local keymap = vim.keymap.set + +-- Mieux gérer les splits (Fenêtres) +keymap("n", "v", ":vsplit", { desc = "Split vertical" }) +keymap("n", "h", ":split", { desc = "Split horizontal" }) + +-- Navigation entre les splits avec Ctrl + direction (comme dans tmux) +keymap("n", "", "h") +keymap("n", "", "j") +keymap("n", "", "k") +keymap("n", "", "l") + +-- Gestion des Buffers (les fichiers ouverts) +keymap("n", "bn", ":bnext", { desc = "Buffer suivant" }) +keymap("n", "bp", ":bprev", { desc = "Buffer précédent" }) +keymap("n", "bd", ":bdelete", { desc = "Fermer le buffer" }) + +-- Garder le curseur au milieu lors des sauts de page (confort visuel) +keymap("n", "", "zz") +keymap("n", "", "zz") + +-- Déplacer des blocs de texte en mode Visuel (Alt + j/k) +keymap("v", "J", ":m '>+1gv=gv") +keymap("v", "K", ":m '<-2gv=gv") diff --git a/lua/core/options.lua b/lua/core/options.lua new file mode 100644 index 0000000..473a0f4 diff --git a/lua/plugins/lsp.lua b/lua/plugins/lsp.lua new file mode 100644 index 0000000..e820c92 --- /dev/null +++ b/lua/plugins/lsp.lua @@ -0,0 +1,27 @@ +return { + { + "williamboman/mason.nvim", + config = function() + require("mason").setup() + end + }, + { + "neovim/nvim-lspconfig", + config = function() + -- AU LIEU DE : local lspconfig = require('lspconfig') + -- ON UTILISE DIRECTEMENT L'API 0.11 : + + -- Configuration pour Python + vim.lsp.config('pyright', {}) + + -- Configuration pour C/C++ + vim.lsp.config('clangd', {}) + + -- Configuration pour Bash + vim.lsp.config('bashls', {}) + + -- Note : Si tu veux ajouter des options spécifiques plus tard, + -- c'est dans le deuxième argument {} qu'on les met. + end + } +} diff --git a/lua/plugins/telescope.lua b/lua/plugins/telescope.lua new file mode 100644 index 0000000..3cfc237 --- /dev/null +++ b/lua/plugins/telescope.lua @@ -0,0 +1,9 @@ +return { + 'nvim-telescope/telescope.nvim', tag = '0.1.5', + dependencies = { 'nvim-lua/plenary.nvim' }, + config = function() + local builtin = require('telescope.builtin') + vim.keymap.set('n', 'ff', builtin.find_files, {}) -- Recherche fichier + vim.keymap.set('n', 'fg', builtin.live_grep, {}) -- Recherche texte (nécessite ripgrep) + end +} diff --git a/lua/plugins/tree.lua b/lua/plugins/tree.lua new file mode 100644 index 0000000..d7edff4 --- /dev/null +++ b/lua/plugins/tree.lua @@ -0,0 +1,8 @@ +return { + "nvim-tree/nvim-tree.lua", + dependencies = { "nvim-tree/nvim-web-devicons" }, + config = function() + require("nvim-tree").setup() + vim.keymap.set('n', 'e', ':NvimTreeToggle') -- Espace + e pour ouvrir/fermer + end +} diff --git a/lua/plugins/treesitter.lua b/lua/plugins/treesitter.lua new file mode 100644 index 0000000..bb908a0 --- /dev/null +++ b/lua/plugins/treesitter.lua @@ -0,0 +1,17 @@ +return { + { + "nvim-treesitter/nvim-treesitter", + build = ":TSUpdate", + config = function() + -- On utilise pcall pour éviter de crash si le plugin n'est pas encore là + local status, ts = pcall(require, "nvim-treesitter.configs") + if not status then return end + + ts.setup({ + ensure_installed = { "lua", "vim", "vimdoc", "bash", "python", "c" }, + highlight = { enable = true }, + indent = { enable = true }, + }) + end + } +} diff --git a/lua/plugins/ui.lua b/lua/plugins/ui.lua new file mode 100644 index 0000000..459b7c7 --- /dev/null +++ b/lua/plugins/ui.lua @@ -0,0 +1,9 @@ +return { + -- Thème + { "catppuccin/nvim", name = "catppuccin", priority = 1000, + config = function() vim.cmd.colorscheme "catppuccin" end }, + + -- Barre de statut + { "nvim-lualine/lualine.nvim", dependencies = { "nvim-tree/nvim-web-devicons" }, + config = function() require('lualine').setup() end }, +}