195 lines
5.8 KiB
Nix
195 lines
5.8 KiB
Nix
# 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", "<leader>b", ":NvimTreeToggle<CR>", {
|
|
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", "<leader>rn", vim.lsp.buf.rename, opts)
|
|
vim.keymap.set({ "n", "v" }, "<leader>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", "<leader>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({
|
|
["<C-Space>"] = cmp.mapping.complete(),
|
|
["<CR>"] = cmp.mapping.confirm({ select = true }),
|
|
["<Tab>"] = cmp.mapping.select_next_item(),
|
|
["<S-Tab>"] = 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 <nixpkgs> { }",
|
|
},
|
|
|
|
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",
|
|
},
|
|
})
|
|
'';
|
|
}
|