Code to build Stackage with Nix

This commit is contained in:
Kirill Zaborsky 2019-02-06 17:56:44 +03:00
parent 1625ac444a
commit d7817d5653
5 changed files with 87 additions and 0 deletions

View File

@ -0,0 +1,5 @@
# Building Stackage with Nix
The script `build.sh` is supposed to be run in a directory where `curator unpack`
was run - it assumes existence of `unpack-dir` directory with a Stackage
snapshot `stack.yaml` and unpacked packages in it.

View File

@ -0,0 +1,12 @@
#!/usr/bin/env bash
set -eu +x
NIX_VERSION="2.0.4"
curl https://nixos.org/releases/nix/nix-$NIX_VERSION/install | sh
# no code to install stack2nix yet
stack2nix --cabal2nix-args="--no-hpack" unpack-dir > snapshot.nix
nix build -f snapshot-fixed.nix

View File

@ -0,0 +1,23 @@
let
spec = builtins.fromJSON (builtins.readFile ./nixpkgs-src.json);
src = import <nix/fetchurl.nix> {
url = "https://github.com/${spec.owner}/${spec.repo}/archive/${spec.rev}.tar.gz";
inherit (spec) sha256;
};
nixcfg = import <nix/config.nix>;
in builtins.derivation {
system = builtins.currentSystem;
name = "${src.name}-unpacked";
builder = builtins.storePath nixcfg.shell;
inherit src;
args = [
(builtins.toFile "builder" ''
$coreutils/mkdir $out
cd $out
$gzip -d < $src | $tar -x --strip-components=1
'')
];
coreutils = builtins.storePath nixcfg.coreutils;
tar = builtins.storePath nixcfg.tar;
gzip = builtins.storePath nixcfg.gzip;
}

View File

@ -0,0 +1,6 @@
{
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "c2950341d038995bf46a7b72db961bb3d3e9ac12",
"sha256": "0ghirjm6xvsihci3fladrn4nrnh2yr529v7c406hmw0yp25kv0i4"
}

View File

@ -0,0 +1,41 @@
{ pkgs ? import (import ./fetch-nixpkgs.nix) {}
, compiler ? pkgs.haskell.packages.ghc863
}:
let
snapshot = import ./snapshot.nix { pkgs = pkgs; compiler = compiler; };
in
snapshot.override (with pkgs.haskell.lib; {
overrides = self: super: {
# disabling packages from non-hackage-packages.nix
futhark = null;
multi-ghc-travis = null;
vaultenv = null;
# native deps
check-email = super.check-email.override { resolv = null; };
flac = super.flac.override { FLAC = pkgs.flac; };
freenect = super.freenect.override { freenect_sync = null; libfreenect = null; };
haskell-gi = super.haskell-gi.override { gobject-introspection = pkgs.gnome3.gobjectIntrospection; };
HDBC-mysql = super.HDBC-mysql.override { mysqlclient = pkgs.mysql;};
libffi = super.libffi.override { ffi = null; };
# fixes
blas-ffi = overrideCabal super.blas-ffi (
old: { libraryPkgconfigDepends = old.libraryPkgconfigDepends ++ [ pkgs.openblasCompat ]; }
);
odbc = overrideCabal super.odbc (
old: { librarySystemDepends = old.librarySystemDepends ++ [ pkgs.freetds ]; }
);
html-entities = null; # https://github.com/nikita-volkov/html-entities/issues/8
category = null; # conflict in Prelude.hs
constraint = null; # because of category
lame = null; # fails with 'Total ticks: 451489'
proto-lens-protobuf-types = overrideCabal super.proto-lens-protobuf-types (
old: { libraryToolDepends = old.libraryToolDepends ++ [ pkgs.protobuf ]; }
);
# libraft = null; # xxx/postgres/entries.sql: openFile: does not exist (No such file or directory) in libraft-0.2.0.0
xmlbf-xeno = null; # because of html-entities
xmonad = null; # xmonad requires extra patches for Nix
xmonad-contrib = null;
xmonad-extras = null;
hlibgit2 = disableHardening super.hlibgit2 [ "format" ];
};
})