diff --git a/cabal2nix.cabal b/cabal2nix.cabal
--- a/cabal2nix.cabal
+++ b/cabal2nix.cabal
@@ -1,5 +1,5 @@
 Name:                   cabal2nix
-Version:                1.54
+Version:                1.55
 Copyright:              Peter Simons, Andres Loeh
 License:                BSD3
 License-File:           LICENSE
@@ -34,8 +34,8 @@
   .
   The only required argument is the path to the cabal file. For example:
   .
-  > cabal2nix http://hackage.haskell.org/packages/archive/cabal2nix/1.54/cabal2nix.cabal
-  > cabal2nix cabal://cabal2nix-1.54
+  > cabal2nix http://hackage.haskell.org/packages/archive/cabal2nix/1.55/cabal2nix.cabal
+  > cabal2nix cabal://cabal2nix-1.55
   .
   If the @--sha256@ option has not been specified, cabal2nix calls
   @nix-prefetch-url@ to determine the hash automatically. This causes
diff --git a/src/Cabal2Nix/Flags.hs b/src/Cabal2Nix/Flags.hs
--- a/src/Cabal2Nix/Flags.hs
+++ b/src/Cabal2Nix/Flags.hs
@@ -6,7 +6,6 @@
 configureCabalFlags :: PackageIdentifier -> FlagAssignment
 configureCabalFlags (PackageIdentifier (PackageName name) _)
  | name == "accelerate-examples"= [disable "opencl"]
- | name == "pandoc"             = [enable "blaze_html_0_5"]
  | name == "git-annex"          = [ enable "S3", enable "WebDAV", enable "Inotify"
                                   , enable "Dbus", enable "Assistant", enable "Webapp"
                                   , enable "Pairing", enable "XMPP", enable "DNS"
diff --git a/src/Cabal2Nix/Generate.hs b/src/Cabal2Nix/Generate.hs
--- a/src/Cabal2Nix/Generate.hs
+++ b/src/Cabal2Nix/Generate.hs
@@ -30,6 +30,7 @@
   , runHaddock     = True
   , jailbreak      = False
   , doCheck        = True
+  , testTarget     = ""
   , phaseOverrides = ""
   , metaSection    = Meta
                    { homepage    = Cabal.homepage descr
diff --git a/src/Cabal2Nix/Hackage.hs b/src/Cabal2Nix/Hackage.hs
--- a/src/Cabal2Nix/Hackage.hs
+++ b/src/Cabal2Nix/Hackage.hs
@@ -11,6 +11,7 @@
 import System.Directory ( doesFileExist, getHomeDirectory, createDirectoryIfMissing )
 import System.FilePath ( dropFileName, (</>), (<.>) )
 import System.Process ( readProcess )
+import Control.Exception (handle, SomeException(..))
 
 import qualified Distribution.Hackage.DB as DB
 
@@ -35,12 +36,19 @@
     exists <- doesFileExist cachePath
     hash' <- if exists
                then readFile cachePath
-               else readProcess "bash" ["-c", "exec nix-prefetch-url 2>/dev/tty " ++ hackagePath pkg TarGz] ""
+               else getHackageHash
     let hash = reverse (dropWhile (=='\n') (reverse hash'))
     unless exists $ do
       createDirectoryIfMissing True (dropFileName cachePath)
       writeFile cachePath hash
     return hash
+  where getHackageHash = do
+            let command = "exec nix-prefetch-url 2>/dev/tty " ++ hackagePath pkg TarGz
+            handle handlePrefetchError (readProcess "bash" ["-c", command] "")
+        handlePrefetchError (SomeException _) = do
+           error $ "\nError: Cannot compute hash. (Not a hackage project?)\n" ++
+                  "Specify hash explicitly via --sha256 and add appropriate \"src\" attribute " ++
+                  "to resulting nix expression."
 
 hashCachePath :: PackageIdentifier -> IO FilePath
 hashCachePath (PackageIdentifier (PackageName name) version') = do
diff --git a/src/Cabal2Nix/Name.hs b/src/Cabal2Nix/Name.hs
--- a/src/Cabal2Nix/Name.hs
+++ b/src/Cabal2Nix/Name.hs
@@ -53,9 +53,12 @@
 libNixName "libglade-2.0"       = return "libglade"
 libNixName "libgsasl"           = return "gsasl"
 libNixName "librsvg-2.0"        = return "librsvg"
+libNixName "libusb-1.0"         = return "libusb"
 libNixName "libxml-2.0"         = return "libxml2"
 libNixName "libzip"             = return "libzip"
 libNixName "m"                  = []  -- in stdenv
+libNixName "ncursesw"           = return "ncurses"
+libNixName "panelw"             = return "ncurses"
 libNixName "pangocairo"         = return "pango"
 libNixName "pcre"               = return "pcre"
 libNixName "png"                = return "libpng"
diff --git a/src/Cabal2Nix/PostProcess.hs b/src/Cabal2Nix/PostProcess.hs
--- a/src/Cabal2Nix/PostProcess.hs
+++ b/src/Cabal2Nix/PostProcess.hs
@@ -13,13 +13,15 @@
   | pname == "cairo"            = deriv { extraLibs = "pkgconfig":"libc":"cairo":"zlib":extraLibs }
   | pname == "cuda"             = deriv { phaseOverrides = cudaConfigurePhase, extraLibs = "cudatoolkit":"nvidia_x11":"self.stdenv.gcc":extraLibs }
   | pname == "darcs"            = deriv { phaseOverrides = darcsInstallPostInstall }
+  | pname == "dns"              = deriv { testTarget = "spec" }
   | pname == "editline"         = deriv { extraLibs = "libedit":extraLibs }
   | pname == "epic"             = deriv { extraLibs = "gmp":"boehmgc":extraLibs, buildTools = "happy":buildTools }
   | pname == "ghc-heap-view"    = deriv { phaseOverrides = ghciPostInstall }
   | pname == "ghc-mod"          = deriv { phaseOverrides = ghcModPostInstall, buildTools = "emacs":buildTools }
   | pname == "ghc-paths"        = deriv { phaseOverrides = ghcPathsPatches }
   | pname == "ghc-vis"          = deriv { phaseOverrides = ghciPostInstall }
-  | pname == "git-annex"        = deriv { phaseOverrides = gitAnnexOverrides, buildTools = "git":"rsync":"gnupg1":"curl":"lsof":"openssh":"which":"bup":buildTools }
+  | pname == "git-annex"        = deriv { phaseOverrides = gitAnnexOverrides, buildTools = "git":"rsync":"gnupg1":"curl":"lsof":"openssh":"which":"bup":"perl":buildTools }
+  | pname == "github-backup"    = deriv { buildTools = "git":buildTools }
   | pname == "glade"            = deriv { extraLibs = "pkgconfig":"libc":extraLibs, pkgConfDeps = "gtkC":delete "gtk" pkgConfDeps }
   | pname == "glib"             = deriv { extraLibs = "pkgconfig":"libc":extraLibs }
   | pname == "GLUT"             = deriv { extraLibs = "glut":"libSM":"libICE":"libXmu":"libXi":"mesa":extraLibs }
@@ -35,18 +37,20 @@
   | pname == "highlighting-kate"= highlightingKatePostProcessing deriv
   | pname == "hmatrix"          = deriv { extraLibs = "gsl":"liblapack":"blas":extraLibs }
   | pname == "hspec"            = deriv { doCheck = False }
-  | pname == "idris"            = if version < Version [0,9,9] []
-                                    then deriv { buildTools = "happy":buildTools, extraLibs = "gmp":extraLibs }
-                                    else deriv { buildTools = "happy":buildTools, extraLibs = "gmp":"boehmgc":extraLibs }
+  | pname == "idris"            = deriv { buildTools = "happy":buildTools, extraLibs = "gmp":"boehmgc":extraLibs }
   | pname == "language-c-quote" = deriv { buildTools = "alex":"happy":buildTools }
   | pname == "language-java"    = deriv { buildDepends = "syb":buildDepends }
   | pname == "leksah-server"    = deriv { buildDepends = "process-leksah":buildDepends }
   | pname == "lhs2tex"          = deriv { extraLibs = "texLive":extraLibs, phaseOverrides = lhs2texPostInstall }
   | pname == "libffi"           = deriv { extraLibs = delete "ffi" extraLibs }
   | pname == "llvm-base"        = deriv { extraLibs = "llvm":extraLibs }
+  | pname == "llvm-general"     = deriv { doCheck = False }
+  | pname == "llvm-general-pure"= deriv { doCheck = False }
   | pname == "multiarg"         = deriv { buildDepends = "utf8String":buildDepends }
+  | pname == "ncurses"          = deriv { phaseOverrides = ncursesPatchPhase }
   | pname == "OpenAL"           = deriv { extraLibs = "openal":extraLibs }
   | pname == "OpenGL"           = deriv { extraLibs = "mesa":"libX11":extraLibs }
+  | pname == "pandoc"           = deriv { buildDepends = "alex":"happy":buildDepends }
   | pname == "pango"            = deriv { extraLibs = "pkgconfig":"libc":extraLibs }
   | pname == "pcap"             = deriv { extraLibs = "libpcap":extraLibs }
   | pname == "persistent"       = deriv { extraLibs = "sqlite3":extraLibs }
@@ -58,6 +62,7 @@
   | pname == "svgcairo"         = deriv { extraLibs = "libc":extraLibs }
   | pname == "terminfo"         = deriv { extraLibs = "ncurses":extraLibs }
   | pname == "threadscope"      = deriv { configureFlags = "--ghc-options=-rtsopts":configureFlags }
+  | pname == "trifecta"         = deriv { phaseOverrides = trifectaPostPatch }
   | pname == "vacuum"           = deriv { extraLibs = "ghcPaths":extraLibs }
   | pname == "wxc"              = deriv { extraLibs = "wxGTK":"mesa":"libX11":extraLibs, phaseOverrides = wxcPostInstall }
   | pname == "wxcore"           = deriv { extraLibs = "wxGTK":"mesa":"libX11":extraLibs }
@@ -106,6 +111,14 @@
   , "  cd .."
   , "  ensureDir \"$out/share/emacs\""
   , "  mv $pname-$version emacs/site-lisp"
+  , "  mv $out/bin/ghc-mod $out/ghc-mod"
+  , "  cat - > $out/bin/ghc-mod <<EOF"
+  , "  #!/bin/sh"
+  , "  COMMAND=\\$1"
+  , "  shift"
+  , "  eval exec $out/ghc-mod \\$COMMAND \\$( ${self.ghc.GHCGetPackages} ${self.ghc.ghcVersion} | tr \" \" \"\\n\" | tail -n +2 | paste -d \" \" - - | sed 's/.*/-g \"&\"/' | tr \"\\n\" \" \") \"\\$@\""
+  , "  EOF"
+  , "  chmod +x $out/bin/ghc-mod"
   , "'';"
   ]
 
@@ -149,7 +162,7 @@
 gitAnnexOverrides :: String
 gitAnnexOverrides = unlines
   [ "preConfigure = \"patchShebangs .\";"
-  , "installPhase = \"make PREFIX=$out CABAL=./Setup docs install\";"
+  , "installPhase = \"./Setup install\";"
   , "checkPhase = ''"
   , "  export HOME=\"$NIX_BUILD_TOP/tmp\""
   , "  mkdir \"$HOME\""
@@ -187,5 +200,18 @@
   , "  mkdir -p \"$out/share/doc/$name\""
   , "  cp doc/Guide2.pdf $out/share/doc/$name"
   , "  mkdir -p \"$out/nix-support\""
+  , "'';"
+  ]
+
+ncursesPatchPhase :: String
+ncursesPatchPhase = "patchPhase = \"find . -type f -exec sed -i -e 's|ncursesw/||' {} \\\\;\";"
+
+trifectaPostPatch :: String
+trifectaPostPatch = unlines
+  [ "postPatch = ''"
+  , "  substituteInPlace trifecta.cabal \\"
+  , "    --replace \"blaze-html           >= 0.5     && < 0.6,\" \"blaze-html           >= 0.5     && < 0.7,\" \\"
+  , "    --replace \"hashable             >= 1.2     && < 1.3,\" \"hashable             >= 1.1     && < 1.3,\" \\"
+  , "    --replace \"fingertree           >= 0.0.1   && < 0.1,\" \"fingertree           >= 0.0.1   && < 0.2,\""
   , "'';"
   ]
diff --git a/src/Distribution/NixOS/Derivation/Cabal.hs b/src/Distribution/NixOS/Derivation/Cabal.hs
--- a/src/Distribution/NixOS/Derivation/Cabal.hs
+++ b/src/Distribution/NixOS/Derivation/Cabal.hs
@@ -56,6 +56,7 @@
   , runHaddock          :: Bool
   , jailbreak           :: Bool
   , doCheck             :: Bool
+  , testTarget          :: String
   , phaseOverrides      :: String
   , metaSection         :: Meta
   }
@@ -87,6 +88,7 @@
     , boolattr "noHaddock" (not (runHaddock deriv)) (not (runHaddock deriv))
     , boolattr "jailbreak" (jailbreak deriv) (jailbreak deriv)
     , boolattr "doCheck" (not (doCheck deriv)) (doCheck deriv)
+    , onlyIf (testTarget deriv) $ attr "testTarget" $ string (testTarget deriv)
     , onlyIf (phaseOverrides deriv) $ vcat ((map text . lines) (phaseOverrides deriv))
     , disp (metaSection deriv)
     ]
@@ -131,6 +133,7 @@
                   , runHaddock     = noHaddock /= ["true"]
                   , jailbreak      = jailBreak == ["true"]
                   , doCheck        = docheck == ["true"] || null docheck
+                  , testTarget     = ""
                   , phaseOverrides = ""
                   , metaSection  = Meta
                                    { homepage    = ""
diff --git a/src/cabal2nix.hs b/src/cabal2nix.hs
--- a/src/cabal2nix.hs
+++ b/src/cabal2nix.hs
@@ -18,7 +18,7 @@
 data Configuration = Configuration
   { optPrintHelp :: Bool
   , optPrintVersion :: Bool
-  , optSha256 :: String
+  , optSha256 :: Maybe String
   , optMaintainer :: [String]
   , optPlatform :: [String]
   , optHaddock :: Bool
@@ -31,7 +31,7 @@
 defaultConfiguration = Configuration
   { optPrintHelp = False
   , optPrintVersion = False
-  , optSha256 = ""
+  , optSha256 = Nothing
   , optMaintainer = []
   , optPlatform = []
   , optHaddock = True
@@ -42,7 +42,7 @@
 options :: [OptDescr (Configuration -> Configuration)]
 options =
   [ Option "h" ["help"]       (NoArg (\o -> o { optPrintHelp = True }))                                  "show this help text"
-  , Option ""  ["sha256"]     (ReqArg (\x o -> o { optSha256 = x }) "HASH")                              "sha256 hash of source tarball"
+  , Option ""  ["sha256"]     (ReqArg (\x o -> o { optSha256 = Just x }) "HASH")                              "sha256 hash of source tarball"
   , Option "m" ["maintainer"] (ReqArg (\x o -> o { optMaintainer = x : optMaintainer o }) "MAINTAINER")  "maintainer of this package (may be specified multiple times)"
   , Option "p" ["platform"]   (ReqArg (\x o -> o { optPlatform = x : optPlatform o }) "PLATFORM")        "supported build platforms (may be specified multiple times)"
   , Option ""  ["no-haddock"] (NoArg (\o -> o { optHaddock = False }))                                   "don't run Haddock when building this package"
@@ -84,7 +84,9 @@
                exitFailure
 
   let packageId = package (packageDescription cabal)
-  sha <- if null (optSha256 cfg) then hashPackage packageId else return (optSha256 cfg)
+  sha <- case optSha256 cfg of
+              Just hash -> return hash
+              Nothing -> hashPackage packageId
 
   let deriv  = (cabal2nix cabal) { sha256 = sha, runHaddock = optHaddock cfg, jailbreak = optJailbreak cfg }
       deriv' = deriv { metaSection = (metaSection deriv)
