# This file configures Neovim with a set of plugins and settings to enhance the editing experience. {pkgs}: { basePlugins = with pkgs.vimPlugins; [ rose-pine lualine-nvim everforest nvim-tree-lua nvim-web-devicons nvim-lspconfig nvim-cmp cmp-nvim-lsp cmp-buffer cmp-path luasnip cmp_luasnip friendly-snippets conform-nvim indent-blankline-nvim nvim-autopairs copilot-vim ]; baseVimConfig = '' set number set relativenumber set cursorline set expandtab set shiftwidth=2 set tabstop=2 set smartindent set wrap set scrolloff=8 set sidescrolloff=8 set signcolumn=yes ''; baseLuaConfig = '' vim.g.mapleader = " " vim.g.maplocalleader = "," -- Style/Theme vim.opt.termguicolors = true vim.opt.background = "dark" require("rose-pine").setup({ variant = "main", -- "main", "moon" ou "dawn" }) vim.cmd.colorscheme("rose-pine") require("lualine").setup({ options = { theme = "everforest", globalstatus = true, } }) require("ibl").setup() -- File explorer vim.g.loadednetrw = 1 vim.g.loaded_netrwPlugin = 1 require("nvim-tree").setup({ view = { side = "left", width = 30, }, renderer = { group_empty = true, }, filters = { dotfiles = false, }, }) vim.keymap.set("n", "b", ":NvimTreeToggle", { noremap = true, silent = true, desc = "Toggle file tree", }) -- Diagnostics lisibles vim.diagnostic.config({ virtual_text = true, signs = true, underline = true, update_in_insert = false, severity_sort = true, }) -- Raccourcis LSP vim.api.nvim_create_autocmd("LspAttach", { callback = function(event) local opts = { buffer = event.buf, silent = true } vim.keymap.set("n", "gd", vim.lsp.buf.definition, opts) vim.keymap.set("n", "gD", vim.lsp.buf.declaration, opts) vim.keymap.set("n", "gr", vim.lsp.buf.references, opts) vim.keymap.set("n", "K", vim.lsp.buf.hover, opts) vim.keymap.set("n", "rn", vim.lsp.buf.rename, opts) vim.keymap.set({ "n", "v" }, "ca", vim.lsp.buf.code_action, opts) vim.keymap.set("n", "[d", vim.diagnostic.goto_prev, opts) vim.keymap.set("n", "]d", vim.diagnostic.goto_next, opts) vim.keymap.set("n", "f", function() require("conform").format({ async = true, lsp_format = "fallback", }) end, opts) end, }) -- Autocomplétion require("nvim-autopairs").setup({ disable_filetype = { "TelescopePrompt" , "vim" }, }) local cmp = require("cmp") local luasnip = require("luasnip") require("luasnip.loaders.from_vscode").lazy_load() cmp.setup({ snippet = { expand = function(args) luasnip.lsp_expand(args.body) end, }, mapping = cmp.mapping.preset.insert({ [""] = cmp.mapping.complete(), [""] = cmp.mapping.confirm({ select = true }), [""] = cmp.mapping.select_next_item(), [""] = cmp.mapping.select_prev_item(), }), sources = cmp.config.sources({ { name = "nvim_lsp" }, { name = "luasnip" }, { name = "path" }, { name = "buffer" }, }), }) local capabilities = require("cmp_nvim_lsp").default_capabilities() -- LSP Nix avec nixd vim.lsp.config("nixd", { cmd = { "nixd" }, filetypes = { "nix" }, capabilities = capabilities, settings = { nixd = { nixpkgs = { expr = "import { }", }, formatting = { command = { "alejandra" }, }, options = { nixos = { expr = '(builtins.getFlake (builtins.toString ./.)).nixosConfigurations."laptop".options', }, }, }, }, }) vim.lsp.enable("nixd") -- Formatage automatique avec alejandra require("conform").setup({ formatters_by_ft = { nix = { "alejandra" }, }, format_on_save = { timeout_ms = 1000, lsp_format = "fallback", }, }) ''; }