diff --git a/.gitignore b/.gitignore index 2faa072..ee8a999 100644 --- a/.gitignore +++ b/.gitignore @@ -3,5 +3,3 @@ **/#* **/.#* result -/default.nix -/shell.nix diff --git a/.travis.yml b/.travis.yml index 1c24d51..79cedc9 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,4 +4,4 @@ env: language: nix -script: nix-build --argstr compiler "$GHCVERSION" +script: nix-build build.nix --argstr compiler "$GHCVERSION" diff --git a/build.nix b/build.nix new file mode 100644 index 0000000..ea97fbf --- /dev/null +++ b/build.nix @@ -0,0 +1,9 @@ +{ nixpkgs ? import {}, compiler ? null }: +let + haskellPackages = if compiler == null + # use the current default version + then nixpkgs.pkgs.haskellPackages + else nixpkgs.pkgs.haskell.packages.${compiler}; +in + +haskellPackages.callPackage ./default.nix {} diff --git a/default.nix b/default.nix new file mode 100644 index 0000000..82d4f85 --- /dev/null +++ b/default.nix @@ -0,0 +1,27 @@ +{ mkDerivation, ansi-wl-pprint, base, containers, criterion +, data-fix, deepseq, deriving-compat, parsers, regex-tdfa +, regex-tdfa-text, semigroups, stdenv, tasty, tasty-hunit, tasty-th +, text, transformers, trifecta, unordered-containers +}: +mkDerivation { + pname = "hnix"; + version = "0.4.0"; + src = ./.; + isLibrary = true; + isExecutable = true; + libraryHaskellDepends = [ + ansi-wl-pprint base containers data-fix deepseq deriving-compat + parsers regex-tdfa regex-tdfa-text semigroups text transformers + trifecta unordered-containers + ]; + executableHaskellDepends = [ + ansi-wl-pprint base containers data-fix deepseq + ]; + testHaskellDepends = [ + base containers data-fix tasty tasty-hunit tasty-th text + ]; + benchmarkHaskellDepends = [ base containers criterion text ]; + homepage = "http://github.com/jwiegley/hnix"; + description = "Haskell implementation of the Nix language"; + license = stdenv.lib.licenses.bsd3; +} diff --git a/shell.nix b/shell.nix new file mode 100644 index 0000000..b626814 --- /dev/null +++ b/shell.nix @@ -0,0 +1,45 @@ +{ nixpkgs ? import {}, compiler ? "default", doBenchmark ? false }: + +let + + inherit (nixpkgs) pkgs; + + f = { mkDerivation, ansi-wl-pprint, base, containers, criterion + , data-fix, deepseq, deriving-compat, parsers, regex-tdfa + , regex-tdfa-text, semigroups, stdenv, tasty, tasty-hunit, tasty-th + , text, transformers, trifecta, unordered-containers + }: + mkDerivation { + pname = "hnix"; + version = "0.4.0"; + src = ./.; + isLibrary = true; + isExecutable = true; + libraryHaskellDepends = [ + ansi-wl-pprint base containers data-fix deepseq deriving-compat + parsers regex-tdfa regex-tdfa-text semigroups text transformers + trifecta unordered-containers + ]; + executableHaskellDepends = [ + ansi-wl-pprint base containers data-fix deepseq + ]; + testHaskellDepends = [ + base containers data-fix tasty tasty-hunit tasty-th text + ]; + benchmarkHaskellDepends = [ base containers criterion text ]; + homepage = "http://github.com/jwiegley/hnix"; + description = "Haskell implementation of the Nix language"; + license = stdenv.lib.licenses.bsd3; + }; + + haskellPackages = if compiler == "default" + then pkgs.haskellPackages + else pkgs.haskell.packages.${compiler}; + + variant = if doBenchmark then pkgs.haskell.lib.doBenchmark else pkgs.lib.id; + + drv = variant (haskellPackages.callPackage f {}); + +in + + if pkgs.lib.inNixShell then drv.env else drv