diff --git a/automated/nix-build/README.md b/automated/nix-build/README.md new file mode 100644 index 00000000..56901b26 --- /dev/null +++ b/automated/nix-build/README.md @@ -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. diff --git a/automated/nix-build/build.sh b/automated/nix-build/build.sh new file mode 100644 index 00000000..62918fe5 --- /dev/null +++ b/automated/nix-build/build.sh @@ -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 diff --git a/automated/nix-build/fetch-nixpkgs.nix b/automated/nix-build/fetch-nixpkgs.nix new file mode 100644 index 00000000..29cac91f --- /dev/null +++ b/automated/nix-build/fetch-nixpkgs.nix @@ -0,0 +1,23 @@ +let + spec = builtins.fromJSON (builtins.readFile ./nixpkgs-src.json); + src = import { + url = "https://github.com/${spec.owner}/${spec.repo}/archive/${spec.rev}.tar.gz"; + inherit (spec) sha256; + }; + nixcfg = import ; +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; +} diff --git a/automated/nix-build/nixpkgs-src.json b/automated/nix-build/nixpkgs-src.json new file mode 100644 index 00000000..00ed9d5d --- /dev/null +++ b/automated/nix-build/nixpkgs-src.json @@ -0,0 +1,6 @@ +{ + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "c2950341d038995bf46a7b72db961bb3d3e9ac12", + "sha256": "0ghirjm6xvsihci3fladrn4nrnh2yr529v7c406hmw0yp25kv0i4" +} diff --git a/automated/nix-build/snapshot-fixed.nix b/automated/nix-build/snapshot-fixed.nix new file mode 100644 index 00000000..bac92a89 --- /dev/null +++ b/automated/nix-build/snapshot-fixed.nix @@ -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" ]; + }; + })