diff --git a/midimory.cabal b/midimory.cabal
--- a/midimory.cabal
+++ b/midimory.cabal
@@ -1,6 +1,6 @@
 Cabal-Version: 2.2
 Name:          midimory
-Version:       0.0.2.2
+Version:       0.0.2.3
 Maintainer:    Henning Thielemann <alsa@henning-thielemann.de>
 Author:        Henning Thielemann <alsa@henning-thielemann.de>
 Category:      Sound, Music, Game, GUI
@@ -36,13 +36,17 @@
   > midimory &
   > aconnect Midimory TiMidity
 
+Extra-Source-Files:
+  wxc.nix
+  shell.nix
+
 Source-Repository head
   type:     darcs
   location: http://code.haskell.org/~thielema/midimory/
 
 Source-Repository this
   type:     darcs
-  tag:      0.0.2.2
+  tag:      0.0.2.3
   location: http://code.haskell.org/~thielema/midimory/
 
 Flag reactive
@@ -61,15 +65,15 @@
   GHC-Options: -Wall
   Default-Language: Haskell98
   Build-Depends:
-    wx >=0.12.1.6 && <0.93,
-    wxcore >=0.12.1.6 && <0.93,
+    wx >=0.12.1.6 && <0.94,
+    wxcore >=0.12.1.6 && <0.94,
     alsa-seq >=0.6 && <0.7,
     alsa-core >=0.5 && <0.6,
-    optparse-applicative >=0.14 && <0.18,
+    optparse-applicative >=0.14 && <0.19,
     shell-utility >=0.0 && <0.2,
     random >=1.0 && <1.3,
     transformers >=0.2 && <0.7,
-    containers >=0.2 && <0.7,
+    containers >=0.2 && <0.8,
     array >=0.4 && <0.6,
     utility-ht >=0.0.12 && <0.1,
     base >=3 && <5
@@ -88,16 +92,16 @@
   If flag(reactive)
     Build-Depends:
       reactive-banana-wx >=1.1 && <1.2,
-      reactive-banana >=1.1 && <1.2,
-      wx >=0.12.1.6 && <0.93,
-      wxcore >=0.12.1.6 && <0.93,
+      reactive-banana >=1.1 && <1.4,
+      wx >=0.12.1.6 && <0.94,
+      wxcore >=0.12.1.6 && <0.94,
       alsa-seq >=0.6 && <0.7,
       alsa-core >=0.5 && <0.6,
-      optparse-applicative >=0.14 && <0.18,
+      optparse-applicative >=0.14 && <0.19,
       shell-utility >=0.0 && <0.2,
       random >=1.0 && <1.3,
       transformers >=0.2 && <0.7,
-      containers >=0.2 && <0.7,
+      containers >=0.2 && <0.8,
       array >=0.4 && <0.6,
       utility-ht >=0.0.12 && <0.1,
       base >=3 && <5
diff --git a/shell.nix b/shell.nix
new file mode 100644
--- /dev/null
+++ b/shell.nix
@@ -0,0 +1,27 @@
+{ pkgs ? import <nixpkgs> {} }:
+
+let
+  wxc = pkgs.callPackage (import ./wxc.nix pkgs) {};
+
+in
+pkgs.mkShell {
+  nativeBuildInputs = [
+    pkgs.pkg-config
+  ];
+  buildInputs = [
+    wxc
+    pkgs.wxGTK32 # wxdirect needs wx-config
+    pkgs.libGL # for OpenGLRaw
+    pkgs.libGLU # for GLURaw
+# for compiling application packages in Nix
+    pkgs.haskell.compiler.ghc963
+    pkgs.cabal-install
+    pkgs.gmp
+    pkgs.numactl
+    pkgs.alsa-lib
+    pkgs.alsa-plugins
+  ];
+  shellHook = ''
+    export ALSA_PLUGIN_DIR=${pkgs.alsa-plugins}/lib/alsa-lib
+  '';
+}
diff --git a/src/Main.hs b/src/Main.hs
--- a/src/Main.hs
+++ b/src/Main.hs
@@ -34,7 +34,7 @@
 
 move :: MIDI.Sequencer -> GUI.T -> State -> ((Int,Int), WX.Button ()) -> IO ()
 move sequ gui (pitches, selected, player) (pos,b) = do
-   pitch <- (!pos) <$> readIORef pitches
+   pitch <- (! pos) <$> readIORef pitches
    MIDI.sendNote sequ pitch
    mfirst <- readIORef selected
    case mfirst of
diff --git a/src/Reactive.hs b/src/Reactive.hs
--- a/src/Reactive.hs
+++ b/src/Reactive.hs
@@ -43,7 +43,7 @@
          mapM
             (\(pos,button) -> do
                ev <- RBWX.event0 button command
-               return ((,) button . (!pos) <$> pitchesBe <@ ev)) $
+               return ((,) button . (! pos) <$> pitchesBe <@ ev)) $
          concat $ GUI.matrix gui
       RBWX.reactimate $ MIDI.sendNote sequ . snd <$> buttonPitchEv
       let accumRestart s0 ev =
diff --git a/wxc.nix b/wxc.nix
new file mode 100644
--- /dev/null
+++ b/wxc.nix
@@ -0,0 +1,10 @@
+pkgs:
+
+pkgs.fetchFromGitHub {
+  owner = "wxHaskell";
+  repo = "wxHaskell";
+  rev = "152d1e0f4ead34d76240727fab87185bc0a89c0b";
+  sha256 = "sha256-JYYt1D71jj6BZK8l9tq8he26ZUxXc48TdNBXnm402Ao=";
+}
++
+"/wxc/package.nix"
