From bc014931784c62b566cad39b8510e76dde588d94 Mon Sep 17 00:00:00 2001 From: chillcicada <116548943+chillcicada@users.noreply.github.com> Date: Sun, 17 Aug 2025 22:46:27 +0800 Subject: [PATCH] mypy: init module (#7656) --- modules/programs/mypy.nix | 50 ++++++++++++++++++++ tests/modules/programs/mypy/basic-config.nix | 47 ++++++++++++++++++ tests/modules/programs/mypy/default.nix | 3 ++ 3 files changed, 100 insertions(+) create mode 100644 modules/programs/mypy.nix create mode 100644 tests/modules/programs/mypy/basic-config.nix create mode 100644 tests/modules/programs/mypy/default.nix diff --git a/modules/programs/mypy.nix b/modules/programs/mypy.nix new file mode 100644 index 000000000..2988f6600 --- /dev/null +++ b/modules/programs/mypy.nix @@ -0,0 +1,50 @@ +{ + pkgs, + config, + lib, + ... +}: + +let + + iniFormat = pkgs.formats.ini { }; + cfg = config.programs.mypy; + +in +{ + meta.maintainers = [ ]; + + options.programs.mypy = { + enable = lib.mkEnableOption "mypy"; + + package = lib.mkPackageOption pkgs "mypy" { nullable = true; }; + + settings = lib.mkOption { + type = iniFormat.type; + default = { }; + example = lib.literalExpression '' + { + mypy = { + warn_return_any = true; + warn_unused_configs = true; + }; + } + ''; + description = '' + Configuration written to + {file}`$XDG_CONFIG_HOME/mypy/config`. + + See + for more information. + ''; + }; + }; + + config = lib.mkIf cfg.enable { + home.packages = lib.mkIf (cfg.package != null) [ cfg.package ]; + + xdg.configFile."mypy/config" = lib.mkIf (cfg.settings != { }) { + source = iniFormat.generate "mypy-config" cfg.settings; + }; + }; +} diff --git a/tests/modules/programs/mypy/basic-config.nix b/tests/modules/programs/mypy/basic-config.nix new file mode 100644 index 000000000..8f68ca92f --- /dev/null +++ b/tests/modules/programs/mypy/basic-config.nix @@ -0,0 +1,47 @@ +{ pkgs, ... }: + +{ + programs.mypy = { + enable = true; + + package = pkgs.mypy; + + settings = { + mypy = { + warn_return_any = true; + warn_unused_configs = true; + }; + + "mypy-mycode.foo.*" = { + disallow_untyped_defs = true; + }; + + "mypy-mycode.bar".warn_return_any = false; + + "mypy-somelibrary".ignore_missing_imports = true; + }; + }; + + nmt.script = + let + configFile = "home-files/.config/mypy/config"; + in + '' + assertFileExists ${configFile} + assertFileContent ${configFile} \ + ${pkgs.writeText "settings-expected" '' + [mypy] + warn_return_any=true + warn_unused_configs=true + + [mypy-mycode.bar] + warn_return_any=false + + [mypy-mycode.foo.*] + disallow_untyped_defs=true + + [mypy-somelibrary] + ignore_missing_imports=true + ''} + ''; +} diff --git a/tests/modules/programs/mypy/default.nix b/tests/modules/programs/mypy/default.nix new file mode 100644 index 000000000..456519bbc --- /dev/null +++ b/tests/modules/programs/mypy/default.nix @@ -0,0 +1,3 @@ +{ + mypy-basic-config = ./basic-config.nix; +}