Nix flake devShell and build system

This commit is contained in:
Maciej Bendkowski 2023-02-13 18:53:06 +01:00
parent 135133db2c
commit 986eb9766b
3 changed files with 225 additions and 0 deletions

22
default.nix Normal file
View File

@ -0,0 +1,22 @@
{ mkDerivation, base, containers, mtl, multiset, process
, lib, tasty, tasty-hunit
# python package needed at test and run time, undeclared in .cabal file
, paganini-hs, paganini
}:
mkDerivation {
pname = "generic-boltzmann-brain";
version = "0.1.0.0";
src = ./.;
libraryHaskellDepends = [
base containers mtl multiset process tasty tasty-hunit
];
testHaskellDepends = [
base
tasty
tasty-hunit
paganini-hs
paganini
];
homepage = "https://github.com/maciej-bendkowski/generic-boltzmann-brain#readme";
license = lib.licenses.bsd3;
}

95
flake.lock Normal file
View File

@ -0,0 +1,95 @@
{
"nodes": {
"flake-utils": {
"locked": {
"lastModified": 1667395993,
"narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"flake-utils_2": {
"locked": {
"lastModified": 1605370193,
"narHash": "sha256-YyMTf3URDL/otKdKgtoMChu4vfVL3vCMkRqpGifhUn0=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "5021eac20303a61fafe17224c087f5519baed54d",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1676150441,
"narHash": "sha256-Nfeua9Ua/dGHOQpzOjLtkyMyW/ysQCvZJ9Dd74QQSNk=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "6d87734c880d704f6ee13e5c0fe835b98918c34e",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixpkgs-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_2": {
"locked": {
"lastModified": 1676060830,
"narHash": "sha256-OZJKL08qbLW2xMPNPTgidbC25MrkllUonoFs/JOX4y8=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "9943fcc75d4e43c3116b408b0f93e682927ffbb4",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixpkgs-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"paganini-hs": {
"inputs": {
"flake-utils": "flake-utils_2",
"nixpkgs": "nixpkgs_2"
},
"locked": {
"lastModified": 1676297967,
"narHash": "sha256-uN0uDqErRwPkmSQd2Guu6b01HldI8n5KAhdjR0ETEew=",
"owner": "maciej-bendkowski",
"repo": "paganini-hs",
"rev": "214013fdc8aa274d2e92d50484bc0f840bf77f18",
"type": "github"
},
"original": {
"owner": "maciej-bendkowski",
"repo": "paganini-hs",
"rev": "214013fdc8aa274d2e92d50484bc0f840bf77f18",
"type": "github"
}
},
"root": {
"inputs": {
"flake-utils": "flake-utils",
"nixpkgs": "nixpkgs",
"paganini-hs": "paganini-hs"
}
}
},
"root": "root",
"version": 7
}

108
flake.nix Normal file
View File

@ -0,0 +1,108 @@
{
description = "Generic Boltzmann Brain";
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable";
flake-utils.url = "github:numtide/flake-utils";
paganini-hs.url = "github:maciej-bendkowski/paganini-hs/214013fdc8aa274d2e92d50484bc0f840bf77f18";
};
outputs =
{
self
, nixpkgs
, flake-utils
, paganini-hs
, ...
}@inputs:
flake-utils.lib.eachSystem [ "x86_64-linux" ] (system:
let
name = "generic-boltzmann-brain";
compiler = "ghc925";
pkgs = import nixpkgs {
inherit system;
config = {
allowUnfree = true;
allowBroken = true;
allowUnsupportedSystem = true;
};
};
optas = p: with p;
(
buildPythonPackage rec {
pname = "optas";
version = "1.0.3";
src = fetchPypi {
inherit pname version;
sha256 = "sha256-92aaW9ZxvRy/dfYhw7IS+lfDAP2UuBuJhNDNTW7Xkzc=";
};
doCheck = false;
}
);
paganini = p: with p;
(
buildPythonPackage rec {
pname = "paganini";
version = "1.5.0";
src = fetchPypi {
inherit pname version;
sha256 = "sha256-hsDqONhBPQlgQHKBh5tdp/pzoXynUz7ztXXILrGgslo=";
};
doCheck = false;
propagatedBuildInputs = [
pkgs.python3Packages.numpy
pkgs.python3Packages.sympy
pkgs.python3Packages.scipy
pkgs.python3Packages.networkx
pkgs.python3Packages.cvxpy
(optas p)
];
}
);
pythonPackages = p: with p; [
(optas p)
(paganini p)
];
haskellPackages = pkgs.haskell.packages.${compiler}.override {
overrides = self: super: {
"${name}" = (self.callCabal2nix "generic-boltzmann-brain" ./. {}).overrideAttrs(
old: {
nativeBuildInputs = old.nativeBuildInputs ++ [
(pkgs.python3.withPackages pythonPackages)
];
}
);
paganini-hs = pkgs.haskell.lib.dontCheck (
super.callCabal2nix "paganini-hs" paganini-hs {});
};
};
devShell = haskellPackages.shellFor {
withHoogle = true; # Provides docs, optional.
packages = p: [
p.generic-boltzmann-brain
];
buildInputs = [
haskellPackages.stack
haskellPackages.haskell-language-server
haskellPackages.hlint
haskellPackages.fourmolu
(pkgs.python3.withPackages pythonPackages)
];
};
defaultPackage = haskellPackages."${name}";
derive = import ./.;
in
{
inherit derive defaultPackage devShell;
});
}