diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
diff --git a/Setup.hs b/Setup.hs
new file mode 100644
--- /dev/null
+++ b/Setup.hs
@@ -0,0 +1,2 @@
+import Distribution.Simple
+main = defaultMain
diff --git a/hydrogen-prelude.cabal b/hydrogen-prelude.cabal
new file mode 100644
--- /dev/null
+++ b/hydrogen-prelude.cabal
@@ -0,0 +1,40 @@
+name:                 hydrogen-prelude
+version:              0.1.0.0
+synopsis:             Hydrogen Prelude
+license:              BSD3
+license-file:         LICENSE
+author:               Julian Fleischer
+maintainer:           julfleischer@paypal.com
+category:             Language
+build-type:           Simple
+cabal-version:        >=1.18
+
+library
+  other-modules:      Hydrogen.Prelude
+                      , Hydrogen.Prelude.Extra
+                      , Hydrogen.Prelude.IO
+                      , Hydrogen.Prelude.System
+  build-depends:      base ==4.7.*
+                      , containers ==0.5.*
+                      , directory ==1.2.*
+                      , filepath ==1.3.*
+                      , hashable ==1.2.*
+                      , process ==1.2.*
+                      , random ==1.0.*
+                      , regex-base ==0.93.*
+                      , regex-tdfa ==1.2.*
+                      , time ==1.4.*
+                      , transformers ==0.3.*
+                      , uuid ==1.3.*
+  hs-source-dirs:     src
+  ghc-options:        -Wall
+  default-language:   Haskell2010
+  default-extensions: CPP
+                      , FlexibleInstances
+                      , FlexibleContexts
+                      , GADTs
+                      , MultiWayIf
+                      , NoImplicitPrelude
+                      , PackageImports
+                      , ScopedTypeVariables
+
diff --git a/src/Hydrogen/Prelude.hs b/src/Hydrogen/Prelude.hs
new file mode 100644
--- /dev/null
+++ b/src/Hydrogen/Prelude.hs
@@ -0,0 +1,101 @@
+module Hydrogen.Prelude (
+    module Prelude
+  , module Control.Applicative
+  , module Control.Arrow
+  , module Control.Monad
+  , module Data.Bool
+  , module Data.Char
+  , module Data.Either
+  , module Data.Function
+  , module Data.Functor.Identity
+  , module Data.Functor.Reverse
+  , module Data.Hashable
+  , module Data.Foldable
+  , module Data.Int
+  , module Data.List
+  , module Data.Maybe
+  , module Data.Ord
+  , module Data.String
+  , module Data.Time
+  , module Data.Tuple
+  , module Data.Word
+  , module Text.Printf
+  , (.&), (.|), (=~), (=~~)
+  ) where
+
+import "base" Prelude hiding (
+    all
+  , and
+  , any
+  , concat
+  , concatMap
+  , elem
+  , foldl
+  , foldl1
+  , foldr
+  , foldr1
+  , mapM_
+  , maximum
+  , minimum
+  , notElem
+  , or
+  , product
+  , sequence_
+  , sum
+  )
+
+import "base" Control.Applicative
+import "base" Control.Arrow
+import "base" Control.Monad hiding (
+    forM_
+  , mapM_
+  , msum
+  , sequence_
+  )
+
+import "base" Data.Bool
+import "base" Data.Char
+import "base" Data.Either
+import "base" Data.Foldable
+import "base" Data.Function
+import "transformers" Data.Functor.Identity (Identity (..))
+import "transformers" Data.Functor.Reverse (Reverse (..))
+import "hashable" Data.Hashable
+import "base" Data.Int
+import "base" Data.List hiding (
+    all
+  , and
+  , any
+  , concat
+  , concatMap
+  , elem
+  , find
+  , foldl
+  , foldl'
+  , foldl1
+  , foldr
+  , foldr1
+  , maximum
+  , minimum
+  , maximumBy
+  , minimumBy
+  , notElem
+  , or
+  , product
+  , sum
+  )
+import "base" Data.Maybe
+import "base" Data.Ord
+import "base" Data.String
+import "time" Data.Time
+import "base" Data.Tuple
+import "base" Data.Word
+
+import "base" Text.Printf
+import "regex-tdfa" Text.Regex.TDFA
+
+(.|), (.&) :: (a -> Bool) -> (a -> Bool) -> (a -> Bool)
+f .| g = \x -> f x || g x
+f .& g = \x -> f x && g x
+
+
diff --git a/src/Hydrogen/Prelude/Extra.hs b/src/Hydrogen/Prelude/Extra.hs
new file mode 100644
--- /dev/null
+++ b/src/Hydrogen/Prelude/Extra.hs
@@ -0,0 +1,21 @@
+module Hydrogen.Prelude.Extra (
+    uuidFromString
+  , randomUUID
+  ) where
+
+import Hydrogen.Prelude
+
+import "uuid" Data.UUID hiding (
+    fromString
+  , null
+  )
+
+import qualified "uuid" Data.UUID
+import qualified "uuid" Data.UUID.V4
+
+uuidFromString :: String -> Maybe UUID
+uuidFromString = Data.UUID.fromString
+
+randomUUID :: IO UUID
+randomUUID = Data.UUID.V4.nextRandom
+
diff --git a/src/Hydrogen/Prelude/IO.hs b/src/Hydrogen/Prelude/IO.hs
new file mode 100644
--- /dev/null
+++ b/src/Hydrogen/Prelude/IO.hs
@@ -0,0 +1,27 @@
+module Hydrogen.Prelude.IO (
+    module Hydrogen.Prelude
+  , module Control.Concurrent
+  , module Control.Exception
+  , module Control.Monad
+  , module Data.IORef
+  , module System.IO
+  , module System.Timeout
+) where
+
+import Hydrogen.Prelude
+
+import "base" Data.IORef
+
+import "base" Control.Concurrent
+import "base" Control.Exception
+import "base" Control.Monad hiding (
+    forM_
+  , mapM_
+  , msum
+  , sequence_
+  )
+
+import "base" System.IO
+import "base" System.Timeout
+
+
diff --git a/src/Hydrogen/Prelude/System.hs b/src/Hydrogen/Prelude/System.hs
new file mode 100644
--- /dev/null
+++ b/src/Hydrogen/Prelude/System.hs
@@ -0,0 +1,23 @@
+module Hydrogen.Prelude.System (
+    module Hydrogen.Prelude.IO
+  , module System.CPUTime
+  , module System.Directory
+  , module System.Environment
+  , module System.Exit
+  , module System.FilePath
+  , module System.Info
+  , module System.Process
+  , module System.Random
+) where
+
+import Hydrogen.Prelude.IO
+
+import "base" System.CPUTime
+import "directory" System.Directory
+import "base" System.Environment
+import "base" System.Exit
+import "filepath" System.FilePath
+import "base" System.Info
+import "process" System.Process
+import "random" System.Random
+
