aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authortv <tv@krebsco.de>2019-01-13 23:44:51 +0100
committertv <tv@krebsco.de>2019-01-21 00:19:34 +0100
commite7cf3d3c66e6c72653d7548b1226d89bf8ff2a25 (patch)
tree43e58445d86aeded76c07b925bf01f02c4de965b
parent5371e75c194770b1bca60d3ff6bca109b3eb0033 (diff)
shell.nix: init
-rw-r--r--shell.nix52
1 files changed, 52 insertions, 0 deletions
diff --git a/shell.nix b/shell.nix
new file mode 100644
index 0000000..8887d3e
--- /dev/null
+++ b/shell.nix
@@ -0,0 +1,52 @@
+{ compiler ? "default" }: let
+
+ stockholm = import <stockholm>;
+
+ inherit (stockholm.systems.${lib.krops.getHostName}) config pkgs;
+ inherit (stockholm) lib;
+
+ haskellPackages =
+ if compiler == "default"
+ then pkgs.haskellPackages
+ else pkgs.haskell.packages.${compiler};
+
+ drv = haskellPackages.callPackage (import ./.) {};
+
+ exeName = "Reaktor";
+in
+
+ lib.overrideDerivation drv.env (oldAttrs: {
+ shellHook = ''
+ pname=${lib.shell.escape (lib.baseNameOf (toString ./.))}
+
+ WORKDIR=${toString ./.}
+ CACHEDIR=$HOME/tmp/$pname
+ HISTFILE=$CACHEDIR/bash_history
+
+ mkdir -p "$CACHEDIR"
+
+ main=$CACHEDIR/main-${lib.currentSystem}
+
+ build() {(
+ set -efu
+ cd "$WORKDIR"
+ options=$(
+ ${pkgs.cabal-read}/bin/ghc-options "$WORKDIR/$pname.cabal" ${exeName}
+ )
+ ghc $options \
+ -odir "$CACHEDIR" \
+ -hidir "$CACHEDIR" \
+ -o "$main" \
+ -isrc \
+ src/main.hs
+ )}
+
+ run() {(
+ set -efu
+ cd "$WORKDIR"
+ exec "$main" "$@"
+ )}
+
+ cd "$WORKDIR"
+ '';
+ })