diff options
Diffstat (limited to 'modules/tools')
| -rw-r--r-- | modules/tools/editor/neovim/config/options.lua | 16 | ||||
| -rw-r--r-- | modules/tools/editor/neovim/default.nix | 30 | ||||
| -rw-r--r-- | modules/tools/editor/neovim/plugins/config/base16.mustache.lua (renamed from modules/tools/editor/neovim/plugins/base16.mustache.lua) | 0 | ||||
| -rw-r--r-- | modules/tools/editor/neovim/plugins/config/comment.lua (renamed from modules/tools/editor/neovim/plugins/comment.lua) | 0 | ||||
| -rw-r--r-- | modules/tools/editor/neovim/plugins/config/default.nix | 19 | ||||
| -rw-r--r-- | modules/tools/editor/neovim/plugins/config/lsp-config.lua | 51 | ||||
| -rw-r--r-- | modules/tools/editor/neovim/plugins/config/lualine.lua (renamed from modules/tools/editor/neovim/plugins/lualine.lua) | 0 | ||||
| -rw-r--r-- | modules/tools/editor/neovim/plugins/config/nvim-tree.lua (renamed from modules/tools/editor/neovim/plugins/nvim-tree.lua) | 0 | ||||
| -rw-r--r-- | modules/tools/editor/neovim/plugins/config/treesitter.nix (renamed from modules/tools/editor/neovim/plugins/treesitter.nix) | 0 | ||||
| -rw-r--r-- | modules/tools/editor/neovim/plugins/default.nix | 36 |
10 files changed, 119 insertions, 33 deletions
diff --git a/modules/tools/editor/neovim/config/options.lua b/modules/tools/editor/neovim/config/options.lua index 17772ca..450e613 100644 --- a/modules/tools/editor/neovim/config/options.lua +++ b/modules/tools/editor/neovim/config/options.lua @@ -31,11 +31,11 @@ vim.api.nvim_create_autocmd("FileType", { }); -- Exception that use spaces -vim.api.nvim_create_autocmd("FileType", { - pattern = {}, - callback = function() - vim.bo.expandtab = true; - vim.bo.tabstop = 2; - vim.bo.shiftwidth = 2; - end, -}); +-- vim.api.nvim_create_autocmd("FileType", { +-- pattern = {}, +-- callback = function() +-- vim.bo.expandtab = true; +-- vim.bo.tabstop = 2; +-- vim.bo.shiftwidth = 2; +-- end, +-- }); diff --git a/modules/tools/editor/neovim/default.nix b/modules/tools/editor/neovim/default.nix index 87fad55..64f2600 100644 --- a/modules/tools/editor/neovim/default.nix +++ b/modules/tools/editor/neovim/default.nix @@ -3,34 +3,34 @@ { options.tools.editor.neovim = { enable = lib.mkEnableOption "Enables neovim."; + configuration = lib.mkOption { + type = lib.types.enum [ + "minimal" + "full" + ]; + default = "minimal"; + description = "The configuration for neovim to use."; + }; }; - config = lib.mkIf config.tools.editor.neovim.enable { + config = + let + plugins = import ./plugins { inherit config pkgs lib; }; + in lib.mkIf config.tools.editor.neovim.enable { programs.neovim.enable = true; programs.neovim.viAlias = true; programs.neovim.vimAlias = true; programs.neovim.vimdiffAlias = true; programs.neovim.defaultEditor = true; - programs.neovim.extraPackages = with pkgs; [ - gcc # Required for treesitter - ]; + home.packages = plugins.requirements; programs.neovim.extraLuaConfig = '' ${import ./config} -${import ./plugins { inherit config; }} +${plugins.configuration} ''; - programs.neovim.plugins = with pkgs.vimPlugins; [ - comment-nvim - lualine-nvim - nvim-treesitter - nvim-web-devicons - nvim-tree-lua - (base16-vim.overrideAttrs (old: { - patchPhase = "ln -s ${config.scheme base16-vim} colors/base16-scheme.vim"; - })) - ]; + programs.neovim.plugins = plugins.list; }; } diff --git a/modules/tools/editor/neovim/plugins/base16.mustache.lua b/modules/tools/editor/neovim/plugins/config/base16.mustache.lua index 3c13fcc..3c13fcc 100644 --- a/modules/tools/editor/neovim/plugins/base16.mustache.lua +++ b/modules/tools/editor/neovim/plugins/config/base16.mustache.lua diff --git a/modules/tools/editor/neovim/plugins/comment.lua b/modules/tools/editor/neovim/plugins/config/comment.lua index 9086261..9086261 100644 --- a/modules/tools/editor/neovim/plugins/comment.lua +++ b/modules/tools/editor/neovim/plugins/config/comment.lua diff --git a/modules/tools/editor/neovim/plugins/config/default.nix b/modules/tools/editor/neovim/plugins/config/default.nix new file mode 100644 index 0000000..fb2ac1a --- /dev/null +++ b/modules/tools/editor/neovim/plugins/config/default.nix @@ -0,0 +1,19 @@ +{ config }: + +let + extra = if config.tools.editor.neovim.configuration == "full" then +'' +${builtins.readFile ./lsp-config.lua} +'' + else ""; +in +'' +${builtins.readFile ./comment.lua} +${builtins.readFile ./lualine.lua} +${import ./treesitter.nix { inherit config; }} +${builtins.readFile (config.scheme { + template = builtins.readFile ./base16.mustache.lua; +})} +${builtins.readFile ./nvim-tree.lua} +${extra} +'' diff --git a/modules/tools/editor/neovim/plugins/config/lsp-config.lua b/modules/tools/editor/neovim/plugins/config/lsp-config.lua new file mode 100644 index 0000000..43cdb95 --- /dev/null +++ b/modules/tools/editor/neovim/plugins/config/lsp-config.lua @@ -0,0 +1,51 @@ +local lspconfig = require("lspconfig"); + +local filetype_to_lsp = { + lua = "lua_ls", + cpp = "clangd", + c = "clangd", + python = "pyright", + javascript = "tsserver", + typescript = "tsserver", + go = "gopls", + html = "html", + css = "cssls", + json = "jsonls", + bash = "bashls", + graphql = "graphql", + dockerfile = "dockerls", + php = "phpactor", + rust = "rust_analyzer", + haskell = "hls", + deno = "denols", + vim = "vimls", + elixir = "elixirls", + clojure = "clojure_lsp", + scala = "scala_metals", + ruby = "sorbet", +}; + +-- Keeping track of all the lsps that have been already configured +local lsp_setup_done = {}; + +-- Function to setup LSP based on filetype +local function setup_lsp(filetype) + local lsp_server = filetype_to_lsp[filetype]; + if lsp_server and not lsp_setup_done[lsp_server] then + lsp_setup_done[lsp_server] = true; + lspconfig[lsp_server].setup({}); + end +end + +vim.keymap.set("n", "gd", vim.lsp.buf.definition, { noremap = true, silent = true }); +vim.keymap.set("n", "gi", vim.lsp.buf.implementation, { noremap = true, silent = true }); +vim.keymap.set("n", "gr", vim.lsp.buf.references, { noremap = true, silent = true }); +vim.keymap.set("i", "<C-c>", vim.lsp.buf.completion, { noremap = true, silent = true }); +vim.keymap.set("n", "gk", vim.lsp.buf.hover, { noremap = true, silent = true }); + +vim.api.nvim_create_autocmd("FileType", { + pattern = "*", -- Match all file types + callback = function() + setup_lsp(vim.bo.filetype); -- Call the setup_lsp function only if the filetype is in the mapping + end, +}); diff --git a/modules/tools/editor/neovim/plugins/lualine.lua b/modules/tools/editor/neovim/plugins/config/lualine.lua index ba2eda6..ba2eda6 100644 --- a/modules/tools/editor/neovim/plugins/lualine.lua +++ b/modules/tools/editor/neovim/plugins/config/lualine.lua diff --git a/modules/tools/editor/neovim/plugins/nvim-tree.lua b/modules/tools/editor/neovim/plugins/config/nvim-tree.lua index c6c4102..c6c4102 100644 --- a/modules/tools/editor/neovim/plugins/nvim-tree.lua +++ b/modules/tools/editor/neovim/plugins/config/nvim-tree.lua diff --git a/modules/tools/editor/neovim/plugins/treesitter.nix b/modules/tools/editor/neovim/plugins/config/treesitter.nix index be0bdb6..be0bdb6 100644 --- a/modules/tools/editor/neovim/plugins/treesitter.nix +++ b/modules/tools/editor/neovim/plugins/config/treesitter.nix diff --git a/modules/tools/editor/neovim/plugins/default.nix b/modules/tools/editor/neovim/plugins/default.nix index ace5379..6e4f844 100644 --- a/modules/tools/editor/neovim/plugins/default.nix +++ b/modules/tools/editor/neovim/plugins/default.nix @@ -1,11 +1,27 @@ -{ config }: +{ config, pkgs, lib }: -'' -${builtins.readFile ./comment.lua} -${builtins.readFile ./lualine.lua} -${import ./treesitter.nix { inherit config; }} -${builtins.readFile (config.scheme { - template = builtins.readFile ./base16.mustache.lua; -})} -${builtins.readFile ./nvim-tree.lua} -'' +{ + configuration = import ./config { inherit config; }; + + list = with pkgs.vimPlugins; lib.mkMerge [ + [ + comment-nvim + lualine-nvim + nvim-treesitter + nvim-web-devicons + nvim-tree-lua + (base16-vim.overrideAttrs (old: { + patchPhase = "ln -s ${config.scheme base16-vim} colors/base16-scheme.vim"; + })) + ] + (if config.tools.editor.neovim.configuration == "full" then + [ + nvim-lspconfig + ] + else null) + ]; + + requirements = with pkgs; [ + gcc # for treesitter + ]; +} |
