c'est le bordel un peu
This commit is contained in:
194
modules/common/nvim-cfg.nix
Normal file
194
modules/common/nvim-cfg.nix
Normal file
@@ -0,0 +1,194 @@
|
||||
# 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",
|
||||
},
|
||||
})
|
||||
'';
|
||||
}
|
||||
Reference in New Issue
Block a user