{ pkgs, lib, config, ... }: { config = lib.mkIf config.frogeye.dev.python { home = { packages = with pkgs; [ python3 python3Packages.ipython ]; sessionVariables = { PYTHONSTARTUP = ./pythonstartup.py; }; }; programs = { bash.shellAliases = { ipython = "ipython --no-confirm-exit --pdb"; }; ruff = { enable = true; settings = { target-version = "py311"; # Matches Debian 12 lint = { select = [ "ALL" ]; ignore = [ # Things only relevant in proper applications, but not scripts "CPY" # Copyright "D1" # missing docstring "ERA" # commented out code "FIX002" # enforce TODOs "T20" # print "TD" # TODOs convention "INP" # missing __init__.py "S603" # subproces untrusted input (broken?) "S101" # asserts # Allow nix-shell "EXE003" "EXE005" # Conflict with formatter "COM" "ISC001" ]; pydocstyle.convention = "pep257"; }; }; }; nixvim.plugins.lsp.servers = lib.mkIf config.frogeye.dev.python { ruff.enable = true; basedpyright = { enable = true; settings.basedpyright = { analysis = { ignore = [ "*" ]; # Handled by ruff typeCheckingMode = "standard"; # Should not be an hassle for scripting with untyped libraries }; disableOrganizeImports = true; # Handled by ruff }; }; }; }; }; }