wlvncc: unstable-2023-01-05 -> unstable-2024-11-24 (#357566)
[NixPkgs.git] / doc / doc-support / python-interpreter-table.nix
blobf06609e363f2fed39502fb0600bc0a54624b5811
1 # To build this derivation, run `nix-build -A nixpkgs-manual.pythonInterpreterTable`
3   lib,
4   writeText,
5   pkgs,
6   pythonInterpreters,
7 }:
8 let
9   isPythonInterpreter =
10     name:
11     /*
12       NB: Package names that don't follow the regular expression:
13       - `python-cosmopolitan` is not part of `pkgs.pythonInterpreters`.
14       - `_prebuilt` interpreters are used for bootstrapping internally.
15       - `python3Minimal` contains python packages, left behind conservatively.
16       - `rustpython` lacks `pythonVersion` and `implementation`.
17     */
18     (lib.strings.match "(pypy|python)([[:digit:]]*)" name) != null;
20   interpreterName =
21     pname:
22     let
23       cuteName = {
24         cpython = "CPython";
25         pypy = "PyPy";
26       };
27       interpreter = pkgs.${pname};
28     in
29     "${cuteName.${interpreter.implementation}} ${interpreter.pythonVersion}";
31   interpreters = lib.reverseList (
32     lib.naturalSort (lib.filter isPythonInterpreter (lib.attrNames pythonInterpreters))
33   );
35   aliases =
36     pname:
37     lib.attrNames (
38       lib.filterAttrs (
39         name: value:
40         isPythonInterpreter name && name != pname && interpreterName name == interpreterName pname
41       ) pkgs
42     );
44   result = map (pname: {
45     inherit pname;
46     aliases = aliases pname;
47     interpreter = interpreterName pname;
48   }) interpreters;
50   toMarkdown =
51     data:
52     let
53       line = package: ''
54         | ${package.pname} | ${lib.concatStringsSep ", " package.aliases or [ ]} | ${package.interpreter} |
55       '';
56     in
57     lib.concatStringsSep "" (map line data);
60 writeText "python-interpreter-table.md" ''
61   | Package | Aliases | Interpeter |
62   |---------|---------|------------|
63   ${toMarkdown result}