From 82641f61be1d27353fe843b164de9e218100726a Mon Sep 17 00:00:00 2001 From: DuN0z Date: Wed, 22 Oct 2025 06:57:49 +0200 Subject: [PATCH] Add: first import --- .gitignore | 2 + TODO.md | 59 +++++++++++ ftplugin/conf.lua | 2 + ftplugin/cpp.lua | 13 +++ ftplugin/dockerfile.lua | 20 ++++ ftplugin/lua.lua | 8 ++ ftplugin/make.lua | 7 ++ ftplugin/markdown.lua | 13 +++ ftplugin/meson.lua | 11 ++ ftplugin/python.lua | 10 ++ ftplugin/rst.lua | 18 ++++ ftplugin/yaml.lua | 8 ++ init.lua | 11 ++ lua/autocmds.lua | 117 +++++++++++++++++++++ lua/keymaps.lua | 44 ++++++++ lua/plugins/basic.lua | 24 +++++ lua/plugins/comments.lua | 16 +++ lua/plugins/distraction-free.lua | 45 ++++++++ lua/plugins/lsp.lua | 174 +++++++++++++++++++++++++++++++ lua/plugins/tools.lua | 49 +++++++++ lua/plugins/ui.lua | 105 +++++++++++++++++++ lua/pm.lua | 19 ++++ lua/snippets/cpp.lua | 25 +++++ 23 files changed, 800 insertions(+) create mode 100644 .gitignore create mode 100644 TODO.md create mode 100644 ftplugin/conf.lua create mode 100644 ftplugin/cpp.lua create mode 100644 ftplugin/dockerfile.lua create mode 100644 ftplugin/lua.lua create mode 100644 ftplugin/make.lua create mode 100644 ftplugin/markdown.lua create mode 100644 ftplugin/meson.lua create mode 100644 ftplugin/python.lua create mode 100644 ftplugin/rst.lua create mode 100644 ftplugin/yaml.lua create mode 100644 init.lua create mode 100644 lua/autocmds.lua create mode 100644 lua/keymaps.lua create mode 100644 lua/plugins/basic.lua create mode 100644 lua/plugins/comments.lua create mode 100644 lua/plugins/distraction-free.lua create mode 100644 lua/plugins/lsp.lua create mode 100644 lua/plugins/tools.lua create mode 100644 lua/plugins/ui.lua create mode 100644 lua/pm.lua create mode 100644 lua/snippets/cpp.lua diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..78f465c --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +.DS_Store +lazy-lock.json diff --git a/TODO.md b/TODO.md new file mode 100644 index 0000000..a6893b5 --- /dev/null +++ b/TODO.md @@ -0,0 +1,59 @@ +## Productivité boostée + +TODO: Undotree +Vim-fugitive +Vimux +Via Vimux : gestion pomodoro +Afficher les images dans Telescope file browser +Afficher les stats distraction free à la demande +Recherche : telescope & telescope-fzf-native +Templates : skeleton.nvim +Sticky Content: nvim-treesitter-context +TODO: Manage maskdown tasks as Obsidian do +Kanban: un plugin existe ? +Tableau: Aide mise en page +Autosave: plugin ? +Move line up and down in visual mode +uppercase word +lowercase word +upload visual to pastebin +Automatic folding (si 2 ##, on ferme le premier par exemple) +Se déplacer de titre en titre, de function en function +Increase, decrease heading +rajouter le mot sous curseur au dictionnaire +Markdown TOC +Markdown: create file with urlize title +Avoir le nombre de mot y compris en ZenMode +Markdown preview +nvim as pager +Avoir la liste des fonction dans une barre à droite ? +Voiir quel images docker tournent +Désactiver l’enregistrement avec q +multicursor +regarder markview +key-analyser.nvim +nvim-surround +Filetype toml + +## Dev ultime + +Autoformat et linting : null-ls.nvim, formatter.nvim +Gestion des LSP : lsp-zero.nvim, trouble.nvim +navigation de projets: neogit, gitsigns.nvim +indent guides +commit git + +## Look & Feel + + +## ftplugin + +Dockerfile + +# Snippets + +Template file +code exemple (tex, md, rst, bash, python, etc ...) +include real datetime + + diff --git a/ftplugin/conf.lua b/ftplugin/conf.lua new file mode 100644 index 0000000..6241ee3 --- /dev/null +++ b/ftplugin/conf.lua @@ -0,0 +1,2 @@ +-- 📄 Déclare le filetype et les options simples +vim.opt_local.commentstring = "# %s" -- Commentaires avec # diff --git a/ftplugin/cpp.lua b/ftplugin/cpp.lua new file mode 100644 index 0000000..162e369 --- /dev/null +++ b/ftplugin/cpp.lua @@ -0,0 +1,13 @@ +-- ftplugin/cpp.lua + +-- Configuration des tabulations pour le C++ +vim.bo.expandtab = true -- Utiliser des espaces +vim.bo.shiftwidth = 4 -- Largeur des indentations +vim.bo.tabstop = 4 -- Taille d'une tabulation + +-- Activer le pliage basé sur la syntaxe +vim.wo.foldmethod = 'syntax' + +-- Activer les numéros relatifs pour un meilleur mouvement dans le code +vim.wo.relativenumber = true + diff --git a/ftplugin/dockerfile.lua b/ftplugin/dockerfile.lua new file mode 100644 index 0000000..ab9e727 --- /dev/null +++ b/ftplugin/dockerfile.lua @@ -0,0 +1,20 @@ +-- Indentation propre +vim.opt_local.expandtab = true -- Utilise des espaces au lieu de tabs +vim.opt_local.shiftwidth = 2 -- Indentation : 2 espaces +vim.opt_local.tabstop = 2 -- Largeur d'une tabulation : 2 + +-- Mise en surbrillance des instructions Docker +vim.cmd([[ + syntax keyword dockerfileInstruction FROM RUN CMD LABEL MAINTAINER EXPOSE ENV ADD COPY ENTRYPOINT VOLUME USER WORKDIR ARG ONBUILD STOPSIGNAL HEALTHCHECK SHELL + highlight link dockerfileInstruction Keyword +]]) + +-- 🛠️ Autoformat avec hadolint (si installé) +if vim.fn.executable("hadolint") == 1 then + vim.api.nvim_create_autocmd("BufWritePost", { + pattern = "Dockerfile", + callback = function() + vim.cmd("!hadolint %") + end, + }) +end diff --git a/ftplugin/lua.lua b/ftplugin/lua.lua new file mode 100644 index 0000000..2aca397 --- /dev/null +++ b/ftplugin/lua.lua @@ -0,0 +1,8 @@ +-- Indentation verrouillée à 4 espaces +vim.bo.expandtab = true -- Remplace les tabs par des espaces +vim.bo.shiftwidth = 4 -- Indentation : 4 espaces +vim.bo.tabstop = 4 -- Largeur d'une tabulation : 4 +vim.bo.softtabstop = 4 -- Tabulation en édition : 4 +vim.bo.autoindent = true -- Copie l’indentation précédente +vim.bo.smartindent = true -- Indentation intelligente +vim.opt.number = true diff --git a/ftplugin/make.lua b/ftplugin/make.lua new file mode 100644 index 0000000..74d8338 --- /dev/null +++ b/ftplugin/make.lua @@ -0,0 +1,7 @@ +-- Indentation verrouillée à 4 espaces +vim.bo.expandtab = true -- Remplace les tabs par des espaces +vim.bo.shiftwidth = 4 -- Indentation : 4 espaces +vim.bo.tabstop = 4 -- Largeur d'une tabulation : 4 +vim.bo.softtabstop = 4 -- Tabulation en édition : 4 +vim.bo.autoindent = true -- Copie l’indentation précédente +vim.bo.smartindent = true -- Indentation intelligente diff --git a/ftplugin/markdown.lua b/ftplugin/markdown.lua new file mode 100644 index 0000000..4c874d1 --- /dev/null +++ b/ftplugin/markdown.lua @@ -0,0 +1,13 @@ +-- Activation automatique de Zen Mode pour Markdown +-- vim.api.nvim_create_autocmd("BufReadPost", { +-- pattern = { "*.md", "*.markdown" }, +-- callback = function() +-- if not vim.g.zen_mode_active then +-- vim.defer_fn(function() +-- vim.cmd("ZenMode") -- ⚡ Active Zen Mode +-- print(" Zen Mode activé pour Markdown !") +-- end, 200) -- Délai pour éviter les conflits +-- end +-- end, +-- }) + diff --git a/ftplugin/meson.lua b/ftplugin/meson.lua new file mode 100644 index 0000000..93afd5d --- /dev/null +++ b/ftplugin/meson.lua @@ -0,0 +1,11 @@ +-- ftplugin/meson.lua +-- Configuration des tabulations pour Meson +vim.bo.expandtab = true -- Utiliser des espaces au lieu de tabulations +vim.bo.shiftwidth = 4 -- Largeur des indentations (4 espaces) +vim.bo.tabstop = 4 -- Taille d'une tabulation + +-- Activer la coloration syntaxique (si désactivée par défaut) +vim.cmd('syntax on') + +-- Définir le formatage automatique +vim.bo.formatoptions = vim.bo.formatoptions .. 'cqrn' -- Respecter les retours à la ligne et auto-indent diff --git a/ftplugin/python.lua b/ftplugin/python.lua new file mode 100644 index 0000000..2861ffc --- /dev/null +++ b/ftplugin/python.lua @@ -0,0 +1,10 @@ +-- LSP Pyright +require("lspconfig").pyright.setup({}) + +-- Autoformat avec Black à l'enregistrement +vim.api.nvim_create_autocmd("BufWritePre", { + pattern = "*.py", + callback = function() + vim.cmd("Black") + end, +}) diff --git a/ftplugin/rst.lua b/ftplugin/rst.lua new file mode 100644 index 0000000..c7e503a --- /dev/null +++ b/ftplugin/rst.lua @@ -0,0 +1,18 @@ +vim.defer_fn(function() + vim.cmd("ZenMode") +end, 100) + +-- Activation automatique de Zen Mode pour RST +vim.api.nvim_create_autocmd("BufReadPost", { + pattern = "*.rst", + callback = function() + if not vim.g.zen_mode_active then + vim.defer_fn(function() + vim.cmd("ZenMode") -- Active Zen Mode après chargement + print(" Zen Mode activé pour RST !") + end, 200) -- Délai pour éviter les conflits + end + end, +}) + + diff --git a/ftplugin/yaml.lua b/ftplugin/yaml.lua new file mode 100644 index 0000000..42b7a21 --- /dev/null +++ b/ftplugin/yaml.lua @@ -0,0 +1,8 @@ +-- 🔧 Configuration propre pour les fichiers YAML +vim.bo.expandtab = true -- Utilise des espaces au lieu de tabs +vim.bo.shiftwidth = 2 -- Indentation de 2 espaces +vim.bo.tabstop = 2 -- Tabulation de 2 espaces +vim.bo.softtabstop = 2 -- Tabulation douce de 2 espaces +vim.bo.autoindent = true -- Indentation automatique +vim.bo.smartindent = true -- Indentation intelligente +vim.bo.fileformat = "unix" -- Format de fin de ligne diff --git a/init.lua b/init.lua new file mode 100644 index 0000000..217b35d --- /dev/null +++ b/init.lua @@ -0,0 +1,11 @@ +-- Optimise le temps de chargement +vim.loader.enable() + +vim.g.mapleader = "," +vim.g.maplocalleader = "," + + +require("autocmds") +require("keymaps") +require("pm") +require("luasnip.loaders.from_lua").load({ paths = "~/.config/nvim/lua/snippets/" }) diff --git a/lua/autocmds.lua b/lua/autocmds.lua new file mode 100644 index 0000000..4cdfcc6 --- /dev/null +++ b/lua/autocmds.lua @@ -0,0 +1,117 @@ +-- Ouvrir lz terminal dans une fenetre flottante pour le make +vim.cmd([[ +autocmd FileType cpp setlocal nobuflisted +let g:makeprg="make | tee /tmp/make_output" " Ne pas bloquer après make +command! Make silent execute 'belowright terminal make' +]]) + +-- Redimensionne les fenêtres lors du redimensionnement du terminal +vim.api.nvim_create_autocmd("VimResized", { + group = vim.api.nvim_create_augroup("win_autoresize", { clear = true }), + desc = "Auto-resize windows on resizing operation", + command = "wincmd =", +}) + +-- Désactive le highlight après la recherche +vim.api.nvim_create_autocmd("InsertEnter", { + callback = function() + vim.cmd("nohlsearch") + end, +}) + +-- Activer ZenMode pour les fichiers Markdown +vim.api.nvim_create_autocmd({"BufEnter","BufWinEnter"}, { + pattern = { "*.md", "*.wiki" }, + callback = function() + vim.defer_fn(function () + if not require("zen-mode.view").is_open() then + vim.cmd("ZenMode") + end + end, 100) + end +}) + +-- Désactiver ZenMode lors du changement de buffer +vim.api.nvim_create_autocmd("BufLeave", { + pattern = "*", + callback = function() + if require("zen-mode.view").is_open() then + vim.cmd("ZenMode") + end + end +}) + +local function format_and_restore() + vim.cmd("normal! mz") -- Place une marque 'z' à la position actuelle + vim.cmd([[%s/\s\+$//e]]) -- Supprime les espaces inutiles en fin de ligne + --vim.cmd("normal! gg=G") -- Formate tout le fichier + vim.cmd("normal! `z") -- Retourne à la marque 'z' +end +-- Configure l'autocommand pour le formatage à la sauvegarde +vim.api.nvim_create_autocmd("BufWritePre", { + pattern = "*", -- Applique à tous les fichiers + callback = function() + local ft = vim.bo.filetype -- Récupère le type de fichier + + if ft == "cpp" or ft == "c" then + -- Utilise LSP pour formater le C et C++ + vim.lsp.buf.format({ async = false }) + elseif ft == "python" then + -- Utilise Black pour formater le Python + vim.cmd("Black") + elseif ft ~= "markdown" then + format_and_restore() + end + end, +}) +-- Vérifie si tmux est installé +local function is_tmux_installed() + return vim.fn.executable("tmux") == 1 +end + +-- Vérifie si on est dans une session tmux +local function is_in_tmux() + return os.getenv("TMUX") ~= nil +end + +-- Récupère la couleur d'un groupe de highlight +local function get_hl_color(hl, attr) + local ok, hl_data = pcall(vim.api.nvim_get_hl, 0, { name = hl }) + if ok and hl_data[attr] then + return string.format("#%06x", hl_data[attr]) + else + return "#444444" -- Gris par défaut si rien trouvé + end +end + +-- 📡 Synchronise les couleurs avec Tmux selon le mode +local function set_tmux_status(mode) + if not (is_tmux_installed() and is_in_tmux()) then + return -- Ne fait rien si tmux n'est pas dispo + end + + local mode_colors = { + n = get_hl_color("MiniStatuslineModeNormal", "bg"), + i = get_hl_color("MiniStatuslineModeInsert", "bg"), + v = get_hl_color("MiniStatuslineModeVisual", "bg"), + V = get_hl_color("MiniStatuslineModeVisual", "bg"), + [""] = get_hl_color("MiniStatuslineModeVisual", "bg"), + R = get_hl_color("MiniStatuslineModeReplace", "bg"), + c = get_hl_color("MiniStatuslineModeCommand", "bg"), + } + + local color = mode_colors[mode] or get_hl_color("MiniStatuslineModeNormal", "bg") + os.execute(string.format("tmux set-option -g status-bg '%s'", color)) +end + +-- Active la synchronisation Tmux ↔ Neovim +if is_tmux_installed() and is_in_tmux() then + vim.api.nvim_create_autocmd("ModeChanged", { + pattern = "*", + callback = function() + local mode = vim.fn.mode() + set_tmux_status(mode) + end, + }) +end + diff --git a/lua/keymaps.lua b/lua/keymaps.lua new file mode 100644 index 0000000..6138f94 --- /dev/null +++ b/lua/keymaps.lua @@ -0,0 +1,44 @@ +vim.keymap.set('v', '', '"+y', { noremap = true }) +vim.keymap.set('n', '', '"+p', { noremap = true }) +-- Keymaps +vim.keymap.set("n", "fb", function() + require("telescope").extensions.file_browser.file_browser() +end, { desc="file browser"} ) +-- -- Navigation entre buffers en mode NORMAL +-- vim.keymap.set("n", "", ":bnext", { desc = "⬅️ Buffer précédent" }) +-- vim.keymap.set("n", "", ":bprevious", { desc = "⬅️ Buffer précédent" }) +-- +-- -- Indentation en mode INSERT et VISUEL +-- vim.keymap.set("i", "", "", { desc = "➡️ Tabulation" }) +-- vim.keymap.set("v", "", ">gv", { desc = "➡️ Indenter la sélection" }) +-- vim.keymap.set("v", "", "