{ config, lib, pkgs, ... }: with lib; with builtins; let cfg = config.vim.languages.elixir; in { config = mkIf (cfg.enable) { vim.startPlugins = [ "elixir-tools" ]; vim.luaConfigRC.elixir-tools = nvim.dag.entryAnywhere '' local elixir = require("elixir") local elixirls = require("elixir.elixirls") elixir.setup { elixirls = { -- alternatively, point to an existing elixir-ls installation (optional) -- not currently supported by elixirls, but can be a table if you wish to pass other args `{"path/to/elixirls", "--foo"}` cmd = "${lib.getExe pkgs.elixir-ls}", -- default settings, use the `settings` function to override settings settings = elixirls.settings { dialyzerEnabled = true, fetchDeps = false, enableTestLenses = false, suggestSpecs = false, }, on_attach = function(client, bufnr) local map_opts = { buffer = true, noremap = true} -- run the codelens under the cursor vim.keymap.set("n", "<space>r", vim.lsp.codelens.run, map_opts) -- remove the pipe operator vim.keymap.set("n", "<space>fp", ":ElixirFromPipe<cr>", map_opts) -- add the pipe operator vim.keymap.set("n", "<space>tp", ":ElixirToPipe<cr>", map_opts) vim.keymap.set("v", "<space>em", ":ElixirExpandMacro<cr>", map_opts) -- bindings for standard LSP functions. vim.keymap.set("n", "<space>df", "<cmd>lua vim.lsp.buf.format()<cr>", map_opts) vim.keymap.set("n", "<space>gd", "<cmd>lua vim.diagnostic.open_float()<cr>", map_opts) vim.keymap.set("n", "<space>dt", "<cmd>lua vim.lsp.buf.definition()<cr>", map_opts) vim.keymap.set("n", "<space>K", "<cmd>lua vim.lsp.buf.hover()<cr>", map_opts) vim.keymap.set("n", "<space>gD","<cmd>lua vim.lsp.buf.implementation()<cr>", map_opts) vim.keymap.set("n", "<space>1gD","<cmd>lua vim.lsp.buf.type_definition()<cr>", map_opts) -- keybinds for fzf-lsp.nvim: https://github.com/gfanto/fzf-lsp.nvim -- you could also use telescope.nvim: https://github.com/nvim-telescope/telescope.nvim -- there are also core vim.lsp functions that put the same data in the loclist vim.keymap.set("n", "<space>gr", ":References<cr>", map_opts) vim.keymap.set("n", "<space>g0", ":DocumentSymbols<cr>", map_opts) vim.keymap.set("n", "<space>gW", ":WorkspaceSymbols<cr>", map_opts) vim.keymap.set("n", "<leader>d", ":Diagnostics<cr>", map_opts) end } } ''; }; }