(import-macros {: use} :relude) (use nvim {: fun : cmd : opt : map :buf-map bmap}) (use picker) (import-macros logger :nvim.logger) (import-macros {: augroup : defcommand} :nvim) (let [lsp vim.lsp border :rounded] (set lsp.handlers.textDocument/hover (lsp.with lsp.handlers.hover {:border border})) (set lsp.handlers.textDocument/signatureHelp (lsp.with lsp.handlers.signature_help {:border border})) (vim.diagnostic.config {:float {:border border}})) (augroup hauleth-lsp (on LspAttach (let [bufnr args.buf client (vim.lsp.get_client_by_id args.data.client_id)] ((. (require :fidget) :setup) {}) (logger.inspect client) (local capable? (fn [capability] (. client.server_capabilities capability))) (when (capable? :declarationProvider) (bmap :n :gD #(vim.lsp.buf.declaration))) (when (capable? :documentFormattingProvider) (bmap :n :Q #(vim.lsp.buf.format))) ))) (augroup hauleth-lsp-diagnostics (on CursorHold "*" (vim.diagnostic.open_float {:focus false}))) (fn setup [name opts] (vim.lsp.enable name) (vim.lsp.config name opts)) (setup :rust_analyzer { :root_markers [ "Cargo.lock" ".git" ".jj" ] :filetypes [ "rust" ] :cmd [vim.g.lsp_paths.rust_analyzer] :settings {:rust-analyzer {:files {:excludeDirs [".direnv"]}}}}) ; (setup :expert { ; :root_markers [ "mix.exs" ".git" ".jj" ] ; :filetypes [ "elixir" "eelixir" "heex" ] ; :cmd [vim.g.lsp_paths.expert "--stdio"]}) (setup :dexter { :root_markers [ "mix.exs" ".git" ".jj" ] :filetypes [ "elixir" "eelixir" "heex" ] :cmd [vim.g.lsp_paths.dexter "lsp"]}) (setup :elp { :root_markers [ "rebar.config" ] :filetypes [ "erlang" ] :cmd [vim.g.lsp_paths.elp "server"] }) ; (setup :zls {}) ;(setup :nixd { ; :autostart true ; :cmd [vim.g.lsp_paths.nixd] ; }) (setup :typos_lsp { :autostart true :cmd [vim.g.lsp_paths.typos_lsp]}) ; (setup :taplo { ; :filetypes [ "toml" ] ; :cmd [vim.g.lsm_paths.taplo :lsp :stdio]}) ; (augroup lsp-direnv (on User :DirenvLoaded (cmd.LspStart))) (defcommand LspRestart {:nargs 1} (vim.lsp.enable (tostring args) false) (vim.lsp.enable (tostring args) true))