diff --git a/shell.nix b/shell.nix new file mode 100644 index 0000000..57f3ce3 --- /dev/null +++ b/shell.nix @@ -0,0 +1,89 @@ +{ nixpkgs ? import {}, compiler ? "default", doBenchmark ? false }: + +let + + inherit (nixpkgs) pkgs; + + nanovgNeko = with haskellPackages; callPackage ({ + mkDerivation, base, bytestring, c2hs, containers, glew, hspec, + inline-c, libGL, libGLU, QuickCheck, text, vector, pkgconfig }: + mkDerivation { + pname = "nanovg"; + version = "0.5.2.0"; + #src = pkgs.fetchFromGitHub { + # owner = "nek0"; + # repo = "nanovg-hs"; + # rev = "21868dc2c8e6eae8e7c0962d22890a8f2522cab0"; + # sha256 = "0diyyajniyxzmg5za34crwwlajf40x8bplja6mbgv2syax5d446d"; + # fetchSubmodules = true; + #}; + src = ../nanovg-hs; + revision = "1"; + isLibrary = true; + isExecutable = true; + doCheck = false; + libraryHaskellDepends = [ base bytestring containers text vector ]; + librarySystemDepends = [ glew libGL libGLU pkgconfig ]; + libraryToolDepends = [ c2hs ]; + testHaskellDepends = [ base containers hspec inline-c QuickCheck ]; + homepage = "https://github.com/cocreature/nanovg-hs"; + description = "Haskell bindings for nanovg"; + license = pkgs.stdenv.lib.licenses.isc; + hydraPlatforms = pkgs.stdenv.lib.platforms.none; + }) { inherit (pkgs) glew; inherit (pkgs) libGL; inherit (pkgs) libGLU; inherit (pkgs) pkgconfig; }; + + affectionNeko = with haskellPackages; callPackage ({ mkDerivation + , base, bytestring, clock, containers, glib, linear, monad-loops, monad-parallel + , mtl, OpenGL, sdl2, stdenv, stm, text, uuid, vector }: + mkDerivation { + pname = "affection"; + version = "0.0.0.9"; + #src = pkgs.fetchFromGitHub { + # owner = "nek0"; + # repo = "affection"; + # rev = "33c99b8888328e4ed17f5c65ac49f5eab2645549"; + # sha256 = "0psqxqj1a8l5fia49ay2pb72kjnw5i54m6dcmrpz5hi1654aznll"; + #}; + src = ../affection; + revision = "1"; + isLibrary = true; + libraryHaskellDepends = [ + base bytestring clock containers glib linear monad-loops + monad-parallel mtl OpenGL sdl2 stm text uuid vector + ]; + librarySystemDepends = [ ]; + libraryToolDepends = [ ]; + testHaskellDepends = [ ]; + homepage = "https://github.com/nek0/affection"; + description = "A simple Game Engine in Haskell using SDL"; + license = pkgs.stdenv.lib.licenses.gpl3; + hydraPlatforms = pkgs.stdenv.lib.platforms.none; + }) { }; + + f = { mkDerivation, base, containers, ecstasy, linear + , matrix, OpenGL, random, sdl2, stdenv, stm, text, vector + }: + mkDerivation { + pname = "tracer-game"; + version = "0.0.0.0"; + src = ./.; + isLibrary = false; + isExecutable = true; + executableHaskellDepends = [ + affectionNeko base containers ecstasy linear matrix nanovgNeko OpenGL + random sdl2 stm text vector + ]; + license = stdenv.lib.licenses.gpl3; + }; + + 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