diff --git a/flake.lock b/flake.lock index 26581a9..32cef8d 100644 --- a/flake.lock +++ b/flake.lock @@ -181,11 +181,11 @@ }, "nixpkgs_2": { "locked": { - "lastModified": 1736344531, - "narHash": "sha256-8YVQ9ZbSfuUk2bUf2KRj60NRraLPKPS0Q4QFTbc+c2c=", + "lastModified": 1737062831, + "narHash": "sha256-Tbk1MZbtV2s5aG+iM99U8FqwxU/YNArMcWAv6clcsBc=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "bffc22eb12172e6db3c5dde9e3e5628f8e3e7912", + "rev": "5df43628fdf08d642be8ba5b3625a6c70731c19c", "type": "github" }, "original": { diff --git a/nix/neovim-overlay.nix b/nix/neovim-overlay.nix index 3e96063..2e3f2fb 100644 --- a/nix/neovim-overlay.nix +++ b/nix/neovim-overlay.nix @@ -120,18 +120,27 @@ with final.pkgs.lib; let # ^ bleeding-edge plugins from flake inputs ]; - extraPackages = with pkgs; [ - # Dependencies - ripgrep + extraPackages = with pkgs; + [ + # Dependencies + ripgrep - # language servers, etc. - asm-lsp # Assembly language server - clang-tools # C/C++ language server - (callPackage ./cpptools.nix {}) # C/C++ debugger from VSCode | https://github.com/microsoft/vscode-cpptools - nodePackages.bash-language-server # Bash language server - lua-language-server - nil # nix LSP - ]; + # language servers, etc. + asm-lsp # Assembly language server + clang-tools # C/C++ language server + (callPackage ./cpptools.nix {}) # C/C++ debugger from VSCode | https://github.com/microsoft/vscode-cpptools + nil # nix LSP + nodePackages.bash-language-server # Bash language server + lua-language-server + ] + ++ [ + (pkgs.python312.withPackages (python-pkgs: [ + python-pkgs.python-lsp-server + python-pkgs.python-lsp-ruff + python-pkgs.pylsp-mypy + python-pkgs.pylsp-rope + ])) + ]; in { # This is the neovim derivation # returned by the overlay diff --git a/nvim/ftplugin/python.lua b/nvim/ftplugin/python.lua new file mode 100644 index 0000000..5d04524 --- /dev/null +++ b/nvim/ftplugin/python.lua @@ -0,0 +1,36 @@ +-- Exit if the language server isn't available +if vim.fn.executable('pylsp') ~= 1 then + return +end + +local root_files = { + 'pyproject.toml', + 'setup.py', + 'setup.cfg', + 'requirements.txt', + 'Pipfile', + 'pyrightconfig.json', + '.git', +} + +vim.lsp.start({ + name = 'python-lsp-server', + cmd = { "pylsp" }, + root_dir = vim.fs.dirname(vim.fs.find(root_files, { upward = true })[1]), + capabilities = require('user.lsp').make_client_capabilities(), + filetypes = { 'python' }, + on_attach = function(client, bufnr) + require("nvim-navic").attach(client, bufnr) + require("workspace-diagnostics").populate_workspace_diagnostics(client, bufnr) + end, + settings = { + pylsp = { + plugins = { + mypy = { enabled = true, }, + rope = { enabled = true, }, + ruff = { enabled = true, }, + }, + }, + }, + single_file_support = true +})