diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,9 @@
+1.5.17
+
+* Add `optionsExt`: Extended version of `options` with header, footer,
+  porgram-description and version information in `--help` flag
+* Add `readlink`
+
 1.5.16
 
 * Add `cptreeL`
diff --git a/src/Turtle/Options.hs b/src/Turtle/Options.hs
--- a/src/Turtle/Options.hs
+++ b/src/Turtle/Options.hs
@@ -71,6 +71,7 @@
     , subcommand
     , subcommandGroup
     , options
+    , optionsExt
 
     ) where
 
@@ -107,6 +108,30 @@
     prefs = Opts.showHelpOnError
 #endif
 
+{-| Parse the given options from the command line and add additional information
+
+    Extended version of @options@ with program version header and footer information
+-}
+optionsExt :: MonadIO io => Header -> Footer  -> Description ->  Version -> Parser a -> io a
+optionsExt header footer desc version parser = liftIO
+    $ Opts.customExecParser (Opts.prefs prefs)
+    $ Opts.info (Opts.helper <*> versionOption <*> parser)
+                (Opts.headerDoc (Just (getHeader header)) <>
+                 Opts.footerDoc (Just (getFooter footer)) <>
+                 Opts.progDescDoc (Just (getDescription desc)))
+  where
+    versionOption =
+      Opts.infoOption
+        (Text.unpack version)
+        (Opts.long "version" <> Opts.help "Show version")
+    prefs :: Opts.PrefsMod
+#if MIN_VERSION_optparse_applicative(0,13,0)
+    prefs = Opts.showHelpOnError <> Opts.showHelpOnEmpty
+#else
+    prefs = Opts.showHelpOnError
+#endif
+
+
 {-| The name of a command-line argument
 
     This is used to infer the long name and metavariable for the command line
@@ -135,6 +160,21 @@
 newtype Description = Description { getDescription :: Doc }
     deriving (IsString)
 
+{-| Header of the program
+
+    This description will appear in the header of the @--help@ output
+-}
+newtype Header = Header { getHeader :: Doc }
+    deriving (IsString)
+{-| Footer of the program
+
+    This description will appear in the footer of the @--help@ output
+-}
+newtype Footer = Fotter { getFooter :: Doc }
+    deriving (IsString)
+
+-- | Program Version
+type Version = Text
 {-| A helpful message explaining what a flag does
 
     This will appear in the @--help@ output
diff --git a/src/Turtle/Prelude.hs b/src/Turtle/Prelude.hs
--- a/src/Turtle/Prelude.hs
+++ b/src/Turtle/Prelude.hs
@@ -121,6 +121,7 @@
     , cd
     , pwd
     , home
+    , readlink
     , realpath
     , mv
     , mkdir
@@ -942,6 +943,14 @@
 -- | Get the home directory
 home :: MonadIO io => io FilePath
 home = liftIO Filesystem.getHomeDirectory
+
+-- | Get the path pointed to by a symlink
+readlink :: MonadIO io => FilePath -> io FilePath
+readlink =
+      fmap Filesystem.decodeString
+    . liftIO
+    . System.Directory.getSymbolicLinkTarget
+    . Filesystem.encodeString
 
 -- | Canonicalize a path
 realpath :: MonadIO io => FilePath -> io FilePath
diff --git a/src/Turtle/Tutorial.hs b/src/Turtle/Tutorial.hs
--- a/src/Turtle/Tutorial.hs
+++ b/src/Turtle/Tutorial.hs
@@ -116,6 +116,9 @@
     -- * Conclusion
     -- $conclusion
 
+    -- * Nix scripts
+    -- $nix
+
     -- * FAQ
     -- $faq
     ) where
@@ -1796,6 +1799,31 @@
 -- still benefit from adding more utilities for better parity with the Unix
 -- ecosystem.  Pull requests to add new utilities are highly welcome!
 
+-- $nix
+--
+-- You can also turn `turtle` scripts into runnable scripts using Nix, like
+-- this:
+--
+-- > #! /usr/bin/env nix-shell
+-- > #! nix-shell -i runghc --packages "ghc.withPackages (x: [ x.turtle ])"
+-- > 
+-- > {-# LANGUAGE OverloadedStrings #-}
+-- > 
+-- > import Turtle
+-- > 
+-- > main = echo "Hello, world!"
+--
+-- ... or create an auto-reloading script like this:
+--
+-- > #! /usr/bin/env nix-shell
+-- > #! nix-shell -i "ghcid -T main" --packages ghcid "ghc.withPackages (x: [ x.turtle ])"
+-- > 
+-- > {-# LANGUAGE OverloadedStrings #-}
+-- > 
+-- > import Turtle
+-- > 
+-- > main = echo "Hello, world!"
+
 -- $faq
 --
 -- These are the most frequently asked questions from new users:
@@ -1853,3 +1881,4 @@
 -- like this:
 --
 -- > Turtle.system (System.Process.proc "/bin/sh" []) empty
+
diff --git a/turtle.cabal b/turtle.cabal
--- a/turtle.cabal
+++ b/turtle.cabal
@@ -1,5 +1,5 @@
 Name: turtle
-Version: 1.5.16
+Version: 1.5.17
 Cabal-Version: >=1.10
 Build-Type: Simple
 License: BSD3
@@ -7,7 +7,6 @@
 Copyright: 2015 Gabriel Gonzalez
 Author: Gabriel Gonzalez
 Maintainer: Gabriel439@gmail.com
-Tested-With: GHC == 7.10.2, GHC == 8.0.1
 Bug-Reports: https://github.com/Gabriel439/Haskell-Turtle-Library/issues
 Synopsis: Shell programming, Haskell-style
 Description: @turtle@ is a reimplementation of the Unix command line environment
@@ -55,7 +54,7 @@
         bytestring           >= 0.9.1.8 && < 0.11,
         clock                >= 0.4.1.2 && < 0.9 ,
         containers           >= 0.5.0.0 && < 0.7 ,
-        directory            >= 1.0.7   && < 1.4 ,
+        directory            >= 1.3.1.0 && < 1.4 ,
         exceptions           >= 0.4     && < 0.11,
         foldl                >= 1.1     && < 1.5 ,
         hostname                           < 1.1 ,
