2021-01-02 00:14:43 +01:00
|
|
|
|
{ depot, pkgs, lib, ... }:
|
2021-01-01 18:55:33 +01:00
|
|
|
|
let
|
2022-01-30 17:06:58 +01:00
|
|
|
|
bins = depot.nix.getBins pkgs.s6-portable-utils [ "s6-mkdir" "s6-cat" "s6-ln" "s6-ls" "s6-touch" ]
|
|
|
|
|
// depot.nix.getBins pkgs.coreutils [ "printf" ];
|
2021-01-01 18:55:33 +01:00
|
|
|
|
|
2021-01-01 23:55:14 +01:00
|
|
|
|
inherit (depot.nix.yants) defun struct restrict attrs list string drv any;
|
|
|
|
|
|
2021-02-14 12:41:39 +01:00
|
|
|
|
inherit (depot.nix) drvSeqL;
|
|
|
|
|
|
2021-01-02 00:14:43 +01:00
|
|
|
|
FlakeError =
|
|
|
|
|
restrict
|
|
|
|
|
"flake error"
|
|
|
|
|
(s: lib.any (prefix: (builtins.substring 0 1 s) == prefix)
|
2022-01-30 17:06:58 +01:00
|
|
|
|
[ "E" "W" ])
|
2021-01-02 00:14:43 +01:00
|
|
|
|
string;
|
2021-01-01 23:55:14 +01:00
|
|
|
|
Libraries = defun [ (attrs any) (list drv) ];
|
2021-01-02 14:54:39 +01:00
|
|
|
|
|
2022-06-16 20:02:20 +02:00
|
|
|
|
pythonPackages = pkgs.python310Packages;
|
2022-08-28 12:49:45 +02:00
|
|
|
|
buildPythonPackages = pkgs.buildPackages.python310Packages;
|
2022-06-16 20:02:20 +02:00
|
|
|
|
python = pythonPackages.python;
|
|
|
|
|
|
2022-01-30 17:06:58 +01:00
|
|
|
|
python3 =
|
|
|
|
|
{ name
|
|
|
|
|
, libraries ? (_: [ ])
|
|
|
|
|
, flakeIgnore ? [ ]
|
2022-06-16 20:02:20 +02:00
|
|
|
|
}:
|
|
|
|
|
let
|
|
|
|
|
in
|
2022-08-28 12:49:45 +02:00
|
|
|
|
pkgs.writers.makePythonWriter python pythonPackages buildPythonPackages name {
|
2022-06-16 20:02:20 +02:00
|
|
|
|
libraries = Libraries libraries pythonPackages;
|
2022-01-30 17:06:58 +01:00
|
|
|
|
flakeIgnore =
|
|
|
|
|
let
|
|
|
|
|
ignoreTheseErrors = [
|
|
|
|
|
# whitespace after {
|
|
|
|
|
"E201"
|
|
|
|
|
# whitespace before }
|
|
|
|
|
"E202"
|
|
|
|
|
# fuck 4-space indentation
|
|
|
|
|
"E121"
|
|
|
|
|
"E111"
|
|
|
|
|
# who cares about blank lines …
|
|
|
|
|
# … at end of files
|
|
|
|
|
"W391"
|
|
|
|
|
# … between functions
|
|
|
|
|
"E302"
|
|
|
|
|
"E305"
|
2022-06-16 20:02:20 +02:00
|
|
|
|
# … if there’s too many of them
|
|
|
|
|
"E303"
|
|
|
|
|
# or lines that are too long
|
|
|
|
|
"E501"
|
2022-01-30 17:06:58 +01:00
|
|
|
|
];
|
|
|
|
|
in
|
|
|
|
|
list FlakeError (ignoreTheseErrors ++ flakeIgnore);
|
|
|
|
|
};
|
2021-01-01 20:00:51 +01:00
|
|
|
|
|
2021-01-01 23:55:14 +01:00
|
|
|
|
# TODO: add the same flake check as the pyhon3 writer
|
2022-01-30 17:06:58 +01:00
|
|
|
|
python3Lib = { name, libraries ? (_: [ ]) }: moduleString:
|
|
|
|
|
let
|
|
|
|
|
srcTree = depot.nix.runExecline.local name { stdin = moduleString; } [
|
|
|
|
|
"importas"
|
|
|
|
|
"out"
|
|
|
|
|
"out"
|
|
|
|
|
"if"
|
|
|
|
|
[ bins.s6-mkdir "-p" "\${out}/${name}" ]
|
|
|
|
|
"if"
|
|
|
|
|
[
|
|
|
|
|
"redirfd"
|
|
|
|
|
"-w"
|
|
|
|
|
"1"
|
|
|
|
|
"\${out}/setup.py"
|
|
|
|
|
bins.printf
|
|
|
|
|
''
|
|
|
|
|
from distutils.core import setup
|
2021-01-01 18:55:33 +01:00
|
|
|
|
|
2022-01-30 17:06:58 +01:00
|
|
|
|
setup(
|
|
|
|
|
name='%s',
|
|
|
|
|
packages=['%s']
|
|
|
|
|
)
|
|
|
|
|
''
|
|
|
|
|
name
|
|
|
|
|
name
|
|
|
|
|
]
|
|
|
|
|
"if"
|
|
|
|
|
[
|
|
|
|
|
# redirect stdin to the init py
|
|
|
|
|
"redirfd"
|
|
|
|
|
"-w"
|
|
|
|
|
"1"
|
|
|
|
|
"\${out}/${name}/__init__.py"
|
|
|
|
|
bins.s6-cat
|
|
|
|
|
]
|
|
|
|
|
];
|
|
|
|
|
in
|
2022-06-16 20:02:20 +02:00
|
|
|
|
pythonPackages.buildPythonPackage {
|
2021-01-01 18:55:33 +01:00
|
|
|
|
inherit name;
|
|
|
|
|
src = srcTree;
|
2022-06-16 20:02:20 +02:00
|
|
|
|
propagatedBuildInputs = libraries pythonPackages;
|
2021-01-01 18:55:33 +01:00
|
|
|
|
doCheck = false;
|
|
|
|
|
};
|
|
|
|
|
|
2021-02-14 12:41:39 +01:00
|
|
|
|
|
2023-01-06 18:42:19 +01:00
|
|
|
|
ghcBins = libraries: depot.nix.getBins (pkgs.ghc.withPackages (_: libraries)) [ "runghc" ];
|
|
|
|
|
|
|
|
|
|
writeHaskellInteractive = name: { libraries, ghcArgs ? [ ] }: path:
|
|
|
|
|
depot.nix.writeExecline name { } ([
|
|
|
|
|
(ghcBins libraries).runghc
|
|
|
|
|
"--"
|
|
|
|
|
] ++ ghcArgs ++ [
|
|
|
|
|
"--"
|
|
|
|
|
path
|
|
|
|
|
]);
|
|
|
|
|
|
2022-01-30 17:06:58 +01:00
|
|
|
|
in
|
|
|
|
|
{
|
2021-01-01 18:55:33 +01:00
|
|
|
|
inherit
|
2021-01-01 20:00:51 +01:00
|
|
|
|
python3
|
2021-01-01 18:55:33 +01:00
|
|
|
|
python3Lib
|
2023-01-06 18:42:19 +01:00
|
|
|
|
writeHaskellInteractive
|
2021-01-01 18:55:33 +01:00
|
|
|
|
;
|
|
|
|
|
}
|