hiro-flake-utils/flake.nix

230 lines
6.3 KiB
Nix
Raw Normal View History

2021-12-09 11:01:21 +01:00
{
2021-12-09 11:56:09 +01:00
inputs = {
nixpkgs.url = "nixpkgs/nixos-unstable";
2021-12-09 12:02:57 +01:00
flake-utils.url = "github:numtide/flake-utils";
poetry2nix.url = "github:nix-community/poetry2nix";
2021-12-09 11:56:09 +01:00
};
2021-12-09 12:02:57 +01:00
outputs = { self, nixpkgs, flake-utils, poetry2nix }: {
2021-12-09 11:13:59 +01:00
lib = rec {
2021-12-09 11:01:21 +01:00
currentDefaultPackage = flake: system: flake.defaultPackage.${system};
2021-12-09 11:56:09 +01:00
makeDefaultPackageOverrides =
2021-12-09 12:05:04 +01:00
(flakes: system:
let
body = (nixpkgs.lib.attrsets.mapAttrs'
(name: flake:
{
name = nixpkgs.lib.strings.toLower name;
value = (currentDefaultPackage flake system);
})
flakes);
in
(self: super:
body
));
2021-12-09 12:02:57 +01:00
2021-12-10 10:42:28 +01:00
overrides = (self: super: {
2022-12-13 14:42:21 -05:00
beartype = super.beartype.overridePythonAttrs (
old: {
buildInputs = (old.buildInputs or [ ]) ++ [
self.setuptools
];
}
);
future = super.future.overridePythonAttrs (
old: {
buildInputs = (old.buildInputs or [ ]) ++ [
self.setuptools
];
}
);
sqlitedict = super.sqlitedict.overridePythonAttrs (
old: {
buildInputs = (old.buildInputs or [ ]) ++ [
self.setuptools
];
}
);
lmfit = super.lmfit.overridePythonAttrs (
old: {
buildInputs = (old.buildInputs or [ ]) ++ [
self.setuptools
];
}
);
fcspline = super.fcspline.overridePythonAttrs (
old: {
buildInputs = (old.buildInputs or [ ]) ++ [
self.cython
self.poetry
];
}
);
progression = super.progression.overridePythonAttrs (
old: {
buildInputs = (old.buildInputs or [ ]) ++ [
self.poetry
];
}
);
binfootprint = super.binfootprint.overridePythonAttrs (
old: {
buildInputs = (old.buildInputs or [ ]) ++ [
self.poetry
];
}
);
qutip = super.qutip.overridePythonAttrs (
old: {
buildInputs = (old.buildInputs or [ ]) ++ [
self.cython
];
}
);
stocproc = super.stocproc.overridePythonAttrs (
old: {
buildInputs = (old.buildInputs or [ ]) ++ [
self.poetry
self.cython
];
}
);
two-qubit-model = super.two-qubit-model.overridePythonAttrs (
old: {
buildInputs = (old.buildInputs or [ ]) ++ [
self.poetry
];
}
);
hiro-models = super.hiro-models.overridePythonAttrs (
old: {
buildInputs = (old.buildInputs or [ ]) ++ [
self.poetry
];
}
);
hopsflow = super.hopsflow.overridePythonAttrs (
old: {
buildInputs = old.buildInputs or [ ] ++ [
self.poetry
];
}
);
hops = super.hops.overridePythonAttrs (
old: {
buildInputs = old.buildInputs or [ ] ++ [
self.poetry
];
}
);
jupyter = super.jupyter-core.overridePythonAttrs (
old: {
postInstall = ''
rm $out/lib/python*/site-packages/__pycache__/jupyter.cpython-39.pyc
rm $out/lib/python*/site-packages/jupyter.py
'';
}
);
matplotlib = super.matplotlib.override (
{
enableGtk3 = true;
enableTk = true;
# preferWheel = false;
}
);
numba = super.numba.override (
{
preferWheel = false;
});
numpy = super.numpy.override (
{
blas = super.mkl;
}
);
});
2021-12-10 10:42:28 +01:00
poetry2nixWrapper = nixpkgs:
{ name
, poetryArgs ? { }
, shellPackages ? (_: [ ])
, nixpkgsConfig ? { }
, addCythonTo ? [ ]
, noPackage ? false
2022-06-01 15:15:32 +02:00
, shellOverride ? (_: _: { })
2022-01-26 17:38:54 +01:00
, python ? (pkgs: pkgs.python310)
2022-12-13 14:42:21 -05:00
, extraOverrides ? (_:_: { })
, extraOverlay ? (_:_: { })
2021-12-10 10:42:28 +01:00
}:
(flake-utils.lib.eachDefaultSystem (system:
let
2022-12-13 14:42:21 -05:00
finalOverrides = nixpkgs.lib.composeManyExtensions [ overrides extraOverrides ];
2021-12-10 10:42:28 +01:00
overlay = nixpkgs.lib.composeManyExtensions [
poetry2nix.overlay
2022-06-01 15:32:06 +02:00
extraOverlay
2021-12-10 10:42:28 +01:00
(final: prev:
2021-12-09 12:05:04 +01:00
{
2021-12-09 12:10:11 +01:00
"${name}Shell" = (prev.poetry2nix.mkPoetryEnv ({
2022-01-27 14:26:32 +01:00
overrides = finalOverrides;
preferWheels = true;
2022-01-26 15:59:23 +01:00
python = (python prev.pkgs);
2021-12-09 14:36:40 +01:00
editablePackageSources = {
2021-12-09 13:22:20 +01:00
${name} = poetryArgs.projectDir + "/${name}";
};
2021-12-09 12:10:11 +01:00
} // poetryArgs));
2021-12-09 15:07:21 +01:00
} // (if noPackage then { } else {
${name} = (prev.poetry2nix.mkPoetryApplication ({
2022-01-26 16:26:40 +01:00
python = (python prev.pkgs);
preferWheels = true;
2022-01-27 14:26:32 +01:00
overrides = finalOverrides;
2021-12-09 15:07:21 +01:00
} // poetryArgs));
}))
2021-12-09 12:05:04 +01:00
];
pkgs = import nixpkgs {
inherit system;
2021-12-09 16:16:55 +01:00
overlays = [
overlay
];
2021-12-09 12:12:22 +01:00
config = nixpkgsConfig;
2021-12-09 12:05:04 +01:00
};
2022-12-13 15:14:47 -05:00
shell = (pkgs."${name}Shell".env.overrideAttrs (oldAttrs: {
2021-12-09 15:07:21 +01:00
buildInputs = (shellPackages pkgs) ++ [ pkgs.poetry ];
2022-06-01 15:12:36 +02:00
})).overrideAttrs (shellOverride pkgs);
2022-12-13 15:14:47 -05:00
in
rec {
devShell = shell;
2021-12-09 15:07:21 +01:00
} // (if noPackage then { } else rec {
2021-12-09 12:05:04 +01:00
packages = {
${name} = pkgs.${name};
2022-12-13 14:42:21 -05:00
"${name}Docker" = pkgs.dockerTools.buildImage {
name = "${name}";
2022-12-13 15:26:22 -05:00
copyToRoot = pkgs.buildEnv {
name = "image-root";
paths = [ pkgs.${name} (shellPackages pkgs) ];
pathsToLink = [ "/bin" ];
};
2022-12-13 14:42:21 -05:00
};
2021-12-09 12:05:04 +01:00
};
2021-12-09 12:02:57 +01:00
2021-12-09 12:05:04 +01:00
defaultPackage = packages.${name};
2021-12-09 15:07:21 +01:00
})
));
2021-12-09 11:01:21 +01:00
};
};
}