logo

42-Mon Setup Neovim

Voici mon guide d'installation perso pour un setup minimal de Neovim a 42.

1-Telecharger le fichier image de neovim.
curl -LO https://github.com/neovim/neovim/releases/latest/download/nvim.appimage
chmod u+x nvim.appimage
./nvim.appimage
2-Faire que neovim soit accessible depuis partout sur votre ordinateur.

Ajouter a votre fichier .zshrc l'alias qui pointe ver l'executable nvim afin de pouvoir le lancer depuis n'importe.

alias nvim=/mnt/nfs/homes/votre_login_42/nvim
3-Telecharger la distrib lazyvim.
  • Installer la distrib suivre les etapes presente dans ce lien: https://www.lazyvim.org/installation
  • Afin de voir toutes les icones il est preferable (pas obligatoire )de telecharger une nerdfont (police) disponible au lien suivant : https://www.nerdfonts.com/font-downloads
4-definir les tabulation comme reel.
  • Ajouter dans le fichier ~/.config/nvim/lua/config/keymaps.lua ceci:
-- ~/.config/nvim/lua/config/keymaps.lua
local function map(mode, lhs, rhs, opts)
  local options = { noremap = true, silent = true }
  if opts then
    options = vim.tbl_extend("force", options, opts)
  end
  vim.api.nvim_set_keymap(mode, lhs, rhs, options)
end

-- Utiliser des tabulations réelles (physiques) pour la touche Tab
vim.opt.expandtab = false -- Ne pas remplacer les tabulations par des espaces

map("i", "kk", "<Esc>")
map("n", "<leader>tk", "<C-w>t<C-w>K") -- change vertical to horizontal
map("n", "<leader>th", "<C-w>t<C-w>H") -- change horizontal to vertical

-- Move around splits using Ctrl + {h,j,k,l}
map("n", "<C-h>", "<C-w>h")
map("n", "<C-j>", "<C-w>j")
map("n", "<C-k>", "<C-w>k")
map("n", "<C-l>", "<C-w>l")
-- Désactiver les touches fléchées dans Neovim si vous voulez vous entrainer dans le dur decommenter :)
--[[
vim.api.nvim_set_keymap('n', '<Up>', '', { noremap = true, silent = true })
vim.api.nvim_set_keymap('n', '<Down>', '', { noremap = true, silent = true })
vim.api.nvim_set_keymap('n', '<Left>', '', { noremap = true, silent = true })
vim.api.nvim_set_keymap('n', '<Right>', '', { noremap = true, silent = true })

vim.api.nvim_set_keymap('i', '<Up>', '', { noremap = true, silent = true })
vim.api.nvim_set_keymap('i', '<Down>', '', { noremap = true, silent = true })
vim.api.nvim_set_keymap('i', '<Left>', '', { noremap = true, silent = true })
vim.api.nvim_set_keymap('i', '<Right>', '', { noremap = true, silent = true })
]]--

5-Installer les differents plugins.
  • Le chemin des fichiers a cree sont en haut de chaque code: (Ex:Cree le fichier ft_nvim.lua dans ~/.config/nvim/lua/plugins/ et ajouter le code suivant).
Plugin pour avoir le header de 42 :
-- ~/.config/nvim/lua/plugins/ft_nvim.lua
return {
  "vinicius507/ft_nvim",
  cmd = { "FtHeader", "Norme" },
  ft = { "c", "cpp" },
  config = function()
    require("ft_nvim").setup({
      header = {
        enable = true,
        username = "ascordil",
        email = "[email protected]",
      },
      norminette = {
        enable = true,
        cmd = "norminette",
        condition = function()
          return true
        end,
      },
    })
  end,
}
Plugin pour avoir un terminal accessible rapidement :
-- ~/.config/nvim/lua/plugins/toggleterm.lua
return {
  "akinsho/toggleterm.nvim",
  version = "*", -- Assurez-vous d'utiliser la dernière version
  config = function()
    require("toggleterm").setup({
      size = 20, -- Taille du terminal
      open_mapping = [[<c-\>]], -- Raccourci pour ouvrir le terminal
      direction = "horizontal", -- Direction du terminal (horizontal, vertical, float)
      shell = "/bin/zsh", -- Utiliser zsh comme shell
      close_on_exit = true, -- Fermer le terminal à la sortie
      start_in_insert = true, -- Commencer en mode insertion
      insert_mappings = true, -- Activer les mappages en mode insertion
      terminal_mappings = true, -- Activer les mappages pour le terminal
      highlights = {
        Normal = {
          guifg = "#ffffff", -- Couleur de texte
          guibg = "#1e1e1e", -- Couleur de fond
        },
        NormalFloat = {
          link = "Normal", -- Lien vers Normal pour les fenêtres flottantes
        },
      },
    })
  end,
}
Plugin pour avoir la norminette :
-- ~/.config/nvim/lua/plugins/norminette42.lua
return {
  "hardyrafael17/norminette42.nvim",
  config = function()
    local norminette = require("norminette")
    norminette.setup({
      runOnSave = true,
      maxErrorsToShow = 5,
      active = true,
    })
  end,
}
Plugin pour commenter rapidement avec les touches gcc:
-- ~/.config/nvim/lua/plugins/comment.lua
return {
  "numToStr/Comment.nvim",
  version = "*", -- Assurez-vous d'utiliser la dernière version
  config = function()
    require("Comment").setup({
      mappings = {
        basic = true, -- Active les mappages de base pour commenter/décommenter
        extra = true, -- Active les mappages supplémentaires
      },
      pre_hook = function(ctx)
        local U = require("Comment.utils")

        -- Si la ligne est vide, ne pas commenter
        if ctx.ctype == U.ctype.line then
          return require("ts_context_commentstring.utils").get_cursor_context()
        end
      end,
    })
  end,
}
Ces plugins sont optionnels mais donnent plus de style:
colorscheme:
-- ~/.config/nvim/lua/plugins/colorscheme.lua
return {


  -- add nord
  { "shaunsingh/nord.nvim" },
  -- add gruvbox
  { "ellisonleao/gruvbox.nvim" },

  -- tokyonight
  {
    "folke/tokyonight.nvim",
    lazy = true,
    opts = { style = "moon" },
  },

  -- catppuccin
  {
    "catppuccin/nvim",
    lazy = true,
    name = "catppuccin",
    opts = {
      integrations = {
        aerial = true,
        alpha = true,
        cmp = true,
        dashboard = true,
        flash = true,
        fzf = true,
        grug_far = true,
        gitsigns = true,
        headlines = true,
        illuminate = true,
        indent_blankline = { enabled = true },
        leap = true,
        lsp_trouble = true,
        mason = true,
        markdown = true,
        mini = true,
        native_lsp = {
          enabled = true,
          underlines = {
            errors = { "undercurl" },
            hints = { "undercurl" },
            warnings = { "undercurl" },
            information = { "undercurl" },
          },
        },
        navic = { enabled = true, custom_bg = "lualine" },
        neotest = true,
        neotree = true,
        noice = true,
        notify = true,
        semantic_tokens = true,
        snacks = true,
        telescope = true,
        treesitter = true,
        treesitter_context = true,
        which_key = true,
      },
    },
    specs = {
      {
        "akinsho/bufferline.nvim",
        optional = true,
        opts = function(_, opts)
          if (vim.g.colors_name or ""):find("catppuccin") then
            opts.highlights = require("catppuccin.groups.integrations.bufferline").get()
          end
        end,
      },
    },
  },
}
Plugin pour avoir le fond de neovim transparent (ajouter une image d'arriere plan dans votre terminal ):
-- ~/.config/nvim/lua/plugins/transparent.lua
return {
        { "xiyaowong/transparent.nvim", config = function()
            require('transparent').setup({
                enable = true, -- Activer la transparence
                extra_groups = { -- Ajouter des groupes supplémentaires si nécessaire
                    'Normal', 'NormalNC', 'Comment', 'SpecialComment',
                    'LineNr', 'SignColumn', 'EndOfBuffer'
                },
            })
        end },
}